diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..f7d6263d9a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,82 @@ +# Changelog +## v1.0.7 +* [\#120](https://github.com/binance-chain/bsc/pull/120) add health check endpoint +* [\#116](https://github.com/binance-chain/bsc/pull/116) validator only write database state when enough distance +* [\#115](https://github.com/binance-chain/bsc/pull/115) add batch query methods +* [\#112](https://github.com/binance-chain/bsc/pull/112) apply max commit tx time for miner worker to avoid empty block +* [\#101](https://github.com/binance-chain/bsc/pull/101) apply block number limit for the `eth_getLogs` api +* [\#99](https://github.com/binance-chain/bsc/pull/99) enable directbroadcast flag to decrease the block propagation time +* [\#90](https://github.com/binance-chain/bsc/pull/90) add tini in docker image +* [\#84](https://github.com/binance-chain/bsc/pull/84) add jq in docker image + + +## v1.0.6 +* [\#68](https://github.com/binance-chain/bsc/pull/68) apply mirror sync upgrade on mainnet + +## v1.0.5 + +SECURITY +* [\#63](https://github.com/binance-chain/bsc/pull/63) security patches from go-ethereum +* [\#54](https://github.com/binance-chain/bsc/pull/54) les: fix GetProofsV2 that could potentially cause a panic. + +FEATURES +* [\#56](https://github.com/binance-chain/bsc/pull/56) apply mirror sync upgrade +* [\#53](https://github.com/binance-chain/bsc/pull/53) support fork id in header; elegant upgrade + +IMPROVEMENT +* [\#61](https://github.com/binance-chain/bsc/pull/61)Add `x-forward-for` log message when handle message failed +* [\#60](https://github.com/binance-chain/bsc/pull/61) add rpc method request gauge + +BUGFIX +* [\#59](https://github.com/binance-chain/bsc/pull/59) fix potential deadlock of pub/sub module + + + +## v1.0.4 + +IMPROVEMENT +* [\#35](https://github.com/binance-chain/bsc/pull/35) use fixed gas price when network is idle +* [\#38](https://github.com/binance-chain/bsc/pull/38) disable noisy log from consensus engine +* [\#47](https://github.com/binance-chain/bsc/pull/47) upgrade to golang1.15.5 +* [\#49](https://github.com/binance-chain/bsc/pull/49) Create pull request template for all developer to follow + + +## v1.0.3 + +IMPROVEMENT +* [\#36](https://github.com/binance-chain/bsc/pull/36) add max gas allwance calculation + +## v1.0.2 + +IMPROVEMENT +* [\#29](https://github.com/binance-chain/bsc/pull/29) eth/tracers: revert reason in call_tracer + error for failed internal… + +## v1.0.1-beta + +IMPROVEMENT +* [\#22](https://github.com/binance-chain/bsc/pull/22) resolve best practice advice + +FEATURES +* [\#23](https://github.com/binance-chain/bsc/pull/23) enforce backoff time for out-turn validator + +BUGFIX +* [\#25](https://github.com/binance-chain/bsc/pull/25) minor fix for ramanujan upgrade + +UPGRADE +* [\#26](https://github.com/binance-chain/bsc/pull/26) update chapel network config for ramanujan fork + +## v1.0.0-beta.0 + +FEATURES +* [\#5](https://github.com/binance-chain/bsc/pull/5) enable bep2e tokens for faucet +* [\#14](https://github.com/binance-chain/bsc/pull/14) add cross chain contract to system contract +* [\#15](https://github.com/binance-chain/bsc/pull/15) Allow liveness slash fail + +IMPROVEMENT +* [\#11](https://github.com/binance-chain/bsc/pull/11) remove redundant gaslimit check + +BUGFIX +* [\#4](https://github.com/binance-chain/bsc/pull/4) fix validator failed to sync a block produced by itself +* [\#6](https://github.com/binance-chain/bsc/pull/6) modify params for Parlia consensus with 21 validators +* [\#10](https://github.com/binance-chain/bsc/pull/10) add gas limit check in parlia implement +* [\#13](https://github.com/binance-chain/bsc/pull/13) fix debug_traceTransaction crashed issue diff --git a/Dockerfile b/Dockerfile index 54453c4df5..84e10f90ea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,12 @@ -# Build Geth in a stock Go builder container -FROM golang:1.14-alpine as builder +FROM golang:1.15-alpine as builder -RUN apk add --no-cache make gcc musl-dev linux-headers git +RUN apk add --no-cache make gcc musl-dev linux-headers git bash + +# Temporarily pull a custom Go bundle +ADD https://golang.org/dl/go1.15.5.src.tar.gz /tmp/go.tar.gz +RUN (cd /tmp && tar -xf go.tar.gz) +RUN (cd /tmp/go/src && ./make.bash) +ENV PATH="/tmp/go/bin:${PATH}" ADD . /go-ethereum RUN cd /go-ethereum && make geth @@ -9,8 +14,8 @@ RUN cd /go-ethereum && make geth # Pull Geth into a second stage deploy alpine container FROM alpine:latest -RUN apk add --no-cache ca-certificates +RUN apk add --no-cache ca-certificates curl jq tini COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/ EXPOSE 8545 8546 8547 30303 30303/udp -ENTRYPOINT ["geth"] +ENTRYPOINT ["geth"] \ No newline at end of file diff --git a/PULL_REQUEST_TEMPLATE b/PULL_REQUEST_TEMPLATE new file mode 100644 index 0000000000..69f29fecf8 --- /dev/null +++ b/PULL_REQUEST_TEMPLATE @@ -0,0 +1,31 @@ +### Description + +add a description of your changes here... + +### Rationale + +tell us why we need these changes... + +### Example + +add an example CLI or API response... + +### Changes + +Notable changes: +* add each change in a bullet point here +* ... + +### Preflight checks + +- [ ] build passed (`make build`) +- [ ] tests passed (`make test`) +- [ ] manual transaction test passed + +### Already reviewed by + +... + +### Related issues + +... reference related issue #'s here ... diff --git a/README.md b/README.md index 4974e499a7..3948fcc669 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,59 @@ -## Go Ethereum +## Binance Smart Chain -Official Golang implementation of the Ethereum protocol. +The goal of Binance Smart Chain is to bring programmability and interoperability to Binance Chain. In order to embrace the existing popular community and advanced technology, it will bring huge benefits by staying compatible with all the existing smart contracts on Ethereum and Ethereum tooling. And to achieve that, the easiest solution is to develop based on go-ethereum fork, as we respect the great work of Ethereum very much. -[![API Reference]( -https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f676f6c616e672f6764646f3f7374617475732e737667 -)](https://godoc.org/github.com/ethereum/go-ethereum) -[![Go Report Card](https://goreportcard.com/badge/github.com/ethereum/go-ethereum)](https://goreportcard.com/report/github.com/ethereum/go-ethereum) -[![Travis](https://travis-ci.org/ethereum/go-ethereum.svg?branch=master)](https://travis-ci.org/ethereum/go-ethereum) -[![Discord](https://img.shields.io/badge/discord-join%20chat-blue.svg)](https://discord.gg/nthXNEv) +Binance Smart Chain starts its development based on go-ethereum fork. So you may see many toolings, binaries and also docs are based on Ethereum ones, such as the name “geth”. -Automated builds are available for stable releases and the unstable master branch. Binary -archives are published at https://geth.ethereum.org/downloads/. +But from that baseline of EVM compatible, Binance Smart Chain introduces a system of 21 validators with Proof of Staked Authority (PoSA) consensus that can support short block time and lower fees. The most bonded validator candidates of staking will become validators and produce blocks. The double-sign detection and other slashing logic guarantee security, stability, and chain finality. + +Cross-chain transfer and other communication are possible due to native support of interoperability. Relayers and on-chain contracts are developed to support that. Binance DEX remains a liquid venue of the exchange of assets on both chains. This dual-chain architecture will be ideal for users to take advantage of the fast trading on one side and build their decentralized apps on the other side. **The Binance Smart Chain** will be: + +- **A self-sovereign blockchain**: Provides security and safety with elected validators. +- **EVM-compatible**: Supports all the existing Ethereum tooling along with faster finality and cheaper transaction fees. +- **Interoperable**: Comes with efficient native dual chain communication; Optimized for scaling high-performance dApps that require fast and smooth user experience. +- **Distributed with on-chain governance**: Proof of Staked Authority brings in decentralization and community participants. As the native token, BNB will serve as both the gas of smart contract execution and tokens for staking. + +More details in [White Paper](http://binance.org/en#smartChain). + +## Key features + +### Proof of Staked Authority +Although Proof-of-Work (PoW) has been approved as a practical mechanism to implement a decentralized network, it is not friendly to the environment and also requires a large size of participants to maintain the security. + +Proof-of-Authority(PoA) provides some defense to 51% attack, with improved efficiency and tolerance to certain levels of Byzantine players (malicious or hacked). +Meanwhile, the PoA protocol is most criticized for being not as decentralized as PoW, as the validators, i.e. the nodes that take turns to produce blocks, have all the authorities and are prone to corruption and security attacks. + +Other blockchains, such as EOS and Cosmos both, introduce different types of Deputy Proof of Stake (DPoS) to allow the token holders to vote and elect the validator set. It increases the decentralization and favors community governance. + +To combine DPoS and PoA for consensus, Binance Smart Chain implement a novel consensus engine called Parlia that: + +1. Blocks are produced by a limited set of validators. +2. Validators take turns to produce blocks in a PoA manner, similar to Ethereum's Clique consensus engine. +3. Validator set are elected in and out based on a staking based governance on Binance Chain. +4. The validator set change is relayed via a cross-chain communication mechanism. +5. Parlia consensus engine will interact with a set of [system contracts](https://github.com/binance-chain/docs-site/blob/add-bsc/docs/smart-chain/guides/concepts/system-contract.md) to achieve liveness slash, revenue distributing and validator set renewing func. + + +### Light Client of Binance Chain + +To achieve the cross-chain communication from Binance Chain to Binance Smart Chain, need introduce a on-chain light client verification algorithm. +It contains two parts: + +1. [Stateless Precompiled contracts](https://github.com/binance-chain/bsc/blob/master/core/vm/contracts_lightclient.go) to do tendermint header verification and Merkle Proof verification. +2. [Stateful solidity contracts](https://github.com/binance-chain/bsc-genesis-contract/blob/master/contracts/TendermintLightClient.sol) to store validator set and trusted appHash. + +## Native Token + +BNB will run on Binance Smart Chain in the same way as ETH runs on Ethereum so that it remains as `native token` for BSC. This means, +BNB will be used to: + +1. pay `gas` to deploy or invoke Smart Contract on BSC +2. perform cross-chain operations, such as transfer token assets across Binance Smart Chain and Binance Chain. ## Building the source +Many of the below are the same as or similar to go-ethereum. + For prerequisites and detailed build instructions please read the [Installation Instructions](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum) on the wiki. Building `geth` requires both a Go (version 1.13 or later) and a C compiler. You can install @@ -31,74 +71,40 @@ make all ## Executables -The go-ethereum project comes with several wrappers/executables found in the `cmd` +The bsc project comes with several wrappers/executables found in the `cmd` directory. | Command | Description | | :-----------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`geth`** | Our main Ethereum CLI client. It is the entry point into the Ethereum network (main-, test- or private net), capable of running as a full node (default), archive node (retaining all historical state) or a light node (retrieving data live). It can be used by other processes as a gateway into the Ethereum network via JSON RPC endpoints exposed on top of HTTP, WebSocket and/or IPC transports. `geth --help` and the [CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options) for command line options. | -| `abigen` | Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages. It operates on plain [Ethereum contract ABIs](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) with expanded functionality if the contract bytecode is also available. However, it also accepts Solidity source files, making development much more streamlined. Please see our [Native DApps](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) wiki page for details. | -| `bootnode` | Stripped down version of our Ethereum client implementation that only takes part in the network node discovery protocol, but does not run any of the higher level application protocols. It can be used as a lightweight bootstrap node to aid in finding peers in private networks. | -| `evm` | Developer utility version of the EVM (Ethereum Virtual Machine) that is capable of running bytecode snippets within a configurable environment and execution mode. Its purpose is to allow isolated, fine-grained debugging of EVM opcodes (e.g. `evm --code 60ff60ff --debug run`). | -| `gethrpctest` | Developer utility tool to support our [ethereum/rpc-test](https://github.com/ethereum/rpc-tests) test suite which validates baseline conformity to the [Ethereum JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) specs. Please see the [test suite's readme](https://github.com/ethereum/rpc-tests/blob/master/README.md) for details. | -| `rlpdump` | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://github.com/ethereum/wiki/wiki/RLP)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user-friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`). | -| `puppeth` | a CLI wizard that aids in creating a new Ethereum network. | +| **`geth`** | Main Binance Smart Chain client binary. It is the entry point into the BSC network (main-, test- or private net), capable of running as a full node (default), archive node (retaining all historical state) or a light node (retrieving data live). It has the same and more RPC and other interface as go-ethereum and can be used by other processes as a gateway into the BSC network via JSON RPC endpoints exposed on top of HTTP, WebSocket and/or IPC transports. `geth --help` and the [CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options) for command line options. | +| `abigen`,`bootnode`,`evm`, `gethrpctest`,`rlpdump`,`puppeth` | **These binaries are exactly the same as the binaries built in go-ethereum repo.**| ## Running `geth` Going through all the possible command line flags is out of scope here (please consult our -[CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options)), -but we've enumerated a few common parameter combos to get you up to speed quickly -on how you can run your own `geth` instance. +[CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options)). -### Full node on the main Ethereum network +### Hardware Requirements -By far the most common scenario is people wanting to simply interact with the Ethereum -network: create accounts; transfer funds; deploy and interact with contracts. For this -particular use-case the user doesn't care about years-old historical data, so we can -fast-sync quickly to the current state of the network. To do so: +The hardware must meet certain requirements to run a full node. +- VPS running recent versions of Mac OS X or Linux. +- 500 GB of free disk space +- 8 cores of CPU and 16 gigabytes of memory (RAM) for mainnet. +- 4 cores of CPU and 8 gigabytes of memory (RAM) for testnet. +- A broadband Internet connection with upload/download speeds of at least 1 megabyte per second -```shell -$ geth console -``` - -This command will: - * Start `geth` in fast sync mode (default, can be changed with the `--syncmode` flag), - causing it to download more data in exchange for avoiding processing the entire history - of the Ethereum network, which is very CPU intensive. - * Start up `geth`'s built-in interactive [JavaScript console](https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console), - (via the trailing `console` subcommand) through which you can invoke all official [`web3` methods](https://github.com/ethereum/wiki/wiki/JavaScript-API) - as well as `geth`'s own [management APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs). - This tool is optional and if you leave it out you can always attach to an already running - `geth` instance with `geth attach`. - -### A Full node on the Görli test network +### A Full node on the Rialto test network -Transitioning towards developers, if you'd like to play around with creating Ethereum -contracts, you almost certainly would like to do that without any real money involved until -you get the hang of the entire system. In other words, instead of attaching to the main -network, you want to join the **test** network with your node, which is fully equivalent to -the main network, but with play-Ether only. +Steps: -```shell -$ geth --goerli console -``` +1. Download the binary, config and genesis files from [release](https://github.com/binance-chain/bsc/releases/download/v1.0.0-alpha.0/binary.zip), or compile the binary by `make geth`. +2. Init genesis state: `./geth --datadir node init genesis.json`. +3. Start your fullnode: `./geth --config ./config.toml --datadir ./node`. +4. Or start a validator node: `./geth --config ./config.toml --datadir ./node -unlock ${validatorAddr} --mine --allow-insecure-unlock`. The ${validatorAddr} is the wallet account address of your running validator node. -The `console` subcommand has the exact same meaning as above and they are equally -useful on the testnet too. Please, see above for their explanations if you've skipped here. +*Note: The default p2p port is 30311 and the RPC port is 8575 which is different from Ethereum.* -Specifying the `--goerli` flag, however, will reconfigure your `geth` instance a bit: - - * Instead of connecting the main Ethereum network, the client will connect to the Görli - test network, which uses different P2P bootnodes, different network IDs and genesis - states. - * Instead of using the default data directory (`~/.ethereum` on Linux for example), `geth` - will nest itself one level deeper into a `goerli` subfolder (`~/.ethereum/goerli` on - Linux). Note, on OSX and Linux this also means that attaching to a running testnet node - requires the use of a custom endpoint since `geth attach` will try to attach to a - production node endpoint by default, e.g., - `geth attach /goerli/geth.ipc`. Windows users are not affected by - this. +More details about [running a node](https://docs.binance.org/smart-chain/developer/fullnode.html) and [becoming a validator](https://docs.binance.org/smart-chain/validator/candidate.html). *Note: Although there are some internal protective measures to prevent transactions from crossing over between the main network and test network, you should make sure to always @@ -106,70 +112,10 @@ use separate accounts for play-money and real-money. Unless you manually move accounts, `geth` will by default correctly separate the two networks and will not make any accounts available between them.* -### Full node on the Rinkeby test network - -Go Ethereum also supports connecting to the older proof-of-authority based test network -called [*Rinkeby*](https://www.rinkeby.io) which is operated by members of the community. - -```shell -$ geth --rinkeby console -``` - -### Full node on the Ropsten test network - -In addition to Görli and Rinkeby, Geth also supports the ancient Ropsten testnet. The -Ropsten test network is based on the Ethash proof-of-work consensus algorithm. As such, -it has certain extra overhead and is more susceptible to reorganization attacks due to the -network's low difficulty/security. - -```shell -$ geth --ropsten console -``` - -*Note: Older Geth configurations store the Ropsten database in the `testnet` subdirectory.* - -### Configuration - -As an alternative to passing the numerous flags to the `geth` binary, you can also pass a -configuration file via: - -```shell -$ geth --config /path/to/your_config.toml -``` - -To get an idea how the file should look like you can use the `dumpconfig` subcommand to -export your existing configuration: - -```shell -$ geth --your-favourite-flags dumpconfig -``` - -*Note: This works only with `geth` v1.6.0 and above.* - -#### Docker quick start - -One of the quickest ways to get Ethereum up and running on your machine is by using -Docker: - -```shell -docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \ - -p 8545:8545 -p 30303:30303 \ - ethereum/client-go -``` - -This will start `geth` in fast-sync mode with a DB memory allowance of 1GB just as the -above command does. It will also create a persistent volume in your home directory for -saving your blockchain as well as map the default ports. There is also an `alpine` tag -available for a slim version of the image. - -Do not forget `--rpcaddr 0.0.0.0`, if you want to access RPC from other containers -and/or hosts. By default, `geth` binds to the local interface and RPC endpoints is not -accessible from the outside. - ### Programmatically interfacing `geth` nodes As a developer, sooner rather than later you'll want to start interacting with `geth` and the -Ethereum network via your own programs and not manually through the console. To aid +Binance Smart Chain network via your own programs and not manually through the console. To aid this, `geth` has built-in support for a JSON-RPC based APIs ([standard APIs](https://github.com/ethereum/wiki/wiki/JSON-RPC) and [`geth` specific APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs)). These can be exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based @@ -203,157 +149,16 @@ can reuse the same connection for multiple requests! **Note: Please understand the security implications of opening up an HTTP/WS based transport before doing so! Hackers on the internet are actively trying to subvert -Ethereum nodes with exposed APIs! Further, all browser tabs can access locally +BSC nodes with exposed APIs! Further, all browser tabs can access locally running web servers, so malicious web pages could try to subvert locally available APIs!** -### Operating a private network - -Maintaining your own private network is more involved as a lot of configurations taken for -granted in the official networks need to be manually set up. - -#### Defining the private genesis state - -First, you'll need to create the genesis state of your networks, which all nodes need to be -aware of and agree upon. This consists of a small JSON file (e.g. call it `genesis.json`): - -```json -{ - "config": { - "chainId": , - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0 - }, - "alloc": {}, - "coinbase": "0x0000000000000000000000000000000000000000", - "difficulty": "0x20000", - "extraData": "", - "gasLimit": "0x2fefd8", - "nonce": "0x0000000000000042", - "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x00" -} -``` - -The above fields should be fine for most purposes, although we'd recommend changing -the `nonce` to some random value so you prevent unknown remote nodes from being able -to connect to you. If you'd like to pre-fund some accounts for easier testing, create -the accounts and populate the `alloc` field with their addresses. - -```json -"alloc": { - "0x0000000000000000000000000000000000000001": { - "balance": "111111111" - }, - "0x0000000000000000000000000000000000000002": { - "balance": "222222222" - } -} -``` - -With the genesis state defined in the above JSON file, you'll need to initialize **every** -`geth` node with it prior to starting it up to ensure all blockchain parameters are correctly -set: - -```shell -$ geth init path/to/genesis.json -``` - -#### Creating the rendezvous point - -With all nodes that you want to run initialized to the desired genesis state, you'll need to -start a bootstrap node that others can use to find each other in your network and/or over -the internet. The clean way is to configure and run a dedicated bootnode: - -```shell -$ bootnode --genkey=boot.key -$ bootnode --nodekey=boot.key -``` - -With the bootnode online, it will display an [`enode` URL](https://github.com/ethereum/wiki/wiki/enode-url-format) -that other nodes can use to connect to it and exchange peer information. Make sure to -replace the displayed IP address information (most probably `[::]`) with your externally -accessible IP to get the actual `enode` URL. - -*Note: You could also use a full-fledged `geth` node as a bootnode, but it's the less -recommended way.* - -#### Starting up your member nodes - -With the bootnode operational and externally reachable (you can try -`telnet ` to ensure it's indeed reachable), start every subsequent `geth` -node pointed to the bootnode for peer discovery via the `--bootnodes` flag. It will -probably also be desirable to keep the data directory of your private network separated, so -do also specify a custom `--datadir` flag. - -```shell -$ geth --datadir=path/to/custom/data/folder --bootnodes= -``` - -*Note: Since your network will be completely cut off from the main and test networks, you'll -also need to configure a miner to process transactions and create new blocks for you.* - -#### Running a private miner - -Mining on the public Ethereum network is a complex task as it's only feasible using GPUs, -requiring an OpenCL or CUDA enabled `ethminer` instance. For information on such a -setup, please consult the [EtherMining subreddit](https://www.reddit.com/r/EtherMining/) -and the [ethminer](https://github.com/ethereum-mining/ethminer) repository. - -In a private network setting, however a single CPU miner instance is more than enough for -practical purposes as it can produce a stable stream of blocks at the correct intervals -without needing heavy resources (consider running on a single thread, no need for multiple -ones either). To start a `geth` instance for mining, run it with all your usual flags, extended -by: - -```shell -$ geth --mine --miner.threads=1 --etherbase=0x0000000000000000000000000000000000000000 -``` - -Which will start mining blocks and transactions on a single CPU thread, crediting all -proceedings to the account specified by `--etherbase`. You can further tune the mining -by changing the default gas limit blocks converge to (`--targetgaslimit`) and the price -transactions are accepted at (`--gasprice`). - -## Contribution - -Thank you for considering to help out with the source code! We welcome contributions -from anyone on the internet, and are grateful for even the smallest of fixes! - -If you'd like to contribute to go-ethereum, please fork, fix, commit and send a pull request -for the maintainers to review and merge into the main code base. If you wish to submit -more complex changes though, please check up with the core devs first on [our gitter channel](https://gitter.im/ethereum/go-ethereum) -to ensure those changes are in line with the general philosophy of the project and/or get -some early feedback which can make both your efforts much lighter as well as our review -and merge procedures quick and simple. - -Please make sure your contributions adhere to our coding guidelines: - - * Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting) - guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)). - * Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary) - guidelines. - * Pull requests need to be based on and opened against the `master` branch. - * Commit messages should be prefixed with the package(s) they modify. - * E.g. "eth, rpc: make trace configs optional" - -Please see the [Developers' Guide](https://github.com/ethereum/go-ethereum/wiki/Developers'-Guide) -for more details on configuring your environment, managing project dependencies, and -testing procedures. - ## License -The go-ethereum library (i.e. all code outside of the `cmd` directory) is licensed under the +The bsc library (i.e. all code outside of the `cmd` directory) is licensed under the [GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html), also included in our repository in the `COPYING.LESSER` file. -The go-ethereum binaries (i.e. all code inside of the `cmd` directory) is licensed under the +The bsc binaries (i.e. all code inside of the `cmd` directory) is licensed under the [GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also -included in our repository in the `COPYING` file. +included in our repository in the `COPYING` file. \ No newline at end of file diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index 2dbc593569..6734684675 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -504,7 +504,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query ethereum.Filter to = query.ToBlock.Int64() } // Construct the range filter - filter = filters.NewRangeFilter(&filterBackend{b.database, b.blockchain}, from, to, query.Addresses, query.Topics) + filter = filters.NewRangeFilter(&filterBackend{b.database, b.blockchain}, from, to, query.Addresses, query.Topics, false) } // Run the filter and return all the logs logs, err := filter.Logs(ctx) diff --git a/accounts/abi/type.go b/accounts/abi/type.go index 4792283ee8..baa29dd267 100644 --- a/accounts/abi/type.go +++ b/accounts/abi/type.go @@ -350,7 +350,7 @@ func isDynamicType(t Type) bool { func getTypeSize(t Type) int { if t.T == ArrayTy && !isDynamicType(*t.Elem) { // Recursively calculate type size if it is a nested array - if t.Elem.T == ArrayTy { + if t.Elem.T == ArrayTy || t.Elem.T == TupleTy { return t.Size * getTypeSize(*t.Elem) } return t.Size * 32 diff --git a/accounts/accounts.go b/accounts/accounts.go index bf5190ad98..ff4d0d49ef 100644 --- a/accounts/accounts.go +++ b/accounts/accounts.go @@ -39,6 +39,7 @@ const ( MimetypeDataWithValidator = "data/validator" MimetypeTypedData = "data/typed" MimetypeClique = "application/x-clique-header" + MimetypeParlia = "application/x-parlia-header" MimetypeTextPlain = "text/plain" ) diff --git a/accounts/external/backend.go b/accounts/external/backend.go index 6089ca9844..ba70b7728c 100644 --- a/accounts/external/backend.go +++ b/accounts/external/backend.go @@ -161,9 +161,9 @@ func (api *ExternalSigner) SignData(account accounts.Account, mimeType string, d hexutil.Encode(data)); err != nil { return nil, err } - // If V is on 27/28-form, convert to to 0/1 for Clique - if mimeType == accounts.MimetypeClique && (res[64] == 27 || res[64] == 28) { - res[64] -= 27 // Transform V from 27/28 to 0/1 for Clique use + // If V is on 27/28-form, convert to to 0/1 for Clique and Parlia + if (mimeType == accounts.MimetypeClique || mimeType == accounts.MimetypeParlia) && (res[64] == 27 || res[64] == 28) { + res[64] -= 27 // Transform V from 27/28 to 0/1 for Clique and Parlia use } return res, nil } diff --git a/cmd/clef/docs/setup.md b/cmd/clef/docs/setup.md index a25f87ce64..cbdd8808d3 100644 --- a/cmd/clef/docs/setup.md +++ b/cmd/clef/docs/setup.md @@ -94,7 +94,7 @@ with minimal requirements. On the `client` qube, we need to create a listener which will receive the request from the Dapp, and proxy it. -[qubes-client.py](qubes/client/qubes-client.py): +[qubes-client.py](qubes/qubes-client.py): ```python diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go index e86f8533d0..6c857a2987 100644 --- a/cmd/faucet/faucet.go +++ b/cmd/faucet/faucet.go @@ -42,6 +42,7 @@ import ( "time" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -82,10 +83,16 @@ var ( noauthFlag = flag.Bool("noauth", false, "Enables funding requests without authentication") logFlag = flag.Int("loglevel", 3, "Log level to use for Ethereum and the faucet") + + bep2eContracts = flag.String("bep2eContracts", "", "the list of bep2p contracts") + bep2eSymbols = flag.String("bep2eSymbols", "", "the symbol of bep2p tokens") + bep2eAmounts = flag.String("bep2eAmounts", "", "the amount of bep2p tokens") + fixGasPrice = flag.Int64("faucet.fixedprice", 0, "Will use fixed gas price if specified") ) var ( - ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil) + ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil) + bep2eAbiJson = `[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]` ) var ( @@ -100,28 +107,45 @@ func main() { // Construct the payout tiers amounts := make([]string, *tiersFlag) - periods := make([]string, *tiersFlag) for i := 0; i < *tiersFlag; i++ { // Calculate the amount for the next tier and format it amount := float64(*payoutFlag) * math.Pow(2.5, float64(i)) - amounts[i] = fmt.Sprintf("%s Ethers", strconv.FormatFloat(amount, 'f', -1, 64)) + amounts[i] = fmt.Sprintf("%s BNBs", strconv.FormatFloat(amount, 'f', -1, 64)) if amount == 1 { amounts[i] = strings.TrimSuffix(amounts[i], "s") } - // Calculate the period for the next tier and format it - period := *minutesFlag * int(math.Pow(3, float64(i))) - periods[i] = fmt.Sprintf("%d mins", period) - if period%60 == 0 { - period /= 60 - periods[i] = fmt.Sprintf("%d hours", period) - - if period%24 == 0 { - period /= 24 - periods[i] = fmt.Sprintf("%d days", period) - } + } + bep2eNumAmounts := make([]string, 0) + if bep2eAmounts != nil && len(*bep2eAmounts) > 0 { + bep2eNumAmounts = strings.Split(*bep2eAmounts, ",") + } + + symbols := make([]string, 0) + if bep2eSymbols != nil && len(*bep2eSymbols) > 0 { + symbols = strings.Split(*bep2eSymbols, ",") + } + + contracts := make([]string, 0) + if bep2eContracts != nil && len(*bep2eContracts) > 0 { + contracts = strings.Split(*bep2eContracts, ",") + } + + if len(bep2eNumAmounts) != len(symbols) || len(symbols) != len(contracts) { + log.Crit("Length of bep2eContracts, bep2eSymbols, bep2eAmounts mismatch") + } + + bep2eInfos := make(map[string]bep2eInfo, 0) + for idx, s := range symbols { + n, ok := big.NewInt(0).SetString(bep2eNumAmounts[idx], 10) + if !ok { + log.Crit("failed to parse bep2eAmounts") } - if period == 1 { - periods[i] = strings.TrimSuffix(periods[i], "s") + amountStr := big.NewFloat(0).Quo(big.NewFloat(0).SetInt(n), big.NewFloat(0).SetInt64(params.Ether)).String() + + bep2eInfos[s] = bep2eInfo{ + Contract: common.HexToAddress(contracts[idx]), + Amount: *n, + AmountStr: amountStr, } } // Load up and render the faucet website @@ -131,11 +155,11 @@ func main() { } website := new(bytes.Buffer) err = template.Must(template.New("").Parse(string(tmpl))).Execute(website, map[string]interface{}{ - "Network": *netnameFlag, - "Amounts": amounts, - "Periods": periods, - "Recaptcha": *captchaToken, - "NoAuth": *noauthFlag, + "Network": *netnameFlag, + "Amounts": amounts, + "Recaptcha": *captchaToken, + "NoAuth": *noauthFlag, + "Bep2eInfos": bep2eInfos, }) if err != nil { log.Crit("Failed to render the faucet template", "err", err) @@ -176,7 +200,7 @@ func main() { ks.Unlock(acc, pass) // Assemble and start the faucet light service - faucet, err := newFaucet(genesis, *ethPortFlag, enodes, *netFlag, *statsFlag, ks, website.Bytes()) + faucet, err := newFaucet(genesis, *ethPortFlag, enodes, *netFlag, *statsFlag, ks, website.Bytes(), bep2eInfos) if err != nil { log.Crit("Failed to start faucet", "err", err) } @@ -195,6 +219,12 @@ type request struct { Tx *types.Transaction `json:"tx"` // Transaction funding the account } +type bep2eInfo struct { + Contract common.Address + Amount big.Int + AmountStr string +} + // faucet represents a crypto faucet backed by an Ethereum light client. type faucet struct { config *params.ChainConfig // Chain configurations for signing @@ -215,14 +245,18 @@ type faucet struct { update chan struct{} // Channel to signal request updates lock sync.RWMutex // Lock protecting the faucet's internals + + bep2eInfos map[string]bep2eInfo + bep2eAbi abi.ABI } -func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network uint64, stats string, ks *keystore.KeyStore, index []byte) (*faucet, error) { +func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network uint64, stats string, ks *keystore.KeyStore, index []byte, bep2eInfos map[string]bep2eInfo) (*faucet, error) { // Assemble the raw devp2p protocol stack stack, err := node.New(&node.Config{ Name: "geth", Version: params.VersionWithCommit(gitCommit, gitDate), DataDir: filepath.Join(os.Getenv("HOME"), ".faucet"), + NoUSB: true, P2P: p2p.Config{ NAT: nat.Any(), NoDiscovery: true, @@ -235,6 +269,10 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u if err != nil { return nil, err } + bep2eAbi, err := abi.JSON(strings.NewReader(bep2eAbiJson)) + if err != nil { + return nil, err + } // Assemble the Ethereum light client protocol if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { cfg := eth.DefaultConfig @@ -274,14 +312,16 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u client := ethclient.NewClient(api) return &faucet{ - config: genesis.Config, - stack: stack, - client: client, - index: index, - keystore: ks, - account: ks.Accounts()[0], - timeouts: make(map[string]time.Time), - update: make(chan struct{}, 1), + config: genesis.Config, + stack: stack, + client: client, + index: index, + keystore: ks, + account: ks.Accounts()[0], + timeouts: make(map[string]time.Time), + update: make(chan struct{}, 1), + bep2eInfos: bep2eInfos, + bep2eAbi: bep2eAbi, }, nil } @@ -297,6 +337,7 @@ func (f *faucet) listenAndServe(port int) error { http.HandleFunc("/", f.webHandler) http.HandleFunc("/api", f.apiHandler) + http.HandleFunc("/faucet-smart/api", f.apiHandler) return http.ListenAndServe(fmt.Sprintf(":%d", port), nil) } @@ -383,6 +424,7 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { URL string `json:"url"` Tier uint `json:"tier"` Captcha string `json:"captcha"` + Symbol string `json:"symbol"` } if err = conn.ReadJSON(&msg); err != nil { return @@ -487,13 +529,31 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { fund bool timeout time.Time ) - if timeout = f.timeouts[username]; time.Now().After(timeout) { - // User wasn't funded recently, create the funding transaction - amount := new(big.Int).Mul(big.NewInt(int64(*payoutFlag)), ether) - amount = new(big.Int).Mul(amount, new(big.Int).Exp(big.NewInt(5), big.NewInt(int64(msg.Tier)), nil)) - amount = new(big.Int).Div(amount, new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(msg.Tier)), nil)) - tx := types.NewTransaction(f.nonce+uint64(len(f.reqs)), address, amount, 21000, f.price, nil) + if timeout = f.timeouts[username]; time.Now().After(timeout) { + var tx *types.Transaction + if msg.Symbol == "BNB" { + // User wasn't funded recently, create the funding transaction + amount := new(big.Int).Mul(big.NewInt(int64(*payoutFlag)), ether) + amount = new(big.Int).Mul(amount, new(big.Int).Exp(big.NewInt(5), big.NewInt(int64(msg.Tier)), nil)) + amount = new(big.Int).Div(amount, new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(msg.Tier)), nil)) + + tx = types.NewTransaction(f.nonce+uint64(len(f.reqs)), address, amount, 21000, f.price, nil) + } else { + tokenInfo, ok := f.bep2eInfos[msg.Symbol] + if !ok { + f.lock.Unlock() + log.Warn("Failed to find symbol", "symbol", msg.Symbol) + continue + } + input, err := f.bep2eAbi.Pack("transfer", address, &tokenInfo.Amount) + if err != nil { + f.lock.Unlock() + log.Warn("Failed to pack transfer transaction", "err", err) + continue + } + tx = types.NewTransaction(f.nonce+uint64(len(f.reqs)), tokenInfo.Contract, nil, 420000, f.price, input) + } signed, err := f.keystore.SignTx(f.account, tx, f.config.ChainID) if err != nil { f.lock.Unlock() @@ -571,8 +631,12 @@ func (f *faucet) refresh(head *types.Header) error { if nonce, err = f.client.NonceAt(ctx, f.account.Address, head.Number); err != nil { return err } - if price, err = f.client.SuggestGasPrice(ctx); err != nil { - return err + if fixGasPrice != nil && *fixGasPrice > 0 { + price = big.NewInt(*fixGasPrice) + } else { + if price, err = f.client.SuggestGasPrice(ctx); err != nil { + return err + } } // Everything succeeded, update the cached stats and eject old requests f.lock.Lock() @@ -717,7 +781,7 @@ func authTwitter(url string) (string, string, common.Address, error) { address := common.HexToAddress(string(regexp.MustCompile("0x[0-9a-fA-F]{40}").Find(body))) if address == (common.Address{}) { //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", common.Address{}, errors.New("No Ethereum address found to fund") + return "", "", common.Address{}, errors.New("No Binance Smart Chain address found to fund") } var avatar string if parts = regexp.MustCompile("src=\"([^\"]+twimg.com/profile_images[^\"]+)\"").FindStringSubmatch(string(body)); len(parts) == 2 { @@ -753,7 +817,7 @@ func authFacebook(url string) (string, string, common.Address, error) { address := common.HexToAddress(string(regexp.MustCompile("0x[0-9a-fA-F]{40}").Find(body))) if address == (common.Address{}) { //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", common.Address{}, errors.New("No Ethereum address found to fund") + return "", "", common.Address{}, errors.New("No Binance Smart Chain address found to fund") } var avatar string if parts = regexp.MustCompile("src=\"([^\"]+fbcdn.net[^\"]+)\"").FindStringSubmatch(string(body)); len(parts) == 2 { @@ -769,7 +833,7 @@ func authNoAuth(url string) (string, string, common.Address, error) { address := common.HexToAddress(regexp.MustCompile("0x[0-9a-fA-F]{40}").FindString(url)) if address == (common.Address{}) { //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", common.Address{}, errors.New("No Ethereum address found to fund") + return "", "", common.Address{}, errors.New("No Binance Smart Chain address found to fund") } return address.Hex() + "@noauth", "", address, nil } diff --git a/cmd/faucet/faucet.html b/cmd/faucet/faucet.html index 314b19e123..36748ae9e1 100644 --- a/cmd/faucet/faucet.html +++ b/cmd/faucet/faucet.html @@ -5,7 +5,7 @@ - {{.Network}}: Authenticated Faucet + {{.Network}}: Faucet @@ -43,17 +43,23 @@
-

{{.Network}} Authenticated Faucet

+

{{.Network}} Faucet

- + - + + + + +
{{if .Recaptcha}} @@ -70,33 +76,13 @@

{{ - +
peers blocks Ethers BNBs funded

-
-
-

How does this work?

-

This Ether faucet is running on the {{.Network}} network. To prevent malicious actors from exhausting all available funds or accumulating enough Ether to mount long running spam attacks, requests are tied to common 3rd party social network accounts. Anyone having a Twitter or Facebook account may request funds within the permitted limits.

-
-
-
To request funds via Twitter, make a tweet with your Ethereum address pasted into the contents (surrounding text doesn't matter).
Copy-paste the tweets URL into the above input box and fire away!
- -
-
To request funds via Facebook, publish a new public post with your Ethereum address embedded into the content (surrounding text doesn't matter).
Copy-paste the posts URL into the above input box and fire away!
- - {{if .NoAuth}} -
-
To request funds without authentication, simply copy-paste your Ethereum address into the above input box (surrounding text doesn't matter) and fire away.
This mode is susceptible to Byzantine attacks. Only use for debugging or private networks!
- {{end}} -
-

You can track the current pending requests below the input field to see how much you have to wait until your turn comes.

- {{if .Recaptcha}}The faucet is running invisible reCaptcha protection against bots.{{end}} -
-
@@ -105,6 +91,7 @@

How does this work?

var attempt = 0; var server; var tier = 0; + var symbol=""; var requests = []; // Define a function that creates closures to drop old requests @@ -120,12 +107,12 @@

How does this work?

}; // Define the function that submits a gist url to the server var submit = function({{if .Recaptcha}}captcha{{end}}) { - server.send(JSON.stringify({url: $("#url")[0].value, tier: tier{{if .Recaptcha}}, captcha: captcha{{end}}}));{{if .Recaptcha}} + server.send(JSON.stringify({url: $("#url")[0].value, symbol: symbol, tier: tier{{if .Recaptcha}}, captcha: captcha{{end}}}));{{if .Recaptcha}} grecaptcha.reset();{{end}} }; // Define a method to reconnect upon server loss var reconnect = function() { - server = new WebSocket(((window.location.protocol === "https:") ? "wss://" : "ws://") + window.location.host + "/api"); + server = new WebSocket(((window.location.protocol === "https:") ? "wss://" : "ws://") + window.location.host + "/faucet-smart/api"); server.onmessage = function(event) { var msg = JSON.parse(event.data); diff --git a/cmd/faucet/website.go b/cmd/faucet/website.go index a091d24919..32a94a9780 100644 --- a/cmd/faucet/website.go +++ b/cmd/faucet/website.go @@ -1,6 +1,6 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// faucet.html (11.27kB) +// faucet.html (9.293kB) package main @@ -69,7 +69,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _faucetHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5a\x6d\x93\xdb\x36\x92\xfe\x3c\xfe\x15\x1d\x9e\xbd\x92\xce\x43\x52\x33\x63\x7b\x7d\x12\xa9\x94\xd7\x9b\xdd\xf3\xd5\x5d\x92\x4a\x9c\xba\xdb\xca\xa6\xae\x40\xb2\x25\xc2\x03\x02\x0c\x00\x4a\xa3\x4c\xe9\xbf\x5f\x35\x40\x52\xd4\xcb\x4c\xec\xb5\xaf\x6a\xfd\x61\x4c\x02\x8d\x46\xa3\xfb\x69\xf4\x0b\x95\x7c\xf5\xe7\xef\xde\xbe\xff\xdb\xf7\xdf\x40\x69\x2b\xb1\x78\x92\xd0\x7f\x20\x98\x5c\xa5\x01\xca\x60\xf1\xe4\x22\x29\x91\x15\x8b\x27\x17\x17\x49\x85\x96\x41\x5e\x32\x6d\xd0\xa6\x41\x63\x97\xe1\xeb\x60\x3f\x51\x5a\x5b\x87\xf8\x6b\xc3\xd7\x69\xf0\x3f\xe1\x4f\x6f\xc2\xb7\xaa\xaa\x99\xe5\x99\xc0\x00\x72\x25\x2d\x4a\x9b\x06\xef\xbe\x49\xb1\x58\xe1\x60\x9d\x64\x15\xa6\xc1\x9a\xe3\xa6\x56\xda\x0e\x48\x37\xbc\xb0\x65\x5a\xe0\x9a\xe7\x18\xba\x97\x4b\xe0\x92\x5b\xce\x44\x68\x72\x26\x30\xbd\x0a\x16\x4f\x88\x8f\xe5\x56\xe0\xe2\xfe\x3e\xfa\x16\xed\x46\xe9\xdb\xdd\x6e\x06\x6f\x1a\x5b\xa2\xb4\x3c\x67\x16\x0b\xf8\x0b\x6b\x72\xb4\x49\xec\x29\xdd\x22\xc1\xe5\x2d\x94\x1a\x97\x69\x40\xa2\x9b\x59\x1c\xe7\x85\xfc\x60\xa2\x5c\xa8\xa6\x58\x0a\xa6\x31\xca\x55\x15\xb3\x0f\xec\x2e\x16\x3c\x33\xb1\xdd\x70\x6b\x51\x87\x99\x52\xd6\x58\xcd\xea\xf8\x26\xba\x89\xfe\x18\xe7\xc6\xc4\xfd\x58\x54\x71\x19\xe5\xc6\x04\xa0\x51\xa4\x81\xb1\x5b\x81\xa6\x44\xb4\x01\xc4\x8b\x7f\x6c\xdf\xa5\x92\x36\x64\x1b\x34\xaa\xc2\xf8\x45\xf4\xc7\x68\xea\xb6\x1c\x0e\x3f\xbe\x2b\x6d\x6b\x72\xcd\x6b\x0b\x46\xe7\x1f\xbd\xef\x87\x5f\x1b\xd4\xdb\xf8\x26\xba\x8a\xae\xda\x17\xb7\xcf\x07\x13\x2c\x92\xd8\x33\x5c\x7c\x16\xef\x50\x2a\xbb\x8d\xaf\xa3\x17\xd1\x55\x5c\xb3\xfc\x96\xad\xb0\xe8\x76\xa2\xa9\xa8\x1b\xfc\x62\xfb\x3e\x64\xc3\x0f\xc7\x26\xfc\x12\x9b\x55\xaa\x42\x69\xa3\x0f\x26\xbe\x8e\xae\x5e\x47\xd3\x6e\xe0\x94\xbf\xdb\x80\x8c\x46\x5b\x5d\x44\x6b\xd4\x84\x5c\x11\xe6\x28\x2d\x6a\xb8\xa7\xd1\x8b\x8a\xcb\xb0\x44\xbe\x2a\xed\x0c\xae\xa6\xd3\x67\xf3\x73\xa3\xeb\xd2\x0f\x17\xdc\xd4\x82\x6d\x67\xb0\x14\x78\xe7\x87\x98\xe0\x2b\x19\x72\x8b\x95\x99\x81\xe7\xec\x26\x76\x6e\xcf\x5a\xab\x95\x46\x63\xda\xcd\x6a\x65\xb8\xe5\x4a\xce\x08\x51\xcc\xf2\x35\x9e\xa3\x35\x35\x93\x27\x0b\x58\x66\x94\x68\x2c\x1e\x09\x92\x09\x95\xdf\xfa\x31\xe7\xcd\xc3\x43\xe4\x4a\x28\x3d\x83\x4d\xc9\xdb\x65\xe0\x36\x82\x5a\x63\xcb\x1e\x6a\x56\x14\x5c\xae\x66\xf0\xaa\x6e\xcf\x03\x15\xd3\x2b\x2e\x67\x30\xdd\x2f\x49\xe2\x4e\x8d\x49\xec\x2f\xae\x27\x17\x49\xa6\x8a\xad\xb3\x61\xc1\xd7\x90\x0b\x66\x4c\x1a\x1c\xa9\xd8\x5d\x48\x07\x04\x74\x0f\x31\x2e\xbb\xa9\x83\x39\xad\x36\x01\xb8\x8d\xd2\xc0\x0b\x11\x66\xca\x5a\x55\xcd\xe0\x8a\xc4\x6b\x97\x1c\xf1\x13\xa1\x58\x85\x57\xd7\xdd\xe4\x45\x52\x5e\x75\x4c\x2c\xde\xd9\xd0\xd9\xa7\xb7\x4c\xb0\x48\x78\xb7\x76\xc9\x60\xc9\xc2\x8c\xd9\x32\x00\xa6\x39\x0b\x4b\x5e\x14\x28\xd3\xc0\xea\x06\x09\x47\x7c\x01\xc3\xeb\xef\x81\xdb\xaf\xbc\xea\xe4\x8a\x0b\xbe\x6e\x8f\x35\x78\x3c\x3a\xe1\xc3\x87\x78\x0d\xed\x83\x5a\x2e\x0d\xda\x70\x70\xa6\x01\x31\x97\x75\x63\xc3\x95\x56\x4d\xdd\xcf\x5f\x24\x6e\x14\x78\x91\x06\x8d\x16\x41\x7b\xfd\xbb\x47\xbb\xad\x5b\x55\x04\xfd\xc1\x95\xae\x42\xb2\x84\x56\x22\x80\x5a\xb0\x1c\x4b\x25\x0a\xd4\x69\xf0\xa3\xca\x39\x13\x20\xfd\x99\xe1\xa7\x1f\xfe\x13\x5a\x93\x71\xb9\x82\xad\x6a\x34\x7c\x63\x4b\xd4\xd8\x54\xc0\x8a\x82\xe0\x1a\x45\xd1\x40\x10\x87\xdd\x53\x51\xc3\xcc\xca\x3d\xd5\x45\x92\x35\xd6\xaa\x9e\x30\xb3\x12\x32\x2b\xc3\x02\x97\xac\x11\x16\x0a\xad\xea\x42\x6d\x64\x68\xd5\x6a\x45\x91\xce\x1f\xc2\x2f\x0a\xa0\x60\x96\xb5\x53\x69\xd0\xd1\x76\x36\x64\xa6\x56\x75\x53\xb7\x56\xf4\x83\x78\x57\x33\x59\x60\x41\x36\x17\x06\x83\xc5\x5f\xf9\x1a\xa1\x42\x7f\x96\x8b\x63\x48\xe4\x4c\xa3\x0d\x87\x4c\x4f\x80\x91\xc4\x5e\x18\x7f\x24\x68\xff\x25\x8d\xe8\x38\xf5\x47\xa8\x50\x36\x70\xf0\x16\x6a\xba\x57\x82\xc5\xfd\xbd\x66\x72\x85\xf0\x94\x17\x77\x97\xf0\x94\x55\xaa\x91\x16\x66\x29\x44\x6f\xdc\xa3\xd9\xed\x0e\xb8\x03\x24\x82\x2f\x12\xf6\x18\xbc\x41\xc9\x5c\xf0\xfc\x36\x0d\x2c\x47\x9d\xde\xdf\x13\xf3\xdd\x6e\x0e\xf7\xf7\x7c\x09\x4f\xa3\x1f\x30\x67\xb5\xcd\x4b\xb6\xdb\xad\x74\xf7\x1c\xe1\x1d\xe6\x8d\xc5\xf1\xe4\xfe\x1e\x85\xc1\xdd\xce\x34\x59\xc5\xed\xb8\x5b\x4e\xe3\xb2\xd8\xed\x48\xe6\x56\xce\xdd\x0e\x62\x62\x2a\x0b\xbc\x83\xa7\xd1\xf7\xa8\xb9\x2a\x0c\x78\xfa\x24\x66\x8b\x24\x16\x7c\xd1\xae\x3b\x54\x52\xdc\x88\x3d\x5e\x62\x02\x4c\x8f\x73\xe7\x36\x4e\xd4\xa1\xa4\x67\xbc\x60\x15\xf6\xd2\xb7\x78\x30\xdc\xe2\x2d\x6e\xd3\xe0\xfe\x7e\xb8\xb6\x9d\xcd\x99\x10\x19\x23\xbd\xf8\xa3\xf5\x8b\x7e\x43\xc2\xe9\x9a\x1b\x97\x52\x2d\x3a\x09\xf6\x62\x7f\xa4\x5b\x1f\x5d\x5c\x56\xd5\x33\xb8\xb9\x1e\xdc\x5a\xe7\x3c\xfe\xd5\x91\xc7\xdf\x9c\x25\xae\x99\x44\x01\xee\x6f\x68\x2a\x26\xba\xe7\xd6\x5b\x06\xce\x77\xbc\x28\xa4\x3b\xba\x17\xad\xbf\xeb\xa7\x73\x50\x6b\xd4\x4b\xa1\x36\x33\x60\x8d\x55\x73\xa8\xd8\x5d\x1f\xef\x6e\xa6\xd3\xa1\xdc\x94\x0a\xb2\x4c\xa0\xbb\x5d\x34\xfe\xda\xa0\xb1\xa6\xbf\x4b\xfc\x94\xfb\x4b\x57\x4a\x81\xd2\x60\x71\xa4\x0d\xda\x91\x54\xeb\xa8\x06\xa6\xef\x95\x79\x56\xf6\xa5\x52\x7d\x08\x19\x8a\xd1\xb2\x1e\x44\xbb\x60\x91\x58\xbd\xa7\xbb\x48\x6c\xf1\x49\x21\x40\x53\x8a\xf7\x50\x04\xf0\x37\x1a\x9d\xbd\x46\xd4\x3e\xbf\x20\xc8\x82\x7b\x4d\x62\x5b\x7c\xc6\xce\x04\xc2\x8c\x19\xfc\x98\xed\x5d\xa4\xdf\x6f\xef\x5e\x3f\x77\xff\x12\x99\xb6\x19\x32\xfb\x31\x02\x2c\x1b\x59\x0c\xce\xef\xee\xce\xcf\x15\xa0\x91\x7c\x8d\xda\x70\xbb\xfd\x58\x09\xb0\xd8\x8b\xe0\xdf\x0f\x45\x48\x62\xab\x1f\xc7\xda\xf0\xe5\x0b\x39\xf7\xef\xa5\x24\x37\x8b\x7f\x57\x1b\x28\x14\x1a\xb0\x25\x37\x40\xc1\xf5\xeb\x24\x2e\x6f\x7a\x92\x7a\xf1\x9e\x26\x9c\x52\x61\xe9\x52\x0b\xe0\x06\x74\x23\x5d\xe4\x55\x12\x6c\x89\x87\xe9\x48\x1b\xa4\x23\x78\xaf\x28\xa5\x5b\xa3\xb4\x50\x31\xc1\x73\xae\x1a\x03\x2c\xb7\x4a\x1b\x58\x6a\x55\x01\xde\x95\xac\x31\x96\x18\xd1\xf5\xc1\xd6\x8c\x0b\xe7\x4b\xce\xa4\xa0\x34\xb0\x3c\x6f\xaa\x86\x52\x52\xb9\x02\x94\xaa\x59\x95\xad\x2c\x56\x81\x0f\x4c\x42\xc9\x55\x2f\x8f\xa9\x59\x05\xcc\x5a\x96\xdf\x9a\x4b\xe8\x6e\x05\x60\x1a\xc1\x72\x2c\x68\x55\xae\xaa\x4a\x49\xb8\xd1\x05\xd4\x4c\xdb\x2d\x98\xc3\xdc\x82\xe5\xb9\x8b\x72\x11\xbc\x91\x5b\x25\x11\x4a\xb6\x76\x12\xc2\x7b\x5f\x4e\x90\x5c\x7f\x61\x39\x66\x4a\xf5\xd4\x50\xb1\x6d\xb7\x5d\x2b\xfd\x86\xdb\x92\x7b\xf5\xd4\xa8\x2b\x5a\x5a\x80\xe0\x15\xb7\x26\x4a\xe2\x7a\x7f\xa3\xee\x63\xb3\x08\x4b\xa5\xf9\x6f\x94\xd8\x88\xe1\xf5\x69\x8f\x2e\x97\xee\x6e\x74\x56\x17\xb8\xb4\x33\x78\xe1\xef\xc6\x63\x1c\xb7\x15\xd0\x39\x10\x77\x3c\x5d\x65\x49\x01\x67\x06\x37\x3e\x9d\xf5\x89\x44\x61\x07\x12\x14\x47\x50\xf3\x9b\xbe\x7e\x5d\xdf\xf5\x72\xf4\x39\xf1\xb4\x67\x42\x08\x38\x54\xca\x9a\xf7\x6a\xbc\x84\x8a\xdd\x22\x30\x48\xd8\x51\x85\xdc\x0a\xed\xea\x2b\xee\xfa\x03\xb1\xdd\x20\xda\xaf\xc9\x75\xd3\x1f\x3c\x43\x2e\x57\xcf\xae\xa7\x1e\x91\xf4\x40\xec\x9f\x5d\x4f\xb9\xb4\xea\xd9\xf5\x74\x7a\x37\xfd\xc8\x7f\xcf\xae\xa7\x4a\x3e\xbb\x9e\xda\x12\x9f\x5d\x4f\x9f\x5d\xdf\x0c\xb1\xec\x47\xba\xcc\x92\xa8\xd0\xd0\x6e\x1d\xc4\x03\xb0\x4c\xaf\xd0\xa6\xc1\xff\xb2\x4c\x35\x76\x96\x09\x26\x6f\x83\x85\x13\x97\xb2\x0d\x87\x82\xf3\xf9\x29\xd4\xcc\x10\x24\x48\x62\x87\x92\xb6\x17\x62\x60\x6c\x1a\xad\x55\x23\x29\x2a\x02\x9d\xd9\x79\xa8\x1c\x11\xca\x48\x31\x93\x28\xc9\x74\xbc\x78\xab\xea\x6d\xe8\x98\xb8\xe5\x27\x6a\x34\x4d\x5d\x2b\x6d\xa3\xa1\x3a\x19\xd5\x41\x02\x4d\xfc\x7a\xfa\xf2\xf5\xab\x47\xc5\x37\x94\x65\xbb\x33\xf4\x12\xb2\x4c\xad\x11\x7c\x4e\x9f\xa9\x3b\x60\xb2\x80\x25\xd7\x08\x6c\xc3\xb6\x5f\x25\x71\xe1\x2a\xb0\xcf\x47\xed\xb2\xf5\xae\x7f\x2a\xd8\x76\x2e\x7f\x09\x75\x93\x09\x6e\x4a\x60\x20\x71\x03\x89\xb1\x5a\xc9\xd5\xc2\x8d\xe6\x54\x92\xba\x57\xa8\x95\xb1\x8f\x99\x1f\xab\x0c\x8b\xe2\x0c\x00\xbe\x94\xfd\x37\x9b\x4d\xd4\x69\xd2\x19\xbf\x44\x51\xc7\x74\xfd\x35\x92\xdb\x6d\xec\xdd\x48\xc9\xf8\x6b\x5e\xa4\xd7\xaf\xaf\x5f\xbd\xba\x7e\xf1\x6f\xaf\x5f\xbe\xbc\x7e\xfd\xe2\xe5\x43\xc8\xa0\x43\x7d\x26\x30\x7c\x1a\xfd\xad\xa2\xaa\xb5\xcf\xa1\x3d\x5e\xba\xdc\x8d\x22\x74\x41\x35\x88\x0e\xfe\x61\x0c\x35\x92\x12\x91\x90\x89\xb3\x39\xc4\x27\xa0\xc8\xc1\xe8\x11\xc9\x3e\x13\x5a\x1d\x7c\x08\x29\xaa\xb1\x74\xc2\xae\x98\xe7\x4a\xf6\x70\xba\x04\xc3\xab\x5a\x6c\x21\xdf\x5b\xfd\x3c\xae\x1e\x34\xca\xef\xc2\xea\xd0\x6c\x1e\x64\x2e\xfa\x57\xaa\x40\x8a\xfa\xa6\x31\x39\xd6\xae\xcb\x4b\x91\xf4\x4f\xdb\xdf\x98\xb4\x5c\x62\x17\x71\x23\xf8\x4e\x8a\x2d\x34\x06\x61\xa9\x34\x14\x98\x35\xab\x95\x4b\x13\x34\xd4\x9a\xaf\x99\xc5\x2e\xcc\x9a\x16\x15\x3d\x28\x06\x95\x0d\xa5\x3c\x62\x90\x81\xfc\x4d\x35\x90\x33\x09\x56\xb3\xfc\xd6\x7b\x4a\xa3\x35\x79\x4a\x8d\xfe\x34\x7d\xa0\xcf\x50\xa8\x8d\x23\xf1\xe7\x5e\x72\x14\x2e\xea\x1b\x44\x28\xd5\x06\xaa\x26\x77\x0e\x49\x51\xdd\x1d\x62\xc3\xb8\x85\x46\x5a\x2e\xbc\x3e\x6d\xa3\x25\xe5\x08\x78\x10\xa5\x4f\x6a\xbf\x04\xab\xc5\xfb\x12\xcf\xa4\x44\x7d\xd5\x06\x1a\xdf\x7a\x72\xa8\xb5\xb2\x98\x93\x41\x81\xad\x18\x97\x86\x2c\xe2\xf2\x00\xac\x3e\xa2\xaa\xeb\x9f\xda\x87\x7d\x87\xd2\x4d\xc7\x31\xfc\x55\xa8\x8c\x09\x58\x13\xd2\x33\x41\xe9\x9c\x82\x52\xd1\xd1\x07\xda\x32\x96\xd9\xc6\x80\x5a\xba\x51\x2f\x39\xad\x5f\x33\x4d\x16\xc4\xaa\xb6\x90\xb6\xfd\x35\x1a\x33\xa8\xd7\x6d\xd7\x90\x5e\xa9\x72\x3f\x98\xef\xb5\x9e\xc2\xcf\xbf\xcc\x9f\xb4\xa2\xfc\x19\x97\x0e\x12\x84\x6f\x7f\x64\x5b\x32\x0b\xb9\x46\x66\xd1\x40\x2e\x94\x69\xb4\x97\xb0\xd0\xaa\x06\x92\xb2\xe3\xd4\x71\xa6\x89\xda\xed\xd6\x31\x19\x97\xcc\x94\x93\xb6\x3d\xa8\xd1\x59\xa9\x9f\xeb\xc6\x2f\x08\x75\x63\x62\xc0\xd3\xe9\x1c\x78\xd2\xf1\x8d\x04\xca\x95\x2d\xe7\xc0\x9f\x3f\xef\x89\x2f\xf8\x12\xc6\x1d\xc5\xcf\xfc\x97\xc8\xde\x45\xb4\x0b\xa4\x29\x0c\x77\x73\x1b\xb6\x7c\x4c\x2d\x78\x8e\x63\x7e\x09\x57\x93\x79\x37\x9b\x69\x64\xb7\xdd\x5b\x6b\x47\xff\x9f\xfb\xbb\x9b\x1f\x6a\xc6\x29\xff\x40\x37\xbe\xf6\x37\xc0\x60\xc5\x8d\x85\x46\x0b\x68\x7d\xd8\x9b\xa0\x37\x88\xa3\x1b\x6a\xe5\x04\x97\xed\x43\x8b\xa9\xee\x08\x9e\x4d\x64\x50\x16\xe3\xff\xf8\xf1\xbb\x6f\x23\x63\x35\x97\x2b\xbe\xdc\x8e\xef\x1b\x2d\x66\xf0\x74\x1c\xfc\x4b\xa3\x45\x30\xf9\x79\xfa\x4b\xb4\x66\xa2\xc1\x4b\x67\xef\x99\xfb\x7b\xb2\xcb\x25\xb4\x8f\x33\x38\xdc\x70\x37\x99\xcc\xcf\xf7\x49\x06\x6d\x1d\x8d\x06\xed\x98\x08\x7b\xe0\x1f\xeb\x88\x41\x85\xb6\x54\xce\x75\x35\xe6\x4a\x4a\xcc\x2d\x34\xb5\x92\xad\x4a\x40\x28\x63\xf6\x40\xec\x28\xd2\x53\x50\xb4\xf4\xa9\x0b\xd6\xff\x8d\xd9\x8f\x2a\xbf\x45\x3b\x1e\x8f\x37\x5c\x16\x6a\x13\x09\xe5\xaf\xda\x88\x9c\x54\xe5\x4a\x40\x9a\xa6\xd0\x46\xd1\x60\x02\x5f\x43\xb0\x31\x14\x4f\x03\x98\xd1\x23\x3d\x4d\xe0\x39\x1c\x2f\x2f\x29\xde\x3f\x87\x20\x66\x35\x0f\x26\xde\x1d\x3a\xc5\x2b\x59\xa1\x31\x6c\x85\x43\x01\x5d\x65\xd4\x83\x8c\xce\x51\x99\x15\xa4\xe0\x0c\x54\x33\x6d\xd0\x93\x44\x54\x8d\x77\x68\x23\xcc\x3a\xb2\x34\x05\xd9\x08\xb1\x07\xa9\x77\x8a\x79\x07\xbf\x03\xf2\xc8\xc7\x9a\xaf\xd2\x14\xa8\x34\x25\x15\x17\xfb\x95\x64\x7c\x5f\x44\x4f\x22\x8a\x0b\xfb\x15\x93\xf9\x10\xcd\x07\xdc\xb0\xf8\x3d\x76\x58\x1c\xf3\xc3\xe2\x01\x86\xae\x67\xf1\x18\x3f\xdf\xe3\x18\xb0\x73\x03\x0f\x70\x93\x4d\x95\xa1\x7e\x8c\x9d\xef\x59\xb4\xec\x9c\xaa\xdf\x49\x3b\x58\x7b\x09\x57\xaf\x26\x0f\x70\x47\xad\xd5\x83\xcc\xa5\xb2\xdb\xf1\xbd\x60\x5b\xca\x99\x60\x64\x55\xfd\xd6\xb5\x18\x46\x97\x2e\xe2\xce\xa0\xe7\x70\xe9\x9a\xc7\x33\x18\xb9\x37\x9a\xe7\x15\xba\x55\x2f\xa7\xd3\xe9\x25\x74\x5f\x5d\xfe\xc4\xc8\x09\x75\x83\xbb\x07\xe4\x31\x4d\x9e\x53\xdc\xff\x1c\x89\x5a\x1e\xbd\x4c\xed\xfb\x67\x48\xd5\xc7\x86\x03\xb1\xe0\x0f\x7f\x80\x93\xd9\x43\x18\xc7\x31\xfc\x17\xa3\x32\x5c\x08\xd7\x3d\x70\x4d\x83\x9e\xbe\xe2\xc6\xb8\x62\xdc\x40\xa1\x24\xb6\x6b\x3e\xed\xda\x3f\x91\xb1\x25\x83\x05\x4c\x8f\x05\xa4\xeb\x70\x10\x16\xce\x44\x8b\x01\xdf\xc3\x40\x70\xb1\x1b\xee\x77\xb0\x92\x57\x08\x5f\xa5\x10\x04\xc3\xc5\x27\x14\x44\xd0\x33\xbb\x30\x68\xdf\x7b\x5b\x8c\xdb\xe8\x78\x2e\x76\x4d\x2e\xe1\x66\x3a\x9d\x4e\x4e\x84\xd8\xed\xd5\xfb\xa6\xa6\xb4\x09\x98\xdc\xba\x2b\xb1\xd7\xad\x4b\x1c\x29\x05\xa2\x2b\x4d\x40\xae\x84\xf0\x39\x4b\xbb\x94\x14\xdc\x36\x4f\x52\x08\xaf\xe6\x67\xa2\xe8\x40\x93\x83\xa3\x1d\x9b\xe7\x8c\xee\x8f\x4d\x74\xa8\xb3\x23\xe2\xf0\xea\xc0\x28\x07\xf6\x3a\x6f\x98\x8b\x5e\x6e\xbe\xd7\xe8\x91\xb9\xf6\xf6\x3a\xd6\xd9\x40\x7e\xcf\xe7\xf9\xd5\x47\x1e\xa3\x9f\xae\x1b\x53\x8e\x8f\x04\x9d\xcc\x4f\x6d\xf3\xce\xa2\xa6\x2c\x59\x51\xc8\x22\x5b\x50\x29\xa0\xf1\xc4\x24\x2e\x55\xd7\x18\x6a\x94\x05\xea\x2e\xa5\xf0\x99\x3d\x25\x80\x07\x26\xf3\x55\xe5\x10\x4e\x9f\xe8\x30\x2e\x25\x53\x12\x01\x00\x8e\x9c\xc0\x01\xf5\x00\xa9\x44\x8c\x82\xd5\x06\x0b\x48\xc1\x7f\x04\x1f\x4f\xa2\x46\xf2\xbb\xf1\x24\x6c\xdf\x8f\x79\x74\xf3\xf3\xbe\x4c\xec\xc4\x7e\x9e\x42\x90\x58\x0d\xbc\x48\x47\x01\x3c\x3f\xe7\x82\x14\x75\x47\x8b\xbd\x04\xc3\xa5\x00\x89\x2d\x16\xae\x0f\xea\xeb\xb5\xbf\x07\x19\xcb\x6f\x57\xae\x10\x9a\x51\xaa\x35\x3e\x61\xcb\xd6\xcc\x32\xed\xb8\x4e\xe6\xb0\x27\x6f\x0b\xc5\x9c\x8c\x33\x07\x5f\x91\xba\x76\x2b\xf4\x9f\x28\xdc\x5b\xa6\x74\x81\x3a\xd4\xac\xe0\x8d\x99\xc1\x8b\xfa\x6e\xfe\xf7\xee\x13\x8e\x6b\x0a\x3f\x2a\x6a\xad\x71\x71\x22\x51\xdb\x65\x7c\x0e\x41\x12\x13\xc1\xef\xb1\xe9\x0f\x3b\xfc\xf8\x0e\x67\x5a\xdf\xd0\x7f\x1a\x6f\xc7\x2b\x5e\x14\x02\x49\xe0\x3d\x7b\x72\x46\xb2\xff\xd0\xa5\x0e\xb7\x84\xb6\xe7\xbd\x5f\xb3\x03\x14\x06\x1f\x59\xd0\xb7\xcf\x47\x04\x80\x90\x8e\xcc\x9d\xce\xdb\x62\xdb\x0d\xeb\x91\xd3\x45\xfb\x53\x8a\xa2\xd1\x2e\xd7\x1a\x87\x2d\xc0\x2e\x61\x64\x28\xf7\x2b\xcc\x68\x12\x95\x4d\xc5\x24\xff\x0d\xc7\x14\x97\x26\x5e\x57\xae\x1f\x1f\x9c\x5e\xc9\x27\xc2\xec\x1b\xe5\xa3\x2e\xc6\x8d\x5a\x25\x8e\x3a\xeb\xbe\xd8\xd7\xf6\x33\x98\xce\x47\x9f\xa8\xa1\xf3\xbb\x84\x19\xd3\x30\x7c\x09\xbb\xe0\x0b\x5a\xd1\xee\xdd\x5c\xc6\xf4\xc8\x77\x32\x5c\x7e\x2e\xd5\x26\x1d\xdd\x4c\x7b\x21\xbd\xa1\x9d\x9d\x47\x2d\xd6\x4e\x8c\x41\x52\x76\xae\xb9\x80\x9b\xe9\x97\x90\xd6\x77\x43\x8e\x4e\x60\x35\xaf\xb1\x00\x96\x5b\xbe\xc6\xff\x87\x83\x7c\x01\x25\x7f\xb2\x88\x84\xc3\x4e\x79\x0e\xa6\x07\xf2\xd2\x6c\xaf\xdb\x7f\x25\x7f\x83\xd8\x69\xf8\x39\x04\x67\x0f\xf2\x20\x12\x8f\x08\x8f\x5c\xfb\x61\xbf\x77\x1f\x98\x82\xe3\x98\x42\xd9\x6e\xff\x71\x74\x12\x95\xb6\x12\xe3\x20\xb1\xee\x47\x32\x24\x73\xcf\xc1\x31\xf0\xc3\x87\x29\xdd\xee\xb0\x90\xa1\xfa\x1d\x8f\xea\x2c\x18\x24\x27\x7d\x2d\xd6\x65\x22\xb0\xdb\xff\x96\x28\x8e\xe1\x47\xcb\xb4\x05\x06\x3f\xbd\x83\xa6\x2e\x98\xf5\x9f\x72\x28\x3e\xfa\x4f\x25\xdd\x8f\x8d\x32\xa6\x0d\x2c\x95\xde\x30\x5d\xb4\xfd\x19\x5b\xe2\xd6\x7d\xca\xe9\x52\x3f\x83\xf6\x1d\xdd\x62\x6b\x26\xc6\x27\x75\xdf\xd3\xf1\x28\x1a\x9a\x7c\x34\x89\x90\xe5\xe5\x29\xa1\x8b\x58\xfd\xbe\x29\x7c\xeb\x4a\x80\xf1\xd3\xb1\x2d\xb9\x99\x44\xcc\x5a\x3d\x1e\x1d\x80\x61\x34\x21\xbb\x5e\x0d\x4a\xb2\x7e\x79\x72\xe0\x56\x8f\xf1\xd8\x27\xd3\x7d\x22\xd0\x91\xe7\xc6\x8c\x3d\xae\x46\x97\x03\xde\x87\xb0\x1a\x3d\x1b\xf5\x86\xda\xbb\xf7\xfe\x1c\xe9\x59\x49\x0e\x58\x8f\xc8\xcb\x46\x27\xdb\xb3\xa2\x78\x4b\xfe\x33\x0e\xce\x78\xfa\x31\x3a\x26\xbd\xb2\xfd\x7d\xfd\xa8\x96\xfd\xcf\x32\x1e\x50\x31\x2f\x46\x93\xc8\x34\x99\xef\x4d\x8c\x5f\xf6\x05\x58\x47\xe6\xc0\x7b\x1c\x0a\x4e\x12\x0a\xda\xe2\x30\xa9\x08\x8f\x92\x90\x47\xa2\x46\xbb\xa5\x3f\xd5\xee\x92\x14\x3e\x9d\xf4\xad\xad\x6f\x0c\x25\x57\xbe\xf5\xbf\xc1\xcc\xb8\x4e\x02\xb4\x78\x77\xdd\x1c\xdf\xb5\x79\xf3\xfd\xbb\x41\xe7\xa6\xf7\x88\xb1\xe3\xde\xff\x0e\xf0\x5c\x9f\xe4\xec\x0f\x0f\x37\x9b\x4d\xb4\x52\x6a\x25\xfc\x4f\x0e\xfb\x46\x4a\xcc\x6a\x1e\x7d\x30\x01\x30\xb3\x95\x39\x14\xb8\x44\xbd\x18\xb0\x6f\xbb\x2b\x49\xec\x7f\x12\x97\xc4\xfe\x57\xbf\xff\x17\x00\x00\xff\xff\x31\x9f\x54\x5e\x06\x2c\x00\x00") +var _faucetHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x5a\x5b\x93\xdb\x36\xb2\x7e\x96\x7f\x45\x87\xc7\x89\xa8\x33\x43\x52\xf2\xe4\x56\x12\xa9\x53\x1e\x27\x27\x35\x5b\xb5\x4e\x6a\x9d\xd4\xee\x56\x92\x07\x88\x68\x89\xf0\x80\x00\x03\x80\xd2\x28\x2a\xfd\xf7\x2d\x80\x17\x91\x94\x66\x62\xc7\xde\xda\x5a\x3f\x8c\x71\x69\x74\x7f\xe8\x6e\xa0\xbb\x41\xc5\x9f\x7c\xf3\xfd\xab\x1f\xff\xf9\xc3\xb7\x90\x99\x9c\x2f\x9f\xc5\xf6\x3f\xe0\x44\x6c\x12\x0f\x85\xb7\x7c\x36\x8a\x33\x24\x74\xf9\x6c\x34\x8a\x73\x34\x04\xd2\x8c\x28\x8d\x26\xf1\x4a\xb3\x0e\xbe\xf6\x4e\x13\x99\x31\x45\x80\xbf\x95\x6c\x9b\x78\xff\x08\x7e\x7a\x19\xbc\x92\x79\x41\x0c\x5b\x71\xf4\x20\x95\xc2\xa0\x30\x89\x77\xf7\x6d\x82\x74\x83\x9d\x75\x82\xe4\x98\x78\x5b\x86\xbb\x42\x2a\xd3\x21\xdd\x31\x6a\xb2\x84\xe2\x96\xa5\x18\xb8\xce\x35\x30\xc1\x0c\x23\x3c\xd0\x29\xe1\x98\xcc\xbc\xe5\x33\xcb\xc7\x30\xc3\x71\x79\x38\x84\xaf\xd1\xec\xa4\xba\x3f\x1e\xe7\xf0\xff\xa4\x4c\xd1\xc4\x51\x35\xe7\xc8\x38\x13\xf7\x90\x29\x5c\x27\x9e\x05\xab\xe7\x51\x94\x52\xf1\x56\x87\x29\x97\x25\x5d\x73\xa2\x30\x4c\x65\x1e\x91\xb7\xe4\x21\xe2\x6c\xa5\x23\xb3\x63\xc6\xa0\x0a\x56\x52\x1a\x6d\x14\x29\xa2\x9b\xf0\x26\xfc\x2a\x4a\xb5\x8e\xda\xb1\x30\x67\x22\x4c\xb5\xf6\x40\x21\x4f\x3c\x6d\xf6\x1c\x75\x86\x68\x3c\x88\x96\x7f\x4e\xee\x5a\x0a\x13\x90\x1d\x6a\x99\x63\xf4\x79\xf8\x55\x38\x75\x22\xbb\xc3\x4f\x4b\xb5\x62\x75\xaa\x58\x61\x40\xab\xf4\x9d\xe5\xbe\xfd\xad\x44\xb5\x8f\x6e\xc2\x59\x38\xab\x3b\x4e\xce\x5b\xed\x2d\xe3\xa8\x62\xb8\xfc\x20\xde\x81\x90\x66\x1f\xbd\x08\x3f\x0f\x67\x51\x41\xd2\x7b\xb2\x41\xda\x48\xb2\x53\x61\x33\xf8\xd1\xe4\x3e\x66\xc3\xb7\x43\x13\x7e\x0c\x61\xb9\xcc\x51\x98\xf0\xad\x8e\x5e\x84\xb3\xaf\xc3\x69\x33\x70\xce\xdf\x09\xb0\x46\xb3\xa2\x46\xe1\x16\x95\x61\x29\xe1\x41\x8a\xc2\xa0\x82\x83\x1d\x1d\xe5\x4c\x04\x19\xb2\x4d\x66\xe6\x30\x9b\x4e\x3f\x5d\x5c\x1a\xdd\x66\xd5\x30\x65\xba\xe0\x64\x3f\x87\x35\xc7\x87\x6a\x88\x70\xb6\x11\x01\x33\x98\xeb\x39\x54\x9c\xdd\xc4\xd1\xc9\x2c\x94\xdc\x28\xd4\xba\x16\x56\x48\xcd\x0c\x93\x62\x6e\x3d\x8a\x18\xb6\xc5\x4b\xb4\xba\x20\xe2\x6c\x01\x59\x69\xc9\x4b\x83\x03\x20\x2b\x2e\xd3\xfb\x6a\xcc\x9d\xdf\xee\x26\x52\xc9\xa5\x9a\xc3\x2e\x63\xf5\x32\x70\x82\xa0\x50\x58\xb3\x87\x82\x50\xca\xc4\x66\x0e\x5f\x16\xf5\x7e\x20\x27\x6a\xc3\xc4\x1c\xa6\xa7\x25\x71\xd4\xa8\x31\x8e\xaa\xab\xea\xd9\x28\x5e\x49\xba\x77\x36\xa4\x6c\x0b\x29\x27\x5a\x27\xde\x40\xc5\xee\x0a\xea\x11\xd8\x9b\x87\x30\xd1\x4c\xf5\xe6\x94\xdc\x79\xe0\x04\x25\x5e\x05\x22\x58\x49\x63\x64\x3e\x87\x99\x85\x57\x2f\x19\xf0\xe3\x01\xdf\x04\xb3\x17\xcd\xe4\x28\xce\x66\x0d\x13\x83\x0f\x26\x70\xf6\x69\x2d\xe3\x2d\x63\xd6\xac\x5d\x13\x58\x93\x60\x45\x4c\xe6\x01\x51\x8c\x04\x19\xa3\x14\x45\xe2\x19\x55\xa2\xf5\x23\xb6\x84\xee\x85\xd7\xde\x77\xd9\xac\x41\x12\x51\xb6\xad\x37\xd2\x69\x0e\xf6\xf4\x38\xec\xaf\xa1\x6e\xc8\xf5\x5a\xa3\x09\x3a\xbb\xe8\x10\x33\x51\x94\x26\xd8\x28\x59\x16\xed\xfc\x28\x76\xa3\xc0\x68\xe2\x95\x8a\x7b\xf5\x15\xef\x9a\x66\x5f\xd4\x9b\xf7\xda\xad\x4a\x95\x07\x56\xf7\x4a\x72\x0f\x0a\x4e\x52\xcc\x24\xa7\xa8\x12\xef\xce\xf1\xd9\xcb\x52\xc1\x2d\x13\x44\xa4\x08\x6f\x72\xa2\x0c\xbc\xca\x08\x13\x40\x28\xb5\x3e\x19\x86\x61\x47\xb6\x73\xd0\x73\x74\xc1\xca\x88\x13\xd5\x28\x5e\x95\xc6\xc8\x96\x70\x65\x04\xac\x8c\x08\x28\xae\x49\xc9\x0d\x50\x25\x0b\x2a\x77\x22\x30\x72\xb3\xb1\x01\xac\xc2\x5d\x2d\xf2\x80\x12\x43\xea\xa9\xc4\x6b\x68\x1b\x43\x11\x5d\xc8\xa2\x2c\x6a\x53\x55\x83\xf8\x50\x10\x41\x91\x5a\xc3\x72\x8d\xde\xf2\x3b\xb6\x45\xc8\x11\x6e\x5f\xdf\x8e\x86\x56\x4f\x89\x42\x13\x74\x59\x9e\xd9\x3e\x8e\x2a\x28\xd5\x86\xa0\xfe\x17\x97\xbc\xe1\xd4\x6e\x20\x47\x51\x42\xaf\x17\x28\x7b\x75\x78\xcb\xc3\x41\x11\xb1\x41\x78\xce\xe8\xc3\x35\x3c\x27\xb9\x2c\x85\x81\x79\x02\xe1\x4b\xd7\xd4\xc7\x63\x8f\x3b\x40\xcc\xd9\x32\x26\x4f\x79\x30\x48\x91\x72\x96\xde\x27\x9e\x61\xa8\x92\xc3\xc1\x32\x3f\x1e\x17\x7a\x9f\xaf\x24\x4f\xc6\xb7\xaf\x6f\xc7\x0b\x38\x1c\xd8\x1a\x9e\x87\x7f\xc3\x94\x14\x26\xcd\xc8\xf1\xb8\x51\x4d\x3b\xc4\x07\x4c\x4b\x83\xfe\xe4\x70\x40\xae\xf1\x78\xd4\xe5\x2a\x67\xc6\x6f\x78\xd9\x71\x41\x8f\x47\xbb\x81\x1a\xf4\xf1\x18\x47\x64\x19\x47\x9c\x2d\xeb\xc9\xbe\x5a\xa2\x92\x9f\xfc\x23\xb2\x0e\xf2\xdf\xe6\x2e\x3f\xe0\x66\xb3\x07\x23\xef\x51\xe8\xff\x90\xbb\x40\xeb\x2f\x95\x31\xaf\xe1\xf9\x0a\x8b\x17\x78\x27\xd6\xd2\x79\xcd\x6d\xd3\x6b\x1c\xc7\x29\xee\x3d\x5c\xa6\x76\x92\xc3\xa1\x96\x70\x3c\xfe\x39\x57\x71\x40\xfc\x0e\x9b\x9e\xcb\xb4\xa0\x6b\x37\x7f\x63\xd4\xf1\x08\x1d\xea\x3f\xeb\x4b\xd5\x2d\xeb\x00\x77\xf1\x5e\xb8\x34\x37\x41\xbb\x87\xda\x39\x34\x33\x78\x8f\xfb\xc4\x3b\x1c\xba\x6b\xeb\xd9\x94\x70\xbe\x22\x4e\x45\x6e\x83\xed\xa2\xdf\xd1\x3a\xed\x96\x69\x97\x65\x2f\x1b\x04\x27\xd8\xef\x18\x05\x06\x91\xcd\xc8\x62\x0e\x37\x2f\x3a\x61\xed\x52\x80\xf8\x72\x10\x20\x6e\x2e\x12\x17\x44\x20\x07\xf7\x37\xd0\x39\xe1\x4d\xbb\x3e\x3a\x9d\x8b\x7b\xb8\x28\xb0\x41\xbc\x85\xd6\x26\x03\xd3\x05\xc8\x2d\xaa\x35\x97\xbb\x39\x90\xd2\xc8\x05\xe4\xe4\xa1\x4d\x88\x6e\xa6\xd3\x2e\x6e\x5b\x1d\x90\x15\x47\x17\x8c\x14\xfe\x56\xa2\x36\xba\x0d\x3d\xd5\x94\xfb\x6b\x23\x10\x45\xa1\x91\x0e\xb4\x61\x25\x5a\xd5\x3a\xaa\x8e\xe9\x5b\x65\x5e\xc4\xbe\x96\xb2\xcd\x31\xba\x30\x6a\xd6\x9d\x74\xc8\x5b\xc6\x46\x9d\xe8\x46\xb1\xa1\xef\x95\x23\x28\x5b\x03\x3c\x96\x22\x54\xd7\x9b\xdd\x7b\x81\xa8\xaa\x04\xd4\xba\x2c\xb8\x6e\x1c\x19\xfa\x01\x92\xad\x13\xae\x88\xc6\x77\x11\xef\x52\xc1\x93\x78\xd7\xfd\x50\xf9\x19\x12\x65\x56\x48\xcc\xbb\x00\x58\x97\x82\x76\xf6\x7f\xfb\xfa\xf6\x43\xc5\x97\x82\x6d\x51\x69\x66\xf6\xef\x2a\x1f\xe9\x09\x40\xd5\xef\x43\x88\x23\xa3\x9e\xf6\xb4\x6e\xe7\xe2\xd1\x6e\x5b\x75\xe3\x54\xc7\xb8\xe9\x28\x82\xef\xb8\x5c\x11\x0e\x5b\x0b\x79\xc5\x51\x83\x91\x60\xf3\x2d\x30\x19\x42\x5a\x2a\x85\xc2\x80\x36\xc4\x94\x1a\xe4\xda\x8d\xae\x5d\x6e\x69\xd7\x6f\x89\x02\x62\x0c\xe6\x85\x81\xa4\xce\xc2\xed\x98\x46\xb5\xad\x6b\x0b\xdb\xb5\xc1\xbf\x3f\x5f\x5d\xed\x9e\xd7\x8e\x34\x67\x11\x12\xf8\xf9\xd7\xc5\xb3\x1a\xdc\x37\xb8\x66\x02\x81\x58\xf5\xa4\xb6\xb6\x00\x93\x11\x03\xa9\x42\x62\x50\x43\xca\xa5\x2e\x55\x85\xd9\x06\x29\xb0\xb8\x1b\x4e\x0d\x67\x3b\x51\x38\xf9\x0d\x13\x3f\x23\x3a\x9b\xd4\x65\x85\x42\x53\x2a\x71\x9a\x6b\xc6\x47\x6b\xa9\xc0\xb7\x0c\x58\x32\x5d\x00\x8b\x1b\xbe\x21\x47\xb1\x31\xd9\x02\xd8\xd5\x55\x4b\x3c\x62\x6b\xf0\x1b\x8a\x9f\xd9\xaf\xa1\x79\x08\xad\x14\x48\x12\xe8\x4a\x73\x02\x6b\x3e\xba\xe0\x2c\x45\x9f\x5d\xc3\x6c\xb2\x68\x66\x57\x0a\xc9\x7d\xd3\xab\x2f\xed\xea\x3f\xf7\xf7\xb8\xe8\x6b\xc6\x99\xa3\xa7\x9b\x2a\x24\x68\x20\xb0\x61\xda\x40\xa9\xb8\xd5\x8e\xa5\xab\x8c\xd2\x9a\xc0\xd1\x75\xb5\x72\x16\xaa\xea\x46\x1d\x40\x9a\x2d\x54\x6c\x42\x8d\x82\xfa\x7f\x79\xf3\xfd\xeb\x50\x1b\xc5\xc4\x86\xad\xf7\xfe\xa1\x54\x7c\x0e\xcf\x7d\xef\x7f\x6c\x72\x3f\xf9\x79\xfa\x6b\xb8\x25\xbc\xc4\xeb\xda\xe0\x73\x68\x72\x05\xeb\x11\x73\xf7\xf7\x4c\xea\x35\xd4\xcd\x39\xf4\x01\x1c\x27\x93\xc5\xe5\x70\xda\xc9\x01\x14\x6a\x34\xbe\x25\x6c\xa3\xde\x50\x67\x04\x72\x34\x99\xa4\x56\x2f\x0a\x53\x29\x04\xa6\x06\xca\x42\x8a\x5a\x45\xc0\xa5\xd6\x27\xc7\x6c\x28\x92\x73\x27\xa9\xe9\x13\x10\xb8\x83\xbf\xe3\xea\x8d\x4c\xef\xd1\xf8\xbe\xbf\x63\x82\xca\x5d\xc8\x65\x4a\xec\x02\x5b\x2f\x1b\x99\x4a\x0e\x49\x92\x40\xfd\x7a\xe0\x4d\xe0\xff\xc0\xdb\x69\x3d\x8f\x22\x0f\xe6\xb6\x69\x5b\x13\xb8\x82\xe1\xf2\x4c\x6a\x03\x57\xe0\x45\xd5\xd1\xb3\x91\x53\x99\x88\x14\xcc\x9b\x54\x67\xa5\xb1\x8a\x14\x39\x6a\x4d\x36\xd8\x45\x8b\x5b\x14\xa6\xf5\x40\xbb\xa9\x5c\x6f\x20\x01\x67\xbd\x82\x28\x8d\x15\x49\x68\x6f\xf0\xc6\x15\xad\x43\x3b\xb2\x24\x01\x51\x72\x7e\xf2\xe0\xea\xc4\x2c\x1a\xdf\xec\x91\x87\xee\x5e\x85\x4f\x92\x04\xec\x85\x66\xf5\x4d\x4f\x2b\xad\x67\x54\x17\xef\x24\xb4\x77\xea\x69\xc5\x64\xd1\x75\xf5\x1e\x37\xa4\x7f\xc4\x0e\xe9\x90\x1f\xd2\x47\x18\xba\x38\xf7\x14\xbf\x2a\x2e\x76\xd8\xb9\x81\x47\xb8\x89\x32\x5f\xa1\x7a\x8a\x5d\x15\xe7\x6a\x76\x4e\xd5\x77\xc2\x74\xd6\x5e\xc3\xec\xcb\xc9\x23\xdc\x51\x29\xf9\x28\x73\x21\xcd\xde\x3f\x70\xb2\x97\xa5\x99\xc3\xd8\xc8\xe2\x95\x0b\x4c\xe3\x6b\xb0\xb2\xe6\xd0\x72\xb8\x76\xd5\xc7\x1c\xc6\xae\x67\xe7\x59\x8e\x6e\xd5\x17\xd3\xe9\xf4\x1a\x9a\xa7\x9c\x5b\x62\x4f\xa4\x2a\xf1\xf8\x08\x1e\x5d\xa6\x29\xea\x47\xb5\xf7\x4e\x88\x6a\x1e\x2d\xa6\xba\xff\x01\xa8\xda\xc0\xd1\x83\x05\x9f\x7d\x06\x67\xb3\x7d\x37\x8e\x22\xf8\x2b\x51\xf7\xe0\x72\x50\x85\x5b\x26\x4b\x7d\x0a\x43\x39\xd3\x9a\x89\x0d\x10\x0d\x54\x0a\xac\xd7\xbc\x5f\x4c\x38\xc3\x58\x93\xc1\x12\xa6\x43\x80\xf6\xae\xec\xc4\x8c\x0b\xa1\xa4\xc3\xb7\x1f\x25\x46\xc7\xae\xbc\xde\x4a\x96\x23\x7c\x92\x80\xe7\x75\x17\x9f\x51\x58\x82\x96\xd9\x48\xa3\xf9\xb1\xb2\x85\x5f\x87\xce\x4b\x81\x6d\x72\x6d\x53\xeb\xe9\xe4\x0c\xc4\xf1\xa4\xde\x97\x45\x81\x82\x02\x11\x7b\x77\x3f\xb6\xba\x65\xc2\x48\x90\xa5\xbd\x67\x53\xc2\x6d\xd9\xc0\xd1\xdd\x54\xf5\x52\xab\xe0\x54\xe6\xb9\x14\x90\x40\x30\x5b\x5c\x08\xb1\x1d\x4d\x76\xb6\x36\x34\xcf\x05\xdd\x0f\x4d\xd4\xd7\xd9\x80\x38\x98\xf5\x8c\xd2\xb3\xd7\x65\xc3\x8c\x5a\xdc\xec\xa4\xd1\x81\xb9\x4e\xf6\x1a\xea\xac\x83\xbf\xe2\x73\x35\x7b\xc7\x6d\xb4\xd3\x45\xa9\x33\x7f\x00\x74\xb2\x38\xb7\xcd\x9d\x41\x45\x0c\xba\xda\xc9\xd9\x02\x85\x61\x0a\xcf\x4c\x02\x44\xd8\x94\x2a\x50\x28\x28\xaa\x26\xdf\xb0\xa5\x57\x55\x27\xf5\x4c\xe6\xbe\xd4\xf4\xdc\xe9\x3d\x0f\x8c\xcb\xd7\xa4\x40\x5b\x5a\x0f\x0e\x81\x73\xd4\x9e\xa7\x5a\x62\xe4\xa4\xd0\x48\x21\x81\xea\x65\xdd\x9f\x84\xa5\x60\x0f\xfe\x24\xa8\xfb\x43\x1e\xcd\x7c\x1d\x36\x9d\xc5\x2a\xd8\x57\x09\x78\xb1\x51\x36\x3b\x1f\x7b\x70\x75\xe9\x08\xda\x10\x3c\x5e\x9e\x10\x74\x97\x02\xc4\x86\x2e\x5d\xe5\x57\x55\x0d\xbf\x78\xb6\x46\xdf\x28\x59\x0a\x3a\xb7\x79\x98\x7f\xc6\x96\x6c\x89\x21\xca\x71\x9d\x2c\xe0\x44\xee\x4a\xf9\x39\xa4\xd6\x38\x0b\xa8\x8a\x43\x57\x7f\x43\x5b\xd6\xba\xde\x4a\x2a\x8a\x2a\x50\x84\xb2\x52\xcf\xe1\xf3\xe2\x61\xf1\x4b\x53\xf6\xbb\x52\xe2\x49\xa8\x85\xc2\xe5\x19\xa2\x34\x75\xcf\x7e\x57\xe0\xc5\x91\x25\xf8\x23\x36\xed\x66\xbb\x2f\xfa\x70\xa1\x60\x82\xf6\xbd\xbd\x1e\xcf\x19\xa5\x1c\x2d\xe0\x13\x7b\x7b\x18\xad\xfd\xbb\x47\xaa\x2f\x12\xea\x4a\xe9\xb4\xe6\x08\xc8\x35\x3e\xb1\xa0\x2d\xba\xc6\xd6\x01\x02\xbb\x65\xe6\x74\x5e\xd7\x6f\x6e\x58\x8d\x9d\x2e\xea\xef\x33\xb4\x54\x2e\xf1\xf2\x83\xda\xc1\xae\x61\xac\x6d\x22\x48\xf5\x78\x12\x66\x65\x4e\x04\xfb\x1d\x7d\x1b\x97\x26\x95\xae\x5c\x15\xe7\x9d\x5f\xc9\x67\x60\x4e\x4f\x03\xe3\x26\xc6\x8d\x6b\x25\x8e\x1b\xeb\x5a\x43\x76\xbe\x6d\x8c\xdf\x53\x43\x97\xa5\x04\x2b\xa2\xa0\xdb\x09\x9a\xe0\x0b\x4a\x5a\xe9\xcd\xdc\x8a\xa8\x71\x55\xc1\xba\xe4\x5d\xc8\x5d\x32\xbe\x99\xb6\x20\x2b\x43\x3b\x3b\x8f\x6b\x5f\x3b\x33\x86\x45\xd9\x1c\xcd\x25\xdc\x4c\x3f\x06\x5a\x4a\xc4\x06\x87\x3b\x30\x8a\x15\x48\x81\xa4\x86\x6d\xf1\xdf\xb0\x91\x8f\xa0\xe4\xf7\x86\x68\xfd\xb0\x51\x9e\x73\xd3\x1e\x5e\x3b\xdb\xea\xf6\x7f\xed\x79\x83\xc8\x69\xf8\x0a\xbc\x8b\x1b\x79\xd4\x13\x07\x84\x83\xa3\xfd\xf8\xb9\x77\xcf\x12\xde\x30\xa6\xd8\x6c\xb7\x7d\x50\x9b\x84\x99\xc9\xb9\xef\xc5\xc6\x7d\x79\xb3\x98\x5b\x0e\x8e\x41\x35\xdc\x4f\xe9\x8e\xfd\x42\xc6\x16\xf7\x38\x28\xba\xa0\x93\x9c\xb4\x85\x59\x93\x89\xc0\xf1\xf4\x81\x32\x8a\xe0\x8d\x21\xca\x00\x81\x9f\xee\xa0\x2c\x28\x31\x36\x7a\x49\xb0\xf1\xd1\x45\xb1\xf6\x0b\xe6\x8a\x28\x0d\x6b\xa9\x76\x44\x51\x28\x85\x61\xdc\xce\xef\x81\x28\x6c\x53\x3f\x8d\xe6\xce\xde\x62\x5b\xc2\xfd\xb3\x22\xf0\xb9\x3f\x0e\xbb\x26\x1f\x4f\x42\x24\x69\x76\x4e\xe8\x22\x56\x2b\x37\x81\xd7\xae\x04\xf0\x9f\xfb\x26\x63\x7a\x12\x12\x63\x94\x3f\xee\x39\xc3\x78\x62\xed\x3a\xeb\x94\x64\xed\xf2\xb8\x77\xac\x9e\xe2\x71\x4a\xa6\xdb\x44\xa0\x21\x4f\xb5\xf6\x2b\xbf\x1a\x5f\x77\x78\xf7\xdd\x6a\xfc\xe9\xb8\x35\xd4\xe9\x78\x9f\xf6\x91\x5c\x44\xd2\x63\x3d\xb6\xa7\x6c\x7c\x26\x9e\x50\xfa\xca\x9e\x1f\xdf\xbb\x70\xd2\x87\xde\x31\x69\x95\x5d\xdd\xd7\x4f\x6a\x99\x09\x8a\x0f\x8f\xa9\x98\xd1\xf1\x24\xd4\xe5\xaa\x7a\xb8\xf0\xbf\x68\x0b\xb0\x86\xcc\x39\xef\x30\x14\x9c\x25\x14\x56\x44\x3f\xa9\x08\x06\x49\xc8\x13\x51\xa3\x16\x59\xed\xea\x78\x6d\x15\x3e\x9d\xb4\xef\x5e\xdf\x6a\x9b\x5c\x31\x9d\x01\x81\x1d\xae\xb4\x7b\x56\x80\xda\xdf\xdd\x53\x4f\xf5\xa4\xf3\xf2\x87\xbb\xce\xb3\x4e\x7b\x22\x7c\xc7\xbd\xfd\x71\xc1\xa5\x47\x93\x8b\xbf\x66\xd8\xed\x76\xe1\x46\xca\x0d\xaf\x7e\xc7\xd0\xbe\xaa\x44\xa4\x60\xe1\x5b\xed\x01\xd1\x7b\x91\x02\xc5\x35\xaa\x65\x87\x7d\xfd\xd4\x12\x47\xd5\x77\xf6\x38\xaa\x7e\x3c\xf4\xaf\x00\x00\x00\xff\xff\xd9\xd8\xd1\x5e\x4d\x24\x00\x00") func faucetHtmlBytes() ([]byte, error) { return bindataRead( @@ -85,7 +85,7 @@ func faucetHtml() (*asset, error) { } info := bindataFileInfo{name: "faucet.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdb, 0xa2, 0x98, 0x44, 0x4b, 0x50, 0xf8, 0xa1, 0xac, 0x4a, 0x76, 0x2e, 0xcc, 0x3d, 0xcb, 0x81, 0x9e, 0x2a, 0xaa, 0x87, 0xf5, 0x9d, 0x53, 0x4, 0x8a, 0xdd, 0x5a, 0xfe, 0xd3, 0xc3, 0xf, 0x11}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0x42, 0xb4, 0x67, 0xdf, 0x31, 0x8e, 0x4f, 0xcc, 0x2c, 0xe0, 0x3, 0x84, 0x98, 0xd4, 0x9a, 0x57, 0x86, 0x2f, 0x32, 0xf3, 0x4, 0x88, 0x0, 0xc2, 0x31, 0x7d, 0xea, 0x46, 0x4a, 0x1b, 0x3a}} return a, nil } diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 51eb54a0af..ccfe2609fe 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -19,10 +19,13 @@ package main import ( "encoding/json" "fmt" + "net" "os" + "path" "path/filepath" "runtime" "strconv" + "strings" "sync/atomic" "time" @@ -37,6 +40,8 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/trie" "gopkg.in/urfave/cli.v1" ) @@ -56,6 +61,23 @@ The init command initializes a new genesis block and definition for the network. This is a destructive action and changes the network in which you will be participating. +It expects the genesis file as argument.`, + } + initNetworkCommand = cli.Command{ + Action: utils.MigrateFlags(initNetwork), + Name: "init-network", + Usage: "Bootstrap and initialize a new genesis block, and nodekey, config files for network nodes", + ArgsUsage: "", + Flags: []cli.Flag{ + utils.InitNetworkDir, + utils.InitNetworkPort, + utils.InitNetworkSize, + utils.InitNetworkIps, + configFileFlag, + }, + Category: "BLOCKCHAIN COMMANDS", + Description: ` +The init-network command initializes a new genesis block, definition for the network, config files for network nodes. It expects the genesis file as argument.`, } dumpGenesisCommand = cli.Command{ @@ -252,6 +274,98 @@ func initGenesis(ctx *cli.Context) error { return nil } +// initNetwork will bootstrap and initialize a new genesis block, and nodekey, config files for network nodes +func initNetwork(ctx *cli.Context) error { + initDir := ctx.String(utils.InitNetworkDir.Name) + if len(initDir) == 0 { + utils.Fatalf("init.dir is required") + } + size := ctx.Int(utils.InitNetworkSize.Name) + port := ctx.Int(utils.InitNetworkPort.Name) + ipStr := ctx.String(utils.InitNetworkIps.Name) + cfgFile := ctx.String(configFileFlag.Name) + + if len(cfgFile) == 0 { + utils.Fatalf("config file is required") + } + var ips []string + if len(ipStr) != 0 { + ips = strings.Split(ipStr, ",") + if len(ips) != size { + utils.Fatalf("mismatch of size and length of ips") + } + for i := 0; i < size; i++ { + _, err := net.ResolveIPAddr("", ips[i]) + if err != nil { + utils.Fatalf("invalid format of ip") + return err + } + } + } else { + ips = make([]string, size) + for i := 0; i < size; i++ { + ips[i] = "127.0.0.1" + } + } + + // Make sure we have a valid genesis JSON + genesisPath := ctx.Args().First() + if len(genesisPath) == 0 { + utils.Fatalf("Must supply path to genesis JSON file") + } + file, err := os.Open(genesisPath) + if err != nil { + utils.Fatalf("Failed to read genesis file: %v", err) + } + defer file.Close() + + genesis := new(core.Genesis) + if err := json.NewDecoder(file).Decode(genesis); err != nil { + utils.Fatalf("invalid genesis file: %v", err) + } + enodes := make([]*enode.Node, size) + + // load config + var config gethConfig + err = loadConfig(cfgFile, &config) + if err != nil { + return err + } + config.Eth.Genesis = genesis + + for i := 0; i < size; i++ { + stack, err := node.New(&config.Node) + if err != nil { + return err + } + stack.Config().DataDir = path.Join(initDir, fmt.Sprintf("node%d", i)) + pk := stack.Config().NodeKey() + enodes[i] = enode.NewV4(&pk.PublicKey, net.ParseIP(ips[i]), port, port) + } + + for i := 0; i < size; i++ { + config.Node.HTTPHost = ips[i] + config.Node.P2P.StaticNodes = make([]*enode.Node, size-1) + for j := 0; j < i; j++ { + config.Node.P2P.StaticNodes[j] = enodes[j] + } + for j := i + 1; j < size; j++ { + config.Node.P2P.StaticNodes[j-1] = enodes[j] + } + out, err := tomlSettings.Marshal(config) + if err != nil { + return err + } + dump, err := os.OpenFile(path.Join(initDir, fmt.Sprintf("node%d", i), "config.toml"), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + return err + } + defer dump.Close() + dump.Write(out) + } + return nil +} + func dumpGenesis(ctx *cli.Context) error { genesis := utils.MakeGenesis(ctx) if genesis == nil { diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 0d734e5660..96ed8c479f 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -68,6 +68,8 @@ var ( utils.KeyStoreDirFlag, utils.ExternalSignerFlag, utils.NoUSBFlag, + utils.DirectBroadcastFlag, + utils.RangeLimitFlag, utils.SmartCardDaemonPathFlag, utils.OverrideIstanbulFlag, utils.OverrideMuirGlacierFlag, @@ -128,6 +130,7 @@ var ( utils.MinerExtraDataFlag, utils.MinerLegacyExtraDataFlag, utils.MinerRecommitIntervalFlag, + utils.MinerDelayLeftoverFlag, utils.MinerNoVerfiyFlag, utils.NATFlag, utils.NoDiscoverFlag, @@ -200,10 +203,11 @@ func init() { // Initialize the CLI app and start Geth app.Action = geth app.HideVersion = true // we have a command to print the version - app.Copyright = "Copyright 2013-2020 The go-ethereum Authors" + app.Copyright = "Copyright 2013-2020 The go-ethereum Authors and BSC Authors" app.Commands = []cli.Command{ // See chaincmd.go: initCommand, + initNetworkCommand, importCommand, exportCommand, importPreimagesCommand, diff --git a/cmd/geth/retesteth.go b/cmd/geth/retesteth.go index eccc8cd670..e254890ca0 100644 --- a/cmd/geth/retesteth.go +++ b/cmd/geth/retesteth.go @@ -36,6 +36,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/systemcontracts" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -133,6 +134,8 @@ type CParamsParams struct { ConstantinopleForkBlock *math.HexOrDecimal64 `json:"constantinopleForkBlock"` ConstantinopleFixForkBlock *math.HexOrDecimal64 `json:"constantinopleFixForkBlock"` IstanbulBlock *math.HexOrDecimal64 `json:"istanbulForkBlock"` + RamanujanForkBlock *math.HexOrDecimal64 `json:"ramanujanForkBlock"` + MirrorSyncForkBlock *math.HexOrDecimal64 `json:"mirrorSyncForkBlock"` ChainID *math.HexOrDecimal256 `json:"chainID"` MaximumExtraDataSize math.HexOrDecimal64 `json:"maximumExtraDataSize"` TieBreakingGas bool `json:"tieBreakingGas"` @@ -229,18 +232,19 @@ func (e *NoRewardEngine) accumulateRewards(config *params.ChainConfig, state *st state.AddBalance(header.Coinbase, reward) } -func (e *NoRewardEngine) Finalize(chain consensus.ChainReader, header *types.Header, statedb *state.StateDB, txs []*types.Transaction, - uncles []*types.Header) { +func (e *NoRewardEngine) Finalize(chain consensus.ChainReader, header *types.Header, statedb *state.StateDB, txs *[]*types.Transaction, + uncles []*types.Header, receipts *[]*types.Receipt, systemTxs *[]*types.Transaction, usedGas *uint64) (err error) { if e.rewardsOn { - e.inner.Finalize(chain, header, statedb, txs, uncles) + err = e.inner.Finalize(chain, header, statedb, txs, uncles, receipts, systemTxs, usedGas) } else { e.accumulateRewards(chain.Config(), statedb, header, uncles) header.Root = statedb.IntermediateRoot(chain.Config().IsEIP158(header.Number)) } + return } func (e *NoRewardEngine) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, statedb *state.StateDB, txs []*types.Transaction, - uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { + uncles []*types.Header, receipts []*types.Receipt) (*types.Block, []*types.Receipt, error) { if e.rewardsOn { return e.inner.FinalizeAndAssemble(chain, header, statedb, txs, uncles, receipts) } else { @@ -248,10 +252,14 @@ func (e *NoRewardEngine) FinalizeAndAssemble(chain consensus.ChainReader, header header.Root = statedb.IntermediateRoot(chain.Config().IsEIP158(header.Number)) // Header seems complete, assemble into a block and return - return types.NewBlock(header, txs, uncles, receipts), nil + return types.NewBlock(header, txs, uncles, receipts), receipts, nil } } +func (e *NoRewardEngine) Delay(_ consensus.ChainReader, _ *types.Header) *time.Duration { + return nil +} + func (e *NoRewardEngine) Seal(chain consensus.ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { return e.inner.Seal(chain, block, results, stop) } @@ -321,6 +329,8 @@ func (api *RetestethAPI) SetChainParams(ctx context.Context, chainParams ChainPa constantinopleBlock *big.Int petersburgBlock *big.Int istanbulBlock *big.Int + ramanujanBlock *big.Int + mirrorSyncBlock *big.Int ) if chainParams.Params.HomesteadForkBlock != nil { homesteadBlock = big.NewInt(int64(*chainParams.Params.HomesteadForkBlock)) @@ -350,6 +360,12 @@ func (api *RetestethAPI) SetChainParams(ctx context.Context, chainParams ChainPa if chainParams.Params.IstanbulBlock != nil { istanbulBlock = big.NewInt(int64(*chainParams.Params.IstanbulBlock)) } + if chainParams.Params.RamanujanForkBlock != nil { + ramanujanBlock = big.NewInt(int64(*chainParams.Params.RamanujanForkBlock)) + } + if chainParams.Params.MirrorSyncForkBlock != nil { + mirrorSyncBlock = big.NewInt(int64(*chainParams.Params.MirrorSyncForkBlock)) + } genesis := &core.Genesis{ Config: ¶ms.ChainConfig{ @@ -364,6 +380,8 @@ func (api *RetestethAPI) SetChainParams(ctx context.Context, chainParams ChainPa ConstantinopleBlock: constantinopleBlock, PetersburgBlock: petersburgBlock, IstanbulBlock: istanbulBlock, + RamanujanBlock: ramanujanBlock, + MirrorSyncBlock: mirrorSyncBlock, }, Nonce: uint64(chainParams.Genesis.Nonce), Timestamp: uint64(chainParams.Genesis.Timestamp), @@ -500,6 +518,7 @@ func (api *RetestethAPI) mineBlock() error { if api.chainConfig.DAOForkSupport && api.chainConfig.DAOForkBlock != nil && api.chainConfig.DAOForkBlock.Cmp(header.Number) == 0 { misc.ApplyDAOHardFork(statedb) } + systemcontracts.UpgradeBuildInSystemContract(api.chainConfig, header.Number, statedb) gasPool := new(core.GasPool).AddGas(header.GasLimit) txCount := 0 var txs []*types.Transaction @@ -546,7 +565,7 @@ func (api *RetestethAPI) mineBlock() error { } } } - block, err := api.engine.FinalizeAndAssemble(api.blockchain, header, statedb, txs, []*types.Header{}, receipts) + block, _, err := api.engine.FinalizeAndAssemble(api.blockchain, header, statedb, txs, []*types.Header{}, receipts) if err != nil { return err } diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index 1601969d14..1a53e22447 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -31,7 +31,7 @@ import ( var AppHelpTemplate = `NAME: {{.App.Name}} - {{.App.Usage}} - Copyright 2013-2019 The go-ethereum Authors + Copyright 2013-2019 The go-ethereum Authors and BSC Authors USAGE: {{.App.HelpName}} [options]{{if .App.Commands}} command [command options]{{end}} {{if .App.ArgsUsage}}{{.App.ArgsUsage}}{{else}}[arguments...]{{end}} @@ -70,6 +70,8 @@ var AppHelpFlagGroups = []flagGroup{ utils.AncientFlag, utils.KeyStoreDirFlag, utils.NoUSBFlag, + utils.DirectBroadcastFlag, + utils.RangeLimitFlag, utils.SmartCardDaemonPathFlag, utils.NetworkIdFlag, utils.GoerliFlag, @@ -209,6 +211,7 @@ var AppHelpFlagGroups = []flagGroup{ utils.MinerEtherbaseFlag, utils.MinerExtraDataFlag, utils.MinerRecommitIntervalFlag, + utils.MinerDelayLeftoverFlag, utils.MinerNoVerfiyFlag, }, }, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 00bbaf50e4..1afd987a6d 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -143,6 +143,14 @@ var ( Usage: "Data directory for the databases and keystore", Value: DirectoryString(node.DefaultDataDir()), } + DirectBroadcastFlag = cli.BoolFlag{ + Name: "directbroadcast", + Usage: "Enable directly broadcast mined block to all peers", + } + RangeLimitFlag = cli.BoolFlag{ + Name: "rangelimit", + Usage: "Enable 5000 blocks limit for range query", + } AncientFlag = DirectoryFlag{ Name: "datadir.ancient", Usage: "Data directory for ancient chain segments (default = inside chaindata)", @@ -483,6 +491,11 @@ var ( Usage: "Time interval to recreate the block being mined", Value: eth.DefaultConfig.Miner.Recommit, } + MinerDelayLeftoverFlag = cli.DurationFlag{ + Name: "miner.delayleftover", + Usage: "Time interval to for broadcast block", + Value: eth.DefaultConfig.Miner.DelayLeftOver, + } MinerNoVerfiyFlag = cli.BoolFlag{ Name: "miner.noverify", Usage: "Disable remote sealing verification", @@ -773,6 +786,31 @@ var ( Usage: "External EVM configuration (default = built-in interpreter)", Value: "", } + + // Init network + InitNetworkSize = cli.IntFlag{ + Name: "init.size", + Usage: "the size of the network", + Value: 1, + } + + InitNetworkDir = cli.StringFlag{ + Name: "init.dir", + Usage: "the direction to store initial network data", + Value: "", + } + + InitNetworkIps = cli.StringFlag{ + Name: "init.ips", + Usage: "the ips of each node in the network, example '192.168.0.1,192.168.0.2'", + Value: "", + } + + InitNetworkPort = cli.IntFlag{ + Name: "init.p2p-port", + Usage: "the p2p port of the nodes in the network", + Value: 30311, + } ) // MakeDataDir retrieves the currently requested data directory, terminating @@ -1218,6 +1256,12 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { if ctx.GlobalIsSet(NoUSBFlag.Name) { cfg.NoUSB = ctx.GlobalBool(NoUSBFlag.Name) } + if ctx.GlobalIsSet(DirectBroadcastFlag.Name) { + cfg.DirectBroadcast = ctx.GlobalBool(DirectBroadcastFlag.Name) + } + if ctx.GlobalIsSet(RangeLimitFlag.Name) { + cfg.RangeLimit = ctx.GlobalBool(RangeLimitFlag.Name) + } if ctx.GlobalIsSet(InsecureUnlockAllowedFlag.Name) { cfg.InsecureUnlockAllowed = ctx.GlobalBool(InsecureUnlockAllowedFlag.Name) } @@ -1373,6 +1417,9 @@ func setMiner(ctx *cli.Context, cfg *miner.Config) { if ctx.GlobalIsSet(MinerRecommitIntervalFlag.Name) { cfg.Recommit = ctx.Duration(MinerRecommitIntervalFlag.Name) } + if ctx.GlobalIsSet(MinerDelayLeftoverFlag.Name) { + cfg.DelayLeftOver = ctx.Duration(MinerDelayLeftoverFlag.Name) + } if ctx.GlobalIsSet(MinerNoVerfiyFlag.Name) { cfg.Noverify = ctx.Bool(MinerNoVerfiyFlag.Name) } @@ -1494,6 +1541,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { if ctx.GlobalIsSet(GCModeFlag.Name) { cfg.NoPruning = ctx.GlobalString(GCModeFlag.Name) == "archive" } + if ctx.GlobalIsSet(DirectBroadcastFlag.Name) { + cfg.DirectBroadcast = ctx.GlobalBool(DirectBroadcastFlag.Name) + } + if ctx.GlobalIsSet(RangeLimitFlag.Name) { + cfg.RangeLimit = ctx.GlobalBool(RangeLimitFlag.Name) + } if ctx.GlobalIsSet(CacheNoPrefetchFlag.Name) { cfg.NoPrefetch = ctx.GlobalBool(CacheNoPrefetchFlag.Name) } diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index 100c205292..ec0bffa93f 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -552,21 +552,24 @@ func (c *Clique) Prepare(chain consensus.ChainReader, header *types.Header) erro // Finalize implements consensus.Engine, ensuring no uncles are set, nor block // rewards given. -func (c *Clique) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) { +func (c *Clique) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs *[]*types.Transaction, uncles []*types.Header, + receipts *[]*types.Receipt, _ *[]*types.Transaction, _ *uint64) (err error) { // No block rewards in PoA, so the state remains as is and uncles are dropped header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) header.UncleHash = types.CalcUncleHash(nil) + return } // FinalizeAndAssemble implements consensus.Engine, ensuring no uncles are set, // nor block rewards given, and returns the final block. -func (c *Clique) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { +func (c *Clique) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, + txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, []*types.Receipt, error) { // No block rewards in PoA, so the state remains as is and uncles are dropped header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) header.UncleHash = types.CalcUncleHash(nil) // Assemble and return the final block for sealing - return types.NewBlock(header, txs, nil, receipts), nil + return types.NewBlock(header, txs, nil, receipts), receipts, nil } // Authorize injects a private key into the consensus engine to mint new blocks @@ -579,6 +582,10 @@ func (c *Clique) Authorize(signer common.Address, signFn SignerFn) { c.signFn = signFn } +func (c *Clique) Delay(chain consensus.ChainReader, header *types.Header) *time.Duration { + return nil +} + // Seal implements consensus.Engine, attempting to create a sealed block using // the local signing credentials. func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { diff --git a/consensus/consensus.go b/consensus/consensus.go index f753af550c..a2929e87f4 100644 --- a/consensus/consensus.go +++ b/consensus/consensus.go @@ -19,6 +19,7 @@ package consensus import ( "math/big" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" @@ -27,6 +28,10 @@ import ( "github.com/ethereum/go-ethereum/rpc" ) +var ( + SystemAddress = common.HexToAddress("0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE") +) + // ChainReader defines a small collection of methods needed to access the local // blockchain during header and/or uncle verification. type ChainReader interface { @@ -84,8 +89,8 @@ type Engine interface { // // Note: The block header and state database might be updated to reflect any // consensus rules that happen at finalization (e.g. block rewards). - Finalize(chain ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, - uncles []*types.Header) + Finalize(chain ChainReader, header *types.Header, state *state.StateDB, txs *[]*types.Transaction, + uncles []*types.Header, receipts *[]*types.Receipt, systemTxs *[]*types.Transaction, usedGas *uint64) error // FinalizeAndAssemble runs any post-transaction state modifications (e.g. block // rewards) and assembles the final block. @@ -93,7 +98,7 @@ type Engine interface { // Note: The block header and state database might be updated to reflect any // consensus rules that happen at finalization (e.g. block rewards). FinalizeAndAssemble(chain ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, - uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) + uncles []*types.Header, receipts []*types.Receipt) (*types.Block, []*types.Receipt, error) // Seal generates a new sealing request for the given input block and pushes // the result into the given channel. @@ -112,6 +117,9 @@ type Engine interface { // APIs returns the RPC APIs this consensus engine provides. APIs(chain ChainReader) []rpc.API + // Delay returns the max duration the miner can commit txs + Delay(chain ChainReader, header *types.Header) *time.Duration + // Close terminates any background threads maintained by the consensus engine. Close() error } @@ -123,3 +131,11 @@ type PoW interface { // Hashrate returns the current mining hashrate of a PoW consensus engine. Hashrate() float64 } + +type PoSA interface { + Engine + + IsSystemTransaction(tx *types.Transaction, header *types.Header) (bool, error) + IsSystemContract(to *common.Address) bool + EnoughDistance(chain ChainReader, header *types.Header) bool +} diff --git a/consensus/ethash/algorithm.go b/consensus/ethash/algorithm.go index d6c871092e..eb94d136b9 100644 --- a/consensus/ethash/algorithm.go +++ b/consensus/ethash/algorithm.go @@ -304,16 +304,16 @@ func generateDataset(dest []uint32, epoch uint64, cache []uint32) { keccak512 := makeHasher(sha3.NewLegacyKeccak512()) // Calculate the data segment this thread should generate - batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads))) - first := uint32(id) * batch + batch := (size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads)) + first := uint64(id) * batch limit := first + batch - if limit > uint32(size/hashBytes) { - limit = uint32(size / hashBytes) + if limit > size/hashBytes { + limit = size / hashBytes } // Calculate the dataset segment percent := uint32(size / hashBytes / 100) for index := first; index < limit; index++ { - item := generateDatasetItem(cache, index, keccak512) + item := generateDatasetItem(cache, uint32(index), keccak512) if swapped { swap(item) } diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index 8ae99b1994..72ec3e9934 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -569,21 +569,28 @@ func (ethash *Ethash) Prepare(chain consensus.ChainReader, header *types.Header) // Finalize implements consensus.Engine, accumulating the block and uncle rewards, // setting the final state on the header -func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) { +func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs *[]*types.Transaction, uncles []*types.Header, + receipts *[]*types.Receipt, _ *[]*types.Transaction, _ *uint64) (err error) { // Accumulate any block and uncle rewards and commit the final state root accumulateRewards(chain.Config(), state, header, uncles) header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) + return } // FinalizeAndAssemble implements consensus.Engine, accumulating the block and // uncle rewards, setting the final state and assembling the block. -func (ethash *Ethash) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { +func (ethash *Ethash) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, + txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, []*types.Receipt, error) { // Accumulate any block and uncle rewards and commit the final state root accumulateRewards(chain.Config(), state, header, uncles) header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) // Header seems complete, assemble into a block and return - return types.NewBlock(header, txs, uncles, receipts), nil + return types.NewBlock(header, txs, uncles, receipts), receipts, nil +} + +func (ethash *Ethash) Delay(_ consensus.ChainReader, _ *types.Header) *time.Duration { + return nil } // SealHash returns the hash of a block prior to it being sealed. diff --git a/consensus/parlia/abi.go b/consensus/parlia/abi.go new file mode 100644 index 0000000000..a0b49800c4 --- /dev/null +++ b/consensus/parlia/abi.go @@ -0,0 +1,676 @@ +package parlia + +const validatorSetABI = ` +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "batchTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "deprecatedDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address payable", + "name": "validator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "directTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "systemTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "validatorDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "validatorFelony", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "validatorJailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "validatorMisdemeanor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "validatorSetUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "CHANNEL_ID", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DUSTY_INCOMING", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "EXTRA_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "JAIL_MESSAGE_TYPE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RELAYER_REWARD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SYSTEM_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VALIDATORS_UPDATE_MESSAGE_TYPE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "alreadyInit", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "currentValidatorSet", + "outputs": [ + { + "internalType": "address", + "name": "consensusAddress", + "type": "address" + }, + { + "internalType": "address payable", + "name": "feeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "BBCFeeAddress", + "type": "address" + }, + { + "internalType": "uint64", + "name": "votingPower", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "jailed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "incoming", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fromChainId", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initLightClientAddr", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initSlashContract", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initSystemRewardAddr", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initTokenHubAddr", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initValidatorSetBytes", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keyPrefix", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "previousDepositHeight", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sequence", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "toChainId", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalInComing", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "valAddr", + "type": "address" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "msgBytes", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proof", + "type": "bytes" + }, + { + "internalType": "uint64", + "name": "height", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "packageSequence", + "type": "uint64" + } + ], + "name": "update", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "getIncoming", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "misdemeanor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "felony", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +` + +const slashABI = ` +[ + { + "anonymous": false, + "inputs": [], + "name": "indicatorCleaned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "validatorSlashed", + "type": "event" + }, + { + "inputs": [], + "name": "FELONY_THRESHOLD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MISDEMEANOR_THRESHOLD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SYSTEM_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VALIDATOR_CONTRACT_ADDR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "previousHeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clean", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "getSlashIndicator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +` diff --git a/consensus/parlia/api.go b/consensus/parlia/api.go new file mode 100644 index 0000000000..c723c462ef --- /dev/null +++ b/consensus/parlia/api.go @@ -0,0 +1,88 @@ +// Copyright 2017 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package parlia + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rpc" +) + +// API is a user facing RPC API to allow query snapshot and validators +type API struct { + chain consensus.ChainReader + parlia *Parlia +} + +// GetSnapshot retrieves the state snapshot at a given block. +func (api *API) GetSnapshot(number *rpc.BlockNumber) (*Snapshot, error) { + // Retrieve the requested block number (or current if none requested) + var header *types.Header + if number == nil || *number == rpc.LatestBlockNumber { + header = api.chain.CurrentHeader() + } else { + header = api.chain.GetHeaderByNumber(uint64(number.Int64())) + } + // Ensure we have an actually valid block and return its snapshot + if header == nil { + return nil, errUnknownBlock + } + return api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil) +} + +// GetSnapshotAtHash retrieves the state snapshot at a given block. +func (api *API) GetSnapshotAtHash(hash common.Hash) (*Snapshot, error) { + header := api.chain.GetHeaderByHash(hash) + if header == nil { + return nil, errUnknownBlock + } + return api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil) +} + +// GetValidators retrieves the list of validators at the specified block. +func (api *API) GetValidators(number *rpc.BlockNumber) ([]common.Address, error) { + // Retrieve the requested block number (or current if none requested) + var header *types.Header + if number == nil || *number == rpc.LatestBlockNumber { + header = api.chain.CurrentHeader() + } else { + header = api.chain.GetHeaderByNumber(uint64(number.Int64())) + } + // Ensure we have an actually valid block and return the validators from its snapshot + if header == nil { + return nil, errUnknownBlock + } + snap, err := api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil) + if err != nil { + return nil, err + } + return snap.validators(), nil +} + +// GetValidatorsAtHash retrieves the list of validators at the specified block. +func (api *API) GetValidatorsAtHash(hash common.Hash) ([]common.Address, error) { + header := api.chain.GetHeaderByHash(hash) + if header == nil { + return nil, errUnknownBlock + } + snap, err := api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil) + if err != nil { + return nil, err + } + return snap.validators(), nil +} diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go new file mode 100644 index 0000000000..d789930e32 --- /dev/null +++ b/consensus/parlia/parlia.go @@ -0,0 +1,1252 @@ +package parlia + +import ( + "bytes" + "context" + "encoding/hex" + "errors" + "fmt" + "io" + "math" + "math/big" + "math/rand" + "sort" + "strings" + "sync" + "time" + + lru "github.com/hashicorp/golang-lru" + "golang.org/x/crypto/sha3" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/systemcontracts" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" +) + +const ( + inMemorySnapshots = 128 // Number of recent snapshots to keep in memory + inMemorySignatures = 4096 // Number of recent block signatures to keep in memory + + checkpointInterval = 1024 // Number of blocks after which to save the snapshot to the database + defaultEpochLength = uint64(100) // Default number of blocks of checkpoint to update validatorSet from contract + + extraVanity = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity + extraSeal = 65 // Fixed number of extra-data suffix bytes reserved for signer seal + nextForkHashSize = 4 // Fixed number of extra-data suffix bytes reserved for nextForkHash. + + validatorBytesLength = common.AddressLength + wiggleTime = uint64(1) // second, Random delay (per signer) to allow concurrent signers + initialBackOffTime = uint64(1) // second + + systemRewardPercent = 4 // it means 1/2^4 = 1/16 percentage of gas fee incoming will be distributed to system + +) + +var ( + uncleHash = types.CalcUncleHash(nil) // Always Keccak256(RLP([])) as uncles are meaningless outside of PoW. + diffInTurn = big.NewInt(2) // Block difficulty for in-turn signatures + diffNoTurn = big.NewInt(1) // Block difficulty for out-of-turn signatures + // 100 native token + maxSystemBalance = new(big.Int).Mul(big.NewInt(100), big.NewInt(params.Ether)) + + systemContracts = map[common.Address]bool{ + common.HexToAddress(systemcontracts.ValidatorContract): true, + common.HexToAddress(systemcontracts.SlashContract): true, + common.HexToAddress(systemcontracts.SystemRewardContract): true, + common.HexToAddress(systemcontracts.LightClientContract): true, + common.HexToAddress(systemcontracts.RelayerHubContract): true, + common.HexToAddress(systemcontracts.GovHubContract): true, + common.HexToAddress(systemcontracts.TokenHubContract): true, + common.HexToAddress(systemcontracts.RelayerIncentivizeContract): true, + common.HexToAddress(systemcontracts.CrossChainContract): true, + } +) + +// Various error messages to mark blocks invalid. These should be private to +// prevent engine specific errors from being referenced in the remainder of the +// codebase, inherently breaking if the engine is swapped out. Please put common +// error types into the consensus package. +var ( + // errUnknownBlock is returned when the list of validators is requested for a block + // that is not part of the local blockchain. + errUnknownBlock = errors.New("unknown block") + + // errMissingVanity is returned if a block's extra-data section is shorter than + // 32 bytes, which is required to store the signer vanity. + errMissingVanity = errors.New("extra-data 32 byte vanity prefix missing") + + // errMissingSignature is returned if a block's extra-data section doesn't seem + // to contain a 65 byte secp256k1 signature. + errMissingSignature = errors.New("extra-data 65 byte signature suffix missing") + + // errExtraValidators is returned if non-sprint-end block contain validator data in + // their extra-data fields. + errExtraValidators = errors.New("non-sprint-end block contains extra validator list") + + // errInvalidSpanValidators is returned if a block contains an + // invalid list of validators (i.e. non divisible by 20 bytes). + errInvalidSpanValidators = errors.New("invalid validator list on sprint end block") + + // errInvalidMixDigest is returned if a block's mix digest is non-zero. + errInvalidMixDigest = errors.New("non-zero mix digest") + + // errInvalidUncleHash is returned if a block contains an non-empty uncle list. + errInvalidUncleHash = errors.New("non empty uncle hash") + + // errMismatchingEpochValidators is returned if a sprint block contains a + // list of validators different than the one the local node calculated. + errMismatchingEpochValidators = errors.New("mismatching validator list on epoch block") + + // errInvalidDifficulty is returned if the difficulty of a block is missing. + errInvalidDifficulty = errors.New("invalid difficulty") + + // errWrongDifficulty is returned if the difficulty of a block doesn't match the + // turn of the signer. + errWrongDifficulty = errors.New("wrong difficulty") + + // errOutOfRangeChain is returned if an authorization list is attempted to + // be modified via out-of-range or non-contiguous headers. + errOutOfRangeChain = errors.New("out of range or non-contiguous chain") + + // errBlockHashInconsistent is returned if an authorization list is attempted to + // insert an inconsistent block. + errBlockHashInconsistent = errors.New("the block hash is inconsistent") + + // errUnauthorizedValidator is returned if a header is signed by a non-authorized entity. + errUnauthorizedValidator = errors.New("unauthorized validator") + + // errCoinBaseMisMatch is returned if a header's coinbase do not match with signature + errCoinBaseMisMatch = errors.New("coinbase do not match with signature") + + // errRecentlySigned is returned if a header is signed by an authorized entity + // that already signed a header recently, thus is temporarily not allowed to. + errRecentlySigned = errors.New("recently signed") +) + +// SignerFn is a signer callback function to request a header to be signed by a +// backing account. +type SignerFn func(accounts.Account, string, []byte) ([]byte, error) +type SignerTxFn func(accounts.Account, *types.Transaction, *big.Int) (*types.Transaction, error) + +func isToSystemContract(to common.Address) bool { + return systemContracts[to] +} + +// ecrecover extracts the Ethereum account address from a signed header. +func ecrecover(header *types.Header, sigCache *lru.ARCCache, chainId *big.Int) (common.Address, error) { + // If the signature's already cached, return that + hash := header.Hash() + if address, known := sigCache.Get(hash); known { + return address.(common.Address), nil + } + // Retrieve the signature from the header extra-data + if len(header.Extra) < extraSeal { + return common.Address{}, errMissingSignature + } + signature := header.Extra[len(header.Extra)-extraSeal:] + + // Recover the public key and the Ethereum address + pubkey, err := crypto.Ecrecover(SealHash(header, chainId).Bytes(), signature) + if err != nil { + return common.Address{}, err + } + var signer common.Address + copy(signer[:], crypto.Keccak256(pubkey[1:])[12:]) + + sigCache.Add(hash, signer) + return signer, nil +} + +// ParliaRLP returns the rlp bytes which needs to be signed for the parlia +// sealing. The RLP to sign consists of the entire header apart from the 65 byte signature +// contained at the end of the extra data. +// +// Note, the method requires the extra data to be at least 65 bytes, otherwise it +// panics. This is done to avoid accidentally using both forms (signature present +// or not), which could be abused to produce different hashes for the same header. +func ParliaRLP(header *types.Header, chainId *big.Int) []byte { + b := new(bytes.Buffer) + encodeSigHeader(b, header, chainId) + return b.Bytes() +} + +// Parlia is the consensus engine of BSC +type Parlia struct { + chainConfig *params.ChainConfig // Chain config + config *params.ParliaConfig // Consensus engine configuration parameters for parlia consensus + genesisHash common.Hash + db ethdb.Database // Database to store and retrieve snapshot checkpoints + + recentSnaps *lru.ARCCache // Snapshots for recent block to speed up + signatures *lru.ARCCache // Signatures of recent blocks to speed up mining + + signer types.Signer + + val common.Address // Ethereum address of the signing key + signFn SignerFn // Signer function to authorize hashes with + signTxFn SignerTxFn + + lock sync.RWMutex // Protects the signer fields + + ethAPI *ethapi.PublicBlockChainAPI + validatorSetABI abi.ABI + slashABI abi.ABI + + // The fields below are for testing only + fakeDiff bool // Skip difficulty verifications +} + +// New creates a Parlia consensus engine. +func New( + chainConfig *params.ChainConfig, + db ethdb.Database, + ethAPI *ethapi.PublicBlockChainAPI, + genesisHash common.Hash, +) *Parlia { + // get parlia config + parliaConfig := chainConfig.Parlia + + // Set any missing consensus parameters to their defaults + if parliaConfig != nil && parliaConfig.Epoch == 0 { + parliaConfig.Epoch = defaultEpochLength + } + + // Allocate the snapshot caches and create the engine + recentSnaps, err := lru.NewARC(inMemorySnapshots) + if err != nil { + panic(err) + } + signatures, err := lru.NewARC(inMemorySignatures) + if err != nil { + panic(err) + } + vABI, err := abi.JSON(strings.NewReader(validatorSetABI)) + if err != nil { + panic(err) + } + sABI, err := abi.JSON(strings.NewReader(slashABI)) + if err != nil { + panic(err) + } + c := &Parlia{ + chainConfig: chainConfig, + config: parliaConfig, + genesisHash: genesisHash, + db: db, + ethAPI: ethAPI, + recentSnaps: recentSnaps, + signatures: signatures, + validatorSetABI: vABI, + slashABI: sABI, + signer: types.NewEIP155Signer(chainConfig.ChainID), + } + + return c +} + +func (p *Parlia) IsSystemTransaction(tx *types.Transaction, header *types.Header) (bool, error) { + // deploy a contract + if tx.To() == nil { + return false, nil + } + sender, err := types.Sender(p.signer, tx) + if err != nil { + return false, errors.New("UnAuthorized transaction") + } + if sender == header.Coinbase && isToSystemContract(*tx.To()) && tx.GasPrice().Cmp(big.NewInt(0)) == 0 { + return true, nil + } + return false, nil +} + +func (p *Parlia) IsSystemContract(to *common.Address) bool { + if to == nil { + return false + } + return isToSystemContract(*to) +} + +// Author implements consensus.Engine, returning the SystemAddress +func (p *Parlia) Author(header *types.Header) (common.Address, error) { + return header.Coinbase, nil +} + +// VerifyHeader checks whether a header conforms to the consensus rules. +func (p *Parlia) VerifyHeader(chain consensus.ChainReader, header *types.Header, seal bool) error { + return p.verifyHeader(chain, header, nil) +} + +// VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers. The +// method returns a quit channel to abort the operations and a results channel to +// retrieve the async verifications (the order is that of the input slice). +func (p *Parlia) VerifyHeaders(chain consensus.ChainReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { + abort := make(chan struct{}) + results := make(chan error, len(headers)) + + go func() { + for i, header := range headers { + err := p.verifyHeader(chain, header, headers[:i]) + + select { + case <-abort: + return + case results <- err: + } + } + }() + return abort, results +} + +// verifyHeader checks whether a header conforms to the consensus rules.The +// caller may optionally pass in a batch of parents (ascending order) to avoid +// looking those up from the database. This is useful for concurrently verifying +// a batch of new headers. +func (p *Parlia) verifyHeader(chain consensus.ChainReader, header *types.Header, parents []*types.Header) error { + if header.Number == nil { + return errUnknownBlock + } + number := header.Number.Uint64() + + // Don't waste time checking blocks from the future + if header.Time > uint64(time.Now().Unix()) { + return consensus.ErrFutureBlock + } + // Check that the extra-data contains the vanity, validators and signature. + if len(header.Extra) < extraVanity { + return errMissingVanity + } + if len(header.Extra) < extraVanity+extraSeal { + return errMissingSignature + } + // check extra data + isEpoch := number%p.config.Epoch == 0 + + // Ensure that the extra-data contains a signer list on checkpoint, but none otherwise + signersBytes := len(header.Extra) - extraVanity - extraSeal + if !isEpoch && signersBytes != 0 { + return errExtraValidators + } + + if isEpoch && signersBytes%validatorBytesLength != 0 { + return errInvalidSpanValidators + } + + // Ensure that the mix digest is zero as we don't have fork protection currently + if header.MixDigest != (common.Hash{}) { + return errInvalidMixDigest + } + // Ensure that the block doesn't contain any uncles which are meaningless in PoA + if header.UncleHash != uncleHash { + return errInvalidUncleHash + } + // Ensure that the block's difficulty is meaningful (may not be correct at this point) + if number > 0 { + if header.Difficulty == nil { + return errInvalidDifficulty + } + } + // If all checks passed, validate any special fields for hard forks + if err := misc.VerifyForkHashes(chain.Config(), header, false); err != nil { + return err + } + // All basic checks passed, verify cascading fields + return p.verifyCascadingFields(chain, header, parents) +} + +// verifyCascadingFields verifies all the header fields that are not standalone, +// rather depend on a batch of previous headers. The caller may optionally pass +// in a batch of parents (ascending order) to avoid looking those up from the +// database. This is useful for concurrently verifying a batch of new headers. +func (p *Parlia) verifyCascadingFields(chain consensus.ChainReader, header *types.Header, parents []*types.Header) error { + // The genesis block is the always valid dead-end + number := header.Number.Uint64() + if number == 0 { + return nil + } + + var parent *types.Header + if len(parents) > 0 { + parent = parents[len(parents)-1] + } else { + parent = chain.GetHeader(header.ParentHash, number-1) + } + + if parent == nil || parent.Number.Uint64() != number-1 || parent.Hash() != header.ParentHash { + return consensus.ErrUnknownAncestor + } + + snap, err := p.snapshot(chain, number-1, header.ParentHash, parents) + if err != nil { + return err + } + + err = p.blockTimeVerifyForRamanujanFork(snap, header, parent) + if err != nil { + return err + } + + // Verify that the gas limit is <= 2^63-1 + capacity := uint64(0x7fffffffffffffff) + if header.GasLimit > capacity { + return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, capacity) + } + // Verify that the gasUsed is <= gasLimit + if header.GasUsed > header.GasLimit { + return fmt.Errorf("invalid gasUsed: have %d, gasLimit %d", header.GasUsed, header.GasLimit) + } + + // Verify that the gas limit remains within allowed bounds + diff := int64(parent.GasLimit) - int64(header.GasLimit) + if diff < 0 { + diff *= -1 + } + limit := parent.GasLimit / params.GasLimitBoundDivisor + + if uint64(diff) >= limit || header.GasLimit < params.MinGasLimit { + return fmt.Errorf("invalid gas limit: have %d, want %d += %d", header.GasLimit, parent.GasLimit, limit) + } + + // All basic checks passed, verify the seal and return + return p.verifySeal(chain, header, parents) +} + +// snapshot retrieves the authorization snapshot at a given point in time. +func (p *Parlia) snapshot(chain consensus.ChainReader, number uint64, hash common.Hash, parents []*types.Header) (*Snapshot, error) { + // Search for a snapshot in memory or on disk for checkpoints + var ( + headers []*types.Header + snap *Snapshot + ) + + for snap == nil { + // If an in-memory snapshot was found, use that + if s, ok := p.recentSnaps.Get(hash); ok { + snap = s.(*Snapshot) + break + } + + // If an on-disk checkpoint snapshot can be found, use that + if number%checkpointInterval == 0 { + if s, err := loadSnapshot(p.config, p.signatures, p.db, hash, p.ethAPI); err == nil { + log.Trace("Loaded snapshot from disk", "number", number, "hash", hash) + snap = s + break + } + } + + // If we're at the genesis, snapshot the initial state. + if number == 0 { + checkpoint := chain.GetHeaderByNumber(number) + if checkpoint != nil { + // get checkpoint data + hash := checkpoint.Hash() + + validatorBytes := checkpoint.Extra[extraVanity : len(checkpoint.Extra)-extraSeal] + // get validators from headers + validators, err := ParseValidators(validatorBytes) + if err != nil { + return nil, err + } + + // new snap shot + snap = newSnapshot(p.config, p.signatures, number, hash, validators, p.ethAPI) + if err := snap.store(p.db); err != nil { + return nil, err + } + log.Info("Stored checkpoint snapshot to disk", "number", number, "hash", hash) + break + } + } + + // No snapshot for this header, gather the header and move backward + var header *types.Header + if len(parents) > 0 { + // If we have explicit parents, pick from there (enforced) + header = parents[len(parents)-1] + if header.Hash() != hash || header.Number.Uint64() != number { + return nil, consensus.ErrUnknownAncestor + } + parents = parents[:len(parents)-1] + } else { + // No explicit parents (or no more left), reach out to the database + header = chain.GetHeader(hash, number) + if header == nil { + return nil, consensus.ErrUnknownAncestor + } + } + headers = append(headers, header) + number, hash = number-1, header.ParentHash + } + + // check if snapshot is nil + if snap == nil { + return nil, fmt.Errorf("unknown error while retrieving snapshot at block number %v", number) + } + + // Previous snapshot found, apply any pending headers on top of it + for i := 0; i < len(headers)/2; i++ { + headers[i], headers[len(headers)-1-i] = headers[len(headers)-1-i], headers[i] + } + + snap, err := snap.apply(headers, chain, parents, p.chainConfig.ChainID) + if err != nil { + return nil, err + } + p.recentSnaps.Add(snap.Hash, snap) + + // If we've generated a new checkpoint snapshot, save to disk + if snap.Number%checkpointInterval == 0 && len(headers) > 0 { + if err = snap.store(p.db); err != nil { + return nil, err + } + log.Trace("Stored snapshot to disk", "number", snap.Number, "hash", snap.Hash) + } + return snap, err +} + +// VerifyUncles implements consensus.Engine, always returning an error for any +// uncles as this consensus mechanism doesn't permit uncles. +func (p *Parlia) VerifyUncles(chain consensus.ChainReader, block *types.Block) error { + if len(block.Uncles()) > 0 { + return errors.New("uncles not allowed") + } + return nil +} + +// VerifySeal implements consensus.Engine, checking whether the signature contained +// in the header satisfies the consensus protocol requirements. +func (p *Parlia) VerifySeal(chain consensus.ChainReader, header *types.Header) error { + return p.verifySeal(chain, header, nil) +} + +// verifySeal checks whether the signature contained in the header satisfies the +// consensus protocol requirements. The method accepts an optional list of parent +// headers that aren't yet part of the local blockchain to generate the snapshots +// from. +func (p *Parlia) verifySeal(chain consensus.ChainReader, header *types.Header, parents []*types.Header) error { + // Verifying the genesis block is not supported + number := header.Number.Uint64() + if number == 0 { + return errUnknownBlock + } + // Retrieve the snapshot needed to verify this header and cache it + snap, err := p.snapshot(chain, number-1, header.ParentHash, parents) + if err != nil { + return err + } + + // Resolve the authorization key and check against validators + signer, err := ecrecover(header, p.signatures, p.chainConfig.ChainID) + if err != nil { + return err + } + + if signer != header.Coinbase { + return errCoinBaseMisMatch + } + + if _, ok := snap.Validators[signer]; !ok { + return errUnauthorizedValidator + } + + for seen, recent := range snap.Recents { + if recent == signer { + // Signer is among recents, only fail if the current block doesn't shift it out + if limit := uint64(len(snap.Validators)/2 + 1); seen > number-limit { + return errRecentlySigned + } + } + } + + // Ensure that the difficulty corresponds to the turn-ness of the signer + if !p.fakeDiff { + inturn := snap.inturn(signer) + if inturn && header.Difficulty.Cmp(diffInTurn) != 0 { + return errWrongDifficulty + } + if !inturn && header.Difficulty.Cmp(diffNoTurn) != 0 { + return errWrongDifficulty + } + } + + return nil +} + +// Prepare implements consensus.Engine, preparing all the consensus fields of the +// header for running the transactions on top. +func (p *Parlia) Prepare(chain consensus.ChainReader, header *types.Header) error { + header.Coinbase = p.val + header.Nonce = types.BlockNonce{} + + number := header.Number.Uint64() + snap, err := p.snapshot(chain, number-1, header.ParentHash, nil) + if err != nil { + return err + } + + // Set the correct difficulty + header.Difficulty = CalcDifficulty(snap, p.val) + + // Ensure the extra data has all it's components + if len(header.Extra) < extraVanity-nextForkHashSize { + header.Extra = append(header.Extra, bytes.Repeat([]byte{0x00}, extraVanity-nextForkHashSize-len(header.Extra))...) + } + header.Extra = header.Extra[:extraVanity-nextForkHashSize] + nextForkHash := forkid.NextForkHash(p.chainConfig, p.genesisHash, number) + header.Extra = append(header.Extra, nextForkHash[:]...) + + if number%p.config.Epoch == 0 { + newValidators, err := p.getCurrentValidators(header.ParentHash) + if err != nil { + return err + } + // sort validator by address + sort.Sort(validatorsAscending(newValidators)) + for _, validator := range newValidators { + header.Extra = append(header.Extra, validator.Bytes()...) + } + } + + // add extra seal space + header.Extra = append(header.Extra, make([]byte, extraSeal)...) + + // Mix digest is reserved for now, set to empty + header.MixDigest = common.Hash{} + + // Ensure the timestamp has the correct delay + parent := chain.GetHeader(header.ParentHash, number-1) + if parent == nil { + return consensus.ErrUnknownAncestor + } + header.Time = p.blockTimeForRamanujanFork(snap, header, parent) + if header.Time < uint64(time.Now().Unix()) { + header.Time = uint64(time.Now().Unix()) + } + return nil +} + +// Finalize implements consensus.Engine, ensuring no uncles are set, nor block +// rewards given. +func (p *Parlia) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs *[]*types.Transaction, + uncles []*types.Header, receipts *[]*types.Receipt, systemTxs *[]*types.Transaction, usedGas *uint64) error { + // warn if not in majority fork + number := header.Number.Uint64() + snap, err := p.snapshot(chain, number-1, header.ParentHash, nil) + if err != nil { + panic(err) + } + nextForkHash := forkid.NextForkHash(p.chainConfig, p.genesisHash, number) + if !snap.isMajorityFork(hex.EncodeToString(nextForkHash[:])) { + log.Debug("there is a possible fork, and your client is not the majority. Please check...", "nextForkHash", hex.EncodeToString(nextForkHash[:])) + } + // If the block is a epoch end block, verify the validator list + // The verification can only be done when the state is ready, it can't be done in VerifyHeader. + if header.Number.Uint64()%p.config.Epoch == 0 { + newValidators, err := p.getCurrentValidators(header.ParentHash) + if err != nil { + return err + } + // sort validator by address + sort.Sort(validatorsAscending(newValidators)) + validatorsBytes := make([]byte, len(newValidators)*validatorBytesLength) + for i, validator := range newValidators { + copy(validatorsBytes[i*validatorBytesLength:], validator.Bytes()) + } + + extraSuffix := len(header.Extra) - extraSeal + if !bytes.Equal(header.Extra[extraVanity:extraSuffix], validatorsBytes) { + return errMismatchingEpochValidators + } + } + // No block rewards in PoA, so the state remains as is and uncles are dropped + cx := chainContext{Chain: chain, parlia: p} + if header.Number.Cmp(common.Big1) == 0 { + err := p.initContract(state, header, cx, txs, receipts, systemTxs, usedGas, false) + if err != nil { + log.Error("init contract failed") + } + } + if header.Difficulty.Cmp(diffInTurn) != 0 { + spoiledVal := snap.supposeValidator() + signedRecently := false + for _, recent := range snap.Recents { + if recent == spoiledVal { + signedRecently = true + break + } + } + if !signedRecently { + log.Trace("slash validator", "block hash", header.Hash(), "address", spoiledVal) + err = p.slash(spoiledVal, state, header, cx, txs, receipts, systemTxs, usedGas, false) + if err != nil { + // it is possible that slash validator failed because of the slash channel is disabled. + log.Error("slash validator failed", "block hash", header.Hash(), "address", spoiledVal) + } + } + } + val := header.Coinbase + err = p.distributeIncoming(val, state, header, cx, txs, receipts, systemTxs, usedGas, false) + if err != nil { + panic(err) + } + if len(*systemTxs) > 0 { + return errors.New("the length of systemTxs do not match") + } + header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) + header.UncleHash = types.CalcUncleHash(nil) + return nil +} + +// FinalizeAndAssemble implements consensus.Engine, ensuring no uncles are set, +// nor block rewards given, and returns the final block. +func (p *Parlia) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, + txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, []*types.Receipt, error) { + // No block rewards in PoA, so the state remains as is and uncles are dropped + cx := chainContext{Chain: chain, parlia: p} + if txs == nil { + txs = make([]*types.Transaction, 0) + } + if receipts == nil { + receipts = make([]*types.Receipt, 0) + } + if header.Number.Cmp(common.Big1) == 0 { + err := p.initContract(state, header, cx, &txs, &receipts, nil, &header.GasUsed, true) + if err != nil { + log.Error("init contract failed") + } + } + if header.Difficulty.Cmp(diffInTurn) != 0 { + number := header.Number.Uint64() + snap, err := p.snapshot(chain, number-1, header.ParentHash, nil) + if err != nil { + panic(err) + } + spoiledVal := snap.supposeValidator() + signedRecently := false + for _, recent := range snap.Recents { + if recent == spoiledVal { + signedRecently = true + break + } + } + if !signedRecently { + err = p.slash(spoiledVal, state, header, cx, &txs, &receipts, nil, &header.GasUsed, true) + if err != nil { + // it is possible that slash validator failed because of the slash channel is disabled. + log.Error("slash validator failed", "block hash", header.Hash(), "address", spoiledVal) + } + } + } + err := p.distributeIncoming(p.val, state, header, cx, &txs, &receipts, nil, &header.GasUsed, true) + if err != nil { + panic(err) + } + // should not happen. Once happen, stop the node is better than broadcast the block + if header.GasLimit < header.GasUsed { + panic("Gas consumption of system txs exceed the gas limit") + } + header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) + header.UncleHash = types.CalcUncleHash(nil) + + // Assemble and return the final block for sealing + return types.NewBlock(header, txs, nil, receipts), receipts, nil +} + +// Authorize injects a private key into the consensus engine to mint new blocks +// with. +func (p *Parlia) Authorize(val common.Address, signFn SignerFn, signTxFn SignerTxFn) { + p.lock.Lock() + defer p.lock.Unlock() + + p.val = val + p.signFn = signFn + p.signTxFn = signTxFn +} + +func (p *Parlia) Delay(chain consensus.ChainReader, header *types.Header) *time.Duration { + number := header.Number.Uint64() + snap, err := p.snapshot(chain, number-1, header.ParentHash, nil) + if err != nil { + return nil + } + delay := p.delayForRamanujanFork(snap, header) + return &delay +} + +// Seal implements consensus.Engine, attempting to create a sealed block using +// the local signing credentials. +func (p *Parlia) Seal(chain consensus.ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { + header := block.Header() + + // Sealing the genesis block is not supported + number := header.Number.Uint64() + if number == 0 { + return errUnknownBlock + } + // For 0-period chains, refuse to seal empty blocks (no reward but would spin sealing) + if p.config.Period == 0 && len(block.Transactions()) == 0 { + log.Info("Sealing paused, waiting for transactions") + return nil + } + // Don't hold the val fields for the entire sealing procedure + p.lock.RLock() + val, signFn := p.val, p.signFn + p.lock.RUnlock() + + snap, err := p.snapshot(chain, number-1, header.ParentHash, nil) + if err != nil { + return err + } + + // Bail out if we're unauthorized to sign a block + if _, authorized := snap.Validators[val]; !authorized { + return errUnauthorizedValidator + } + + // If we're amongst the recent signers, wait for the next block + for seen, recent := range snap.Recents { + if recent == val { + // Signer is among recents, only wait if the current block doesn't shift it out + if limit := uint64(len(snap.Validators)/2 + 1); number < limit || seen > number-limit { + log.Info("Signed recently, must wait for others") + return nil + } + } + } + + // Sweet, the protocol permits us to sign the block, wait for our time + delay := p.delayForRamanujanFork(snap, header) + + log.Info("Sealing block with", "number", number, "delay", delay, "headerDifficulty", header.Difficulty, "val", val.Hex()) + + // Sign all the things! + sig, err := signFn(accounts.Account{Address: val}, accounts.MimetypeParlia, ParliaRLP(header, p.chainConfig.ChainID)) + if err != nil { + return err + } + copy(header.Extra[len(header.Extra)-extraSeal:], sig) + + // Wait until sealing is terminated or delay timeout. + log.Trace("Waiting for slot to sign and propagate", "delay", common.PrettyDuration(delay)) + go func() { + select { + case <-stop: + return + case <-time.After(delay): + } + + select { + case results <- block.WithSeal(header): + default: + log.Warn("Sealing result is not read by miner", "sealhash", SealHash(header, p.chainConfig.ChainID)) + } + }() + + return nil +} + +func (p *Parlia) EnoughDistance(chain consensus.ChainReader, header *types.Header) bool { + snap, err := p.snapshot(chain, header.Number.Uint64()-1, header.ParentHash, nil) + if err != nil { + return true + } + return snap.enoughDistance(p.val) +} + +// CalcDifficulty is the difficulty adjustment algorithm. It returns the difficulty +// that a new block should have based on the previous blocks in the chain and the +// current signer. +func (p *Parlia) CalcDifficulty(chain consensus.ChainReader, time uint64, parent *types.Header) *big.Int { + snap, err := p.snapshot(chain, parent.Number.Uint64(), parent.Hash(), nil) + if err != nil { + return nil + } + return CalcDifficulty(snap, p.val) +} + +// CalcDifficulty is the difficulty adjustment algorithm. It returns the difficulty +// that a new block should have based on the previous blocks in the chain and the +// current signer. +func CalcDifficulty(snap *Snapshot, signer common.Address) *big.Int { + if snap.inturn(signer) { + return new(big.Int).Set(diffInTurn) + } + return new(big.Int).Set(diffNoTurn) +} + +// SealHash returns the hash of a block prior to it being sealed. +func (p *Parlia) SealHash(header *types.Header) common.Hash { + return SealHash(header, p.chainConfig.ChainID) +} + +// APIs implements consensus.Engine, returning the user facing RPC API to query snapshot. +func (p *Parlia) APIs(chain consensus.ChainReader) []rpc.API { + return []rpc.API{{ + Namespace: "parlia", + Version: "1.0", + Service: &API{chain: chain, parlia: p}, + Public: false, + }} +} + +// Close implements consensus.Engine. It's a noop for parlia as there are no background threads. +func (p *Parlia) Close() error { + return nil +} + +// ========================== interaction with contract/account ========= + +// getCurrentValidators get current validators +func (p *Parlia) getCurrentValidators(blockHash common.Hash) ([]common.Address, error) { + // block + blockNr := rpc.BlockNumberOrHashWithHash(blockHash, false) + + // method + method := "getValidators" + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() // cancel when we are finished consuming integers + + data, err := p.validatorSetABI.Pack(method) + if err != nil { + log.Error("Unable to pack tx for getValidators", "error", err) + return nil, err + } + // call + msgData := (hexutil.Bytes)(data) + toAddress := common.HexToAddress(systemcontracts.ValidatorContract) + gas := (hexutil.Uint64)(uint64(math.MaxUint64 / 2)) + result, err := p.ethAPI.Call(ctx, ethapi.CallArgs{ + Gas: &gas, + To: &toAddress, + Data: &msgData, + }, blockNr, nil) + if err != nil { + return nil, err + } + + var ( + ret0 = new([]common.Address) + ) + out := ret0 + + if err := p.validatorSetABI.Unpack(out, method, result); err != nil { + return nil, err + } + + valz := make([]common.Address, len(*ret0)) + for i, a := range *ret0 { + valz[i] = a + } + return valz, nil +} + +// slash spoiled validators +func (p *Parlia) distributeIncoming(val common.Address, state *state.StateDB, header *types.Header, chain core.ChainContext, + txs *[]*types.Transaction, receipts *[]*types.Receipt, receivedTxs *[]*types.Transaction, usedGas *uint64, mining bool) error { + coinbase := header.Coinbase + balance := state.GetBalance(consensus.SystemAddress) + if balance.Cmp(common.Big0) <= 0 { + return nil + } + state.SetBalance(consensus.SystemAddress, big.NewInt(0)) + state.AddBalance(coinbase, balance) + + doDistributeSysReward := state.GetBalance(common.HexToAddress(systemcontracts.SystemRewardContract)).Cmp(maxSystemBalance) < 0 + if doDistributeSysReward { + var rewards = new(big.Int) + rewards = rewards.Rsh(balance, systemRewardPercent) + if rewards.Cmp(common.Big0) > 0 { + err := p.distributeToSystem(rewards, state, header, chain, txs, receipts, receivedTxs, usedGas, mining) + if err != nil { + return err + } + log.Trace("distribute to system reward pool", "block hash", header.Hash(), "amount", rewards) + balance = balance.Sub(balance, rewards) + } + } + log.Trace("distribute to validator contract", "block hash", header.Hash(), "amount", balance) + return p.distributeToValidator(balance, val, state, header, chain, txs, receipts, receivedTxs, usedGas, mining) +} + +// slash spoiled validators +func (p *Parlia) slash(spoiledVal common.Address, state *state.StateDB, header *types.Header, chain core.ChainContext, + txs *[]*types.Transaction, receipts *[]*types.Receipt, receivedTxs *[]*types.Transaction, usedGas *uint64, mining bool) error { + // method + method := "slash" + + // get packed data + data, err := p.slashABI.Pack(method, + spoiledVal, + ) + if err != nil { + log.Error("Unable to pack tx for slash", "error", err) + return err + } + // get system message + msg := p.getSystemMessage(header.Coinbase, common.HexToAddress(systemcontracts.SlashContract), data, common.Big0) + // apply message + return p.applyTransaction(msg, state, header, chain, txs, receipts, receivedTxs, usedGas, mining) +} + +// init contract +func (p *Parlia) initContract(state *state.StateDB, header *types.Header, chain core.ChainContext, + txs *[]*types.Transaction, receipts *[]*types.Receipt, receivedTxs *[]*types.Transaction, usedGas *uint64, mining bool) error { + // method + method := "init" + // contracts + contracts := []string{ + systemcontracts.ValidatorContract, + systemcontracts.SlashContract, + systemcontracts.LightClientContract, + systemcontracts.RelayerHubContract, + systemcontracts.TokenHubContract, + systemcontracts.RelayerIncentivizeContract, + systemcontracts.CrossChainContract, + } + // get packed data + data, err := p.validatorSetABI.Pack(method) + if err != nil { + log.Error("Unable to pack tx for init validator set", "error", err) + return err + } + for _, c := range contracts { + msg := p.getSystemMessage(header.Coinbase, common.HexToAddress(c), data, common.Big0) + // apply message + log.Trace("init contract", "block hash", header.Hash(), "contract", c) + err = p.applyTransaction(msg, state, header, chain, txs, receipts, receivedTxs, usedGas, mining) + if err != nil { + return err + } + } + return nil +} + +func (p *Parlia) distributeToSystem(amount *big.Int, state *state.StateDB, header *types.Header, chain core.ChainContext, + txs *[]*types.Transaction, receipts *[]*types.Receipt, receivedTxs *[]*types.Transaction, usedGas *uint64, mining bool) error { + // get system message + msg := p.getSystemMessage(header.Coinbase, common.HexToAddress(systemcontracts.SystemRewardContract), nil, amount) + // apply message + return p.applyTransaction(msg, state, header, chain, txs, receipts, receivedTxs, usedGas, mining) +} + +// slash spoiled validators +func (p *Parlia) distributeToValidator(amount *big.Int, validator common.Address, + state *state.StateDB, header *types.Header, chain core.ChainContext, + txs *[]*types.Transaction, receipts *[]*types.Receipt, receivedTxs *[]*types.Transaction, usedGas *uint64, mining bool) error { + // method + method := "deposit" + + // get packed data + data, err := p.validatorSetABI.Pack(method, + validator, + ) + if err != nil { + log.Error("Unable to pack tx for deposit", "error", err) + return err + } + // get system message + msg := p.getSystemMessage(header.Coinbase, common.HexToAddress(systemcontracts.ValidatorContract), data, amount) + // apply message + return p.applyTransaction(msg, state, header, chain, txs, receipts, receivedTxs, usedGas, mining) +} + +// get system message +func (p *Parlia) getSystemMessage(from, toAddress common.Address, data []byte, value *big.Int) callmsg { + return callmsg{ + ethereum.CallMsg{ + From: from, + Gas: math.MaxUint64 / 2, + GasPrice: big.NewInt(0), + Value: value, + To: &toAddress, + Data: data, + }, + } +} + +func (p *Parlia) applyTransaction( + msg callmsg, + state *state.StateDB, + header *types.Header, + chainContext core.ChainContext, + txs *[]*types.Transaction, receipts *[]*types.Receipt, + receivedTxs *[]*types.Transaction, usedGas *uint64, mining bool, +) (err error) { + nonce := state.GetNonce(msg.From()) + expectedTx := types.NewTransaction(nonce, *msg.To(), msg.Value(), msg.Gas(), msg.GasPrice(), msg.Data()) + expectedHash := p.signer.Hash(expectedTx) + + if msg.From() == p.val && mining { + expectedTx, err = p.signTxFn(accounts.Account{Address: msg.From()}, expectedTx, p.chainConfig.ChainID) + if err != nil { + return err + } + } else { + if receivedTxs == nil || len(*receivedTxs) == 0 || (*receivedTxs)[0] == nil { + return errors.New("supposed to get a actual transaction, but get none") + } + actualTx := (*receivedTxs)[0] + if !bytes.Equal(p.signer.Hash(actualTx).Bytes(), expectedHash.Bytes()) { + return fmt.Errorf("expected tx hash %v, get %v", expectedHash.String(), actualTx.Hash().String()) + } + expectedTx = actualTx + // move to next + *receivedTxs = (*receivedTxs)[1:] + } + state.Prepare(expectedTx.Hash(), common.Hash{}, len(*txs)) + gasUsed, err := applyMessage(msg, state, header, p.chainConfig, chainContext) + if err != nil { + return err + } + *txs = append(*txs, expectedTx) + var root []byte + if p.chainConfig.IsByzantium(header.Number) { + state.Finalise(true) + } else { + root = state.IntermediateRoot(p.chainConfig.IsEIP158(header.Number)).Bytes() + } + *usedGas += gasUsed + receipt := types.NewReceipt(root, false, *usedGas) + receipt.TxHash = expectedTx.Hash() + receipt.GasUsed = gasUsed + + // Set the receipt logs and create a bloom for filtering + receipt.Logs = state.GetLogs(expectedTx.Hash()) + receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) + receipt.BlockHash = state.BlockHash() + receipt.BlockNumber = header.Number + receipt.TransactionIndex = uint(state.TxIndex()) + *receipts = append(*receipts, receipt) + state.SetNonce(msg.From(), nonce+1) + return nil +} + +// =========================== utility function ========================== +// SealHash returns the hash of a block prior to it being sealed. +func SealHash(header *types.Header, chainId *big.Int) (hash common.Hash) { + hasher := sha3.NewLegacyKeccak256() + encodeSigHeader(hasher, header, chainId) + hasher.Sum(hash[:0]) + return hash +} + +func encodeSigHeader(w io.Writer, header *types.Header, chainId *big.Int) { + err := rlp.Encode(w, []interface{}{ + chainId, + header.ParentHash, + header.UncleHash, + header.Coinbase, + header.Root, + header.TxHash, + header.ReceiptHash, + header.Bloom, + header.Difficulty, + header.Number, + header.GasLimit, + header.GasUsed, + header.Time, + header.Extra[:len(header.Extra)-65], // this will panic if extra is too short, should check before calling encodeSigHeader + header.MixDigest, + header.Nonce, + }) + if err != nil { + panic("can't encode: " + err.Error()) + } +} + +func backOffTime(snap *Snapshot, val common.Address) uint64 { + if snap.inturn(val) { + return 0 + } else { + idx := snap.indexOfVal(val) + if idx < 0 { + // The backOffTime does not matter when a validator is not authorized. + return 0 + } + s := rand.NewSource(int64(snap.Number)) + r := rand.New(s) + n := len(snap.Validators) + backOffSteps := make([]uint64, 0, n) + for idx := uint64(0); idx < uint64(n); idx++ { + backOffSteps = append(backOffSteps, idx) + } + r.Shuffle(n, func(i, j int) { + backOffSteps[i], backOffSteps[j] = backOffSteps[j], backOffSteps[i] + }) + delay := initialBackOffTime + backOffSteps[idx]*wiggleTime + return delay + } +} + +// chain context +type chainContext struct { + Chain consensus.ChainReader + parlia consensus.Engine +} + +func (c chainContext) Engine() consensus.Engine { + return c.parlia +} + +func (c chainContext) GetHeader(hash common.Hash, number uint64) *types.Header { + return c.Chain.GetHeader(hash, number) +} + +// callmsg implements core.Message to allow passing it as a transaction simulator. +type callmsg struct { + ethereum.CallMsg +} + +func (m callmsg) From() common.Address { return m.CallMsg.From } +func (m callmsg) Nonce() uint64 { return 0 } +func (m callmsg) CheckNonce() bool { return false } +func (m callmsg) To() *common.Address { return m.CallMsg.To } +func (m callmsg) GasPrice() *big.Int { return m.CallMsg.GasPrice } +func (m callmsg) Gas() uint64 { return m.CallMsg.Gas } +func (m callmsg) Value() *big.Int { return m.CallMsg.Value } +func (m callmsg) Data() []byte { return m.CallMsg.Data } + +// apply message +func applyMessage( + msg callmsg, + state *state.StateDB, + header *types.Header, + chainConfig *params.ChainConfig, + chainContext core.ChainContext, +) (uint64, error) { + // Create a new context to be used in the EVM environment + context := core.NewEVMContext(msg, header, chainContext, nil) + // Create a new environment which holds all relevant information + // about the transaction and calling mechanisms. + vmenv := vm.NewEVM(context, state, chainConfig, vm.Config{}) + // Apply the transaction to the current state (included in the env) + ret, returnGas, err := vmenv.Call( + vm.AccountRef(msg.From()), + *msg.To(), + msg.Data(), + msg.Gas(), + msg.Value(), + ) + if err != nil { + log.Error("apply message failed", "msg", string(ret), "err", err) + } + return msg.Gas() - returnGas, err +} diff --git a/consensus/parlia/parlia_test.go b/consensus/parlia/parlia_test.go new file mode 100644 index 0000000000..fc05013e92 --- /dev/null +++ b/consensus/parlia/parlia_test.go @@ -0,0 +1,146 @@ +package parlia + +import ( + "fmt" + "math/rand" + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +func TestImpactOfValidatorOutOfService(t *testing.T) { + testCases := []struct { + totalValidators int + downValidators int + }{ + {3, 1}, + {5, 2}, + {10, 1}, + {10, 4}, + {21, 1}, + {21, 3}, + {21, 5}, + {21, 10}, + } + for _, tc := range testCases { + simulateValidatorOutOfService(tc.totalValidators, tc.downValidators) + } +} + +func simulateValidatorOutOfService(totalValidators int, downValidators int) { + downBlocks := 10000 + recoverBlocks := 10000 + recents := make(map[uint64]int) + + validators := make(map[int]bool, totalValidators) + down := make([]int, totalValidators) + for i := 0; i < totalValidators; i++ { + validators[i] = true + down[i] = i + } + rand.Shuffle(totalValidators, func(i, j int) { + down[i], down[j] = down[j], down[i] + }) + for i := 0; i < downValidators; i++ { + delete(validators, down[i]) + } + isRecentSign := func(idx int) bool { + for _, signIdx := range recents { + if signIdx == idx { + return true + } + } + return false + } + isInService := func(idx int) bool { + return validators[idx] + } + + downDelay := uint64(0) + for h := 1; h <= downBlocks; h++ { + if limit := uint64(totalValidators/2 + 1); uint64(h) >= limit { + delete(recents, uint64(h)-limit) + } + proposer := h % totalValidators + if !isInService(proposer) || isRecentSign(proposer) { + candidates := make(map[int]bool, totalValidators/2) + for v := range validators { + if !isRecentSign(v) { + candidates[v] = true + } + } + if len(candidates) == 0 { + panic("can not test such case") + } + idx, delay := producerBlockDelay(candidates, h, totalValidators) + downDelay = downDelay + delay + recents[uint64(h)] = idx + } else { + recents[uint64(h)] = proposer + } + } + fmt.Printf("average delay is %v when there is %d validators and %d is down \n", + downDelay/uint64(downBlocks), totalValidators, downValidators) + + for i := 0; i < downValidators; i++ { + validators[down[i]] = true + } + + recoverDelay := uint64(0) + lastseen := downBlocks + for h := downBlocks + 1; h <= downBlocks+recoverBlocks; h++ { + if limit := uint64(totalValidators/2 + 1); uint64(h) >= limit { + delete(recents, uint64(h)-limit) + } + proposer := h % totalValidators + if !isInService(proposer) || isRecentSign(proposer) { + lastseen = h + candidates := make(map[int]bool, totalValidators/2) + for v := range validators { + if !isRecentSign(v) { + candidates[v] = true + } + } + if len(candidates) == 0 { + panic("can not test such case") + } + idx, delay := producerBlockDelay(candidates, h, totalValidators) + recoverDelay = recoverDelay + delay + recents[uint64(h)] = idx + } else { + recents[uint64(h)] = proposer + } + } + fmt.Printf("total delay is %v after recover when there is %d validators down ever, last seen not proposer at height %d\n", + recoverDelay, downValidators, lastseen) +} + +func producerBlockDelay(candidates map[int]bool, height, numOfValidators int) (int, uint64) { + + s := rand.NewSource(int64(height)) + r := rand.New(s) + n := numOfValidators + backOffSteps := make([]int, 0, n) + for idx := 0; idx < n; idx++ { + backOffSteps = append(backOffSteps, idx) + } + r.Shuffle(n, func(i, j int) { + backOffSteps[i], backOffSteps[j] = backOffSteps[j], backOffSteps[i] + }) + minDelay := numOfValidators + minCandidate := 0 + for c := range candidates { + if minDelay > backOffSteps[c] { + minDelay = backOffSteps[c] + minCandidate = c + } + } + delay := initialBackOffTime + uint64(minDelay)*wiggleTime + return minCandidate, delay +} + +func randomAddress() common.Address { + addrBytes := make([]byte, 20) + rand.Read(addrBytes) + return common.BytesToAddress(addrBytes) +} diff --git a/consensus/parlia/ramanujanfork.go b/consensus/parlia/ramanujanfork.go new file mode 100644 index 0000000000..903c678f42 --- /dev/null +++ b/consensus/parlia/ramanujanfork.go @@ -0,0 +1,44 @@ +package parlia + +import ( + "math/rand" + "time" + + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/types" +) + +const ( + wiggleTimeBeforeFork = 500 * time.Millisecond // Random delay (per signer) to allow concurrent signers + fixedBackOffTimeBeforeFork = 200 * time.Millisecond +) + +func (p *Parlia) delayForRamanujanFork(snap *Snapshot, header *types.Header) time.Duration { + delay := time.Until(time.Unix(int64(header.Time), 0)) // nolint: gosimple + if p.chainConfig.IsRamanujan(header.Number) { + return delay + } + if header.Difficulty.Cmp(diffNoTurn) == 0 { + // It's not our turn explicitly to sign, delay it a bit + wiggle := time.Duration(len(snap.Validators)/2+1) * wiggleTimeBeforeFork + delay += time.Duration(fixedBackOffTimeBeforeFork) + time.Duration(rand.Int63n(int64(wiggle))) + } + return delay +} + +func (p *Parlia) blockTimeForRamanujanFork(snap *Snapshot, header, parent *types.Header) uint64 { + blockTime := parent.Time + p.config.Period + if p.chainConfig.IsRamanujan(header.Number) { + blockTime = blockTime + backOffTime(snap, p.val) + } + return blockTime +} + +func (p *Parlia) blockTimeVerifyForRamanujanFork(snap *Snapshot, header, parent *types.Header) error { + if p.chainConfig.IsRamanujan(header.Number) { + if header.Time < parent.Time+p.config.Period+backOffTime(snap, header.Coinbase) { + return consensus.ErrFutureBlock + } + } + return nil +} diff --git a/consensus/parlia/snapshot.go b/consensus/parlia/snapshot.go new file mode 100644 index 0000000000..851a20f2df --- /dev/null +++ b/consensus/parlia/snapshot.go @@ -0,0 +1,316 @@ +// Copyright 2017 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package parlia + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "errors" + "math/big" + "sort" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/params" + lru "github.com/hashicorp/golang-lru" +) + +// Snapshot is the state of the validatorSet at a given point. +type Snapshot struct { + config *params.ParliaConfig // Consensus engine parameters to fine tune behavior + ethAPI *ethapi.PublicBlockChainAPI + sigCache *lru.ARCCache // Cache of recent block signatures to speed up ecrecover + + Number uint64 `json:"number"` // Block number where the snapshot was created + Hash common.Hash `json:"hash"` // Block hash where the snapshot was created + Validators map[common.Address]struct{} `json:"validators"` // Set of authorized validators at this moment + Recents map[uint64]common.Address `json:"recents"` // Set of recent validators for spam protections + RecentForkHashes map[uint64]string `json:"recent_fork_hashes"` // Set of recent forkHash +} + +// newSnapshot creates a new snapshot with the specified startup parameters. This +// method does not initialize the set of recent validators, so only ever use it for +// the genesis block. +func newSnapshot( + config *params.ParliaConfig, + sigCache *lru.ARCCache, + number uint64, + hash common.Hash, + validators []common.Address, + ethAPI *ethapi.PublicBlockChainAPI, +) *Snapshot { + snap := &Snapshot{ + config: config, + ethAPI: ethAPI, + sigCache: sigCache, + Number: number, + Hash: hash, + Recents: make(map[uint64]common.Address), + RecentForkHashes: make(map[uint64]string), + Validators: make(map[common.Address]struct{}), + } + for _, v := range validators { + snap.Validators[v] = struct{}{} + } + return snap +} + +// validatorsAscending implements the sort interface to allow sorting a list of addresses +type validatorsAscending []common.Address + +func (s validatorsAscending) Len() int { return len(s) } +func (s validatorsAscending) Less(i, j int) bool { return bytes.Compare(s[i][:], s[j][:]) < 0 } +func (s validatorsAscending) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// loadSnapshot loads an existing snapshot from the database. +func loadSnapshot(config *params.ParliaConfig, sigCache *lru.ARCCache, db ethdb.Database, hash common.Hash, ethAPI *ethapi.PublicBlockChainAPI) (*Snapshot, error) { + blob, err := db.Get(append([]byte("parlia-"), hash[:]...)) + if err != nil { + return nil, err + } + snap := new(Snapshot) + if err := json.Unmarshal(blob, snap); err != nil { + return nil, err + } + snap.config = config + snap.sigCache = sigCache + snap.ethAPI = ethAPI + + return snap, nil +} + +// store inserts the snapshot into the database. +func (s *Snapshot) store(db ethdb.Database) error { + blob, err := json.Marshal(s) + if err != nil { + return err + } + return db.Put(append([]byte("parlia-"), s.Hash[:]...), blob) +} + +// copy creates a deep copy of the snapshot +func (s *Snapshot) copy() *Snapshot { + cpy := &Snapshot{ + config: s.config, + ethAPI: s.ethAPI, + sigCache: s.sigCache, + Number: s.Number, + Hash: s.Hash, + Validators: make(map[common.Address]struct{}), + Recents: make(map[uint64]common.Address), + RecentForkHashes: make(map[uint64]string), + } + + for v := range s.Validators { + cpy.Validators[v] = struct{}{} + } + for block, v := range s.Recents { + cpy.Recents[block] = v + } + for block, id := range s.RecentForkHashes { + cpy.RecentForkHashes[block] = id + } + return cpy +} + +func (s *Snapshot) isMajorityFork(forkHash string) bool { + ally := 0 + for _, h := range s.RecentForkHashes { + if h == forkHash { + ally++ + } + } + return ally > len(s.RecentForkHashes)/2 +} + +func (s *Snapshot) apply(headers []*types.Header, chain consensus.ChainReader, parents []*types.Header, chainId *big.Int) (*Snapshot, error) { + // Allow passing in no headers for cleaner code + if len(headers) == 0 { + return s, nil + } + // Sanity check that the headers can be applied + for i := 0; i < len(headers)-1; i++ { + if headers[i+1].Number.Uint64() != headers[i].Number.Uint64()+1 { + return nil, errOutOfRangeChain + } + if !bytes.Equal(headers[i+1].ParentHash.Bytes(), headers[i].Hash().Bytes()) { + return nil, errBlockHashInconsistent + } + } + if headers[0].Number.Uint64() != s.Number+1 { + return nil, errOutOfRangeChain + } + if !bytes.Equal(headers[0].ParentHash.Bytes(), s.Hash.Bytes()) { + return nil, errBlockHashInconsistent + } + // Iterate through the headers and create a new snapshot + snap := s.copy() + + for _, header := range headers { + number := header.Number.Uint64() + // Delete the oldest validator from the recent list to allow it signing again + if limit := uint64(len(snap.Validators)/2 + 1); number >= limit { + delete(snap.Recents, number-limit) + } + if limit := uint64(len(snap.Validators)); number >= limit { + delete(snap.RecentForkHashes, number-limit) + } + // Resolve the authorization key and check against signers + validator, err := ecrecover(header, s.sigCache, chainId) + if err != nil { + return nil, err + } + if _, ok := snap.Validators[validator]; !ok { + return nil, errUnauthorizedValidator + } + for _, recent := range snap.Recents { + if recent == validator { + return nil, errRecentlySigned + } + } + snap.Recents[number] = validator + // change validator set + if number > 0 && number%s.config.Epoch == uint64(len(snap.Validators)/2) { + checkpointHeader := FindAncientHeader(header, uint64(len(snap.Validators)/2), chain, parents) + if checkpointHeader == nil { + return nil, consensus.ErrUnknownAncestor + } + + validatorBytes := checkpointHeader.Extra[extraVanity : len(checkpointHeader.Extra)-extraSeal] + // get validators from headers and use that for new validator set + newValArr, err := ParseValidators(validatorBytes) + if err != nil { + return nil, err + } + newVals := make(map[common.Address]struct{}, len(newValArr)) + for _, val := range newValArr { + newVals[val] = struct{}{} + } + oldLimit := len(snap.Validators)/2 + 1 + newLimit := len(newVals)/2 + 1 + if newLimit < oldLimit { + for i := 0; i < oldLimit-newLimit; i++ { + delete(snap.Recents, number-uint64(newLimit)-uint64(i)) + } + } + oldLimit = len(snap.Validators) + newLimit = len(newVals) + if newLimit < oldLimit { + for i := 0; i < oldLimit-newLimit; i++ { + delete(snap.RecentForkHashes, number-uint64(newLimit)-uint64(i)) + } + } + snap.Validators = newVals + } + snap.RecentForkHashes[number] = hex.EncodeToString(header.Extra[extraVanity-nextForkHashSize : extraVanity]) + } + snap.Number += uint64(len(headers)) + snap.Hash = headers[len(headers)-1].Hash() + return snap, nil +} + +// validators retrieves the list of validators in ascending order. +func (s *Snapshot) validators() []common.Address { + validators := make([]common.Address, 0, len(s.Validators)) + for v := range s.Validators { + validators = append(validators, v) + } + sort.Sort(validatorsAscending(validators)) + return validators +} + +// inturn returns if a validator at a given block height is in-turn or not. +func (s *Snapshot) inturn(validator common.Address) bool { + validators := s.validators() + offset := (s.Number + 1) % uint64(len(validators)) + return validators[offset] == validator +} + +func (s *Snapshot) enoughDistance(validator common.Address) bool { + idx := s.indexOfVal(validator) + if idx < 0 { + return true + } + validatorNum := int64(len(s.validators())) + offset := (int64(s.Number) + 1) % int64(validatorNum) + if int64(idx) >= offset { + return int64(idx)-offset >= validatorNum/2 + } else { + return validatorNum+int64(idx)-offset >= validatorNum/2 + } +} + +func (s *Snapshot) indexOfVal(validator common.Address) int { + validators := s.validators() + for idx, val := range validators { + if val == validator { + return idx + } + } + return -1 +} + +func (s *Snapshot) supposeValidator() common.Address { + validators := s.validators() + index := (s.Number + 1) % uint64(len(validators)) + return validators[index] +} + +func ParseValidators(validatorsBytes []byte) ([]common.Address, error) { + if len(validatorsBytes)%validatorBytesLength != 0 { + return nil, errors.New("invalid validators bytes") + } + n := len(validatorsBytes) / validatorBytesLength + result := make([]common.Address, n) + for i := 0; i < n; i++ { + address := make([]byte, validatorBytesLength) + copy(address, validatorsBytes[i*validatorBytesLength:(i+1)*validatorBytesLength]) + result[i] = common.BytesToAddress(address) + } + return result, nil +} + +func FindAncientHeader(header *types.Header, ite uint64, chain consensus.ChainReader, candidateParents []*types.Header) *types.Header { + ancient := header + for i := uint64(1); i <= ite; i++ { + parentHash := ancient.ParentHash + parentHeight := ancient.Number.Uint64() - 1 + found := false + if len(candidateParents) > 0 { + index := sort.Search(len(candidateParents), func(i int) bool { + return candidateParents[i].Number.Uint64() >= parentHeight + }) + if index < len(candidateParents) && candidateParents[index].Number.Uint64() == parentHeight && + candidateParents[index].Hash() == parentHash { + ancient = candidateParents[index] + found = true + } + } + if !found { + ancient = chain.GetHeader(parentHash, parentHeight) + found = true + } + if ancient == nil || !found { + return nil + } + } + return ancient +} diff --git a/consensus/parlia/snapshot_test.go b/consensus/parlia/snapshot_test.go new file mode 100644 index 0000000000..218d3c10f8 --- /dev/null +++ b/consensus/parlia/snapshot_test.go @@ -0,0 +1,23 @@ +package parlia + +import ( + "bytes" + "sort" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/ethereum/go-ethereum/common" +) + +func TestValidatorSetSort(t *testing.T) { + size := 100 + validators := make([]common.Address, size) + for i := 0; i < size; i++ { + validators[i] = randomAddress() + } + sort.Sort(validatorsAscending(validators)) + for i := 0; i < size-1; i++ { + assert.True(t, bytes.Compare(validators[i][:], validators[i+1][:]) < 0) + } +} diff --git a/core/block_validator.go b/core/block_validator.go index b36ca56d7f..e4d96a14aa 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -17,7 +17,9 @@ package core import ( + "encoding/json" "fmt" + "os" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core/state" @@ -96,6 +98,7 @@ func (v *BlockValidator) ValidateState(block *types.Block, statedb *state.StateD // Validate the state root against the received state root and throw // an error if they don't match. if root := statedb.IntermediateRoot(v.config.IsEIP158(header.Number)); header.Root != root { + statedb.IterativeDump(true, true, true, json.NewEncoder(os.Stdout)) return fmt.Errorf("invalid merkle root (remote: %x local: %x)", header.Root, root) } return nil @@ -106,10 +109,10 @@ func (v *BlockValidator) ValidateState(block *types.Block, statedb *state.StateD // ceil if the blocks are full. If the ceil is exceeded, it will always decrease // the gas allowance. func CalcGasLimit(parent *types.Block, gasFloor, gasCeil uint64) uint64 { - // contrib = (parentGasUsed * 3 / 2) / 1024 + // contrib = (parentGasUsed * 3 / 2) / 256 contrib := (parent.GasUsed() + parent.GasUsed()/2) / params.GasLimitBoundDivisor - // decay = parentGasLimit / 1024 -1 + // decay = parentGasLimit / 256 -1 decay := parent.GasLimit()/params.GasLimitBoundDivisor - 1 /* diff --git a/core/blockchain.go b/core/blockchain.go index 0d1c27f95e..f6a7054361 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -82,12 +82,12 @@ var ( const ( bodyCacheLimit = 256 blockCacheLimit = 256 - receiptsCacheLimit = 32 + receiptsCacheLimit = 10000 txLookupCacheLimit = 1024 maxFutureBlocks = 256 maxTimeFutureBlocks = 30 badBlockLimit = 10 - TriesInMemory = 128 + TriesInMemory = 1024 // BlockChainVersion ensures that an incompatible database forces a resync from scratch. // @@ -322,6 +322,10 @@ func (bc *BlockChain) GetVMConfig() *vm.Config { return &bc.vmConfig } +func (bc *BlockChain) CacheReceipts(hash common.Hash, receipts types.Receipts) { + bc.receiptsCache.Add(hash, receipts) +} + // empty returns an indicator whether the blockchain is empty. // Note, it's a special case that we connect a non-empty ancient // database with an empty node, so that we can plugin the ancient @@ -1399,21 +1403,29 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. // If we exceeded out time allowance, flush an entire trie to disk if bc.gcproc > bc.cacheConfig.TrieTimeLimit { - // If the header is missing (canonical chain behind), we're reorging a low - // diff sidechain. Suspend committing until this operation is completed. - header := bc.GetHeaderByNumber(chosen) - if header == nil { - log.Warn("Reorg in progress, trie commit postponed", "number", chosen) - } else { - // If we're exceeding limits but haven't reached a large enough memory gap, - // warn the user that the system is becoming unstable. - if chosen < lastWrite+TriesInMemory && bc.gcproc >= 2*bc.cacheConfig.TrieTimeLimit { - log.Info("State in memory for too long, committing", "time", bc.gcproc, "allowance", bc.cacheConfig.TrieTimeLimit, "optimum", float64(chosen-lastWrite)/TriesInMemory) + canWrite := true + if posa, ok := bc.engine.(consensus.PoSA); ok { + if !posa.EnoughDistance(bc, block.Header()) { + canWrite = false + } + } + if canWrite { + // If the header is missing (canonical chain behind), we're reorging a low + // diff sidechain. Suspend committing until this operation is completed. + header := bc.GetHeaderByNumber(chosen) + if header == nil { + log.Warn("Reorg in progress, trie commit postponed", "number", chosen) + } else { + // If we're exceeding limits but haven't reached a large enough memory gap, + // warn the user that the system is becoming unstable. + if chosen < lastWrite+TriesInMemory && bc.gcproc >= 2*bc.cacheConfig.TrieTimeLimit { + log.Info("State in memory for too long, committing", "time", bc.gcproc, "allowance", bc.cacheConfig.TrieTimeLimit, "optimum", float64(chosen-lastWrite)/TriesInMemory) + } + // Flush an entire trie and restart the counters + triedb.Commit(header.Root, true) + lastWrite = chosen + bc.gcproc = 0 } - // Flush an entire trie and restart the counters - triedb.Commit(header.Root, true) - lastWrite = chosen - bc.gcproc = 0 } } // Garbage collect anything below our required write retention @@ -1717,6 +1729,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, er atomic.StoreUint32(&followupInterrupt, 1) return it.index, err } + bc.CacheReceipts(block.Hash(), receipts) // Update the metrics touched during block processing accountReadTimer.Update(statedb.AccountReads) // Account reads are complete, we can mark them storageReadTimer.Update(statedb.StorageReads) // Storage reads are complete, we can mark them diff --git a/core/chain_makers.go b/core/chain_makers.go index 6524087d4e..20c2eb198e 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -24,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/misc" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/systemcontracts" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/ethdb" @@ -207,13 +208,14 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse if config.DAOForkSupport && config.DAOForkBlock != nil && config.DAOForkBlock.Cmp(b.header.Number) == 0 { misc.ApplyDAOHardFork(statedb) } + systemcontracts.UpgradeBuildInSystemContract(config, b.header.Number, statedb) // Execute any user modifications to the block if gen != nil { gen(i, b) } if b.engine != nil { // Finalize and seal the block - block, _ := b.engine.FinalizeAndAssemble(chainreader, b.header, statedb, b.txs, b.uncles, b.receipts) + block, _, _ := b.engine.FinalizeAndAssemble(chainreader, b.header, statedb, b.txs, b.uncles, b.receipts) // Write state changes to db root, err := statedb.Commit(config.IsEIP158(b.header.Number)) diff --git a/core/forkid/forkid.go b/core/forkid/forkid.go index e433db4460..d37688a315 100644 --- a/core/forkid/forkid.go +++ b/core/forkid/forkid.go @@ -62,6 +62,28 @@ func NewID(chain *core.BlockChain) ID { ) } +func NextForkHash(config *params.ChainConfig, genesis common.Hash, head uint64) [4]byte { + // Calculate the starting checksum from the genesis hash + hash := crc32.ChecksumIEEE(genesis[:]) + + // Calculate the current fork checksum and the next fork block + var next uint64 + for _, fork := range gatherForks(config) { + if fork <= head { + // Fork already passed, checksum the previous hash and the fork number + hash = checksumUpdate(hash, fork) + continue + } + next = fork + break + } + if next == 0 { + return checksumToBytes(hash) + } else { + return checksumToBytes(checksumUpdate(hash, next)) + } +} + // newID is the internal version of NewID, which takes extracted values as its // arguments instead of a chain. The reason is to allow testing the IDs without // having to simulate an entire blockchain. diff --git a/core/genesis.go b/core/genesis.go index b31980f0a3..66f6315c24 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -30,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/systemcontracts" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" @@ -161,6 +162,7 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, override } // Just commit the new block if there is no stored genesis block. stored := rawdb.ReadCanonicalHash(db, 0) + systemcontracts.GenesisHash = stored if (stored == common.Hash{}) { if genesis == nil { log.Info("Writing default main-net genesis block") @@ -222,7 +224,9 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, override // Special case: don't change the existing config of a non-mainnet chain if no new // config is supplied. These chains would get AllProtocolChanges (and a compat error) // if we just continued here. - if genesis == nil && stored != params.MainnetGenesisHash { + // The full node of two BSC testnets may run without genesis file after been inited. + if genesis == nil && stored != params.MainnetGenesisHash && + stored != params.ChapelGenesisHash && stored != params.RialtoGenesisHash && stored != params.BSCGenesisHash { return storedcfg, stored, nil } @@ -252,6 +256,12 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { return params.RinkebyChainConfig case ghash == params.GoerliGenesisHash: return params.GoerliChainConfig + case ghash == params.BSCGenesisHash: + return params.BSCChainConfig + case ghash == params.ChapelGenesisHash: + return params.ChapelChainConfig + case ghash == params.RialtoGenesisHash: + return params.RialtoChainConfig default: return params.AllEthashProtocolChanges } diff --git a/core/rawdb/database.go b/core/rawdb/database.go index cc05491b84..e4b04b33e3 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -244,6 +244,7 @@ func InspectDatabase(db ethdb.Database) error { preimageSize common.StorageSize bloomBitsSize common.StorageSize cliqueSnapsSize common.StorageSize + parliaSnapsSize common.StorageSize // Ancient store statistics ancientHeaders common.StorageSize @@ -292,6 +293,8 @@ func InspectDatabase(db ethdb.Database) error { bloomBitsSize += size case bytes.HasPrefix(key, []byte("clique-")) && len(key) == 7+common.HashLength: cliqueSnapsSize += size + case bytes.HasPrefix(key, []byte("parlia-")) && len(key) == 7+common.HashLength: + parliaSnapsSize += size case bytes.HasPrefix(key, []byte("cht-")) && len(key) == 4+common.HashLength: chtTrieNodes += size case bytes.HasPrefix(key, []byte("blt-")) && len(key) == 4+common.HashLength: @@ -340,6 +343,7 @@ func InspectDatabase(db ethdb.Database) error { {"Key-Value store", "Account snapshot", accountSnapSize.String()}, {"Key-Value store", "Storage snapshot", storageSnapSize.String()}, {"Key-Value store", "Clique snapshots", cliqueSnapsSize.String()}, + {"Key-Value store", "Parlia snapshots", parliaSnapsSize.String()}, {"Key-Value store", "Singleton metadata", metadata.String()}, {"Ancient store", "Headers", ancientHeaders.String()}, {"Ancient store", "Bodies", ancientBodies.String()}, diff --git a/core/state_processor.go b/core/state_processor.go index cfe17d587b..c2bbd2d53a 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -21,6 +21,7 @@ import ( "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/misc" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/systemcontracts" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -55,28 +56,48 @@ func NewStateProcessor(config *params.ChainConfig, bc *BlockChain, engine consen // transactions failed to execute due to insufficient gas it will return an error. func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg vm.Config) (types.Receipts, []*types.Log, uint64, error) { var ( - receipts types.Receipts - usedGas = new(uint64) - header = block.Header() - allLogs []*types.Log - gp = new(GasPool).AddGas(block.GasLimit()) + usedGas = new(uint64) + header = block.Header() + allLogs []*types.Log + gp = new(GasPool).AddGas(block.GasLimit()) ) + var receipts = make([]*types.Receipt, 0) // Mutate the block and state according to any hard-fork specs if p.config.DAOForkSupport && p.config.DAOForkBlock != nil && p.config.DAOForkBlock.Cmp(block.Number()) == 0 { misc.ApplyDAOHardFork(statedb) } + // Handle upgrade build-in system contract code + systemcontracts.UpgradeBuildInSystemContract(p.config, block.Number(), statedb) // Iterate over and process the individual transactions + posa, isPoSA := p.engine.(consensus.PoSA) + commonTxs := make([]*types.Transaction, 0, len(block.Transactions())) + // usually do have two tx, one for validator set contract, another for system reward contract. + systemTxs := make([]*types.Transaction, 0, 2) for i, tx := range block.Transactions() { + if isPoSA { + if isSystemTx, err := posa.IsSystemTransaction(tx, block.Header()); err != nil { + return nil, nil, 0, err + } else if isSystemTx { + systemTxs = append(systemTxs, tx) + continue + } + } statedb.Prepare(tx.Hash(), block.Hash(), i) receipt, err := ApplyTransaction(p.config, p.bc, nil, gp, statedb, header, tx, usedGas, cfg) if err != nil { return nil, nil, 0, err } + commonTxs = append(commonTxs, tx) receipts = append(receipts, receipt) - allLogs = append(allLogs, receipt.Logs...) } // Finalize the block, applying any consensus engine specific extras (e.g. block rewards) - p.engine.Finalize(p.bc, header, statedb, block.Transactions(), block.Uncles()) + err := p.engine.Finalize(p.bc, header, statedb, &commonTxs, block.Uncles(), &receipts, &systemTxs, usedGas) + if err != nil { + return receipts, allLogs, *usedGas, err + } + for _, receipt := range receipts { + allLogs = append(allLogs, receipt.Logs...) + } return receipts, allLogs, *usedGas, nil } diff --git a/core/state_transition.go b/core/state_transition.go index 1d371f36d5..360e577522 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -22,6 +22,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" @@ -227,8 +228,13 @@ func (st *StateTransition) TransitionDb() (ret []byte, usedGas uint64, failed bo } } st.refundGas() - st.state.AddBalance(st.evm.Coinbase, new(big.Int).Mul(new(big.Int).SetUint64(st.gasUsed()), st.gasPrice)) + // consensus engine is parlia + if evm.ChainConfig().Parlia != nil { + st.state.AddBalance(consensus.SystemAddress, new(big.Int).Mul(new(big.Int).SetUint64(st.gasUsed()), st.gasPrice)) + } else { + st.state.AddBalance(st.evm.Coinbase, new(big.Int).Mul(new(big.Int).SetUint64(st.gasUsed()), st.gasPrice)) + } return ret, st.gasUsed(), vmerr != nil, err } diff --git a/core/systemcontracts/const.go b/core/systemcontracts/const.go new file mode 100644 index 0000000000..15c1987e96 --- /dev/null +++ b/core/systemcontracts/const.go @@ -0,0 +1,15 @@ +package systemcontracts + +const ( + // genesis contracts + ValidatorContract = "0x0000000000000000000000000000000000001000" + SlashContract = "0x0000000000000000000000000000000000001001" + SystemRewardContract = "0x0000000000000000000000000000000000001002" + LightClientContract = "0x0000000000000000000000000000000000001003" + TokenHubContract = "0x0000000000000000000000000000000000001004" + RelayerIncentivizeContract = "0x0000000000000000000000000000000000001005" + RelayerHubContract = "0x0000000000000000000000000000000000001006" + GovHubContract = "0x0000000000000000000000000000000000001007" + TokenManagerContract = "0x0000000000000000000000000000000000001008" + CrossChainContract = "0x0000000000000000000000000000000000002000" +) diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go new file mode 100644 index 0000000000..eaae5b1a49 --- /dev/null +++ b/core/systemcontracts/upgrade.go @@ -0,0 +1,344 @@ +package systemcontracts + +import ( + "encoding/hex" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" +) + +type UpgradeConfig struct { + BeforeUpgrade upgradeHook + AfterUpgrade upgradeHook + ContractAddr common.Address + CommitUrl string + Code string +} + +type Upgrade struct { + UpgradeName string + Configs []*UpgradeConfig +} + +type upgradeHook func(blockNumber *big.Int, contractAddr common.Address, statedb *state.StateDB) error + +const ( + mainNet = "Mainnet" + chapelNet = "Chapel" + rialtoNet = "Rialto" + defaultNet = "Default" +) + +var ( + GenesisHash common.Hash + //upgrade config + ramanujanUpgrade = make(map[string]*Upgrade) + + nielsUpgrade = make(map[string]*Upgrade) + + mirrorUpgrade = make(map[string]*Upgrade) +) + +func init() { + ramanujanUpgrade[rialtoNet] = &Upgrade{ + UpgradeName: "ramanujan", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "60806040526004361061027d5760003560e01c80639dc092621161014f578063c8509d81116100c1578063eb57e2021161007a578063eb57e20214610940578063eda5868c14610973578063f340fa0114610988578063f9a2bbc7146109ae578063fc3e5908146109c3578063fd6a6879146109d85761027d565b8063c8509d8114610609578063d86222d5146108d7578063daacdb66146108ec578063dc927faf14610901578063e086c7b114610916578063e1c7392a1461092b5761027d565b8063ab51bb9611610113578063ab51bb961461074a578063ac4317511461075f578063ad3c9da61461082a578063b7ab4db51461085d578063bf9f49951461041b578063c81b1662146108c25761027d565b80639dc09262146106cd578063a1a11bf5146106e2578063a5422d5c146106f7578063a78abc161461070c578063aaf5eb68146107355761027d565b80635667515a116101f35780637942fd05116101ac5780637942fd05146105df57806381650b62146105f4578063831d65d114610609578063853230aa1461068e57806386249882146106a357806396713da9146106b85761027d565b80635667515a146105005780635d77156c146105155780636969a25c1461052a5780636e47b482146105a057806370fd5bad146105b557806375d47a0a146105ca5761027d565b80633dffc387116102455780633dffc3871461041b57806343756e5c14610446578063493279b1146104775780634bf6c882146104a357806351e80672146104b8578063565c56b3146104cd5761027d565b80630bee7a67146102825780631182b875146102b05780631ff18069146103aa578063219f22d5146103d157806335409f7f146103e6575b600080fd5b34801561028e57600080fd5b506102976109ed565b6040805163ffffffff9092168252519081900360200190f35b3480156102bc57600080fd5b50610335600480360360408110156102d357600080fd5b60ff8235169190810190604081016020820135600160201b8111156102f757600080fd5b82018360208201111561030957600080fd5b803590602001918460018302840111600160201b8311171561032a57600080fd5b5090925090506109f2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561036f578181015183820152602001610357565b50505050905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b657600080fd5b506103bf610bdf565b60408051918252519081900360200190f35b3480156103dd57600080fd5b50610297610be5565b3480156103f257600080fd5b506104196004803603602081101561040957600080fd5b50356001600160a01b0316610bea565b005b34801561042757600080fd5b50610430610efe565b6040805160ff9092168252519081900360200190f35b34801561045257600080fd5b5061045b610f03565b604080516001600160a01b039092168252519081900360200190f35b34801561048357600080fd5b5061048c610f09565b6040805161ffff9092168252519081900360200190f35b3480156104af57600080fd5b50610430610f0e565b3480156104c457600080fd5b5061045b610f13565b3480156104d957600080fd5b506103bf600480360360208110156104f057600080fd5b50356001600160a01b0316610f19565b34801561050c57600080fd5b50610430610f6b565b34801561052157600080fd5b50610297610f70565b34801561053657600080fd5b506105546004803603602081101561054d57600080fd5b5035610f75565b604080516001600160a01b039788168152958716602087015293909516848401526001600160401b0390911660608401521515608083015260a082019290925290519081900360c00190f35b3480156105ac57600080fd5b5061045b610fd9565b3480156105c157600080fd5b50610430610fdf565b3480156105d657600080fd5b5061045b610fe4565b3480156105eb57600080fd5b50610430610fea565b34801561060057600080fd5b50610297610fef565b34801561061557600080fd5b506104196004803603604081101561062c57600080fd5b60ff8235169190810190604081016020820135600160201b81111561065057600080fd5b82018360208201111561066257600080fd5b803590602001918460018302840111600160201b8311171561068357600080fd5b509092509050610ff4565b34801561069a57600080fd5b506103bf6110a7565b3480156106af57600080fd5b506103bf6110ad565b3480156106c457600080fd5b506104306110b3565b3480156106d957600080fd5b5061045b6110b8565b3480156106ee57600080fd5b5061045b6110be565b34801561070357600080fd5b506103356110c4565b34801561071857600080fd5b506107216110e1565b604080519115158252519081900360200190f35b34801561074157600080fd5b506103bf6110ea565b34801561075657600080fd5b50610297610f6b565b34801561076b57600080fd5b506104196004803603604081101561078257600080fd5b810190602081018135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460018302840111600160201b831117156107cf57600080fd5b919390929091602081019035600160201b8111156107ec57600080fd5b8201836020820111156107fe57600080fd5b803590602001918460018302840111600160201b8311171561081f57600080fd5b5090925090506110f3565b34801561083657600080fd5b506103bf6004803603602081101561084d57600080fd5b50356001600160a01b031661139a565b34801561086957600080fd5b506108726113ac565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108ae578181015183820152602001610896565b505050509050019250505060405180910390f35b3480156108ce57600080fd5b5061045b6114d2565b3480156108e357600080fd5b506103bf6114d8565b3480156108f857600080fd5b506103bf6114e4565b34801561090d57600080fd5b5061045b6114ea565b34801561092257600080fd5b506103bf6114f0565b34801561093757600080fd5b506104196114f5565b34801561094c57600080fd5b506104196004803603602081101561096357600080fd5b50356001600160a01b03166116f6565b34801561097f57600080fd5b506102976118c5565b6104196004803603602081101561099e57600080fd5b50356001600160a01b03166118ca565b3480156109ba57600080fd5b5061045b611b00565b3480156109cf57600080fd5b50610430611b06565b3480156109e457600080fd5b5061045b611b0b565b606481565b60005460609060ff16610a48576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b3361200014610a885760405162461bcd60e51b815260040180806020018281038252602f815260200180614000602f913960400191505060405180910390fd5b610a90613d65565b6000610ad185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1192505050565b9150915080610aed57610ae46064611c6a565b92505050610bd8565b815160009060ff16610b0d57610b068360200151611ccb565b9050610ba4565b825160ff1660011415610ba057826020015151600114610b7a577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526025815260200180613e686025913960400191505060405180910390a1506067610b9b565b610b068360200151600081518110610b8e57fe5b6020026020010151612ad1565b610ba4565b5060655b63ffffffff8116610bc95750506040805160008152602081019091529150610bd89050565b610bd281611c6a565b93505050505b9392505050565b60035481565b606881565b3361100114610c2a5760405162461bcd60e51b815260040180806020018281038252602981526020018061405c6029913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205480610c4e5750610efb565b600181039050600060018281548110610c6357fe5b60009182526020909120600360049092020101546001549091506000190180610cb257600060018481548110610c9557fe5b906000526020600020906004020160030181905550505050610efb565b6040805183815290516001600160a01b038616917f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70919081900360200190a26001600160a01b038416600090815260046020526040812055600154600019018314610e3457600180546000198101908110610d2957fe5b906000526020600020906004020160018481548110610d4457fe5b6000918252602082208354600492830290910180546001600160a01b03199081166001600160a01b0393841617825560018087015481840180548416918616919091179055600280880180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b199094169390931790556003948501549401939093558254868401939192919087908110610e0957fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020555b6001805480610e3f57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b03191690556003018190559155818381610e9257fe5b0490508015610ef65760015460005b81811015610ef3578260018281548110610eb757fe5b9060005260206000209060040201600301540160018281548110610ed757fe5b6000918252602090912060036004909202010155600101610ea1565b50505b505050505b50565b600181565b61100181565b606081565b600881565b61200081565b6001600160a01b03811660009081526004602052604081205480610f41576000915050610f66565b600180820381548110610f5057fe5b9060005260206000209060040201600301549150505b919050565b600081565b606781565b60018181548110610f8257fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b61100881565b600b81565b606681565b33612000146110345760405162461bcd60e51b815260040180806020018281038252602f815260200180614000602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6103e881565b60025481565b600981565b61100781565b61100681565b60405180610100016040528060dd8152602001613edc60dd913981565b60005460ff1681565b6402540be40081565b60005460ff16611146576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b33611007146111865760405162461bcd60e51b815260040180806020018281038252602e815260200180613e8d602e913960400191505060405180910390fd5b6111f084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b60208201529150612c489050565b156112cb57602081146112345760405162461bcd60e51b8152600401808060200182810382526026815260200180613fb96026913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161127291858580838501838280828437600092019190915250612d3092505050565b9050606481101580156112885750620186a08111155b6112c35760405162461bcd60e51b8152600401808060200182810382526027815260200180613e416027913960400191505060405180910390fd5b600255611308565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60046020526000908152604090205481565b6001546060906000805b828110156113fd57600181815481106113cb57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166113f5576001909101905b6001016113b6565b5060608160405190808252806020026020018201604052801561142a578160200160208202803683370190505b50600092509050815b838110156114ca576001818154811061144857fe5b9060005260206000209060040201600201601c9054906101000a900460ff166114c2576001818154811061147857fe5b600091825260209091206004909102015482516001600160a01b03909116908390859081106114a357fe5b6001600160a01b03909216602092830291909101909101526001909201915b600101611433565b509250505090565b61100281565b67016345785d8a000081565b60055481565b61100381565b602981565b60005460ff161561154d576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b611555613d65565b600061157960405180610100016040528060dd8152602001613edc60dd9139611b11565b91509150806115b95760405162461bcd60e51b8152600401808060200182810382526021815260200180613fdf6021913960400191505060405180910390fd5b60005b8260200151518110156116de576001836020015182815181106115db57fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a0909301516003909301929092559186015180519185019391859081106116b157fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016115bc565b50506103e8600255506000805460ff19166001179055565b33611001146117365760405162461bcd60e51b815260040180806020018281038252602981526020018061405c6029913960400191505060405180910390fd5b6001600160a01b0381166000908152600460205260409020548061175a5750610efb565b60018103905060006001828154811061176f57fe5b906000526020600020906004020160030154905060006001838154811061179257fe5b906000526020600020906004020160030181905550600060018080549050039050836001600160a01b03167f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d836040518082815260200191505060405180910390a28061180157505050610efb565b600081838161180c57fe5b0490508015610ef65760005b8481101561186a57816001828154811061182e57fe5b906000526020600020906004020160030154016001828154811061184e57fe5b6000918252602090912060036004909202010155600101611818565b50600180549085015b81811015610ef357826001828154811061188957fe5b90600052602060002090600402016003015401600182815481106118a957fe5b6000918252602090912060036004909202010155600101611873565b606581565b3341146119085760405162461bcd60e51b815260040180806020018281038252602d81526020018061402f602d913960400191505060405180910390fd5b60005460ff1661195b576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b600034116119a8576040805162461bcd60e51b81526020600482015260156024820152746465706f7369742076616c7565206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205434908015611abb5760006001808303815481106119da57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615611a45576040805184815290516001600160a01b038616917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a2611ab5565b600354611a58908463ffffffff612d3516565b6003908155810154611a70908463ffffffff612d3516565b60038201556040805184815290516001600160a01b038616917f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc055919081900360200190a25b50611afb565b6040805183815290516001600160a01b038516917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a25b505050565b61100081565b600381565b61100481565b611b19613d65565b6000611b23613d65565b611b2b613d7d565b611b3c611b3786612d8f565b612db4565b90506000805b611b4b83612dfe565b15611c5c5780611b7057611b66611b6184612e1f565b612e6d565b60ff168452611c54565b8060011415611c4f576060611b8c611b8785612e1f565b612f24565b90508051604051908082528060200260200182016040528015611bc957816020015b611bb6613d9d565b815260200190600190039081611bae5790505b50602086015260005b8151811015611c4457611be3613d9d565b6000611c01848481518110611bf457fe5b6020026020010151612ff5565b9150915080611c1e57876000995099505050505050505050611c65565b8188602001518481518110611c2f57fe5b60209081029190910101525050600101611bd2565b506001925050611c54565b611c5c565b600101611b42565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b6060815260200190600190039081611c84579050509050611caa8363ffffffff166130d2565b81600081518110611cb757fe5b6020026020010181905250610bd8816130e5565b6000806060611cd98461316f565b9150915081611d86577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611d41578181015183820152602001611d29565b50505050905090810190601f168015611d6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1606692505050610f66565b600080805b600154811015611e035767016345785d8a000060018281548110611dab57fe5b90600052602060002090600402016003015410611dcd57600190920191611dfb565b600060018281548110611ddc57fe5b9060005260206000209060040201600301541115611dfb576001909101905b600101611d8b565b50606082604051908082528060200260200182016040528015611e30578160200160208202803683370190505b509050606083604051908082528060200260200182016040528015611e5f578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015611e8e578160200160208202803683370190505b509050606085604051908082528060200260200182016040528015611ebd578160200160208202803683370190505b5090506000606086604051908082528060200260200182016040528015611eee578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015611f1d578160200160208202803683370190505b509050600098506000975060608d905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6a57600080fd5b505afa158015611f7e573d6000803e3d6000fd5b505050506040513d6020811015611f9457600080fd5b5051905067016345785d8a0000811115612009577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526021815260200180613ebb6021913960400191505060405180910390a160689d5050505050505050505050505050610f66565b60005b60015481101561227c5767016345785d8a00006001828154811061202c57fe5b906000526020600020906004020160030154106121b2576001818154811061205057fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b03168a8d8151811061208157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106120b657fe5b906000526020600020906004020160030154816120cf57fe5b06600183815481106120dd57fe5b906000526020600020906004020160030154039050612105838261325190919063ffffffff16565b8a8e8151811061211157fe5b6020026020010181815250506001828154811061212a57fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316888e8151811061215b57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081898e8151811061218857fe5b60209081029190910101526121a3878263ffffffff612d3516565b6001909d019c96506122749050565b6000600182815481106121c157fe5b906000526020600020906004020160030154111561227457600181815481106121e657fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316858c8151811061221757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001818154811061224457fe5b906000526020600020906004020160030154848c8151811061226257fe5b60209081029190910101526001909a01995b60010161200c565b50600085156126ba576110046001600160a01b0316636e056520878c8c8b60025442016040518663ffffffff1660e01b815260040180806020018060200180602001856001600160401b03166001600160401b03168152602001848103845288818151815260200191508051906020019060200280838360005b8381101561230e5781810151838201526020016122f6565b50505050905001848103835287818151815260200191508051906020019060200280838360005b8381101561234d578181015183820152602001612335565b50505050905001848103825286818151815260200191508051906020019060200280838360005b8381101561238c578181015183820152602001612374565b505050509050019750505050505050506020604051808303818588803b1580156123b557600080fd5b505af1935050505080156123db57506040513d60208110156123d657600080fd5b505160015b612616576040516000815260443d10156123f757506000612492565b60046000803e60005160e01c6308c379a08114612418576000915050612492565b60043d036004833e81513d60248201116001600160401b038211171561244357600092505050612492565b80830180516001600160401b03811115612464576000945050505050612492565b8060208301013d860181111561248257600095505050505050612492565b601f01601f191660405250925050505b8061249d5750612541565b60019150867fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280826040518080602001828103825283818151815260200191508051906020019080838360005b838110156125015781810151838201526020016124e9565b50505050905090810190601f16801561252e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a250612611565b3d80801561256b576040519150601f19603f3d011682016040523d82523d6000602084013e612570565b606091505b5060019150867fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a45826040518080602001828103825283818151815260200191508051906020019080838360005b838110156125d55781810151838201526020016125bd565b50505050905090810190601f1680156126025780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b6126ba565b8015612654576040805188815290517fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b709181900360200190a16126b8565b604080516020808252601b908201527f6261746368207472616e736665722072657475726e2066616c7365000000000081830152905188917fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280919081900360600190a25b505b80156128705760005b885181101561286e5760008982815181106126da57fe5b602002602001015190506000600182815481106126f357fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc918590811061272457fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f19350505050905080156127e0576001828154811061276557fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d91859081106127b457fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a2612864565b600182815481106127ed57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d918590811061283c57fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a25b50506001016126c3565b505b8451156129ba5760005b85518110156129b857600086828151811061289157fe5b60200260200101516001600160a01b03166108fc8784815181106128b157fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015612947578682815181106128e757fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d87848151811061292557fe5b60200260200101516040518082815260200191505060405180910390a26129af565b86828151811061295357fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d87848151811061299157fe5b60200260200101516040518082815260200191505060405180910390a25b5060010161287a565b505b4715612a23576040805147815290517f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d9181900360200190a1604051611002904780156108fc02916000818181858888f19350505050158015612a21573d6000803e3d6000fd5b505b60006003819055600555825115612a3d57612a3d83613293565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a7a57600080fd5b505af1158015612a8e573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a15060009f9e505050505050505050505050505050565b80516001600160a01b0316600090815260046020526040812054801580612b225750600180820381548110612b0257fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b15612b685782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000915050610f66565b600154600554600019820111801590612bbe5784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a260009350505050610f66565b600580546001908101909155805481906000198601908110612bdc57fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000816040516020018082805190602001908083835b60208310612c7d5780518252601f199092019160209182019101612c5e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310612ceb5780518252601f199092019160209182019101612ccc565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b015190565b600082820183811015610bd8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b612d97613dd2565b506040805180820190915281518152602082810190820152919050565b612dbc613d7d565b612dc58261375a565b612dce57600080fd5b6000612ddd8360200151613794565b60208085015160408051808201909152868152920190820152915050919050565b6000612e08613dd2565b505080518051602091820151919092015191011190565b612e27613dd2565b612e3082612dfe565b612e3957600080fd5b60208201516000612e49826137f7565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612e8257508151602110155b612e8b57600080fd5b6000612e9a8360200151613794565b90508083600001511015612ef5576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015612f1b57826020036101000a820491505b50949350505050565b6060612f2f8261375a565b612f3857600080fd5b6000612f438361392a565b9050606081604051908082528060200260200182016040528015612f8157816020015b612f6e613dd2565b815260200190600190039081612f665790505b5090506000612f938560200151613794565b60208601510190506000805b84811015612fea57612fb0836137f7565b9150604051806040016040528083815260200184815250848281518110612fd357fe5b602090810291909101015291810191600101612f9f565b509195945050505050565b612ffd613d9d565b6000613007613d9d565b61300f613d7d565b61301885612db4565b90506000805b61302783612dfe565b15611c5c57806130525761304261303d84612e1f565b613986565b6001600160a01b031684526130ca565b806001141561307a5761306761303d84612e1f565b6001600160a01b031660208501526130ca565b80600214156130a25761308f61303d84612e1f565b6001600160a01b031660408501526130ca565b8060031415611c4f576130b7611b6184612e1f565b6001600160401b03166060850152600191505b60010161301e565b6060612d2a6130e0836139a0565b613a86565b60608151600014156131065750604080516000815260208101909152610f66565b60608260008151811061311557fe5b602002602001015190506000600190505b83518110156131565761314c8285838151811061313f57fe5b6020026020010151613ad8565b9150600101613126565b50610bd8613169825160c060ff16613b55565b82613ad8565b600060606029835111156131a1576000604051806060016040528060298152602001613ded6029913991509150611c65565b60005b83518110156132375760005b8181101561322e578481815181106131c457fe5b6020026020010151600001516001600160a01b03168583815181106131e557fe5b6020026020010151600001516001600160a01b031614156132265760006040518060600160405280602b8152602001613e16602b9139935093505050611c65565b6001016131b0565b506001016131a4565b505060408051602081019091526000815260019150915091565b6000610bd883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c4d565b600154815160005b828110156133b05760016132ad613d9d565b600183815481106132ba57fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156133845786818151811061334a57fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b0316141561337c5760009250613384565b600101613336565b5081156133a65780516001600160a01b03166000908152600460205260408120555b505060010161329b565b508082111561342557805b828110156134235760018054806133ce57fe5b60008281526020812060046000199093019283020180546001600160a01b03199081168255600182810180549092169091556002820180546001600160e81b03191690556003909101919091559155016133bb565b505b60008183106134345781613436565b825b905060005b81811015613630576134e885828151811061345257fe5b60200260200101516001838154811061346757fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152613ce4565b61360357806001016004600087848151811061350057fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555084818151811061353c57fe5b60200260200101516001828154811061355157fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a090910151600390910155613628565b60006001828154811061361257fe5b9060005260206000209060040201600301819055505b60010161343b565b508282111561375457825b82811015610ef657600185828151811061365157fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782559585015181840180549184169188169190911790556040850151600282018054606088015160808901511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590971692909a169190911792909216939093171695909517905560a0909201516003909301929092558751908401929088908590811061372757fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205560010161363b565b50505050565b805160009061376b57506000610f66565b6020820151805160001a9060c082101561378a57600092505050610f66565b5060019392505050565b8051600090811a60808110156137ae576000915050610f66565b60b88110806137c9575060c081108015906137c9575060f881105b156137d8576001915050610f66565b60c08110156137ec5760b519019050610f66565b60f519019050610f66565b80516000908190811a60808110156138125760019150613923565b60b881101561382757607e1981019150613923565b60c08110156138a157600060b78203600186019550806020036101000a86510491506001810182019350508083101561389b576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50613923565b60f88110156138b65760be1981019150613923565b600060f78203600186019550806020036101000a865104915060018101820193505080831015613921576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061393b57506000610f66565b6000809050600061394f8460200151613794565b602085015185519181019250015b8082101561397d5761396e826137f7565b6001909301929091019061395d565b50909392505050565b805160009060151461399757600080fd5b612d2a82612e6d565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166139e457506018613a08565b6fffffffffffffffffffffffffffffffff198416613a0457506010613a08565b5060005b6020811015613a3e57818181518110613a1d57fe5b01602001516001600160f81b03191615613a3657613a3e565b600101613a08565b60008160200390506060816040519080825280601f01601f191660200182016040528015613a73576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613ab85750607f60f81b82600081518110613aa657fe5b01602001516001600160f81b03191611155b15613ac4575080610f66565b612d2a613ad68351608060ff16613b55565b835b6060806040519050835180825260208201818101602087015b81831015613b09578051835260209283019201613af1565b50855184518101855292509050808201602086015b81831015613b36578051835260209283019201613b1e565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613ba5576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613bff5782840160f81b81600081518110613be157fe5b60200101906001600160f81b031916908160001a9053509050612d2a565b6060613c0a856139a0565b90508381510160370160f81b82600081518110613c2357fe5b60200101906001600160f81b031916908160001a905350613c448282613ad8565b95945050505050565b60008184841115613cdc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ca1578181015183820152602001613c89565b50505050905090810190601f168015613cce5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b805182516000916001600160a01b039182169116148015613d1e575081602001516001600160a01b031683602001516001600160a01b0316145b8015613d43575081604001516001600160a01b031683604001516001600160a01b0316145b8015610bd85750506060908101519101516001600160401b0390811691161490565b60408051808201909152600081526060602082015290565b6040518060400160405280613d90613dd2565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60405180604001604052806000815260200160008152509056fe746865206e756d626572206f662076616c696461746f72732065786365656420746865206c696d69746475706c696361746520636f6e73656e7375732061646472657373206f662076616c696461746f725365747468652065787069726554696d655365636f6e64476170206973206f7574206f662072616e67656c656e677468206f66206a61696c2076616c696461746f7273206d757374206265206f6e65746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374666565206973206c6172676572207468616e2044555354595f494e434f4d494e47f8db80f8d8f84694a50381a86cd38ca23f6136556fc604329a054a85945d2287739da12be1f3e3b1aeaf14f888e9d63795942ae1ace6a7e31c76ee3c7d2f0b5977c21d5a2a3a86048c27395000f846940dd11a413972d8b1e1367c4b9196f75348424e7094c9c121c762d1e349dc3e38324d1c108c0b08abf99451f1512d6bfac004c862e761c43ad87dd8235dc486048c27395000f84694a5f6a270f60c83624dd1849038ee7c9e8a3e55fc94c9ff491fd30c1026b24b975274cf3d4286d36fa194a86cfcf4753a5df58d89bd6524f69b0e1ae072a986048c273950006c656e677468206f662065787069726554696d655365636f6e64476170206d69736d617463686661696c656420746f20706172736520696e69742076616c696461746f72536574746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d6573736167652073656e646572206d7573742062652074686520626c6f636b2070726f6475636572746865206d6573736167652073656e646572206d75737420626520736c61736820636f6e7472616374a2646970667358221220fdcf56e550bb645c25bbb322f7eea0d3ca90b5bb689e2fd4e559c38f5e858cb564736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "608060405234801561001057600080fd5b50600436106102275760003560e01c8063831d65d111610130578063c80d4b8f116100b8578063e1c7392a1161007c578063e1c7392a146106d9578063f9a2bbc7146106e1578063fc3e5908146106e9578063fc4333cd146106f1578063fd6a6879146106f957610227565b8063c80d4b8f14610623578063c81b16621461062b578063c8509d8114610633578063c96be4cb146106ab578063dc927faf146106d157610227565b8063a1a11bf5116100ff578063a1a11bf514610531578063a78abc1614610539578063ab51bb9614610555578063ac0af6291461055d578063ac4317511461056557610227565b8063831d65d11461049f57806396713da9146105195780639bc8e4f2146105215780639dc092621461052957610227565b80634bf6c882116101b35780636e47b482116101825780636e47b4821461047757806370fd5bad1461047f57806375d47a0a146104875780637912a65d1461048f5780637942fd051461049757610227565b80634bf6c8821461045757806351e806721461045f578063567a372d1461046757806362b72cf51461046f57610227565b806337c8dab9116101fa57806337c8dab9146103b9578063389f4f71146103f85780633dffc3871461041257806343756e5c14610430578063493279b11461043857610227565b80630bee7a671461022c5780631182b8751461024d57806323bac5a21461033a57806335aa2e4414610380575b600080fd5b610234610701565b6040805163ffffffff9092168252519081900360200190f35b6102c56004803603604081101561026357600080fd5b60ff8235169190810190604081016020820135600160201b81111561028757600080fd5b82018360208201111561029957600080fd5b803590602001918460018302840111600160201b831117156102ba57600080fd5b509092509050610706565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ff5781810151838201526020016102e7565b50505050905090810190601f16801561032c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103606004803603602081101561035057600080fd5b50356001600160a01b03166107da565b604080519384526020840192909252151582820152519081900360600190f35b61039d6004803603602081101561039657600080fd5b50356107fd565b604080516001600160a01b039092168252519081900360200190f35b6103df600480360360208110156103cf57600080fd5b50356001600160a01b0316610824565b6040805192835260208301919091528051918290030190f35b61040061087b565b60408051918252519081900360200190f35b61041a610881565b6040805160ff9092168252519081900360200190f35b61039d610886565b61044061088c565b6040805161ffff9092168252519081900360200190f35b61041a610891565b61039d610896565b61040061089c565b6104006108a2565b61039d6108a8565b61041a6108ae565b61039d6108b3565b6104006108b9565b61041a6108be565b610517600480360360408110156104b557600080fd5b60ff8235169190810190604081016020820135600160201b8111156104d957600080fd5b8201836020820111156104eb57600080fd5b803590602001918460018302840111600160201b8311171561050c57600080fd5b5090925090506108c3565b005b61041a610a1e565b610400610a23565b61039d610a2e565b61039d610a34565b610541610a3a565b604080519115158252519081900360200190f35b610234610a43565b610400610a48565b6105176004803603604081101561057b57600080fd5b810190602081018135600160201b81111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460018302840111600160201b831117156105c857600080fd5b919390929091602081019035600160201b8111156105e557600080fd5b8201836020820111156105f757600080fd5b803590602001918460018302840111600160201b8311171561061857600080fd5b509092509050610a4d565b610400610e3b565b61039d610e40565b6105176004803603604081101561064957600080fd5b60ff8235169190810190604081016020820135600160201b81111561066d57600080fd5b82018360208201111561067f57600080fd5b803590602001918460018302840111600160201b831117156106a057600080fd5b509092509050610e46565b610517600480360360208110156106c157600080fd5b50356001600160a01b0316610ef9565b61039d61131e565b610517611324565b61039d611395565b61041a61139b565b6105176113a0565b61039d61182b565b606481565b606033612000146107485760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff1661078d576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6040805162461bcd60e51b815260206004820152601e60248201527f7265636569766520756e65787065637465642073796e207061636b6167650000604482015290519081900360640190fd5b600260208190526000918252604090912080546001820154919092015460ff1683565b6001818154811061080a57fe5b6000918252602090912001546001600160a01b0316905081565b60008061082f612146565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b600181565b61100181565b606081565b600881565b61200081565b60045481565b60035481565b61100581565b600281565b61100881565b603281565b600b81565b33612000146109035760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff16610948576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b610950612169565b600061099184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183192505050565b9150915080156109db5781516040805163ffffffff9092168252517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e6299679181900360200190a1610a17565b81516040805163ffffffff9092168252517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79181900360200190a15b5050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff16610a92576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b3361100714610ad25760405162461bcd60e51b815260040180806020018281038252602e81526020018061220d602e913960400191505060405180910390fd5b610b3d84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b602082015291506118b19050565b15610c165760208114610b815760405162461bcd60e51b81526004018080602001828103825260278152602001806121b66027913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610bbf9185858083850183828082843760009201919091525061199992505050565b905060018110158015610bd3575060055481105b610c0e5760405162461bcd60e51b815260040180806020018281038252602581526020018061225d6025913960400191505060405180910390fd5b600455610da9565b610c7c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b602082015291506118b19050565b15610d6c5760208114610cc05760405162461bcd60e51b815260040180806020018281038252602281526020018061223b6022913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610cfe9185858083850183828082843760009201919091525061199992505050565b90506103e88111158015610d13575060045481115b610d64576040805162461bcd60e51b815260206004820181905260248201527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604482015290519081900360640190fd5b600555610da9565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b609681565b61100281565b3361200014610e865760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff16610ecb576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610f375760405162461bcd60e51b815260040180806020018281038252602d8152602001806122b1602d913960400191505060405180910390fd5b60005460ff16610f7c576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6003544311610fd2576040805162461bcd60e51b815260206004820181905260248201527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604482015290519081900360640190fd5b3a1561101c576040805162461bcd60e51b81526020600482015260146024820152736761737072696365206973206e6f74207a65726f60601b604482015290519081900360640190fd5b611024612146565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff16158015928201929092529061107f5760208101805160010190526110d8565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b4381526005546020820151816110ea57fe5b0661123c57600060208201819052604080516335409f7f60e01b81526001600160a01b03851660048201529051611000926335409f7f926024808201939182900301818387803b15801561113d57600080fd5b505af1158015611151573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6111718561199e565b60006040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156111d15781810151838201526020016111b9565b50505050905090810190601f1680156111fe5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561121f57600080fd5b505af1158015611233573d6000803e3d6000fd5b505050506112b2565b60045481602001518161124b57fe5b066112b257604080516375abf10160e11b81526001600160a01b038416600482015290516110009163eb57e20291602480830192600092919082900301818387803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505043600355565b61100381565b60005460ff161561137c576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b603260045560966005556000805460ff19166001179055565b61100081565b600381565b33611000146113e05760405162461bcd60e51b81526004018080602001828103825260308152602001806121dd6030913960400191505060405180910390fd5b60005460ff16611425576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b60015461143157611829565b600154600090600019015b8082116117fd576000805b8284101561156057611457612146565b600260006001878154811061146857fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff16151590820152600554909150600490048160200151111561154a576004600554816114d557fe5b048160200151038160200181815250508060026000600188815481106114f757fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611554565b6001925050611560565b50600190930192611447565b8284116116f75761156f612146565b600260006001868154811061158057fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611668576004600554816115ed57fe5b0481602001510381602001818152505080600260006001878154811061160f57fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff191691151591909117905591506116f79050565b600260006001868154811061167957fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff191690558054806116bd57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055836116ea57506116f7565b5060001990920191611560565b8180156117015750805b156117e057600260006001868154811061171757fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff1916905580548490811061175e57fe5b600091825260209091200154600180546001600160a01b03909216918690811061178457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060018054806117bd57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b826117ec5750506117fd565b50506001909101906000190161143c565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b611839612169565b6000611843612169565b61184b61217b565b61185c61185786611a70565b611a95565b90506000805b61186b83611adf565b156118a457806118975761188661188184611b00565b611b4e565b63ffffffff1684526001915061189c565b6118a4565b600101611862565b5091935090915050915091565b6000816040516020018082805190602001908083835b602083106118e65780518252601f1990920191602091820191016118c7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106119545780518252601f199092019160209182019101611935565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b015190565b60408051600480825260a08201909252606091829190816020015b60608152602001906001900390816119b95790505090506119e2836001600160a01b0316611c05565b816000815181106119ef57fe5b6020026020010181905250611a0343611c28565b81600181518110611a1057fe5b6020908102919091010152611a256060611c28565b81600281518110611a3257fe5b6020026020010181905250611a4642611c28565b81600381518110611a5357fe5b6020026020010181905250611a6781611c3b565b9150505b919050565b611a7861219b565b506040805180820190915281518152602082810190820152919050565b611a9d61217b565b611aa682611cc5565b611aaf57600080fd5b6000611abe8360200151611cff565b60208085015160408051808201909152868152920190820152915050919050565b6000611ae961219b565b505080518051602091820151919092015191011190565b611b0861219b565b611b1182611adf565b611b1a57600080fd5b60208201516000611b2a82611d62565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590611b6357508151602110155b611b6c57600080fd5b6000611b7b8360200151611cff565b90508083600001511015611bd6576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015611bfc57826020036101000a820491505b50949350505050565b60408051600560a21b8318601482015260348101909152606090611a6781611e95565b6060611993611c3683611eeb565b611e95565b6060815160001415611c5c5750604080516000815260208101909152611a6b565b606082600081518110611c6b57fe5b602002602001015190506000600190505b8351811015611cac57611ca282858381518110611c9557fe5b6020026020010151611fd1565b9150600101611c7c565b50611a67611cbf825160c060ff1661204e565b82611fd1565b8051600090611cd657506000611a6b565b6020820151805160001a9060c0821015611cf557600092505050611a6b565b5060019392505050565b8051600090811a6080811015611d19576000915050611a6b565b60b8811080611d34575060c08110801590611d34575060f881105b15611d43576001915050611a6b565b60c0811015611d575760b519019050611a6b565b60f519019050611a6b565b80516000908190811a6080811015611d7d5760019150611e8e565b60b8811015611d9257607e1981019150611e8e565b60c0811015611e0c57600060b78203600186019550806020036101000a865104915060018101820193505080831015611e06576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50611e8e565b60f8811015611e215760be1981019150611e8e565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611e8c576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b606081516001148015611ec75750607f60f81b82600081518110611eb557fe5b01602001516001600160f81b03191611155b15611ed3575080611a6b565b611993611ee58351608060ff1661204e565b83611fd1565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416611f2f57506018611f53565b6fffffffffffffffffffffffffffffffff198416611f4f57506010611f53565b5060005b6020811015611f8957818181518110611f6857fe5b01602001516001600160f81b03191615611f8157611f89565b600101611f53565b60008160200390506060816040519080825280601f01601f191660200182016040528015611fbe576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b81831015612002578051835260209283019201611fea565b50855184518101855292509050808201602086015b8183101561202f578051835260209283019201612017565b508651929092011591909101601f01601f191660405250905092915050565b606068010000000000000000831061209e576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116120f85782840160f81b816000815181106120da57fe5b60200101906001600160f81b031916908160001a9053509050611993565b606061210385611eeb565b90508381510160370160f81b8260008151811061211c57fe5b60200101906001600160f81b031916908160001a90535061213d8282611fd1565b95945050505050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061218e61219b565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d69736d61746368746865206d6573736167652073656e646572206d7573742062652076616c696461746f7253657420636f6e7472616374746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746368746865206d697364656d65616e6f725468726573686f6c64206f7574206f662072616e6765746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d6573736167652073656e646572206d7573742062652074686520626c6f636b2070726f647563657274686520636f6e7472616374206e6f7420696e69742079657400000000000000a26469706673582212204ff575d7be356d691e7b7eae41716a4ccc366ec84f8235486e935261df61a18a64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(SystemRewardContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "60806040526004361061014f5760003560e01c806396713da9116100b6578063c81b16621161006f578063c81b1662146103dc578063dc927faf146103f1578063f9a2bbc714610406578063fb5478b31461041b578063fc3e590814610430578063fd6a68791461044557610193565b806396713da91461033a5780639a99b4f01461034f5780639dc0926214610388578063a1a11bf51461039d578063a78abc16146103b2578063ab51bb96146103c757610193565b806351e806721161010857806351e806721461028a5780636d70f7ae1461029f5780636e47b482146102e657806370fd5bad146102fb57806375d47a0a146103105780637942fd051461032557610193565b80630bee7a67146101985780633a0b0eff146101c65780633dffc387146101ed57806343756e5c14610218578063493279b1146102495780634bf6c8821461027557610193565b366101935734156101915760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b3480156101a457600080fd5b506101ad61045a565b6040805163ffffffff9092168252519081900360200190f35b3480156101d257600080fd5b506101db61045f565b60408051918252519081900360200190f35b3480156101f957600080fd5b50610202610465565b6040805160ff9092168252519081900360200190f35b34801561022457600080fd5b5061022d61046a565b604080516001600160a01b039092168252519081900360200190f35b34801561025557600080fd5b5061025e610470565b6040805161ffff9092168252519081900360200190f35b34801561028157600080fd5b50610202610475565b34801561029657600080fd5b5061022d61047a565b3480156102ab57600080fd5b506102d2600480360360208110156102c257600080fd5b50356001600160a01b0316610480565b604080519115158252519081900360200190f35b3480156102f257600080fd5b5061022d61049e565b34801561030757600080fd5b506102026104a4565b34801561031c57600080fd5b5061022d6104a9565b34801561033157600080fd5b506102026104af565b34801561034657600080fd5b506102026104b4565b34801561035b57600080fd5b506101db6004803603604081101561037257600080fd5b506001600160a01b0381351690602001356104b9565b34801561039457600080fd5b5061022d610664565b3480156103a957600080fd5b5061022d61066a565b3480156103be57600080fd5b506102d2610670565b3480156103d357600080fd5b506101ad610679565b3480156103e857600080fd5b5061022d61067e565b3480156103fd57600080fd5b5061022d610684565b34801561041257600080fd5b5061022d61068a565b34801561042757600080fd5b506101db610690565b34801561043c57600080fd5b5061020261069c565b34801561045157600080fd5b5061022d6106a1565b606481565b60015481565b600181565b61100181565b606081565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b61100881565b600b81565b600981565b6000805460ff1661053657600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166105845760405162461bcd60e51b815260040180806020018281038252602b8152602001806106a8602b913960400191505060405180910390fd5b60004783106105935747610595565b825b9050670de0b6b3a76400008111156105b25750670de0b6b3a76400005b8015610633576040516001600160a01b0385169082156108fc029083906000818181858888f193505050501580156105ee573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a261065d565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b61100781565b61100681565b60005460ff1681565b600081565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b6110048156fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f64a2646970667358221220d0a7618a32d393c0757994fad066c9aaf7342a982498e0748019ec232f5dc86764736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(LightClientContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "608060405234801561001057600080fd5b50600436106102115760003560e01c8063a78abc1611610125578063dda83148116100ad578063e405bbc31161007c578063e405bbc314610681578063ea54b2aa14610689578063f9a2bbc714610691578063fc3e590814610699578063fd6a6879146106a157610211565b8063dda8314814610609578063df5fe7041461062f578063e1c7392a14610655578063e2761af01461065d57610211565b8063c81b1662116100f4578063c81b166214610534578063cba510a91461053c578063d816987914610562578063da8d08f0146105db578063dc927faf1461060157610211565b8063a78abc1614610444578063ab51bb9614610460578063ac43175114610468578063adc879e91461052c57610211565b8063564b81ef116101a857806375d47a0a1161017757806375d47a0a1461041c5780637942fd051461042457806396713da91461042c5780639dc0926214610434578063a1a11bf51461043c57610211565b8063564b81ef146102ca5780635c5ae8db146103475780636e47b4821461040c57806370fd5bad1461041457610211565b806343756e5c116101e457806343756e5c14610277578063493279b11461029b5780634bf6c882146102ba57806351e80672146102c257610211565b80630bee7a67146102165780632657e9b61461023757806333f7798d146102515780633dffc38714610259575b600080fd5b61021e6106a9565b6040805163ffffffff9092168252519081900360200190f35b61023f6106ae565b60408051918252519081900360200190f35b61023f6106b9565b6102616106bf565b6040805160ff9092168252519081900360200190f35b61027f6106c4565b604080516001600160a01b039092168252519081900360200190f35b6102a36106ca565b6040805161ffff9092168252519081900360200190f35b6102616106cf565b61027f6106d4565b6102d26106da565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030c5781810151838201526020016102f4565b50505050905090810190601f1680156103395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61036d6004803603602081101561035d57600080fd5b50356001600160401b03166107e6565b60405180856001600160401b03166001600160401b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103ce5781810151838201526020016103b6565b50505050905090810190601f1680156103fb5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b61027f6108a1565b6102616108a7565b61027f6108ac565b6102616108b2565b6102616108b7565b61027f6108bc565b61027f6108c2565b61044c6108c8565b604080519115158252519081900360200190f35b61021e6108d1565b61052a6004803603604081101561047e57600080fd5b81019060208101813564010000000081111561049957600080fd5b8201836020820111156104ab57600080fd5b803590602001918460018302840111640100000000831117156104cd57600080fd5b9193909290916020810190356401000000008111156104eb57600080fd5b8201836020820111156104fd57600080fd5b8035906020019184600183028401116401000000008311171561051f57600080fd5b5090925090506108d6565b005b61023f610b8f565b61027f610b95565b61023f6004803603602081101561055257600080fd5b50356001600160401b0316610b9b565b61044c6004803603604081101561057857600080fd5b81019060208101813564010000000081111561059357600080fd5b8201836020820111156105a557600080fd5b803590602001918460018302840111640100000000831117156105c757600080fd5b9193509150356001600160401b0316610bba565b61027f600480360360208110156105f157600080fd5b50356001600160401b031661139b565b61027f6113b6565b61027f6004803603602081101561061f57600080fd5b50356001600160401b03166113bc565b61044c6004803603602081101561064557600080fd5b50356001600160401b03166113e0565b61052a611422565b6106656115c9565b604080516001600160401b039092168252519081900360200190f35b6106656115d8565b6102d26115ee565b61027f61160d565b610261611613565b61027f611618565b606481565b662386f26fc1000081565b60055481565b600181565b61100181565b606081565b600881565b61200081565b604080516020808252818301909252606091829190602082018180368337505060045460208301525090506000805b60208160ff16101561075057828160ff168151811061072457fe5b01602001516001600160f81b0319161561074357600190910190610748565b610750565b600101610709565b5060608160ff166040519080825280601f01601f191660200182016040528015610781576020820181803683370190505b50905060005b8260ff168160ff1610156107dd57838160ff16815181106107a457fe5b602001015160f81c60f81b828260ff16815181106107be57fe5b60200101906001600160f81b031916908160001a905350600101610787565b50925050505b90565b60016020818152600092835260409283902080548184015460028084015460038501805489516101009982161599909902600019011692909204601f81018790048702880187019098528787526001600160401b0390931696919592949091908301828280156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905084565b61100581565b600281565b61100881565b600b81565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff1661092d576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b336110071461096d5760405162461bcd60e51b815260040180806020018281038252602e815260200180611c0a602e913960400191505060405180910390fd5b6109e184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f726577617264466f7256616c696461746f725365744368616e676500000000006020820152915061161e9050565b15610ac05760208114610a255760405162461bcd60e51b815260040180806020018281038252602e815260200180611ba9602e913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610a639185858083850183828082843760009201919091525061170592505050565b9050600081118015610a7d5750670de0b6b3a76400008111155b610ab85760405162461bcd60e51b815260040180806020018281038252602f815260200180611c38602f913960400191505060405180910390fd5b600555610afd565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60045481565b61100281565b6001600160401b03166000908152600160208190526040909120015490565b60408051630a83aaa960e31b815233600482015290516000916110069163541d554891602480820192602092909190829003018186803b158015610bfd57600080fd5b505afa158015610c11573d6000803e3d6000fd5b505050506040513d6020811015610c2757600080fd5b5051610c7a576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b6001600160401b0382166000908152600260205260409020546001600160a01b031615610cee576040805162461bcd60e51b815260206004820152601c60248201527f63616e27742073796e63206475706c6963617465642068656164657200000000604482015290519081900360640190fd5b6003546001600160401b0390811690831611610d3b5760405162461bcd60e51b8152600401808060200182810382526026815260200180611c676026913960400191505060405180910390fd5b600354600160401b90046001600160401b0316610d56611867565b6001600160401b0382811660009081526001602081815260409283902083516080810185528154909516855280830154858301526002808201548686015260038201805486516101009682161596909602600019011691909104601f81018490048402850184019095528484529093606086019392830182828015610e1c5780601f10610df157610100808354040283529160200191610e1c565b820191906000526020600020905b815481529060010190602001808311610dff57829003601f168201915b50505050508152505090505b836001600160401b0316826001600160401b031610158015610e5957506003546001600160401b0390811690831610155b15610f3a5780516001600160401b0380821660009081526001602081815260409283902083516080810185528154909516855280830154858301526002808201548686015260038201805486516101009682161596909602600019011691909104601f8101849004840285018401909552848452959750939460608601939091830182828015610f2a5780601f10610eff57610100808354040283529160200191610f2a565b820191906000526020600020905b815481529060010190602001808311610f0d57829003601f168201915b5050505050815250509050610e28565b6060810151516110315780516001600160401b03811660009081526001602081815260409283902060030180548451600294821615610100026000190190911693909304601f810183900483028401830190945283835293955090929190830182828015610fe95780601f10610fbe57610100808354040283529160200191610fe9565b820191906000526020600020905b815481529060010190602001808311610fcc57829003601f168201915b505050506060830182905250516110315760405162461bcd60e51b8152600401808060200182810382526021815260200180611b886021913960400191505060405180910390fd5b6000816060015151608801905060608787905082016040519080825280601f01601f191660200182016040528015611070576020820181803683370190505b509050600061107e8261170a565b905061108c84868386611710565b6110c75760405162461bcd60e51b81526004018080602001828103825260238152602001806119456023913960400191505060405180910390fd5b6000838201915061110d8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177c92505050565b9450905061111c818386611786565b8251602001935061112b61188d565b6110008186866064600019fa61114057600080fd5b805194506000600160f81b8616156111cf5750600554604080516309a99b4f60e41b815233600482015260248101929092525160019161100291639a99b4f0916044808201926020929091908290030181600087803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050506040513d60208110156111cc57600080fd5b50505b856001600160401b0316955060208201935060006111ef858884156117c7565b90985090506001600160401b03808216908c161461123e5760405162461bcd60e51b8152600401808060200182810382526033815260200180611bd76033913960400191505060405180910390fd5b6001600160401b03808c16600081815260026020818152604080842080546001600160a01b031916331790558e86168e529383526001808252928490208d518154961667ffffffffffffffff199096169590951785558c81015192850192909255918b01519183019190915560608a015180518b93926112c59260038501929101906118ac565b50506003546001600160401b03600160401b9091048116908d161115905061130d576003805467ffffffffffffffff60401b1916600160401b6001600160401b038e16021790555b7f4042c1020a8f410fb1c8859d276ab436aeb2c3074960e48467299cf1c966d3b48b8a8a602001518560405180856001600160401b03166001600160401b03168152602001846001600160401b03166001600160401b031681526020018381526020018215151515815260200194505050505060405180910390a15060019c9b505050505050505050505050565b6002602052600090815260409020546001600160a01b031681565b61100381565b6001600160401b03166000908152600260205260409020546001600160a01b031690565b6001600160401b0381166000908152600260205260408120546001600160a01b031615158061141c57506003546001600160401b038381169116145b92915050565b60005460ff161561147a576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b6000806114a16040518061024001604052806102208152602001611968610220913961177c565b815160045590925090506114b3611867565b60006114c1848460006117c7565b60008083526001600160401b038281168252600160208181526040938490208651815467ffffffffffffffff191694169390931783558086015191830191909155918401516002820155606084015180519496509294508593909261152d9260038501929101906118ac565b50506003805467ffffffffffffffff19166001600160401b0384811691821767ffffffffffffffff60401b1916600160401b9290920291909117918290556000805460ff19166001179055662386f26fc10000600555602085810151604080519490931684529083015280517f5ac9b37d571677b80957ca05693f371526c602fd08042b416a29fdab7efefa499350918290030190a150505050565b6003546001600160401b031681565b600354600160401b90046001600160401b031681565b6040518061024001604052806102208152602001611968610220913981565b61100081565b600381565b61100481565b6000816040516020018082805190602001908083835b602083106116535780518252601f199092019160209182019101611634565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106116c15780518252601f1990920191602091820191016116a2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b60200190565b600084606001515182840103925060008061172e876060015161177c565b909250905061173e828683611786565b5050506040840151601f1983810191909152602090940151603f19830152605f19820192909252600454606719820152910160871990910152600190565b8051602090910191565b5b602081106117a6578251825260209283019290910190601f1901611787565b915181516020939093036101000a6000190180199091169216919091179052565b6117cf611867565b60088401516028850151604890950180519095600092916117ee611867565b6020810183905260408101829052866118595760008060688a036040519080825280601f01601f191660200182016040528015611832576020820181803683370190505b50606084018190526118439061177c565b909250905061185660208c018383611786565b50505b989297509195505050505050565b604080516080810182526000808252602082018190529181019190915260608082015290565b6040518061100001604052806080906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118ed57805160ff191683800117855561191a565b8280016001018555821561191a579182015b8281111561191a5782518255916020019190600101906118ff565b5061192692915061192a565b5090565b6107e391905b80821115611926576000815560010161193056fe6661696c656420746f2073657269616c697a6520636f6e73656e73757320737461746542696e616e63652d436861696e2d4e696c6500000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000089496eba7b813d8eb37621a6983f05e98801eff557b3ba1c79872f27db06bb8ab4a3dfe007b6270d81a63acbb4432a0fc884fee651e4fbc4c40150d8f99c43f5000000e8d4a51000cad7bd770c1dd0397e33e9d9d3add62d34abd8a30dc5b616525baaaf8df417d6000000e8d4a5100034044e0606196391d09dffeb7671a2a2be43abe37f684ef406545660882e2d0b000000e8d4a5100073e0b195030b79529b8fedd12106ab9523ba23b1510c9bc0cead1d8265dc05c0000000e8d4a5100045356ac26abb1ca953a2bdf0e28229f70b2c1c7b85f837f072cc604d0d4779d5000000e8d4a510003b22dfb3b0d3764283106bc93fd24b5f4ee1a955f04e36ce5da6a014d1dcd18b000000e8d4a51000ae4ccacf75b148552a3a5bd5b410ee4381a288d44895218246e4762d5e8dfff4000000e8d4a5100071559e8cb1d83cad1db470e29fc45fa1c42724820545166b49a72ab2ba223dd2000000e8d4a51000319dac1531d185b9f4542749cd115af5970c717cee23d730dd98737de4fbcc89000000e8d4a5100078a98a1177c61a44306387dd986f056d3460ae8bf05980b3c20e5c5ddd81ca6e000000e8d4a51000df33205d0974d06f3f5d32e6fd98e5debd7ec39a796455f93c63aeef0dadb31a000000e8d4a510006661696c656420746f206c6f61642076616c696461746f722073657420646174616c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d617463686865616465722068656967687420646f65736e277420657175616c20746f207468652073706563696669656420686569676874746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206e6577526577617264466f7256616c696461746f725365744368616e6765206f7574206f662072616e676563616e27742073796e6320686561646572206265666f726520696e697469616c486569676874a264697066735822122083e44fd9d22eaf3b42c9fd118b0a6cfa12136f8079295814965549488d9c308064736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "60806040526004361061031e5760003560e01c80639a99b4f0116101ab578063bd466461116100f7578063f014847211610095578063fc1a598f1161006f578063fc1a598f14610cb3578063fc3e5908146109c9578063fd6a687914610ce6578063ff9c0027146107c757610366565b8063f014847214610c74578063f9a2bbc714610c89578063fa9e915914610c9e57610366565b8063dc6f5e90116100d1578063dc6f5e90146109c9578063dc927faf14610c35578063e1c7392a14610c4a578063ebf71d5314610c5f57610366565b8063bd46646114610b68578063c81b166214610b9b578063c8509d8114610bb057610366565b8063a7c9f02d11610164578063ac4317511161013e578063ac43175114610a3a578063b770186114610b05578063b99328c514610b1a578063b9fd21e314610b5357610366565b8063a7c9f02d146109c9578063aa7415f5146109de578063ab51bb9614610a2557610366565b80639a99b4f0146109095780639dc0926214610942578063a1a11bf514610957578063a496fba21461096c578063a5cd588b14610981578063a78abc16146109b457610366565b80635d499b1b1161026a57806375d47a0a116102235780638b87b21f116101fd5780638b87b21f146105b25780638eff336c146108a057806396713da9146108df5780639a854bbd146108f457610366565b806375d47a0a146107f15780637942fd0514610806578063831d65d11461081b57610366565b80635d499b1b14610671578063613684751461036b5780636e056520146106865780636e47b482146107b257806370fd5bad146107c757806371d30863146107dc57610366565b806343756e5c116102d75780634bf6c882116102b15780634bf6c8821461036b57806350432d321461061d57806351e806721461063257806359b927891461064757610366565b806343756e5c146105c757806343a368b9146105dc578063493279b1146105f157610366565b8063077b8f351461036b5780630bee7a67146103965780631182b875146103c4578063149d14d9146104be5780633d713223146104e55780633dffc387146105b257610366565b36610366573415610364576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561037757600080fd5b50610380610cfb565b6040805160ff9092168252519081900360200190f35b3480156103a257600080fd5b506103ab610d00565b6040805163ffffffff9092168252519081900360200190f35b3480156103d057600080fd5b50610449600480360360408110156103e757600080fd5b60ff8235169190810190604081016020820135600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460018302840111600160201b8311171561043e57600080fd5b509092509050610d05565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561048357818101518382015260200161046b565b50505050905090810190601f1680156104b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104ca57600080fd5b506104d3610e33565b60408051918252519081900360200190f35b3480156104f157600080fd5b506105966004803603602081101561050857600080fd5b810190602081018135600160201b81111561052257600080fd5b82018360208201111561053457600080fd5b803590602001918460018302840111600160201b8311171561055557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e39945050505050565b604080516001600160a01b039092168252519081900360200190f35b3480156105be57600080fd5b50610380610e5d565b3480156105d357600080fd5b50610596610e62565b3480156105e857600080fd5b506104d3610e68565b3480156105fd57600080fd5b50610606610e74565b6040805161ffff9092168252519081900360200190f35b34801561062957600080fd5b506104d3610e79565b34801561063e57600080fd5b50610596610e84565b34801561065357600080fd5b506105966004803603602081101561066a57600080fd5b5035610e8a565b34801561067d57600080fd5b506104d3610ea5565b61079e6004803603608081101561069c57600080fd5b810190602081018135600160201b8111156106b657600080fd5b8201836020820111156106c857600080fd5b803590602001918460208302840111600160201b831117156106e957600080fd5b919390929091602081019035600160201b81111561070657600080fd5b82018360208201111561071857600080fd5b803590602001918460208302840111600160201b8311171561073957600080fd5b919390929091602081019035600160201b81111561075657600080fd5b82018360208201111561076857600080fd5b803590602001918460208302840111600160201b8311171561078957600080fd5b91935091503567ffffffffffffffff16610eae565b604080519115158252519081900360200190f35b3480156107be57600080fd5b50610596611383565b3480156107d357600080fd5b50610380611389565b3480156107e857600080fd5b506104d361138e565b3480156107fd57600080fd5b50610596611394565b34801561081257600080fd5b5061038061139a565b34801561082757600080fd5b506103646004803603604081101561083e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561086257600080fd5b82018360208201111561087457600080fd5b803590602001918460018302840111600160201b8311171561089557600080fd5b50909250905061139f565b3480156108ac57600080fd5b50610364600480360360608110156108c357600080fd5b508035906001600160a01b0360208201351690604001356114e8565b3480156108eb57600080fd5b5061038061156e565b34801561090057600080fd5b506104d3611573565b34801561091557600080fd5b506104d36004803603604081101561092c57600080fd5b506001600160a01b03813516906020013561157f565b34801561094e57600080fd5b506105966116bd565b34801561096357600080fd5b506105966116c3565b34801561097857600080fd5b506103806116c9565b34801561098d57600080fd5b506104d3600480360360208110156109a457600080fd5b50356001600160a01b03166116ce565b3480156109c057600080fd5b5061079e6116e0565b3480156109d557600080fd5b506103806116e9565b61079e600480360360808110156109f457600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff166116ee565b348015610a3157600080fd5b506103ab6116c9565b348015610a4657600080fd5b5061036460048036036040811015610a5d57600080fd5b810190602081018135600160201b811115610a7757600080fd5b820183602082011115610a8957600080fd5b803590602001918460018302840111600160201b83111715610aaa57600080fd5b919390929091602081019035600160201b811115610ac757600080fd5b820183602082011115610ad957600080fd5b803590602001918460018302840111600160201b83111715610afa57600080fd5b509092509050611daf565b348015610b1157600080fd5b506104d361201e565b348015610b2657600080fd5b5061036460048036036040811015610b3d57600080fd5b50803590602001356001600160a01b0316612024565b348015610b5f57600080fd5b506104d361209a565b348015610b7457600080fd5b506104d360048036036020811015610b8b57600080fd5b50356001600160a01b03166120a4565b348015610ba757600080fd5b506105966120bf565b348015610bbc57600080fd5b5061036460048036036040811015610bd357600080fd5b60ff8235169190810190604081016020820135600160201b811115610bf757600080fd5b820183602082011115610c0957600080fd5b803590602001918460018302840111600160201b83111715610c2a57600080fd5b5090925090506120c5565b348015610c4157600080fd5b50610596612195565b348015610c5657600080fd5b5061036461219b565b348015610c6b57600080fd5b5061038061223b565b348015610c8057600080fd5b50610380612240565b348015610c9557600080fd5b50610596612245565b348015610caa57600080fd5b506104d361224b565b348015610cbf57600080fd5b5061044960048036036020811015610cd657600080fd5b50356001600160a01b0316612251565b348015610cf257600080fd5b50610596612378565b600881565b606481565b60005460609060ff16610d4d576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b3361200014610d8d5760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff841660021415610ddf57610dd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237e92505050565b9050610e2c565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b60015490565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b670de0b6b3a764000081565b606081565b662386f26fc1000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b6000805460ff16610ef4576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b868514610f325760405162461bcd60e51b815260040180806020018281038252603b815260200180614732603b913960400191505060405180910390fd5b868314610f705760405162461bcd60e51b815260040180806020018281038252603f815260200180614605603f913960400191505060405180910390fd5b426078018267ffffffffffffffff161015610fbc5760405162461bcd60e51b81526004018080602001828103825260248152602001806144f56024913960400191505060405180910390fd5b6402540be4003406156110005760405162461bcd60e51b81526004018080602001828103825260408152602001806148356040913960400191505060405180910390fd5b60408051868152602080880282010190915285906000908190606090848015611033578160200160208202803683370190505b50905060005b8481101561110e576402540be4008b8b8381811061105357fe5b905060200201358161106157fe5b061561109e5760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b6110c38b8b838181106110ad57fe5b90506020020135856124a290919063ffffffff16565b93506110ef6402540be4008c8c848181106110da57fe5b905060200201356124fc90919063ffffffff16565b8282815181106110fb57fe5b6020908102919091010152600101611039565b5060015461113390611126908663ffffffff61253e16565b849063ffffffff6124a216565b3410156111715760405162461bcd60e51b81526004018080602001828103825260568152602001806147df6056913960600191505060405180910390fd5b611181348463ffffffff61259716565b915061118b61434e565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d7600361124f846125d9565b611264876402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156112c25781810151838201526020016112aa565b50505050905090810190601f1680156112ef5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b600281565b60015481565b61100881565b600b81565b60005460ff166113e4576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b33612000146114245760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061289492505050565b6114e3565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b33611008146115285760405162461bcd60e51b815260040180806020018281038252602381526020018061479c6023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff166115c5576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b33611005146116055760405162461bcd60e51b815260040180806020018281038252602f815260200180614468602f913960400191505060405180910390fd5b60004783106116145747611616565b825b9050670de0b6b3a76400008111156116325760009150506116b7565b80156116b4576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561166e573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60026020526000908152604090205481565b60005460ff1681565b600381565b6000805460ff16611734576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff1610156117805760405162461bcd60e51b81526004018080602001828103825260248152602001806144f56024913960400191505060405180910390fd5b6402540be4003406156117c45760405162461bcd60e51b81526004018080602001828103825260408152602001806148356040913960400191505060405180910390fd5b600080806001600160a01b0388166118a3576001546117ea90879063ffffffff6124a216565b3410156118285760405162461bcd60e51b815260040180806020018281038252606181526020018061457f6061913960800191505060405180910390fd5b6402540be40086061561186c5760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b61187c348763ffffffff61259716565b9050611893866402540be40063ffffffff6124fc16565b6221272160e91b93509150611b46565b6001600160a01b0388166000908152600360205260409020549250826118fa5760405162461bcd60e51b815260040180806020018281038252603181526020018061454e6031913960400191505060405180910390fd5b60015434101561193b5760405162461bcd60e51b815260040180806020018281038252603f8152602001806146a1603f913960400191505060405180910390fd5b506001600160a01b038716600090815260026020526040902054349060088111158061198657506008811180156119865750611984876007198301600a0a63ffffffff6128f016565b155b6119c15760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b6119cb8782612932565b92506119d684612972565b15611a1e576305f5e100831015611a1e5760405162461bcd60e51b815260040180806020018281038252603a815260200180614497603a913960400191505060405180910390fd5b600881101580611a385750600881108015611a3857508683115b611a735760405162461bcd60e51b81526004018080602001828103825260258152602001806145e06025913960400191505060405180910390fd5b677ce66c50e2840000831115611aba5760405162461bcd60e51b81526004018080602001828103825260358152602001806145196035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b158015611b0f57600080fd5b505af1158015611b23573d6000803e3d6000fd5b505050506040513d6020811015611b3957600080fd5b5051611b4457600080fd5b505b611b4e61434e565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff168152509050828160400151600081518110611bfc57fe5b602002602001018181525050878160600151600081518110611c1a57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611c4c57fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611c77846125d9565b611c8c866402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611cea578181015183820152602001611cd2565b50505050905090810190601f168015611d175780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b3361100714611def5760405162461bcd60e51b815260040180806020018281038252602e8152602001806146e0602e913960400191505060405180910390fd5b60208114611e44576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415611f4c576020820151670de0b6b3a76400008111801590611ef357506402540be4008106155b611f44576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155611f89565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61c35081565b33611008146120645760405162461bcd60e51b815260040180806020018281038252602381526020018061479c6023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff1661210a576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b336120001461214a5760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a7892505050565b61100381565b60005460ff16156121f3576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b662386f26fc1000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b600481565b600581565b61100081565b61271081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff1610156122e157828160ff16815181106122b557fe5b01602001516001600160f81b031916156122d4576001909101906122d9565b6122e1565b60010161229a565b5060608160ff166040519080825280601f01601f191660200182016040528015612312576020820181803683370190505b50905060005b8260ff168160ff16101561236e57838160ff168151811061233557fe5b602001015160f81c60f81b828260ff168151811061234f57fe5b60200101906001600160f81b031916908160001a905350600101612318565b5095945050505050565b61100481565b606061238861439a565b600061239384612b76565b91509150806123e9576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b60006123f483612cb5565b905063ffffffff811615612488576040808401516020808601516001600160a01b0316600090815260029091529182205461242f9190612932565b90506124396143cf565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061247c81613002565b95505050505050610e58565b50506040805160008152602081019091529150610e589050565b6000828201838110156116b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130de565b60008261254d575060006116b7565b8282028284828161255a57fe5b04146116b45760405162461bcd60e51b81526004018080602001828103825260218152602001806146806021913960400191505060405180910390fd5b60006116b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613180565b60408051600680825260e08201909252606091829190816020015b60608152602001906001900390816125f45750508351909150612616906131da565b8160008151811061262357fe5b602002602001018190525061264483602001516001600160a01b03166131ed565b8160018151811061265157fe5b60200260200101819052506000836040015151905060608160405190808252806020026020018201604052801561269c57816020015b60608152602001906001900390816126875790505b50905060005b828110156126e9576126ca866040015182815181106126bd57fe5b60200260200101516131da565b8282815181106126d657fe5b60209081029190910101526001016126a2565b506126f381613210565b8360028151811061270057fe5b602002602001018190525060608260405190808252806020026020018201604052801561274157816020015b606081526020019060019003908161272c5790505b50905060005b83811015612797576127788760600151828151811061276257fe5b60200260200101516001600160a01b03166131ed565b82828151811061278457fe5b6020908102919091010152600101612747565b506127a181613210565b846003815181106127ae57fe5b60200260200101819052506060836040519080825280602002602001820160405280156127ef57816020015b60608152602001906001900390816127da5790505b50905060005b8481101561282f576128108860800151828151811061276257fe5b82828151811061281c57fe5b60209081029190910101526001016127f5565b5061283981613210565b8560048151811061284657fe5b60200260200101819052506128688760a0015167ffffffffffffffff166131da565b8560058151811061287557fe5b602002602001018190525061288985613210565b979650505050505050565b61289c6143f6565b60006128a78361329a565b91509150806128e75760405162461bcd60e51b815260040180806020018281038252602481526020018061470e6024913960400191505060405180910390fd5b6114e382613465565b60006116b483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506138e9565b6000600882111561295b57612954836007198401600a0a63ffffffff6124fc16565b90506116b7565b6116b4836008849003600a0a63ffffffff61253e16565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff1610156129e857828160ff16815181106129bc57fe5b01602001516001600160f81b031916156129db576001909101906129e0565b6129e8565b6001016129a1565b50600860ff82161015612a0057600092505050610e58565b816005820360ff1681518110612a1257fe5b6020910101516001600160f81b031916602d60f81b14612a3757600092505050610e58565b816001820360ff1681518110612a4957fe5b6020910101516001600160f81b031916604d60f81b14612a6e57600092505050610e58565b5060019392505050565b612a8061434e565b6000612a8b8361394b565b9150915080612acb5760405162461bcd60e51b81526004018080602001828103825260248152602001806144d16024913960400191505060405180910390fd5b612ad36143f6565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b846040015151811015612b5457612b3185604001518281518110612b2357fe5b602002602001015183613bc6565b85604001518281518110612b4157fe5b6020908102919091010152600101612b03565b506080840151604083015260056060830152612b6f82613465565b5050505050565b612b7e61439a565b6000612b8861439a565b612b9061442d565b612ba1612b9c86613bff565b613c24565b90506000805b612bb083613c6e565b15612ca85780612bd257612bcb612bc684613c8f565b613cdd565b8452612ca0565b8060011415612bff57612bec612be784613c8f565b613d94565b6001600160a01b03166020850152612ca0565b8060021415612c1e57612c14612bc684613c8f565b6040850152612ca0565b8060031415612c4657612c33612be784613c8f565b6001600160a01b03166060850152612ca0565b8060041415612c6e57612c5b612be784613c8f565b6001600160a01b03166080850152612ca0565b8060051415612c9b57612c83612bc684613c8f565b67ffffffffffffffff1660a085015260019150612ca0565b612ca8565b600101612ba7565b5091935090915050915091565b60208101516000906001600160a01b0316612dec578160a0015167ffffffffffffffff16421115612ce857506001610e58565b8160400151471015612cfc57506003610e58565b606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114612d53576040519150601f19603f3d011682016040523d82523d6000602084013e612d58565b606091505b5050905080612d6b575060049050610e58565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009050610e58565b8160a0015167ffffffffffffffff16421115612e0a57506001610e58565b81516020808401516001600160a01b031660009081526003909152604090205414612e3757506002610e58565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612e8757600080fd5b5086fa158015612e9b573d6000803e3d6000fd5b50505050506040513d6020811015612eb257600080fd5b50516040840151909150811015612ecd575060039050610e58565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612f3e57600080fd5b5087f1158015612f52573d6000803e3d6000fd5b50505050506040513d6020811015612f6957600080fd5b505190508015612ff6577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610e589050565b5060059150610e589050565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161301d575050835190915061303f906131da565b8160008151811061304c57fe5b602002602001018190525061306483602001516131da565b8160018151811061307157fe5b602002602001018190525061309283604001516001600160a01b03166131ed565b8160028151811061309f57fe5b60200260200101819052506130bd836060015163ffffffff166131da565b816003815181106130ca57fe5b6020026020010181905250610e2c81613210565b6000818361316a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561312f578181015183820152602001613117565b50505050905090810190601f16801561315c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161317657fe5b0495945050505050565b600081848411156131d25760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b505050900390565b60606116b76131e883613dae565b613e94565b60408051600560a21b8318601482015260348101909152606090610e2c81613e94565b60608151600014156132315750604080516000815260208101909152610e58565b60608260008151811061324057fe5b602002602001015190506000600190505b8351811015613281576132778285838151811061326a57fe5b6020026020010151613ee6565b9150600101613251565b50610e2c613294825160c060ff16613f63565b82613ee6565b6132a26143f6565b60006132ac6143f6565b6132b461442d565b6132c0612b9c86613bff565b90506000805b6132cf83613c6e565b15612ca857806132f5576132e5612be784613c8f565b6001600160a01b0316845261345d565b806001141561339657606061331161330c85613c8f565b61405b565b9050805160405190808252806020026020018201604052801561333e578160200160208202803683370190505b50602086015260005b815181101561338f5761336c82828151811061335f57fe5b6020026020010151613cdd565b8660200151828151811061337c57fe5b6020908102919091010152600101613347565b505061345d565b80600214156134385760606133ad61330c85613c8f565b905080516040519080825280602002602001820160405280156133da578160200160208202803683370190505b50604086015260005b815181101561338f576134088282815181106133fb57fe5b6020026020010151613d94565b8660400151828151811061341857fe5b6001600160a01b03909216602092830291909101909101526001016133e3565b8060031415612c9b5761344d612bc684613c8f565b63ffffffff166060850152600191505b6001016132c6565b80516001600160a01b031661368f5760005b8160200151518110156136895760008260400151828151811061349657fe5b60200260200101516001600160a01b0316612710846020015184815181106134ba57fe5b60209081029190910101516040516000818181858888f193505050503d8060008114613502576040519150601f19603f3d011682016040523d82523d6000602084013e613507565b606091505b50509050806135ca577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061354657fe5b60200260200101518560200151858151811061355e57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613680565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061360057fe5b60200260200101518560200151858151811061361857fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613477565b506138e6565b60005b8160200151518110156138e457600082600001516001600160a01b031663a9059cbb61c350856040015185815181106136c757fe5b6020026020010151866020015186815181106136df57fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561373657600080fd5b5087f115801561374a573d6000803e3d6000fd5b50505050506040513d602081101561376157600080fd5b505190508015613825577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106137a157fe5b6020026020010151856020015185815181106137b957fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16138db565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061385b57fe5b60200260200101518560200151858151811061387357fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613692565b505b50565b600081836139385760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b5082848161394257fe5b06949350505050565b61395361434e565b600061395d61434e565b61396561442d565b613971612b9c86613bff565b90506000805b61398083613c6e565b15613bb8578061399d57613996612bc684613c8f565b8452613bb0565b80600114156139c5576139b2612be784613c8f565b6001600160a01b03166020850152613bb0565b8060021415613a545760606139dc61330c85613c8f565b90508051604051908082528060200260200182016040528015613a09578160200160208202803683370190505b50604086015260005b8151811015613a4d57613a2a82828151811061335f57fe5b86604001518281518110613a3a57fe5b6020908102919091010152600101613a12565b5050613bb0565b8060031415613ae9576060613a6b61330c85613c8f565b90508051604051908082528060200260200182016040528015613a98578160200160208202803683370190505b50606086015260005b8151811015613a4d57613ab98282815181106133fb57fe5b86606001518281518110613ac957fe5b6001600160a01b0390921660209283029190910190910152600101613aa1565b8060041415613b7e576060613b0061330c85613c8f565b90508051604051908082528060200260200182016040528015613b2d578160200160208202803683370190505b50608086015260005b8151811015613a4d57613b4e8282815181106133fb57fe5b86608001518281518110613b5e57fe5b6001600160a01b0390921660209283029190910190910152600101613b36565b8060051415613bab57613b93612bc684613c8f565b67ffffffffffffffff1660a085015260019150613bb0565b613bb8565b600101613977565b509195600195509350505050565b60006008821115613be857612954836007198401600a0a63ffffffff61253e16565b6116b4836008849003600a0a63ffffffff6124fc16565b613c0761444d565b506040805180820190915281518152602082810190820152919050565b613c2c61442d565b613c358261412c565b613c3e57600080fd5b6000613c4d836020015161415c565b60208085015160408051808201909152868152920190820152915050919050565b6000613c7861444d565b505080518051602091820151919092015191011190565b613c9761444d565b613ca082613c6e565b613ca957600080fd5b60208201516000613cb9826141bf565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613cf257508151602110155b613cfb57600080fd5b6000613d0a836020015161415c565b90508083600001511015613d65576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613d8b57826020036101000a820491505b50949350505050565b8051600090601514613da557600080fd5b6116b782613cdd565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613df257506018613e16565b6fffffffffffffffffffffffffffffffff198416613e1257506010613e16565b5060005b6020811015613e4c57818181518110613e2b57fe5b01602001516001600160f81b03191615613e4457613e4c565b600101613e16565b60008160200390506060816040519080825280601f01601f191660200182016040528015613e81576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613ec65750607f60f81b82600081518110613eb457fe5b01602001516001600160f81b03191611155b15613ed2575080610e58565b6116b7613ee48351608060ff16613f63565b835b6060806040519050835180825260208201818101602087015b81831015613f17578051835260209283019201613eff565b50855184518101855292509050808201602086015b81831015613f44578051835260209283019201613f2c565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613fb3576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b6040805160018082528183019092526060916020820181803683370190505090506037841161400d5782840160f81b81600081518110613fef57fe5b60200101906001600160f81b031916908160001a90535090506116b7565b606061401885613dae565b90508381510160370160f81b8260008151811061403157fe5b60200101906001600160f81b031916908160001a9053506140528282613ee6565b95945050505050565b60606140668261412c565b61406f57600080fd5b600061407a836142f2565b90506060816040519080825280602002602001820160405280156140b857816020015b6140a561444d565b81526020019060019003908161409d5790505b50905060006140ca856020015161415c565b60208601510190506000805b84811015614121576140e7836141bf565b915060405180604001604052808381526020018481525084828151811061410a57fe5b6020908102919091010152918101916001016140d6565b509195945050505050565b805160009061413d57506000610e58565b6020820151805160001a9060c0821015612a6e57600092505050610e58565b8051600090811a6080811015614176576000915050610e58565b60b8811080614191575060c08110801590614191575060f881105b156141a0576001915050610e58565b60c08110156141b45760b519019050610e58565b60f519019050610e58565b80516000908190811a60808110156141da57600191506142eb565b60b88110156141ef57607e19810191506142eb565b60c081101561426957600060b78203600186019550806020036101000a865104915060018101820193505080831015614263576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506142eb565b60f881101561427e5760be19810191506142eb565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156142e9576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061430357506000610e58565b60008090506000614317846020015161415c565b602085015185519181019250015b8082101561434557614336826141bf565b60019093019290910190614325565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b604051806040016040528061444061444d565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6ea2646970667358221220560ad3b1f9184c6b58a836a4c111faf5fdf5dc0e93dc1c013cd41cea18c69cbb64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerIncentivizeContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "6080604052600436106102765760003560e01c80637e146cc51161014f578063af400681116100c1578063e75d72c71161007a578063e75d72c714610795578063e89a3020146107c8578063f9a2bbc7146107f2578063fc3e590814610807578063fd6a68791461081c578063fdd31fcd146108315761027d565b8063af400681146106ed578063bd4cc83014610717578063c81b166214610741578063dc927faf14610756578063dcae76ab1461076b578063e1c7392a146107805761027d565b8063a3c3c0ad11610113578063a3c3c0ad146105b3578063a78abc16146105c8578063a7c6a59d146105dd578063ab51bb96146105f2578063ac43175114610607578063ace9fcc2146106d85761027d565b80637e146cc51461052c578063930e1b091461054157806396713da9146105745780639dc0926214610589578063a1a11bf51461059e5761027d565b806343756e5c116101e85780636e47b482116101ac5780636e47b482146104645780636f93d2e61461047957806370fd5bad146104d857806374f2272d146104ed57806375d47a0a146105025780637942fd05146105175761027d565b806343756e5c146103e4578063493279b1146103f95780634bf6c8821461042557806351e806721461043a578063541333071461044f5761027d565b806312950c461161023a57806312950c46146103165780631b20087c1461032b5780631c643312146103405780633a975612146102825780633dffc3871461038657806340bb43c0146103b15761027d565b8063081e9d131461028257806308f2ec06146102a9578063093f2fc4146102be5780630bee7a67146102d357806310e06a76146103015761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610864565b60408051918252519081900360200190f35b3480156102b557600080fd5b50610297610869565b3480156102ca57600080fd5b5061029761086e565b3480156102df57600080fd5b506102e8610873565b6040805163ffffffff9092168252519081900360200190f35b34801561030d57600080fd5b50610297610878565b34801561032257600080fd5b5061029761087e565b34801561033757600080fd5b50610297610884565b34801561034c57600080fd5b5061036a6004803603602081101561036357600080fd5b503561088a565b604080516001600160a01b039092168252519081900360200190f35b34801561039257600080fd5b5061039b610864565b6040805160ff9092168252519081900360200190f35b3480156103bd57600080fd5b50610297600480360360208110156103d457600080fd5b50356001600160a01b03166108b1565b3480156103f057600080fd5b5061036a6108c3565b34801561040557600080fd5b5061040e6108c9565b6040805161ffff9092168252519081900360200190f35b34801561043157600080fd5b5061039b6108ce565b34801561044657600080fd5b5061036a6108d3565b34801561045b57600080fd5b50610297610873565b34801561047057600080fd5b5061036a6108d9565b34801561048557600080fd5b506104c46004803603608081101561049c57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013515156108df565b604080519115158252519081900360200190f35b3480156104e457600080fd5b5061039b610cae565b3480156104f957600080fd5b50610297610cb3565b34801561050e57600080fd5b5061036a610cb9565b34801561052357600080fd5b5061039b610cbf565b34801561053857600080fd5b50610297610cc4565b34801561054d57600080fd5b506102976004803603602081101561056457600080fd5b50356001600160a01b0316610cc9565b34801561058057600080fd5b5061039b610cdb565b34801561059557600080fd5b5061036a610ce0565b3480156105aa57600080fd5b5061036a610ce6565b3480156105bf57600080fd5b50610297610cec565b3480156105d457600080fd5b506104c4610cf2565b3480156105e957600080fd5b50610297610cfb565b3480156105fe57600080fd5b506102e8610d01565b34801561061357600080fd5b506106d66004803603604081101561062a57600080fd5b81019060208101813564010000000081111561064557600080fd5b82018360208201111561065757600080fd5b8035906020019184600183028401116401000000008311171561067957600080fd5b91939092909160208101903564010000000081111561069757600080fd5b8201836020820111156106a957600080fd5b803590602001918460018302840111640100000000831117156106cb57600080fd5b509092509050610d06565b005b3480156106e457600080fd5b50610297611355565b3480156106f957600080fd5b506102976004803603602081101561071057600080fd5b503561135b565b34801561072357600080fd5b506102976004803603602081101561073a57600080fd5b50356113b6565b34801561074d57600080fd5b5061036a6113cf565b34801561076257600080fd5b5061036a6113d5565b34801561077757600080fd5b506102976113db565b34801561078c57600080fd5b506106d66113e1565b3480156107a157600080fd5b506106d6600480360360208110156107b857600080fd5b50356001600160a01b03166114aa565b3480156107d457600080fd5b5061036a600480360360208110156107eb57600080fd5b5035611603565b3480156107fe57600080fd5b5061036a611610565b34801561081357600080fd5b5061039b611616565b34801561082857600080fd5b5061036a61161b565b34801561083d57600080fd5b506102976004803603602081101561085457600080fd5b50356001600160a01b0316611621565b600181565b602881565b605081565b606481565b600b5481565b60015481565b600c5481565b6006818154811061089757fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205481565b61100181565b606081565b600881565b61200081565b61100581565b6000805460ff16610937576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33612000146109775760405162461bcd60e51b815260040180806020018281038252602f815260200180612165602f913960400191505060405180910390fd5b600082156109fc57604080516309a99b4f60e41b8152611005600482015260248101869052905161100291639a99b4f09160448083019260209291908290030181600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b505050506040513d60208110156109f357600080fd5b50519050610a75565b604080516309a99b4f60e41b8152611005600482015260248101869052905161100491639a99b4f09160448083019260209291908290030181600087803b158015610a4657600080fd5b505af1158015610a5a573d6000803e3d6000fd5b505050506040513d6020811015610a7057600080fd5b505190505b600c805460010190556000610a8982611633565b600954909150610a9f908263ffffffff61166216565b600955600a54610ac7908290610abb908563ffffffff61166216565b9063ffffffff6116c316565b600a556001600160a01b038716600090815260056020526040902054610b3357600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038088166000908152600560209081526040808320805460010190559289168252600790522054610bb157600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260076020526040902080546001019055600c5460641415610ca157600b54600954600a5460408051938452602084019290925282820152517f2649b1b772a1a74bd332a67695e285317dd722941166595741c60a00fa65bb759181900360600190a16000610c2c611705565b90506000610c386119e9565b6001600160a01b0389166000908152600d6020526040902054909150610c76908290610c6a908563ffffffff61166216565b9063ffffffff61166216565b6001600160a01b0389166000908152600d6020526040812091909155600b80546001019055600c5550505b5060019695505050505050565b600281565b60035481565b61100881565b600b81565b600581565b60056020526000908152604090205481565b600981565b61100781565b61100681565b600a5481565b60005460ff1681565b60045481565b600081565b3361100714610d465760405162461bcd60e51b815260040180806020018281038252602e8152602001806120aa602e913960400191505060405180910390fd5b60005460ff16610d875760405162461bcd60e51b81526004018080602001828103825260218152602001806120d86021913960400191505060405180910390fd5b610dfb84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601f81527f68656164657252656c61796572526577617264526174654d6f6c6563756c650060208201529150611c679050565b15610ec85760208114610e3f5760405162461bcd60e51b81526004018080602001828103825260328152602001806121946032913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610e7d91858580838501838280828437600092019190915250611d4e92505050565b9050600254811115610ec05760405162461bcd60e51b8152600401808060200182810382526060815260200180611f836060913960600191505060405180910390fd5b6001556112c3565b610f2184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805160608101909152602280825290925090506120886020830139611c67565b15610ff95760208114610f655760405162461bcd60e51b815260040180806020018281038252602e815260200180612039602e913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610fa391858580838501838280828437600092019190915250611d4e92505050565b90508015801590610fb657506001548110155b610ff15760405162461bcd60e51b815260040180806020018281038252606c8152602001806120f9606c913960800191505060405180910390fd5b6002556112c3565b61106d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601a81527f63616c6c6572436f6d70656e736174696f6e4d6f6c6563756c6500000000000060208201529150611c679050565b1561113a57602081146110b15760405162461bcd60e51b815260040180806020018281038252602e815260200180612039602e913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916110ef91858580838501838280828437600092019190915250611d4e92505050565b90506004548111156111325760405162461bcd60e51b8152600401808060200182810382526056815260200180611fe36056913960600191505060405180910390fd5b6003556112c3565b6111ae84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601d81527f63616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f7200000060208201529150611c679050565b1561128657602081146111f25760405162461bcd60e51b815260040180806020018281038252602e815260200180612039602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161123091858580838501838280828437600092019190915250611d4e92505050565b9050801580159061124357506003548110155b61127e5760405162461bcd60e51b8152600401808060200182810382526061815260200180611f226061913960800191505060405180910390fd5b6004556112c3565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60025481565b60006028821161136c5750806113b1565b81602810801561137d575060508211155b1561138a575060286113b1565b60508211801561139b5750606e8211155b156113ab575060788190036113b1565b50600481045b919050565b6000602882116113c75750806113b1565b5060286113b1565b61100281565b61100381565b60095481565b60005460ff1615611439576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60005460ff1615611487576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60018080556005600255600381905560506004556000805460ff19169091179055565b6001600160a01b0381166000908152600d602052604090205480611509576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c995b185e595c881c995dd85c99607a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d60205260408082208290555184929184156108fc02918591818181858888f193505050506115b95760405161100290819084156108fc029085906000818181858888f19350505050158015611573573d6000803e3d6000fd5b506040805161100281526020810185905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a1505050611600565b604080516001600160a01b03851681526020810184905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a150505b50565b6008818154811061089757fe5b61100081565b600381565b61100481565b600d6020526000908152604090205481565b600061165c60025461165060015485611d5390919063ffffffff16565b9063ffffffff611dac16565b92915050565b6000828201838110156116bc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006116bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dee565b600954600680546040805160208084028201810190925282815260009493859360609383018282801561176157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611743575b5050505050905060608151604051908082528060200260200182016040528015611795578160200160208202803683370190505b50905060005b82518110156118225760008382815181106117b257fe5b6020026020010151905060006117ec60056000846001600160a01b03166001600160a01b03168152602001908152602001600020546113b6565b9050808484815181106117fb57fe5b6020908102919091010152611816868263ffffffff61166216565b9550505060010161179b565b50600061184060045461165060035488611d5390919063ffffffff16565b9050611852858263ffffffff6116c316565b94508460015b845181101561192957600061188d876116508a88868151811061187757fe5b6020026020010151611d5390919063ffffffff16565b90506118da81600d60008986815181106118a357fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205461166290919063ffffffff16565b600d60008885815181106118ea57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205561191e838263ffffffff6116c316565b925050600101611858565b5061193f81600d6000876000815181106118a357fe5b600d60008660008151811061195057fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060098190555060008090505b84518110156119d157600560008683815181106119a357fe5b6020908102919091018101516001600160a01b0316825281019190915260400160009081205560010161198a565b506119de60066000611eea565b509450505050505b90565b600a546008805460408051602080840282018101909252828152600094938593606093830182828015611a4557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a27575b5050505050905060608151604051908082528060200260200182016040528015611a79578160200160208202803683370190505b50905060005b8251811015611af8576000838281518110611a9657fe5b602002602001015190506000611ad060076000846001600160a01b03166001600160a01b031681526020019081526020016000205461135b565b905080848481518110611adf57fe5b6020908102919091010152949094019350600101611a7f565b506000611b1660045461165060035488611d5390919063ffffffff16565b9050611b28858263ffffffff6116c316565b94508460015b8451811015611bb2576000611b4d876116508a88868151811061187757fe5b9050611b6381600d60008986815181106118a357fe5b600d6000888581518110611b7357fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611ba7838263ffffffff6116c316565b925050600101611b2e565b50611bc881600d6000876000815181106118a357fe5b600d600086600081518110611bd957fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506000600a8190555060008090505b8451811015611c5a5760076000868381518110611c2c57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611c13565b506119de60086000611eea565b6000816040516020018082805190602001908083835b60208310611c9c5780518252601f199092019160209182019101611c7d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310611d0a5780518252601f199092019160209182019101611ceb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b600082611d625750600061165c565b82820282848281611d6f57fe5b04146116bc5760405162461bcd60e51b81526004018080602001828103825260218152602001806120676021913960400191505060405180910390fd5b60006116bc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e85565b60008184841115611e7d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e42578181015183820152602001611e2a565b50505050905090810190601f168015611e6f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611ed45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e42578181015183820152602001611e2a565b506000838581611ee057fe5b0495945050505050565b508054600082559060005260206000209081019061160091906119e691905b80821115611f1d5760008155600101611f09565b509056fe746865206e657743616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c656e65772068656164657252656c61796572526577617264526174654d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2068656164657252656c617965725265776172645261746544656e6f6d696e61746f726e65772063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2063616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f726c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7768656164657252656c617965725265776172645261746544656e6f6d696e61746f72746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374636f6e747261637420686173206e6f74206265656e20696e697469616c697a6564746865206e65772068656164657252656c617965725265776172645261746544656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2068656164657252656c61796572526577617264526174654d6f6c6563756c65746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163746c656e677468206f662068656164657252656c61796572526577617264526174654d6f6c6563756c65206d69736d61746368a26469706673582212209942fb859157a9a570f5d4a9dbba6573b75155e0372793b0dd76c49a6ff6fbbb64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "6080604052600436106101c25760003560e01c806395468d26116100f7578063c81b166211610095578063f9a2bbc711610064578063f9a2bbc714610529578063fb7cfdd71461053e578063fc3e590814610553578063fd6a687914610568576101c2565b8063c81b1662146104d5578063dc927faf146104ea578063e1c7392a146104ff578063e79a198f14610514576101c2565b8063a1a11bf5116100d1578063a1a11bf5146103c7578063a78abc16146103dc578063ab51bb96146103f1578063ac43175114610406576101c2565b806395468d261461038857806396713da91461039d5780639dc09262146103b2576101c2565b8063541d55481161016457806370fd5bad1161013e57806370fd5bad1461033457806375d47a0a146103495780637942fd051461035e5780637ae2308814610373576101c2565b8063541d5548146102b15780636a87d780146102f85780636e47b4821461031f576101c2565b806343756e5c116101a057806343756e5c1461022a578063493279b11461025b5780634bf6c8821461028757806351e806721461029c576101c2565b80630bee7a67146101c75780631aa3a008146101f55780633dffc387146101ff575b600080fd5b3480156101d357600080fd5b506101dc61057d565b6040805163ffffffff9092168252519081900360200190f35b6101fd610582565b005b34801561020b57600080fd5b5061021461077d565b6040805160ff9092168252519081900360200190f35b34801561023657600080fd5b5061023f610782565b604080516001600160a01b039092168252519081900360200190f35b34801561026757600080fd5b50610270610788565b6040805161ffff9092168252519081900360200190f35b34801561029357600080fd5b5061021461078d565b3480156102a857600080fd5b5061023f610792565b3480156102bd57600080fd5b506102e4600480360360208110156102d457600080fd5b50356001600160a01b0316610798565b604080519115158252519081900360200190f35b34801561030457600080fd5b5061030d6107b6565b60408051918252519081900360200190f35b34801561032b57600080fd5b5061023f6107bc565b34801561034057600080fd5b506102146107c2565b34801561035557600080fd5b5061023f6107c7565b34801561036a57600080fd5b506102146107cd565b34801561037f57600080fd5b5061030d6107d2565b34801561039457600080fd5b5061030d6107df565b3480156103a957600080fd5b506102146107eb565b3480156103be57600080fd5b5061023f6107f0565b3480156103d357600080fd5b5061023f6107f6565b3480156103e857600080fd5b506102e46107fc565b3480156103fd57600080fd5b506101dc610805565b34801561041257600080fd5b506101fd6004803603604081101561042957600080fd5b81019060208101813564010000000081111561044457600080fd5b82018360208201111561045657600080fd5b8035906020019184600183028401116401000000008311171561047857600080fd5b91939092909160208101903564010000000081111561049657600080fd5b8201836020820111156104a857600080fd5b803590602001918460018302840111640100000000831117156104ca57600080fd5b50909250905061080a565b3480156104e157600080fd5b5061023f610c2c565b3480156104f657600080fd5b5061023f610c32565b34801561050b57600080fd5b506101fd610c38565b34801561052057600080fd5b506101fd610cba565b34801561053557600080fd5b5061023f610e73565b34801561054a57600080fd5b5061030d610e79565b34801561055f57600080fd5b50610214610e7f565b34801561057457600080fd5b5061023f610e84565b606481565b3360009081526004602052604090205460ff16156105df576040805162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e48195e1a5cdd605a1b604482015290519081900360640190fd5b60005460ff16610632576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b61063b33610e8a565b156106775760405162461bcd60e51b815260040180806020018281038252602781526020018061109c6027913960400191505060405180910390fd5b3332146106c1576040805162461bcd60e51b81526020600482015260136024820152721b9bc81c1c9bde1e481a5cc8185b1b1bddd959606a1b604482015290519081900360640190fd5b60015434146107015760405162461bcd60e51b81526004018080602001828103825260258152602001806110776025913960400191505060405180910390fd5b604080518082018252600180548252600254602080840191825233600081815260038352868120955186559251948401949094556004815290849020805460ff1916909217909155825191825291517fdb33a09d38b59a8fa8b7d92a1d82c8015e99f05f67ae9c9ae623157767959496929181900390910190a1565b600181565b61100181565b606081565b600881565b61200081565b6001600160a01b031660009081526004602052604090205460ff1690565b60025481565b61100581565b600281565b61100881565b600b81565b68056bc75e2d6310000081565b67016345785d8a000081565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff1661085d576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b336110071461089d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806110c3602e913960400191505060405180910390fd5b61090384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e1c995c5d5a5c995911195c1bdcda5d608a1b60208201529150610e909050565b15610a0657602081146109475760405162461bcd60e51b81526004018080602001828103825260228152602001806110f16022913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161098591858580838501838280828437600092019190915250610f7792505050565b90506001811180156109a05750683635c9adc5dea000008111155b80156109ad575060025481115b6109fe576040805162461bcd60e51b815260206004820181905260248201527f7468652072657175697265644465706f736974206f7574206f662072616e6765604482015290519081900360640190fd5b600155610b9a565b610a6184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260048152636475657360e01b60208201529150610e909050565b15610b5d5760208114610abb576040805162461bcd60e51b815260206004820152601760248201527f6c656e677468206f662064756573206d69736d61746368000000000000000000604482015290519081900360640190fd5b604080516020601f8401819004810282018101909252828152600091610af991858580838501838280828437600092019190915250610f7792505050565b9050600081118015610b0c575060015481105b610b55576040805162461bcd60e51b81526020600482015260156024820152747468652064756573206f7574206f662072616e676560581b604482015290519081900360640190fd5b600255610b9a565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b60005460ff1615610c90576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b68056bc75e2d63100000600190815567016345785d8a00006002556000805460ff19169091179055565b3360009081526004602052604090205460ff16610d15576040805162461bcd60e51b81526020600482015260146024820152731c995b185e595c88191bc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b60005460ff16610d68576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b610d7061105c565b5033600081815260036020908152604091829020825180840190935280548084526001909101549183018290529192916108fc91610db4919063ffffffff610f7c16565b6040518115909202916000818181858888f19350505050158015610ddc573d6000803e3d6000fd5b50602081015160405161100291829181156108fc0291906000818181858888f19350505050158015610e12573d6000803e3d6000fd5b50336000818152600460209081526040808320805460ff191690556003825280832083815560010192909255815192835290517fd17202129b83db7880d6b9f25df81c58ad46f7e0e2c92236b1aa10663a4876679281900390910190a15050565b61100081565b60015481565b600381565b61100481565b3b151590565b6000816040516020018082805190602001908083835b60208310610ec55780518252601f199092019160209182019101610ea6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610f335780518252601f199092019160209182019101610f14565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b6000610fbe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fc5565b9392505050565b600081848411156110545760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611019578181015183820152602001611001565b50505050905090810190601f1680156110465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60405180604001604052806000815260200160008152509056fe6465706f7369742076616c7565206973206e6f742065786163746c79207468652073616d65636f6e7472616374206973206e6f7420616c6c6f77656420746f20626520612072656c61796572746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662072657175697265644465706f736974206d69736d61746368a264697066735822122011778451ed6d3e3757ce2e74acfc7fa17bf5d16f07168a6ce073d7c91e583c8c64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(GovHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "608060405234801561001057600080fd5b506004361061018e5760003560e01c8063831d65d1116100de578063ab51bb9611610097578063dc927faf11610071578063dc927faf14610486578063f9a2bbc71461048e578063fc3e590814610496578063fd6a68791461049e5761018e565b8063ab51bb96146103fc578063c81b166214610404578063c8509d811461040c5761018e565b8063831d65d11461034457806396713da9146103c05780639ab1a373146103c85780639dc09262146103d0578063a1a11bf5146103d8578063a78abc16146103e05761018e565b8063493279b11161014b5780636e47b482116101255780636e47b4821461032457806370fd5bad1461032c57806375d47a0a146103345780637942fd051461033c5761018e565b8063493279b1146102f55780634bf6c8821461031457806351e806721461031c5761018e565b80630bee7a67146101935780631182b875146101b45780633a21baae146102a35780633dffc387146102ab57806343756e5c146102c95780634900c4ea146102ed575b600080fd5b61019b6104a6565b6040805163ffffffff9092168252519081900360200190f35b61022e600480360360408110156101ca57600080fd5b60ff82351691908101906040810160208201356401000000008111156101ef57600080fd5b82018360208201111561020157600080fd5b8035906020019184600183028401116401000000008311171561022357600080fd5b5090925090506104ab565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610268578181015183820152602001610250565b50505050905090810190601f1680156102955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61019b61059a565b6102b361059f565b6040805160ff9092168252519081900360200190f35b6102d16105a4565b604080516001600160a01b039092168252519081900360200190f35b6102b36105aa565b6102fd6105af565b6040805161ffff9092168252519081900360200190f35b6102b36105b4565b6102d16105b9565b6102d16105bf565b6102b36105c5565b6102d16105ca565b6102b36105d0565b6103be6004803603604081101561035a57600080fd5b60ff823516919081019060408101602082013564010000000081111561037f57600080fd5b82018360208201111561039157600080fd5b803590602001918460018302840111640100000000831117156103b357600080fd5b5090925090506105d5565b005b6102b3610667565b61019b61066c565b6102d1610671565b6102d1610677565b6103e861067d565b604080519115158252519081900360200190f35b61019b6105aa565b6102d1610686565b6103be6004803603604081101561042257600080fd5b60ff823516919081019060408101602082013564010000000081111561044757600080fd5b82018360208201111561045957600080fd5b8035906020019184600183028401116401000000008311171561047b57600080fd5b50909250905061068c565b6102d1610703565b6102d1610709565b6102b361070f565b6102d1610714565b606481565b606033612000146104ed5760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b6104f5611382565b600061053685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061071a92505050565b91509150806105525761054960646107e0565b92505050610593565b600061055d8361084a565b905063ffffffff811661058457505060408051600081526020810190915291506105939050565b61058d816107e0565b93505050505b9392505050565b606681565b600181565b61100181565b600081565b606081565b600881565b61200081565b61100581565b600281565b61100881565b600b81565b33612000146106155760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b6040805162461bcd60e51b815260206004820152601e60248201527f7265636569766520756e65787065637465642061636b207061636b6167650000604482015290519081900360640190fd5b505050565b600981565b606581565b61100781565b61100681565b60005460ff1681565b61100281565b33612000146106cc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b60405162461bcd60e51b81526004018080602001828103825260238152602001806114166023913960400191505060405180910390fd5b61100381565b61100081565b600381565b61100481565b610722611382565b600061072c611382565b6107346113ac565b61074561074086610beb565b610c10565b90506000805b61075483610c5a565b156107d357806107765761076f61076a84610c7b565b610cc9565b84526107cb565b80600114156107955761078b61076a84610c7b565b60208501526107cb565b80600214156107c6576107af6107aa84610c7b565b610d42565b6001600160a01b03166040850152600191506107cb565b6107d3565b60010161074b565b5091935090915050915091565b604080516001808252818301909252606091829190816020015b60608152602001906001900390816107fa5790505090506108208363ffffffff16610d62565b8160008151811061082d57fe5b602002602001018190525061084181610d75565b9150505b919050565b60006108598260400151610dff565b6108c557604080516020808252601c908201527f74686520746172676574206973206e6f74206120636f6e7472616374000000008183015290517f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb29181900360600190a1506065610845565b81604001516001600160a01b031663ac431751836000015184602001516040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561093257818101518382015260200161091a565b50505050905090810190601f16801561095f5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561099257818101518382015260200161097a565b50505050905090810190601f1680156109bf5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156109e057600080fd5b505af19250505080156109f1575060015b610be3576040516000815260443d1015610a0d57506000610aaa565b60046000803e60005160e01c6308c379a08114610a2e576000915050610aaa565b60043d036004833e81513d602482011167ffffffffffffffff82111715610a5a57600092505050610aaa565b808301805167ffffffffffffffff811115610a7c576000945050505050610aaa565b8060208301013d8601811115610a9a57600095505050505050610aaa565b601f01601f191660405250925050505b80610ab55750610b58565b7f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b14578181015183820152602001610afc565b50505050905090810190601f168015610b415780820380516001836020036101000a031916815260200191505b509250505060405180910390a16066915050610845565b3d808015610b82576040519150601f19603f3d011682016040523d82523d6000602084013e610b87565b606091505b5060408051602080825283518183015283517f1279f84165b4fd69c35e1f338ff107231b036c655cd1688851e011ce617c4e8d938593928392918301919085019080838360008315610b14578181015183820152602001610afc565b506000919050565b610bf36113cc565b506040805180820190915281518152602082810190820152919050565b610c186113ac565b610c2182610e05565b610c2a57600080fd5b6000610c398360200151610e3f565b60208085015160408051808201909152868152920190820152915050919050565b6000610c646113cc565b505080518051602091820151919092015191011190565b610c836113cc565b610c8c82610c5a565b610c9557600080fd5b60208201516000610ca582610ea2565b80830160209586015260408051808201909152908152938401919091525090919050565b8051606090610cd757600080fd5b6000610ce68360200151610e3f565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015610d1d576020820181803683370190505b5090506000816020019050610d39848760200151018285610fd5565b50949350505050565b8051600090601514610d5357600080fd5b610d5c82611020565b92915050565b6060610d5c610d70836110d5565b6111bb565b6060815160001415610d965750604080516000815260208101909152610845565b606082600081518110610da557fe5b602002602001015190506000600190505b8351811015610de657610ddc82858381518110610dcf57fe5b602002602001015161120d565b9150600101610db6565b50610841610df9825160c060ff1661128a565b8261120d565b3b151590565b8051600090610e1657506000610845565b6020820151805160001a9060c0821015610e3557600092505050610845565b5060019392505050565b8051600090811a6080811015610e59576000915050610845565b60b8811080610e74575060c08110801590610e74575060f881105b15610e83576001915050610845565b60c0811015610e975760b519019050610845565b60f519019050610845565b80516000908190811a6080811015610ebd5760019150610fce565b60b8811015610ed257607e1981019150610fce565b60c0811015610f4c57600060b78203600186019550806020036101000a865104915060018101820193505080831015610f46576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50610fce565b60f8811015610f615760be1981019150610fce565b600060f78203600186019550806020036101000a865104915060018101820193505080831015610fcc576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b80610fdf57610662565b5b60208110610fff578251825260209283019290910190601f1901610fe0565b915181516020939093036101000a6000190180199091169216919091179052565b80516000901580159061103557508151602110155b61103e57600080fd5b600061104d8360200151610e3f565b905080836000015110156110a8576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015610d3957506020919091036101000a90049392505050565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166111195750601861113d565b6fffffffffffffffffffffffffffffffff1984166111395750601061113d565b5060005b60208110156111735781818151811061115257fe5b01602001516001600160f81b0319161561116b57611173565b60010161113d565b60008160200390506060816040519080825280601f01601f1916602001820160405280156111a8576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156111ed5750607f60f81b826000815181106111db57fe5b01602001516001600160f81b03191611155b156111f9575080610845565b610d5c61120b8351608060ff1661128a565b835b6060806040519050835180825260208201818101602087015b8183101561123e578051835260209283019201611226565b50855184518101855292509050808201602086015b8183101561126b578051835260209283019201611253565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106112da576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116113345782840160f81b8160008151811061131657fe5b60200101906001600160f81b031916908160001a9053509050610d5c565b606061133f856110d5565b90508381510160370160f81b8260008151811061135857fe5b60200101906001600160f81b031916908160001a905350611379828261120d565b95945050505050565b6040518060600160405280606081526020016060815260200160006001600160a01b031681525090565b60405180604001604052806113bf6113cc565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163747265636569766520756e6578706563746564206661696c2061636b207061636b616765a2646970667358221220ea2b2b402a564a222b3f3e7c0f671622652543c9c5f6cb6c7b8db265ae9ebe4564736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "6080604052600436106102465760003560e01c806375d47a0a11610139578063ab51bb96116100b6578063dc6f5e901161007a578063dc6f5e90146108df578063dc927faf14610975578063f9a2bbc71461098a578063fc3e5908146108df578063fd6a68791461099f578063fe3a2af5146104fd57610246565b8063ab51bb96146108b5578063c81b1662146108ca578063c8509d81146107c5578063c8e704a4146108df578063d117a110146108f457610246565b806395b9ad26116100fd57806395b9ad261461084c57806396713da9146108615780639dc0926214610876578063a1a11bf51461088b578063a78abc16146108a057610246565b806375d47a0a146106e757806377d9dae8146106fc5780637942fd05146107b05780637d078e13146103c8578063831d65d1146107c557610246565b80634a688818116101c75780635f558f861161018b5780635f558f86146105515780636b3f1307146105665780636e47b4821461062e57806370fd5bad1461055157806372c4e0861461064357610246565b80634a688818146104fd5780634bc81c00146105125780634bf6c8821461024b57806351e80672146105275780635d499b1b1461053c57610246565b806323996b531161020e57806323996b53146103c85780633dffc387146103c857806343756e5c146103dd578063445fcefe1461040e578063493279b1146104d157610246565b8063077b8f351461024b5780630bee7a67146102765780630f212b1b146102a45780631182b875146102b95780631f91600b146103b3575b600080fd5b34801561025757600080fd5b506102606109b4565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b5061028b6109b9565b6040805163ffffffff9092168252519081900360200190f35b3480156102b057600080fd5b506102606109be565b3480156102c557600080fd5b5061033e600480360360408110156102dc57600080fd5b60ff8235169190810190604081016020820135600160201b81111561030057600080fd5b82018360208201111561031257600080fd5b803590602001918460018302840111600160201b8311171561033357600080fd5b5090925090506109c3565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b50610260610a4c565b3480156103d457600080fd5b50610260610a51565b3480156103e957600080fd5b506103f2610a56565b604080516001600160a01b039092168252519081900360200190f35b34801561041a57600080fd5b506104bf6004803603602081101561043157600080fd5b810190602081018135600160201b81111561044b57600080fd5b82018360208201111561045d57600080fd5b803590602001918460018302840111600160201b8311171561047e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a5c945050505050565b60408051918252519081900360200190f35b3480156104dd57600080fd5b506104e6610bbb565b6040805161ffff9092168252519081900360200190f35b34801561050957600080fd5b50610260610bc0565b34801561051e57600080fd5b50610260610bc5565b34801561053357600080fd5b506103f2610bca565b34801561054857600080fd5b506104bf610bd0565b34801561055d57600080fd5b50610260610bd9565b61061a6004803603604081101561057c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105a657600080fd5b8201836020820111156105b857600080fd5b803590602001918460018302840111600160201b831117156105d957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bde945050505050565b604080519115158252519081900360200190f35b34801561063a57600080fd5b506103f2611460565b61061a6004803603602081101561065957600080fd5b810190602081018135600160201b81111561067357600080fd5b82018360208201111561068557600080fd5b803590602001918460018302840111600160201b831117156106a657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611466945050505050565b3480156106f357600080fd5b506103f26118b4565b61061a6004803603604081101561071257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561073c57600080fd5b82018360208201111561074e57600080fd5b803590602001918460018302840111600160201b8311171561076f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118ba945050505050565b3480156107bc57600080fd5b50610260611dc1565b3480156107d157600080fd5b5061084a600480360360408110156107e857600080fd5b60ff8235169190810190604081016020820135600160201b81111561080c57600080fd5b82018360208201111561081e57600080fd5b803590602001918460018302840111600160201b8311171561083f57600080fd5b509092509050611dc6565b005b34801561085857600080fd5b50610260611e79565b34801561086d57600080fd5b50610260611e7e565b34801561088257600080fd5b506103f2611e83565b34801561089757600080fd5b506103f2611e89565b3480156108ac57600080fd5b5061061a611e8f565b3480156108c157600080fd5b5061028b610bc0565b3480156108d657600080fd5b506103f2611e98565b3480156108eb57600080fd5b50610260611e9e565b34801561090057600080fd5b5061091e6004803603602081101561091757600080fd5b5035611ea3565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a083015267ffffffffffffffff90921660c082015290519081900360e00190f35b34801561098157600080fd5b506103f2611efb565b34801561099657600080fd5b506103f2611f01565b3480156109ab57600080fd5b506103f2611f07565b600881565b606481565b600681565b60603361200014610a055760405162461bcd60e51b815260040180806020018281038252602f8152602001806132a0602f913960400191505060405180910390fd5b610a4483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f0d92505050565b949350505050565b600481565b600181565b61100181565b6020810151600090610a6c613168565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a082015261010090910467ffffffffffffffff1660c082015290610af457600092505050610bb6565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610b5257600080fd5b505afa158015610b66573d6000803e3d6000fd5b505050506040513d6020811015610b7c57600080fd5b505160808301516060840151919250600091610b9d9163ffffffff61219e16565b9050610baf818363ffffffff61219e16565b9450505050505b919050565b606081565b600081565b600581565b61200081565b6402540be40081565b600281565b600080610bea836121e7565b9050610bf4613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152610cba576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b6000610cd78260800151836060015161219e90919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b031614610d2d5760405162461bcd60e51b815260040180806020018281038252604581526020018061322d6045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50516001600160a01b031614610de15760405162461bcd60e51b815260040180806020018281038252602e815260200180613272602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b158015610e2d57600080fd5b505afa158015610e41573d6000803e3d6000fd5b505050506040513d6020811015610e5757600080fd5b505160408051636eb1769f60e11b815233600482015230602482015290519192508391610ee89184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50519063ffffffff6121ee16565b1015610f3b576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7d57600080fd5b505afa158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b50519050808210801590610fc057506402540be4008206155b610ffb5760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b6000611007868b612248565b905063ffffffff8116611206576001600160a01b038a166323b872dd33611004611037898963ffffffff61219e16565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561109f57600080fd5b505af11580156110b3573d6000803e3d6000fd5b505050506040513d60208110156110c957600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b15801561113257600080fd5b505af1158015611146573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156111c55781810151838201526020016111ad565b50505050905090810190601f1680156111f25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26112be565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561128257818101518382015260200161126a565b50505050905090810190601f1680156112af5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556113186131a4565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611360573d6000803e3d6000fd5b5061200063f7a251d760016113748461269f565b611389886402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156113e75781810151838201526020016113cf565b50505050905090810190601f1680156114145780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561143557600080fd5b505af1158015611449573d6000803e3d6000fd5b505050506001985050505050505050505b92915050565b61100581565b600080611472836121e7565b905061147c613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152611542576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c0015167ffffffffffffffff16106115a4576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e657600080fd5b505afa1580156115fa573d6000803e3d6000fd5b505050506040513d602081101561161057600080fd5b5051905080821080159061162957506402540be4008206155b6116645760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556116be6131a4565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f19350505050158015611701573d6000803e3d6000fd5b5061200063f7a251d760016117158461269f565b61172a876402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611788578181015183820152602001611770565b50505050905090810190601f1680156117b55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156117d657600080fd5b505af11580156117ea573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561186c578181015183820152602001611854565b50505050905090810190601f1680156118995780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806118c6836121e7565b90506118d0613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152611996576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146119ea5760405162461bcd60e51b815260040180806020018281038252604581526020018061322d6045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d6020811015611a5757600080fd5b50516001600160a01b031614611ab4576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703265206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611af657600080fd5b505afa158015611b0a573d6000803e3d6000fd5b505050506040513d6020811015611b2057600080fd5b50519050808210801590611b3957506402540be4008206155b611b745760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611bce6131a4565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f19350505050158015611c11573d6000803e3d6000fd5b5061200063f7a251d76001611c258461269f565b611c3a876402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611c98578181015183820152602001611c80565b50505050905090810190601f168015611cc55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611ce657600080fd5b505af1158015611cfa573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611d78578181015183820152602001611d60565b50505050905090810190601f168015611da55780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b3361200014611e065760405162461bcd60e51b815260040180806020018281038252602f8152602001806132a0602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b600781565b600981565b61100781565b61100681565b60005460ff1681565b61100281565b600381565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b0390931693919291811690610100900467ffffffffffffffff1687565b61100381565b61100081565b61100481565b6060611f17613168565b6000611f228461276b565b9150915080611f78576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff1661202c576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff00191661010067ffffffffffffffff90921691909102179055612183565b815160ff16600114156121365760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561208557600080fd5b505afa158015612099573d6000803e3d6000fd5b505050506040513d60208110156120af57600080fd5b505190506001600160a01b038116156121305760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561211757600080fd5b505af115801561212b573d6000803e3d6000fd5b505050505b50612183565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b60006121e083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128bd565b9392505050565b6020015190565b6000828201838110156121e0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561228457600080fd5b505afa158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b5051604080516395d89b4160e01b815290519192506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b1580156122f657600080fd5b505afa15801561230a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561233357600080fd5b8101908080516040519392919084600160201b82111561235257600080fd5b90830190602082018581111561236757600080fd5b8251600160201b81118282018810171561238057600080fd5b82525081516020918201929091019080838360005b838110156123ad578181015183820152602001612395565b50505050905090810190601f1680156123da5780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b15801561242a57600080fd5b505afa15801561243e573d6000803e3d6000fd5b505050506040513d602081101561245457600080fd5b5051608087015160608801519192506000916124759163ffffffff61219e16565b9050428760c0015167ffffffffffffffff16101561249b57506001935061145a92505050565b6124a9838860200151612954565b6124bb57506002935061145a92505050565b808211156124d157506003935061145a92505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561251357600080fd5b505afa158015612527573d6000803e3d6000fd5b505050506040513d602081101561253d57600080fd5b50511461255257506004935061145a92505050565b8660a0015160ff16841461256e57506005935061145a92505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b1580156125b357600080fd5b505afa1580156125c7573d6000803e3d6000fd5b505050506040513d60208110156125dd57600080fd5b50516001600160a01b031614158061267f57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561265057600080fd5b505afa158015612664573d6000803e3d6000fd5b505050506040513d602081101561267a57600080fd5b505114155b1561269257506006935061145a92505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b60608152602001906001900390816126b857505083519091506126e09063ffffffff16612a3c565b816000815181106126ed57fe5b6020026020010181905250612708836020015160001c612a3c565b8160018151811061271557fe5b60200260200101819052506121e081612a4f565b60006121e083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ad9565b612773613168565b600061277d613168565b6127856131bb565b61279661279186612b3e565b612b63565b90506000805b6127a583612bad565b156128b057806127ca576127c06127bb84612bce565b612c1c565b60ff1684526128a8565b80600114156127e9576127df6127bb84612bce565b60208501526128a8565b8060021415612816576128036127fe84612bce565b612cd1565b6001600160a01b031660408501526128a8565b80600314156128355761282b6127bb84612bce565b60608501526128a8565b80600414156128545761284a6127bb84612bce565b60808501526128a8565b8060051415612876576128696127bb84612bce565b60ff1660a08501526128a8565b80600614156128a35761288b6127bb84612bce565b67ffffffffffffffff1660c0850152600191506128a8565b6128b0565b60010161279c565b5091935090915050915091565b6000818484111561294c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129115781810151838201526020016128f9565b50505050905090810190601f16801561293e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b815160009083906008108061296a575080516003115b1561297957600091505061145a565b604080516020808252818301909252606091602082018180368337019050509050836020820152808251815181106129ad57fe5b6020910101516001600160f81b031916602d60f81b146129d25760009250505061145a565b600160005b8351811015612a32578281815181106129ec57fe5b602001015160f81c60f81b6001600160f81b031916848281518110612a0d57fe5b01602001516001600160f81b03191614612a2a5760009150612a32565b6001016129d7565b5095945050505050565b606061145a612a4a83612ceb565b612dd1565b6060815160001415612a705750604080516000815260208101909152610bb6565b606082600081518110612a7f57fe5b602002602001015190506000600190505b8351811015612ac057612ab682858381518110612aa957fe5b6020026020010151612e23565b9150600101612a90565b506121e0612ad3825160c060ff16612ea0565b82612e23565b60008183612b285760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129115781810151838201526020016128f9565b506000838581612b3457fe5b0495945050505050565b612b466131db565b506040805180820190915281518152602082810190820152919050565b612b6b6131bb565b612b7482612f98565b612b7d57600080fd5b6000612b8c8360200151612fd2565b60208085015160408051808201909152868152920190820152915050919050565b6000612bb76131db565b505080518051602091820151919092015191011190565b612bd66131db565b612bdf82612bad565b612be857600080fd5b60208201516000612bf882613035565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612c3157508151602110155b612c3a57600080fd5b6000612c498360200151612fd2565b90508083600001511015612ca4576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b82516020808501518301805192849003929183101561219557506020919091036101000a90049392505050565b8051600090601514612ce257600080fd5b61145a82612c1c565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416612d2f57506018612d53565b6fffffffffffffffffffffffffffffffff198416612d4f57506010612d53565b5060005b6020811015612d8957818181518110612d6857fe5b01602001516001600160f81b03191615612d8157612d89565b600101612d53565b60008160200390506060816040519080825280601f01601f191660200182016040528015612dbe576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015612e035750607f60f81b82600081518110612df157fe5b01602001516001600160f81b03191611155b15612e0f575080610bb6565b61145a612e218351608060ff16612ea0565b835b6060806040519050835180825260208201818101602087015b81831015612e54578051835260209283019201612e3c565b50855184518101855292509050808201602086015b81831015612e81578051835260209283019201612e69565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310612ef0576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411612f4a5782840160f81b81600081518110612f2c57fe5b60200101906001600160f81b031916908160001a905350905061145a565b6060612f5585612ceb565b90508381510160370160f81b82600081518110612f6e57fe5b60200101906001600160f81b031916908160001a905350612f8f8282612e23565b95945050505050565b8051600090612fa957506000610bb6565b6020820151805160001a9060c0821015612fc857600092505050610bb6565b5060019392505050565b8051600090811a6080811015612fec576000915050610bb6565b60b8811080613007575060c08110801590613007575060f881105b15613016576001915050610bb6565b60c081101561302a5760b519019050610bb6565b60f519019050610bb6565b80516000908190811a60808110156130505760019150613161565b60b881101561306557607e1981019150613161565b60c08110156130df57600060b78203600186019550806020036101000a8651049150600181018201935050808310156130d9576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50613161565b60f88110156130f45760be1981019150613161565b600060f78203600186019550806020036101000a86510491506001810182019350508083101561315f576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b60405180604001604052806131ce6131db565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe72656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e6420726571756573746f6e6c79206265703265206f776e65722063616e20617070726f766520746869732062696e642072657175657374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374a2646970667358221220f5905eb90e4a072fe66973705300bc7792e1c43c73c571a09629b9153e6b871864736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(CrossChainContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/f4bc161dac5937b8cbd4fe3089c7514c415430f9", + Code: "608060405234801561001057600080fd5b50600436106102485760003560e01c8063863fe4ab1161013b578063c81b1662116100b8578063e3b048051161007c578063e3b048051461072c578063f7a251d71461074c578063f9a2bbc7146107c4578063fc3e5908146107cc578063fd6a6879146107d457610248565b8063c81b1662146106dd578063d31f968d146106e5578063d76a867514610714578063dc927faf1461071c578063e1c7392a1461072457610248565b8063a78abc16116100ff578063a78abc16146105d3578063ab51bb96146105db578063ac431751146105e3578063b0355f5b146103ff578063c27cdcfb146106a157610248565b8063863fe4ab146105b35780638cc8f561146104b657806396713da9146105bb5780639dc09262146105c3578063a1a11bf5146105cb57610248565b8063493279b1116101c957806370fd5bad1161018d57806370fd5bad146104b657806374f079b8146104be57806375d47a0a146104c65780637942fd05146104ce57806384013b6a146104d657610248565b8063493279b11461045f5780634bf6c8821461047e57806351e80672146104865780636e47a51a1461048e5780636e47b482146104ae57610248565b8063308325f411610210578063308325f4146102cf5780633bdc47a6146102d75780633dffc387146103ff578063422f90501461040757806343756e5c1461043b57610248565b806305e682581461024d5780630bee7a671461026b57806314b3023b1461028c57806322556cdc146102a65780632ff32aea146102ae575b600080fd5b6102556107dc565b6040805160ff9092168252519081900360200190f35b6102736107e1565b6040805163ffffffff9092168252519081900360200190f35b6102946107e6565b60408051918252519081900360200190f35b6102946107ec565b6102b66107f1565b60408051600792830b90920b8252519081900360200190f35b6102946107fa565b61038a600480360360608110156102ed57600080fd5b60ff82351691602081013591810190606081016040820135600160201b81111561031657600080fd5b82018360208201111561032857600080fd5b803590602001918460018302840111600160201b8311171561034957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610800945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103c45781810151838201526020016103ac565b50505050905090810190601f1680156103f15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610255610876565b6104276004803603602081101561041d57600080fd5b503560ff1661087b565b604080519115158252519081900360200190f35b610443610890565b604080516001600160a01b039092168252519081900360200190f35b610467610896565b6040805161ffff9092168252519081900360200190f35b61025561089b565b6104436108a0565b610443600480360360208110156104a457600080fd5b503560ff166108a6565b6104436108c1565b6102556108c7565b6102946108cc565b6104436108d2565b6102556108d8565b6105b1600480360360a08110156104ec57600080fd5b810190602081018135600160201b81111561050657600080fd5b82018360208201111561051857600080fd5b803590602001918460018302840111600160201b8311171561053957600080fd5b919390929091602081019035600160201b81111561055657600080fd5b82018360208201111561056857600080fd5b803590602001918460018302840111600160201b8311171561058957600080fd5b919350915080356001600160401b03908116916020810135909116906040013560ff166108dd565b005b610294611a8d565b610255611a95565b610443611a9a565b610443611aa0565b610427611aa6565b6102736107dc565b6105b1600480360360408110156105f957600080fd5b810190602081018135600160201b81111561061357600080fd5b82018360208201111561062557600080fd5b803590602001918460018302840111600160201b8311171561064657600080fd5b919390929091602081019035600160201b81111561066357600080fd5b82018360208201111561067557600080fd5b803590602001918460018302840111600160201b8311171561069657600080fd5b509092509050611aaf565b6106c1600480360360208110156106b757600080fd5b503560ff16612051565b604080516001600160401b039092168252519081900360200190f35b61044361206c565b610427600480360360408110156106fb57600080fd5b5080356001600160a01b0316906020013560ff16612072565b61038a612092565b6104436120b1565b6105b16120b7565b6106c16004803603602081101561074257600080fd5b503560ff1661246e565b6105b16004803603606081101561076257600080fd5b60ff8235169190810190604081016020820135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111600160201b831117156107b957600080fd5b919350915035612489565b6104436125da565b6102556125e0565b6104436125e5565b600081565b606481565b60015481565b603281565b60045460070b81565b60025481565b60606000825160210190506060816040519080825280601f01601f191660200182016040528015610838576020820181803683370190505b506021810186905260018101879052828152905060418101600061085b866125eb565b50905061086a818388516125f5565b50909695505050505050565b600181565b60096020526000908152604090205460ff1681565b61100181565b606081565b600881565b61200081565b6005602052600090815260409020546001600160a01b031681565b61100581565b600281565b60035481565b61100881565b600b81565b60005460ff16610930576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b15801561096f57600080fd5b505afa158015610983573d6000803e3d6000fd5b505050506040513d602081101561099957600080fd5b50516109ec576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b60ff8116600090815260086020526040902054829082906001600160401b039081169083168114610a5c576040805162461bcd60e51b815260206004820152601560248201527439b2b8bab2b731b2903737ba1034b71037b93232b960591b604482015290519081900360640190fd5b60ff8216600090815260086020908152604091829020805467ffffffffffffffff1916600185016001600160401b039081169190911790915582516337d7f9c160e21b81529089166004820152915188926110039263df5fe70492602480840193829003018186803b158015610ad157600080fd5b505afa158015610ae5573d6000803e3d6000fd5b505050506040513d6020811015610afb57600080fd5b5051610b385760405162461bcd60e51b8152600401808060200182810382526023815260200180612bcc6023913960400191505060405180910390fd5b60ff851660009081526005602052604090205485906001600160a01b0316610ba7576040805162461bcd60e51b815260206004820152601860248201527f6368616e6e656c206973206e6f7420737570706f727465640000000000000000604482015290519081900360640190fd5b60608c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905060608b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805163cba510a960e01b81526001600160401b038f1660048201529051939450610cce93611003935063cba510a992506024808301926020929190829003018186803b158015610c7757600080fd5b505afa158015610c8b573d6000803e3d6000fd5b505050506040513d6020811015610ca157600080fd5b505160408051808201909152600381526269626360e81b6020820152610cc78c8c612636565b858561267d565b610d16576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b60408051631bb5062960e31b81526001600160401b038c16600482015290516000916110039163dda8314891602480820192602092909190829003018186803b158015610d6257600080fd5b505afa158015610d76573d6000803e3d6000fd5b505050506040513d6020811015610d8c57600080fd5b5051905088600080806060610da08861277a565b935093509350935083610e61578460ff168f6001600160401b03167ff7b2e42d694eb1100184aae86d4245d9e46966100b1dc7e723275b98326854ac8a6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e1a578181015183820152602001610e02565b50505050905090810190601f168015610e475780820380516001836020036101000a031916815260200191505b509250505060405180910390a35050505050505050611a7f565b8460ff168f6001600160401b03167f36afdaf439a8f43fe72135135d804ae620b37a474f0943b5b85f6788312cad4085604051808260ff1660ff16815260200191505060405180910390a360ff83166113ea5760ff85166000818152600560209081526040808320548151631182b87560e01b815260048101958652602481019283528651604482015286516001600160a01b03909216958695631182b875958d958a9593949093606490910192918601918190849084905b83811015610f32578181015183820152602001610f1a565b50505050905090810190601f168015610f5f5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610f7f57600080fd5b505af192505050801561106357506040513d6000823e601f3d908101601f191682016040526020811015610fb257600080fd5b8101908080516040519392919084600160201b821115610fd157600080fd5b908301906020820185811115610fe657600080fd5b8251600160201b811182820188101715610fff57600080fd5b82525081516020918201929091019080838360005b8381101561102c578181015183820152602001611014565b50505050905090810190601f1680156110595780820380516001836020036101000a031916815260200191505b5060405250505060015b611375576040516000815260443d101561107f5750600061111a565b60046000803e60005160e01c6308c379a081146110a057600091505061111a565b60043d036004833e81513d60248201116001600160401b03821117156110cb5760009250505061111a565b80830180516001600160401b038111156110ec57600094505050505061111a565b8060208301013d860181111561110a5760009550505050505061111a565b601f01601f191660405250925050505b806111255750611237565b60ff871660009081526007602052604081205461115c916001600160401b039091169089906111579060029088610800565b61282a565b60ff8716600090815260076020908152604080832080546001600160401b038082166001011667ffffffffffffffff19909116179055805182815284518184015284516001600160a01b038716947ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf948794849390840192918601918190849084905b838110156111f75781810151838201526020016111df565b50505050905090810190601f1680156112245780820380516001836020036101000a031916815260200191505b509250505060405180910390a250611370565b3d808015611261576040519150601f19603f3d011682016040523d82523d6000602084013e611266565b606091505b5060ff8716600090815260076020526040812054611299916001600160401b039091169089906111579060029088610800565b60ff8716600090815260076020908152604080832080546001600160401b038082166001011667ffffffffffffffff19909116179055805182815284518184015284516001600160a01b038716947f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351948794849390840192918601918190849084905b8381101561133457818101518382015260200161131c565b50505050905090810190601f1680156113615780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b6113e4565b8051156113e25760ff87166000908152600760205260408120546113ae916001600160401b039091169089906111579060019086610800565b60ff8716600090815260076020526040902080546001600160401b038082166001011667ffffffffffffffff199091161790555b505b506119b8565b60ff83166001141561168e5760ff8516600081815260056020908152604080832054815163831d65d160e01b815260048101958652602481019283528651604482015286516001600160a01b0390921695869563831d65d1958d958a9593949093606490910192918601918190849084905b8381101561147457818101518382015260200161145c565b50505050905090810190601f1680156114a15780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156114c157600080fd5b505af19250505080156114d2575060015b6113e4576040516000815260443d10156114ee57506000611589565b60046000803e60005160e01c6308c379a0811461150f576000915050611589565b60043d036004833e81513d60248201116001600160401b038211171561153a57600092505050611589565b80830180516001600160401b0381111561155b576000945050505050611589565b8060208301013d860181111561157957600095505050505050611589565b601f01601f191660405250925050505b8061159457506115f9565b60408051602080825283518183015283516001600160a01b038616937ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf93869390928392830191850190808383600083156111f75781810151838201526020016111df565b3d808015611623576040519150601f19603f3d011682016040523d82523d6000602084013e611628565b606091505b5060408051602080825283518183015283516001600160a01b038616937f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351938693909283928301918501908083836000831561133457818101518382015260200161131c565b60ff8316600214156119b85760ff8516600081815260056020908152604080832054815163c8509d8160e01b815260048101958652602481019283528651604482015286516001600160a01b0390921695869563c8509d81958d958a9593949093606490910192918601918190849084905b83811015611718578181015183820152602001611700565b50505050905090810190601f1680156117455780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561176557600080fd5b505af1925050508015611776575060015b6119b6576040516000815260443d10156117925750600061182d565b60046000803e60005160e01c6308c379a081146117b357600091505061182d565b60043d036004833e81513d60248201116001600160401b03821117156117de5760009250505061182d565b80830180516001600160401b038111156117ff57600094505050505061182d565b8060208301013d860181111561181d5760009550505050505061182d565b601f01601f191660405250925050505b8061183857506118e1565b816001600160a01b03167ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf826040518080602001828103825283818151815260200191508051906020019080838360005b838110156118a1578181015183820152602001611889565b50505050905090810190601f1680156118ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2506119b6565b3d80801561190b576040519150601f19603f3d011682016040523d82523d6000602084013e611910565b606091505b50816001600160a01b03167f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561197a578181015183820152602001611962565b50505050905090810190601f1680156119a75780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b505b60ff80861660009081526009602052604090205461100591636f93d2e69189913391879116806119ea575060ff881615155b604080516001600160e01b031960e088901b1681526001600160a01b039586166004820152939094166024840152604483019190915215156064820152905160848083019260209291908290030181600087803b158015611a4a57600080fd5b505af1158015611a5e573d6000803e3d6000fd5b505050506040513d6020811015611a7457600080fd5b505050505050505050505b505050505050505050505050565b630100600081565b600981565b61100781565b61100681565b60005460ff1681565b3361100714611aef5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b22602e913960400191505060405180910390fd5b611b5884848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526012815271626174636853697a65466f724f7261636c6560701b602082015291506129809050565b15611bf357604080516020601f8401819004810282018101909252828152600091611b9b91858580838501838280828437600092019190915250612a6792505050565b90506127108111158015611bb05750600a8110155b611beb5760405162461bcd60e51b8152600401808060200182810382526032815260200180612b9a6032913960400191505060405180910390fd5b600155611fbf565b611c5c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601281527118591913dc955c19185d1950da185b9b995b60721b602082015291506129809050565b15611de457606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060169091149050611cdf5760405162461bcd60e51b815260040180806020018281038252605a815260200180612ac8605a913960600191505060405180910390fd5b60018101516002820151601683015160ff82161590611cfd81612a6c565b611d4e576040805162461bcd60e51b815260206004820152601960248201527f61646472657373206973206e6f74206120636f6e747261637400000000000000604482015290519081900360640190fd5b60ff8416600081815260056020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600683528184208585528352818420805460ff199081166001179091556009909352818420805490931687151517909255519092917f7e3b6af43092577ee20e60eaa1d9b114a7031305c895ee7dd3ffe17196d2e1e091a35050505050611fbf565b611e5184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526016815275195b98589b1953dc911a5cd8589b1950da185b9b995b60521b602082015291506129809050565b15611f8257606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060029091149050611ed45760405162461bcd60e51b815260040180806020018281038252604a815260200180612b50604a913960600191505060405180910390fd5b600181810151600283015160ff80831660009081526005602052604090205492939192908316909114906001600160a01b03168015611f78576001600160a01b038116600090815260066020908152604080832060ff881680855290835292819020805460ff1916861515908117909155815190815290517fa3132e3f9819fbddc7f0ed6d38d7feef59aa95112090b7c592f5cb5bc4aa4adc929181900390910190a25b5050505050611fbf565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b6008602052600090815260409020546001600160401b031681565b61100281565b600660209081526000928352604080842090915290825290205460ff1681565b6040518060400160405280600381526020016269626360e81b81525081565b61100381565b60005460ff161561210f576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b7f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b80546001600160a01b0319908116611008179091557f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36805460ff199081169091557fd8af288fc1c8680b4f4706064cf021e264efb6828fcaf7eb5ca36818eb365bcc8054821660019081179091557f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a805484166110049081179091557f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38054841690557f72e4efa1513b071517c6c74dba31b5934a81aa83cddd400e7081df5529c9943680548416831790557fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc08054851690911790557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e78054831690557f4e523af77f034e9810f1c94057f5e931fb3d16a51511a4c3add793617d18610580548316821790557ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e805484166110001790557fc7694af312c4f286114180fd0ba6a52461fcee8a381636770b19a343af92538a80548316821790557f01112dd68e482ba8d68a7e828cff8b3abcea08eab88941953c180a7e650e9cd480548316821790557fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe1805484166110071790557f87e8a52529e8ece4ef759037313542a6429ff494a9fab9027fb79db90124eba680548316821790557f4c7666bbcb22d46469f7cc282f70764a7012dca2cce630ff8d83db9a9cdd48f080548316821790557f40f28f99a40bc9f6beea1013afdbc3cdcc689eb76b82c4de06c0acf1e1932ed58054909316611001179092557f0d9cf2cd531699eed8dd34e40ff2884a14a698c4898184fba85194e6f6772d248054821683179055600b60009081527f23f68c9bd22b8a93d06adabe17481c87c016bcbd20adc8bfd707a4d813a572176020527fdf0d5d05428057f5455c2dc8e810dd86d1e9350faa72f16bda8a45443c5b39328054831684179055603283556004805467ffffffffffffffff19166001600160401b031790556002819055600381905580549091169091179055565b6007602052600090815260409020546001600160401b031681565b60005460ff166124dc576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b33600090815260066020908152604080832060ff80891685529252909120548591166125395760405162461bcd60e51b8152600401808060200182810382526031815260200180612a976031913960400191505060405180910390fd5b60ff85166000908152600760209081526040808320548151601f88018490048402810184019092528682526001600160401b03169261259e9284928a9261115792909189918c908c908190840183828082843760009201919091525061080092505050565b60ff959095166000908152600760205260409020805467ffffffffffffffff191660019096016001600160401b03169590951790945550505050565b61100081565b600381565b61100481565b8051602090910191565b5b60208110612615578251825260209283019290910190601f19016125f6565b915181516020939093036101000a6000190180199091169216919091179052565b60408051600e808252818301909252606091630100600060ff851617918391602082018180368337505050600e818101969096526006810192909252509283525090919050565b60008561268c57506000612771565b606082518451865160800101016040519080825280601f01601f1916602001820160405280156126c3576020820181803683370190505b50905060006126d182612a72565b6020808901518252019050866000806126e9896125eb565b80865260209095019490925090506127028285836125f5565b9283019261270f886125eb565b80865260209095019490925090506127288285836125f5565b9283018a81526020019261273b876125eb565b909250905061274b8285836125f5565b508351602001612759612a78565b60208183886065600019fa5051600114955050505050505b95945050505050565b600080600060606021855110156127aa575050604080516000808252602082019092529092508291508190612823565b600185015160218601518651604080516020198301808252601f19600119909401939093168101602001909152604189019392916060919080156127f5576020820181803683370190505b5090506000612803826125eb565b509050612815858260218d51036125f5565b506001975091955093509150505b9193509193565b600254431115612869576004805467ffffffffffffffff1981166001600160401b036001600793840b810190930b1617909155600355436002556128aa565b600380546001908101918290555410156128aa576004805467ffffffffffffffff1981166001600160401b036001600793840b810190930b16179091556003555b8160ff16836001600160401b0316600460009054906101000a900460070b6001600160401b03167f3a6e0fc61675aa2a100bcba0568368bb92bcec91c97673391074f11138f0cffe606085604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612940578181015183820152602001612928565b50505050905090810190601f16801561296d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050565b6000816040516020018082805190602001908083835b602083106129b55780518252601f199092019160209182019101612996565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310612a235780518252601f199092019160209182019101612a04565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b3b151590565b60200190565b6040518060200160405280600190602082028036833750919291505056fe74686520636f6e747261637420616e64206368616e6e656c2068617665206e6f74206265656e20726567697374657265646c656e677468206f662076616c756520666f72206164644f725570646174654368616e6e656c2073686f756c642062652032322c206368616e6e656c49643a697346726f6d53797374656d3a68616e646c657241646472657373746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f7220656e61626c654f7244697361626c654368616e6e656c2073686f756c6420626520322c206368616e6e656c49643a6973456e61626c65746865206e6577426174636853697a65466f724f7261636c652073686f756c6420626520696e205b31302c2031303030305d6c6967687420636c69656e74206e6f742073796e632074686520626c6f636b20796574a264697066735822122033c2492ac02e70488d9ed3adb95888d7f5998dff786cf03d72be0cde759a14d064736f6c63430006040033", + }, + }, + } + + ramanujanUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "ramanujan", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "60806040526004361061027d5760003560e01c80639dc092621161014f578063c8509d81116100c1578063eb57e2021161007a578063eb57e20214610940578063eda5868c14610973578063f340fa0114610988578063f9a2bbc7146109ae578063fc3e5908146109c3578063fd6a6879146109d85761027d565b8063c8509d8114610609578063d86222d5146108d7578063daacdb66146108ec578063dc927faf14610901578063e086c7b114610916578063e1c7392a1461092b5761027d565b8063ab51bb9611610113578063ab51bb961461074a578063ac4317511461075f578063ad3c9da61461082a578063b7ab4db51461085d578063bf9f49951461041b578063c81b1662146108c25761027d565b80639dc09262146106cd578063a1a11bf5146106e2578063a5422d5c146106f7578063a78abc161461070c578063aaf5eb68146107355761027d565b80635667515a116101f35780637942fd05116101ac5780637942fd05146105df57806381650b62146105f4578063831d65d114610609578063853230aa1461068e57806386249882146106a357806396713da9146106b85761027d565b80635667515a146105005780635d77156c146105155780636969a25c1461052a5780636e47b482146105a057806370fd5bad146105b557806375d47a0a146105ca5761027d565b80633dffc387116102455780633dffc3871461041b57806343756e5c14610446578063493279b1146104775780634bf6c882146104a357806351e80672146104b8578063565c56b3146104cd5761027d565b80630bee7a67146102825780631182b875146102b05780631ff18069146103aa578063219f22d5146103d157806335409f7f146103e6575b600080fd5b34801561028e57600080fd5b506102976109ed565b6040805163ffffffff9092168252519081900360200190f35b3480156102bc57600080fd5b50610335600480360360408110156102d357600080fd5b60ff8235169190810190604081016020820135600160201b8111156102f757600080fd5b82018360208201111561030957600080fd5b803590602001918460018302840111600160201b8311171561032a57600080fd5b5090925090506109f2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561036f578181015183820152602001610357565b50505050905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b657600080fd5b506103bf610bdf565b60408051918252519081900360200190f35b3480156103dd57600080fd5b50610297610be5565b3480156103f257600080fd5b506104196004803603602081101561040957600080fd5b50356001600160a01b0316610bea565b005b34801561042757600080fd5b50610430610efe565b6040805160ff9092168252519081900360200190f35b34801561045257600080fd5b5061045b610f03565b604080516001600160a01b039092168252519081900360200190f35b34801561048357600080fd5b5061048c610f09565b6040805161ffff9092168252519081900360200190f35b3480156104af57600080fd5b50610430610f0e565b3480156104c457600080fd5b5061045b610f13565b3480156104d957600080fd5b506103bf600480360360208110156104f057600080fd5b50356001600160a01b0316610f19565b34801561050c57600080fd5b50610430610f6b565b34801561052157600080fd5b50610297610f70565b34801561053657600080fd5b506105546004803603602081101561054d57600080fd5b5035610f75565b604080516001600160a01b039788168152958716602087015293909516848401526001600160401b0390911660608401521515608083015260a082019290925290519081900360c00190f35b3480156105ac57600080fd5b5061045b610fd9565b3480156105c157600080fd5b50610430610fdf565b3480156105d657600080fd5b5061045b610fe4565b3480156105eb57600080fd5b50610430610fea565b34801561060057600080fd5b50610297610fef565b34801561061557600080fd5b506104196004803603604081101561062c57600080fd5b60ff8235169190810190604081016020820135600160201b81111561065057600080fd5b82018360208201111561066257600080fd5b803590602001918460018302840111600160201b8311171561068357600080fd5b509092509050610ff4565b34801561069a57600080fd5b506103bf6110a7565b3480156106af57600080fd5b506103bf6110ad565b3480156106c457600080fd5b506104306110b3565b3480156106d957600080fd5b5061045b6110b8565b3480156106ee57600080fd5b5061045b6110be565b34801561070357600080fd5b506103356110c4565b34801561071857600080fd5b506107216110e3565b604080519115158252519081900360200190f35b34801561074157600080fd5b506103bf6110ec565b34801561075657600080fd5b50610297610f6b565b34801561076b57600080fd5b506104196004803603604081101561078257600080fd5b810190602081018135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460018302840111600160201b831117156107cf57600080fd5b919390929091602081019035600160201b8111156107ec57600080fd5b8201836020820111156107fe57600080fd5b803590602001918460018302840111600160201b8311171561081f57600080fd5b5090925090506110f5565b34801561083657600080fd5b506103bf6004803603602081101561084d57600080fd5b50356001600160a01b031661139c565b34801561086957600080fd5b506108726113ae565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108ae578181015183820152602001610896565b505050509050019250505060405180910390f35b3480156108ce57600080fd5b5061045b6114d4565b3480156108e357600080fd5b506103bf6114da565b3480156108f857600080fd5b506103bf6114e6565b34801561090d57600080fd5b5061045b6114ec565b34801561092257600080fd5b506103bf6114f2565b34801561093757600080fd5b506104196114f7565b34801561094c57600080fd5b506104196004803603602081101561096357600080fd5b50356001600160a01b03166116fa565b34801561097f57600080fd5b506102976118c9565b6104196004803603602081101561099e57600080fd5b50356001600160a01b03166118ce565b3480156109ba57600080fd5b5061045b611b04565b3480156109cf57600080fd5b50610430611b0a565b3480156109e457600080fd5b5061045b611b0f565b606481565b60005460609060ff16610a48576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b3361200014610a885760405162461bcd60e51b815260040180806020018281038252602f8152602001806140de602f913960400191505060405180910390fd5b610a90613d69565b6000610ad185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1592505050565b9150915080610aed57610ae46064611c6e565b92505050610bd8565b815160009060ff16610b0d57610b068360200151611ccf565b9050610ba4565b825160ff1660011415610ba057826020015151600114610b7a577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526025815260200180613e6c6025913960400191505060405180910390a1506067610b9b565b610b068360200151600081518110610b8e57fe5b6020026020010151612ad5565b610ba4565b5060655b63ffffffff8116610bc95750506040805160008152602081019091529150610bd89050565b610bd281611c6e565b93505050505b9392505050565b60035481565b606881565b3361100114610c2a5760405162461bcd60e51b815260040180806020018281038252602981526020018061413a6029913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205480610c4e5750610efb565b600181039050600060018281548110610c6357fe5b60009182526020909120600360049092020101546001549091506000190180610cb257600060018481548110610c9557fe5b906000526020600020906004020160030181905550505050610efb565b6040805183815290516001600160a01b038616917f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70919081900360200190a26001600160a01b038416600090815260046020526040812055600154600019018314610e3457600180546000198101908110610d2957fe5b906000526020600020906004020160018481548110610d4457fe5b6000918252602082208354600492830290910180546001600160a01b03199081166001600160a01b0393841617825560018087015481840180548416918616919091179055600280880180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b199094169390931790556003948501549401939093558254868401939192919087908110610e0957fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020555b6001805480610e3f57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b03191690556003018190559155818381610e9257fe5b0490508015610ef65760015460005b81811015610ef3578260018281548110610eb757fe5b9060005260206000209060040201600301540160018281548110610ed757fe5b6000918252602090912060036004909202010155600101610ea1565b50505b505050505b50565b600181565b61100181565b606081565b600881565b61200081565b6001600160a01b03811660009081526004602052604081205480610f41576000915050610f66565b600180820381548110610f5057fe5b9060005260206000209060040201600301549150505b919050565b600081565b606781565b60018181548110610f8257fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b61100881565b600b81565b606681565b33612000146110345760405162461bcd60e51b815260040180806020018281038252602f8152602001806140de602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6103e881565b60025481565b600981565b61100781565b61100681565b604051806101e001604052806101b78152602001613f066101b7913981565b60005460ff1681565b6402540be40081565b60005460ff16611148576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b33611007146111885760405162461bcd60e51b815260040180806020018281038252602e815260200180613e91602e913960400191505060405180910390fd5b6111f284848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b60208201529150612c4c9050565b156112cd57602081146112365760405162461bcd60e51b8152600401808060200182810382526026815260200180613ee06026913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161127491858580838501838280828437600092019190915250612d3492505050565b90506064811015801561128a5750620186a08111155b6112c55760405162461bcd60e51b8152600401808060200182810382526027815260200180613e456027913960400191505060405180910390fd5b60025561130a565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60046020526000908152604090205481565b6001546060906000805b828110156113ff57600181815481106113cd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166113f7576001909101905b6001016113b8565b5060608160405190808252806020026020018201604052801561142c578160200160208202803683370190505b50600092509050815b838110156114cc576001818154811061144a57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166114c4576001818154811061147a57fe5b600091825260209091206004909102015482516001600160a01b03909116908390859081106114a557fe5b6001600160a01b03909216602092830291909101909101526001909201915b600101611435565b509250505090565b61100281565b67016345785d8a000081565b60055481565b61100381565b602981565b60005460ff161561154f576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b611557613d69565b600061157d604051806101e001604052806101b78152602001613f066101b79139611b15565b91509150806115bd5760405162461bcd60e51b81526004018080602001828103825260218152602001806140bd6021913960400191505060405180910390fd5b60005b8260200151518110156116e2576001836020015182815181106115df57fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a0909301516003909301929092559186015180519185019391859081106116b557fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016115c0565b50506103e8600255506000805460ff19166001179055565b336110011461173a5760405162461bcd60e51b815260040180806020018281038252602981526020018061413a6029913960400191505060405180910390fd5b6001600160a01b0381166000908152600460205260409020548061175e5750610efb565b60018103905060006001828154811061177357fe5b906000526020600020906004020160030154905060006001838154811061179657fe5b906000526020600020906004020160030181905550600060018080549050039050836001600160a01b03167f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d836040518082815260200191505060405180910390a28061180557505050610efb565b600081838161181057fe5b0490508015610ef65760005b8481101561186e57816001828154811061183257fe5b906000526020600020906004020160030154016001828154811061185257fe5b600091825260209091206003600490920201015560010161181c565b50600180549085015b81811015610ef357826001828154811061188d57fe5b90600052602060002090600402016003015401600182815481106118ad57fe5b6000918252602090912060036004909202010155600101611877565b606581565b33411461190c5760405162461bcd60e51b815260040180806020018281038252602d81526020018061410d602d913960400191505060405180910390fd5b60005460ff1661195f576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b600034116119ac576040805162461bcd60e51b81526020600482015260156024820152746465706f7369742076616c7565206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205434908015611abf5760006001808303815481106119de57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615611a49576040805184815290516001600160a01b038616917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a2611ab9565b600354611a5c908463ffffffff612d3916565b6003908155810154611a74908463ffffffff612d3916565b60038201556040805184815290516001600160a01b038616917f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc055919081900360200190a25b50611aff565b6040805183815290516001600160a01b038516917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a25b505050565b61100081565b600381565b61100481565b611b1d613d69565b6000611b27613d69565b611b2f613d81565b611b40611b3b86612d93565b612db8565b90506000805b611b4f83612e02565b15611c605780611b7457611b6a611b6584612e23565b612e71565b60ff168452611c58565b8060011415611c53576060611b90611b8b85612e23565b612f28565b90508051604051908082528060200260200182016040528015611bcd57816020015b611bba613da1565b815260200190600190039081611bb25790505b50602086015260005b8151811015611c4857611be7613da1565b6000611c05848481518110611bf857fe5b6020026020010151612ff9565b9150915080611c2257876000995099505050505050505050611c69565b8188602001518481518110611c3357fe5b60209081029190910101525050600101611bd6565b506001925050611c58565b611c60565b600101611b46565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b6060815260200190600190039081611c88579050509050611cae8363ffffffff166130d6565b81600081518110611cbb57fe5b6020026020010181905250610bd8816130e9565b6000806060611cdd84613173565b9150915081611d8a577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611d45578181015183820152602001611d2d565b50505050905090810190601f168015611d725780820380516001836020036101000a031916815260200191505b509250505060405180910390a1606692505050610f66565b600080805b600154811015611e075767016345785d8a000060018281548110611daf57fe5b90600052602060002090600402016003015410611dd157600190920191611dff565b600060018281548110611de057fe5b9060005260206000209060040201600301541115611dff576001909101905b600101611d8f565b50606082604051908082528060200260200182016040528015611e34578160200160208202803683370190505b509050606083604051908082528060200260200182016040528015611e63578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015611e92578160200160208202803683370190505b509050606085604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5090506000606086604051908082528060200260200182016040528015611ef2578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015611f21578160200160208202803683370190505b509050600098506000975060608d905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6e57600080fd5b505afa158015611f82573d6000803e3d6000fd5b505050506040513d6020811015611f9857600080fd5b5051905067016345785d8a000081111561200d577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526021815260200180613ebf6021913960400191505060405180910390a160689d5050505050505050505050505050610f66565b60005b6001548110156122805767016345785d8a00006001828154811061203057fe5b906000526020600020906004020160030154106121b6576001818154811061205457fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b03168a8d8151811061208557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106120ba57fe5b906000526020600020906004020160030154816120d357fe5b06600183815481106120e157fe5b906000526020600020906004020160030154039050612109838261325590919063ffffffff16565b8a8e8151811061211557fe5b6020026020010181815250506001828154811061212e57fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316888e8151811061215f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081898e8151811061218c57fe5b60209081029190910101526121a7878263ffffffff612d3916565b6001909d019c96506122789050565b6000600182815481106121c557fe5b906000526020600020906004020160030154111561227857600181815481106121ea57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316858c8151811061221b57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001818154811061224857fe5b906000526020600020906004020160030154848c8151811061226657fe5b60209081029190910101526001909a01995b600101612010565b50600085156126be576110046001600160a01b0316636e056520878c8c8b60025442016040518663ffffffff1660e01b815260040180806020018060200180602001856001600160401b03166001600160401b03168152602001848103845288818151815260200191508051906020019060200280838360005b838110156123125781810151838201526020016122fa565b50505050905001848103835287818151815260200191508051906020019060200280838360005b83811015612351578181015183820152602001612339565b50505050905001848103825286818151815260200191508051906020019060200280838360005b83811015612390578181015183820152602001612378565b505050509050019750505050505050506020604051808303818588803b1580156123b957600080fd5b505af1935050505080156123df57506040513d60208110156123da57600080fd5b505160015b61261a576040516000815260443d10156123fb57506000612496565b60046000803e60005160e01c6308c379a0811461241c576000915050612496565b60043d036004833e81513d60248201116001600160401b038211171561244757600092505050612496565b80830180516001600160401b03811115612468576000945050505050612496565b8060208301013d860181111561248657600095505050505050612496565b601f01601f191660405250925050505b806124a15750612545565b60019150867fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280826040518080602001828103825283818151815260200191508051906020019080838360005b838110156125055781810151838201526020016124ed565b50505050905090810190601f1680156125325780820380516001836020036101000a031916815260200191505b509250505060405180910390a250612615565b3d80801561256f576040519150601f19603f3d011682016040523d82523d6000602084013e612574565b606091505b5060019150867fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a45826040518080602001828103825283818151815260200191508051906020019080838360005b838110156125d95781810151838201526020016125c1565b50505050905090810190601f1680156126065780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b6126be565b8015612658576040805188815290517fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b709181900360200190a16126bc565b604080516020808252601b908201527f6261746368207472616e736665722072657475726e2066616c7365000000000081830152905188917fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280919081900360600190a25b505b80156128745760005b88518110156128725760008982815181106126de57fe5b602002602001015190506000600182815481106126f757fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc918590811061272857fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f19350505050905080156127e4576001828154811061276957fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d91859081106127b857fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a2612868565b600182815481106127f157fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d918590811061284057fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a25b50506001016126c7565b505b8451156129be5760005b85518110156129bc57600086828151811061289557fe5b60200260200101516001600160a01b03166108fc8784815181106128b557fe5b60200260200101519081150290604051600060405180830381858888f193505050509050801561294b578682815181106128eb57fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d87848151811061292957fe5b60200260200101516040518082815260200191505060405180910390a26129b3565b86828151811061295757fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d87848151811061299557fe5b60200260200101516040518082815260200191505060405180910390a25b5060010161287e565b505b4715612a27576040805147815290517f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d9181900360200190a1604051611002904780156108fc02916000818181858888f19350505050158015612a25573d6000803e3d6000fd5b505b60006003819055600555825115612a4157612a4183613297565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a7e57600080fd5b505af1158015612a92573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a15060009f9e505050505050505050505050505050565b80516001600160a01b0316600090815260046020526040812054801580612b265750600180820381548110612b0657fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b15612b6c5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000915050610f66565b600154600554600019820111801590612bc25784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a260009350505050610f66565b600580546001908101909155805481906000198601908110612be057fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000816040516020018082805190602001908083835b60208310612c815780518252601f199092019160209182019101612c62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310612cef5780518252601f199092019160209182019101612cd0565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b015190565b600082820183811015610bd8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b612d9b613dd6565b506040805180820190915281518152602082810190820152919050565b612dc0613d81565b612dc98261375e565b612dd257600080fd5b6000612de18360200151613798565b60208085015160408051808201909152868152920190820152915050919050565b6000612e0c613dd6565b505080518051602091820151919092015191011190565b612e2b613dd6565b612e3482612e02565b612e3d57600080fd5b60208201516000612e4d826137fb565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612e8657508151602110155b612e8f57600080fd5b6000612e9e8360200151613798565b90508083600001511015612ef9576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015612f1f57826020036101000a820491505b50949350505050565b6060612f338261375e565b612f3c57600080fd5b6000612f478361392e565b9050606081604051908082528060200260200182016040528015612f8557816020015b612f72613dd6565b815260200190600190039081612f6a5790505b5090506000612f978560200151613798565b60208601510190506000805b84811015612fee57612fb4836137fb565b9150604051806040016040528083815260200184815250848281518110612fd757fe5b602090810291909101015291810191600101612fa3565b509195945050505050565b613001613da1565b600061300b613da1565b613013613d81565b61301c85612db8565b90506000805b61302b83612e02565b15611c6057806130565761304661304184612e23565b61398a565b6001600160a01b031684526130ce565b806001141561307e5761306b61304184612e23565b6001600160a01b031660208501526130ce565b80600214156130a65761309361304184612e23565b6001600160a01b031660408501526130ce565b8060031415611c53576130bb611b6584612e23565b6001600160401b03166060850152600191505b600101613022565b6060612d2e6130e4836139a4565b613a8a565b606081516000141561310a5750604080516000815260208101909152610f66565b60608260008151811061311957fe5b602002602001015190506000600190505b835181101561315a576131508285838151811061314357fe5b6020026020010151613adc565b915060010161312a565b50610bd861316d825160c060ff16613b59565b82613adc565b600060606029835111156131a5576000604051806060016040528060298152602001613df16029913991509150611c69565b60005b835181101561323b5760005b81811015613232578481815181106131c857fe5b6020026020010151600001516001600160a01b03168583815181106131e957fe5b6020026020010151600001516001600160a01b0316141561322a5760006040518060600160405280602b8152602001613e1a602b9139935093505050611c69565b6001016131b4565b506001016131a8565b505060408051602081019091526000815260019150915091565b6000610bd883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c51565b600154815160005b828110156133b45760016132b1613da1565b600183815481106132be57fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156133885786818151811061334e57fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156133805760009250613388565b60010161333a565b5081156133aa5780516001600160a01b03166000908152600460205260408120555b505060010161329f565b508082111561342957805b828110156134275760018054806133d257fe5b60008281526020812060046000199093019283020180546001600160a01b03199081168255600182810180549092169091556002820180546001600160e81b03191690556003909101919091559155016133bf565b505b6000818310613438578161343a565b825b905060005b81811015613634576134ec85828151811061345657fe5b60200260200101516001838154811061346b57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152613ce8565b61360757806001016004600087848151811061350457fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555084818151811061354057fe5b60200260200101516001828154811061355557fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015561362c565b60006001828154811061361657fe5b9060005260206000209060040201600301819055505b60010161343f565b508282111561375857825b82811015610ef657600185828151811061365557fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782559585015181840180549184169188169190911790556040850151600282018054606088015160808901511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590971692909a169190911792909216939093171695909517905560a0909201516003909301929092558751908401929088908590811061372b57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205560010161363f565b50505050565b805160009061376f57506000610f66565b6020820151805160001a9060c082101561378e57600092505050610f66565b5060019392505050565b8051600090811a60808110156137b2576000915050610f66565b60b88110806137cd575060c081108015906137cd575060f881105b156137dc576001915050610f66565b60c08110156137f05760b519019050610f66565b60f519019050610f66565b80516000908190811a60808110156138165760019150613927565b60b881101561382b57607e1981019150613927565b60c08110156138a557600060b78203600186019550806020036101000a86510491506001810182019350508083101561389f576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50613927565b60f88110156138ba5760be1981019150613927565b600060f78203600186019550806020036101000a865104915060018101820193505080831015613925576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061393f57506000610f66565b600080905060006139538460200151613798565b602085015185519181019250015b8082101561398157613972826137fb565b60019093019290910190613961565b50909392505050565b805160009060151461399b57600080fd5b612d2e82612e71565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166139e857506018613a0c565b6fffffffffffffffffffffffffffffffff198416613a0857506010613a0c565b5060005b6020811015613a4257818181518110613a2157fe5b01602001516001600160f81b03191615613a3a57613a42565b600101613a0c565b60008160200390506060816040519080825280601f01601f191660200182016040528015613a77576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613abc5750607f60f81b82600081518110613aaa57fe5b01602001516001600160f81b03191611155b15613ac8575080610f66565b612d2e613ada8351608060ff16613b59565b835b6060806040519050835180825260208201818101602087015b81831015613b0d578051835260209283019201613af5565b50855184518101855292509050808201602086015b81831015613b3a578051835260209283019201613b22565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613ba9576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613c035782840160f81b81600081518110613be557fe5b60200101906001600160f81b031916908160001a9053509050612d2e565b6060613c0e856139a4565b90508381510160370160f81b82600081518110613c2757fe5b60200101906001600160f81b031916908160001a905350613c488282613adc565b95945050505050565b60008184841115613ce05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ca5578181015183820152602001613c8d565b50505050905090810190601f168015613cd25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b805182516000916001600160a01b039182169116148015613d22575081602001516001600160a01b031683602001516001600160a01b0316145b8015613d47575081604001516001600160a01b031683604001516001600160a01b0316145b8015610bd85750506060908101519101516001600160401b0390811691161490565b60408051808201909152600081526060602082015290565b6040518060400160405280613d94613dd6565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60405180604001604052806000815260200160008152509056fe746865206e756d626572206f662076616c696461746f72732065786365656420746865206c696d69746475706c696361746520636f6e73656e7375732061646472657373206f662076616c696461746f725365747468652065787069726554696d655365636f6e64476170206973206f7574206f662072616e67656c656e677468206f66206a61696c2076616c696461746f7273206d757374206265206f6e65746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374666565206973206c6172676572207468616e2044555354595f494e434f4d494e476c656e677468206f662065787069726554696d655365636f6e64476170206d69736d61746368f901b480f901b0f846941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf9477f066f3fb515bb97015e4b4afddbcb25c94286b86048c27395000f84694b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794748c284f46ab87fd492326f1e2fe731d22ad2db386048c27395000f84694a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f940ce09b38374887cb564b7efa60be130d99ed5f9586048c27395000f84694980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b2709407eecf36cf0901fefe4bc505d6ba03c7480c7b5786048c27395000f8469435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194f57d36e129881a3a13a024fe8072507e5b2e70f886048c27395000f84694f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594ddfcaedf9bb451098c9917a45f02bd61342cca6686048c273950006661696c656420746f20706172736520696e69742076616c696461746f72536574746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d6573736167652073656e646572206d7573742062652074686520626c6f636b2070726f6475636572746865206d6573736167652073656e646572206d75737420626520736c61736820636f6e7472616374a26469706673582212203ab4e2f538c9084d689a3e9fdfcee54d2149c820c48e01a03c7f65be805a8edf64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "608060405234801561001057600080fd5b50600436106102275760003560e01c8063831d65d111610130578063c80d4b8f116100b8578063e1c7392a1161007c578063e1c7392a146106d9578063f9a2bbc7146106e1578063fc3e5908146106e9578063fc4333cd146106f1578063fd6a6879146106f957610227565b8063c80d4b8f14610623578063c81b16621461062b578063c8509d8114610633578063c96be4cb146106ab578063dc927faf146106d157610227565b8063a1a11bf5116100ff578063a1a11bf514610531578063a78abc1614610539578063ab51bb9614610555578063ac0af6291461055d578063ac4317511461056557610227565b8063831d65d11461049f57806396713da9146105195780639bc8e4f2146105215780639dc092621461052957610227565b80634bf6c882116101b35780636e47b482116101825780636e47b4821461047757806370fd5bad1461047f57806375d47a0a146104875780637912a65d1461048f5780637942fd051461049757610227565b80634bf6c8821461045757806351e806721461045f578063567a372d1461046757806362b72cf51461046f57610227565b806337c8dab9116101fa57806337c8dab9146103b9578063389f4f71146103f85780633dffc3871461041257806343756e5c14610430578063493279b11461043857610227565b80630bee7a671461022c5780631182b8751461024d57806323bac5a21461033a57806335aa2e4414610380575b600080fd5b610234610701565b6040805163ffffffff9092168252519081900360200190f35b6102c56004803603604081101561026357600080fd5b60ff8235169190810190604081016020820135600160201b81111561028757600080fd5b82018360208201111561029957600080fd5b803590602001918460018302840111600160201b831117156102ba57600080fd5b509092509050610706565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ff5781810151838201526020016102e7565b50505050905090810190601f16801561032c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103606004803603602081101561035057600080fd5b50356001600160a01b03166107da565b604080519384526020840192909252151582820152519081900360600190f35b61039d6004803603602081101561039657600080fd5b50356107fd565b604080516001600160a01b039092168252519081900360200190f35b6103df600480360360208110156103cf57600080fd5b50356001600160a01b0316610824565b6040805192835260208301919091528051918290030190f35b61040061087b565b60408051918252519081900360200190f35b61041a610881565b6040805160ff9092168252519081900360200190f35b61039d610886565b61044061088c565b6040805161ffff9092168252519081900360200190f35b61041a610891565b61039d610896565b61040061089c565b6104006108a2565b61039d6108a8565b61041a6108ae565b61039d6108b3565b6104006108b9565b61041a6108be565b610517600480360360408110156104b557600080fd5b60ff8235169190810190604081016020820135600160201b8111156104d957600080fd5b8201836020820111156104eb57600080fd5b803590602001918460018302840111600160201b8311171561050c57600080fd5b5090925090506108c3565b005b61041a610a1e565b610400610a23565b61039d610a2e565b61039d610a34565b610541610a3a565b604080519115158252519081900360200190f35b610234610a43565b610400610a48565b6105176004803603604081101561057b57600080fd5b810190602081018135600160201b81111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460018302840111600160201b831117156105c857600080fd5b919390929091602081019035600160201b8111156105e557600080fd5b8201836020820111156105f757600080fd5b803590602001918460018302840111600160201b8311171561061857600080fd5b509092509050610a4d565b610400610e3b565b61039d610e40565b6105176004803603604081101561064957600080fd5b60ff8235169190810190604081016020820135600160201b81111561066d57600080fd5b82018360208201111561067f57600080fd5b803590602001918460018302840111600160201b831117156106a057600080fd5b509092509050610e46565b610517600480360360208110156106c157600080fd5b50356001600160a01b0316610ef9565b61039d61131e565b610517611324565b61039d611395565b61041a61139b565b6105176113a0565b61039d61182b565b606481565b606033612000146107485760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff1661078d576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6040805162461bcd60e51b815260206004820152601e60248201527f7265636569766520756e65787065637465642073796e207061636b6167650000604482015290519081900360640190fd5b600260208190526000918252604090912080546001820154919092015460ff1683565b6001818154811061080a57fe5b6000918252602090912001546001600160a01b0316905081565b60008061082f612146565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b600181565b61100181565b606081565b600881565b61200081565b60045481565b60035481565b61100581565b600281565b61100881565b603281565b600b81565b33612000146109035760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff16610948576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b610950612169565b600061099184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183192505050565b9150915080156109db5781516040805163ffffffff9092168252517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e6299679181900360200190a1610a17565b81516040805163ffffffff9092168252517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79181900360200190a15b5050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff16610a92576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b3361100714610ad25760405162461bcd60e51b815260040180806020018281038252602e81526020018061220d602e913960400191505060405180910390fd5b610b3d84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b602082015291506118b19050565b15610c165760208114610b815760405162461bcd60e51b81526004018080602001828103825260278152602001806121b66027913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610bbf9185858083850183828082843760009201919091525061199992505050565b905060018110158015610bd3575060055481105b610c0e5760405162461bcd60e51b815260040180806020018281038252602581526020018061225d6025913960400191505060405180910390fd5b600455610da9565b610c7c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b602082015291506118b19050565b15610d6c5760208114610cc05760405162461bcd60e51b815260040180806020018281038252602281526020018061223b6022913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610cfe9185858083850183828082843760009201919091525061199992505050565b90506103e88111158015610d13575060045481115b610d64576040805162461bcd60e51b815260206004820181905260248201527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604482015290519081900360640190fd5b600555610da9565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b609681565b61100281565b3361200014610e865760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff16610ecb576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610f375760405162461bcd60e51b815260040180806020018281038252602d8152602001806122b1602d913960400191505060405180910390fd5b60005460ff16610f7c576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6003544311610fd2576040805162461bcd60e51b815260206004820181905260248201527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604482015290519081900360640190fd5b3a1561101c576040805162461bcd60e51b81526020600482015260146024820152736761737072696365206973206e6f74207a65726f60601b604482015290519081900360640190fd5b611024612146565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff16158015928201929092529061107f5760208101805160010190526110d8565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b4381526005546020820151816110ea57fe5b0661123c57600060208201819052604080516335409f7f60e01b81526001600160a01b03851660048201529051611000926335409f7f926024808201939182900301818387803b15801561113d57600080fd5b505af1158015611151573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6111718561199e565b60006040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156111d15781810151838201526020016111b9565b50505050905090810190601f1680156111fe5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561121f57600080fd5b505af1158015611233573d6000803e3d6000fd5b505050506112b2565b60045481602001518161124b57fe5b066112b257604080516375abf10160e11b81526001600160a01b038416600482015290516110009163eb57e20291602480830192600092919082900301818387803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505043600355565b61100381565b60005460ff161561137c576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b603260045560966005556000805460ff19166001179055565b61100081565b600381565b33611000146113e05760405162461bcd60e51b81526004018080602001828103825260308152602001806121dd6030913960400191505060405180910390fd5b60005460ff16611425576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b60015461143157611829565b600154600090600019015b8082116117fd576000805b8284101561156057611457612146565b600260006001878154811061146857fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff16151590820152600554909150600490048160200151111561154a576004600554816114d557fe5b048160200151038160200181815250508060026000600188815481106114f757fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611554565b6001925050611560565b50600190930192611447565b8284116116f75761156f612146565b600260006001868154811061158057fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611668576004600554816115ed57fe5b0481602001510381602001818152505080600260006001878154811061160f57fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff191691151591909117905591506116f79050565b600260006001868154811061167957fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff191690558054806116bd57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055836116ea57506116f7565b5060001990920191611560565b8180156117015750805b156117e057600260006001868154811061171757fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff1916905580548490811061175e57fe5b600091825260209091200154600180546001600160a01b03909216918690811061178457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060018054806117bd57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b826117ec5750506117fd565b50506001909101906000190161143c565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b611839612169565b6000611843612169565b61184b61217b565b61185c61185786611a70565b611a95565b90506000805b61186b83611adf565b156118a457806118975761188661188184611b00565b611b4e565b63ffffffff1684526001915061189c565b6118a4565b600101611862565b5091935090915050915091565b6000816040516020018082805190602001908083835b602083106118e65780518252601f1990920191602091820191016118c7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106119545780518252601f199092019160209182019101611935565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b015190565b60408051600480825260a08201909252606091829190816020015b60608152602001906001900390816119b95790505090506119e2836001600160a01b0316611c05565b816000815181106119ef57fe5b6020026020010181905250611a0343611c28565b81600181518110611a1057fe5b6020908102919091010152611a256060611c28565b81600281518110611a3257fe5b6020026020010181905250611a4642611c28565b81600381518110611a5357fe5b6020026020010181905250611a6781611c3b565b9150505b919050565b611a7861219b565b506040805180820190915281518152602082810190820152919050565b611a9d61217b565b611aa682611cc5565b611aaf57600080fd5b6000611abe8360200151611cff565b60208085015160408051808201909152868152920190820152915050919050565b6000611ae961219b565b505080518051602091820151919092015191011190565b611b0861219b565b611b1182611adf565b611b1a57600080fd5b60208201516000611b2a82611d62565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590611b6357508151602110155b611b6c57600080fd5b6000611b7b8360200151611cff565b90508083600001511015611bd6576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015611bfc57826020036101000a820491505b50949350505050565b60408051600560a21b8318601482015260348101909152606090611a6781611e95565b6060611993611c3683611eeb565b611e95565b6060815160001415611c5c5750604080516000815260208101909152611a6b565b606082600081518110611c6b57fe5b602002602001015190506000600190505b8351811015611cac57611ca282858381518110611c9557fe5b6020026020010151611fd1565b9150600101611c7c565b50611a67611cbf825160c060ff1661204e565b82611fd1565b8051600090611cd657506000611a6b565b6020820151805160001a9060c0821015611cf557600092505050611a6b565b5060019392505050565b8051600090811a6080811015611d19576000915050611a6b565b60b8811080611d34575060c08110801590611d34575060f881105b15611d43576001915050611a6b565b60c0811015611d575760b519019050611a6b565b60f519019050611a6b565b80516000908190811a6080811015611d7d5760019150611e8e565b60b8811015611d9257607e1981019150611e8e565b60c0811015611e0c57600060b78203600186019550806020036101000a865104915060018101820193505080831015611e06576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50611e8e565b60f8811015611e215760be1981019150611e8e565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611e8c576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b606081516001148015611ec75750607f60f81b82600081518110611eb557fe5b01602001516001600160f81b03191611155b15611ed3575080611a6b565b611993611ee58351608060ff1661204e565b83611fd1565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416611f2f57506018611f53565b6fffffffffffffffffffffffffffffffff198416611f4f57506010611f53565b5060005b6020811015611f8957818181518110611f6857fe5b01602001516001600160f81b03191615611f8157611f89565b600101611f53565b60008160200390506060816040519080825280601f01601f191660200182016040528015611fbe576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b81831015612002578051835260209283019201611fea565b50855184518101855292509050808201602086015b8183101561202f578051835260209283019201612017565b508651929092011591909101601f01601f191660405250905092915050565b606068010000000000000000831061209e576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116120f85782840160f81b816000815181106120da57fe5b60200101906001600160f81b031916908160001a9053509050611993565b606061210385611eeb565b90508381510160370160f81b8260008151811061211c57fe5b60200101906001600160f81b031916908160001a90535061213d8282611fd1565b95945050505050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061218e61219b565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d69736d61746368746865206d6573736167652073656e646572206d7573742062652076616c696461746f7253657420636f6e7472616374746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746368746865206d697364656d65616e6f725468726573686f6c64206f7574206f662072616e6765746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d6573736167652073656e646572206d7573742062652074686520626c6f636b2070726f647563657274686520636f6e7472616374206e6f7420696e69742079657400000000000000a26469706673582212204ff575d7be356d691e7b7eae41716a4ccc366ec84f8235486e935261df61a18a64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(SystemRewardContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "60806040526004361061014f5760003560e01c806396713da9116100b6578063c81b16621161006f578063c81b1662146103dc578063dc927faf146103f1578063f9a2bbc714610406578063fb5478b31461041b578063fc3e590814610430578063fd6a68791461044557610193565b806396713da91461033a5780639a99b4f01461034f5780639dc0926214610388578063a1a11bf51461039d578063a78abc16146103b2578063ab51bb96146103c757610193565b806351e806721161010857806351e806721461028a5780636d70f7ae1461029f5780636e47b482146102e657806370fd5bad146102fb57806375d47a0a146103105780637942fd051461032557610193565b80630bee7a67146101985780633a0b0eff146101c65780633dffc387146101ed57806343756e5c14610218578063493279b1146102495780634bf6c8821461027557610193565b366101935734156101915760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b3480156101a457600080fd5b506101ad61045a565b6040805163ffffffff9092168252519081900360200190f35b3480156101d257600080fd5b506101db61045f565b60408051918252519081900360200190f35b3480156101f957600080fd5b50610202610465565b6040805160ff9092168252519081900360200190f35b34801561022457600080fd5b5061022d61046a565b604080516001600160a01b039092168252519081900360200190f35b34801561025557600080fd5b5061025e610470565b6040805161ffff9092168252519081900360200190f35b34801561028157600080fd5b50610202610475565b34801561029657600080fd5b5061022d61047a565b3480156102ab57600080fd5b506102d2600480360360208110156102c257600080fd5b50356001600160a01b0316610480565b604080519115158252519081900360200190f35b3480156102f257600080fd5b5061022d61049e565b34801561030757600080fd5b506102026104a4565b34801561031c57600080fd5b5061022d6104a9565b34801561033157600080fd5b506102026104af565b34801561034657600080fd5b506102026104b4565b34801561035b57600080fd5b506101db6004803603604081101561037257600080fd5b506001600160a01b0381351690602001356104b9565b34801561039457600080fd5b5061022d610664565b3480156103a957600080fd5b5061022d61066a565b3480156103be57600080fd5b506102d2610670565b3480156103d357600080fd5b506101ad610679565b3480156103e857600080fd5b5061022d61067e565b3480156103fd57600080fd5b5061022d610684565b34801561041257600080fd5b5061022d61068a565b34801561042757600080fd5b506101db610690565b34801561043c57600080fd5b5061020261069c565b34801561045157600080fd5b5061022d6106a1565b606481565b60015481565b600181565b61100181565b606081565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b61100881565b600b81565b600981565b6000805460ff1661053657600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166105845760405162461bcd60e51b815260040180806020018281038252602b8152602001806106a8602b913960400191505060405180910390fd5b60004783106105935747610595565b825b9050670de0b6b3a76400008111156105b25750670de0b6b3a76400005b8015610633576040516001600160a01b0385169082156108fc029083906000818181858888f193505050501580156105ee573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a261065d565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b61100781565b61100681565b60005460ff1681565b600081565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b6110048156fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f64a2646970667358221220d0a7618a32d393c0757994fad066c9aaf7342a982498e0748019ec232f5dc86764736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(LightClientContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "608060405234801561001057600080fd5b50600436106102115760003560e01c8063a78abc1611610125578063dda83148116100ad578063e405bbc31161007c578063e405bbc314610681578063ea54b2aa14610689578063f9a2bbc714610691578063fc3e590814610699578063fd6a6879146106a157610211565b8063dda8314814610609578063df5fe7041461062f578063e1c7392a14610655578063e2761af01461065d57610211565b8063c81b1662116100f4578063c81b166214610534578063cba510a91461053c578063d816987914610562578063da8d08f0146105db578063dc927faf1461060157610211565b8063a78abc1614610444578063ab51bb9614610460578063ac43175114610468578063adc879e91461052c57610211565b8063564b81ef116101a857806375d47a0a1161017757806375d47a0a1461041c5780637942fd051461042457806396713da91461042c5780639dc0926214610434578063a1a11bf51461043c57610211565b8063564b81ef146102ca5780635c5ae8db146103475780636e47b4821461040c57806370fd5bad1461041457610211565b806343756e5c116101e457806343756e5c14610277578063493279b11461029b5780634bf6c882146102ba57806351e80672146102c257610211565b80630bee7a67146102165780632657e9b61461023757806333f7798d146102515780633dffc38714610259575b600080fd5b61021e6106a9565b6040805163ffffffff9092168252519081900360200190f35b61023f6106ae565b60408051918252519081900360200190f35b61023f6106b9565b6102616106bf565b6040805160ff9092168252519081900360200190f35b61027f6106c4565b604080516001600160a01b039092168252519081900360200190f35b6102a36106ca565b6040805161ffff9092168252519081900360200190f35b6102616106cf565b61027f6106d4565b6102d26106da565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030c5781810151838201526020016102f4565b50505050905090810190601f1680156103395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61036d6004803603602081101561035d57600080fd5b50356001600160401b03166107e6565b60405180856001600160401b03166001600160401b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103ce5781810151838201526020016103b6565b50505050905090810190601f1680156103fb5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b61027f6108a1565b6102616108a7565b61027f6108ac565b6102616108b2565b6102616108b7565b61027f6108bc565b61027f6108c2565b61044c6108c8565b604080519115158252519081900360200190f35b61021e6108d1565b61052a6004803603604081101561047e57600080fd5b81019060208101813564010000000081111561049957600080fd5b8201836020820111156104ab57600080fd5b803590602001918460018302840111640100000000831117156104cd57600080fd5b9193909290916020810190356401000000008111156104eb57600080fd5b8201836020820111156104fd57600080fd5b8035906020019184600183028401116401000000008311171561051f57600080fd5b5090925090506108d6565b005b61023f610b8f565b61027f610b95565b61023f6004803603602081101561055257600080fd5b50356001600160401b0316610b9b565b61044c6004803603604081101561057857600080fd5b81019060208101813564010000000081111561059357600080fd5b8201836020820111156105a557600080fd5b803590602001918460018302840111640100000000831117156105c757600080fd5b9193509150356001600160401b0316610bba565b61027f600480360360208110156105f157600080fd5b50356001600160401b031661139b565b61027f6113b6565b61027f6004803603602081101561061f57600080fd5b50356001600160401b03166113bc565b61044c6004803603602081101561064557600080fd5b50356001600160401b03166113e0565b61052a611422565b6106656115c7565b604080516001600160401b039092168252519081900360200190f35b6106656115d6565b6102d26115ec565b61027f611609565b61026161160f565b61027f611614565b606481565b662386f26fc1000081565b60055481565b600181565b61100181565b606081565b600881565b61200081565b604080516020808252818301909252606091829190602082018180368337505060045460208301525090506000805b60208160ff16101561075057828160ff168151811061072457fe5b01602001516001600160f81b0319161561074357600190910190610748565b610750565b600101610709565b5060608160ff166040519080825280601f01601f191660200182016040528015610781576020820181803683370190505b50905060005b8260ff168160ff1610156107dd57838160ff16815181106107a457fe5b602001015160f81c60f81b828260ff16815181106107be57fe5b60200101906001600160f81b031916908160001a905350600101610787565b50925050505b90565b60016020818152600092835260409283902080548184015460028084015460038501805489516101009982161599909902600019011692909204601f81018790048702880187019098528787526001600160401b0390931696919592949091908301828280156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905084565b61100581565b600281565b61100881565b600b81565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff1661092d576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b336110071461096d5760405162461bcd60e51b815260040180806020018281038252602e815260200180611ac6602e913960400191505060405180910390fd5b6109e184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f726577617264466f7256616c696461746f725365744368616e676500000000006020820152915061161a9050565b15610ac05760208114610a255760405162461bcd60e51b815260040180806020018281038252602e815260200180611a65602e913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610a639185858083850183828082843760009201919091525061170192505050565b9050600081118015610a7d5750670de0b6b3a76400008111155b610ab85760405162461bcd60e51b815260040180806020018281038252602f815260200180611af4602f913960400191505060405180910390fd5b600555610afd565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60045481565b61100281565b6001600160401b03166000908152600160208190526040909120015490565b60408051630a83aaa960e31b815233600482015290516000916110069163541d554891602480820192602092909190829003018186803b158015610bfd57600080fd5b505afa158015610c11573d6000803e3d6000fd5b505050506040513d6020811015610c2757600080fd5b5051610c7a576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b6001600160401b0382166000908152600260205260409020546001600160a01b031615610cee576040805162461bcd60e51b815260206004820152601c60248201527f63616e27742073796e63206475706c6963617465642068656164657200000000604482015290519081900360640190fd5b6003546001600160401b0390811690831611610d3b5760405162461bcd60e51b8152600401808060200182810382526026815260200180611b236026913960400191505060405180910390fd5b600354600160401b90046001600160401b0316610d56611863565b6001600160401b0382811660009081526001602081815260409283902083516080810185528154909516855280830154858301526002808201548686015260038201805486516101009682161596909602600019011691909104601f81018490048402850184019095528484529093606086019392830182828015610e1c5780601f10610df157610100808354040283529160200191610e1c565b820191906000526020600020905b815481529060010190602001808311610dff57829003601f168201915b50505050508152505090505b836001600160401b0316826001600160401b031610158015610e5957506003546001600160401b0390811690831610155b15610f3a5780516001600160401b0380821660009081526001602081815260409283902083516080810185528154909516855280830154858301526002808201548686015260038201805486516101009682161596909602600019011691909104601f8101849004840285018401909552848452959750939460608601939091830182828015610f2a5780601f10610eff57610100808354040283529160200191610f2a565b820191906000526020600020905b815481529060010190602001808311610f0d57829003601f168201915b5050505050815250509050610e28565b6060810151516110315780516001600160401b03811660009081526001602081815260409283902060030180548451600294821615610100026000190190911693909304601f810183900483028401830190945283835293955090929190830182828015610fe95780601f10610fbe57610100808354040283529160200191610fe9565b820191906000526020600020905b815481529060010190602001808311610fcc57829003601f168201915b505050506060830182905250516110315760405162461bcd60e51b8152600401808060200182810382526021815260200180611a446021913960400191505060405180910390fd5b6000816060015151608801905060608787905082016040519080825280601f01601f191660200182016040528015611070576020820181803683370190505b509050600061107e82611706565b905061108c8486838661170c565b6110c75760405162461bcd60e51b81526004018080602001828103825260238152602001806119416023913960400191505060405180910390fd5b6000838201915061110d8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177892505050565b9450905061111c818386611782565b8251602001935061112b611889565b6110008186866064600019fa61114057600080fd5b805194506000600160f81b8616156111cf5750600554604080516309a99b4f60e41b815233600482015260248101929092525160019161100291639a99b4f0916044808201926020929091908290030181600087803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050506040513d60208110156111cc57600080fd5b50505b856001600160401b0316955060208201935060006111ef858884156117c3565b90985090506001600160401b03808216908c161461123e5760405162461bcd60e51b8152600401808060200182810382526033815260200180611a936033913960400191505060405180910390fd5b6001600160401b03808c16600081815260026020818152604080842080546001600160a01b031916331790558e86168e529383526001808252928490208d518154961667ffffffffffffffff199096169590951785558c81015192850192909255918b01519183019190915560608a015180518b93926112c59260038501929101906118a8565b50506003546001600160401b03600160401b9091048116908d161115905061130d576003805467ffffffffffffffff60401b1916600160401b6001600160401b038e16021790555b7f4042c1020a8f410fb1c8859d276ab436aeb2c3074960e48467299cf1c966d3b48b8a8a602001518560405180856001600160401b03166001600160401b03168152602001846001600160401b03166001600160401b031681526020018381526020018215151515815260200194505050505060405180910390a15060019c9b505050505050505050505050565b6002602052600090815260409020546001600160a01b031681565b61100381565b6001600160401b03166000908152600260205260409020546001600160a01b031690565b6001600160401b0381166000908152600260205260408120546001600160a01b031615158061141c57506003546001600160401b038381169116145b92915050565b60005460ff161561147a576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60008061149f60405180610100016040528060e0815260200161196460e09139611778565b815160045590925090506114b1611863565b60006114bf848460006117c3565b60008083526001600160401b038281168252600160208181526040938490208651815467ffffffffffffffff191694169390931783558086015191830191909155918401516002820155606084015180519496509294508593909261152b9260038501929101906118a8565b50506003805467ffffffffffffffff19166001600160401b0384811691821767ffffffffffffffff60401b1916600160401b9290920291909117918290556000805460ff19166001179055662386f26fc10000600555602085810151604080519490931684529083015280517f5ac9b37d571677b80957ca05693f371526c602fd08042b416a29fdab7efefa499350918290030190a150505050565b6003546001600160401b031681565b600354600160401b90046001600160401b031681565b60405180610100016040528060e0815260200161196460e0913981565b61100081565b600381565b61100481565b6000816040516020018082805190602001908083835b6020831061164f5780518252601f199092019160209182019101611630565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106116bd5780518252601f19909201916020918201910161169e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b60200190565b600084606001515182840103925060008061172a8760600151611778565b909250905061173a828683611782565b5050506040840151601f1983810191909152602090940151603f19830152605f19820192909252600454606719820152910160871990910152600190565b8051602090910191565b5b602081106117a2578251825260209283019290910190601f1901611783565b915181516020939093036101000a6000190180199091169216919091179052565b6117cb611863565b60088401516028850151604890950180519095600092916117ea611863565b6020810183905260408101829052866118555760008060688a036040519080825280601f01601f19166020018201604052801561182e576020820181803683370190505b506060840181905261183f90611778565b909250905061185260208c018383611782565b50505b989297509195505050505050565b604080516080810182526000808252602082018190529181019190915260608082015290565b6040518061100001604052806080906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118e957805160ff1916838001178555611916565b82800160010185558215611916579182015b828111156119165782518255916020019190600101906118fb565b50611922929150611926565b5090565b6107e391905b80821115611922576000815560010161192c56fe6661696c656420746f2073657269616c697a6520636f6e73656e73757320737461746542696e616e63652d436861696e2d47616e67657300000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000aea1ac326886b992a991d21a6eb155f41b77867cbf659e78f31d89d8205122a84d1be64f0e9a466c2e66a53433928192783e29f8fa21beb2133499b5ef770f60000000e8d4a5100099308aa365c40554bc89982af505d85da95251445d5dd4a9bb37dd2584fd92d3000000e8d4a5100001776920ff0b0f38d78cf95c033c21adf7045785114e392a7544179652e0a612000000e8d4a510006661696c656420746f206c6f61642076616c696461746f722073657420646174616c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d617463686865616465722068656967687420646f65736e277420657175616c20746f207468652073706563696669656420686569676874746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206e6577526577617264466f7256616c696461746f725365744368616e6765206f7574206f662072616e676563616e27742073796e6320686561646572206265666f726520696e697469616c486569676874a26469706673582212205276b0300b4926074c5521abe49ba680eda1820c6f75c2779994658ed250924164736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "60806040526004361061031e5760003560e01c80639a99b4f0116101ab578063bd466461116100f7578063f014847211610095578063fc1a598f1161006f578063fc1a598f14610cb3578063fc3e5908146109c9578063fd6a687914610ce6578063ff9c0027146107c757610366565b8063f014847214610c74578063f9a2bbc714610c89578063fa9e915914610c9e57610366565b8063dc6f5e90116100d1578063dc6f5e90146109c9578063dc927faf14610c35578063e1c7392a14610c4a578063ebf71d5314610c5f57610366565b8063bd46646114610b68578063c81b166214610b9b578063c8509d8114610bb057610366565b8063a7c9f02d11610164578063ac4317511161013e578063ac43175114610a3a578063b770186114610b05578063b99328c514610b1a578063b9fd21e314610b5357610366565b8063a7c9f02d146109c9578063aa7415f5146109de578063ab51bb9614610a2557610366565b80639a99b4f0146109095780639dc0926214610942578063a1a11bf514610957578063a496fba21461096c578063a5cd588b14610981578063a78abc16146109b457610366565b80635d499b1b1161026a57806375d47a0a116102235780638b87b21f116101fd5780638b87b21f146105b25780638eff336c146108a057806396713da9146108df5780639a854bbd146108f457610366565b806375d47a0a146107f15780637942fd0514610806578063831d65d11461081b57610366565b80635d499b1b14610671578063613684751461036b5780636e056520146106865780636e47b482146107b257806370fd5bad146107c757806371d30863146107dc57610366565b806343756e5c116102d75780634bf6c882116102b15780634bf6c8821461036b57806350432d321461061d57806351e806721461063257806359b927891461064757610366565b806343756e5c146105c757806343a368b9146105dc578063493279b1146105f157610366565b8063077b8f351461036b5780630bee7a67146103965780631182b875146103c4578063149d14d9146104be5780633d713223146104e55780633dffc387146105b257610366565b36610366573415610364576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561037757600080fd5b50610380610cfb565b6040805160ff9092168252519081900360200190f35b3480156103a257600080fd5b506103ab610d00565b6040805163ffffffff9092168252519081900360200190f35b3480156103d057600080fd5b50610449600480360360408110156103e757600080fd5b60ff8235169190810190604081016020820135600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460018302840111600160201b8311171561043e57600080fd5b509092509050610d05565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561048357818101518382015260200161046b565b50505050905090810190601f1680156104b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104ca57600080fd5b506104d3610e33565b60408051918252519081900360200190f35b3480156104f157600080fd5b506105966004803603602081101561050857600080fd5b810190602081018135600160201b81111561052257600080fd5b82018360208201111561053457600080fd5b803590602001918460018302840111600160201b8311171561055557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e39945050505050565b604080516001600160a01b039092168252519081900360200190f35b3480156105be57600080fd5b50610380610e5d565b3480156105d357600080fd5b50610596610e62565b3480156105e857600080fd5b506104d3610e68565b3480156105fd57600080fd5b50610606610e74565b6040805161ffff9092168252519081900360200190f35b34801561062957600080fd5b506104d3610e79565b34801561063e57600080fd5b50610596610e84565b34801561065357600080fd5b506105966004803603602081101561066a57600080fd5b5035610e8a565b34801561067d57600080fd5b506104d3610ea5565b61079e6004803603608081101561069c57600080fd5b810190602081018135600160201b8111156106b657600080fd5b8201836020820111156106c857600080fd5b803590602001918460208302840111600160201b831117156106e957600080fd5b919390929091602081019035600160201b81111561070657600080fd5b82018360208201111561071857600080fd5b803590602001918460208302840111600160201b8311171561073957600080fd5b919390929091602081019035600160201b81111561075657600080fd5b82018360208201111561076857600080fd5b803590602001918460208302840111600160201b8311171561078957600080fd5b91935091503567ffffffffffffffff16610eae565b604080519115158252519081900360200190f35b3480156107be57600080fd5b50610596611383565b3480156107d357600080fd5b50610380611389565b3480156107e857600080fd5b506104d361138e565b3480156107fd57600080fd5b50610596611394565b34801561081257600080fd5b5061038061139a565b34801561082757600080fd5b506103646004803603604081101561083e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561086257600080fd5b82018360208201111561087457600080fd5b803590602001918460018302840111600160201b8311171561089557600080fd5b50909250905061139f565b3480156108ac57600080fd5b50610364600480360360608110156108c357600080fd5b508035906001600160a01b0360208201351690604001356114e8565b3480156108eb57600080fd5b5061038061156e565b34801561090057600080fd5b506104d3611573565b34801561091557600080fd5b506104d36004803603604081101561092c57600080fd5b506001600160a01b03813516906020013561157f565b34801561094e57600080fd5b506105966116bd565b34801561096357600080fd5b506105966116c3565b34801561097857600080fd5b506103806116c9565b34801561098d57600080fd5b506104d3600480360360208110156109a457600080fd5b50356001600160a01b03166116ce565b3480156109c057600080fd5b5061079e6116e0565b3480156109d557600080fd5b506103806116e9565b61079e600480360360808110156109f457600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff166116ee565b348015610a3157600080fd5b506103ab6116c9565b348015610a4657600080fd5b5061036460048036036040811015610a5d57600080fd5b810190602081018135600160201b811115610a7757600080fd5b820183602082011115610a8957600080fd5b803590602001918460018302840111600160201b83111715610aaa57600080fd5b919390929091602081019035600160201b811115610ac757600080fd5b820183602082011115610ad957600080fd5b803590602001918460018302840111600160201b83111715610afa57600080fd5b509092509050611daf565b348015610b1157600080fd5b506104d361201e565b348015610b2657600080fd5b5061036460048036036040811015610b3d57600080fd5b50803590602001356001600160a01b0316612024565b348015610b5f57600080fd5b506104d361209a565b348015610b7457600080fd5b506104d360048036036020811015610b8b57600080fd5b50356001600160a01b03166120a4565b348015610ba757600080fd5b506105966120bf565b348015610bbc57600080fd5b5061036460048036036040811015610bd357600080fd5b60ff8235169190810190604081016020820135600160201b811115610bf757600080fd5b820183602082011115610c0957600080fd5b803590602001918460018302840111600160201b83111715610c2a57600080fd5b5090925090506120c5565b348015610c4157600080fd5b50610596612195565b348015610c5657600080fd5b5061036461219b565b348015610c6b57600080fd5b5061038061223b565b348015610c8057600080fd5b50610380612240565b348015610c9557600080fd5b50610596612245565b348015610caa57600080fd5b506104d361224b565b348015610cbf57600080fd5b5061044960048036036020811015610cd657600080fd5b50356001600160a01b0316612251565b348015610cf257600080fd5b50610596612378565b600881565b606481565b60005460609060ff16610d4d576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b3361200014610d8d5760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff841660021415610ddf57610dd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237e92505050565b9050610e2c565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b60015490565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b670de0b6b3a764000081565b606081565b662386f26fc1000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b6000805460ff16610ef4576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b868514610f325760405162461bcd60e51b815260040180806020018281038252603b815260200180614732603b913960400191505060405180910390fd5b868314610f705760405162461bcd60e51b815260040180806020018281038252603f815260200180614605603f913960400191505060405180910390fd5b426078018267ffffffffffffffff161015610fbc5760405162461bcd60e51b81526004018080602001828103825260248152602001806144f56024913960400191505060405180910390fd5b6402540be4003406156110005760405162461bcd60e51b81526004018080602001828103825260408152602001806148356040913960400191505060405180910390fd5b60408051868152602080880282010190915285906000908190606090848015611033578160200160208202803683370190505b50905060005b8481101561110e576402540be4008b8b8381811061105357fe5b905060200201358161106157fe5b061561109e5760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b6110c38b8b838181106110ad57fe5b90506020020135856124a290919063ffffffff16565b93506110ef6402540be4008c8c848181106110da57fe5b905060200201356124fc90919063ffffffff16565b8282815181106110fb57fe5b6020908102919091010152600101611039565b5060015461113390611126908663ffffffff61253e16565b849063ffffffff6124a216565b3410156111715760405162461bcd60e51b81526004018080602001828103825260568152602001806147df6056913960600191505060405180910390fd5b611181348463ffffffff61259716565b915061118b61434e565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d7600361124f846125d9565b611264876402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156112c25781810151838201526020016112aa565b50505050905090810190601f1680156112ef5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b600281565b60015481565b61100881565b600b81565b60005460ff166113e4576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b33612000146114245760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061289492505050565b6114e3565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b33611008146115285760405162461bcd60e51b815260040180806020018281038252602381526020018061479c6023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff166115c5576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b33611005146116055760405162461bcd60e51b815260040180806020018281038252602f815260200180614468602f913960400191505060405180910390fd5b60004783106116145747611616565b825b9050670de0b6b3a76400008111156116325760009150506116b7565b80156116b4576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561166e573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60026020526000908152604090205481565b60005460ff1681565b600381565b6000805460ff16611734576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff1610156117805760405162461bcd60e51b81526004018080602001828103825260248152602001806144f56024913960400191505060405180910390fd5b6402540be4003406156117c45760405162461bcd60e51b81526004018080602001828103825260408152602001806148356040913960400191505060405180910390fd5b600080806001600160a01b0388166118a3576001546117ea90879063ffffffff6124a216565b3410156118285760405162461bcd60e51b815260040180806020018281038252606181526020018061457f6061913960800191505060405180910390fd5b6402540be40086061561186c5760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b61187c348763ffffffff61259716565b9050611893866402540be40063ffffffff6124fc16565b6221272160e91b93509150611b46565b6001600160a01b0388166000908152600360205260409020549250826118fa5760405162461bcd60e51b815260040180806020018281038252603181526020018061454e6031913960400191505060405180910390fd5b60015434101561193b5760405162461bcd60e51b815260040180806020018281038252603f8152602001806146a1603f913960400191505060405180910390fd5b506001600160a01b038716600090815260026020526040902054349060088111158061198657506008811180156119865750611984876007198301600a0a63ffffffff6128f016565b155b6119c15760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b6119cb8782612932565b92506119d684612972565b15611a1e576305f5e100831015611a1e5760405162461bcd60e51b815260040180806020018281038252603a815260200180614497603a913960400191505060405180910390fd5b600881101580611a385750600881108015611a3857508683115b611a735760405162461bcd60e51b81526004018080602001828103825260258152602001806145e06025913960400191505060405180910390fd5b677ce66c50e2840000831115611aba5760405162461bcd60e51b81526004018080602001828103825260358152602001806145196035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b158015611b0f57600080fd5b505af1158015611b23573d6000803e3d6000fd5b505050506040513d6020811015611b3957600080fd5b5051611b4457600080fd5b505b611b4e61434e565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff168152509050828160400151600081518110611bfc57fe5b602002602001018181525050878160600151600081518110611c1a57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611c4c57fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611c77846125d9565b611c8c866402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611cea578181015183820152602001611cd2565b50505050905090810190601f168015611d175780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b3361100714611def5760405162461bcd60e51b815260040180806020018281038252602e8152602001806146e0602e913960400191505060405180910390fd5b60208114611e44576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415611f4c576020820151670de0b6b3a76400008111801590611ef357506402540be4008106155b611f44576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155611f89565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61c35081565b33611008146120645760405162461bcd60e51b815260040180806020018281038252602381526020018061479c6023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff1661210a576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b336120001461214a5760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a7892505050565b61100381565b60005460ff16156121f3576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b662386f26fc1000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b600481565b600581565b61100081565b61271081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff1610156122e157828160ff16815181106122b557fe5b01602001516001600160f81b031916156122d4576001909101906122d9565b6122e1565b60010161229a565b5060608160ff166040519080825280601f01601f191660200182016040528015612312576020820181803683370190505b50905060005b8260ff168160ff16101561236e57838160ff168151811061233557fe5b602001015160f81c60f81b828260ff168151811061234f57fe5b60200101906001600160f81b031916908160001a905350600101612318565b5095945050505050565b61100481565b606061238861439a565b600061239384612b76565b91509150806123e9576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b60006123f483612cb5565b905063ffffffff811615612488576040808401516020808601516001600160a01b0316600090815260029091529182205461242f9190612932565b90506124396143cf565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061247c81613002565b95505050505050610e58565b50506040805160008152602081019091529150610e589050565b6000828201838110156116b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130de565b60008261254d575060006116b7565b8282028284828161255a57fe5b04146116b45760405162461bcd60e51b81526004018080602001828103825260218152602001806146806021913960400191505060405180910390fd5b60006116b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613180565b60408051600680825260e08201909252606091829190816020015b60608152602001906001900390816125f45750508351909150612616906131da565b8160008151811061262357fe5b602002602001018190525061264483602001516001600160a01b03166131ed565b8160018151811061265157fe5b60200260200101819052506000836040015151905060608160405190808252806020026020018201604052801561269c57816020015b60608152602001906001900390816126875790505b50905060005b828110156126e9576126ca866040015182815181106126bd57fe5b60200260200101516131da565b8282815181106126d657fe5b60209081029190910101526001016126a2565b506126f381613210565b8360028151811061270057fe5b602002602001018190525060608260405190808252806020026020018201604052801561274157816020015b606081526020019060019003908161272c5790505b50905060005b83811015612797576127788760600151828151811061276257fe5b60200260200101516001600160a01b03166131ed565b82828151811061278457fe5b6020908102919091010152600101612747565b506127a181613210565b846003815181106127ae57fe5b60200260200101819052506060836040519080825280602002602001820160405280156127ef57816020015b60608152602001906001900390816127da5790505b50905060005b8481101561282f576128108860800151828151811061276257fe5b82828151811061281c57fe5b60209081029190910101526001016127f5565b5061283981613210565b8560048151811061284657fe5b60200260200101819052506128688760a0015167ffffffffffffffff166131da565b8560058151811061287557fe5b602002602001018190525061288985613210565b979650505050505050565b61289c6143f6565b60006128a78361329a565b91509150806128e75760405162461bcd60e51b815260040180806020018281038252602481526020018061470e6024913960400191505060405180910390fd5b6114e382613465565b60006116b483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506138e9565b6000600882111561295b57612954836007198401600a0a63ffffffff6124fc16565b90506116b7565b6116b4836008849003600a0a63ffffffff61253e16565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff1610156129e857828160ff16815181106129bc57fe5b01602001516001600160f81b031916156129db576001909101906129e0565b6129e8565b6001016129a1565b50600860ff82161015612a0057600092505050610e58565b816005820360ff1681518110612a1257fe5b6020910101516001600160f81b031916602d60f81b14612a3757600092505050610e58565b816001820360ff1681518110612a4957fe5b6020910101516001600160f81b031916604d60f81b14612a6e57600092505050610e58565b5060019392505050565b612a8061434e565b6000612a8b8361394b565b9150915080612acb5760405162461bcd60e51b81526004018080602001828103825260248152602001806144d16024913960400191505060405180910390fd5b612ad36143f6565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b846040015151811015612b5457612b3185604001518281518110612b2357fe5b602002602001015183613bc6565b85604001518281518110612b4157fe5b6020908102919091010152600101612b03565b506080840151604083015260056060830152612b6f82613465565b5050505050565b612b7e61439a565b6000612b8861439a565b612b9061442d565b612ba1612b9c86613bff565b613c24565b90506000805b612bb083613c6e565b15612ca85780612bd257612bcb612bc684613c8f565b613cdd565b8452612ca0565b8060011415612bff57612bec612be784613c8f565b613d94565b6001600160a01b03166020850152612ca0565b8060021415612c1e57612c14612bc684613c8f565b6040850152612ca0565b8060031415612c4657612c33612be784613c8f565b6001600160a01b03166060850152612ca0565b8060041415612c6e57612c5b612be784613c8f565b6001600160a01b03166080850152612ca0565b8060051415612c9b57612c83612bc684613c8f565b67ffffffffffffffff1660a085015260019150612ca0565b612ca8565b600101612ba7565b5091935090915050915091565b60208101516000906001600160a01b0316612dec578160a0015167ffffffffffffffff16421115612ce857506001610e58565b8160400151471015612cfc57506003610e58565b606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114612d53576040519150601f19603f3d011682016040523d82523d6000602084013e612d58565b606091505b5050905080612d6b575060049050610e58565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009050610e58565b8160a0015167ffffffffffffffff16421115612e0a57506001610e58565b81516020808401516001600160a01b031660009081526003909152604090205414612e3757506002610e58565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612e8757600080fd5b5086fa158015612e9b573d6000803e3d6000fd5b50505050506040513d6020811015612eb257600080fd5b50516040840151909150811015612ecd575060039050610e58565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612f3e57600080fd5b5087f1158015612f52573d6000803e3d6000fd5b50505050506040513d6020811015612f6957600080fd5b505190508015612ff6577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610e589050565b5060059150610e589050565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161301d575050835190915061303f906131da565b8160008151811061304c57fe5b602002602001018190525061306483602001516131da565b8160018151811061307157fe5b602002602001018190525061309283604001516001600160a01b03166131ed565b8160028151811061309f57fe5b60200260200101819052506130bd836060015163ffffffff166131da565b816003815181106130ca57fe5b6020026020010181905250610e2c81613210565b6000818361316a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561312f578181015183820152602001613117565b50505050905090810190601f16801561315c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161317657fe5b0495945050505050565b600081848411156131d25760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b505050900390565b60606116b76131e883613dae565b613e94565b60408051600560a21b8318601482015260348101909152606090610e2c81613e94565b60608151600014156132315750604080516000815260208101909152610e58565b60608260008151811061324057fe5b602002602001015190506000600190505b8351811015613281576132778285838151811061326a57fe5b6020026020010151613ee6565b9150600101613251565b50610e2c613294825160c060ff16613f63565b82613ee6565b6132a26143f6565b60006132ac6143f6565b6132b461442d565b6132c0612b9c86613bff565b90506000805b6132cf83613c6e565b15612ca857806132f5576132e5612be784613c8f565b6001600160a01b0316845261345d565b806001141561339657606061331161330c85613c8f565b61405b565b9050805160405190808252806020026020018201604052801561333e578160200160208202803683370190505b50602086015260005b815181101561338f5761336c82828151811061335f57fe5b6020026020010151613cdd565b8660200151828151811061337c57fe5b6020908102919091010152600101613347565b505061345d565b80600214156134385760606133ad61330c85613c8f565b905080516040519080825280602002602001820160405280156133da578160200160208202803683370190505b50604086015260005b815181101561338f576134088282815181106133fb57fe5b6020026020010151613d94565b8660400151828151811061341857fe5b6001600160a01b03909216602092830291909101909101526001016133e3565b8060031415612c9b5761344d612bc684613c8f565b63ffffffff166060850152600191505b6001016132c6565b80516001600160a01b031661368f5760005b8160200151518110156136895760008260400151828151811061349657fe5b60200260200101516001600160a01b0316612710846020015184815181106134ba57fe5b60209081029190910101516040516000818181858888f193505050503d8060008114613502576040519150601f19603f3d011682016040523d82523d6000602084013e613507565b606091505b50509050806135ca577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061354657fe5b60200260200101518560200151858151811061355e57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613680565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061360057fe5b60200260200101518560200151858151811061361857fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613477565b506138e6565b60005b8160200151518110156138e457600082600001516001600160a01b031663a9059cbb61c350856040015185815181106136c757fe5b6020026020010151866020015186815181106136df57fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561373657600080fd5b5087f115801561374a573d6000803e3d6000fd5b50505050506040513d602081101561376157600080fd5b505190508015613825577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106137a157fe5b6020026020010151856020015185815181106137b957fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16138db565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061385b57fe5b60200260200101518560200151858151811061387357fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613692565b505b50565b600081836139385760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b5082848161394257fe5b06949350505050565b61395361434e565b600061395d61434e565b61396561442d565b613971612b9c86613bff565b90506000805b61398083613c6e565b15613bb8578061399d57613996612bc684613c8f565b8452613bb0565b80600114156139c5576139b2612be784613c8f565b6001600160a01b03166020850152613bb0565b8060021415613a545760606139dc61330c85613c8f565b90508051604051908082528060200260200182016040528015613a09578160200160208202803683370190505b50604086015260005b8151811015613a4d57613a2a82828151811061335f57fe5b86604001518281518110613a3a57fe5b6020908102919091010152600101613a12565b5050613bb0565b8060031415613ae9576060613a6b61330c85613c8f565b90508051604051908082528060200260200182016040528015613a98578160200160208202803683370190505b50606086015260005b8151811015613a4d57613ab98282815181106133fb57fe5b86606001518281518110613ac957fe5b6001600160a01b0390921660209283029190910190910152600101613aa1565b8060041415613b7e576060613b0061330c85613c8f565b90508051604051908082528060200260200182016040528015613b2d578160200160208202803683370190505b50608086015260005b8151811015613a4d57613b4e8282815181106133fb57fe5b86608001518281518110613b5e57fe5b6001600160a01b0390921660209283029190910190910152600101613b36565b8060051415613bab57613b93612bc684613c8f565b67ffffffffffffffff1660a085015260019150613bb0565b613bb8565b600101613977565b509195600195509350505050565b60006008821115613be857612954836007198401600a0a63ffffffff61253e16565b6116b4836008849003600a0a63ffffffff6124fc16565b613c0761444d565b506040805180820190915281518152602082810190820152919050565b613c2c61442d565b613c358261412c565b613c3e57600080fd5b6000613c4d836020015161415c565b60208085015160408051808201909152868152920190820152915050919050565b6000613c7861444d565b505080518051602091820151919092015191011190565b613c9761444d565b613ca082613c6e565b613ca957600080fd5b60208201516000613cb9826141bf565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613cf257508151602110155b613cfb57600080fd5b6000613d0a836020015161415c565b90508083600001511015613d65576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613d8b57826020036101000a820491505b50949350505050565b8051600090601514613da557600080fd5b6116b782613cdd565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613df257506018613e16565b6fffffffffffffffffffffffffffffffff198416613e1257506010613e16565b5060005b6020811015613e4c57818181518110613e2b57fe5b01602001516001600160f81b03191615613e4457613e4c565b600101613e16565b60008160200390506060816040519080825280601f01601f191660200182016040528015613e81576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613ec65750607f60f81b82600081518110613eb457fe5b01602001516001600160f81b03191611155b15613ed2575080610e58565b6116b7613ee48351608060ff16613f63565b835b6060806040519050835180825260208201818101602087015b81831015613f17578051835260209283019201613eff565b50855184518101855292509050808201602086015b81831015613f44578051835260209283019201613f2c565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613fb3576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b6040805160018082528183019092526060916020820181803683370190505090506037841161400d5782840160f81b81600081518110613fef57fe5b60200101906001600160f81b031916908160001a90535090506116b7565b606061401885613dae565b90508381510160370160f81b8260008151811061403157fe5b60200101906001600160f81b031916908160001a9053506140528282613ee6565b95945050505050565b60606140668261412c565b61406f57600080fd5b600061407a836142f2565b90506060816040519080825280602002602001820160405280156140b857816020015b6140a561444d565b81526020019060019003908161409d5790505b50905060006140ca856020015161415c565b60208601510190506000805b84811015614121576140e7836141bf565b915060405180604001604052808381526020018481525084828151811061410a57fe5b6020908102919091010152918101916001016140d6565b509195945050505050565b805160009061413d57506000610e58565b6020820151805160001a9060c0821015612a6e57600092505050610e58565b8051600090811a6080811015614176576000915050610e58565b60b8811080614191575060c08110801590614191575060f881105b156141a0576001915050610e58565b60c08110156141b45760b519019050610e58565b60f519019050610e58565b80516000908190811a60808110156141da57600191506142eb565b60b88110156141ef57607e19810191506142eb565b60c081101561426957600060b78203600186019550806020036101000a865104915060018101820193505080831015614263576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506142eb565b60f881101561427e5760be19810191506142eb565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156142e9576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061430357506000610e58565b60008090506000614317846020015161415c565b602085015185519181019250015b8082101561434557614336826141bf565b60019093019290910190614325565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b604051806040016040528061444061444d565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6ea2646970667358221220560ad3b1f9184c6b58a836a4c111faf5fdf5dc0e93dc1c013cd41cea18c69cbb64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerIncentivizeContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "6080604052600436106102765760003560e01c80637e146cc51161014f578063af400681116100c1578063e75d72c71161007a578063e75d72c714610795578063e89a3020146107c8578063f9a2bbc7146107f2578063fc3e590814610807578063fd6a68791461081c578063fdd31fcd146108315761027d565b8063af400681146106ed578063bd4cc83014610717578063c81b166214610741578063dc927faf14610756578063dcae76ab1461076b578063e1c7392a146107805761027d565b8063a3c3c0ad11610113578063a3c3c0ad146105b3578063a78abc16146105c8578063a7c6a59d146105dd578063ab51bb96146105f2578063ac43175114610607578063ace9fcc2146106d85761027d565b80637e146cc51461052c578063930e1b091461054157806396713da9146105745780639dc0926214610589578063a1a11bf51461059e5761027d565b806343756e5c116101e85780636e47b482116101ac5780636e47b482146104645780636f93d2e61461047957806370fd5bad146104d857806374f2272d146104ed57806375d47a0a146105025780637942fd05146105175761027d565b806343756e5c146103e4578063493279b1146103f95780634bf6c8821461042557806351e806721461043a578063541333071461044f5761027d565b806312950c461161023a57806312950c46146103165780631b20087c1461032b5780631c643312146103405780633a975612146102825780633dffc3871461038657806340bb43c0146103b15761027d565b8063081e9d131461028257806308f2ec06146102a9578063093f2fc4146102be5780630bee7a67146102d357806310e06a76146103015761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610864565b60408051918252519081900360200190f35b3480156102b557600080fd5b50610297610869565b3480156102ca57600080fd5b5061029761086e565b3480156102df57600080fd5b506102e8610873565b6040805163ffffffff9092168252519081900360200190f35b34801561030d57600080fd5b50610297610878565b34801561032257600080fd5b5061029761087e565b34801561033757600080fd5b50610297610884565b34801561034c57600080fd5b5061036a6004803603602081101561036357600080fd5b503561088a565b604080516001600160a01b039092168252519081900360200190f35b34801561039257600080fd5b5061039b610864565b6040805160ff9092168252519081900360200190f35b3480156103bd57600080fd5b50610297600480360360208110156103d457600080fd5b50356001600160a01b03166108b1565b3480156103f057600080fd5b5061036a6108c3565b34801561040557600080fd5b5061040e6108c9565b6040805161ffff9092168252519081900360200190f35b34801561043157600080fd5b5061039b6108ce565b34801561044657600080fd5b5061036a6108d3565b34801561045b57600080fd5b50610297610873565b34801561047057600080fd5b5061036a6108d9565b34801561048557600080fd5b506104c46004803603608081101561049c57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013515156108df565b604080519115158252519081900360200190f35b3480156104e457600080fd5b5061039b610cad565b3480156104f957600080fd5b50610297610cb2565b34801561050e57600080fd5b5061036a610cb8565b34801561052357600080fd5b5061039b610cbe565b34801561053857600080fd5b50610297610cc3565b34801561054d57600080fd5b506102976004803603602081101561056457600080fd5b50356001600160a01b0316610cc8565b34801561058057600080fd5b5061039b610cda565b34801561059557600080fd5b5061036a610cdf565b3480156105aa57600080fd5b5061036a610ce5565b3480156105bf57600080fd5b50610297610ceb565b3480156105d457600080fd5b506104c4610cf1565b3480156105e957600080fd5b50610297610cfa565b3480156105fe57600080fd5b506102e8610d00565b34801561061357600080fd5b506106d66004803603604081101561062a57600080fd5b81019060208101813564010000000081111561064557600080fd5b82018360208201111561065757600080fd5b8035906020019184600183028401116401000000008311171561067957600080fd5b91939092909160208101903564010000000081111561069757600080fd5b8201836020820111156106a957600080fd5b803590602001918460018302840111640100000000831117156106cb57600080fd5b509092509050610d05565b005b3480156106e457600080fd5b50610297611354565b3480156106f957600080fd5b506102976004803603602081101561071057600080fd5b503561135a565b34801561072357600080fd5b506102976004803603602081101561073a57600080fd5b50356113b5565b34801561074d57600080fd5b5061036a6113ce565b34801561076257600080fd5b5061036a6113d4565b34801561077757600080fd5b506102976113da565b34801561078c57600080fd5b506106d66113e0565b3480156107a157600080fd5b506106d6600480360360208110156107b857600080fd5b50356001600160a01b03166114a9565b3480156107d457600080fd5b5061036a600480360360208110156107eb57600080fd5b5035611602565b3480156107fe57600080fd5b5061036a61160f565b34801561081357600080fd5b5061039b611615565b34801561082857600080fd5b5061036a61161a565b34801561083d57600080fd5b506102976004803603602081101561085457600080fd5b50356001600160a01b0316611620565b600181565b602881565b605081565b606481565b600b5481565b60015481565b600c5481565b6006818154811061089757fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205481565b61100181565b606081565b600881565b61200081565b61100581565b6000805460ff16610937576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33612000146109775760405162461bcd60e51b815260040180806020018281038252602f815260200180612164602f913960400191505060405180910390fd5b600082156109fc57604080516309a99b4f60e41b8152611005600482015260248101869052905161100291639a99b4f09160448083019260209291908290030181600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b505050506040513d60208110156109f357600080fd5b50519050610a75565b604080516309a99b4f60e41b8152611005600482015260248101869052905161100491639a99b4f09160448083019260209291908290030181600087803b158015610a4657600080fd5b505af1158015610a5a573d6000803e3d6000fd5b505050506040513d6020811015610a7057600080fd5b505190505b600c805460010190556000610a8982611632565b600954909150610a9f908263ffffffff61166116565b600955600a54610ac7908290610abb908563ffffffff61166116565b9063ffffffff6116c216565b600a556001600160a01b038716600090815260056020526040902054610b3357600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038088166000908152600560209081526040808320805460010190559289168252600790522054610bb157600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260076020526040902080546001019055600c54606411610ca057600b54600954600a5460408051938452602084019290925282820152517f2649b1b772a1a74bd332a67695e285317dd722941166595741c60a00fa65bb759181900360600190a16000610c2b611704565b90506000610c376119e8565b6001600160a01b0389166000908152600d6020526040902054909150610c75908290610c69908563ffffffff61166116565b9063ffffffff61166116565b6001600160a01b0389166000908152600d6020526040812091909155600b80546001019055600c5550505b5060019695505050505050565b600281565b60035481565b61100881565b600b81565b600581565b60056020526000908152604090205481565b600981565b61100781565b61100681565b600a5481565b60005460ff1681565b60045481565b600081565b3361100714610d455760405162461bcd60e51b815260040180806020018281038252602e8152602001806120a9602e913960400191505060405180910390fd5b60005460ff16610d865760405162461bcd60e51b81526004018080602001828103825260218152602001806120d76021913960400191505060405180910390fd5b610dfa84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601f81527f68656164657252656c61796572526577617264526174654d6f6c6563756c650060208201529150611c669050565b15610ec75760208114610e3e5760405162461bcd60e51b81526004018080602001828103825260328152602001806121936032913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610e7c91858580838501838280828437600092019190915250611d4d92505050565b9050600254811115610ebf5760405162461bcd60e51b8152600401808060200182810382526060815260200180611f826060913960600191505060405180910390fd5b6001556112c2565b610f2084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805160608101909152602280825290925090506120876020830139611c66565b15610ff85760208114610f645760405162461bcd60e51b815260040180806020018281038252602e815260200180612038602e913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610fa291858580838501838280828437600092019190915250611d4d92505050565b90508015801590610fb557506001548110155b610ff05760405162461bcd60e51b815260040180806020018281038252606c8152602001806120f8606c913960800191505060405180910390fd5b6002556112c2565b61106c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601a81527f63616c6c6572436f6d70656e736174696f6e4d6f6c6563756c6500000000000060208201529150611c669050565b1561113957602081146110b05760405162461bcd60e51b815260040180806020018281038252602e815260200180612038602e913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916110ee91858580838501838280828437600092019190915250611d4d92505050565b90506004548111156111315760405162461bcd60e51b8152600401808060200182810382526056815260200180611fe26056913960600191505060405180910390fd5b6003556112c2565b6111ad84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601d81527f63616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f7200000060208201529150611c669050565b1561128557602081146111f15760405162461bcd60e51b815260040180806020018281038252602e815260200180612038602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161122f91858580838501838280828437600092019190915250611d4d92505050565b9050801580159061124257506003548110155b61127d5760405162461bcd60e51b8152600401808060200182810382526061815260200180611f216061913960800191505060405180910390fd5b6004556112c2565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60025481565b60006028821161136b5750806113b0565b81602810801561137c575060508211155b15611389575060286113b0565b60508211801561139a5750606e8211155b156113aa575060788190036113b0565b50600481045b919050565b6000602882116113c65750806113b0565b5060286113b0565b61100281565b61100381565b60095481565b60005460ff1615611438576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60005460ff1615611486576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60018080556005600255600381905560506004556000805460ff19169091179055565b6001600160a01b0381166000908152600d602052604090205480611508576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c995b185e595c881c995dd85c99607a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d60205260408082208290555184929184156108fc02918591818181858888f193505050506115b85760405161100290819084156108fc029085906000818181858888f19350505050158015611572573d6000803e3d6000fd5b506040805161100281526020810185905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a15050506115ff565b604080516001600160a01b03851681526020810184905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a150505b50565b6008818154811061089757fe5b61100081565b600381565b61100481565b600d6020526000908152604090205481565b600061165b60025461164f60015485611d5290919063ffffffff16565b9063ffffffff611dab16565b92915050565b6000828201838110156116bb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006116bb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ded565b600954600680546040805160208084028201810190925282815260009493859360609383018282801561176057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611742575b5050505050905060608151604051908082528060200260200182016040528015611794578160200160208202803683370190505b50905060005b82518110156118215760008382815181106117b157fe5b6020026020010151905060006117eb60056000846001600160a01b03166001600160a01b03168152602001908152602001600020546113b5565b9050808484815181106117fa57fe5b6020908102919091010152611815868263ffffffff61166116565b9550505060010161179a565b50600061183f60045461164f60035488611d5290919063ffffffff16565b9050611851858263ffffffff6116c216565b94508460015b845181101561192857600061188c8761164f8a88868151811061187657fe5b6020026020010151611d5290919063ffffffff16565b90506118d981600d60008986815181106118a257fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205461166190919063ffffffff16565b600d60008885815181106118e957fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205561191d838263ffffffff6116c216565b925050600101611857565b5061193e81600d6000876000815181106118a257fe5b600d60008660008151811061194f57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060098190555060008090505b84518110156119d057600560008683815181106119a257fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611989565b506119dd60066000611ee9565b509450505050505b90565b600a546008805460408051602080840282018101909252828152600094938593606093830182828015611a4457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a26575b5050505050905060608151604051908082528060200260200182016040528015611a78578160200160208202803683370190505b50905060005b8251811015611af7576000838281518110611a9557fe5b602002602001015190506000611acf60076000846001600160a01b03166001600160a01b031681526020019081526020016000205461135a565b905080848481518110611ade57fe5b6020908102919091010152949094019350600101611a7e565b506000611b1560045461164f60035488611d5290919063ffffffff16565b9050611b27858263ffffffff6116c216565b94508460015b8451811015611bb1576000611b4c8761164f8a88868151811061187657fe5b9050611b6281600d60008986815181106118a257fe5b600d6000888581518110611b7257fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611ba6838263ffffffff6116c216565b925050600101611b2d565b50611bc781600d6000876000815181106118a257fe5b600d600086600081518110611bd857fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506000600a8190555060008090505b8451811015611c595760076000868381518110611c2b57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611c12565b506119dd60086000611ee9565b6000816040516020018082805190602001908083835b60208310611c9b5780518252601f199092019160209182019101611c7c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310611d095780518252601f199092019160209182019101611cea565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b600082611d615750600061165b565b82820282848281611d6e57fe5b04146116bb5760405162461bcd60e51b81526004018080602001828103825260218152602001806120666021913960400191505060405180910390fd5b60006116bb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e84565b60008184841115611e7c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e41578181015183820152602001611e29565b50505050905090810190601f168015611e6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611ed35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e41578181015183820152602001611e29565b506000838581611edf57fe5b0495945050505050565b50805460008255906000526020600020908101906115ff91906119e591905b80821115611f1c5760008155600101611f08565b509056fe746865206e657743616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c656e65772068656164657252656c61796572526577617264526174654d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2068656164657252656c617965725265776172645261746544656e6f6d696e61746f726e65772063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2063616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f726c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7768656164657252656c617965725265776172645261746544656e6f6d696e61746f72746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374636f6e747261637420686173206e6f74206265656e20696e697469616c697a6564746865206e65772068656164657252656c617965725265776172645261746544656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2068656164657252656c61796572526577617264526174654d6f6c6563756c65746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163746c656e677468206f662068656164657252656c61796572526577617264526174654d6f6c6563756c65206d69736d61746368a264697066735822122046aa8f3564133ae19cf0f29fe8a7ebdf2a5f74f0268c42431d82384fe137b2ed64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "6080604052600436106101c25760003560e01c806395468d26116100f7578063c81b166211610095578063f9a2bbc711610064578063f9a2bbc714610529578063fb7cfdd71461053e578063fc3e590814610553578063fd6a687914610568576101c2565b8063c81b1662146104d5578063dc927faf146104ea578063e1c7392a146104ff578063e79a198f14610514576101c2565b8063a1a11bf5116100d1578063a1a11bf5146103c7578063a78abc16146103dc578063ab51bb96146103f1578063ac43175114610406576101c2565b806395468d261461038857806396713da91461039d5780639dc09262146103b2576101c2565b8063541d55481161016457806370fd5bad1161013e57806370fd5bad1461033457806375d47a0a146103495780637942fd051461035e5780637ae2308814610373576101c2565b8063541d5548146102b15780636a87d780146102f85780636e47b4821461031f576101c2565b806343756e5c116101a057806343756e5c1461022a578063493279b11461025b5780634bf6c8821461028757806351e806721461029c576101c2565b80630bee7a67146101c75780631aa3a008146101f55780633dffc387146101ff575b600080fd5b3480156101d357600080fd5b506101dc61057d565b6040805163ffffffff9092168252519081900360200190f35b6101fd610582565b005b34801561020b57600080fd5b5061021461077d565b6040805160ff9092168252519081900360200190f35b34801561023657600080fd5b5061023f610782565b604080516001600160a01b039092168252519081900360200190f35b34801561026757600080fd5b50610270610788565b6040805161ffff9092168252519081900360200190f35b34801561029357600080fd5b5061021461078d565b3480156102a857600080fd5b5061023f610792565b3480156102bd57600080fd5b506102e4600480360360208110156102d457600080fd5b50356001600160a01b0316610798565b604080519115158252519081900360200190f35b34801561030457600080fd5b5061030d6107b6565b60408051918252519081900360200190f35b34801561032b57600080fd5b5061023f6107bc565b34801561034057600080fd5b506102146107c2565b34801561035557600080fd5b5061023f6107c7565b34801561036a57600080fd5b506102146107cd565b34801561037f57600080fd5b5061030d6107d2565b34801561039457600080fd5b5061030d6107df565b3480156103a957600080fd5b506102146107eb565b3480156103be57600080fd5b5061023f6107f0565b3480156103d357600080fd5b5061023f6107f6565b3480156103e857600080fd5b506102e46107fc565b3480156103fd57600080fd5b506101dc610805565b34801561041257600080fd5b506101fd6004803603604081101561042957600080fd5b81019060208101813564010000000081111561044457600080fd5b82018360208201111561045657600080fd5b8035906020019184600183028401116401000000008311171561047857600080fd5b91939092909160208101903564010000000081111561049657600080fd5b8201836020820111156104a857600080fd5b803590602001918460018302840111640100000000831117156104ca57600080fd5b50909250905061080a565b3480156104e157600080fd5b5061023f610c2c565b3480156104f657600080fd5b5061023f610c32565b34801561050b57600080fd5b506101fd610c38565b34801561052057600080fd5b506101fd610cba565b34801561053557600080fd5b5061023f610e73565b34801561054a57600080fd5b5061030d610e79565b34801561055f57600080fd5b50610214610e7f565b34801561057457600080fd5b5061023f610e84565b606481565b3360009081526004602052604090205460ff16156105df576040805162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e48195e1a5cdd605a1b604482015290519081900360640190fd5b60005460ff16610632576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b61063b33610e8a565b156106775760405162461bcd60e51b815260040180806020018281038252602781526020018061109c6027913960400191505060405180910390fd5b3332146106c1576040805162461bcd60e51b81526020600482015260136024820152721b9bc81c1c9bde1e481a5cc8185b1b1bddd959606a1b604482015290519081900360640190fd5b60015434146107015760405162461bcd60e51b81526004018080602001828103825260258152602001806110776025913960400191505060405180910390fd5b604080518082018252600180548252600254602080840191825233600081815260038352868120955186559251948401949094556004815290849020805460ff1916909217909155825191825291517fdb33a09d38b59a8fa8b7d92a1d82c8015e99f05f67ae9c9ae623157767959496929181900390910190a1565b600181565b61100181565b606081565b600881565b61200081565b6001600160a01b031660009081526004602052604090205460ff1690565b60025481565b61100581565b600281565b61100881565b600b81565b68056bc75e2d6310000081565b67016345785d8a000081565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff1661085d576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b336110071461089d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806110c3602e913960400191505060405180910390fd5b61090384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e1c995c5d5a5c995911195c1bdcda5d608a1b60208201529150610e909050565b15610a0657602081146109475760405162461bcd60e51b81526004018080602001828103825260228152602001806110f16022913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161098591858580838501838280828437600092019190915250610f7792505050565b90506001811180156109a05750683635c9adc5dea000008111155b80156109ad575060025481115b6109fe576040805162461bcd60e51b815260206004820181905260248201527f7468652072657175697265644465706f736974206f7574206f662072616e6765604482015290519081900360640190fd5b600155610b9a565b610a6184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260048152636475657360e01b60208201529150610e909050565b15610b5d5760208114610abb576040805162461bcd60e51b815260206004820152601760248201527f6c656e677468206f662064756573206d69736d61746368000000000000000000604482015290519081900360640190fd5b604080516020601f8401819004810282018101909252828152600091610af991858580838501838280828437600092019190915250610f7792505050565b9050600081118015610b0c575060015481105b610b55576040805162461bcd60e51b81526020600482015260156024820152747468652064756573206f7574206f662072616e676560581b604482015290519081900360640190fd5b600255610b9a565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b60005460ff1615610c90576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b68056bc75e2d63100000600190815567016345785d8a00006002556000805460ff19169091179055565b3360009081526004602052604090205460ff16610d15576040805162461bcd60e51b81526020600482015260146024820152731c995b185e595c88191bc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b60005460ff16610d68576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b610d7061105c565b5033600081815260036020908152604091829020825180840190935280548084526001909101549183018290529192916108fc91610db4919063ffffffff610f7c16565b6040518115909202916000818181858888f19350505050158015610ddc573d6000803e3d6000fd5b50602081015160405161100291829181156108fc0291906000818181858888f19350505050158015610e12573d6000803e3d6000fd5b50336000818152600460209081526040808320805460ff191690556003825280832083815560010192909255815192835290517fd17202129b83db7880d6b9f25df81c58ad46f7e0e2c92236b1aa10663a4876679281900390910190a15050565b61100081565b60015481565b600381565b61100481565b3b151590565b6000816040516020018082805190602001908083835b60208310610ec55780518252601f199092019160209182019101610ea6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610f335780518252601f199092019160209182019101610f14565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b6000610fbe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fc5565b9392505050565b600081848411156110545760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611019578181015183820152602001611001565b50505050905090810190601f1680156110465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60405180604001604052806000815260200160008152509056fe6465706f7369742076616c7565206973206e6f742065786163746c79207468652073616d65636f6e7472616374206973206e6f7420616c6c6f77656420746f20626520612072656c61796572746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662072657175697265644465706f736974206d69736d61746368a264697066735822122011778451ed6d3e3757ce2e74acfc7fa17bf5d16f07168a6ce073d7c91e583c8c64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(GovHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "608060405234801561001057600080fd5b506004361061018e5760003560e01c8063831d65d1116100de578063ab51bb9611610097578063dc927faf11610071578063dc927faf14610486578063f9a2bbc71461048e578063fc3e590814610496578063fd6a68791461049e5761018e565b8063ab51bb96146103fc578063c81b166214610404578063c8509d811461040c5761018e565b8063831d65d11461034457806396713da9146103c05780639ab1a373146103c85780639dc09262146103d0578063a1a11bf5146103d8578063a78abc16146103e05761018e565b8063493279b11161014b5780636e47b482116101255780636e47b4821461032457806370fd5bad1461032c57806375d47a0a146103345780637942fd051461033c5761018e565b8063493279b1146102f55780634bf6c8821461031457806351e806721461031c5761018e565b80630bee7a67146101935780631182b875146101b45780633a21baae146102a35780633dffc387146102ab57806343756e5c146102c95780634900c4ea146102ed575b600080fd5b61019b6104a6565b6040805163ffffffff9092168252519081900360200190f35b61022e600480360360408110156101ca57600080fd5b60ff82351691908101906040810160208201356401000000008111156101ef57600080fd5b82018360208201111561020157600080fd5b8035906020019184600183028401116401000000008311171561022357600080fd5b5090925090506104ab565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610268578181015183820152602001610250565b50505050905090810190601f1680156102955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61019b61059a565b6102b361059f565b6040805160ff9092168252519081900360200190f35b6102d16105a4565b604080516001600160a01b039092168252519081900360200190f35b6102b36105aa565b6102fd6105af565b6040805161ffff9092168252519081900360200190f35b6102b36105b4565b6102d16105b9565b6102d16105bf565b6102b36105c5565b6102d16105ca565b6102b36105d0565b6103be6004803603604081101561035a57600080fd5b60ff823516919081019060408101602082013564010000000081111561037f57600080fd5b82018360208201111561039157600080fd5b803590602001918460018302840111640100000000831117156103b357600080fd5b5090925090506105d5565b005b6102b3610667565b61019b61066c565b6102d1610671565b6102d1610677565b6103e861067d565b604080519115158252519081900360200190f35b61019b6105aa565b6102d1610686565b6103be6004803603604081101561042257600080fd5b60ff823516919081019060408101602082013564010000000081111561044757600080fd5b82018360208201111561045957600080fd5b8035906020019184600183028401116401000000008311171561047b57600080fd5b50909250905061068c565b6102d1610703565b6102d1610709565b6102b361070f565b6102d1610714565b606481565b606033612000146104ed5760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b6104f5611382565b600061053685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061071a92505050565b91509150806105525761054960646107e0565b92505050610593565b600061055d8361084a565b905063ffffffff811661058457505060408051600081526020810190915291506105939050565b61058d816107e0565b93505050505b9392505050565b606681565b600181565b61100181565b600081565b606081565b600881565b61200081565b61100581565b600281565b61100881565b600b81565b33612000146106155760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b6040805162461bcd60e51b815260206004820152601e60248201527f7265636569766520756e65787065637465642061636b207061636b6167650000604482015290519081900360640190fd5b505050565b600981565b606581565b61100781565b61100681565b60005460ff1681565b61100281565b33612000146106cc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b60405162461bcd60e51b81526004018080602001828103825260238152602001806114166023913960400191505060405180910390fd5b61100381565b61100081565b600381565b61100481565b610722611382565b600061072c611382565b6107346113ac565b61074561074086610beb565b610c10565b90506000805b61075483610c5a565b156107d357806107765761076f61076a84610c7b565b610cc9565b84526107cb565b80600114156107955761078b61076a84610c7b565b60208501526107cb565b80600214156107c6576107af6107aa84610c7b565b610d42565b6001600160a01b03166040850152600191506107cb565b6107d3565b60010161074b565b5091935090915050915091565b604080516001808252818301909252606091829190816020015b60608152602001906001900390816107fa5790505090506108208363ffffffff16610d62565b8160008151811061082d57fe5b602002602001018190525061084181610d75565b9150505b919050565b60006108598260400151610dff565b6108c557604080516020808252601c908201527f74686520746172676574206973206e6f74206120636f6e7472616374000000008183015290517f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb29181900360600190a1506065610845565b81604001516001600160a01b031663ac431751836000015184602001516040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561093257818101518382015260200161091a565b50505050905090810190601f16801561095f5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561099257818101518382015260200161097a565b50505050905090810190601f1680156109bf5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156109e057600080fd5b505af19250505080156109f1575060015b610be3576040516000815260443d1015610a0d57506000610aaa565b60046000803e60005160e01c6308c379a08114610a2e576000915050610aaa565b60043d036004833e81513d602482011167ffffffffffffffff82111715610a5a57600092505050610aaa565b808301805167ffffffffffffffff811115610a7c576000945050505050610aaa565b8060208301013d8601811115610a9a57600095505050505050610aaa565b601f01601f191660405250925050505b80610ab55750610b58565b7f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b14578181015183820152602001610afc565b50505050905090810190601f168015610b415780820380516001836020036101000a031916815260200191505b509250505060405180910390a16066915050610845565b3d808015610b82576040519150601f19603f3d011682016040523d82523d6000602084013e610b87565b606091505b5060408051602080825283518183015283517f1279f84165b4fd69c35e1f338ff107231b036c655cd1688851e011ce617c4e8d938593928392918301919085019080838360008315610b14578181015183820152602001610afc565b506000919050565b610bf36113cc565b506040805180820190915281518152602082810190820152919050565b610c186113ac565b610c2182610e05565b610c2a57600080fd5b6000610c398360200151610e3f565b60208085015160408051808201909152868152920190820152915050919050565b6000610c646113cc565b505080518051602091820151919092015191011190565b610c836113cc565b610c8c82610c5a565b610c9557600080fd5b60208201516000610ca582610ea2565b80830160209586015260408051808201909152908152938401919091525090919050565b8051606090610cd757600080fd5b6000610ce68360200151610e3f565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015610d1d576020820181803683370190505b5090506000816020019050610d39848760200151018285610fd5565b50949350505050565b8051600090601514610d5357600080fd5b610d5c82611020565b92915050565b6060610d5c610d70836110d5565b6111bb565b6060815160001415610d965750604080516000815260208101909152610845565b606082600081518110610da557fe5b602002602001015190506000600190505b8351811015610de657610ddc82858381518110610dcf57fe5b602002602001015161120d565b9150600101610db6565b50610841610df9825160c060ff1661128a565b8261120d565b3b151590565b8051600090610e1657506000610845565b6020820151805160001a9060c0821015610e3557600092505050610845565b5060019392505050565b8051600090811a6080811015610e59576000915050610845565b60b8811080610e74575060c08110801590610e74575060f881105b15610e83576001915050610845565b60c0811015610e975760b519019050610845565b60f519019050610845565b80516000908190811a6080811015610ebd5760019150610fce565b60b8811015610ed257607e1981019150610fce565b60c0811015610f4c57600060b78203600186019550806020036101000a865104915060018101820193505080831015610f46576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50610fce565b60f8811015610f615760be1981019150610fce565b600060f78203600186019550806020036101000a865104915060018101820193505080831015610fcc576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b80610fdf57610662565b5b60208110610fff578251825260209283019290910190601f1901610fe0565b915181516020939093036101000a6000190180199091169216919091179052565b80516000901580159061103557508151602110155b61103e57600080fd5b600061104d8360200151610e3f565b905080836000015110156110a8576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015610d3957506020919091036101000a90049392505050565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166111195750601861113d565b6fffffffffffffffffffffffffffffffff1984166111395750601061113d565b5060005b60208110156111735781818151811061115257fe5b01602001516001600160f81b0319161561116b57611173565b60010161113d565b60008160200390506060816040519080825280601f01601f1916602001820160405280156111a8576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156111ed5750607f60f81b826000815181106111db57fe5b01602001516001600160f81b03191611155b156111f9575080610845565b610d5c61120b8351608060ff1661128a565b835b6060806040519050835180825260208201818101602087015b8183101561123e578051835260209283019201611226565b50855184518101855292509050808201602086015b8183101561126b578051835260209283019201611253565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106112da576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116113345782840160f81b8160008151811061131657fe5b60200101906001600160f81b031916908160001a9053509050610d5c565b606061133f856110d5565b90508381510160370160f81b8260008151811061135857fe5b60200101906001600160f81b031916908160001a905350611379828261120d565b95945050505050565b6040518060600160405280606081526020016060815260200160006001600160a01b031681525090565b60405180604001604052806113bf6113cc565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163747265636569766520756e6578706563746564206661696c2061636b207061636b616765a2646970667358221220ea2b2b402a564a222b3f3e7c0f671622652543c9c5f6cb6c7b8db265ae9ebe4564736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "6080604052600436106102465760003560e01c806375d47a0a11610139578063ab51bb96116100b6578063dc6f5e901161007a578063dc6f5e90146108df578063dc927faf14610975578063f9a2bbc71461098a578063fc3e5908146108df578063fd6a68791461099f578063fe3a2af5146104fd57610246565b8063ab51bb96146108b5578063c81b1662146108ca578063c8509d81146107c5578063c8e704a4146108df578063d117a110146108f457610246565b806395b9ad26116100fd57806395b9ad261461084c57806396713da9146108615780639dc0926214610876578063a1a11bf51461088b578063a78abc16146108a057610246565b806375d47a0a146106e757806377d9dae8146106fc5780637942fd05146107b05780637d078e13146103c8578063831d65d1146107c557610246565b80634a688818116101c75780635f558f861161018b5780635f558f86146105515780636b3f1307146105665780636e47b4821461062e57806370fd5bad1461055157806372c4e0861461064357610246565b80634a688818146104fd5780634bc81c00146105125780634bf6c8821461024b57806351e80672146105275780635d499b1b1461053c57610246565b806323996b531161020e57806323996b53146103c85780633dffc387146103c857806343756e5c146103dd578063445fcefe1461040e578063493279b1146104d157610246565b8063077b8f351461024b5780630bee7a67146102765780630f212b1b146102a45780631182b875146102b95780631f91600b146103b3575b600080fd5b34801561025757600080fd5b506102606109b4565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b5061028b6109b9565b6040805163ffffffff9092168252519081900360200190f35b3480156102b057600080fd5b506102606109be565b3480156102c557600080fd5b5061033e600480360360408110156102dc57600080fd5b60ff8235169190810190604081016020820135600160201b81111561030057600080fd5b82018360208201111561031257600080fd5b803590602001918460018302840111600160201b8311171561033357600080fd5b5090925090506109c3565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b50610260610a4c565b3480156103d457600080fd5b50610260610a51565b3480156103e957600080fd5b506103f2610a56565b604080516001600160a01b039092168252519081900360200190f35b34801561041a57600080fd5b506104bf6004803603602081101561043157600080fd5b810190602081018135600160201b81111561044b57600080fd5b82018360208201111561045d57600080fd5b803590602001918460018302840111600160201b8311171561047e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a5c945050505050565b60408051918252519081900360200190f35b3480156104dd57600080fd5b506104e6610bbb565b6040805161ffff9092168252519081900360200190f35b34801561050957600080fd5b50610260610bc0565b34801561051e57600080fd5b50610260610bc5565b34801561053357600080fd5b506103f2610bca565b34801561054857600080fd5b506104bf610bd0565b34801561055d57600080fd5b50610260610bd9565b61061a6004803603604081101561057c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105a657600080fd5b8201836020820111156105b857600080fd5b803590602001918460018302840111600160201b831117156105d957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bde945050505050565b604080519115158252519081900360200190f35b34801561063a57600080fd5b506103f2611460565b61061a6004803603602081101561065957600080fd5b810190602081018135600160201b81111561067357600080fd5b82018360208201111561068557600080fd5b803590602001918460018302840111600160201b831117156106a657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611466945050505050565b3480156106f357600080fd5b506103f26118b4565b61061a6004803603604081101561071257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561073c57600080fd5b82018360208201111561074e57600080fd5b803590602001918460018302840111600160201b8311171561076f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118ba945050505050565b3480156107bc57600080fd5b50610260611dc1565b3480156107d157600080fd5b5061084a600480360360408110156107e857600080fd5b60ff8235169190810190604081016020820135600160201b81111561080c57600080fd5b82018360208201111561081e57600080fd5b803590602001918460018302840111600160201b8311171561083f57600080fd5b509092509050611dc6565b005b34801561085857600080fd5b50610260611e79565b34801561086d57600080fd5b50610260611e7e565b34801561088257600080fd5b506103f2611e83565b34801561089757600080fd5b506103f2611e89565b3480156108ac57600080fd5b5061061a611e8f565b3480156108c157600080fd5b5061028b610bc0565b3480156108d657600080fd5b506103f2611e98565b3480156108eb57600080fd5b50610260611e9e565b34801561090057600080fd5b5061091e6004803603602081101561091757600080fd5b5035611ea3565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a083015267ffffffffffffffff90921660c082015290519081900360e00190f35b34801561098157600080fd5b506103f2611efb565b34801561099657600080fd5b506103f2611f01565b3480156109ab57600080fd5b506103f2611f07565b600881565b606481565b600681565b60603361200014610a055760405162461bcd60e51b815260040180806020018281038252602f8152602001806132a0602f913960400191505060405180910390fd5b610a4483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f0d92505050565b949350505050565b600481565b600181565b61100181565b6020810151600090610a6c613168565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a082015261010090910467ffffffffffffffff1660c082015290610af457600092505050610bb6565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610b5257600080fd5b505afa158015610b66573d6000803e3d6000fd5b505050506040513d6020811015610b7c57600080fd5b505160808301516060840151919250600091610b9d9163ffffffff61219e16565b9050610baf818363ffffffff61219e16565b9450505050505b919050565b606081565b600081565b600581565b61200081565b6402540be40081565b600281565b600080610bea836121e7565b9050610bf4613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152610cba576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b6000610cd78260800151836060015161219e90919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b031614610d2d5760405162461bcd60e51b815260040180806020018281038252604581526020018061322d6045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50516001600160a01b031614610de15760405162461bcd60e51b815260040180806020018281038252602e815260200180613272602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b158015610e2d57600080fd5b505afa158015610e41573d6000803e3d6000fd5b505050506040513d6020811015610e5757600080fd5b505160408051636eb1769f60e11b815233600482015230602482015290519192508391610ee89184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50519063ffffffff6121ee16565b1015610f3b576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7d57600080fd5b505afa158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b50519050808210801590610fc057506402540be4008206155b610ffb5760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b6000611007868b612248565b905063ffffffff8116611206576001600160a01b038a166323b872dd33611004611037898963ffffffff61219e16565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561109f57600080fd5b505af11580156110b3573d6000803e3d6000fd5b505050506040513d60208110156110c957600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b15801561113257600080fd5b505af1158015611146573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156111c55781810151838201526020016111ad565b50505050905090810190601f1680156111f25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26112be565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561128257818101518382015260200161126a565b50505050905090810190601f1680156112af5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556113186131a4565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611360573d6000803e3d6000fd5b5061200063f7a251d760016113748461269f565b611389886402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156113e75781810151838201526020016113cf565b50505050905090810190601f1680156114145780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561143557600080fd5b505af1158015611449573d6000803e3d6000fd5b505050506001985050505050505050505b92915050565b61100581565b600080611472836121e7565b905061147c613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152611542576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c0015167ffffffffffffffff16106115a4576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e657600080fd5b505afa1580156115fa573d6000803e3d6000fd5b505050506040513d602081101561161057600080fd5b5051905080821080159061162957506402540be4008206155b6116645760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556116be6131a4565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f19350505050158015611701573d6000803e3d6000fd5b5061200063f7a251d760016117158461269f565b61172a876402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611788578181015183820152602001611770565b50505050905090810190601f1680156117b55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156117d657600080fd5b505af11580156117ea573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561186c578181015183820152602001611854565b50505050905090810190601f1680156118995780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806118c6836121e7565b90506118d0613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152611996576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146119ea5760405162461bcd60e51b815260040180806020018281038252604581526020018061322d6045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d6020811015611a5757600080fd5b50516001600160a01b031614611ab4576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703265206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611af657600080fd5b505afa158015611b0a573d6000803e3d6000fd5b505050506040513d6020811015611b2057600080fd5b50519050808210801590611b3957506402540be4008206155b611b745760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611bce6131a4565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f19350505050158015611c11573d6000803e3d6000fd5b5061200063f7a251d76001611c258461269f565b611c3a876402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611c98578181015183820152602001611c80565b50505050905090810190601f168015611cc55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611ce657600080fd5b505af1158015611cfa573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611d78578181015183820152602001611d60565b50505050905090810190601f168015611da55780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b3361200014611e065760405162461bcd60e51b815260040180806020018281038252602f8152602001806132a0602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b600781565b600981565b61100781565b61100681565b60005460ff1681565b61100281565b600381565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b0390931693919291811690610100900467ffffffffffffffff1687565b61100381565b61100081565b61100481565b6060611f17613168565b6000611f228461276b565b9150915080611f78576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff1661202c576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff00191661010067ffffffffffffffff90921691909102179055612183565b815160ff16600114156121365760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561208557600080fd5b505afa158015612099573d6000803e3d6000fd5b505050506040513d60208110156120af57600080fd5b505190506001600160a01b038116156121305760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561211757600080fd5b505af115801561212b573d6000803e3d6000fd5b505050505b50612183565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b60006121e083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128bd565b9392505050565b6020015190565b6000828201838110156121e0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561228457600080fd5b505afa158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b5051604080516395d89b4160e01b815290519192506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b1580156122f657600080fd5b505afa15801561230a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561233357600080fd5b8101908080516040519392919084600160201b82111561235257600080fd5b90830190602082018581111561236757600080fd5b8251600160201b81118282018810171561238057600080fd5b82525081516020918201929091019080838360005b838110156123ad578181015183820152602001612395565b50505050905090810190601f1680156123da5780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b15801561242a57600080fd5b505afa15801561243e573d6000803e3d6000fd5b505050506040513d602081101561245457600080fd5b5051608087015160608801519192506000916124759163ffffffff61219e16565b9050428760c0015167ffffffffffffffff16101561249b57506001935061145a92505050565b6124a9838860200151612954565b6124bb57506002935061145a92505050565b808211156124d157506003935061145a92505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561251357600080fd5b505afa158015612527573d6000803e3d6000fd5b505050506040513d602081101561253d57600080fd5b50511461255257506004935061145a92505050565b8660a0015160ff16841461256e57506005935061145a92505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b1580156125b357600080fd5b505afa1580156125c7573d6000803e3d6000fd5b505050506040513d60208110156125dd57600080fd5b50516001600160a01b031614158061267f57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561265057600080fd5b505afa158015612664573d6000803e3d6000fd5b505050506040513d602081101561267a57600080fd5b505114155b1561269257506006935061145a92505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b60608152602001906001900390816126b857505083519091506126e09063ffffffff16612a3c565b816000815181106126ed57fe5b6020026020010181905250612708836020015160001c612a3c565b8160018151811061271557fe5b60200260200101819052506121e081612a4f565b60006121e083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ad9565b612773613168565b600061277d613168565b6127856131bb565b61279661279186612b3e565b612b63565b90506000805b6127a583612bad565b156128b057806127ca576127c06127bb84612bce565b612c1c565b60ff1684526128a8565b80600114156127e9576127df6127bb84612bce565b60208501526128a8565b8060021415612816576128036127fe84612bce565b612cd1565b6001600160a01b031660408501526128a8565b80600314156128355761282b6127bb84612bce565b60608501526128a8565b80600414156128545761284a6127bb84612bce565b60808501526128a8565b8060051415612876576128696127bb84612bce565b60ff1660a08501526128a8565b80600614156128a35761288b6127bb84612bce565b67ffffffffffffffff1660c0850152600191506128a8565b6128b0565b60010161279c565b5091935090915050915091565b6000818484111561294c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129115781810151838201526020016128f9565b50505050905090810190601f16801561293e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b815160009083906008108061296a575080516003115b1561297957600091505061145a565b604080516020808252818301909252606091602082018180368337019050509050836020820152808251815181106129ad57fe5b6020910101516001600160f81b031916602d60f81b146129d25760009250505061145a565b600160005b8351811015612a32578281815181106129ec57fe5b602001015160f81c60f81b6001600160f81b031916848281518110612a0d57fe5b01602001516001600160f81b03191614612a2a5760009150612a32565b6001016129d7565b5095945050505050565b606061145a612a4a83612ceb565b612dd1565b6060815160001415612a705750604080516000815260208101909152610bb6565b606082600081518110612a7f57fe5b602002602001015190506000600190505b8351811015612ac057612ab682858381518110612aa957fe5b6020026020010151612e23565b9150600101612a90565b506121e0612ad3825160c060ff16612ea0565b82612e23565b60008183612b285760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129115781810151838201526020016128f9565b506000838581612b3457fe5b0495945050505050565b612b466131db565b506040805180820190915281518152602082810190820152919050565b612b6b6131bb565b612b7482612f98565b612b7d57600080fd5b6000612b8c8360200151612fd2565b60208085015160408051808201909152868152920190820152915050919050565b6000612bb76131db565b505080518051602091820151919092015191011190565b612bd66131db565b612bdf82612bad565b612be857600080fd5b60208201516000612bf882613035565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612c3157508151602110155b612c3a57600080fd5b6000612c498360200151612fd2565b90508083600001511015612ca4576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b82516020808501518301805192849003929183101561219557506020919091036101000a90049392505050565b8051600090601514612ce257600080fd5b61145a82612c1c565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416612d2f57506018612d53565b6fffffffffffffffffffffffffffffffff198416612d4f57506010612d53565b5060005b6020811015612d8957818181518110612d6857fe5b01602001516001600160f81b03191615612d8157612d89565b600101612d53565b60008160200390506060816040519080825280601f01601f191660200182016040528015612dbe576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015612e035750607f60f81b82600081518110612df157fe5b01602001516001600160f81b03191611155b15612e0f575080610bb6565b61145a612e218351608060ff16612ea0565b835b6060806040519050835180825260208201818101602087015b81831015612e54578051835260209283019201612e3c565b50855184518101855292509050808201602086015b81831015612e81578051835260209283019201612e69565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310612ef0576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411612f4a5782840160f81b81600081518110612f2c57fe5b60200101906001600160f81b031916908160001a905350905061145a565b6060612f5585612ceb565b90508381510160370160f81b82600081518110612f6e57fe5b60200101906001600160f81b031916908160001a905350612f8f8282612e23565b95945050505050565b8051600090612fa957506000610bb6565b6020820151805160001a9060c0821015612fc857600092505050610bb6565b5060019392505050565b8051600090811a6080811015612fec576000915050610bb6565b60b8811080613007575060c08110801590613007575060f881105b15613016576001915050610bb6565b60c081101561302a5760b519019050610bb6565b60f519019050610bb6565b80516000908190811a60808110156130505760019150613161565b60b881101561306557607e1981019150613161565b60c08110156130df57600060b78203600186019550806020036101000a8651049150600181018201935050808310156130d9576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50613161565b60f88110156130f45760be1981019150613161565b600060f78203600186019550806020036101000a86510491506001810182019350508083101561315f576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b60405180604001604052806131ce6131db565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe72656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e6420726571756573746f6e6c79206265703265206f776e65722063616e20617070726f766520746869732062696e642072657175657374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374a2646970667358221220f5905eb90e4a072fe66973705300bc7792e1c43c73c571a09629b9153e6b871864736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(CrossChainContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "608060405234801561001057600080fd5b50600436106102485760003560e01c8063863fe4ab1161013b578063c81b1662116100b8578063e3b048051161007c578063e3b048051461072c578063f7a251d71461074c578063f9a2bbc7146107c4578063fc3e5908146107cc578063fd6a6879146107d457610248565b8063c81b1662146106dd578063d31f968d146106e5578063d76a867514610714578063dc927faf1461071c578063e1c7392a1461072457610248565b8063a78abc16116100ff578063a78abc16146105d3578063ab51bb96146105db578063ac431751146105e3578063b0355f5b146103ff578063c27cdcfb146106a157610248565b8063863fe4ab146105b35780638cc8f561146104b657806396713da9146105bb5780639dc09262146105c3578063a1a11bf5146105cb57610248565b8063493279b1116101c957806370fd5bad1161018d57806370fd5bad146104b657806374f079b8146104be57806375d47a0a146104c65780637942fd05146104ce57806384013b6a146104d657610248565b8063493279b11461045f5780634bf6c8821461047e57806351e80672146104865780636e47a51a1461048e5780636e47b482146104ae57610248565b8063308325f411610210578063308325f4146102cf5780633bdc47a6146102d75780633dffc387146103ff578063422f90501461040757806343756e5c1461043b57610248565b806305e682581461024d5780630bee7a671461026b57806314b3023b1461028c57806322556cdc146102a65780632ff32aea146102ae575b600080fd5b6102556107dc565b6040805160ff9092168252519081900360200190f35b6102736107e1565b6040805163ffffffff9092168252519081900360200190f35b6102946107e6565b60408051918252519081900360200190f35b6102946107ec565b6102b66107f1565b60408051600792830b90920b8252519081900360200190f35b6102946107fa565b61038a600480360360608110156102ed57600080fd5b60ff82351691602081013591810190606081016040820135600160201b81111561031657600080fd5b82018360208201111561032857600080fd5b803590602001918460018302840111600160201b8311171561034957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610800945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103c45781810151838201526020016103ac565b50505050905090810190601f1680156103f15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610255610876565b6104276004803603602081101561041d57600080fd5b503560ff1661087b565b604080519115158252519081900360200190f35b610443610890565b604080516001600160a01b039092168252519081900360200190f35b610467610896565b6040805161ffff9092168252519081900360200190f35b61025561089b565b6104436108a0565b610443600480360360208110156104a457600080fd5b503560ff166108a6565b6104436108c1565b6102556108c7565b6102946108cc565b6104436108d2565b6102556108d8565b6105b1600480360360a08110156104ec57600080fd5b810190602081018135600160201b81111561050657600080fd5b82018360208201111561051857600080fd5b803590602001918460018302840111600160201b8311171561053957600080fd5b919390929091602081019035600160201b81111561055657600080fd5b82018360208201111561056857600080fd5b803590602001918460018302840111600160201b8311171561058957600080fd5b919350915080356001600160401b03908116916020810135909116906040013560ff166108dd565b005b610294611a8d565b610255611a95565b610443611a9a565b610443611aa0565b610427611aa6565b6102736107dc565b6105b1600480360360408110156105f957600080fd5b810190602081018135600160201b81111561061357600080fd5b82018360208201111561062557600080fd5b803590602001918460018302840111600160201b8311171561064657600080fd5b919390929091602081019035600160201b81111561066357600080fd5b82018360208201111561067557600080fd5b803590602001918460018302840111600160201b8311171561069657600080fd5b509092509050611aaf565b6106c1600480360360208110156106b757600080fd5b503560ff16612051565b604080516001600160401b039092168252519081900360200190f35b61044361206c565b610427600480360360408110156106fb57600080fd5b5080356001600160a01b0316906020013560ff16612072565b61038a612092565b6104436120b1565b6105b16120b7565b6106c16004803603602081101561074257600080fd5b503560ff1661246e565b6105b16004803603606081101561076257600080fd5b60ff8235169190810190604081016020820135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111600160201b831117156107b957600080fd5b919350915035612489565b6104436125da565b6102556125e0565b6104436125e5565b600081565b606481565b60015481565b603281565b60045460070b81565b60025481565b60606000825160210190506060816040519080825280601f01601f191660200182016040528015610838576020820181803683370190505b506021810186905260018101879052828152905060418101600061085b866125eb565b50905061086a818388516125f5565b50909695505050505050565b600181565b60096020526000908152604090205460ff1681565b61100181565b606081565b600881565b61200081565b6005602052600090815260409020546001600160a01b031681565b61100581565b600281565b60035481565b61100881565b600b81565b60005460ff16610930576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b15801561096f57600080fd5b505afa158015610983573d6000803e3d6000fd5b505050506040513d602081101561099957600080fd5b50516109ec576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b60ff8116600090815260086020526040902054829082906001600160401b039081169083168114610a5c576040805162461bcd60e51b815260206004820152601560248201527439b2b8bab2b731b2903737ba1034b71037b93232b960591b604482015290519081900360640190fd5b60ff8216600090815260086020908152604091829020805467ffffffffffffffff1916600185016001600160401b039081169190911790915582516337d7f9c160e21b81529089166004820152915188926110039263df5fe70492602480840193829003018186803b158015610ad157600080fd5b505afa158015610ae5573d6000803e3d6000fd5b505050506040513d6020811015610afb57600080fd5b5051610b385760405162461bcd60e51b8152600401808060200182810382526023815260200180612bcc6023913960400191505060405180910390fd5b60ff851660009081526005602052604090205485906001600160a01b0316610ba7576040805162461bcd60e51b815260206004820152601860248201527f6368616e6e656c206973206e6f7420737570706f727465640000000000000000604482015290519081900360640190fd5b60608c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905060608b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805163cba510a960e01b81526001600160401b038f1660048201529051939450610cce93611003935063cba510a992506024808301926020929190829003018186803b158015610c7757600080fd5b505afa158015610c8b573d6000803e3d6000fd5b505050506040513d6020811015610ca157600080fd5b505160408051808201909152600381526269626360e81b6020820152610cc78c8c612636565b858561267d565b610d16576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b60408051631bb5062960e31b81526001600160401b038c16600482015290516000916110039163dda8314891602480820192602092909190829003018186803b158015610d6257600080fd5b505afa158015610d76573d6000803e3d6000fd5b505050506040513d6020811015610d8c57600080fd5b5051905088600080806060610da08861277a565b935093509350935083610e61578460ff168f6001600160401b03167ff7b2e42d694eb1100184aae86d4245d9e46966100b1dc7e723275b98326854ac8a6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e1a578181015183820152602001610e02565b50505050905090810190601f168015610e475780820380516001836020036101000a031916815260200191505b509250505060405180910390a35050505050505050611a7f565b8460ff168f6001600160401b03167f36afdaf439a8f43fe72135135d804ae620b37a474f0943b5b85f6788312cad4085604051808260ff1660ff16815260200191505060405180910390a360ff83166113ea5760ff85166000818152600560209081526040808320548151631182b87560e01b815260048101958652602481019283528651604482015286516001600160a01b03909216958695631182b875958d958a9593949093606490910192918601918190849084905b83811015610f32578181015183820152602001610f1a565b50505050905090810190601f168015610f5f5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610f7f57600080fd5b505af192505050801561106357506040513d6000823e601f3d908101601f191682016040526020811015610fb257600080fd5b8101908080516040519392919084600160201b821115610fd157600080fd5b908301906020820185811115610fe657600080fd5b8251600160201b811182820188101715610fff57600080fd5b82525081516020918201929091019080838360005b8381101561102c578181015183820152602001611014565b50505050905090810190601f1680156110595780820380516001836020036101000a031916815260200191505b5060405250505060015b611375576040516000815260443d101561107f5750600061111a565b60046000803e60005160e01c6308c379a081146110a057600091505061111a565b60043d036004833e81513d60248201116001600160401b03821117156110cb5760009250505061111a565b80830180516001600160401b038111156110ec57600094505050505061111a565b8060208301013d860181111561110a5760009550505050505061111a565b601f01601f191660405250925050505b806111255750611237565b60ff871660009081526007602052604081205461115c916001600160401b039091169089906111579060029088610800565b61282a565b60ff8716600090815260076020908152604080832080546001600160401b038082166001011667ffffffffffffffff19909116179055805182815284518184015284516001600160a01b038716947ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf948794849390840192918601918190849084905b838110156111f75781810151838201526020016111df565b50505050905090810190601f1680156112245780820380516001836020036101000a031916815260200191505b509250505060405180910390a250611370565b3d808015611261576040519150601f19603f3d011682016040523d82523d6000602084013e611266565b606091505b5060ff8716600090815260076020526040812054611299916001600160401b039091169089906111579060029088610800565b60ff8716600090815260076020908152604080832080546001600160401b038082166001011667ffffffffffffffff19909116179055805182815284518184015284516001600160a01b038716947f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351948794849390840192918601918190849084905b8381101561133457818101518382015260200161131c565b50505050905090810190601f1680156113615780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b6113e4565b8051156113e25760ff87166000908152600760205260408120546113ae916001600160401b039091169089906111579060019086610800565b60ff8716600090815260076020526040902080546001600160401b038082166001011667ffffffffffffffff199091161790555b505b506119b8565b60ff83166001141561168e5760ff8516600081815260056020908152604080832054815163831d65d160e01b815260048101958652602481019283528651604482015286516001600160a01b0390921695869563831d65d1958d958a9593949093606490910192918601918190849084905b8381101561147457818101518382015260200161145c565b50505050905090810190601f1680156114a15780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156114c157600080fd5b505af19250505080156114d2575060015b6113e4576040516000815260443d10156114ee57506000611589565b60046000803e60005160e01c6308c379a0811461150f576000915050611589565b60043d036004833e81513d60248201116001600160401b038211171561153a57600092505050611589565b80830180516001600160401b0381111561155b576000945050505050611589565b8060208301013d860181111561157957600095505050505050611589565b601f01601f191660405250925050505b8061159457506115f9565b60408051602080825283518183015283516001600160a01b038616937ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf93869390928392830191850190808383600083156111f75781810151838201526020016111df565b3d808015611623576040519150601f19603f3d011682016040523d82523d6000602084013e611628565b606091505b5060408051602080825283518183015283516001600160a01b038616937f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351938693909283928301918501908083836000831561133457818101518382015260200161131c565b60ff8316600214156119b85760ff8516600081815260056020908152604080832054815163c8509d8160e01b815260048101958652602481019283528651604482015286516001600160a01b0390921695869563c8509d81958d958a9593949093606490910192918601918190849084905b83811015611718578181015183820152602001611700565b50505050905090810190601f1680156117455780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561176557600080fd5b505af1925050508015611776575060015b6119b6576040516000815260443d10156117925750600061182d565b60046000803e60005160e01c6308c379a081146117b357600091505061182d565b60043d036004833e81513d60248201116001600160401b03821117156117de5760009250505061182d565b80830180516001600160401b038111156117ff57600094505050505061182d565b8060208301013d860181111561181d5760009550505050505061182d565b601f01601f191660405250925050505b8061183857506118e1565b816001600160a01b03167ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf826040518080602001828103825283818151815260200191508051906020019080838360005b838110156118a1578181015183820152602001611889565b50505050905090810190601f1680156118ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2506119b6565b3d80801561190b576040519150601f19603f3d011682016040523d82523d6000602084013e611910565b606091505b50816001600160a01b03167f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561197a578181015183820152602001611962565b50505050905090810190601f1680156119a75780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b505b60ff80861660009081526009602052604090205461100591636f93d2e69189913391879116806119ea575060ff881615155b604080516001600160e01b031960e088901b1681526001600160a01b039586166004820152939094166024840152604483019190915215156064820152905160848083019260209291908290030181600087803b158015611a4a57600080fd5b505af1158015611a5e573d6000803e3d6000fd5b505050506040513d6020811015611a7457600080fd5b505050505050505050505b505050505050505050505050565b630100600081565b600981565b61100781565b61100681565b60005460ff1681565b3361100714611aef5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b22602e913960400191505060405180910390fd5b611b5884848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526012815271626174636853697a65466f724f7261636c6560701b602082015291506129809050565b15611bf357604080516020601f8401819004810282018101909252828152600091611b9b91858580838501838280828437600092019190915250612a6792505050565b90506127108111158015611bb05750600a8110155b611beb5760405162461bcd60e51b8152600401808060200182810382526032815260200180612b9a6032913960400191505060405180910390fd5b600155611fbf565b611c5c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601281527118591913dc955c19185d1950da185b9b995b60721b602082015291506129809050565b15611de457606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060169091149050611cdf5760405162461bcd60e51b815260040180806020018281038252605a815260200180612ac8605a913960600191505060405180910390fd5b60018101516002820151601683015160ff82161590611cfd81612a6c565b611d4e576040805162461bcd60e51b815260206004820152601960248201527f61646472657373206973206e6f74206120636f6e747261637400000000000000604482015290519081900360640190fd5b60ff8416600081815260056020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600683528184208585528352818420805460ff199081166001179091556009909352818420805490931687151517909255519092917f7e3b6af43092577ee20e60eaa1d9b114a7031305c895ee7dd3ffe17196d2e1e091a35050505050611fbf565b611e5184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526016815275195b98589b1953dc911a5cd8589b1950da185b9b995b60521b602082015291506129809050565b15611f8257606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060029091149050611ed45760405162461bcd60e51b815260040180806020018281038252604a815260200180612b50604a913960600191505060405180910390fd5b600181810151600283015160ff80831660009081526005602052604090205492939192908316909114906001600160a01b03168015611f78576001600160a01b038116600090815260066020908152604080832060ff881680855290835292819020805460ff1916861515908117909155815190815290517fa3132e3f9819fbddc7f0ed6d38d7feef59aa95112090b7c592f5cb5bc4aa4adc929181900390910190a25b5050505050611fbf565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b6008602052600090815260409020546001600160401b031681565b61100281565b600660209081526000928352604080842090915290825290205460ff1681565b6040518060400160405280600381526020016269626360e81b81525081565b61100381565b60005460ff161561210f576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b7f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b80546001600160a01b0319908116611008179091557f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36805460ff199081169091557fd8af288fc1c8680b4f4706064cf021e264efb6828fcaf7eb5ca36818eb365bcc8054821660019081179091557f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a805484166110049081179091557f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38054841690557f72e4efa1513b071517c6c74dba31b5934a81aa83cddd400e7081df5529c9943680548416831790557fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc08054851690911790557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e78054831690557f4e523af77f034e9810f1c94057f5e931fb3d16a51511a4c3add793617d18610580548316821790557ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e805484166110001790557fc7694af312c4f286114180fd0ba6a52461fcee8a381636770b19a343af92538a80548316821790557f01112dd68e482ba8d68a7e828cff8b3abcea08eab88941953c180a7e650e9cd480548316821790557fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe1805484166110071790557f87e8a52529e8ece4ef759037313542a6429ff494a9fab9027fb79db90124eba680548316821790557f4c7666bbcb22d46469f7cc282f70764a7012dca2cce630ff8d83db9a9cdd48f080548316821790557f40f28f99a40bc9f6beea1013afdbc3cdcc689eb76b82c4de06c0acf1e1932ed58054909316611001179092557f0d9cf2cd531699eed8dd34e40ff2884a14a698c4898184fba85194e6f6772d248054821683179055600b60009081527f23f68c9bd22b8a93d06adabe17481c87c016bcbd20adc8bfd707a4d813a572176020527fdf0d5d05428057f5455c2dc8e810dd86d1e9350faa72f16bda8a45443c5b39328054831684179055603283556004805467ffffffffffffffff19166001600160401b031790556002819055600381905580549091169091179055565b6007602052600090815260409020546001600160401b031681565b60005460ff166124dc576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b33600090815260066020908152604080832060ff80891685529252909120548591166125395760405162461bcd60e51b8152600401808060200182810382526031815260200180612a976031913960400191505060405180910390fd5b60ff85166000908152600760209081526040808320548151601f88018490048402810184019092528682526001600160401b03169261259e9284928a9261115792909189918c908c908190840183828082843760009201919091525061080092505050565b60ff959095166000908152600760205260409020805467ffffffffffffffff191660019096016001600160401b03169590951790945550505050565b61100081565b600381565b61100481565b8051602090910191565b5b60208110612615578251825260209283019290910190601f19016125f6565b915181516020939093036101000a6000190180199091169216919091179052565b60408051600e808252818301909252606091630100600060ff851617918391602082018180368337505050600e818101969096526006810192909252509283525090919050565b60008561268c57506000612771565b606082518451865160800101016040519080825280601f01601f1916602001820160405280156126c3576020820181803683370190505b50905060006126d182612a72565b6020808901518252019050866000806126e9896125eb565b80865260209095019490925090506127028285836125f5565b9283019261270f886125eb565b80865260209095019490925090506127288285836125f5565b9283018a81526020019261273b876125eb565b909250905061274b8285836125f5565b508351602001612759612a78565b60208183886065600019fa5051600114955050505050505b95945050505050565b600080600060606021855110156127aa575050604080516000808252602082019092529092508291508190612823565b600185015160218601518651604080516020198301808252601f19600119909401939093168101602001909152604189019392916060919080156127f5576020820181803683370190505b5090506000612803826125eb565b509050612815858260218d51036125f5565b506001975091955093509150505b9193509193565b600254431115612869576004805467ffffffffffffffff1981166001600160401b036001600793840b810190930b1617909155600355436002556128aa565b600380546001908101918290555410156128aa576004805467ffffffffffffffff1981166001600160401b036001600793840b810190930b16179091556003555b8160ff16836001600160401b0316600460009054906101000a900460070b6001600160401b03167f3a6e0fc61675aa2a100bcba0568368bb92bcec91c97673391074f11138f0cffe606085604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612940578181015183820152602001612928565b50505050905090810190601f16801561296d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050565b6000816040516020018082805190602001908083835b602083106129b55780518252601f199092019160209182019101612996565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310612a235780518252601f199092019160209182019101612a04565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b3b151590565b60200190565b6040518060200160405280600190602082028036833750919291505056fe74686520636f6e747261637420616e64206368616e6e656c2068617665206e6f74206265656e20726567697374657265646c656e677468206f662076616c756520666f72206164644f725570646174654368616e6e656c2073686f756c642062652032322c206368616e6e656c49643a697346726f6d53797374656d3a68616e646c657241646472657373746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f7220656e61626c654f7244697361626c654368616e6e656c2073686f756c6420626520322c206368616e6e656c49643a6973456e61626c65746865206e6577426174636853697a65466f724f7261636c652073686f756c6420626520696e205b31302c2031303030305d6c6967687420636c69656e74206e6f742073796e632074686520626c6f636b20796574a264697066735822122033c2492ac02e70488d9ed3adb95888d7f5998dff786cf03d72be0cde759a14d064736f6c63430006040033", + }, + }, + } + + nielsUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "niels", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "60806040526004361061027d5760003560e01c80639dc092621161014f578063c8509d81116100c1578063eb57e2021161007a578063eb57e20214610940578063eda5868c14610973578063f340fa0114610988578063f9a2bbc7146109ae578063fc3e5908146109c3578063fd6a6879146109d85761027d565b8063c8509d8114610609578063d86222d5146108d7578063daacdb66146108ec578063dc927faf14610901578063e086c7b114610916578063e1c7392a1461092b5761027d565b8063ab51bb9611610113578063ab51bb961461074a578063ac4317511461075f578063ad3c9da61461082a578063b7ab4db51461085d578063bf9f49951461041b578063c81b1662146108c25761027d565b80639dc09262146106cd578063a1a11bf5146106e2578063a5422d5c146106f7578063a78abc161461070c578063aaf5eb68146107355761027d565b80635667515a116101f35780637942fd05116101ac5780637942fd05146105df57806381650b62146105f4578063831d65d114610609578063853230aa1461068e57806386249882146106a357806396713da9146106b85761027d565b80635667515a146105005780635d77156c146105155780636969a25c1461052a5780636e47b482146105a057806370fd5bad146105b557806375d47a0a146105ca5761027d565b80633dffc387116102455780633dffc3871461041b57806343756e5c14610446578063493279b1146104775780634bf6c882146104a357806351e80672146104b8578063565c56b3146104cd5761027d565b80630bee7a67146102825780631182b875146102b05780631ff18069146103aa578063219f22d5146103d157806335409f7f146103e6575b600080fd5b34801561028e57600080fd5b506102976109ed565b6040805163ffffffff9092168252519081900360200190f35b3480156102bc57600080fd5b50610335600480360360408110156102d357600080fd5b60ff8235169190810190604081016020820135600160201b8111156102f757600080fd5b82018360208201111561030957600080fd5b803590602001918460018302840111600160201b8311171561032a57600080fd5b5090925090506109f2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561036f578181015183820152602001610357565b50505050905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b657600080fd5b506103bf610bdf565b60408051918252519081900360200190f35b3480156103dd57600080fd5b50610297610be5565b3480156103f257600080fd5b506104196004803603602081101561040957600080fd5b50356001600160a01b0316610bea565b005b34801561042757600080fd5b50610430610efe565b6040805160ff9092168252519081900360200190f35b34801561045257600080fd5b5061045b610f03565b604080516001600160a01b039092168252519081900360200190f35b34801561048357600080fd5b5061048c610f09565b6040805161ffff9092168252519081900360200190f35b3480156104af57600080fd5b50610430610f0e565b3480156104c457600080fd5b5061045b610f13565b3480156104d957600080fd5b506103bf600480360360208110156104f057600080fd5b50356001600160a01b0316610f19565b34801561050c57600080fd5b50610430610f6b565b34801561052157600080fd5b50610297610f70565b34801561053657600080fd5b506105546004803603602081101561054d57600080fd5b5035610f75565b604080516001600160a01b039788168152958716602087015293909516848401526001600160401b0390911660608401521515608083015260a082019290925290519081900360c00190f35b3480156105ac57600080fd5b5061045b610fd9565b3480156105c157600080fd5b50610430610fdf565b3480156105d657600080fd5b5061045b610fe4565b3480156105eb57600080fd5b50610430610fea565b34801561060057600080fd5b50610297610fef565b34801561061557600080fd5b506104196004803603604081101561062c57600080fd5b60ff8235169190810190604081016020820135600160201b81111561065057600080fd5b82018360208201111561066257600080fd5b803590602001918460018302840111600160201b8311171561068357600080fd5b509092509050610ff4565b34801561069a57600080fd5b506103bf6110a7565b3480156106af57600080fd5b506103bf6110ad565b3480156106c457600080fd5b506104306110b3565b3480156106d957600080fd5b5061045b6110b8565b3480156106ee57600080fd5b5061045b6110be565b34801561070357600080fd5b506103356110c4565b34801561071857600080fd5b506107216110e3565b604080519115158252519081900360200190f35b34801561074157600080fd5b506103bf6110ec565b34801561075657600080fd5b50610297610f6b565b34801561076b57600080fd5b506104196004803603604081101561078257600080fd5b810190602081018135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460018302840111600160201b831117156107cf57600080fd5b919390929091602081019035600160201b8111156107ec57600080fd5b8201836020820111156107fe57600080fd5b803590602001918460018302840111600160201b8311171561081f57600080fd5b5090925090506110f5565b34801561083657600080fd5b506103bf6004803603602081101561084d57600080fd5b50356001600160a01b031661139c565b34801561086957600080fd5b506108726113ae565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108ae578181015183820152602001610896565b505050509050019250505060405180910390f35b3480156108ce57600080fd5b5061045b6114d4565b3480156108e357600080fd5b506103bf6114da565b3480156108f857600080fd5b506103bf6114e6565b34801561090d57600080fd5b5061045b6114ec565b34801561092257600080fd5b506103bf6114f2565b34801561093757600080fd5b506104196114f7565b34801561094c57600080fd5b506104196004803603602081101561096357600080fd5b50356001600160a01b03166116fa565b34801561097f57600080fd5b506102976118c9565b6104196004803603602081101561099e57600080fd5b50356001600160a01b03166118ce565b3480156109ba57600080fd5b5061045b611b04565b3480156109cf57600080fd5b50610430611b0a565b3480156109e457600080fd5b5061045b611b0f565b606481565b60005460609060ff16610a48576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b3361200014610a885760405162461bcd60e51b815260040180806020018281038252602f8152602001806140de602f913960400191505060405180910390fd5b610a90613d69565b6000610ad185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1592505050565b9150915080610aed57610ae46064611c6e565b92505050610bd8565b815160009060ff16610b0d57610b068360200151611ccf565b9050610ba4565b825160ff1660011415610ba057826020015151600114610b7a577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526025815260200180613e6c6025913960400191505060405180910390a1506067610b9b565b610b068360200151600081518110610b8e57fe5b6020026020010151612ad5565b610ba4565b5060655b63ffffffff8116610bc95750506040805160008152602081019091529150610bd89050565b610bd281611c6e565b93505050505b9392505050565b60035481565b606881565b3361100114610c2a5760405162461bcd60e51b815260040180806020018281038252602981526020018061413a6029913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205480610c4e5750610efb565b600181039050600060018281548110610c6357fe5b60009182526020909120600360049092020101546001549091506000190180610cb257600060018481548110610c9557fe5b906000526020600020906004020160030181905550505050610efb565b6040805183815290516001600160a01b038616917f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70919081900360200190a26001600160a01b038416600090815260046020526040812055600154600019018314610e3457600180546000198101908110610d2957fe5b906000526020600020906004020160018481548110610d4457fe5b6000918252602082208354600492830290910180546001600160a01b03199081166001600160a01b0393841617825560018087015481840180548416918616919091179055600280880180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b199094169390931790556003948501549401939093558254868401939192919087908110610e0957fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020555b6001805480610e3f57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b03191690556003018190559155818381610e9257fe5b0490508015610ef65760015460005b81811015610ef3578260018281548110610eb757fe5b9060005260206000209060040201600301540160018281548110610ed757fe5b6000918252602090912060036004909202010155600101610ea1565b50505b505050505b50565b600181565b61100181565b606181565b600881565b61200081565b6001600160a01b03811660009081526004602052604081205480610f41576000915050610f66565b600180820381548110610f5057fe5b9060005260206000209060040201600301549150505b919050565b600081565b606781565b60018181548110610f8257fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b61100881565b600b81565b606681565b33612000146110345760405162461bcd60e51b815260040180806020018281038252602f8152602001806140de602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6103e881565b60025481565b600981565b61100781565b61100681565b604051806101e001604052806101b78152602001613f066101b7913981565b60005460ff1681565b6402540be40081565b60005460ff16611148576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b33611007146111885760405162461bcd60e51b815260040180806020018281038252602e815260200180613e91602e913960400191505060405180910390fd5b6111f284848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b60208201529150612c4c9050565b156112cd57602081146112365760405162461bcd60e51b8152600401808060200182810382526026815260200180613ee06026913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161127491858580838501838280828437600092019190915250612d3492505050565b90506064811015801561128a5750620186a08111155b6112c55760405162461bcd60e51b8152600401808060200182810382526027815260200180613e456027913960400191505060405180910390fd5b60025561130a565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60046020526000908152604090205481565b6001546060906000805b828110156113ff57600181815481106113cd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166113f7576001909101905b6001016113b8565b5060608160405190808252806020026020018201604052801561142c578160200160208202803683370190505b50600092509050815b838110156114cc576001818154811061144a57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166114c4576001818154811061147a57fe5b600091825260209091206004909102015482516001600160a01b03909116908390859081106114a557fe5b6001600160a01b03909216602092830291909101909101526001909201915b600101611435565b509250505090565b61100281565b67016345785d8a000081565b60055481565b61100381565b602981565b60005460ff161561154f576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b611557613d69565b600061157d604051806101e001604052806101b78152602001613f066101b79139611b15565b91509150806115bd5760405162461bcd60e51b81526004018080602001828103825260218152602001806140bd6021913960400191505060405180910390fd5b60005b8260200151518110156116e2576001836020015182815181106115df57fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a0909301516003909301929092559186015180519185019391859081106116b557fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020556001016115c0565b50506103e8600255506000805460ff19166001179055565b336110011461173a5760405162461bcd60e51b815260040180806020018281038252602981526020018061413a6029913960400191505060405180910390fd5b6001600160a01b0381166000908152600460205260409020548061175e5750610efb565b60018103905060006001828154811061177357fe5b906000526020600020906004020160030154905060006001838154811061179657fe5b906000526020600020906004020160030181905550600060018080549050039050836001600160a01b03167f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d836040518082815260200191505060405180910390a28061180557505050610efb565b600081838161181057fe5b0490508015610ef65760005b8481101561186e57816001828154811061183257fe5b906000526020600020906004020160030154016001828154811061185257fe5b600091825260209091206003600490920201015560010161181c565b50600180549085015b81811015610ef357826001828154811061188d57fe5b90600052602060002090600402016003015401600182815481106118ad57fe5b6000918252602090912060036004909202010155600101611877565b606581565b33411461190c5760405162461bcd60e51b815260040180806020018281038252602d81526020018061410d602d913960400191505060405180910390fd5b60005460ff1661195f576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b600034116119ac576040805162461bcd60e51b81526020600482015260156024820152746465706f7369742076616c7565206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205434908015611abf5760006001808303815481106119de57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615611a49576040805184815290516001600160a01b038616917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a2611ab9565b600354611a5c908463ffffffff612d3916565b6003908155810154611a74908463ffffffff612d3916565b60038201556040805184815290516001600160a01b038616917f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc055919081900360200190a25b50611aff565b6040805183815290516001600160a01b038516917ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4919081900360200190a25b505050565b61100081565b600381565b61100481565b611b1d613d69565b6000611b27613d69565b611b2f613d81565b611b40611b3b86612d93565b612db8565b90506000805b611b4f83612e02565b15611c605780611b7457611b6a611b6584612e23565b612e71565b60ff168452611c58565b8060011415611c53576060611b90611b8b85612e23565b612f28565b90508051604051908082528060200260200182016040528015611bcd57816020015b611bba613da1565b815260200190600190039081611bb25790505b50602086015260005b8151811015611c4857611be7613da1565b6000611c05848481518110611bf857fe5b6020026020010151612ff9565b9150915080611c2257876000995099505050505050505050611c69565b8188602001518481518110611c3357fe5b60209081029190910101525050600101611bd6565b506001925050611c58565b611c60565b600101611b46565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b6060815260200190600190039081611c88579050509050611cae8363ffffffff166130d6565b81600081518110611cbb57fe5b6020026020010181905250610bd8816130e9565b6000806060611cdd84613173565b9150915081611d8a577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611d45578181015183820152602001611d2d565b50505050905090810190601f168015611d725780820380516001836020036101000a031916815260200191505b509250505060405180910390a1606692505050610f66565b600080805b600154811015611e075767016345785d8a000060018281548110611daf57fe5b90600052602060002090600402016003015410611dd157600190920191611dff565b600060018281548110611de057fe5b9060005260206000209060040201600301541115611dff576001909101905b600101611d8f565b50606082604051908082528060200260200182016040528015611e34578160200160208202803683370190505b509050606083604051908082528060200260200182016040528015611e63578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015611e92578160200160208202803683370190505b509050606085604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5090506000606086604051908082528060200260200182016040528015611ef2578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015611f21578160200160208202803683370190505b509050600098506000975060608d905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6e57600080fd5b505afa158015611f82573d6000803e3d6000fd5b505050506040513d6020811015611f9857600080fd5b5051905067016345785d8a000081111561200d577f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2604051808060200182810382526021815260200180613ebf6021913960400191505060405180910390a160689d5050505050505050505050505050610f66565b60005b6001548110156122805767016345785d8a00006001828154811061203057fe5b906000526020600020906004020160030154106121b6576001818154811061205457fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b03168a8d8151811061208557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106120ba57fe5b906000526020600020906004020160030154816120d357fe5b06600183815481106120e157fe5b906000526020600020906004020160030154039050612109838261325590919063ffffffff16565b8a8e8151811061211557fe5b6020026020010181815250506001828154811061212e57fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316888e8151811061215f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081898e8151811061218c57fe5b60209081029190910101526121a7878263ffffffff612d3916565b6001909d019c96506122789050565b6000600182815481106121c557fe5b906000526020600020906004020160030154111561227857600181815481106121ea57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316858c8151811061221b57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001818154811061224857fe5b906000526020600020906004020160030154848c8151811061226657fe5b60209081029190910101526001909a01995b600101612010565b50600085156126be576110046001600160a01b0316636e056520878c8c8b60025442016040518663ffffffff1660e01b815260040180806020018060200180602001856001600160401b03166001600160401b03168152602001848103845288818151815260200191508051906020019060200280838360005b838110156123125781810151838201526020016122fa565b50505050905001848103835287818151815260200191508051906020019060200280838360005b83811015612351578181015183820152602001612339565b50505050905001848103825286818151815260200191508051906020019060200280838360005b83811015612390578181015183820152602001612378565b505050509050019750505050505050506020604051808303818588803b1580156123b957600080fd5b505af1935050505080156123df57506040513d60208110156123da57600080fd5b505160015b61261a576040516000815260443d10156123fb57506000612496565b60046000803e60005160e01c6308c379a0811461241c576000915050612496565b60043d036004833e81513d60248201116001600160401b038211171561244757600092505050612496565b80830180516001600160401b03811115612468576000945050505050612496565b8060208301013d860181111561248657600095505050505050612496565b601f01601f191660405250925050505b806124a15750612545565b60019150867fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280826040518080602001828103825283818151815260200191508051906020019080838360005b838110156125055781810151838201526020016124ed565b50505050905090810190601f1680156125325780820380516001836020036101000a031916815260200191505b509250505060405180910390a250612615565b3d80801561256f576040519150601f19603f3d011682016040523d82523d6000602084013e612574565b606091505b5060019150867fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a45826040518080602001828103825283818151815260200191508051906020019080838360005b838110156125d95781810151838201526020016125c1565b50505050905090810190601f1680156126065780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b6126be565b8015612658576040805188815290517fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b709181900360200190a16126bc565b604080516020808252601b908201527f6261746368207472616e736665722072657475726e2066616c7365000000000081830152905188917fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280919081900360600190a25b505b80156128745760005b88518110156128725760008982815181106126de57fe5b602002602001015190506000600182815481106126f757fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc918590811061272857fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f19350505050905080156127e4576001828154811061276957fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d91859081106127b857fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a2612868565b600182815481106127f157fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d918590811061284057fe5b9060005260206000209060040201600301546040518082815260200191505060405180910390a25b50506001016126c7565b505b8451156129be5760005b85518110156129bc57600086828151811061289557fe5b60200260200101516001600160a01b03166108fc8784815181106128b557fe5b60200260200101519081150290604051600060405180830381858888f193505050509050801561294b578682815181106128eb57fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d87848151811061292957fe5b60200260200101516040518082815260200191505060405180910390a26129b3565b86828151811061295757fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d87848151811061299557fe5b60200260200101516040518082815260200191505060405180910390a25b5060010161287e565b505b4715612a27576040805147815290517f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d9181900360200190a1604051611002904780156108fc02916000818181858888f19350505050158015612a25573d6000803e3d6000fd5b505b60006003819055600555825115612a4157612a4183613297565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a7e57600080fd5b505af1158015612a92573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a15060009f9e505050505050505050505050505050565b80516001600160a01b0316600090815260046020526040812054801580612b265750600180820381548110612b0657fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b15612b6c5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000915050610f66565b600154600554600019820111801590612bc25784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a260009350505050610f66565b600580546001908101909155805481906000198601908110612be057fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000816040516020018082805190602001908083835b60208310612c815780518252601f199092019160209182019101612c62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310612cef5780518252601f199092019160209182019101612cd0565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b015190565b600082820183811015610bd8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b612d9b613dd6565b506040805180820190915281518152602082810190820152919050565b612dc0613d81565b612dc98261375e565b612dd257600080fd5b6000612de18360200151613798565b60208085015160408051808201909152868152920190820152915050919050565b6000612e0c613dd6565b505080518051602091820151919092015191011190565b612e2b613dd6565b612e3482612e02565b612e3d57600080fd5b60208201516000612e4d826137fb565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612e8657508151602110155b612e8f57600080fd5b6000612e9e8360200151613798565b90508083600001511015612ef9576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015612f1f57826020036101000a820491505b50949350505050565b6060612f338261375e565b612f3c57600080fd5b6000612f478361392e565b9050606081604051908082528060200260200182016040528015612f8557816020015b612f72613dd6565b815260200190600190039081612f6a5790505b5090506000612f978560200151613798565b60208601510190506000805b84811015612fee57612fb4836137fb565b9150604051806040016040528083815260200184815250848281518110612fd757fe5b602090810291909101015291810191600101612fa3565b509195945050505050565b613001613da1565b600061300b613da1565b613013613d81565b61301c85612db8565b90506000805b61302b83612e02565b15611c6057806130565761304661304184612e23565b61398a565b6001600160a01b031684526130ce565b806001141561307e5761306b61304184612e23565b6001600160a01b031660208501526130ce565b80600214156130a65761309361304184612e23565b6001600160a01b031660408501526130ce565b8060031415611c53576130bb611b6584612e23565b6001600160401b03166060850152600191505b600101613022565b6060612d2e6130e4836139a4565b613a8a565b606081516000141561310a5750604080516000815260208101909152610f66565b60608260008151811061311957fe5b602002602001015190506000600190505b835181101561315a576131508285838151811061314357fe5b6020026020010151613adc565b915060010161312a565b50610bd861316d825160c060ff16613b59565b82613adc565b600060606029835111156131a5576000604051806060016040528060298152602001613df16029913991509150611c69565b60005b835181101561323b5760005b81811015613232578481815181106131c857fe5b6020026020010151600001516001600160a01b03168583815181106131e957fe5b6020026020010151600001516001600160a01b0316141561322a5760006040518060600160405280602b8152602001613e1a602b9139935093505050611c69565b6001016131b4565b506001016131a8565b505060408051602081019091526000815260019150915091565b6000610bd883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c51565b600154815160005b828110156133b45760016132b1613da1565b600183815481106132be57fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156133885786818151811061334e57fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156133805760009250613388565b60010161333a565b5081156133aa5780516001600160a01b03166000908152600460205260408120555b505060010161329f565b508082111561342957805b828110156134275760018054806133d257fe5b60008281526020812060046000199093019283020180546001600160a01b03199081168255600182810180549092169091556002820180546001600160e81b03191690556003909101919091559155016133bf565b505b6000818310613438578161343a565b825b905060005b81811015613634576134ec85828151811061345657fe5b60200260200101516001838154811061346b57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152613ce8565b61360757806001016004600087848151811061350457fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555084818151811061354057fe5b60200260200101516001828154811061355557fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015561362c565b60006001828154811061361657fe5b9060005260206000209060040201600301819055505b60010161343f565b508282111561375857825b82811015610ef657600185828151811061365557fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782559585015181840180549184169188169190911790556040850151600282018054606088015160808901511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590971692909a169190911792909216939093171695909517905560a0909201516003909301929092558751908401929088908590811061372b57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205560010161363f565b50505050565b805160009061376f57506000610f66565b6020820151805160001a9060c082101561378e57600092505050610f66565b5060019392505050565b8051600090811a60808110156137b2576000915050610f66565b60b88110806137cd575060c081108015906137cd575060f881105b156137dc576001915050610f66565b60c08110156137f05760b519019050610f66565b60f519019050610f66565b80516000908190811a60808110156138165760019150613927565b60b881101561382b57607e1981019150613927565b60c08110156138a557600060b78203600186019550806020036101000a86510491506001810182019350508083101561389f576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50613927565b60f88110156138ba5760be1981019150613927565b600060f78203600186019550806020036101000a865104915060018101820193505080831015613925576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061393f57506000610f66565b600080905060006139538460200151613798565b602085015185519181019250015b8082101561398157613972826137fb565b60019093019290910190613961565b50909392505050565b805160009060151461399b57600080fd5b612d2e82612e71565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166139e857506018613a0c565b6fffffffffffffffffffffffffffffffff198416613a0857506010613a0c565b5060005b6020811015613a4257818181518110613a2157fe5b01602001516001600160f81b03191615613a3a57613a42565b600101613a0c565b60008160200390506060816040519080825280601f01601f191660200182016040528015613a77576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613abc5750607f60f81b82600081518110613aaa57fe5b01602001516001600160f81b03191611155b15613ac8575080610f66565b612d2e613ada8351608060ff16613b59565b835b6060806040519050835180825260208201818101602087015b81831015613b0d578051835260209283019201613af5565b50855184518101855292509050808201602086015b81831015613b3a578051835260209283019201613b22565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613ba9576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613c035782840160f81b81600081518110613be557fe5b60200101906001600160f81b031916908160001a9053509050612d2e565b6060613c0e856139a4565b90508381510160370160f81b82600081518110613c2757fe5b60200101906001600160f81b031916908160001a905350613c488282613adc565b95945050505050565b60008184841115613ce05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ca5578181015183820152602001613c8d565b50505050905090810190601f168015613cd25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b805182516000916001600160a01b039182169116148015613d22575081602001516001600160a01b031683602001516001600160a01b0316145b8015613d47575081604001516001600160a01b031683604001516001600160a01b0316145b8015610bd85750506060908101519101516001600160401b0390811691161490565b60408051808201909152600081526060602082015290565b6040518060400160405280613d94613dd6565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60405180604001604052806000815260200160008152509056fe746865206e756d626572206f662076616c696461746f72732065786365656420746865206c696d69746475706c696361746520636f6e73656e7375732061646472657373206f662076616c696461746f725365747468652065787069726554696d655365636f6e64476170206973206f7574206f662072616e67656c656e677468206f66206a61696c2076616c696461746f7273206d757374206265206f6e65746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374666565206973206c6172676572207468616e2044555354595f494e434f4d494e476c656e677468206f662065787069726554696d655365636f6e64476170206d69736d61746368f901b480f901b0f846941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf9477f066f3fb515bb97015e4b4afddbcb25c94286b86048c27395000f84694b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794748c284f46ab87fd492326f1e2fe731d22ad2db386048c27395000f84694a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f940ce09b38374887cb564b7efa60be130d99ed5f9586048c27395000f84694980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b2709407eecf36cf0901fefe4bc505d6ba03c7480c7b5786048c27395000f8469435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194f57d36e129881a3a13a024fe8072507e5b2e70f886048c27395000f84694f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594ddfcaedf9bb451098c9917a45f02bd61342cca6686048c273950006661696c656420746f20706172736520696e69742076616c696461746f72536574746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d6573736167652073656e646572206d7573742062652074686520626c6f636b2070726f6475636572746865206d6573736167652073656e646572206d75737420626520736c61736820636f6e7472616374a2646970667358221220ccbabefa423adb1cc63a2da2811a349dd54007c9dc3bd490ac200572c4e8eb1064736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "608060405234801561001057600080fd5b50600436106102275760003560e01c8063831d65d111610130578063c80d4b8f116100b8578063e1c7392a1161007c578063e1c7392a146106d9578063f9a2bbc7146106e1578063fc3e5908146106e9578063fc4333cd146106f1578063fd6a6879146106f957610227565b8063c80d4b8f14610623578063c81b16621461062b578063c8509d8114610633578063c96be4cb146106ab578063dc927faf146106d157610227565b8063a1a11bf5116100ff578063a1a11bf514610531578063a78abc1614610539578063ab51bb9614610555578063ac0af6291461055d578063ac4317511461056557610227565b8063831d65d11461049f57806396713da9146105195780639bc8e4f2146105215780639dc092621461052957610227565b80634bf6c882116101b35780636e47b482116101825780636e47b4821461047757806370fd5bad1461047f57806375d47a0a146104875780637912a65d1461048f5780637942fd051461049757610227565b80634bf6c8821461045757806351e806721461045f578063567a372d1461046757806362b72cf51461046f57610227565b806337c8dab9116101fa57806337c8dab9146103b9578063389f4f71146103f85780633dffc3871461041257806343756e5c14610430578063493279b11461043857610227565b80630bee7a671461022c5780631182b8751461024d57806323bac5a21461033a57806335aa2e4414610380575b600080fd5b610234610701565b6040805163ffffffff9092168252519081900360200190f35b6102c56004803603604081101561026357600080fd5b60ff8235169190810190604081016020820135600160201b81111561028757600080fd5b82018360208201111561029957600080fd5b803590602001918460018302840111600160201b831117156102ba57600080fd5b509092509050610706565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ff5781810151838201526020016102e7565b50505050905090810190601f16801561032c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103606004803603602081101561035057600080fd5b50356001600160a01b03166107da565b604080519384526020840192909252151582820152519081900360600190f35b61039d6004803603602081101561039657600080fd5b50356107fd565b604080516001600160a01b039092168252519081900360200190f35b6103df600480360360208110156103cf57600080fd5b50356001600160a01b0316610824565b6040805192835260208301919091528051918290030190f35b61040061087b565b60408051918252519081900360200190f35b61041a610881565b6040805160ff9092168252519081900360200190f35b61039d610886565b61044061088c565b6040805161ffff9092168252519081900360200190f35b61041a610891565b61039d610896565b61040061089c565b6104006108a2565b61039d6108a8565b61041a6108ae565b61039d6108b3565b6104006108b9565b61041a6108be565b610517600480360360408110156104b557600080fd5b60ff8235169190810190604081016020820135600160201b8111156104d957600080fd5b8201836020820111156104eb57600080fd5b803590602001918460018302840111600160201b8311171561050c57600080fd5b5090925090506108c3565b005b61041a610a1e565b610400610a23565b61039d610a2e565b61039d610a34565b610541610a3a565b604080519115158252519081900360200190f35b610234610a43565b610400610a48565b6105176004803603604081101561057b57600080fd5b810190602081018135600160201b81111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460018302840111600160201b831117156105c857600080fd5b919390929091602081019035600160201b8111156105e557600080fd5b8201836020820111156105f757600080fd5b803590602001918460018302840111600160201b8311171561061857600080fd5b509092509050610a4d565b610400610e3b565b61039d610e40565b6105176004803603604081101561064957600080fd5b60ff8235169190810190604081016020820135600160201b81111561066d57600080fd5b82018360208201111561067f57600080fd5b803590602001918460018302840111600160201b831117156106a057600080fd5b509092509050610e46565b610517600480360360208110156106c157600080fd5b50356001600160a01b0316610ef9565b61039d61131e565b610517611324565b61039d611395565b61041a61139b565b6105176113a0565b61039d61182b565b606481565b606033612000146107485760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff1661078d576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6040805162461bcd60e51b815260206004820152601e60248201527f7265636569766520756e65787065637465642073796e207061636b6167650000604482015290519081900360640190fd5b600260208190526000918252604090912080546001820154919092015460ff1683565b6001818154811061080a57fe5b6000918252602090912001546001600160a01b0316905081565b60008061082f612146565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b600181565b61100181565b606181565b600881565b61200081565b60045481565b60035481565b61100581565b600281565b61100881565b603281565b600b81565b33612000146109035760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff16610948576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b610950612169565b600061099184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183192505050565b9150915080156109db5781516040805163ffffffff9092168252517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e6299679181900360200190a1610a17565b81516040805163ffffffff9092168252517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79181900360200190a15b5050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff16610a92576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b3361100714610ad25760405162461bcd60e51b815260040180806020018281038252602e81526020018061220d602e913960400191505060405180910390fd5b610b3d84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b602082015291506118b19050565b15610c165760208114610b815760405162461bcd60e51b81526004018080602001828103825260278152602001806121b66027913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610bbf9185858083850183828082843760009201919091525061199992505050565b905060018110158015610bd3575060055481105b610c0e5760405162461bcd60e51b815260040180806020018281038252602581526020018061225d6025913960400191505060405180910390fd5b600455610da9565b610c7c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b602082015291506118b19050565b15610d6c5760208114610cc05760405162461bcd60e51b815260040180806020018281038252602281526020018061223b6022913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610cfe9185858083850183828082843760009201919091525061199992505050565b90506103e88111158015610d13575060045481115b610d64576040805162461bcd60e51b815260206004820181905260248201527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604482015290519081900360640190fd5b600555610da9565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b609681565b61100281565b3361200014610e865760405162461bcd60e51b815260040180806020018281038252602f815260200180612282602f913960400191505060405180910390fd5b60005460ff16610ecb576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610f375760405162461bcd60e51b815260040180806020018281038252602d8152602001806122b1602d913960400191505060405180910390fd5b60005460ff16610f7c576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b6003544311610fd2576040805162461bcd60e51b815260206004820181905260248201527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604482015290519081900360640190fd5b3a1561101c576040805162461bcd60e51b81526020600482015260146024820152736761737072696365206973206e6f74207a65726f60601b604482015290519081900360640190fd5b611024612146565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff16158015928201929092529061107f5760208101805160010190526110d8565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b4381526005546020820151816110ea57fe5b0661123c57600060208201819052604080516335409f7f60e01b81526001600160a01b03851660048201529051611000926335409f7f926024808201939182900301818387803b15801561113d57600080fd5b505af1158015611151573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6111718561199e565b60006040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156111d15781810151838201526020016111b9565b50505050905090810190601f1680156111fe5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561121f57600080fd5b505af1158015611233573d6000803e3d6000fd5b505050506112b2565b60045481602001518161124b57fe5b066112b257604080516375abf10160e11b81526001600160a01b038416600482015290516110009163eb57e20291602480830192600092919082900301818387803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505043600355565b61100381565b60005460ff161561137c576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b603260045560966005556000805460ff19166001179055565b61100081565b600381565b33611000146113e05760405162461bcd60e51b81526004018080602001828103825260308152602001806121dd6030913960400191505060405180910390fd5b60005460ff16611425576040805162461bcd60e51b815260206004820152601960248201526000805160206122de833981519152604482015290519081900360640190fd5b60015461143157611829565b600154600090600019015b8082116117fd576000805b8284101561156057611457612146565b600260006001878154811061146857fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff16151590820152600554909150600490048160200151111561154a576004600554816114d557fe5b048160200151038160200181815250508060026000600188815481106114f757fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611554565b6001925050611560565b50600190930192611447565b8284116116f75761156f612146565b600260006001868154811061158057fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611668576004600554816115ed57fe5b0481602001510381602001818152505080600260006001878154811061160f57fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff191691151591909117905591506116f79050565b600260006001868154811061167957fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff191690558054806116bd57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055836116ea57506116f7565b5060001990920191611560565b8180156117015750805b156117e057600260006001868154811061171757fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff1916905580548490811061175e57fe5b600091825260209091200154600180546001600160a01b03909216918690811061178457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060018054806117bd57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b826117ec5750506117fd565b50506001909101906000190161143c565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b611839612169565b6000611843612169565b61184b61217b565b61185c61185786611a70565b611a95565b90506000805b61186b83611adf565b156118a457806118975761188661188184611b00565b611b4e565b63ffffffff1684526001915061189c565b6118a4565b600101611862565b5091935090915050915091565b6000816040516020018082805190602001908083835b602083106118e65780518252601f1990920191602091820191016118c7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106119545780518252601f199092019160209182019101611935565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b015190565b60408051600480825260a08201909252606091829190816020015b60608152602001906001900390816119b95790505090506119e2836001600160a01b0316611c05565b816000815181106119ef57fe5b6020026020010181905250611a0343611c28565b81600181518110611a1057fe5b6020908102919091010152611a256061611c28565b81600281518110611a3257fe5b6020026020010181905250611a4642611c28565b81600381518110611a5357fe5b6020026020010181905250611a6781611c3b565b9150505b919050565b611a7861219b565b506040805180820190915281518152602082810190820152919050565b611a9d61217b565b611aa682611cc5565b611aaf57600080fd5b6000611abe8360200151611cff565b60208085015160408051808201909152868152920190820152915050919050565b6000611ae961219b565b505080518051602091820151919092015191011190565b611b0861219b565b611b1182611adf565b611b1a57600080fd5b60208201516000611b2a82611d62565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590611b6357508151602110155b611b6c57600080fd5b6000611b7b8360200151611cff565b90508083600001511015611bd6576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015611bfc57826020036101000a820491505b50949350505050565b60408051600560a21b8318601482015260348101909152606090611a6781611e95565b6060611993611c3683611eeb565b611e95565b6060815160001415611c5c5750604080516000815260208101909152611a6b565b606082600081518110611c6b57fe5b602002602001015190506000600190505b8351811015611cac57611ca282858381518110611c9557fe5b6020026020010151611fd1565b9150600101611c7c565b50611a67611cbf825160c060ff1661204e565b82611fd1565b8051600090611cd657506000611a6b565b6020820151805160001a9060c0821015611cf557600092505050611a6b565b5060019392505050565b8051600090811a6080811015611d19576000915050611a6b565b60b8811080611d34575060c08110801590611d34575060f881105b15611d43576001915050611a6b565b60c0811015611d575760b519019050611a6b565b60f519019050611a6b565b80516000908190811a6080811015611d7d5760019150611e8e565b60b8811015611d9257607e1981019150611e8e565b60c0811015611e0c57600060b78203600186019550806020036101000a865104915060018101820193505080831015611e06576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50611e8e565b60f8811015611e215760be1981019150611e8e565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611e8c576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b606081516001148015611ec75750607f60f81b82600081518110611eb557fe5b01602001516001600160f81b03191611155b15611ed3575080611a6b565b611993611ee58351608060ff1661204e565b83611fd1565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416611f2f57506018611f53565b6fffffffffffffffffffffffffffffffff198416611f4f57506010611f53565b5060005b6020811015611f8957818181518110611f6857fe5b01602001516001600160f81b03191615611f8157611f89565b600101611f53565b60008160200390506060816040519080825280601f01601f191660200182016040528015611fbe576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b81831015612002578051835260209283019201611fea565b50855184518101855292509050808201602086015b8183101561202f578051835260209283019201612017565b508651929092011591909101601f01601f191660405250905092915050565b606068010000000000000000831061209e576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116120f85782840160f81b816000815181106120da57fe5b60200101906001600160f81b031916908160001a9053509050611993565b606061210385611eeb565b90508381510160370160f81b8260008151811061211c57fe5b60200101906001600160f81b031916908160001a90535061213d8282611fd1565b95945050505050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061218e61219b565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d69736d61746368746865206d6573736167652073656e646572206d7573742062652076616c696461746f7253657420636f6e7472616374746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746368746865206d697364656d65616e6f725468726573686f6c64206f7574206f662072616e6765746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d6573736167652073656e646572206d7573742062652074686520626c6f636b2070726f647563657274686520636f6e7472616374206e6f7420696e69742079657400000000000000a2646970667358221220928e8ab9d0213bb25ef35f991d92a3bba9ae0b32c8a4041abe55fcb03c7709dd64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(SystemRewardContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "60806040526004361061014f5760003560e01c806396713da9116100b6578063c81b16621161006f578063c81b1662146103dc578063dc927faf146103f1578063f9a2bbc714610406578063fb5478b31461041b578063fc3e590814610430578063fd6a68791461044557610193565b806396713da91461033a5780639a99b4f01461034f5780639dc0926214610388578063a1a11bf51461039d578063a78abc16146103b2578063ab51bb96146103c757610193565b806351e806721161010857806351e806721461028a5780636d70f7ae1461029f5780636e47b482146102e657806370fd5bad146102fb57806375d47a0a146103105780637942fd051461032557610193565b80630bee7a67146101985780633a0b0eff146101c65780633dffc387146101ed57806343756e5c14610218578063493279b1146102495780634bf6c8821461027557610193565b366101935734156101915760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b3480156101a457600080fd5b506101ad61045a565b6040805163ffffffff9092168252519081900360200190f35b3480156101d257600080fd5b506101db61045f565b60408051918252519081900360200190f35b3480156101f957600080fd5b50610202610465565b6040805160ff9092168252519081900360200190f35b34801561022457600080fd5b5061022d61046a565b604080516001600160a01b039092168252519081900360200190f35b34801561025557600080fd5b5061025e610470565b6040805161ffff9092168252519081900360200190f35b34801561028157600080fd5b50610202610475565b34801561029657600080fd5b5061022d61047a565b3480156102ab57600080fd5b506102d2600480360360208110156102c257600080fd5b50356001600160a01b0316610480565b604080519115158252519081900360200190f35b3480156102f257600080fd5b5061022d61049e565b34801561030757600080fd5b506102026104a4565b34801561031c57600080fd5b5061022d6104a9565b34801561033157600080fd5b506102026104af565b34801561034657600080fd5b506102026104b4565b34801561035b57600080fd5b506101db6004803603604081101561037257600080fd5b506001600160a01b0381351690602001356104b9565b34801561039457600080fd5b5061022d610664565b3480156103a957600080fd5b5061022d61066a565b3480156103be57600080fd5b506102d2610670565b3480156103d357600080fd5b506101ad610679565b3480156103e857600080fd5b5061022d61067e565b3480156103fd57600080fd5b5061022d610684565b34801561041257600080fd5b5061022d61068a565b34801561042757600080fd5b506101db610690565b34801561043c57600080fd5b5061020261069c565b34801561045157600080fd5b5061022d6106a1565b606481565b60015481565b600181565b61100181565b606181565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b61100881565b600b81565b600981565b6000805460ff1661053657600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166105845760405162461bcd60e51b815260040180806020018281038252602b8152602001806106a8602b913960400191505060405180910390fd5b60004783106105935747610595565b825b9050670de0b6b3a76400008111156105b25750670de0b6b3a76400005b8015610633576040516001600160a01b0385169082156108fc029083906000818181858888f193505050501580156105ee573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a261065d565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b61100781565b61100681565b60005460ff1681565b600081565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b6110048156fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f64a2646970667358221220276887b515b756cf3ef5b38df18fd3a11174ee7fd973bdd337fc09d6b0e42f3b64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(LightClientContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "608060405234801561001057600080fd5b50600436106102115760003560e01c8063a78abc1611610125578063dda83148116100ad578063e405bbc31161007c578063e405bbc314610681578063ea54b2aa14610689578063f9a2bbc714610691578063fc3e590814610699578063fd6a6879146106a157610211565b8063dda8314814610609578063df5fe7041461062f578063e1c7392a14610655578063e2761af01461065d57610211565b8063c81b1662116100f4578063c81b166214610534578063cba510a91461053c578063d816987914610562578063da8d08f0146105db578063dc927faf1461060157610211565b8063a78abc1614610444578063ab51bb9614610460578063ac43175114610468578063adc879e91461052c57610211565b8063564b81ef116101a857806375d47a0a1161017757806375d47a0a1461041c5780637942fd051461042457806396713da91461042c5780639dc0926214610434578063a1a11bf51461043c57610211565b8063564b81ef146102ca5780635c5ae8db146103475780636e47b4821461040c57806370fd5bad1461041457610211565b806343756e5c116101e457806343756e5c14610277578063493279b11461029b5780634bf6c882146102ba57806351e80672146102c257610211565b80630bee7a67146102165780632657e9b61461023757806333f7798d146102515780633dffc38714610259575b600080fd5b61021e6106a9565b6040805163ffffffff9092168252519081900360200190f35b61023f6106ae565b60408051918252519081900360200190f35b61023f6106b9565b6102616106bf565b6040805160ff9092168252519081900360200190f35b61027f6106c4565b604080516001600160a01b039092168252519081900360200190f35b6102a36106ca565b6040805161ffff9092168252519081900360200190f35b6102616106cf565b61027f6106d4565b6102d26106da565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030c5781810151838201526020016102f4565b50505050905090810190601f1680156103395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61036d6004803603602081101561035d57600080fd5b50356001600160401b03166107e6565b60405180856001600160401b03166001600160401b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103ce5781810151838201526020016103b6565b50505050905090810190601f1680156103fb5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b61027f6108a1565b6102616108a7565b61027f6108ac565b6102616108b2565b6102616108b7565b61027f6108bc565b61027f6108c2565b61044c6108c8565b604080519115158252519081900360200190f35b61021e6108d1565b61052a6004803603604081101561047e57600080fd5b81019060208101813564010000000081111561049957600080fd5b8201836020820111156104ab57600080fd5b803590602001918460018302840111640100000000831117156104cd57600080fd5b9193909290916020810190356401000000008111156104eb57600080fd5b8201836020820111156104fd57600080fd5b8035906020019184600183028401116401000000008311171561051f57600080fd5b5090925090506108d6565b005b61023f610b8f565b61027f610b95565b61023f6004803603602081101561055257600080fd5b50356001600160401b0316610b9b565b61044c6004803603604081101561057857600080fd5b81019060208101813564010000000081111561059357600080fd5b8201836020820111156105a557600080fd5b803590602001918460018302840111640100000000831117156105c757600080fd5b9193509150356001600160401b0316610bba565b61027f600480360360208110156105f157600080fd5b50356001600160401b031661139b565b61027f6113b6565b61027f6004803603602081101561061f57600080fd5b50356001600160401b03166113bc565b61044c6004803603602081101561064557600080fd5b50356001600160401b03166113e0565b61052a611422565b6106656115c7565b604080516001600160401b039092168252519081900360200190f35b6106656115d6565b6102d26115ec565b61027f611609565b61026161160f565b61027f611614565b606481565b662386f26fc1000081565b60055481565b600181565b61100181565b606181565b600881565b61200081565b604080516020808252818301909252606091829190602082018180368337505060045460208301525090506000805b60208160ff16101561075057828160ff168151811061072457fe5b01602001516001600160f81b0319161561074357600190910190610748565b610750565b600101610709565b5060608160ff166040519080825280601f01601f191660200182016040528015610781576020820181803683370190505b50905060005b8260ff168160ff1610156107dd57838160ff16815181106107a457fe5b602001015160f81c60f81b828260ff16815181106107be57fe5b60200101906001600160f81b031916908160001a905350600101610787565b50925050505b90565b60016020818152600092835260409283902080548184015460028084015460038501805489516101009982161599909902600019011692909204601f81018790048702880187019098528787526001600160401b0390931696919592949091908301828280156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905084565b61100581565b600281565b61100881565b600b81565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff1661092d576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b336110071461096d5760405162461bcd60e51b815260040180806020018281038252602e815260200180611ac6602e913960400191505060405180910390fd5b6109e184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f726577617264466f7256616c696461746f725365744368616e676500000000006020820152915061161a9050565b15610ac05760208114610a255760405162461bcd60e51b815260040180806020018281038252602e815260200180611a65602e913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610a639185858083850183828082843760009201919091525061170192505050565b9050600081118015610a7d5750670de0b6b3a76400008111155b610ab85760405162461bcd60e51b815260040180806020018281038252602f815260200180611af4602f913960400191505060405180910390fd5b600555610afd565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60045481565b61100281565b6001600160401b03166000908152600160208190526040909120015490565b60408051630a83aaa960e31b815233600482015290516000916110069163541d554891602480820192602092909190829003018186803b158015610bfd57600080fd5b505afa158015610c11573d6000803e3d6000fd5b505050506040513d6020811015610c2757600080fd5b5051610c7a576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b6001600160401b0382166000908152600260205260409020546001600160a01b031615610cee576040805162461bcd60e51b815260206004820152601c60248201527f63616e27742073796e63206475706c6963617465642068656164657200000000604482015290519081900360640190fd5b6003546001600160401b0390811690831611610d3b5760405162461bcd60e51b8152600401808060200182810382526026815260200180611b236026913960400191505060405180910390fd5b600354600160401b90046001600160401b0316610d56611863565b6001600160401b0382811660009081526001602081815260409283902083516080810185528154909516855280830154858301526002808201548686015260038201805486516101009682161596909602600019011691909104601f81018490048402850184019095528484529093606086019392830182828015610e1c5780601f10610df157610100808354040283529160200191610e1c565b820191906000526020600020905b815481529060010190602001808311610dff57829003601f168201915b50505050508152505090505b836001600160401b0316826001600160401b031610158015610e5957506003546001600160401b0390811690831610155b15610f3a5780516001600160401b0380821660009081526001602081815260409283902083516080810185528154909516855280830154858301526002808201548686015260038201805486516101009682161596909602600019011691909104601f8101849004840285018401909552848452959750939460608601939091830182828015610f2a5780601f10610eff57610100808354040283529160200191610f2a565b820191906000526020600020905b815481529060010190602001808311610f0d57829003601f168201915b5050505050815250509050610e28565b6060810151516110315780516001600160401b03811660009081526001602081815260409283902060030180548451600294821615610100026000190190911693909304601f810183900483028401830190945283835293955090929190830182828015610fe95780601f10610fbe57610100808354040283529160200191610fe9565b820191906000526020600020905b815481529060010190602001808311610fcc57829003601f168201915b505050506060830182905250516110315760405162461bcd60e51b8152600401808060200182810382526021815260200180611a446021913960400191505060405180910390fd5b6000816060015151608801905060608787905082016040519080825280601f01601f191660200182016040528015611070576020820181803683370190505b509050600061107e82611706565b905061108c8486838661170c565b6110c75760405162461bcd60e51b81526004018080602001828103825260238152602001806119416023913960400191505060405180910390fd5b6000838201915061110d8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177892505050565b9450905061111c818386611782565b8251602001935061112b611889565b6110008186866064600019fa61114057600080fd5b805194506000600160f81b8616156111cf5750600554604080516309a99b4f60e41b815233600482015260248101929092525160019161100291639a99b4f0916044808201926020929091908290030181600087803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050506040513d60208110156111cc57600080fd5b50505b856001600160401b0316955060208201935060006111ef858884156117c3565b90985090506001600160401b03808216908c161461123e5760405162461bcd60e51b8152600401808060200182810382526033815260200180611a936033913960400191505060405180910390fd5b6001600160401b03808c16600081815260026020818152604080842080546001600160a01b031916331790558e86168e529383526001808252928490208d518154961667ffffffffffffffff199096169590951785558c81015192850192909255918b01519183019190915560608a015180518b93926112c59260038501929101906118a8565b50506003546001600160401b03600160401b9091048116908d161115905061130d576003805467ffffffffffffffff60401b1916600160401b6001600160401b038e16021790555b7f4042c1020a8f410fb1c8859d276ab436aeb2c3074960e48467299cf1c966d3b48b8a8a602001518560405180856001600160401b03166001600160401b03168152602001846001600160401b03166001600160401b031681526020018381526020018215151515815260200194505050505060405180910390a15060019c9b505050505050505050505050565b6002602052600090815260409020546001600160a01b031681565b61100381565b6001600160401b03166000908152600260205260409020546001600160a01b031690565b6001600160401b0381166000908152600260205260408120546001600160a01b031615158061141c57506003546001600160401b038381169116145b92915050565b60005460ff161561147a576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60008061149f60405180610100016040528060e0815260200161196460e09139611778565b815160045590925090506114b1611863565b60006114bf848460006117c3565b60008083526001600160401b038281168252600160208181526040938490208651815467ffffffffffffffff191694169390931783558086015191830191909155918401516002820155606084015180519496509294508593909261152b9260038501929101906118a8565b50506003805467ffffffffffffffff19166001600160401b0384811691821767ffffffffffffffff60401b1916600160401b9290920291909117918290556000805460ff19166001179055662386f26fc10000600555602085810151604080519490931684529083015280517f5ac9b37d571677b80957ca05693f371526c602fd08042b416a29fdab7efefa499350918290030190a150505050565b6003546001600160401b031681565b600354600160401b90046001600160401b031681565b60405180610100016040528060e0815260200161196460e0913981565b61100081565b600381565b61100481565b6000816040516020018082805190602001908083835b6020831061164f5780518252601f199092019160209182019101611630565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106116bd5780518252601f19909201916020918201910161169e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b60200190565b600084606001515182840103925060008061172a8760600151611778565b909250905061173a828683611782565b5050506040840151601f1983810191909152602090940151603f19830152605f19820192909252600454606719820152910160871990910152600190565b8051602090910191565b5b602081106117a2578251825260209283019290910190601f1901611783565b915181516020939093036101000a6000190180199091169216919091179052565b6117cb611863565b60088401516028850151604890950180519095600092916117ea611863565b6020810183905260408101829052866118555760008060688a036040519080825280601f01601f19166020018201604052801561182e576020820181803683370190505b506060840181905261183f90611778565b909250905061185260208c018383611782565b50505b989297509195505050505050565b604080516080810182526000808252602082018190529181019190915260608082015290565b6040518061100001604052806080906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118e957805160ff1916838001178555611916565b82800160010185558215611916579182015b828111156119165782518255916020019190600101906118fb565b50611922929150611926565b5090565b6107e391905b80821115611922576000815560010161192c56fe6661696c656420746f2073657269616c697a6520636f6e73656e73757320737461746542696e616e63652d436861696e2d47616e67657300000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000aea1ac326886b992a991d21a6eb155f41b77867cbf659e78f31d89d8205122a84d1be64f0e9a466c2e66a53433928192783e29f8fa21beb2133499b5ef770f60000000e8d4a5100099308aa365c40554bc89982af505d85da95251445d5dd4a9bb37dd2584fd92d3000000e8d4a5100001776920ff0b0f38d78cf95c033c21adf7045785114e392a7544179652e0a612000000e8d4a510006661696c656420746f206c6f61642076616c696461746f722073657420646174616c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d617463686865616465722068656967687420646f65736e277420657175616c20746f207468652073706563696669656420686569676874746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206e6577526577617264466f7256616c696461746f725365744368616e6765206f7574206f662072616e676563616e27742073796e6320686561646572206265666f726520696e697469616c486569676874a2646970667358221220137a8776113e727049f523a5f1486edaec611d89ff3d19f099dfe799b6b5e66f64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "60806040526004361061031e5760003560e01c80639a99b4f0116101ab578063bd466461116100f7578063f014847211610095578063fc1a598f1161006f578063fc1a598f14610cb3578063fc3e5908146109c9578063fd6a687914610ce6578063ff9c0027146107c757610366565b8063f014847214610c74578063f9a2bbc714610c89578063fa9e915914610c9e57610366565b8063dc6f5e90116100d1578063dc6f5e90146109c9578063dc927faf14610c35578063e1c7392a14610c4a578063ebf71d5314610c5f57610366565b8063bd46646114610b68578063c81b166214610b9b578063c8509d8114610bb057610366565b8063a7c9f02d11610164578063ac4317511161013e578063ac43175114610a3a578063b770186114610b05578063b99328c514610b1a578063b9fd21e314610b5357610366565b8063a7c9f02d146109c9578063aa7415f5146109de578063ab51bb9614610a2557610366565b80639a99b4f0146109095780639dc0926214610942578063a1a11bf514610957578063a496fba21461096c578063a5cd588b14610981578063a78abc16146109b457610366565b80635d499b1b1161026a57806375d47a0a116102235780638b87b21f116101fd5780638b87b21f146105b25780638eff336c146108a057806396713da9146108df5780639a854bbd146108f457610366565b806375d47a0a146107f15780637942fd0514610806578063831d65d11461081b57610366565b80635d499b1b14610671578063613684751461036b5780636e056520146106865780636e47b482146107b257806370fd5bad146107c757806371d30863146107dc57610366565b806343756e5c116102d75780634bf6c882116102b15780634bf6c8821461036b57806350432d321461061d57806351e806721461063257806359b927891461064757610366565b806343756e5c146105c757806343a368b9146105dc578063493279b1146105f157610366565b8063077b8f351461036b5780630bee7a67146103965780631182b875146103c4578063149d14d9146104be5780633d713223146104e55780633dffc387146105b257610366565b36610366573415610364576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561037757600080fd5b50610380610cfb565b6040805160ff9092168252519081900360200190f35b3480156103a257600080fd5b506103ab610d00565b6040805163ffffffff9092168252519081900360200190f35b3480156103d057600080fd5b50610449600480360360408110156103e757600080fd5b60ff8235169190810190604081016020820135600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460018302840111600160201b8311171561043e57600080fd5b509092509050610d05565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561048357818101518382015260200161046b565b50505050905090810190601f1680156104b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104ca57600080fd5b506104d3610e33565b60408051918252519081900360200190f35b3480156104f157600080fd5b506105966004803603602081101561050857600080fd5b810190602081018135600160201b81111561052257600080fd5b82018360208201111561053457600080fd5b803590602001918460018302840111600160201b8311171561055557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e39945050505050565b604080516001600160a01b039092168252519081900360200190f35b3480156105be57600080fd5b50610380610e5d565b3480156105d357600080fd5b50610596610e62565b3480156105e857600080fd5b506104d3610e68565b3480156105fd57600080fd5b50610606610e74565b6040805161ffff9092168252519081900360200190f35b34801561062957600080fd5b506104d3610e79565b34801561063e57600080fd5b50610596610e84565b34801561065357600080fd5b506105966004803603602081101561066a57600080fd5b5035610e8a565b34801561067d57600080fd5b506104d3610ea5565b61079e6004803603608081101561069c57600080fd5b810190602081018135600160201b8111156106b657600080fd5b8201836020820111156106c857600080fd5b803590602001918460208302840111600160201b831117156106e957600080fd5b919390929091602081019035600160201b81111561070657600080fd5b82018360208201111561071857600080fd5b803590602001918460208302840111600160201b8311171561073957600080fd5b919390929091602081019035600160201b81111561075657600080fd5b82018360208201111561076857600080fd5b803590602001918460208302840111600160201b8311171561078957600080fd5b91935091503567ffffffffffffffff16610eae565b604080519115158252519081900360200190f35b3480156107be57600080fd5b50610596611383565b3480156107d357600080fd5b50610380611389565b3480156107e857600080fd5b506104d361138e565b3480156107fd57600080fd5b50610596611394565b34801561081257600080fd5b5061038061139a565b34801561082757600080fd5b506103646004803603604081101561083e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561086257600080fd5b82018360208201111561087457600080fd5b803590602001918460018302840111600160201b8311171561089557600080fd5b50909250905061139f565b3480156108ac57600080fd5b50610364600480360360608110156108c357600080fd5b508035906001600160a01b0360208201351690604001356114e8565b3480156108eb57600080fd5b5061038061156e565b34801561090057600080fd5b506104d3611573565b34801561091557600080fd5b506104d36004803603604081101561092c57600080fd5b506001600160a01b03813516906020013561157f565b34801561094e57600080fd5b506105966116bd565b34801561096357600080fd5b506105966116c3565b34801561097857600080fd5b506103806116c9565b34801561098d57600080fd5b506104d3600480360360208110156109a457600080fd5b50356001600160a01b03166116ce565b3480156109c057600080fd5b5061079e6116e0565b3480156109d557600080fd5b506103806116e9565b61079e600480360360808110156109f457600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff166116ee565b348015610a3157600080fd5b506103ab6116c9565b348015610a4657600080fd5b5061036460048036036040811015610a5d57600080fd5b810190602081018135600160201b811115610a7757600080fd5b820183602082011115610a8957600080fd5b803590602001918460018302840111600160201b83111715610aaa57600080fd5b919390929091602081019035600160201b811115610ac757600080fd5b820183602082011115610ad957600080fd5b803590602001918460018302840111600160201b83111715610afa57600080fd5b509092509050611daf565b348015610b1157600080fd5b506104d361201e565b348015610b2657600080fd5b5061036460048036036040811015610b3d57600080fd5b50803590602001356001600160a01b0316612024565b348015610b5f57600080fd5b506104d361209a565b348015610b7457600080fd5b506104d360048036036020811015610b8b57600080fd5b50356001600160a01b03166120a4565b348015610ba757600080fd5b506105966120bf565b348015610bbc57600080fd5b5061036460048036036040811015610bd357600080fd5b60ff8235169190810190604081016020820135600160201b811115610bf757600080fd5b820183602082011115610c0957600080fd5b803590602001918460018302840111600160201b83111715610c2a57600080fd5b5090925090506120c5565b348015610c4157600080fd5b50610596612195565b348015610c5657600080fd5b5061036461219b565b348015610c6b57600080fd5b5061038061223b565b348015610c8057600080fd5b50610380612240565b348015610c9557600080fd5b50610596612245565b348015610caa57600080fd5b506104d361224b565b348015610cbf57600080fd5b5061044960048036036020811015610cd657600080fd5b50356001600160a01b0316612251565b348015610cf257600080fd5b50610596612378565b600881565b606481565b60005460609060ff16610d4d576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b3361200014610d8d5760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff841660021415610ddf57610dd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237e92505050565b9050610e2c565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b60015490565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b670de0b6b3a764000081565b606181565b662386f26fc1000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b6000805460ff16610ef4576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b868514610f325760405162461bcd60e51b815260040180806020018281038252603b815260200180614732603b913960400191505060405180910390fd5b868314610f705760405162461bcd60e51b815260040180806020018281038252603f815260200180614605603f913960400191505060405180910390fd5b426078018267ffffffffffffffff161015610fbc5760405162461bcd60e51b81526004018080602001828103825260248152602001806144f56024913960400191505060405180910390fd5b6402540be4003406156110005760405162461bcd60e51b81526004018080602001828103825260408152602001806148356040913960400191505060405180910390fd5b60408051868152602080880282010190915285906000908190606090848015611033578160200160208202803683370190505b50905060005b8481101561110e576402540be4008b8b8381811061105357fe5b905060200201358161106157fe5b061561109e5760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b6110c38b8b838181106110ad57fe5b90506020020135856124a290919063ffffffff16565b93506110ef6402540be4008c8c848181106110da57fe5b905060200201356124fc90919063ffffffff16565b8282815181106110fb57fe5b6020908102919091010152600101611039565b5060015461113390611126908663ffffffff61253e16565b849063ffffffff6124a216565b3410156111715760405162461bcd60e51b81526004018080602001828103825260568152602001806147df6056913960600191505060405180910390fd5b611181348463ffffffff61259716565b915061118b61434e565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d7600361124f846125d9565b611264876402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156112c25781810151838201526020016112aa565b50505050905090810190601f1680156112ef5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b600281565b60015481565b61100881565b600b81565b60005460ff166113e4576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b33612000146114245760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061289492505050565b6114e3565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b33611008146115285760405162461bcd60e51b815260040180806020018281038252602381526020018061479c6023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff166115c5576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b33611005146116055760405162461bcd60e51b815260040180806020018281038252602f815260200180614468602f913960400191505060405180910390fd5b60004783106116145747611616565b825b9050670de0b6b3a76400008111156116325760009150506116b7565b80156116b4576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561166e573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60026020526000908152604090205481565b60005460ff1681565b600381565b6000805460ff16611734576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff1610156117805760405162461bcd60e51b81526004018080602001828103825260248152602001806144f56024913960400191505060405180910390fd5b6402540be4003406156117c45760405162461bcd60e51b81526004018080602001828103825260408152602001806148356040913960400191505060405180910390fd5b600080806001600160a01b0388166118a3576001546117ea90879063ffffffff6124a216565b3410156118285760405162461bcd60e51b815260040180806020018281038252606181526020018061457f6061913960800191505060405180910390fd5b6402540be40086061561186c5760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b61187c348763ffffffff61259716565b9050611893866402540be40063ffffffff6124fc16565b6221272160e91b93509150611b46565b6001600160a01b0388166000908152600360205260409020549250826118fa5760405162461bcd60e51b815260040180806020018281038252603181526020018061454e6031913960400191505060405180910390fd5b60015434101561193b5760405162461bcd60e51b815260040180806020018281038252603f8152602001806146a1603f913960400191505060405180910390fd5b506001600160a01b038716600090815260026020526040902054349060088111158061198657506008811180156119865750611984876007198301600a0a63ffffffff6128f016565b155b6119c15760405162461bcd60e51b815260040180806020018281038252603c815260200180614644603c913960400191505060405180910390fd5b6119cb8782612932565b92506119d684612972565b15611a1e576305f5e100831015611a1e5760405162461bcd60e51b815260040180806020018281038252603a815260200180614497603a913960400191505060405180910390fd5b600881101580611a385750600881108015611a3857508683115b611a735760405162461bcd60e51b81526004018080602001828103825260258152602001806145e06025913960400191505060405180910390fd5b677ce66c50e2840000831115611aba5760405162461bcd60e51b81526004018080602001828103825260358152602001806145196035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b158015611b0f57600080fd5b505af1158015611b23573d6000803e3d6000fd5b505050506040513d6020811015611b3957600080fd5b5051611b4457600080fd5b505b611b4e61434e565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff168152509050828160400151600081518110611bfc57fe5b602002602001018181525050878160600151600081518110611c1a57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611c4c57fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611c77846125d9565b611c8c866402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611cea578181015183820152602001611cd2565b50505050905090810190601f168015611d175780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b3361100714611def5760405162461bcd60e51b815260040180806020018281038252602e8152602001806146e0602e913960400191505060405180910390fd5b60208114611e44576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415611f4c576020820151670de0b6b3a76400008111801590611ef357506402540be4008106155b611f44576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155611f89565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61c35081565b33611008146120645760405162461bcd60e51b815260040180806020018281038252602381526020018061479c6023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff1661210a576040805162461bcd60e51b815260206004820152601960248201526000805160206147bf833981519152604482015290519081900360640190fd5b336120001461214a5760405162461bcd60e51b815260040180806020018281038252602f81526020018061476d602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a7892505050565b61100381565b60005460ff16156121f3576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b662386f26fc1000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b600481565b600581565b61100081565b61271081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff1610156122e157828160ff16815181106122b557fe5b01602001516001600160f81b031916156122d4576001909101906122d9565b6122e1565b60010161229a565b5060608160ff166040519080825280601f01601f191660200182016040528015612312576020820181803683370190505b50905060005b8260ff168160ff16101561236e57838160ff168151811061233557fe5b602001015160f81c60f81b828260ff168151811061234f57fe5b60200101906001600160f81b031916908160001a905350600101612318565b5095945050505050565b61100481565b606061238861439a565b600061239384612b76565b91509150806123e9576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b60006123f483612cb5565b905063ffffffff811615612488576040808401516020808601516001600160a01b0316600090815260029091529182205461242f9190612932565b90506124396143cf565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061247c81613002565b95505050505050610e58565b50506040805160008152602081019091529150610e589050565b6000828201838110156116b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130de565b60008261254d575060006116b7565b8282028284828161255a57fe5b04146116b45760405162461bcd60e51b81526004018080602001828103825260218152602001806146806021913960400191505060405180910390fd5b60006116b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613180565b60408051600680825260e08201909252606091829190816020015b60608152602001906001900390816125f45750508351909150612616906131da565b8160008151811061262357fe5b602002602001018190525061264483602001516001600160a01b03166131ed565b8160018151811061265157fe5b60200260200101819052506000836040015151905060608160405190808252806020026020018201604052801561269c57816020015b60608152602001906001900390816126875790505b50905060005b828110156126e9576126ca866040015182815181106126bd57fe5b60200260200101516131da565b8282815181106126d657fe5b60209081029190910101526001016126a2565b506126f381613210565b8360028151811061270057fe5b602002602001018190525060608260405190808252806020026020018201604052801561274157816020015b606081526020019060019003908161272c5790505b50905060005b83811015612797576127788760600151828151811061276257fe5b60200260200101516001600160a01b03166131ed565b82828151811061278457fe5b6020908102919091010152600101612747565b506127a181613210565b846003815181106127ae57fe5b60200260200101819052506060836040519080825280602002602001820160405280156127ef57816020015b60608152602001906001900390816127da5790505b50905060005b8481101561282f576128108860800151828151811061276257fe5b82828151811061281c57fe5b60209081029190910101526001016127f5565b5061283981613210565b8560048151811061284657fe5b60200260200101819052506128688760a0015167ffffffffffffffff166131da565b8560058151811061287557fe5b602002602001018190525061288985613210565b979650505050505050565b61289c6143f6565b60006128a78361329a565b91509150806128e75760405162461bcd60e51b815260040180806020018281038252602481526020018061470e6024913960400191505060405180910390fd5b6114e382613465565b60006116b483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506138e9565b6000600882111561295b57612954836007198401600a0a63ffffffff6124fc16565b90506116b7565b6116b4836008849003600a0a63ffffffff61253e16565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff1610156129e857828160ff16815181106129bc57fe5b01602001516001600160f81b031916156129db576001909101906129e0565b6129e8565b6001016129a1565b50600860ff82161015612a0057600092505050610e58565b816005820360ff1681518110612a1257fe5b6020910101516001600160f81b031916602d60f81b14612a3757600092505050610e58565b816001820360ff1681518110612a4957fe5b6020910101516001600160f81b031916604d60f81b14612a6e57600092505050610e58565b5060019392505050565b612a8061434e565b6000612a8b8361394b565b9150915080612acb5760405162461bcd60e51b81526004018080602001828103825260248152602001806144d16024913960400191505060405180910390fd5b612ad36143f6565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b846040015151811015612b5457612b3185604001518281518110612b2357fe5b602002602001015183613bc6565b85604001518281518110612b4157fe5b6020908102919091010152600101612b03565b506080840151604083015260056060830152612b6f82613465565b5050505050565b612b7e61439a565b6000612b8861439a565b612b9061442d565b612ba1612b9c86613bff565b613c24565b90506000805b612bb083613c6e565b15612ca85780612bd257612bcb612bc684613c8f565b613cdd565b8452612ca0565b8060011415612bff57612bec612be784613c8f565b613d94565b6001600160a01b03166020850152612ca0565b8060021415612c1e57612c14612bc684613c8f565b6040850152612ca0565b8060031415612c4657612c33612be784613c8f565b6001600160a01b03166060850152612ca0565b8060041415612c6e57612c5b612be784613c8f565b6001600160a01b03166080850152612ca0565b8060051415612c9b57612c83612bc684613c8f565b67ffffffffffffffff1660a085015260019150612ca0565b612ca8565b600101612ba7565b5091935090915050915091565b60208101516000906001600160a01b0316612dec578160a0015167ffffffffffffffff16421115612ce857506001610e58565b8160400151471015612cfc57506003610e58565b606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114612d53576040519150601f19603f3d011682016040523d82523d6000602084013e612d58565b606091505b5050905080612d6b575060049050610e58565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009050610e58565b8160a0015167ffffffffffffffff16421115612e0a57506001610e58565b81516020808401516001600160a01b031660009081526003909152604090205414612e3757506002610e58565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612e8757600080fd5b5086fa158015612e9b573d6000803e3d6000fd5b50505050506040513d6020811015612eb257600080fd5b50516040840151909150811015612ecd575060039050610e58565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612f3e57600080fd5b5087f1158015612f52573d6000803e3d6000fd5b50505050506040513d6020811015612f6957600080fd5b505190508015612ff6577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610e589050565b5060059150610e589050565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161301d575050835190915061303f906131da565b8160008151811061304c57fe5b602002602001018190525061306483602001516131da565b8160018151811061307157fe5b602002602001018190525061309283604001516001600160a01b03166131ed565b8160028151811061309f57fe5b60200260200101819052506130bd836060015163ffffffff166131da565b816003815181106130ca57fe5b6020026020010181905250610e2c81613210565b6000818361316a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561312f578181015183820152602001613117565b50505050905090810190601f16801561315c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161317657fe5b0495945050505050565b600081848411156131d25760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b505050900390565b60606116b76131e883613dae565b613e94565b60408051600560a21b8318601482015260348101909152606090610e2c81613e94565b60608151600014156132315750604080516000815260208101909152610e58565b60608260008151811061324057fe5b602002602001015190506000600190505b8351811015613281576132778285838151811061326a57fe5b6020026020010151613ee6565b9150600101613251565b50610e2c613294825160c060ff16613f63565b82613ee6565b6132a26143f6565b60006132ac6143f6565b6132b461442d565b6132c0612b9c86613bff565b90506000805b6132cf83613c6e565b15612ca857806132f5576132e5612be784613c8f565b6001600160a01b0316845261345d565b806001141561339657606061331161330c85613c8f565b61405b565b9050805160405190808252806020026020018201604052801561333e578160200160208202803683370190505b50602086015260005b815181101561338f5761336c82828151811061335f57fe5b6020026020010151613cdd565b8660200151828151811061337c57fe5b6020908102919091010152600101613347565b505061345d565b80600214156134385760606133ad61330c85613c8f565b905080516040519080825280602002602001820160405280156133da578160200160208202803683370190505b50604086015260005b815181101561338f576134088282815181106133fb57fe5b6020026020010151613d94565b8660400151828151811061341857fe5b6001600160a01b03909216602092830291909101909101526001016133e3565b8060031415612c9b5761344d612bc684613c8f565b63ffffffff166060850152600191505b6001016132c6565b80516001600160a01b031661368f5760005b8160200151518110156136895760008260400151828151811061349657fe5b60200260200101516001600160a01b0316612710846020015184815181106134ba57fe5b60209081029190910101516040516000818181858888f193505050503d8060008114613502576040519150601f19603f3d011682016040523d82523d6000602084013e613507565b606091505b50509050806135ca577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061354657fe5b60200260200101518560200151858151811061355e57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613680565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061360057fe5b60200260200101518560200151858151811061361857fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613477565b506138e6565b60005b8160200151518110156138e457600082600001516001600160a01b031663a9059cbb61c350856040015185815181106136c757fe5b6020026020010151866020015186815181106136df57fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561373657600080fd5b5087f115801561374a573d6000803e3d6000fd5b50505050506040513d602081101561376157600080fd5b505190508015613825577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106137a157fe5b6020026020010151856020015185815181106137b957fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16138db565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061385b57fe5b60200260200101518560200151858151811061387357fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613692565b505b50565b600081836139385760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b5082848161394257fe5b06949350505050565b61395361434e565b600061395d61434e565b61396561442d565b613971612b9c86613bff565b90506000805b61398083613c6e565b15613bb8578061399d57613996612bc684613c8f565b8452613bb0565b80600114156139c5576139b2612be784613c8f565b6001600160a01b03166020850152613bb0565b8060021415613a545760606139dc61330c85613c8f565b90508051604051908082528060200260200182016040528015613a09578160200160208202803683370190505b50604086015260005b8151811015613a4d57613a2a82828151811061335f57fe5b86604001518281518110613a3a57fe5b6020908102919091010152600101613a12565b5050613bb0565b8060031415613ae9576060613a6b61330c85613c8f565b90508051604051908082528060200260200182016040528015613a98578160200160208202803683370190505b50606086015260005b8151811015613a4d57613ab98282815181106133fb57fe5b86606001518281518110613ac957fe5b6001600160a01b0390921660209283029190910190910152600101613aa1565b8060041415613b7e576060613b0061330c85613c8f565b90508051604051908082528060200260200182016040528015613b2d578160200160208202803683370190505b50608086015260005b8151811015613a4d57613b4e8282815181106133fb57fe5b86608001518281518110613b5e57fe5b6001600160a01b0390921660209283029190910190910152600101613b36565b8060051415613bab57613b93612bc684613c8f565b67ffffffffffffffff1660a085015260019150613bb0565b613bb8565b600101613977565b509195600195509350505050565b60006008821115613be857612954836007198401600a0a63ffffffff61253e16565b6116b4836008849003600a0a63ffffffff6124fc16565b613c0761444d565b506040805180820190915281518152602082810190820152919050565b613c2c61442d565b613c358261412c565b613c3e57600080fd5b6000613c4d836020015161415c565b60208085015160408051808201909152868152920190820152915050919050565b6000613c7861444d565b505080518051602091820151919092015191011190565b613c9761444d565b613ca082613c6e565b613ca957600080fd5b60208201516000613cb9826141bf565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613cf257508151602110155b613cfb57600080fd5b6000613d0a836020015161415c565b90508083600001511015613d65576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613d8b57826020036101000a820491505b50949350505050565b8051600090601514613da557600080fd5b6116b782613cdd565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613df257506018613e16565b6fffffffffffffffffffffffffffffffff198416613e1257506010613e16565b5060005b6020811015613e4c57818181518110613e2b57fe5b01602001516001600160f81b03191615613e4457613e4c565b600101613e16565b60008160200390506060816040519080825280601f01601f191660200182016040528015613e81576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613ec65750607f60f81b82600081518110613eb457fe5b01602001516001600160f81b03191611155b15613ed2575080610e58565b6116b7613ee48351608060ff16613f63565b835b6060806040519050835180825260208201818101602087015b81831015613f17578051835260209283019201613eff565b50855184518101855292509050808201602086015b81831015613f44578051835260209283019201613f2c565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613fb3576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b6040805160018082528183019092526060916020820181803683370190505090506037841161400d5782840160f81b81600081518110613fef57fe5b60200101906001600160f81b031916908160001a90535090506116b7565b606061401885613dae565b90508381510160370160f81b8260008151811061403157fe5b60200101906001600160f81b031916908160001a9053506140528282613ee6565b95945050505050565b60606140668261412c565b61406f57600080fd5b600061407a836142f2565b90506060816040519080825280602002602001820160405280156140b857816020015b6140a561444d565b81526020019060019003908161409d5790505b50905060006140ca856020015161415c565b60208601510190506000805b84811015614121576140e7836141bf565b915060405180604001604052808381526020018481525084828151811061410a57fe5b6020908102919091010152918101916001016140d6565b509195945050505050565b805160009061413d57506000610e58565b6020820151805160001a9060c0821015612a6e57600092505050610e58565b8051600090811a6080811015614176576000915050610e58565b60b8811080614191575060c08110801590614191575060f881105b156141a0576001915050610e58565b60c08110156141b45760b519019050610e58565b60f519019050610e58565b80516000908190811a60808110156141da57600191506142eb565b60b88110156141ef57607e19810191506142eb565b60c081101561426957600060b78203600186019550806020036101000a865104915060018101820193505080831015614263576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506142eb565b60f881101561427e5760be19810191506142eb565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156142e9576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061430357506000610e58565b60008090506000614317846020015161415c565b602085015185519181019250015b8082101561434557614336826141bf565b60019093019290910190614325565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b604051806040016040528061444061444d565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6ea2646970667358221220e59d62bf5fb2933f655143755e397406da6b105ef90a69a8209ff1a057bc41c964736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerIncentivizeContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "6080604052600436106102765760003560e01c80637e146cc51161014f578063af400681116100c1578063e75d72c71161007a578063e75d72c714610795578063e89a3020146107c8578063f9a2bbc7146107f2578063fc3e590814610807578063fd6a68791461081c578063fdd31fcd146108315761027d565b8063af400681146106ed578063bd4cc83014610717578063c81b166214610741578063dc927faf14610756578063dcae76ab1461076b578063e1c7392a146107805761027d565b8063a3c3c0ad11610113578063a3c3c0ad146105b3578063a78abc16146105c8578063a7c6a59d146105dd578063ab51bb96146105f2578063ac43175114610607578063ace9fcc2146106d85761027d565b80637e146cc51461052c578063930e1b091461054157806396713da9146105745780639dc0926214610589578063a1a11bf51461059e5761027d565b806343756e5c116101e85780636e47b482116101ac5780636e47b482146104645780636f93d2e61461047957806370fd5bad146104d857806374f2272d146104ed57806375d47a0a146105025780637942fd05146105175761027d565b806343756e5c146103e4578063493279b1146103f95780634bf6c8821461042557806351e806721461043a578063541333071461044f5761027d565b806312950c461161023a57806312950c46146103165780631b20087c1461032b5780631c643312146103405780633a975612146102825780633dffc3871461038657806340bb43c0146103b15761027d565b8063081e9d131461028257806308f2ec06146102a9578063093f2fc4146102be5780630bee7a67146102d357806310e06a76146103015761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610864565b60408051918252519081900360200190f35b3480156102b557600080fd5b50610297610869565b3480156102ca57600080fd5b5061029761086e565b3480156102df57600080fd5b506102e8610873565b6040805163ffffffff9092168252519081900360200190f35b34801561030d57600080fd5b50610297610878565b34801561032257600080fd5b5061029761087e565b34801561033757600080fd5b50610297610884565b34801561034c57600080fd5b5061036a6004803603602081101561036357600080fd5b503561088a565b604080516001600160a01b039092168252519081900360200190f35b34801561039257600080fd5b5061039b610864565b6040805160ff9092168252519081900360200190f35b3480156103bd57600080fd5b50610297600480360360208110156103d457600080fd5b50356001600160a01b03166108b1565b3480156103f057600080fd5b5061036a6108c3565b34801561040557600080fd5b5061040e6108c9565b6040805161ffff9092168252519081900360200190f35b34801561043157600080fd5b5061039b6108ce565b34801561044657600080fd5b5061036a6108d3565b34801561045b57600080fd5b50610297610873565b34801561047057600080fd5b5061036a6108d9565b34801561048557600080fd5b506104c46004803603608081101561049c57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013515156108df565b604080519115158252519081900360200190f35b3480156104e457600080fd5b5061039b610cad565b3480156104f957600080fd5b50610297610cb2565b34801561050e57600080fd5b5061036a610cb8565b34801561052357600080fd5b5061039b610cbe565b34801561053857600080fd5b50610297610cc3565b34801561054d57600080fd5b506102976004803603602081101561056457600080fd5b50356001600160a01b0316610cc8565b34801561058057600080fd5b5061039b610cda565b34801561059557600080fd5b5061036a610cdf565b3480156105aa57600080fd5b5061036a610ce5565b3480156105bf57600080fd5b50610297610ceb565b3480156105d457600080fd5b506104c4610cf1565b3480156105e957600080fd5b50610297610cfa565b3480156105fe57600080fd5b506102e8610d00565b34801561061357600080fd5b506106d66004803603604081101561062a57600080fd5b81019060208101813564010000000081111561064557600080fd5b82018360208201111561065757600080fd5b8035906020019184600183028401116401000000008311171561067957600080fd5b91939092909160208101903564010000000081111561069757600080fd5b8201836020820111156106a957600080fd5b803590602001918460018302840111640100000000831117156106cb57600080fd5b509092509050610d05565b005b3480156106e457600080fd5b50610297611354565b3480156106f957600080fd5b506102976004803603602081101561071057600080fd5b503561135a565b34801561072357600080fd5b506102976004803603602081101561073a57600080fd5b50356113b5565b34801561074d57600080fd5b5061036a6113ce565b34801561076257600080fd5b5061036a6113d4565b34801561077757600080fd5b506102976113da565b34801561078c57600080fd5b506106d66113e0565b3480156107a157600080fd5b506106d6600480360360208110156107b857600080fd5b50356001600160a01b03166114a9565b3480156107d457600080fd5b5061036a600480360360208110156107eb57600080fd5b5035611602565b3480156107fe57600080fd5b5061036a61160f565b34801561081357600080fd5b5061039b611615565b34801561082857600080fd5b5061036a61161a565b34801561083d57600080fd5b506102976004803603602081101561085457600080fd5b50356001600160a01b0316611620565b600181565b602881565b605081565b606481565b600b5481565b60015481565b600c5481565b6006818154811061089757fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205481565b61100181565b606181565b600881565b61200081565b61100581565b6000805460ff16610937576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33612000146109775760405162461bcd60e51b815260040180806020018281038252602f815260200180612164602f913960400191505060405180910390fd5b600082156109fc57604080516309a99b4f60e41b8152611005600482015260248101869052905161100291639a99b4f09160448083019260209291908290030181600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b505050506040513d60208110156109f357600080fd5b50519050610a75565b604080516309a99b4f60e41b8152611005600482015260248101869052905161100491639a99b4f09160448083019260209291908290030181600087803b158015610a4657600080fd5b505af1158015610a5a573d6000803e3d6000fd5b505050506040513d6020811015610a7057600080fd5b505190505b600c805460010190556000610a8982611632565b600954909150610a9f908263ffffffff61166116565b600955600a54610ac7908290610abb908563ffffffff61166116565b9063ffffffff6116c216565b600a556001600160a01b038716600090815260056020526040902054610b3357600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038088166000908152600560209081526040808320805460010190559289168252600790522054610bb157600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260076020526040902080546001019055600c54606411610ca057600b54600954600a5460408051938452602084019290925282820152517f2649b1b772a1a74bd332a67695e285317dd722941166595741c60a00fa65bb759181900360600190a16000610c2b611704565b90506000610c376119e8565b6001600160a01b0389166000908152600d6020526040902054909150610c75908290610c69908563ffffffff61166116565b9063ffffffff61166116565b6001600160a01b0389166000908152600d6020526040812091909155600b80546001019055600c5550505b5060019695505050505050565b600281565b60035481565b61100881565b600b81565b600581565b60056020526000908152604090205481565b600981565b61100781565b61100681565b600a5481565b60005460ff1681565b60045481565b600081565b3361100714610d455760405162461bcd60e51b815260040180806020018281038252602e8152602001806120a9602e913960400191505060405180910390fd5b60005460ff16610d865760405162461bcd60e51b81526004018080602001828103825260218152602001806120d76021913960400191505060405180910390fd5b610dfa84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601f81527f68656164657252656c61796572526577617264526174654d6f6c6563756c650060208201529150611c669050565b15610ec75760208114610e3e5760405162461bcd60e51b81526004018080602001828103825260328152602001806121936032913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610e7c91858580838501838280828437600092019190915250611d4d92505050565b9050600254811115610ebf5760405162461bcd60e51b8152600401808060200182810382526060815260200180611f826060913960600191505060405180910390fd5b6001556112c2565b610f2084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805160608101909152602280825290925090506120876020830139611c66565b15610ff85760208114610f645760405162461bcd60e51b815260040180806020018281038252602e815260200180612038602e913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610fa291858580838501838280828437600092019190915250611d4d92505050565b90508015801590610fb557506001548110155b610ff05760405162461bcd60e51b815260040180806020018281038252606c8152602001806120f8606c913960800191505060405180910390fd5b6002556112c2565b61106c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601a81527f63616c6c6572436f6d70656e736174696f6e4d6f6c6563756c6500000000000060208201529150611c669050565b1561113957602081146110b05760405162461bcd60e51b815260040180806020018281038252602e815260200180612038602e913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916110ee91858580838501838280828437600092019190915250611d4d92505050565b90506004548111156111315760405162461bcd60e51b8152600401808060200182810382526056815260200180611fe26056913960600191505060405180910390fd5b6003556112c2565b6111ad84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601d81527f63616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f7200000060208201529150611c669050565b1561128557602081146111f15760405162461bcd60e51b815260040180806020018281038252602e815260200180612038602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161122f91858580838501838280828437600092019190915250611d4d92505050565b9050801580159061124257506003548110155b61127d5760405162461bcd60e51b8152600401808060200182810382526061815260200180611f216061913960800191505060405180910390fd5b6004556112c2565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60025481565b60006028821161136b5750806113b0565b81602810801561137c575060508211155b15611389575060286113b0565b60508211801561139a5750606e8211155b156113aa575060788190036113b0565b50600481045b919050565b6000602882116113c65750806113b0565b5060286113b0565b61100281565b61100381565b60095481565b60005460ff1615611438576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60005460ff1615611486576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60018080556005600255600381905560506004556000805460ff19169091179055565b6001600160a01b0381166000908152600d602052604090205480611508576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c995b185e595c881c995dd85c99607a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d60205260408082208290555184929184156108fc02918591818181858888f193505050506115b85760405161100290819084156108fc029085906000818181858888f19350505050158015611572573d6000803e3d6000fd5b506040805161100281526020810185905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a15050506115ff565b604080516001600160a01b03851681526020810184905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a150505b50565b6008818154811061089757fe5b61100081565b600381565b61100481565b600d6020526000908152604090205481565b600061165b60025461164f60015485611d5290919063ffffffff16565b9063ffffffff611dab16565b92915050565b6000828201838110156116bb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006116bb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ded565b600954600680546040805160208084028201810190925282815260009493859360609383018282801561176057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611742575b5050505050905060608151604051908082528060200260200182016040528015611794578160200160208202803683370190505b50905060005b82518110156118215760008382815181106117b157fe5b6020026020010151905060006117eb60056000846001600160a01b03166001600160a01b03168152602001908152602001600020546113b5565b9050808484815181106117fa57fe5b6020908102919091010152611815868263ffffffff61166116565b9550505060010161179a565b50600061183f60045461164f60035488611d5290919063ffffffff16565b9050611851858263ffffffff6116c216565b94508460015b845181101561192857600061188c8761164f8a88868151811061187657fe5b6020026020010151611d5290919063ffffffff16565b90506118d981600d60008986815181106118a257fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205461166190919063ffffffff16565b600d60008885815181106118e957fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205561191d838263ffffffff6116c216565b925050600101611857565b5061193e81600d6000876000815181106118a257fe5b600d60008660008151811061194f57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060098190555060008090505b84518110156119d057600560008683815181106119a257fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611989565b506119dd60066000611ee9565b509450505050505b90565b600a546008805460408051602080840282018101909252828152600094938593606093830182828015611a4457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a26575b5050505050905060608151604051908082528060200260200182016040528015611a78578160200160208202803683370190505b50905060005b8251811015611af7576000838281518110611a9557fe5b602002602001015190506000611acf60076000846001600160a01b03166001600160a01b031681526020019081526020016000205461135a565b905080848481518110611ade57fe5b6020908102919091010152949094019350600101611a7e565b506000611b1560045461164f60035488611d5290919063ffffffff16565b9050611b27858263ffffffff6116c216565b94508460015b8451811015611bb1576000611b4c8761164f8a88868151811061187657fe5b9050611b6281600d60008986815181106118a257fe5b600d6000888581518110611b7257fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611ba6838263ffffffff6116c216565b925050600101611b2d565b50611bc781600d6000876000815181106118a257fe5b600d600086600081518110611bd857fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506000600a8190555060008090505b8451811015611c595760076000868381518110611c2b57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611c12565b506119dd60086000611ee9565b6000816040516020018082805190602001908083835b60208310611c9b5780518252601f199092019160209182019101611c7c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310611d095780518252601f199092019160209182019101611cea565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b600082611d615750600061165b565b82820282848281611d6e57fe5b04146116bb5760405162461bcd60e51b81526004018080602001828103825260218152602001806120666021913960400191505060405180910390fd5b60006116bb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e84565b60008184841115611e7c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e41578181015183820152602001611e29565b50505050905090810190601f168015611e6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611ed35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e41578181015183820152602001611e29565b506000838581611edf57fe5b0495945050505050565b50805460008255906000526020600020908101906115ff91906119e591905b80821115611f1c5760008155600101611f08565b509056fe746865206e657743616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c656e65772068656164657252656c61796572526577617264526174654d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2068656164657252656c617965725265776172645261746544656e6f6d696e61746f726e65772063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2063616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f726c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7768656164657252656c617965725265776172645261746544656e6f6d696e61746f72746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374636f6e747261637420686173206e6f74206265656e20696e697469616c697a6564746865206e65772068656164657252656c617965725265776172645261746544656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2068656164657252656c61796572526577617264526174654d6f6c6563756c65746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163746c656e677468206f662068656164657252656c61796572526577617264526174654d6f6c6563756c65206d69736d61746368a2646970667358221220b0f586134d92421afeb7764dfa9711bf04e0920aa1729c40e9183ccccafbb49d64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "6080604052600436106101c25760003560e01c806395468d26116100f7578063c81b166211610095578063f9a2bbc711610064578063f9a2bbc714610529578063fb7cfdd71461053e578063fc3e590814610553578063fd6a687914610568576101c2565b8063c81b1662146104d5578063dc927faf146104ea578063e1c7392a146104ff578063e79a198f14610514576101c2565b8063a1a11bf5116100d1578063a1a11bf5146103c7578063a78abc16146103dc578063ab51bb96146103f1578063ac43175114610406576101c2565b806395468d261461038857806396713da91461039d5780639dc09262146103b2576101c2565b8063541d55481161016457806370fd5bad1161013e57806370fd5bad1461033457806375d47a0a146103495780637942fd051461035e5780637ae2308814610373576101c2565b8063541d5548146102b15780636a87d780146102f85780636e47b4821461031f576101c2565b806343756e5c116101a057806343756e5c1461022a578063493279b11461025b5780634bf6c8821461028757806351e806721461029c576101c2565b80630bee7a67146101c75780631aa3a008146101f55780633dffc387146101ff575b600080fd5b3480156101d357600080fd5b506101dc61057d565b6040805163ffffffff9092168252519081900360200190f35b6101fd610582565b005b34801561020b57600080fd5b5061021461077d565b6040805160ff9092168252519081900360200190f35b34801561023657600080fd5b5061023f610782565b604080516001600160a01b039092168252519081900360200190f35b34801561026757600080fd5b50610270610788565b6040805161ffff9092168252519081900360200190f35b34801561029357600080fd5b5061021461078d565b3480156102a857600080fd5b5061023f610792565b3480156102bd57600080fd5b506102e4600480360360208110156102d457600080fd5b50356001600160a01b0316610798565b604080519115158252519081900360200190f35b34801561030457600080fd5b5061030d6107b6565b60408051918252519081900360200190f35b34801561032b57600080fd5b5061023f6107bc565b34801561034057600080fd5b506102146107c2565b34801561035557600080fd5b5061023f6107c7565b34801561036a57600080fd5b506102146107cd565b34801561037f57600080fd5b5061030d6107d2565b34801561039457600080fd5b5061030d6107df565b3480156103a957600080fd5b506102146107eb565b3480156103be57600080fd5b5061023f6107f0565b3480156103d357600080fd5b5061023f6107f6565b3480156103e857600080fd5b506102e46107fc565b3480156103fd57600080fd5b506101dc610805565b34801561041257600080fd5b506101fd6004803603604081101561042957600080fd5b81019060208101813564010000000081111561044457600080fd5b82018360208201111561045657600080fd5b8035906020019184600183028401116401000000008311171561047857600080fd5b91939092909160208101903564010000000081111561049657600080fd5b8201836020820111156104a857600080fd5b803590602001918460018302840111640100000000831117156104ca57600080fd5b50909250905061080a565b3480156104e157600080fd5b5061023f610c2c565b3480156104f657600080fd5b5061023f610c32565b34801561050b57600080fd5b506101fd610c38565b34801561052057600080fd5b506101fd610cba565b34801561053557600080fd5b5061023f610e73565b34801561054a57600080fd5b5061030d610e79565b34801561055f57600080fd5b50610214610e7f565b34801561057457600080fd5b5061023f610e84565b606481565b3360009081526004602052604090205460ff16156105df576040805162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e48195e1a5cdd605a1b604482015290519081900360640190fd5b60005460ff16610632576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b61063b33610e8a565b156106775760405162461bcd60e51b815260040180806020018281038252602781526020018061109c6027913960400191505060405180910390fd5b3332146106c1576040805162461bcd60e51b81526020600482015260136024820152721b9bc81c1c9bde1e481a5cc8185b1b1bddd959606a1b604482015290519081900360640190fd5b60015434146107015760405162461bcd60e51b81526004018080602001828103825260258152602001806110776025913960400191505060405180910390fd5b604080518082018252600180548252600254602080840191825233600081815260038352868120955186559251948401949094556004815290849020805460ff1916909217909155825191825291517fdb33a09d38b59a8fa8b7d92a1d82c8015e99f05f67ae9c9ae623157767959496929181900390910190a1565b600181565b61100181565b606181565b600881565b61200081565b6001600160a01b031660009081526004602052604090205460ff1690565b60025481565b61100581565b600281565b61100881565b600b81565b68056bc75e2d6310000081565b67016345785d8a000081565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff1661085d576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b336110071461089d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806110c3602e913960400191505060405180910390fd5b61090384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e1c995c5d5a5c995911195c1bdcda5d608a1b60208201529150610e909050565b15610a0657602081146109475760405162461bcd60e51b81526004018080602001828103825260228152602001806110f16022913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161098591858580838501838280828437600092019190915250610f7792505050565b90506001811180156109a05750683635c9adc5dea000008111155b80156109ad575060025481115b6109fe576040805162461bcd60e51b815260206004820181905260248201527f7468652072657175697265644465706f736974206f7574206f662072616e6765604482015290519081900360640190fd5b600155610b9a565b610a6184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260048152636475657360e01b60208201529150610e909050565b15610b5d5760208114610abb576040805162461bcd60e51b815260206004820152601760248201527f6c656e677468206f662064756573206d69736d61746368000000000000000000604482015290519081900360640190fd5b604080516020601f8401819004810282018101909252828152600091610af991858580838501838280828437600092019190915250610f7792505050565b9050600081118015610b0c575060015481105b610b55576040805162461bcd60e51b81526020600482015260156024820152747468652064756573206f7574206f662072616e676560581b604482015290519081900360640190fd5b600255610b9a565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b60005460ff1615610c90576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b68056bc75e2d63100000600190815567016345785d8a00006002556000805460ff19169091179055565b3360009081526004602052604090205460ff16610d15576040805162461bcd60e51b81526020600482015260146024820152731c995b185e595c88191bc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b60005460ff16610d68576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b610d7061105c565b5033600081815260036020908152604091829020825180840190935280548084526001909101549183018290529192916108fc91610db4919063ffffffff610f7c16565b6040518115909202916000818181858888f19350505050158015610ddc573d6000803e3d6000fd5b50602081015160405161100291829181156108fc0291906000818181858888f19350505050158015610e12573d6000803e3d6000fd5b50336000818152600460209081526040808320805460ff191690556003825280832083815560010192909255815192835290517fd17202129b83db7880d6b9f25df81c58ad46f7e0e2c92236b1aa10663a4876679281900390910190a15050565b61100081565b60015481565b600381565b61100481565b3b151590565b6000816040516020018082805190602001908083835b60208310610ec55780518252601f199092019160209182019101610ea6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610f335780518252601f199092019160209182019101610f14565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b6000610fbe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fc5565b9392505050565b600081848411156110545760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611019578181015183820152602001611001565b50505050905090810190601f1680156110465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60405180604001604052806000815260200160008152509056fe6465706f7369742076616c7565206973206e6f742065786163746c79207468652073616d65636f6e7472616374206973206e6f7420616c6c6f77656420746f20626520612072656c61796572746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662072657175697265644465706f736974206d69736d61746368a26469706673582212205b3719dbe352a0da1c7c0fda084d877d745e453695a354811ae82144145a56ae64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(GovHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "608060405234801561001057600080fd5b506004361061018e5760003560e01c8063831d65d1116100de578063ab51bb9611610097578063dc927faf11610071578063dc927faf14610486578063f9a2bbc71461048e578063fc3e590814610496578063fd6a68791461049e5761018e565b8063ab51bb96146103fc578063c81b166214610404578063c8509d811461040c5761018e565b8063831d65d11461034457806396713da9146103c05780639ab1a373146103c85780639dc09262146103d0578063a1a11bf5146103d8578063a78abc16146103e05761018e565b8063493279b11161014b5780636e47b482116101255780636e47b4821461032457806370fd5bad1461032c57806375d47a0a146103345780637942fd051461033c5761018e565b8063493279b1146102f55780634bf6c8821461031457806351e806721461031c5761018e565b80630bee7a67146101935780631182b875146101b45780633a21baae146102a35780633dffc387146102ab57806343756e5c146102c95780634900c4ea146102ed575b600080fd5b61019b6104a6565b6040805163ffffffff9092168252519081900360200190f35b61022e600480360360408110156101ca57600080fd5b60ff82351691908101906040810160208201356401000000008111156101ef57600080fd5b82018360208201111561020157600080fd5b8035906020019184600183028401116401000000008311171561022357600080fd5b5090925090506104ab565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610268578181015183820152602001610250565b50505050905090810190601f1680156102955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61019b61059a565b6102b361059f565b6040805160ff9092168252519081900360200190f35b6102d16105a4565b604080516001600160a01b039092168252519081900360200190f35b6102b36105aa565b6102fd6105af565b6040805161ffff9092168252519081900360200190f35b6102b36105b4565b6102d16105b9565b6102d16105bf565b6102b36105c5565b6102d16105ca565b6102b36105d0565b6103be6004803603604081101561035a57600080fd5b60ff823516919081019060408101602082013564010000000081111561037f57600080fd5b82018360208201111561039157600080fd5b803590602001918460018302840111640100000000831117156103b357600080fd5b5090925090506105d5565b005b6102b3610667565b61019b61066c565b6102d1610671565b6102d1610677565b6103e861067d565b604080519115158252519081900360200190f35b61019b6105aa565b6102d1610686565b6103be6004803603604081101561042257600080fd5b60ff823516919081019060408101602082013564010000000081111561044757600080fd5b82018360208201111561045957600080fd5b8035906020019184600183028401116401000000008311171561047b57600080fd5b50909250905061068c565b6102d1610703565b6102d1610709565b6102b361070f565b6102d1610714565b606481565b606033612000146104ed5760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b6104f5611382565b600061053685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061071a92505050565b91509150806105525761054960646107e0565b92505050610593565b600061055d8361084a565b905063ffffffff811661058457505060408051600081526020810190915291506105939050565b61058d816107e0565b93505050505b9392505050565b606681565b600181565b61100181565b600081565b606181565b600881565b61200081565b61100581565b600281565b61100881565b600b81565b33612000146106155760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b6040805162461bcd60e51b815260206004820152601e60248201527f7265636569766520756e65787065637465642061636b207061636b6167650000604482015290519081900360640190fd5b505050565b600981565b606581565b61100781565b61100681565b60005460ff1681565b61100281565b33612000146106cc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806113e7602f913960400191505060405180910390fd5b60405162461bcd60e51b81526004018080602001828103825260238152602001806114166023913960400191505060405180910390fd5b61100381565b61100081565b600381565b61100481565b610722611382565b600061072c611382565b6107346113ac565b61074561074086610beb565b610c10565b90506000805b61075483610c5a565b156107d357806107765761076f61076a84610c7b565b610cc9565b84526107cb565b80600114156107955761078b61076a84610c7b565b60208501526107cb565b80600214156107c6576107af6107aa84610c7b565b610d42565b6001600160a01b03166040850152600191506107cb565b6107d3565b60010161074b565b5091935090915050915091565b604080516001808252818301909252606091829190816020015b60608152602001906001900390816107fa5790505090506108208363ffffffff16610d62565b8160008151811061082d57fe5b602002602001018190525061084181610d75565b9150505b919050565b60006108598260400151610dff565b6108c557604080516020808252601c908201527f74686520746172676574206973206e6f74206120636f6e7472616374000000008183015290517f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb29181900360600190a1506065610845565b81604001516001600160a01b031663ac431751836000015184602001516040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561093257818101518382015260200161091a565b50505050905090810190601f16801561095f5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561099257818101518382015260200161097a565b50505050905090810190601f1680156109bf5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156109e057600080fd5b505af19250505080156109f1575060015b610be3576040516000815260443d1015610a0d57506000610aaa565b60046000803e60005160e01c6308c379a08114610a2e576000915050610aaa565b60043d036004833e81513d602482011167ffffffffffffffff82111715610a5a57600092505050610aaa565b808301805167ffffffffffffffff811115610a7c576000945050505050610aaa565b8060208301013d8601811115610a9a57600095505050505050610aaa565b601f01601f191660405250925050505b80610ab55750610b58565b7f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b14578181015183820152602001610afc565b50505050905090810190601f168015610b415780820380516001836020036101000a031916815260200191505b509250505060405180910390a16066915050610845565b3d808015610b82576040519150601f19603f3d011682016040523d82523d6000602084013e610b87565b606091505b5060408051602080825283518183015283517f1279f84165b4fd69c35e1f338ff107231b036c655cd1688851e011ce617c4e8d938593928392918301919085019080838360008315610b14578181015183820152602001610afc565b506000919050565b610bf36113cc565b506040805180820190915281518152602082810190820152919050565b610c186113ac565b610c2182610e05565b610c2a57600080fd5b6000610c398360200151610e3f565b60208085015160408051808201909152868152920190820152915050919050565b6000610c646113cc565b505080518051602091820151919092015191011190565b610c836113cc565b610c8c82610c5a565b610c9557600080fd5b60208201516000610ca582610ea2565b80830160209586015260408051808201909152908152938401919091525090919050565b8051606090610cd757600080fd5b6000610ce68360200151610e3f565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015610d1d576020820181803683370190505b5090506000816020019050610d39848760200151018285610fd5565b50949350505050565b8051600090601514610d5357600080fd5b610d5c82611020565b92915050565b6060610d5c610d70836110d5565b6111bb565b6060815160001415610d965750604080516000815260208101909152610845565b606082600081518110610da557fe5b602002602001015190506000600190505b8351811015610de657610ddc82858381518110610dcf57fe5b602002602001015161120d565b9150600101610db6565b50610841610df9825160c060ff1661128a565b8261120d565b3b151590565b8051600090610e1657506000610845565b6020820151805160001a9060c0821015610e3557600092505050610845565b5060019392505050565b8051600090811a6080811015610e59576000915050610845565b60b8811080610e74575060c08110801590610e74575060f881105b15610e83576001915050610845565b60c0811015610e975760b519019050610845565b60f519019050610845565b80516000908190811a6080811015610ebd5760019150610fce565b60b8811015610ed257607e1981019150610fce565b60c0811015610f4c57600060b78203600186019550806020036101000a865104915060018101820193505080831015610f46576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50610fce565b60f8811015610f615760be1981019150610fce565b600060f78203600186019550806020036101000a865104915060018101820193505080831015610fcc576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b80610fdf57610662565b5b60208110610fff578251825260209283019290910190601f1901610fe0565b915181516020939093036101000a6000190180199091169216919091179052565b80516000901580159061103557508151602110155b61103e57600080fd5b600061104d8360200151610e3f565b905080836000015110156110a8576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015610d3957506020919091036101000a90049392505050565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166111195750601861113d565b6fffffffffffffffffffffffffffffffff1984166111395750601061113d565b5060005b60208110156111735781818151811061115257fe5b01602001516001600160f81b0319161561116b57611173565b60010161113d565b60008160200390506060816040519080825280601f01601f1916602001820160405280156111a8576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156111ed5750607f60f81b826000815181106111db57fe5b01602001516001600160f81b03191611155b156111f9575080610845565b610d5c61120b8351608060ff1661128a565b835b6060806040519050835180825260208201818101602087015b8183101561123e578051835260209283019201611226565b50855184518101855292509050808201602086015b8183101561126b578051835260209283019201611253565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106112da576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116113345782840160f81b8160008151811061131657fe5b60200101906001600160f81b031916908160001a9053509050610d5c565b606061133f856110d5565b90508381510160370160f81b8260008151811061135857fe5b60200101906001600160f81b031916908160001a905350611379828261120d565b95945050505050565b6040518060600160405280606081526020016060815260200160006001600160a01b031681525090565b60405180604001604052806113bf6113cc565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163747265636569766520756e6578706563746564206661696c2061636b207061636b616765a2646970667358221220401be81505a1aa0dde70753881234490b5e4c39ce009cb7950f994eead5c3f9064736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "6080604052600436106102465760003560e01c806375d47a0a11610139578063ab51bb96116100b6578063dc6f5e901161007a578063dc6f5e90146108df578063dc927faf14610975578063f9a2bbc71461098a578063fc3e5908146108df578063fd6a68791461099f578063fe3a2af5146104fd57610246565b8063ab51bb96146108b5578063c81b1662146108ca578063c8509d81146107c5578063c8e704a4146108df578063d117a110146108f457610246565b806395b9ad26116100fd57806395b9ad261461084c57806396713da9146108615780639dc0926214610876578063a1a11bf51461088b578063a78abc16146108a057610246565b806375d47a0a146106e757806377d9dae8146106fc5780637942fd05146107b05780637d078e13146103c8578063831d65d1146107c557610246565b80634a688818116101c75780635f558f861161018b5780635f558f86146105515780636b3f1307146105665780636e47b4821461062e57806370fd5bad1461055157806372c4e0861461064357610246565b80634a688818146104fd5780634bc81c00146105125780634bf6c8821461024b57806351e80672146105275780635d499b1b1461053c57610246565b806323996b531161020e57806323996b53146103c85780633dffc387146103c857806343756e5c146103dd578063445fcefe1461040e578063493279b1146104d157610246565b8063077b8f351461024b5780630bee7a67146102765780630f212b1b146102a45780631182b875146102b95780631f91600b146103b3575b600080fd5b34801561025757600080fd5b506102606109b4565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b5061028b6109b9565b6040805163ffffffff9092168252519081900360200190f35b3480156102b057600080fd5b506102606109be565b3480156102c557600080fd5b5061033e600480360360408110156102dc57600080fd5b60ff8235169190810190604081016020820135600160201b81111561030057600080fd5b82018360208201111561031257600080fd5b803590602001918460018302840111600160201b8311171561033357600080fd5b5090925090506109c3565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b50610260610a4c565b3480156103d457600080fd5b50610260610a51565b3480156103e957600080fd5b506103f2610a56565b604080516001600160a01b039092168252519081900360200190f35b34801561041a57600080fd5b506104bf6004803603602081101561043157600080fd5b810190602081018135600160201b81111561044b57600080fd5b82018360208201111561045d57600080fd5b803590602001918460018302840111600160201b8311171561047e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a5c945050505050565b60408051918252519081900360200190f35b3480156104dd57600080fd5b506104e6610bbb565b6040805161ffff9092168252519081900360200190f35b34801561050957600080fd5b50610260610bc0565b34801561051e57600080fd5b50610260610bc5565b34801561053357600080fd5b506103f2610bca565b34801561054857600080fd5b506104bf610bd0565b34801561055d57600080fd5b50610260610bd9565b61061a6004803603604081101561057c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105a657600080fd5b8201836020820111156105b857600080fd5b803590602001918460018302840111600160201b831117156105d957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bde945050505050565b604080519115158252519081900360200190f35b34801561063a57600080fd5b506103f2611460565b61061a6004803603602081101561065957600080fd5b810190602081018135600160201b81111561067357600080fd5b82018360208201111561068557600080fd5b803590602001918460018302840111600160201b831117156106a657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611466945050505050565b3480156106f357600080fd5b506103f26118b4565b61061a6004803603604081101561071257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561073c57600080fd5b82018360208201111561074e57600080fd5b803590602001918460018302840111600160201b8311171561076f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118ba945050505050565b3480156107bc57600080fd5b50610260611dc1565b3480156107d157600080fd5b5061084a600480360360408110156107e857600080fd5b60ff8235169190810190604081016020820135600160201b81111561080c57600080fd5b82018360208201111561081e57600080fd5b803590602001918460018302840111600160201b8311171561083f57600080fd5b509092509050611dc6565b005b34801561085857600080fd5b50610260611e79565b34801561086d57600080fd5b50610260611e7e565b34801561088257600080fd5b506103f2611e83565b34801561089757600080fd5b506103f2611e89565b3480156108ac57600080fd5b5061061a611e8f565b3480156108c157600080fd5b5061028b610bc0565b3480156108d657600080fd5b506103f2611e98565b3480156108eb57600080fd5b50610260611e9e565b34801561090057600080fd5b5061091e6004803603602081101561091757600080fd5b5035611ea3565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a083015267ffffffffffffffff90921660c082015290519081900360e00190f35b34801561098157600080fd5b506103f2611efb565b34801561099657600080fd5b506103f2611f01565b3480156109ab57600080fd5b506103f2611f07565b600881565b606481565b600681565b60603361200014610a055760405162461bcd60e51b815260040180806020018281038252602f8152602001806132a0602f913960400191505060405180910390fd5b610a4483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f0d92505050565b949350505050565b600481565b600181565b61100181565b6020810151600090610a6c613168565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a082015261010090910467ffffffffffffffff1660c082015290610af457600092505050610bb6565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610b5257600080fd5b505afa158015610b66573d6000803e3d6000fd5b505050506040513d6020811015610b7c57600080fd5b505160808301516060840151919250600091610b9d9163ffffffff61219e16565b9050610baf818363ffffffff61219e16565b9450505050505b919050565b606181565b600081565b600581565b61200081565b6402540be40081565b600281565b600080610bea836121e7565b9050610bf4613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152610cba576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b6000610cd78260800151836060015161219e90919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b031614610d2d5760405162461bcd60e51b815260040180806020018281038252604581526020018061322d6045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50516001600160a01b031614610de15760405162461bcd60e51b815260040180806020018281038252602e815260200180613272602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b158015610e2d57600080fd5b505afa158015610e41573d6000803e3d6000fd5b505050506040513d6020811015610e5757600080fd5b505160408051636eb1769f60e11b815233600482015230602482015290519192508391610ee89184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50519063ffffffff6121ee16565b1015610f3b576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7d57600080fd5b505afa158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b50519050808210801590610fc057506402540be4008206155b610ffb5760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b6000611007868b612248565b905063ffffffff8116611206576001600160a01b038a166323b872dd33611004611037898963ffffffff61219e16565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561109f57600080fd5b505af11580156110b3573d6000803e3d6000fd5b505050506040513d60208110156110c957600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b15801561113257600080fd5b505af1158015611146573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156111c55781810151838201526020016111ad565b50505050905090810190601f1680156111f25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26112be565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561128257818101518382015260200161126a565b50505050905090810190601f1680156112af5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556113186131a4565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611360573d6000803e3d6000fd5b5061200063f7a251d760016113748461269f565b611389886402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156113e75781810151838201526020016113cf565b50505050905090810190601f1680156114145780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561143557600080fd5b505af1158015611449573d6000803e3d6000fd5b505050506001985050505050505050505b92915050565b61100581565b600080611472836121e7565b905061147c613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152611542576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c0015167ffffffffffffffff16106115a4576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e657600080fd5b505afa1580156115fa573d6000803e3d6000fd5b505050506040513d602081101561161057600080fd5b5051905080821080159061162957506402540be4008206155b6116645760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556116be6131a4565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f19350505050158015611701573d6000803e3d6000fd5b5061200063f7a251d760016117158461269f565b61172a876402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611788578181015183820152602001611770565b50505050905090810190601f1680156117b55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156117d657600080fd5b505af11580156117ea573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561186c578181015183820152602001611854565b50505050905090810190601f1680156118995780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806118c6836121e7565b90506118d0613168565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a084015261010090910467ffffffffffffffff1660c0830152611996576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146119ea5760405162461bcd60e51b815260040180806020018281038252604581526020018061322d6045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d6020811015611a5757600080fd5b50516001600160a01b031614611ab4576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703265206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611af657600080fd5b505afa158015611b0a573d6000803e3d6000fd5b505050506040513d6020811015611b2057600080fd5b50519050808210801590611b3957506402540be4008206155b611b745760405162461bcd60e51b81526004018080602001828103825260378152602001806131f66037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611bce6131a4565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f19350505050158015611c11573d6000803e3d6000fd5b5061200063f7a251d76001611c258461269f565b611c3a876402540be40063ffffffff61272916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611c98578181015183820152602001611c80565b50505050905090810190601f168015611cc55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611ce657600080fd5b505af1158015611cfa573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611d78578181015183820152602001611d60565b50505050905090810190601f168015611da55780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b3361200014611e065760405162461bcd60e51b815260040180806020018281038252602f8152602001806132a0602f913960400191505060405180910390fd5b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b600781565b600981565b61100781565b61100681565b60005460ff1681565b61100281565b600381565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b0390931693919291811690610100900467ffffffffffffffff1687565b61100381565b61100081565b61100481565b6060611f17613168565b6000611f228461276b565b9150915080611f78576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff1661202c576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff00191661010067ffffffffffffffff90921691909102179055612183565b815160ff16600114156121365760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561208557600080fd5b505afa158015612099573d6000803e3d6000fd5b505050506040513d60208110156120af57600080fd5b505190506001600160a01b038116156121305760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561211757600080fd5b505af115801561212b573d6000803e3d6000fd5b505050505b50612183565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b60006121e083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128bd565b9392505050565b6020015190565b6000828201838110156121e0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561228457600080fd5b505afa158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b5051604080516395d89b4160e01b815290519192506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b1580156122f657600080fd5b505afa15801561230a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561233357600080fd5b8101908080516040519392919084600160201b82111561235257600080fd5b90830190602082018581111561236757600080fd5b8251600160201b81118282018810171561238057600080fd5b82525081516020918201929091019080838360005b838110156123ad578181015183820152602001612395565b50505050905090810190601f1680156123da5780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b15801561242a57600080fd5b505afa15801561243e573d6000803e3d6000fd5b505050506040513d602081101561245457600080fd5b5051608087015160608801519192506000916124759163ffffffff61219e16565b9050428760c0015167ffffffffffffffff16101561249b57506001935061145a92505050565b6124a9838860200151612954565b6124bb57506002935061145a92505050565b808211156124d157506003935061145a92505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561251357600080fd5b505afa158015612527573d6000803e3d6000fd5b505050506040513d602081101561253d57600080fd5b50511461255257506004935061145a92505050565b8660a0015160ff16841461256e57506005935061145a92505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b1580156125b357600080fd5b505afa1580156125c7573d6000803e3d6000fd5b505050506040513d60208110156125dd57600080fd5b50516001600160a01b031614158061267f57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561265057600080fd5b505afa158015612664573d6000803e3d6000fd5b505050506040513d602081101561267a57600080fd5b505114155b1561269257506006935061145a92505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b60608152602001906001900390816126b857505083519091506126e09063ffffffff16612a3c565b816000815181106126ed57fe5b6020026020010181905250612708836020015160001c612a3c565b8160018151811061271557fe5b60200260200101819052506121e081612a4f565b60006121e083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ad9565b612773613168565b600061277d613168565b6127856131bb565b61279661279186612b3e565b612b63565b90506000805b6127a583612bad565b156128b057806127ca576127c06127bb84612bce565b612c1c565b60ff1684526128a8565b80600114156127e9576127df6127bb84612bce565b60208501526128a8565b8060021415612816576128036127fe84612bce565b612cd1565b6001600160a01b031660408501526128a8565b80600314156128355761282b6127bb84612bce565b60608501526128a8565b80600414156128545761284a6127bb84612bce565b60808501526128a8565b8060051415612876576128696127bb84612bce565b60ff1660a08501526128a8565b80600614156128a35761288b6127bb84612bce565b67ffffffffffffffff1660c0850152600191506128a8565b6128b0565b60010161279c565b5091935090915050915091565b6000818484111561294c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129115781810151838201526020016128f9565b50505050905090810190601f16801561293e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b815160009083906008108061296a575080516003115b1561297957600091505061145a565b604080516020808252818301909252606091602082018180368337019050509050836020820152808251815181106129ad57fe5b6020910101516001600160f81b031916602d60f81b146129d25760009250505061145a565b600160005b8351811015612a32578281815181106129ec57fe5b602001015160f81c60f81b6001600160f81b031916848281518110612a0d57fe5b01602001516001600160f81b03191614612a2a5760009150612a32565b6001016129d7565b5095945050505050565b606061145a612a4a83612ceb565b612dd1565b6060815160001415612a705750604080516000815260208101909152610bb6565b606082600081518110612a7f57fe5b602002602001015190506000600190505b8351811015612ac057612ab682858381518110612aa957fe5b6020026020010151612e23565b9150600101612a90565b506121e0612ad3825160c060ff16612ea0565b82612e23565b60008183612b285760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129115781810151838201526020016128f9565b506000838581612b3457fe5b0495945050505050565b612b466131db565b506040805180820190915281518152602082810190820152919050565b612b6b6131bb565b612b7482612f98565b612b7d57600080fd5b6000612b8c8360200151612fd2565b60208085015160408051808201909152868152920190820152915050919050565b6000612bb76131db565b505080518051602091820151919092015191011190565b612bd66131db565b612bdf82612bad565b612be857600080fd5b60208201516000612bf882613035565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612c3157508151602110155b612c3a57600080fd5b6000612c498360200151612fd2565b90508083600001511015612ca4576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b82516020808501518301805192849003929183101561219557506020919091036101000a90049392505050565b8051600090601514612ce257600080fd5b61145a82612c1c565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416612d2f57506018612d53565b6fffffffffffffffffffffffffffffffff198416612d4f57506010612d53565b5060005b6020811015612d8957818181518110612d6857fe5b01602001516001600160f81b03191615612d8157612d89565b600101612d53565b60008160200390506060816040519080825280601f01601f191660200182016040528015612dbe576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015612e035750607f60f81b82600081518110612df157fe5b01602001516001600160f81b03191611155b15612e0f575080610bb6565b61145a612e218351608060ff16612ea0565b835b6060806040519050835180825260208201818101602087015b81831015612e54578051835260209283019201612e3c565b50855184518101855292509050808201602086015b81831015612e81578051835260209283019201612e69565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310612ef0576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411612f4a5782840160f81b81600081518110612f2c57fe5b60200101906001600160f81b031916908160001a905350905061145a565b6060612f5585612ceb565b90508381510160370160f81b82600081518110612f6e57fe5b60200101906001600160f81b031916908160001a905350612f8f8282612e23565b95945050505050565b8051600090612fa957506000610bb6565b6020820151805160001a9060c0821015612fc857600092505050610bb6565b5060019392505050565b8051600090811a6080811015612fec576000915050610bb6565b60b8811080613007575060c08110801590613007575060f881105b15613016576001915050610bb6565b60c081101561302a5760b519019050610bb6565b60f519019050610bb6565b80516000908190811a60808110156130505760019150613161565b60b881101561306557607e1981019150613161565b60c08110156130df57600060b78203600186019550806020036101000a8651049150600181018201935050808310156130d9576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50613161565b60f88110156130f45760be1981019150613161565b600060f78203600186019550806020036101000a86510491506001810182019350508083101561315f576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b60405180604001604052806131ce6131db565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe72656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e6420726571756573746f6e6c79206265703265206f776e65722063616e20617070726f766520746869732062696e642072657175657374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374a2646970667358221220914ada54d09b696ad62036cb65a565d2a3c3d1be8ef0e6805b9a955ec5783d0864736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(CrossChainContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760", + Code: "608060405234801561001057600080fd5b50600436106102485760003560e01c8063863fe4ab1161013b578063c81b1662116100b8578063e3b048051161007c578063e3b048051461072c578063f7a251d71461074c578063f9a2bbc7146107c4578063fc3e5908146107cc578063fd6a6879146107d457610248565b8063c81b1662146106dd578063d31f968d146106e5578063d76a867514610714578063dc927faf1461071c578063e1c7392a1461072457610248565b8063a78abc16116100ff578063a78abc16146105d3578063ab51bb96146105db578063ac431751146105e3578063b0355f5b146103ff578063c27cdcfb146106a157610248565b8063863fe4ab146105b35780638cc8f561146104b657806396713da9146105bb5780639dc09262146105c3578063a1a11bf5146105cb57610248565b8063493279b1116101c957806370fd5bad1161018d57806370fd5bad146104b657806374f079b8146104be57806375d47a0a146104c65780637942fd05146104ce57806384013b6a146104d657610248565b8063493279b11461045f5780634bf6c8821461047e57806351e80672146104865780636e47a51a1461048e5780636e47b482146104ae57610248565b8063308325f411610210578063308325f4146102cf5780633bdc47a6146102d75780633dffc387146103ff578063422f90501461040757806343756e5c1461043b57610248565b806305e682581461024d5780630bee7a671461026b57806314b3023b1461028c57806322556cdc146102a65780632ff32aea146102ae575b600080fd5b6102556107dc565b6040805160ff9092168252519081900360200190f35b6102736107e1565b6040805163ffffffff9092168252519081900360200190f35b6102946107e6565b60408051918252519081900360200190f35b6102946107ec565b6102b66107f1565b60408051600792830b90920b8252519081900360200190f35b6102946107fa565b61038a600480360360608110156102ed57600080fd5b60ff82351691602081013591810190606081016040820135600160201b81111561031657600080fd5b82018360208201111561032857600080fd5b803590602001918460018302840111600160201b8311171561034957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610800945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103c45781810151838201526020016103ac565b50505050905090810190601f1680156103f15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610255610876565b6104276004803603602081101561041d57600080fd5b503560ff1661087b565b604080519115158252519081900360200190f35b610443610890565b604080516001600160a01b039092168252519081900360200190f35b610467610896565b6040805161ffff9092168252519081900360200190f35b61025561089b565b6104436108a0565b610443600480360360208110156104a457600080fd5b503560ff166108a6565b6104436108c1565b6102556108c7565b6102946108cc565b6104436108d2565b6102556108d8565b6105b1600480360360a08110156104ec57600080fd5b810190602081018135600160201b81111561050657600080fd5b82018360208201111561051857600080fd5b803590602001918460018302840111600160201b8311171561053957600080fd5b919390929091602081019035600160201b81111561055657600080fd5b82018360208201111561056857600080fd5b803590602001918460018302840111600160201b8311171561058957600080fd5b919350915080356001600160401b03908116916020810135909116906040013560ff166108dd565b005b610294611a8d565b610255611a95565b610443611a9a565b610443611aa0565b610427611aa6565b6102736107dc565b6105b1600480360360408110156105f957600080fd5b810190602081018135600160201b81111561061357600080fd5b82018360208201111561062557600080fd5b803590602001918460018302840111600160201b8311171561064657600080fd5b919390929091602081019035600160201b81111561066357600080fd5b82018360208201111561067557600080fd5b803590602001918460018302840111600160201b8311171561069657600080fd5b509092509050611aaf565b6106c1600480360360208110156106b757600080fd5b503560ff16612051565b604080516001600160401b039092168252519081900360200190f35b61044361206c565b610427600480360360408110156106fb57600080fd5b5080356001600160a01b0316906020013560ff16612072565b61038a612092565b6104436120b1565b6105b16120b7565b6106c16004803603602081101561074257600080fd5b503560ff1661246e565b6105b16004803603606081101561076257600080fd5b60ff8235169190810190604081016020820135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111600160201b831117156107b957600080fd5b919350915035612489565b6104436125da565b6102556125e0565b6104436125e5565b600081565b606481565b60015481565b603281565b60045460070b81565b60025481565b60606000825160210190506060816040519080825280601f01601f191660200182016040528015610838576020820181803683370190505b506021810186905260018101879052828152905060418101600061085b866125eb565b50905061086a818388516125f5565b50909695505050505050565b600181565b60096020526000908152604090205460ff1681565b61100181565b606181565b600881565b61200081565b6005602052600090815260409020546001600160a01b031681565b61100581565b600281565b60035481565b61100881565b600b81565b60005460ff16610930576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b15801561096f57600080fd5b505afa158015610983573d6000803e3d6000fd5b505050506040513d602081101561099957600080fd5b50516109ec576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b60ff8116600090815260086020526040902054829082906001600160401b039081169083168114610a5c576040805162461bcd60e51b815260206004820152601560248201527439b2b8bab2b731b2903737ba1034b71037b93232b960591b604482015290519081900360640190fd5b60ff8216600090815260086020908152604091829020805467ffffffffffffffff1916600185016001600160401b039081169190911790915582516337d7f9c160e21b81529089166004820152915188926110039263df5fe70492602480840193829003018186803b158015610ad157600080fd5b505afa158015610ae5573d6000803e3d6000fd5b505050506040513d6020811015610afb57600080fd5b5051610b385760405162461bcd60e51b8152600401808060200182810382526023815260200180612bcc6023913960400191505060405180910390fd5b60ff851660009081526005602052604090205485906001600160a01b0316610ba7576040805162461bcd60e51b815260206004820152601860248201527f6368616e6e656c206973206e6f7420737570706f727465640000000000000000604482015290519081900360640190fd5b60608c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905060608b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805163cba510a960e01b81526001600160401b038f1660048201529051939450610cce93611003935063cba510a992506024808301926020929190829003018186803b158015610c7757600080fd5b505afa158015610c8b573d6000803e3d6000fd5b505050506040513d6020811015610ca157600080fd5b505160408051808201909152600381526269626360e81b6020820152610cc78c8c612636565b858561267d565b610d16576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b60408051631bb5062960e31b81526001600160401b038c16600482015290516000916110039163dda8314891602480820192602092909190829003018186803b158015610d6257600080fd5b505afa158015610d76573d6000803e3d6000fd5b505050506040513d6020811015610d8c57600080fd5b5051905088600080806060610da08861277a565b935093509350935083610e61578460ff168f6001600160401b03167ff7b2e42d694eb1100184aae86d4245d9e46966100b1dc7e723275b98326854ac8a6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e1a578181015183820152602001610e02565b50505050905090810190601f168015610e475780820380516001836020036101000a031916815260200191505b509250505060405180910390a35050505050505050611a7f565b8460ff168f6001600160401b03167f36afdaf439a8f43fe72135135d804ae620b37a474f0943b5b85f6788312cad4085604051808260ff1660ff16815260200191505060405180910390a360ff83166113ea5760ff85166000818152600560209081526040808320548151631182b87560e01b815260048101958652602481019283528651604482015286516001600160a01b03909216958695631182b875958d958a9593949093606490910192918601918190849084905b83811015610f32578181015183820152602001610f1a565b50505050905090810190601f168015610f5f5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610f7f57600080fd5b505af192505050801561106357506040513d6000823e601f3d908101601f191682016040526020811015610fb257600080fd5b8101908080516040519392919084600160201b821115610fd157600080fd5b908301906020820185811115610fe657600080fd5b8251600160201b811182820188101715610fff57600080fd5b82525081516020918201929091019080838360005b8381101561102c578181015183820152602001611014565b50505050905090810190601f1680156110595780820380516001836020036101000a031916815260200191505b5060405250505060015b611375576040516000815260443d101561107f5750600061111a565b60046000803e60005160e01c6308c379a081146110a057600091505061111a565b60043d036004833e81513d60248201116001600160401b03821117156110cb5760009250505061111a565b80830180516001600160401b038111156110ec57600094505050505061111a565b8060208301013d860181111561110a5760009550505050505061111a565b601f01601f191660405250925050505b806111255750611237565b60ff871660009081526007602052604081205461115c916001600160401b039091169089906111579060029088610800565b61282a565b60ff8716600090815260076020908152604080832080546001600160401b038082166001011667ffffffffffffffff19909116179055805182815284518184015284516001600160a01b038716947ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf948794849390840192918601918190849084905b838110156111f75781810151838201526020016111df565b50505050905090810190601f1680156112245780820380516001836020036101000a031916815260200191505b509250505060405180910390a250611370565b3d808015611261576040519150601f19603f3d011682016040523d82523d6000602084013e611266565b606091505b5060ff8716600090815260076020526040812054611299916001600160401b039091169089906111579060029088610800565b60ff8716600090815260076020908152604080832080546001600160401b038082166001011667ffffffffffffffff19909116179055805182815284518184015284516001600160a01b038716947f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351948794849390840192918601918190849084905b8381101561133457818101518382015260200161131c565b50505050905090810190601f1680156113615780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b6113e4565b8051156113e25760ff87166000908152600760205260408120546113ae916001600160401b039091169089906111579060019086610800565b60ff8716600090815260076020526040902080546001600160401b038082166001011667ffffffffffffffff199091161790555b505b506119b8565b60ff83166001141561168e5760ff8516600081815260056020908152604080832054815163831d65d160e01b815260048101958652602481019283528651604482015286516001600160a01b0390921695869563831d65d1958d958a9593949093606490910192918601918190849084905b8381101561147457818101518382015260200161145c565b50505050905090810190601f1680156114a15780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156114c157600080fd5b505af19250505080156114d2575060015b6113e4576040516000815260443d10156114ee57506000611589565b60046000803e60005160e01c6308c379a0811461150f576000915050611589565b60043d036004833e81513d60248201116001600160401b038211171561153a57600092505050611589565b80830180516001600160401b0381111561155b576000945050505050611589565b8060208301013d860181111561157957600095505050505050611589565b601f01601f191660405250925050505b8061159457506115f9565b60408051602080825283518183015283516001600160a01b038616937ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf93869390928392830191850190808383600083156111f75781810151838201526020016111df565b3d808015611623576040519150601f19603f3d011682016040523d82523d6000602084013e611628565b606091505b5060408051602080825283518183015283516001600160a01b038616937f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351938693909283928301918501908083836000831561133457818101518382015260200161131c565b60ff8316600214156119b85760ff8516600081815260056020908152604080832054815163c8509d8160e01b815260048101958652602481019283528651604482015286516001600160a01b0390921695869563c8509d81958d958a9593949093606490910192918601918190849084905b83811015611718578181015183820152602001611700565b50505050905090810190601f1680156117455780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561176557600080fd5b505af1925050508015611776575060015b6119b6576040516000815260443d10156117925750600061182d565b60046000803e60005160e01c6308c379a081146117b357600091505061182d565b60043d036004833e81513d60248201116001600160401b03821117156117de5760009250505061182d565b80830180516001600160401b038111156117ff57600094505050505061182d565b8060208301013d860181111561181d5760009550505050505061182d565b601f01601f191660405250925050505b8061183857506118e1565b816001600160a01b03167ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf826040518080602001828103825283818151815260200191508051906020019080838360005b838110156118a1578181015183820152602001611889565b50505050905090810190601f1680156118ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2506119b6565b3d80801561190b576040519150601f19603f3d011682016040523d82523d6000602084013e611910565b606091505b50816001600160a01b03167f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561197a578181015183820152602001611962565b50505050905090810190601f1680156119a75780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b505b60ff80861660009081526009602052604090205461100591636f93d2e69189913391879116806119ea575060ff881615155b604080516001600160e01b031960e088901b1681526001600160a01b039586166004820152939094166024840152604483019190915215156064820152905160848083019260209291908290030181600087803b158015611a4a57600080fd5b505af1158015611a5e573d6000803e3d6000fd5b505050506040513d6020811015611a7457600080fd5b505050505050505050505b505050505050505050505050565b630100610081565b600981565b61100781565b61100681565b60005460ff1681565b3361100714611aef5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b22602e913960400191505060405180910390fd5b611b5884848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526012815271626174636853697a65466f724f7261636c6560701b602082015291506129809050565b15611bf357604080516020601f8401819004810282018101909252828152600091611b9b91858580838501838280828437600092019190915250612a6792505050565b90506127108111158015611bb05750600a8110155b611beb5760405162461bcd60e51b8152600401808060200182810382526032815260200180612b9a6032913960400191505060405180910390fd5b600155611fbf565b611c5c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601281527118591913dc955c19185d1950da185b9b995b60721b602082015291506129809050565b15611de457606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060169091149050611cdf5760405162461bcd60e51b815260040180806020018281038252605a815260200180612ac8605a913960600191505060405180910390fd5b60018101516002820151601683015160ff82161590611cfd81612a6c565b611d4e576040805162461bcd60e51b815260206004820152601960248201527f61646472657373206973206e6f74206120636f6e747261637400000000000000604482015290519081900360640190fd5b60ff8416600081815260056020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600683528184208585528352818420805460ff199081166001179091556009909352818420805490931687151517909255519092917f7e3b6af43092577ee20e60eaa1d9b114a7031305c895ee7dd3ffe17196d2e1e091a35050505050611fbf565b611e5184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526016815275195b98589b1953dc911a5cd8589b1950da185b9b995b60521b602082015291506129809050565b15611f8257606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060029091149050611ed45760405162461bcd60e51b815260040180806020018281038252604a815260200180612b50604a913960600191505060405180910390fd5b600181810151600283015160ff80831660009081526005602052604090205492939192908316909114906001600160a01b03168015611f78576001600160a01b038116600090815260066020908152604080832060ff881680855290835292819020805460ff1916861515908117909155815190815290517fa3132e3f9819fbddc7f0ed6d38d7feef59aa95112090b7c592f5cb5bc4aa4adc929181900390910190a25b5050505050611fbf565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b6008602052600090815260409020546001600160401b031681565b61100281565b600660209081526000928352604080842090915290825290205460ff1681565b6040518060400160405280600381526020016269626360e81b81525081565b61100381565b60005460ff161561210f576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b7f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b80546001600160a01b0319908116611008179091557f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36805460ff199081169091557fd8af288fc1c8680b4f4706064cf021e264efb6828fcaf7eb5ca36818eb365bcc8054821660019081179091557f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a805484166110049081179091557f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38054841690557f72e4efa1513b071517c6c74dba31b5934a81aa83cddd400e7081df5529c9943680548416831790557fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc08054851690911790557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e78054831690557f4e523af77f034e9810f1c94057f5e931fb3d16a51511a4c3add793617d18610580548316821790557ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e805484166110001790557fc7694af312c4f286114180fd0ba6a52461fcee8a381636770b19a343af92538a80548316821790557f01112dd68e482ba8d68a7e828cff8b3abcea08eab88941953c180a7e650e9cd480548316821790557fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe1805484166110071790557f87e8a52529e8ece4ef759037313542a6429ff494a9fab9027fb79db90124eba680548316821790557f4c7666bbcb22d46469f7cc282f70764a7012dca2cce630ff8d83db9a9cdd48f080548316821790557f40f28f99a40bc9f6beea1013afdbc3cdcc689eb76b82c4de06c0acf1e1932ed58054909316611001179092557f0d9cf2cd531699eed8dd34e40ff2884a14a698c4898184fba85194e6f6772d248054821683179055600b60009081527f23f68c9bd22b8a93d06adabe17481c87c016bcbd20adc8bfd707a4d813a572176020527fdf0d5d05428057f5455c2dc8e810dd86d1e9350faa72f16bda8a45443c5b39328054831684179055603283556004805467ffffffffffffffff19166001600160401b031790556002819055600381905580549091169091179055565b6007602052600090815260409020546001600160401b031681565b60005460ff166124dc576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b33600090815260066020908152604080832060ff80891685529252909120548591166125395760405162461bcd60e51b8152600401808060200182810382526031815260200180612a976031913960400191505060405180910390fd5b60ff85166000908152600760209081526040808320548151601f88018490048402810184019092528682526001600160401b03169261259e9284928a9261115792909189918c908c908190840183828082843760009201919091525061080092505050565b60ff959095166000908152600760205260409020805467ffffffffffffffff191660019096016001600160401b03169590951790945550505050565b61100081565b600381565b61100481565b8051602090910191565b5b60208110612615578251825260209283019290910190601f19016125f6565b915181516020939093036101000a6000190180199091169216919091179052565b60408051600e808252818301909252606091630100610060ff851617918391602082018180368337505050600e818101969096526006810192909252509283525090919050565b60008561268c57506000612771565b606082518451865160800101016040519080825280601f01601f1916602001820160405280156126c3576020820181803683370190505b50905060006126d182612a72565b6020808901518252019050866000806126e9896125eb565b80865260209095019490925090506127028285836125f5565b9283019261270f886125eb565b80865260209095019490925090506127288285836125f5565b9283018a81526020019261273b876125eb565b909250905061274b8285836125f5565b508351602001612759612a78565b60208183886065600019fa5051600114955050505050505b95945050505050565b600080600060606021855110156127aa575050604080516000808252602082019092529092508291508190612823565b600185015160218601518651604080516020198301808252601f19600119909401939093168101602001909152604189019392916060919080156127f5576020820181803683370190505b5090506000612803826125eb565b509050612815858260218d51036125f5565b506001975091955093509150505b9193509193565b600254431115612869576004805467ffffffffffffffff1981166001600160401b036001600793840b810190930b1617909155600355436002556128aa565b600380546001908101918290555410156128aa576004805467ffffffffffffffff1981166001600160401b036001600793840b810190930b16179091556003555b8160ff16836001600160401b0316600460009054906101000a900460070b6001600160401b03167f3a6e0fc61675aa2a100bcba0568368bb92bcec91c97673391074f11138f0cffe606185604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612940578181015183820152602001612928565b50505050905090810190601f16801561296d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050565b6000816040516020018082805190602001908083835b602083106129b55780518252601f199092019160209182019101612996565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310612a235780518252601f199092019160209182019101612a04565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b3b151590565b60200190565b6040518060200160405280600190602082028036833750919291505056fe74686520636f6e747261637420616e64206368616e6e656c2068617665206e6f74206265656e20726567697374657265646c656e677468206f662076616c756520666f72206164644f725570646174654368616e6e656c2073686f756c642062652032322c206368616e6e656c49643a697346726f6d53797374656d3a68616e646c657241646472657373746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f7220656e61626c654f7244697361626c654368616e6e656c2073686f756c6420626520322c206368616e6e656c49643a6973456e61626c65746865206e6577426174636853697a65466f724f7261636c652073686f756c6420626520696e205b31302c2031303030305d6c6967687420636c69656e74206e6f742073796e632074686520626c6f636b20796574a26469706673582212207ab71aabd28c992023fb9ff6fe581825d14cb96a7bc39321484311e85804154864736f6c63430006040033", + }, + }, + } + + mirrorUpgrade[mainNet] = &Upgrade{ + UpgradeName: "mirror", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "6080604052600436106103815760003560e01c80637d078e13116101d1578063b795031711610102578063d9e6dae9116100a0578063fa9e91591161006f578063fa9e915914610d38578063fc3e5908146105b2578063fd6a687914610d4d578063fe3a2af514610d6257610381565b8063d9e6dae9146106fc578063dc927faf14610cf9578063e605bca014610d0e578063f9a2bbc714610d2357610381565b8063c8509d81116100dc578063c8509d8114610bdf578063c8e704a4146105b2578063d117a11014610c64578063d7109ce614610ce457610381565b8063b79503171461073b578063bd32d3f9146104d9578063c81b166214610bca57610381565b80639a854bbd1161016f578063a78abc1611610149578063a78abc1614610ad5578063ab51bb9614610aea578063ab67a4851461073b578063ac43175114610aff57610381565b80639a854bbd14610a965780639dc0926214610aab578063a1a11bf514610ac057610381565b8063859180fb116101ab578063859180fb146106e757806394553a4e14610a3757806395b9ad2614610a6c57806396713da914610a8157610381565b80637d078e13146104ee5780637ec816dd1461099b578063831d65d1146109b057610381565b8063493279b1116102b657806366dea52a1161025457806372c4e0861161022357806372c4e0861461081957806375d47a0a146108bd57806377d9dae8146108d25780637942fd051461098657610381565b806366dea52a1461073b5780636b3f1307146107505780636e47b4821461080457806370fd5bad1461073b57610381565b806351e806721161029057806351e80672146107115780635d499b1b146107265780635f558f861461073b57806361368475146106fc57610381565b8063493279b1146106bb5780634bc81c00146106e75780634bf6c882146106fc57610381565b80632e02d77611610323578063401809f9116102fd578063401809f9146105b257806343756e5c146105c7578063445fcefe146105f8578063487c88ac146104ee57610381565b80632e02d7761461054c57806337e6ecda1461057f5780633dffc387146104ee57610381565b80631f91600b1161035f5780631f91600b146104d957806323996b53146104ee57806325c751b7146105035780632d89ac32146104ee57610381565b80630bee7a67146103865780630f212b1b146103b45780631182b875146103df575b600080fd5b34801561039257600080fd5b5061039b610d77565b6040805163ffffffff9092168252519081900360200190f35b3480156103c057600080fd5b506103c9610d7c565b6040805160ff9092168252519081900360200190f35b3480156103eb57600080fd5b506104646004803603604081101561040257600080fd5b60ff8235169190810190604081016020820135600160201b81111561042657600080fd5b82018360208201111561043857600080fd5b803590602001918460018302840111600160201b8311171561045957600080fd5b509092509050610d81565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104e557600080fd5b506103c9610e9b565b3480156104fa57600080fd5b506103c9610ea0565b6105386004803603604081101561051957600080fd5b5080356001600160a01b031690602001356001600160401b0316610ea5565b604080519115158252519081900360200190f35b34801561055857600080fd5b506105386004803603602081101561056f57600080fd5b50356001600160a01b03166113f1565b34801561058b57600080fd5b50610538600480360360208110156105a257600080fd5b50356001600160a01b0316611406565b3480156105be57600080fd5b506103c961141b565b3480156105d357600080fd5b506105dc611420565b604080516001600160a01b039092168252519081900360200190f35b34801561060457600080fd5b506106a96004803603602081101561061b57600080fd5b810190602081018135600160201b81111561063557600080fd5b82018360208201111561064757600080fd5b803590602001918460018302840111600160201b8311171561066857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611426945050505050565b60408051918252519081900360200190f35b3480156106c757600080fd5b506106d0611584565b6040805161ffff9092168252519081900360200190f35b3480156106f357600080fd5b506103c9611589565b34801561070857600080fd5b506103c961158e565b34801561071d57600080fd5b506105dc611593565b34801561073257600080fd5b506106a9611599565b34801561074757600080fd5b506103c96115a2565b6105386004803603604081101561076657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561079057600080fd5b8201836020820111156107a257600080fd5b803590602001918460018302840111600160201b831117156107c357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115a7945050505050565b34801561081057600080fd5b506105dc611e7d565b6105386004803603602081101561082f57600080fd5b810190602081018135600160201b81111561084957600080fd5b82018360208201111561085b57600080fd5b803590602001918460018302840111600160201b8311171561087c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e83945050505050565b3480156108c957600080fd5b506105dc6122cf565b610538600480360360408110156108e857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561091257600080fd5b82018360208201111561092457600080fd5b803590602001918460018302840111600160201b8311171561094557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506122d5945050505050565b34801561099257600080fd5b506103c96127db565b3480156109a757600080fd5b506106a96127e0565b3480156109bc57600080fd5b50610a35600480360360408110156109d357600080fd5b60ff8235169190810190604081016020820135600160201b8111156109f757600080fd5b820183602082011115610a0957600080fd5b803590602001918460018302840111600160201b83111715610a2a57600080fd5b5090925090506127e6565b005b61053860048036036040811015610a4d57600080fd5b5080356001600160a01b031690602001356001600160401b0316612935565b348015610a7857600080fd5b506103c961332c565b348015610a8d57600080fd5b506103c9613331565b348015610aa257600080fd5b506106a9613336565b348015610ab757600080fd5b506105dc613342565b348015610acc57600080fd5b506105dc613348565b348015610ae157600080fd5b5061053861334e565b348015610af657600080fd5b5061039b613357565b348015610b0b57600080fd5b50610a3560048036036040811015610b2257600080fd5b810190602081018135600160201b811115610b3c57600080fd5b820183602082011115610b4e57600080fd5b803590602001918460018302840111600160201b83111715610b6f57600080fd5b919390929091602081019035600160201b811115610b8c57600080fd5b820183602082011115610b9e57600080fd5b803590602001918460018302840111600160201b83111715610bbf57600080fd5b50909250905061335c565b348015610bd657600080fd5b506105dc613631565b348015610beb57600080fd5b50610a3560048036036040811015610c0257600080fd5b60ff8235169190810190604081016020820135600160201b811115610c2657600080fd5b820183602082011115610c3857600080fd5b803590602001918460018302840111600160201b83111715610c5957600080fd5b509092509050613637565b348015610c7057600080fd5b50610c8e60048036036020811015610c8757600080fd5b503561370d565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a08301526001600160401b0390921660c082015290519081900360e00190f35b348015610cf057600080fd5b506106a9613764565b348015610d0557600080fd5b506105dc613769565b348015610d1a57600080fd5b506106a961376f565b348015610d2f57600080fd5b506105dc613775565b348015610d4457600080fd5b506106a961377b565b348015610d5957600080fd5b506105dc613781565b348015610d6e57600080fd5b506103c9613357565b606481565b600681565b60603361200014610dc35760405162461bcd60e51b815260040180806020018281038252602f815260200180615b89602f913960400191505060405180910390fd5b60ff841660011415610e1557610e0e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061378792505050565b9050610e94565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605848484604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1506040805160008152602081019091525b9392505050565b600481565b600181565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b5051905080610f5e576040805162461bcd60e51b81526020600482015260096024820152681b9bdd08189bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602052604090205460ff16610fc1576040805162461bcd60e51b81526020600482015260136024820152723737ba103137bab73210313c9036b4b93937b960691b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610ffe57600080fd5b505afa158015611012573d6000803e3d6000fd5b505050506040513d602081101561102857600080fd5b505190506402540be4003406158015611053575060055461104f908263ffffffff613a1716565b3410155b61108e5760405162461bcd60e51b8152600401808060200182810382526046815260200180615b156046913960600191505060405180910390fd5b42607801846001600160401b0316101580156110b85750426201518001846001600160401b031611155b6110f35760405162461bcd60e51b8152600401808060200182810382526038815260200180615a126038913960400191505060405180910390fd5b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050506040513d602081101561115857600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0389169163313ce567916004808301926020929190829003018186803b1580156111a057600080fd5b505afa1580156111b4573d6000803e3d6000fd5b505050506040513d60208110156111ca57600080fd5b50519050677ce66c50e28400006111e48360ff8416613a71565b1115611230576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b600554611004906108fc9061124c90349063ffffffff613b0016565b6040518115909202916000818181858888f19350505050158015611274573d6000803e3d6000fd5b5061127d615869565b6040518060c00160405280336001600160a01b03168152602001896001600160a01b031681526020018681526020018481526020016112cc6402540be400600554613b4290919063ffffffff16565b81526001600160401b038916602090910152905061200063f7a251d760056112f384613b84565b61131d6402540be40061131160055434613b0090919063ffffffff16565b9063ffffffff613b4216565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561137b578181015183820152602001611363565b50505050905090810190601f1680156113a85780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156113c957600080fd5b505af11580156113dd573d6000803e3d6000fd5b505050506001955050505050505b92915050565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b600381565b61100181565b602081015160009061143661589e565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a08201526101009091046001600160401b031660c0820152906114bd5760009250505061157f565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561151b57600080fd5b505afa15801561152f573d6000803e3d6000fd5b505050506040513d602081101561154557600080fd5b5051608083015160608401519192506000916115669163ffffffff613b0016565b9050611578818363ffffffff613b0016565b9450505050505b919050565b603881565b600581565b600881565b61200081565b6402540be40081565b600281565b6001600160a01b03821660009081526002602052604081205460ff16156115ff5760405162461bcd60e51b815260040180806020018281038252602b815260200180615bb8602b913960400191505060405180910390fd5b600061160a83613cb9565b905061161461589e565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526116d9576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b60006116f682608001518360600151613b0090919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b03161461174c5760405162461bcd60e51b8152600401808060200182810382526045815260200180615a816045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561178f57600080fd5b505afa1580156117a3573d6000803e3d6000fd5b505050506040513d60208110156117b957600080fd5b50516001600160a01b0316146118005760405162461bcd60e51b815260040180806020018281038252602e8152602001806159e4602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561184c57600080fd5b505afa158015611860573d6000803e3d6000fd5b505050506040513d602081101561187657600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925083916119079184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b1580156118cf57600080fd5b505afa1580156118e3573d6000803e3d6000fd5b505050506040513d60208110156118f957600080fd5b50519063ffffffff613a1716565b101561195a576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561199c57600080fd5b505afa1580156119b0573d6000803e3d6000fd5b505050506040513d60208110156119c657600080fd5b505190508082108015906119df57506402540be4008206155b611a1a5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4a6037913960400191505060405180910390fd5b6000611a26868b613cc0565b905063ffffffff8116611c25576001600160a01b038a166323b872dd33611004611a56898963ffffffff613b0016565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611abe57600080fd5b505af1158015611ad2573d6000803e3d6000fd5b505050506040513d6020811015611ae857600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611be4578181015183820152602001611bcc565b50505050905090810190601f168015611c115780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2611cdd565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611ca1578181015183820152602001611c89565b50505050905090810190601f168015611cce5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611d376158da565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b5061200063f7a251d76001611d938461411a565b611da8886402540be40063ffffffff613b4216565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e06578181015183820152602001611dee565b50505050905090810190601f168015611e335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e5457600080fd5b505af1158015611e68573d6000803e3d6000fd5b5060019e9d5050505050505050505050505050565b61100581565b600080611e8f83613cb9565b9050611e9961589e565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c0830152611f5e576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c001516001600160401b031610611fbf576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561200157600080fd5b505afa158015612015573d6000803e3d6000fd5b505050506040513d602081101561202b57600080fd5b5051905080821080159061204457506402540be4008206155b61207f5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4a6037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556120d96158da565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f1935050505015801561211c573d6000803e3d6000fd5b5061200063f7a251d760016121308461411a565b612145876402540be40063ffffffff613b4216565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121a357818101518382015260200161218b565b50505050905090810190601f1680156121d05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156121f157600080fd5b505af1158015612205573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561228757818101518382015260200161226f565b50505050905090810190601f1680156122b45780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806122e183613cb9565b90506122eb61589e565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526123b0576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146124045760405162461bcd60e51b8152600401808060200182810382526045815260200180615a816045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561244757600080fd5b505afa15801561245b573d6000803e3d6000fd5b505050506040513d602081101561247157600080fd5b50516001600160a01b0316146124ce576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703230206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561251057600080fd5b505afa158015612524573d6000803e3d6000fd5b505050506040513d602081101561253a57600080fd5b5051905080821080159061255357506402540be4008206155b61258e5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4a6037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556125e86158da565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f1935050505015801561262b573d6000803e3d6000fd5b5061200063f7a251d7600161263f8461411a565b612654876402540be40063ffffffff613b4216565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156126b257818101518382015260200161269a565b50505050905090810190601f1680156126df5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561270057600080fd5b505af1158015612714573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561279257818101518382015260200161277a565b50505050905090810190601f1680156127bf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b60045481565b33612000146128265760405162461bcd60e51b815260040180806020018281038252602f815260200180615b89602f913960400191505060405180910390fd5b60ff8316600414156128765761287182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061419092505050565b612930565b60ff8316600514156128c15761287182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061443d92505050565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b15801561298257600080fd5b505afa158015612996573d6000803e3d6000fd5b505050506040513d60208110156129ac57600080fd5b5051146129f0576040805162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48189bdd5b99609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff1615612a4f576040805162461bcd60e51b815260206004820152600e60248201526d6d6972726f722070656e64696e6760901b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8c57600080fd5b505afa158015612aa0573d6000803e3d6000fd5b505050506040513d6020811015612ab657600080fd5b505190506402540be4003406158015612ae15750600454612add908263ffffffff613a1716565b3410155b612b1c5760405162461bcd60e51b815260040180806020018281038252604d815260200180615997604d913960600191505060405180910390fd5b42607801836001600160401b031610158015612b465750426201518001836001600160401b031611155b612b815760405162461bcd60e51b8152600401808060200182810382526038815260200180615a126038913960400191505060405180910390fd5b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612bbc57600080fd5b505afa158015612bd0573d6000803e3d6000fd5b505050506040513d6020811015612be657600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038816916318160ddd916004808301926020929190829003018186803b158015612c2e57600080fd5b505afa158015612c42573d6000803e3d6000fd5b505050506040513d6020811015612c5857600080fd5b50519050677ce66c50e2840000612c728260ff8516613a71565b1115612cbe576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b6060866001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015612cf957600080fd5b505afa158015612d0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612d3657600080fd5b8101908080516040519392919084600160201b821115612d5557600080fd5b908301906020820185811115612d6a57600080fd5b8251600160201b811182820188101715612d8357600080fd5b82525081516020918201929091019080838360005b83811015612db0578181015183820152602001612d98565b50505050905090810190601f168015612ddd5780820380516001836020036101000a031916815260200191505b50604052505050905060608190506001815110158015612dff57506020815111155b612e50576040805162461bcd60e51b815260206004820152601d60248201527f6e616d65206c656e677468206d75737420626520696e205b312c33325d000000604482015290519081900360640190fd5b6060886001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612e8b57600080fd5b505afa158015612e9f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612ec857600080fd5b8101908080516040519392919084600160201b821115612ee757600080fd5b908301906020820185811115612efc57600080fd5b8251600160201b811182820188101715612f1557600080fd5b82525081516020918201929091019080838360005b83811015612f42578181015183820152602001612f2a565b50505050905090810190601f168015612f6f5780820380516001836020036101000a031916815260200191505b5060405250508151919250829160021180159150612f8f57508051600810155b612fe0576040805162461bcd60e51b815260206004820152601e60248201527f73796d626f6c206c656e677468206d75737420626520696e205b322c385d0000604482015290519081900360640190fd5b60005b81518160ff16101561313457604160f81b828260ff168151811061300357fe5b01602001516001600160f81b031916108015906130415750602d60f91b828260ff168151811061302f57fe5b01602001516001600160f81b03191611155b806130995750606160f81b828260ff168151811061305b57fe5b01602001516001600160f81b031916108015906130995750603d60f91b828260ff168151811061308757fe5b01602001516001600160f81b03191611155b806130f15750600360fc1b828260ff16815181106130b357fe5b01602001516001600160f81b031916108015906130f15750603960f81b828260ff16815181106130df57fe5b01602001516001600160f81b03191611155b61312c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615ac6602e913960400191505060405180910390fd5b600101612fe3565b50600454611004906108fc9061315190349063ffffffff613b0016565b6040518115909202916000818181858888f19350505050158015613179573d6000803e3d6000fd5b506001600160a01b038a166000908152600260209081526040909120805460ff1916600117905584810151908301516131b06158f1565b604051806101000160405280336001600160a01b031681526020018e6001600160a01b031681526020018481526020018381526020018981526020018a60ff16815260200161320f6402540be400600454613b4290919063ffffffff16565b81526001600160401b038e16602090910152905061200063f7a251d7600461323684614608565b6132546402540be40061131160045434613b0090919063ffffffff16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156132b257818101518382015260200161329a565b50505050905090810190601f1680156132df5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561330057600080fd5b505af1158015613314573d6000803e3d6000fd5b5050505060019a505050505050505050505092915050565b600781565b600981565b677ce66c50e284000081565b61100781565b61100681565b60005460ff1681565b600081565b336110071461339c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615b5b602e913960400191505060405180910390fd5b602081146133f1576040805162461bcd60e51b815260206004820152601860248201527f65787065637465642076616c7565206c656e6774682033320000000000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815293945060609392508691508590819084018382808284376000920191909152505050506020830151909150686d6972726f7246656560b81b8114156134e65760208201516402540be4008106156134de576040805162461bcd60e51b815260206004820152601a60248201527f6d6972726f72466565206d757374206265204e202a2031653130000000000000604482015290519081900360640190fd5b60045561359c565b6673796e6346656560c81b81141561355f5760208201516402540be400810615613557576040805162461bcd60e51b815260206004820152601860248201527f73796e63466565206d757374206265204e202a20316531300000000000000000604482015290519081900360640190fd5b60055561359c565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61100281565b33612000146136775760405162461bcd60e51b815260040180806020018281038252602f815260200180615b89602f913960400191505060405180910390fd5b60ff8316600414156136c25761287182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061477a92505050565b60ff8316600514156128c15761287182828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148b992505050565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b039093169391929181169061010090046001600160401b031687565b604d81565b61100381565b60055481565b61100081565b61271081565b61100481565b606061379161589e565b600061379c846149b3565b91509150806137f2576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff166138a5576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff0019166101006001600160401b03909216919091021790556139fc565b815160ff16600114156139af5760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156138fe57600080fd5b505afa158015613912573d6000803e3d6000fd5b505050506040513d602081101561392857600080fd5b505190506001600160a01b038116156139a95760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561399057600080fd5b505af11580156139a4573d6000803e3d6000fd5b505050505b506139fc565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b600082820183811015610e94576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006008821115613ae957604d60071983011115613acb576040805162461bcd60e51b8152602060048201526012602482015271746f6f206c6172676520646563696d616c7360701b604482015290519081900360640190fd5b613ae2836007198401600a0a63ffffffff613b4216565b90506113eb565b610e94836008849003600a0a63ffffffff614b0416565b6000610e9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614b5d565b6000610e9483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bf4565b60408051600680825260e08201909252606091829190816020015b6060815260200190600190039081613b9f5750508351909150613bca906001600160a01b0316614c59565b81600081518110613bd757fe5b6020026020010181905250613bf883602001516001600160a01b0316614c59565b81600181518110613c0557fe5b6020026020010181905250613c20836040015160001c614c7c565b81600281518110613c2d57fe5b6020026020010181905250613c458360600151614c7c565b81600381518110613c5257fe5b6020026020010181905250613c6a8360800151614c7c565b81600481518110613c7757fe5b6020026020010181905250613c988360a001516001600160401b0316614c7c565b81600581518110613ca557fe5b6020026020010181905250610e9481614c8f565b6020015190565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613cfc57600080fd5b505afa158015613d10573d6000803e3d6000fd5b505050506040513d6020811015613d2657600080fd5b5051604080516395d89b4160e01b8152905160ff90921692506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b158015613d7257600080fd5b505afa158015613d86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613daf57600080fd5b8101908080516040519392919084600160201b821115613dce57600080fd5b908301906020820185811115613de357600080fd5b8251600160201b811182820188101715613dfc57600080fd5b82525081516020918201929091019080838360005b83811015613e29578181015183820152602001613e11565b50505050905090810190601f168015613e565780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b158015613ea657600080fd5b505afa158015613eba573d6000803e3d6000fd5b505050506040513d6020811015613ed057600080fd5b505160808701516060880151919250600091613ef19163ffffffff613b0016565b9050428760c001516001600160401b03161015613f165750600193506113eb92505050565b613f24838860200151614d19565b613f365750600293506113eb92505050565b80821115613f4c5750600393506113eb92505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613f8e57600080fd5b505afa158015613fa2573d6000803e3d6000fd5b505050506040513d6020811015613fb857600080fd5b505114613fcd5750600493506113eb92505050565b8660a0015160ff168414613fe95750600593506113eb92505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b15801561402e57600080fd5b505afa158015614042573d6000803e3d6000fd5b505050506040513d602081101561405857600080fd5b50516001600160a01b03161415806140fa57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156140cb57600080fd5b505afa1580156140df573d6000803e3d6000fd5b505050506040513d60208110156140f557600080fd5b505114155b1561410d5750600693506113eb92505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b6060815260200190600190039081614133575050835190915061415b9063ffffffff16614c7c565b8160008151811061416857fe5b6020026020010181905250614183836020015160001c614c7c565b81600181518110613ca557fe5b614198615869565b60006141a383614e01565b91509150806141f0576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03166000908152600290915260409020805460ff1916905560a082015160ff166143515760808201516040516110049180156108fc02916000818181858888f19350505050158015614253573d6000803e3d6000fd5b506110046001600160a01b0316638eff336c8360600151846020015185604001516040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018260ff1681526020019350505050600060405180830381600087803b1580156142cd57600080fd5b505af11580156142e1573d6000803e3d6000fd5b50505050602082810180516001600160a01b03908116600090815260038452604090819020805460ff1916600117905591516060860151835190815292519116927f41787d7db08fc5907641ee8343379f28215727eb123d4b462099afab4300b036928290030190a2505061443a565b815160808301516040516000926001600160a01b0316916127109184818181858888f193505050503d80600081146143a5576040519150601f19603f3d011682016040523d82523d6000602084013e6143aa565b606091505b50509050806143e75760808301516040516110029180156108fc02916000818181858888f193505050501580156143e5573d6000803e3d6000fd5b505b82602001516001600160a01b03167fefe400ad0042ebf81a245de9ae669616105e0ca9fc946352c085da0c2bc524e58460a00151604051808260ff1660ff16815260200191505060405180910390a25050505b50565b614445615935565b600061445083614f0e565b915091508061449d576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b606082015160ff1661451d5760408083015190516110049180156108fc02916000818181858888f193505050501580156144db573d6000803e3d6000fd5b5081602001516001600160a01b03167fbb7d3a9a559080d8281b0e4fb39dacbe2fdcafd5ef765e9a6ed871c9167dc60f60405160405180910390a2505061443a565b81602001516001600160a01b03167ff1e25fa536da84053644fd788b1d6a27ea6edd1f3af80c7d36ca253c4c82c9c38360600151604051808260ff1660ff16815260200191505060405180910390a2815160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d80600081146145c0576040519150601f19603f3d011682016040523d82523d6000602084013e6145c5565b606091505b50509050806146025760408084015190516110029180156108fc02916000818181858888f19350505050158015614600573d6000803e3d6000fd5b505b50505050565b6040805160088082526101208201909252606091829190816020015b6060815260200190600190039081614624575050835190915061464f906001600160a01b0316614c59565b8160008151811061465c57fe5b602002602001018190525061467d83602001516001600160a01b0316614c59565b8160018151811061468a57fe5b60200260200101819052506146a5836040015160001c614c7c565b816002815181106146b257fe5b60200260200101819052506146cd836060015160001c614c7c565b816003815181106146da57fe5b60200260200101819052506146f28360800151614c7c565b816004815181106146ff57fe5b602002602001018190525061471a8360a0015160ff16614c7c565b8160058151811061472757fe5b602002602001018190525061473f8360c00151614c7c565b8160068151811061474c57fe5b602002602001018190525061476d8360e001516001600160401b0316614c7c565b81600781518110613ca557fe5b6147826158f1565b600061478d83614fda565b91509150806147da576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b039081166000908152600290925260408220805460ff19169055835160c085015191169061271090614824906402540be40063ffffffff614b0416565b6040516000818181858888f193505050503d8060008114614861576040519150601f19603f3d011682016040523d82523d6000602084013e614866565b606091505b50509050806146025760c0830151611002906108fc90614891906402540be40063ffffffff614b0416565b6040518115909202916000818181858888f19350505050158015614600573d6000803e3d6000fd5b6148c1615869565b60006148cc8361512b565b9150915080614919576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b815160808301516000916001600160a01b03169061271090614946906402540be40063ffffffff614b0416565b6040516000818181858888f193505050503d8060008114614983576040519150601f19603f3d011682016040523d82523d6000602084013e614988565b606091505b5050905080614602576080830151611002906108fc90614891906402540be40063ffffffff614b0416565b6149bb61589e565b60006149c561589e565b6149cd61595c565b6149de6149d98661523b565b615260565b90506000805b6149ed836152aa565b15614af75780614a1257614a08614a03846152cb565b615319565b60ff168452614aef565b8060011415614a3157614a27614a03846152cb565b6020850152614aef565b8060021415614a5e57614a4b614a46846152cb565b6153ce565b6001600160a01b03166040850152614aef565b8060031415614a7d57614a73614a03846152cb565b6060850152614aef565b8060041415614a9c57614a92614a03846152cb565b6080850152614aef565b8060051415614abe57614ab1614a03846152cb565b60ff1660a0850152614aef565b8060061415614aea57614ad3614a03846152cb565b6001600160401b031660c085015260019150614aef565b614af7565b6001016149e4565b5091935090915050915091565b600082614b13575060006113eb565b82820282848281614b2057fe5b0414610e945760405162461bcd60e51b8152600401808060200182810382526021815260200180615af46021913960400191505060405180910390fd5b60008184841115614bec5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bb1578181015183820152602001614b99565b50505050905090810190601f168015614bde5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183614c435760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614bb1578181015183820152602001614b99565b506000838581614c4f57fe5b0495945050505050565b60408051600560a21b8318601482015260348101909152606090610e94816153e8565b60606113eb614c8a8361543e565b6153e8565b6060815160001415614cb0575060408051600081526020810190915261157f565b606082600081518110614cbf57fe5b602002602001015190506000600190505b8351811015614d0057614cf682858381518110614ce957fe5b6020026020010151615524565b9150600101614cd0565b50610e94614d13825160c060ff166155a1565b82615524565b8151600090839060081080614d2f575080516002115b15614d3e5760009150506113eb565b60408051602080825281830190925260609160208201818036833701905050905083602082015280825181518110614d7257fe5b6020910101516001600160f81b031916602d60f81b14614d97576000925050506113eb565b600160005b8351811015614df757828181518110614db157fe5b602001015160f81c60f81b6001600160f81b031916848281518110614dd257fe5b01602001516001600160f81b03191614614def5760009150614df7565b600101614d9c565b5095945050505050565b614e09615869565b6000614e13615869565b614e1b61595c565b614e276149d98661523b565b90506000805b614e36836152aa565b15614af75780614e5c57614e4c614a46846152cb565b6001600160a01b03168452614f06565b8060011415614e8457614e71614a46846152cb565b6001600160a01b03166020850152614f06565b8060021415614ea657614e99614a03846152cb565b60ff166040850152614f06565b8060031415614ec557614ebb614a03846152cb565b6060850152614f06565b8060041415614ee457614eda614a03846152cb565b6080850152614f06565b8060051415614aea57614ef9614a03846152cb565b60ff1660a0850152600191505b600101614e2d565b614f16615935565b6000614f20615935565b614f2861595c565b614f346149d98661523b565b90506000805b614f43836152aa565b15614af75780614f6957614f59614a46846152cb565b6001600160a01b03168452614fd2565b8060011415614f9157614f7e614a46846152cb565b6001600160a01b03166020850152614fd2565b8060021415614fb057614fa6614a03846152cb565b6040850152614fd2565b8060031415614aea57614fc5614a03846152cb565b60ff166060850152600191505b600101614f3a565b614fe26158f1565b6000614fec6158f1565b614ff461595c565b6150006149d98661523b565b90506000805b61500f836152aa565b15614af7578061503557615025614a46846152cb565b6001600160a01b03168452615123565b806001141561505d5761504a614a46846152cb565b6001600160a01b03166020850152615123565b806002141561507c57615072614a03846152cb565b6040850152615123565b806003141561509b57615091614a03846152cb565b6060850152615123565b80600414156150ba576150b0614a03846152cb565b6080850152615123565b80600514156150dc576150cf614a03846152cb565b60ff1660a0850152615123565b80600614156150fb576150f1614a03846152cb565b60c0850152615123565b8060071415614aea57615110614a03846152cb565b6001600160401b031660e0850152600191505b600101615006565b615133615869565b600061513d615869565b61514561595c565b6151516149d98661523b565b90506000805b615160836152aa565b15614af7578061518657615176614a46846152cb565b6001600160a01b03168452615233565b80600114156151ae5761519b614a46846152cb565b6001600160a01b03166020850152615233565b80600214156151cd576151c3614a03846152cb565b6040850152615233565b80600314156151ec576151e2614a03846152cb565b6060850152615233565b806004141561520b57615201614a03846152cb565b6080850152615233565b8060051415614aea57615220614a03846152cb565b6001600160401b031660a0850152600191505b600101615157565b61524361597c565b506040805180820190915281518152602082810190820152919050565b61526861595c565b61527182615699565b61527a57600080fd5b600061528983602001516156d3565b60208085015160408051808201909152868152920190820152915050919050565b60006152b461597c565b505080518051602091820151919092015191011190565b6152d361597c565b6152dc826152aa565b6152e557600080fd5b602082015160006152f582615736565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061532e57508151602110155b61533757600080fd5b600061534683602001516156d3565b905080836000015110156153a1576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613a0e57506020919091036101000a90049392505050565b80516000906015146153df57600080fd5b6113eb82615319565b60608151600114801561541a5750607f60f81b8260008151811061540857fe5b01602001516001600160f81b03191611155b1561542657508061157f565b6113eb6154388351608060ff166155a1565b83615524565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615482575060186154a6565b6fffffffffffffffffffffffffffffffff1984166154a2575060106154a6565b5060005b60208110156154dc578181815181106154bb57fe5b01602001516001600160f81b031916156154d4576154dc565b6001016154a6565b60008160200390506060816040519080825280601f01601f191660200182016040528015615511576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561555557805183526020928301920161553d565b50855184518101855292509050808201602086015b8183101561558257805183526020928301920161556a565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106155f1576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b6040805160018082528183019092526060916020820181803683370190505090506037841161564b5782840160f81b8160008151811061562d57fe5b60200101906001600160f81b031916908160001a90535090506113eb565b60606156568561543e565b90508381510160370160f81b8260008151811061566f57fe5b60200101906001600160f81b031916908160001a9053506156908282615524565b95945050505050565b80516000906156aa5750600061157f565b6020820151805160001a9060c08210156156c95760009250505061157f565b5060019392505050565b8051600090811a60808110156156ed57600091505061157f565b60b8811080615708575060c08110801590615708575060f881105b1561571757600191505061157f565b60c081101561572b5760b51901905061157f565b60f51901905061157f565b80516000908190811a60808110156157515760019150615862565b60b881101561576657607e1981019150615862565b60c08110156157e057600060b78203600186019550806020036101000a8651049150600181018201935050808310156157da576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50615862565b60f88110156157f55760be1981019150615862565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615860576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806040016040528061596f61597c565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c7565206d757374206265204e202a203165313020616e642067726561746572207468616e2073756d206f66206d696e6952656c617946656520616e64206d6972726f724665656f6e6c79206265703230206f776e65722063616e20617070726f766520746869732062696e64207265717565737465787069726554696d65206d7573742062652074776f206d696e75746573206c6174657220616e64206f6e6520646179206561726c69657272656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e64207265717565737473796d626f6c2073686f756c64206f6e6c7920636f6e7461696e20616c70686162657420616e64206e756d626572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d73672e76616c7565206d757374206265204e202a203165313020616e64206e6f206c6573732073756d206f66206d696e6952656c617946656520616e642073796e63466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e747261637474686520626570323020746f6b656e20697320696e206d6972726f722070656e64696e6720737461747573a2646970667358221220ab8dfdd9914857b55fc1c6e49c911de2d861380dc81004c5ff0a4e67915545b764736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "60806040526004361061031e5760003560e01c80639a99b4f0116101ab578063bd466461116100f7578063f014847211610095578063fc1a598f1161006f578063fc1a598f14610cb3578063fc3e590814610996578063fd6a687914610ce6578063ff9c00271461068657610366565b8063f014847214610c74578063f9a2bbc714610c89578063fa9e915914610c9e57610366565b8063d9e6dae9116100d1578063d9e6dae914610608578063dc927faf14610c35578063e1c7392a14610c4a578063ebf71d5314610c5f57610366565b8063bd46646114610b68578063c81b166214610b9b578063c8509d8114610bb057610366565b8063aa7415f511610164578063b99328c51161013e578063b99328c514610ad2578063b9fd21e314610b0b578063ba35ead614610b20578063bbface1f14610b3557610366565b8063aa7415f5146109ab578063ab51bb96146109f2578063ac43175114610a0757610366565b80639a99b4f0146109095780639dc0926214610942578063a1a11bf514610957578063a496fba21461096c578063a78abc1614610981578063a7c9f02d1461099657610366565b8063613684751161026a57806375d47a0a116102235780638b87b21f116101fd5780638b87b21f146105875780638eff336c146108a057806396713da9146108df5780639a854bbd146108f457610366565b806375d47a0a146107f15780637942fd0514610806578063831d65d11461081b57610366565b8063613684751461060857806366dea52a146106865780636e0565201461069b5780636e47b482146107c757806370fd5bad1461068657806371d30863146107dc57610366565b806343a368b9116102d757806350432d32116102b157806350432d321461061d57806351e806721461063257806359b92789146106475780635d499b1b1461067157610366565b806343a368b9146105c7578063493279b1146105dc5780634bf6c8821461060857610366565b80630bee7a671461036b5780631182b87514610399578063149d14d9146104935780633d713223146104ba5780633dffc3871461058757806343756e5c146105b257610366565b36610366573415610364576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561037757600080fd5b50610380610cfb565b6040805163ffffffff9092168252519081900360200190f35b3480156103a557600080fd5b5061041e600480360360408110156103bc57600080fd5b60ff8235169190810190604081016020820135600160201b8111156103e057600080fd5b8201836020820111156103f257600080fd5b803590602001918460018302840111600160201b8311171561041357600080fd5b509092509050610d00565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610458578181015183820152602001610440565b50505050905090810190601f1680156104855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049f57600080fd5b506104a8610e2e565b60408051918252519081900360200190f35b3480156104c657600080fd5b5061056b600480360360208110156104dd57600080fd5b810190602081018135600160201b8111156104f757600080fd5b82018360208201111561050957600080fd5b803590602001918460018302840111600160201b8311171561052a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e34945050505050565b604080516001600160a01b039092168252519081900360200190f35b34801561059357600080fd5b5061059c610e58565b6040805160ff9092168252519081900360200190f35b3480156105be57600080fd5b5061056b610e5d565b3480156105d357600080fd5b506104a8610e63565b3480156105e857600080fd5b506105f1610e6f565b6040805161ffff9092168252519081900360200190f35b34801561061457600080fd5b5061059c610e74565b34801561062957600080fd5b506104a8610e79565b34801561063e57600080fd5b5061056b610e84565b34801561065357600080fd5b5061056b6004803603602081101561066a57600080fd5b5035610e8a565b34801561067d57600080fd5b506104a8610ea5565b34801561069257600080fd5b5061059c610eae565b6107b3600480360360808110156106b157600080fd5b810190602081018135600160201b8111156106cb57600080fd5b8201836020820111156106dd57600080fd5b803590602001918460208302840111600160201b831117156106fe57600080fd5b919390929091602081019035600160201b81111561071b57600080fd5b82018360208201111561072d57600080fd5b803590602001918460208302840111600160201b8311171561074e57600080fd5b919390929091602081019035600160201b81111561076b57600080fd5b82018360208201111561077d57600080fd5b803590602001918460208302840111600160201b8311171561079e57600080fd5b91935091503567ffffffffffffffff16610eb3565b604080519115158252519081900360200190f35b3480156107d357600080fd5b5061056b611388565b3480156107e857600080fd5b506104a861138e565b3480156107fd57600080fd5b5061056b611394565b34801561081257600080fd5b5061059c61139a565b34801561082757600080fd5b506103646004803603604081101561083e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561086257600080fd5b82018360208201111561087457600080fd5b803590602001918460018302840111600160201b8311171561089557600080fd5b50909250905061139f565b3480156108ac57600080fd5b50610364600480360360608110156108c357600080fd5b508035906001600160a01b0360208201351690604001356114e8565b3480156108eb57600080fd5b5061059c61156e565b34801561090057600080fd5b506104a8611573565b34801561091557600080fd5b506104a86004803603604081101561092c57600080fd5b506001600160a01b03813516906020013561157f565b34801561094e57600080fd5b5061056b6116bd565b34801561096357600080fd5b5061056b6116c3565b34801561097857600080fd5b5061059c6116c9565b34801561098d57600080fd5b506107b36116ce565b3480156109a257600080fd5b5061059c6116d7565b6107b3600480360360808110156109c157600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff166116dc565b3480156109fe57600080fd5b506103806116c9565b348015610a1357600080fd5b5061036460048036036040811015610a2a57600080fd5b810190602081018135600160201b811115610a4457600080fd5b820183602082011115610a5657600080fd5b803590602001918460018302840111600160201b83111715610a7757600080fd5b919390929091602081019035600160201b811115610a9457600080fd5b820183602082011115610aa657600080fd5b803590602001918460018302840111600160201b83111715610ac757600080fd5b509092509050611d9d565b348015610ade57600080fd5b5061036460048036036040811015610af557600080fd5b50803590602001356001600160a01b031661200c565b348015610b1757600080fd5b506104a8612082565b348015610b2c57600080fd5b506104a861208c565b348015610b4157600080fd5b506104a860048036036020811015610b5857600080fd5b50356001600160a01b0316612092565b348015610b7457600080fd5b506104a860048036036020811015610b8b57600080fd5b50356001600160a01b03166120a4565b348015610ba757600080fd5b5061056b6120bf565b348015610bbc57600080fd5b5061036460048036036040811015610bd357600080fd5b60ff8235169190810190604081016020820135600160201b811115610bf757600080fd5b820183602082011115610c0957600080fd5b803590602001918460018302840111600160201b83111715610c2a57600080fd5b5090925090506120c5565b348015610c4157600080fd5b5061056b612195565b348015610c5657600080fd5b5061036461219b565b348015610c6b57600080fd5b5061059c61223b565b348015610c8057600080fd5b5061059c612240565b348015610c9557600080fd5b5061056b612245565b348015610caa57600080fd5b506104a861224b565b348015610cbf57600080fd5b5061041e60048036036020811015610cd657600080fd5b50356001600160a01b0316612251565b348015610cf257600080fd5b5061056b612378565b606481565b60005460609060ff16610d48576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b3361200014610d885760405162461bcd60e51b815260040180806020018281038252602f815260200180614756602f913960400191505060405180910390fd5b60ff841660021415610dda57610dd383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237e92505050565b9050610e27565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b60015490565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b670de0b6b3a764000081565b603881565b600881565b66071afd498d000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b600281565b6000805460ff16610ef9576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b868514610f375760405162461bcd60e51b815260040180806020018281038252603b81526020018061471b603b913960400191505060405180910390fd5b868314610f755760405162461bcd60e51b815260040180806020018281038252603f8152602001806145ee603f913960400191505060405180910390fd5b426078018267ffffffffffffffff161015610fc15760405162461bcd60e51b81526004018080602001828103825260248152602001806144de6024913960400191505060405180910390fd5b6402540be4003406156110055760405162461bcd60e51b815260040180806020018281038252604081526020018061481e6040913960400191505060405180910390fd5b60408051868152602080880282010190915285906000908190606090848015611038578160200160208202803683370190505b50905060005b84811015611113576402540be4008b8b8381811061105857fe5b905060200201358161106657fe5b06156110a35760405162461bcd60e51b815260040180806020018281038252603c81526020018061462d603c913960400191505060405180910390fd5b6110c88b8b838181106110b257fe5b90506020020135856124a290919063ffffffff16565b93506110f46402540be4008c8c848181106110df57fe5b905060200201356124fc90919063ffffffff16565b82828151811061110057fe5b602090810291909101015260010161103e565b506001546111389061112b908663ffffffff61253e16565b849063ffffffff6124a216565b3410156111765760405162461bcd60e51b81526004018080602001828103825260568152602001806147c86056913960600191505060405180910390fd5b611186348463ffffffff61259716565b9150611190614337565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d76003611254846125d9565b611269876402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156112c75781810151838201526020016112af565b50505050905090810190601f1680156112f45780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b60015481565b61100881565b600b81565b60005460ff166113e4576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b33612000146114245760405162461bcd60e51b815260040180806020018281038252602f815260200180614756602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061289492505050565b6114e3565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b33611008146115285760405162461bcd60e51b81526004018080602001828103825260238152602001806147856023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff166115c5576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b33611005146116055760405162461bcd60e51b815260040180806020018281038252602f815260200180614451602f913960400191505060405180910390fd5b60004783106116145747611616565b825b9050670de0b6b3a76400008111156116325760009150506116b7565b80156116b4576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561166e573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60005460ff1681565b600381565b6000805460ff16611722576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff16101561176e5760405162461bcd60e51b81526004018080602001828103825260248152602001806144de6024913960400191505060405180910390fd5b6402540be4003406156117b25760405162461bcd60e51b815260040180806020018281038252604081526020018061481e6040913960400191505060405180910390fd5b600080806001600160a01b038816611891576001546117d890879063ffffffff6124a216565b3410156118165760405162461bcd60e51b81526004018080602001828103825260618152602001806145686061913960800191505060405180910390fd5b6402540be40086061561185a5760405162461bcd60e51b815260040180806020018281038252603c81526020018061462d603c913960400191505060405180910390fd5b61186a348763ffffffff61259716565b9050611881866402540be40063ffffffff6124fc16565b6221272160e91b93509150611b34565b6001600160a01b0388166000908152600360205260409020549250826118e85760405162461bcd60e51b81526004018080602001828103825260318152602001806145376031913960400191505060405180910390fd5b6001543410156119295760405162461bcd60e51b815260040180806020018281038252603f81526020018061468a603f913960400191505060405180910390fd5b506001600160a01b038716600090815260026020526040902054349060088111158061197457506008811180156119745750611972876007198301600a0a63ffffffff6128f016565b155b6119af5760405162461bcd60e51b815260040180806020018281038252603c81526020018061462d603c913960400191505060405180910390fd5b6119b98782612932565b92506119c484612972565b15611a0c576305f5e100831015611a0c5760405162461bcd60e51b815260040180806020018281038252603a815260200180614480603a913960400191505060405180910390fd5b600881101580611a265750600881108015611a2657508683115b611a615760405162461bcd60e51b81526004018080602001828103825260258152602001806145c96025913960400191505060405180910390fd5b677ce66c50e2840000831115611aa85760405162461bcd60e51b81526004018080602001828103825260358152602001806145026035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b158015611afd57600080fd5b505af1158015611b11573d6000803e3d6000fd5b505050506040513d6020811015611b2757600080fd5b5051611b3257600080fd5b505b611b3c614337565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff168152509050828160400151600081518110611bea57fe5b602002602001018181525050878160600151600081518110611c0857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611c3a57fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611c65846125d9565b611c7a866402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611cd8578181015183820152602001611cc0565b50505050905090810190601f168015611d055780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611d2657600080fd5b505af1158015611d3a573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b3361100714611ddd5760405162461bcd60e51b815260040180806020018281038252602e8152602001806146c9602e913960400191505060405180910390fd5b60208114611e32576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415611f3a576020820151670de0b6b3a76400008111801590611ee157506402540be4008106155b611f32576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155611f77565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b336110081461204c5760405162461bcd60e51b81526004018080602001828103825260238152602001806147856023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b61c35081565b60026020526000908152604090205481565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff1661210a576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b336120001461214a5760405162461bcd60e51b815260040180806020018281038252602f815260200180614756602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a7892505050565b61100381565b60005460ff16156121f3576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b66071afd498d000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b600481565b600581565b61100081565b61271081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff1610156122e157828160ff16815181106122b557fe5b01602001516001600160f81b031916156122d4576001909101906122d9565b6122e1565b60010161229a565b5060608160ff166040519080825280601f01601f191660200182016040528015612312576020820181803683370190505b50905060005b8260ff168160ff16101561236e57838160ff168151811061233557fe5b602001015160f81c60f81b828260ff168151811061234f57fe5b60200101906001600160f81b031916908160001a905350600101612318565b5095945050505050565b61100481565b6060612388614383565b600061239384612b76565b91509150806123e9576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b60006123f483612cb5565b905063ffffffff811615612488576040808401516020808601516001600160a01b0316600090815260029091529182205461242f9190612932565b90506124396143b8565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061247c81613002565b95505050505050610e53565b50506040805160008152602081019091529150610e539050565b6000828201838110156116b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130de565b60008261254d575060006116b7565b8282028284828161255a57fe5b04146116b45760405162461bcd60e51b81526004018080602001828103825260218152602001806146696021913960400191505060405180910390fd5b60006116b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613180565b60408051600680825260e08201909252606091829190816020015b60608152602001906001900390816125f45750508351909150612616906131da565b8160008151811061262357fe5b602002602001018190525061264483602001516001600160a01b03166131ed565b8160018151811061265157fe5b60200260200101819052506000836040015151905060608160405190808252806020026020018201604052801561269c57816020015b60608152602001906001900390816126875790505b50905060005b828110156126e9576126ca866040015182815181106126bd57fe5b60200260200101516131da565b8282815181106126d657fe5b60209081029190910101526001016126a2565b506126f381613210565b8360028151811061270057fe5b602002602001018190525060608260405190808252806020026020018201604052801561274157816020015b606081526020019060019003908161272c5790505b50905060005b83811015612797576127788760600151828151811061276257fe5b60200260200101516001600160a01b03166131ed565b82828151811061278457fe5b6020908102919091010152600101612747565b506127a181613210565b846003815181106127ae57fe5b60200260200101819052506060836040519080825280602002602001820160405280156127ef57816020015b60608152602001906001900390816127da5790505b50905060005b8481101561282f576128108860800151828151811061276257fe5b82828151811061281c57fe5b60209081029190910101526001016127f5565b5061283981613210565b8560048151811061284657fe5b60200260200101819052506128688760a0015167ffffffffffffffff166131da565b8560058151811061287557fe5b602002602001018190525061288985613210565b979650505050505050565b61289c6143df565b60006128a78361329a565b91509150806128e75760405162461bcd60e51b81526004018080602001828103825260248152602001806146f76024913960400191505060405180910390fd5b6114e382613465565b60006116b483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506138e9565b6000600882111561295b57612954836007198401600a0a63ffffffff6124fc16565b90506116b7565b6116b4836008849003600a0a63ffffffff61253e16565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff1610156129e857828160ff16815181106129bc57fe5b01602001516001600160f81b031916156129db576001909101906129e0565b6129e8565b6001016129a1565b50600760ff82161015612a0057600092505050610e53565b816005820360ff1681518110612a1257fe5b6020910101516001600160f81b031916602d60f81b14612a3757600092505050610e53565b816001820360ff1681518110612a4957fe5b6020910101516001600160f81b031916604d60f81b14612a6e57600092505050610e53565b5060019392505050565b612a80614337565b6000612a8b8361394b565b9150915080612acb5760405162461bcd60e51b81526004018080602001828103825260248152602001806144ba6024913960400191505060405180910390fd5b612ad36143df565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b846040015151811015612b5457612b3185604001518281518110612b2357fe5b602002602001015183613baf565b85604001518281518110612b4157fe5b6020908102919091010152600101612b03565b506080840151604083015260056060830152612b6f82613465565b5050505050565b612b7e614383565b6000612b88614383565b612b90614416565b612ba1612b9c86613be8565b613c0d565b90506000805b612bb083613c57565b15612ca85780612bd257612bcb612bc684613c78565b613cc6565b8452612ca0565b8060011415612bff57612bec612be784613c78565b613d7d565b6001600160a01b03166020850152612ca0565b8060021415612c1e57612c14612bc684613c78565b6040850152612ca0565b8060031415612c4657612c33612be784613c78565b6001600160a01b03166060850152612ca0565b8060041415612c6e57612c5b612be784613c78565b6001600160a01b03166080850152612ca0565b8060051415612c9b57612c83612bc684613c78565b67ffffffffffffffff1660a085015260019150612ca0565b612ca8565b600101612ba7565b5091935090915050915091565b60208101516000906001600160a01b0316612dec578160a0015167ffffffffffffffff16421115612ce857506001610e53565b8160400151471015612cfc57506003610e53565b606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114612d53576040519150601f19603f3d011682016040523d82523d6000602084013e612d58565b606091505b5050905080612d6b575060049050610e53565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009050610e53565b8160a0015167ffffffffffffffff16421115612e0a57506001610e53565b81516020808401516001600160a01b031660009081526003909152604090205414612e3757506002610e53565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612e8757600080fd5b5086fa158015612e9b573d6000803e3d6000fd5b50505050506040513d6020811015612eb257600080fd5b50516040840151909150811015612ecd575060039050610e53565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612f3e57600080fd5b5087f1158015612f52573d6000803e3d6000fd5b50505050506040513d6020811015612f6957600080fd5b505190508015612ff6577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610e539050565b5060059150610e539050565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161301d575050835190915061303f906131da565b8160008151811061304c57fe5b602002602001018190525061306483602001516131da565b8160018151811061307157fe5b602002602001018190525061309283604001516001600160a01b03166131ed565b8160028151811061309f57fe5b60200260200101819052506130bd836060015163ffffffff166131da565b816003815181106130ca57fe5b6020026020010181905250610e2781613210565b6000818361316a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561312f578181015183820152602001613117565b50505050905090810190601f16801561315c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161317657fe5b0495945050505050565b600081848411156131d25760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b505050900390565b60606116b76131e883613d97565b613e7d565b60408051600560a21b8318601482015260348101909152606090610e2781613e7d565b60608151600014156132315750604080516000815260208101909152610e53565b60608260008151811061324057fe5b602002602001015190506000600190505b8351811015613281576132778285838151811061326a57fe5b6020026020010151613ecf565b9150600101613251565b50610e27613294825160c060ff16613f4c565b82613ecf565b6132a26143df565b60006132ac6143df565b6132b4614416565b6132c0612b9c86613be8565b90506000805b6132cf83613c57565b15612ca857806132f5576132e5612be784613c78565b6001600160a01b0316845261345d565b806001141561339657606061331161330c85613c78565b614044565b9050805160405190808252806020026020018201604052801561333e578160200160208202803683370190505b50602086015260005b815181101561338f5761336c82828151811061335f57fe5b6020026020010151613cc6565b8660200151828151811061337c57fe5b6020908102919091010152600101613347565b505061345d565b80600214156134385760606133ad61330c85613c78565b905080516040519080825280602002602001820160405280156133da578160200160208202803683370190505b50604086015260005b815181101561338f576134088282815181106133fb57fe5b6020026020010151613d7d565b8660400151828151811061341857fe5b6001600160a01b03909216602092830291909101909101526001016133e3565b8060031415612c9b5761344d612bc684613c78565b63ffffffff166060850152600191505b6001016132c6565b80516001600160a01b031661368f5760005b8160200151518110156136895760008260400151828151811061349657fe5b60200260200101516001600160a01b0316612710846020015184815181106134ba57fe5b60209081029190910101516040516000818181858888f193505050503d8060008114613502576040519150601f19603f3d011682016040523d82523d6000602084013e613507565b606091505b50509050806135ca577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061354657fe5b60200260200101518560200151858151811061355e57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613680565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061360057fe5b60200260200101518560200151858151811061361857fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613477565b506138e6565b60005b8160200151518110156138e457600082600001516001600160a01b031663a9059cbb61c350856040015185815181106136c757fe5b6020026020010151866020015186815181106136df57fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561373657600080fd5b5087f115801561374a573d6000803e3d6000fd5b50505050506040513d602081101561376157600080fd5b505190508015613825577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106137a157fe5b6020026020010151856020015185815181106137b957fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16138db565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061385b57fe5b60200260200101518560200151858151811061387357fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613692565b505b50565b600081836139385760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b5082848161394257fe5b06949350505050565b613953614337565b600061395d614337565b613965614416565b613971612b9c86613be8565b90506000805b61398083613c57565b15612ca8578061399d57613996612bc684613c78565b8452613ba7565b80600114156139c5576139b2612be784613c78565b6001600160a01b03166020850152613ba7565b8060021415613a545760606139dc61330c85613c78565b90508051604051908082528060200260200182016040528015613a09578160200160208202803683370190505b50604086015260005b8151811015613a4d57613a2a82828151811061335f57fe5b86604001518281518110613a3a57fe5b6020908102919091010152600101613a12565b5050613ba7565b8060031415613ae9576060613a6b61330c85613c78565b90508051604051908082528060200260200182016040528015613a98578160200160208202803683370190505b50606086015260005b8151811015613a4d57613ab98282815181106133fb57fe5b86606001518281518110613ac957fe5b6001600160a01b0390921660209283029190910190910152600101613aa1565b8060041415613b7e576060613b0061330c85613c78565b90508051604051908082528060200260200182016040528015613b2d578160200160208202803683370190505b50608086015260005b8151811015613a4d57613b4e8282815181106133fb57fe5b86608001518281518110613b5e57fe5b6001600160a01b0390921660209283029190910190910152600101613b36565b8060051415612c9b57613b93612bc684613c78565b67ffffffffffffffff1660a0850152600191505b600101613977565b60006008821115613bd157612954836007198401600a0a63ffffffff61253e16565b6116b4836008849003600a0a63ffffffff6124fc16565b613bf0614436565b506040805180820190915281518152602082810190820152919050565b613c15614416565b613c1e82614115565b613c2757600080fd5b6000613c368360200151614145565b60208085015160408051808201909152868152920190820152915050919050565b6000613c61614436565b505080518051602091820151919092015191011190565b613c80614436565b613c8982613c57565b613c9257600080fd5b60208201516000613ca2826141a8565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613cdb57508151602110155b613ce457600080fd5b6000613cf38360200151614145565b90508083600001511015613d4e576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613d7457826020036101000a820491505b50949350505050565b8051600090601514613d8e57600080fd5b6116b782613cc6565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613ddb57506018613dff565b6fffffffffffffffffffffffffffffffff198416613dfb57506010613dff565b5060005b6020811015613e3557818181518110613e1457fe5b01602001516001600160f81b03191615613e2d57613e35565b600101613dff565b60008160200390506060816040519080825280601f01601f191660200182016040528015613e6a576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613eaf5750607f60f81b82600081518110613e9d57fe5b01602001516001600160f81b03191611155b15613ebb575080610e53565b6116b7613ecd8351608060ff16613f4c565b835b6060806040519050835180825260208201818101602087015b81831015613f00578051835260209283019201613ee8565b50855184518101855292509050808201602086015b81831015613f2d578051835260209283019201613f15565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613f9c576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613ff65782840160f81b81600081518110613fd857fe5b60200101906001600160f81b031916908160001a90535090506116b7565b606061400185613d97565b90508381510160370160f81b8260008151811061401a57fe5b60200101906001600160f81b031916908160001a90535061403b8282613ecf565b95945050505050565b606061404f82614115565b61405857600080fd5b6000614063836142db565b90506060816040519080825280602002602001820160405280156140a157816020015b61408e614436565b8152602001906001900390816140865790505b50905060006140b38560200151614145565b60208601510190506000805b8481101561410a576140d0836141a8565b91506040518060400160405280838152602001848152508482815181106140f357fe5b6020908102919091010152918101916001016140bf565b509195945050505050565b805160009061412657506000610e53565b6020820151805160001a9060c0821015612a6e57600092505050610e53565b8051600090811a608081101561415f576000915050610e53565b60b881108061417a575060c0811080159061417a575060f881105b15614189576001915050610e53565b60c081101561419d5760b519019050610e53565b60f519019050610e53565b80516000908190811a60808110156141c357600191506142d4565b60b88110156141d857607e19810191506142d4565b60c081101561425257600060b78203600186019550806020036101000a86510491506001810182019350508083101561424c576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506142d4565b60f88110156142675760be19810191506142d4565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156142d2576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b80516000906142ec57506000610e53565b600080905060006143008460200151614145565b602085015185519181019250015b8082101561432e5761431f826141a8565b6001909301929091019061430e565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b6040518060400160405280614429614436565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6ea2646970667358221220c72f4ad63f8f84b0b15ae9d71fffb0d09b3b3b97a728e64b385305ecb6431b0e64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerIncentivizeContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "6080604052600436106102815760003560e01c8063930e1b091161014f578063bd4cc830116100c1578063e75d72c71161007a578063e75d72c7146107b5578063e89a3020146107e8578063f9a2bbc714610812578063fc3e590814610827578063fd6a68791461083c578063fdd31fcd1461085157610288565b8063bd4cc83014610722578063c81b16621461074c578063d0ab528a14610761578063dc927faf14610776578063dcae76ab1461078b578063e1c7392a146107a057610288565b8063a78abc1611610113578063a78abc16146105d3578063a7c6a59d146105e8578063ab51bb96146105fd578063ac43175114610612578063ace9fcc2146106e3578063af400681146106f857610288565b8063930e1b091461054c57806396713da91461057f5780639dc0926214610594578063a1a11bf5146105a9578063a3c3c0ad146105be57610288565b806343756e5c116101f35780636f93d2e6116101ac5780636f93d2e61461048457806370fd5bad146104e357806374f2272d146104f857806375d47a0a1461050d5780637942fd05146105225780637e146cc51461053757610288565b806343756e5c146103ef578063493279b1146104045780634bf6c8821461043057806351e8067214610445578063541333071461045a5780636e47b4821461046f57610288565b806312950c461161024557806312950c46146103215780631b20087c146103365780631c6433121461034b5780633a9756121461028d5780633dffc3871461039157806340bb43c0146103bc57610288565b8063081e9d131461028d57806308f2ec06146102b4578063093f2fc4146102c95780630bee7a67146102de57806310e06a761461030c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610884565b60408051918252519081900360200190f35b3480156102c057600080fd5b506102a2610889565b3480156102d557600080fd5b506102a261088e565b3480156102ea57600080fd5b506102f3610893565b6040805163ffffffff9092168252519081900360200190f35b34801561031857600080fd5b506102a2610898565b34801561032d57600080fd5b506102a261089e565b34801561034257600080fd5b506102a26108a4565b34801561035757600080fd5b506103756004803603602081101561036e57600080fd5b50356108aa565b604080516001600160a01b039092168252519081900360200190f35b34801561039d57600080fd5b506103a6610884565b6040805160ff9092168252519081900360200190f35b3480156103c857600080fd5b506102a2600480360360208110156103df57600080fd5b50356001600160a01b03166108d1565b3480156103fb57600080fd5b506103756108e3565b34801561041057600080fd5b506104196108e9565b6040805161ffff9092168252519081900360200190f35b34801561043c57600080fd5b506103a66108ee565b34801561045157600080fd5b506103756108f3565b34801561046657600080fd5b506102a2610893565b34801561047b57600080fd5b506103756108f9565b34801561049057600080fd5b506104cf600480360360808110156104a757600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013515156108ff565b604080519115158252519081900360200190f35b3480156104ef57600080fd5b506103a6610d91565b34801561050457600080fd5b506102a2610d96565b34801561051957600080fd5b50610375610d9c565b34801561052e57600080fd5b506103a6610da2565b34801561054357600080fd5b506102a2610da7565b34801561055857600080fd5b506102a26004803603602081101561056f57600080fd5b50356001600160a01b0316610dac565b34801561058b57600080fd5b506103a6610dbe565b3480156105a057600080fd5b50610375610dc3565b3480156105b557600080fd5b50610375610dc9565b3480156105ca57600080fd5b506102a2610dcf565b3480156105df57600080fd5b506104cf610dd5565b3480156105f457600080fd5b506102a2610dde565b34801561060957600080fd5b506102f3610de4565b34801561061e57600080fd5b506106e16004803603604081101561063557600080fd5b81019060208101813564010000000081111561065057600080fd5b82018360208201111561066257600080fd5b8035906020019184600183028401116401000000008311171561068457600080fd5b9193909290916020810190356401000000008111156106a257600080fd5b8201836020820111156106b457600080fd5b803590602001918460018302840111640100000000831117156106d657600080fd5b509092509050610de9565b005b3480156106ef57600080fd5b506102a2611537565b34801561070457600080fd5b506102a26004803603602081101561071b57600080fd5b503561153d565b34801561072e57600080fd5b506102a26004803603602081101561074557600080fd5b5035611598565b34801561075857600080fd5b506103756115b1565b34801561076d57600080fd5b506102a26115b7565b34801561078257600080fd5b506103756115bd565b34801561079757600080fd5b506102a26115c3565b3480156107ac57600080fd5b506106e16115c9565b3480156107c157600080fd5b506106e1600480360360208110156107d857600080fd5b50356001600160a01b0316611692565b3480156107f457600080fd5b506103756004803603602081101561080b57600080fd5b50356117eb565b34801561081e57600080fd5b506103756117f8565b34801561083357600080fd5b506103a66117fe565b34801561084857600080fd5b50610375611803565b34801561085d57600080fd5b506102a26004803603602081101561087457600080fd5b50356001600160a01b0316611809565b600181565b602881565b605081565b606481565b600b5481565b60015481565b600c5481565b600681815481106108b757fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205481565b61100181565b603881565b600881565b61200081565b61100581565b6000805460ff16610957576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33612000146109975760405162461bcd60e51b815260040180806020018281038252602f815260200180612377602f913960400191505060405180910390fd5b60008215610a4a576110026001600160a01b0316639a99b4f06110056109c8600e548861181b90919063ffffffff16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610a1757600080fd5b505af1158015610a2b573d6000803e3d6000fd5b505050506040513d6020811015610a4157600080fd5b50519050610b59565b604080516309a99b4f60e41b8152611005600482015260248101869052905161100491639a99b4f09160448083019260209291908290030181600087803b158015610a9457600080fd5b505af1158015610aa8573d6000803e3d6000fd5b505050506040513d6020811015610abe57600080fd5b5051600e5490915015610b5957600e54604080516309a99b4f60e41b81526110056004820152602481019290925251610b569161100291639a99b4f0916044808201926020929091908290030181600087803b158015610b1d57600080fd5b505af1158015610b31573d6000803e3d6000fd5b505050506040513d6020811015610b4757600080fd5b5051829063ffffffff61181b16565b90505b600c805460010190556000610b6d8261187e565b600954909150610b83908263ffffffff61181b16565b600955600a54610bab908290610b9f908563ffffffff61181b16565b9063ffffffff6118a716565b600a556001600160a01b038716600090815260056020526040902054610c1757600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038088166000908152600560209081526040808320805460010190559289168252600790522054610c9557600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260076020526040902080546001019055600c54606411610d8457600b54600954600a5460408051938452602084019290925282820152517f2649b1b772a1a74bd332a67695e285317dd722941166595741c60a00fa65bb759181900360600190a16000610d0f6118e9565b90506000610d1b611bcd565b6001600160a01b0389166000908152600d6020526040902054909150610d59908290610d4d908563ffffffff61181b16565b9063ffffffff61181b16565b6001600160a01b0389166000908152600d6020526040812091909155600b80546001019055600c5550505b5060019695505050505050565b600281565b60035481565b61100881565b600b81565b600581565b60056020526000908152604090205481565b600981565b61100781565b61100681565b600a5481565b60005460ff1681565b60045481565b600081565b3361100714610e295760405162461bcd60e51b815260040180806020018281038252602e8152602001806122bc602e913960400191505060405180910390fd5b60005460ff16610e6a5760405162461bcd60e51b81526004018080602001828103825260218152602001806122ea6021913960400191505060405180910390fd5b610ede84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601f81527f68656164657252656c61796572526577617264526174654d6f6c6563756c650060208201529150611e4b9050565b15610fab5760208114610f225760405162461bcd60e51b81526004018080602001828103825260328152602001806123a66032913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610f6091858580838501838280828437600092019190915250611f3292505050565b9050600254811115610fa35760405162461bcd60e51b81526004018080602001828103825260608152602001806121956060913960600191505060405180910390fd5b6001556114a5565b61100484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051606081019091526022808252909250905061229a6020830139611e4b565b156110dc57602081146110485760405162461bcd60e51b815260040180806020018281038252602e81526020018061224b602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161108691858580838501838280828437600092019190915250611f3292505050565b9050801580159061109957506001548110155b6110d45760405162461bcd60e51b815260040180806020018281038252606c81526020018061230b606c913960800191505060405180910390fd5b6002556114a5565b61115084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601a81527f63616c6c6572436f6d70656e736174696f6e4d6f6c6563756c6500000000000060208201529150611e4b9050565b1561121d57602081146111945760405162461bcd60e51b815260040180806020018281038252602e81526020018061224b602e913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916111d291858580838501838280828437600092019190915250611f3292505050565b90506004548111156112155760405162461bcd60e51b81526004018080602001828103825260568152602001806121f56056913960600191505060405180910390fd5b6003556114a5565b61129184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601d81527f63616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f7200000060208201529150611e4b9050565b1561136957602081146112d55760405162461bcd60e51b815260040180806020018281038252602e81526020018061224b602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161131391858580838501838280828437600092019190915250611f3292505050565b9050801580159061132657506003548110155b6113615760405162461bcd60e51b81526004018080602001828103825260618152602001806121066061913960800191505060405180910390fd5b6004556114a5565b6113dd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f64796e616d69634578747261496e63656e74697665416d6f756e74000000000060208201529150611e4b9050565b1561146857602081146114215760405162461bcd60e51b815260040180806020018281038252602e815260200180612167602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161145f91858580838501838280828437600092019190915250611f3292505050565b600e55506114a5565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60025481565b60006028821161154e575080611593565b81602810801561155f575060508211155b1561156c57506028611593565b60508211801561157d5750606e8211155b1561158d57506078819003611593565b50600481045b919050565b6000602882116115a9575080611593565b506028611593565b61100281565b600e5481565b61100381565b60095481565b60005460ff1615611621576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60005460ff161561166f576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60018080556005600255600381905560506004556000805460ff19169091179055565b6001600160a01b0381166000908152600d6020526040902054806116f1576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c995b185e595c881c995dd85c99607a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d60205260408082208290555184929184156108fc02918591818181858888f193505050506117a15760405161100290819084156108fc029085906000818181858888f1935050505015801561175b573d6000803e3d6000fd5b506040805161100281526020810185905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a15050506117e8565b604080516001600160a01b03851681526020810184905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a150505b50565b600881815481106108b757fe5b61100081565b600381565b61100481565b600d6020526000908152604090205481565b600082820183811015611875576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600061187860025461189b60015485611f3790919063ffffffff16565b9063ffffffff611f9016565b600061187583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fd2565b600954600680546040805160208084028201810190925282815260009493859360609383018282801561194557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611927575b5050505050905060608151604051908082528060200260200182016040528015611979578160200160208202803683370190505b50905060005b8251811015611a0657600083828151811061199657fe5b6020026020010151905060006119d060056000846001600160a01b03166001600160a01b0316815260200190815260200160002054611598565b9050808484815181106119df57fe5b60209081029190910101526119fa868263ffffffff61181b16565b9550505060010161197f565b506000611a2460045461189b60035488611f3790919063ffffffff16565b9050611a36858263ffffffff6118a716565b94508460015b8451811015611b0d576000611a718761189b8a888681518110611a5b57fe5b6020026020010151611f3790919063ffffffff16565b9050611abe81600d6000898681518110611a8757fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205461181b90919063ffffffff16565b600d6000888581518110611ace57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611b02838263ffffffff6118a716565b925050600101611a3c565b50611b2381600d600087600081518110611a8757fe5b600d600086600081518110611b3457fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060098190555060008090505b8451811015611bb55760056000868381518110611b8757fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611b6e565b50611bc2600660006120ce565b509450505050505b90565b600a546008805460408051602080840282018101909252828152600094938593606093830182828015611c2957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c0b575b5050505050905060608151604051908082528060200260200182016040528015611c5d578160200160208202803683370190505b50905060005b8251811015611cdc576000838281518110611c7a57fe5b602002602001015190506000611cb460076000846001600160a01b03166001600160a01b031681526020019081526020016000205461153d565b905080848481518110611cc357fe5b6020908102919091010152949094019350600101611c63565b506000611cfa60045461189b60035488611f3790919063ffffffff16565b9050611d0c858263ffffffff6118a716565b94508460015b8451811015611d96576000611d318761189b8a888681518110611a5b57fe5b9050611d4781600d6000898681518110611a8757fe5b600d6000888581518110611d5757fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611d8b838263ffffffff6118a716565b925050600101611d12565b50611dac81600d600087600081518110611a8757fe5b600d600086600081518110611dbd57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506000600a8190555060008090505b8451811015611e3e5760076000868381518110611e1057fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611df7565b50611bc2600860006120ce565b6000816040516020018082805190602001908083835b60208310611e805780518252601f199092019160209182019101611e61565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310611eee5780518252601f199092019160209182019101611ecf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b600082611f4657506000611878565b82820282848281611f5357fe5b04146118755760405162461bcd60e51b81526004018080602001828103825260218152602001806122796021913960400191505060405180910390fd5b600061187583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612069565b600081848411156120615760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561202657818101518382015260200161200e565b50505050905090810190601f1680156120535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836120b85760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561202657818101518382015260200161200e565b5060008385816120c457fe5b0495945050505050565b50805460008255906000526020600020908101906117e89190611bca91905b8082111561210157600081556001016120ed565b509056fe746865206e657743616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c656c656e677468206f662064796e616d69634578747261496e63656e74697665416d6f756e74206d69736d617463686e65772068656164657252656c61796572526577617264526174654d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2068656164657252656c617965725265776172645261746544656e6f6d696e61746f726e65772063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2063616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f726c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7768656164657252656c617965725265776172645261746544656e6f6d696e61746f72746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374636f6e747261637420686173206e6f74206265656e20696e697469616c697a6564746865206e65772068656164657252656c617965725265776172645261746544656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2068656164657252656c61796572526577617264526174654d6f6c6563756c65746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163746c656e677468206f662068656164657252656c61796572526577617264526174654d6f6c6563756c65206d69736d61746368a2646970667358221220ed761a0a8bb4eac3f5f94897efb6059f8cb261a19ed73bef336cbc05af2a532064736f6c63430006040033", + }, + }, + } + + mirrorUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "mirror", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "6080604052600436106103815760003560e01c80637d078e13116101d1578063b795031711610102578063d9e6dae9116100a0578063fa9e91591161006f578063fa9e915914610d38578063fc3e5908146105b2578063fd6a687914610d4d578063fe3a2af514610d6257610381565b8063d9e6dae9146106fc578063dc927faf14610cf9578063e605bca014610d0e578063f9a2bbc714610d2357610381565b8063c8509d81116100dc578063c8509d8114610bdf578063c8e704a4146105b2578063d117a11014610c64578063d7109ce614610ce457610381565b8063b79503171461073b578063bd32d3f9146104d9578063c81b166214610bca57610381565b80639a854bbd1161016f578063a78abc1611610149578063a78abc1614610ad5578063ab51bb9614610aea578063ab67a4851461073b578063ac43175114610aff57610381565b80639a854bbd14610a965780639dc0926214610aab578063a1a11bf514610ac057610381565b8063859180fb116101ab578063859180fb146106e757806394553a4e14610a3757806395b9ad2614610a6c57806396713da914610a8157610381565b80637d078e13146104ee5780637ec816dd1461099b578063831d65d1146109b057610381565b8063493279b1116102b657806366dea52a1161025457806372c4e0861161022357806372c4e0861461081957806375d47a0a146108bd57806377d9dae8146108d25780637942fd051461098657610381565b806366dea52a1461073b5780636b3f1307146107505780636e47b4821461080457806370fd5bad1461073b57610381565b806351e806721161029057806351e80672146107115780635d499b1b146107265780635f558f861461073b57806361368475146106fc57610381565b8063493279b1146106bb5780634bc81c00146106e75780634bf6c882146106fc57610381565b80632e02d77611610323578063401809f9116102fd578063401809f9146105b257806343756e5c146105c7578063445fcefe146105f8578063487c88ac146104ee57610381565b80632e02d7761461054c57806337e6ecda1461057f5780633dffc387146104ee57610381565b80631f91600b1161035f5780631f91600b146104d957806323996b53146104ee57806325c751b7146105035780632d89ac32146104ee57610381565b80630bee7a67146103865780630f212b1b146103b45780631182b875146103df575b600080fd5b34801561039257600080fd5b5061039b610d77565b6040805163ffffffff9092168252519081900360200190f35b3480156103c057600080fd5b506103c9610d7c565b6040805160ff9092168252519081900360200190f35b3480156103eb57600080fd5b506104646004803603604081101561040257600080fd5b60ff8235169190810190604081016020820135600160201b81111561042657600080fd5b82018360208201111561043857600080fd5b803590602001918460018302840111600160201b8311171561045957600080fd5b509092509050610d81565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104e557600080fd5b506103c9610e9b565b3480156104fa57600080fd5b506103c9610ea0565b6105386004803603604081101561051957600080fd5b5080356001600160a01b031690602001356001600160401b0316610ea5565b604080519115158252519081900360200190f35b34801561055857600080fd5b506105386004803603602081101561056f57600080fd5b50356001600160a01b03166113f1565b34801561058b57600080fd5b50610538600480360360208110156105a257600080fd5b50356001600160a01b0316611406565b3480156105be57600080fd5b506103c961141b565b3480156105d357600080fd5b506105dc611420565b604080516001600160a01b039092168252519081900360200190f35b34801561060457600080fd5b506106a96004803603602081101561061b57600080fd5b810190602081018135600160201b81111561063557600080fd5b82018360208201111561064757600080fd5b803590602001918460018302840111600160201b8311171561066857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611426945050505050565b60408051918252519081900360200190f35b3480156106c757600080fd5b506106d0611584565b6040805161ffff9092168252519081900360200190f35b3480156106f357600080fd5b506103c9611589565b34801561070857600080fd5b506103c961158e565b34801561071d57600080fd5b506105dc611593565b34801561073257600080fd5b506106a9611599565b34801561074757600080fd5b506103c96115a2565b6105386004803603604081101561076657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561079057600080fd5b8201836020820111156107a257600080fd5b803590602001918460018302840111600160201b831117156107c357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115a7945050505050565b34801561081057600080fd5b506105dc611e7d565b6105386004803603602081101561082f57600080fd5b810190602081018135600160201b81111561084957600080fd5b82018360208201111561085b57600080fd5b803590602001918460018302840111600160201b8311171561087c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e83945050505050565b3480156108c957600080fd5b506105dc6122cf565b610538600480360360408110156108e857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561091257600080fd5b82018360208201111561092457600080fd5b803590602001918460018302840111600160201b8311171561094557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506122d5945050505050565b34801561099257600080fd5b506103c96127db565b3480156109a757600080fd5b506106a96127e0565b3480156109bc57600080fd5b50610a35600480360360408110156109d357600080fd5b60ff8235169190810190604081016020820135600160201b8111156109f757600080fd5b820183602082011115610a0957600080fd5b803590602001918460018302840111600160201b83111715610a2a57600080fd5b5090925090506127e6565b005b61053860048036036040811015610a4d57600080fd5b5080356001600160a01b031690602001356001600160401b0316612935565b348015610a7857600080fd5b506103c961332c565b348015610a8d57600080fd5b506103c9613331565b348015610aa257600080fd5b506106a9613336565b348015610ab757600080fd5b506105dc613342565b348015610acc57600080fd5b506105dc613348565b348015610ae157600080fd5b5061053861334e565b348015610af657600080fd5b5061039b613357565b348015610b0b57600080fd5b50610a3560048036036040811015610b2257600080fd5b810190602081018135600160201b811115610b3c57600080fd5b820183602082011115610b4e57600080fd5b803590602001918460018302840111600160201b83111715610b6f57600080fd5b919390929091602081019035600160201b811115610b8c57600080fd5b820183602082011115610b9e57600080fd5b803590602001918460018302840111600160201b83111715610bbf57600080fd5b50909250905061335c565b348015610bd657600080fd5b506105dc613631565b348015610beb57600080fd5b50610a3560048036036040811015610c0257600080fd5b60ff8235169190810190604081016020820135600160201b811115610c2657600080fd5b820183602082011115610c3857600080fd5b803590602001918460018302840111600160201b83111715610c5957600080fd5b509092509050613637565b348015610c7057600080fd5b50610c8e60048036036020811015610c8757600080fd5b503561370d565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a08301526001600160401b0390921660c082015290519081900360e00190f35b348015610cf057600080fd5b506106a9613764565b348015610d0557600080fd5b506105dc613769565b348015610d1a57600080fd5b506106a961376f565b348015610d2f57600080fd5b506105dc613775565b348015610d4457600080fd5b506106a961377b565b348015610d5957600080fd5b506105dc613781565b348015610d6e57600080fd5b506103c9613357565b606481565b600681565b60603361200014610dc35760405162461bcd60e51b815260040180806020018281038252602f815260200180615b89602f913960400191505060405180910390fd5b60ff841660011415610e1557610e0e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061378792505050565b9050610e94565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605848484604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1506040805160008152602081019091525b9392505050565b600481565b600181565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b5051905080610f5e576040805162461bcd60e51b81526020600482015260096024820152681b9bdd08189bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602052604090205460ff16610fc1576040805162461bcd60e51b81526020600482015260136024820152723737ba103137bab73210313c9036b4b93937b960691b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610ffe57600080fd5b505afa158015611012573d6000803e3d6000fd5b505050506040513d602081101561102857600080fd5b505190506402540be4003406158015611053575060055461104f908263ffffffff613a1716565b3410155b61108e5760405162461bcd60e51b8152600401808060200182810382526046815260200180615b156046913960600191505060405180910390fd5b42607801846001600160401b0316101580156110b85750426201518001846001600160401b031611155b6110f35760405162461bcd60e51b8152600401808060200182810382526038815260200180615a126038913960400191505060405180910390fd5b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050506040513d602081101561115857600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0389169163313ce567916004808301926020929190829003018186803b1580156111a057600080fd5b505afa1580156111b4573d6000803e3d6000fd5b505050506040513d60208110156111ca57600080fd5b50519050677ce66c50e28400006111e48360ff8416613a71565b1115611230576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b600554611004906108fc9061124c90349063ffffffff613b0016565b6040518115909202916000818181858888f19350505050158015611274573d6000803e3d6000fd5b5061127d615869565b6040518060c00160405280336001600160a01b03168152602001896001600160a01b031681526020018681526020018481526020016112cc6402540be400600554613b4290919063ffffffff16565b81526001600160401b038916602090910152905061200063f7a251d760056112f384613b84565b61131d6402540be40061131160055434613b0090919063ffffffff16565b9063ffffffff613b4216565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561137b578181015183820152602001611363565b50505050905090810190601f1680156113a85780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156113c957600080fd5b505af11580156113dd573d6000803e3d6000fd5b505050506001955050505050505b92915050565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b600381565b61100181565b602081015160009061143661589e565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a08201526101009091046001600160401b031660c0820152906114bd5760009250505061157f565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561151b57600080fd5b505afa15801561152f573d6000803e3d6000fd5b505050506040513d602081101561154557600080fd5b5051608083015160608401519192506000916115669163ffffffff613b0016565b9050611578818363ffffffff613b0016565b9450505050505b919050565b606181565b600581565b600881565b61200081565b6402540be40081565b600281565b6001600160a01b03821660009081526002602052604081205460ff16156115ff5760405162461bcd60e51b815260040180806020018281038252602b815260200180615bb8602b913960400191505060405180910390fd5b600061160a83613cb9565b905061161461589e565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526116d9576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b60006116f682608001518360600151613b0090919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b03161461174c5760405162461bcd60e51b8152600401808060200182810382526045815260200180615a816045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561178f57600080fd5b505afa1580156117a3573d6000803e3d6000fd5b505050506040513d60208110156117b957600080fd5b50516001600160a01b0316146118005760405162461bcd60e51b815260040180806020018281038252602e8152602001806159e4602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561184c57600080fd5b505afa158015611860573d6000803e3d6000fd5b505050506040513d602081101561187657600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925083916119079184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b1580156118cf57600080fd5b505afa1580156118e3573d6000803e3d6000fd5b505050506040513d60208110156118f957600080fd5b50519063ffffffff613a1716565b101561195a576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561199c57600080fd5b505afa1580156119b0573d6000803e3d6000fd5b505050506040513d60208110156119c657600080fd5b505190508082108015906119df57506402540be4008206155b611a1a5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4a6037913960400191505060405180910390fd5b6000611a26868b613cc0565b905063ffffffff8116611c25576001600160a01b038a166323b872dd33611004611a56898963ffffffff613b0016565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611abe57600080fd5b505af1158015611ad2573d6000803e3d6000fd5b505050506040513d6020811015611ae857600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611be4578181015183820152602001611bcc565b50505050905090810190601f168015611c115780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2611cdd565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611ca1578181015183820152602001611c89565b50505050905090810190601f168015611cce5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611d376158da565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b5061200063f7a251d76001611d938461411a565b611da8886402540be40063ffffffff613b4216565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e06578181015183820152602001611dee565b50505050905090810190601f168015611e335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e5457600080fd5b505af1158015611e68573d6000803e3d6000fd5b5060019e9d5050505050505050505050505050565b61100581565b600080611e8f83613cb9565b9050611e9961589e565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c0830152611f5e576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c001516001600160401b031610611fbf576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561200157600080fd5b505afa158015612015573d6000803e3d6000fd5b505050506040513d602081101561202b57600080fd5b5051905080821080159061204457506402540be4008206155b61207f5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4a6037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556120d96158da565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f1935050505015801561211c573d6000803e3d6000fd5b5061200063f7a251d760016121308461411a565b612145876402540be40063ffffffff613b4216565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121a357818101518382015260200161218b565b50505050905090810190601f1680156121d05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156121f157600080fd5b505af1158015612205573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561228757818101518382015260200161226f565b50505050905090810190601f1680156122b45780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806122e183613cb9565b90506122eb61589e565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526123b0576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146124045760405162461bcd60e51b8152600401808060200182810382526045815260200180615a816045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561244757600080fd5b505afa15801561245b573d6000803e3d6000fd5b505050506040513d602081101561247157600080fd5b50516001600160a01b0316146124ce576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703230206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561251057600080fd5b505afa158015612524573d6000803e3d6000fd5b505050506040513d602081101561253a57600080fd5b5051905080821080159061255357506402540be4008206155b61258e5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4a6037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556125e86158da565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f1935050505015801561262b573d6000803e3d6000fd5b5061200063f7a251d7600161263f8461411a565b612654876402540be40063ffffffff613b4216565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156126b257818101518382015260200161269a565b50505050905090810190601f1680156126df5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561270057600080fd5b505af1158015612714573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561279257818101518382015260200161277a565b50505050905090810190601f1680156127bf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b60045481565b33612000146128265760405162461bcd60e51b815260040180806020018281038252602f815260200180615b89602f913960400191505060405180910390fd5b60ff8316600414156128765761287182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061419092505050565b612930565b60ff8316600514156128c15761287182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061443d92505050565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b15801561298257600080fd5b505afa158015612996573d6000803e3d6000fd5b505050506040513d60208110156129ac57600080fd5b5051146129f0576040805162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48189bdd5b99609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff1615612a4f576040805162461bcd60e51b815260206004820152600e60248201526d6d6972726f722070656e64696e6760901b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8c57600080fd5b505afa158015612aa0573d6000803e3d6000fd5b505050506040513d6020811015612ab657600080fd5b505190506402540be4003406158015612ae15750600454612add908263ffffffff613a1716565b3410155b612b1c5760405162461bcd60e51b815260040180806020018281038252604d815260200180615997604d913960600191505060405180910390fd5b42607801836001600160401b031610158015612b465750426201518001836001600160401b031611155b612b815760405162461bcd60e51b8152600401808060200182810382526038815260200180615a126038913960400191505060405180910390fd5b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612bbc57600080fd5b505afa158015612bd0573d6000803e3d6000fd5b505050506040513d6020811015612be657600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038816916318160ddd916004808301926020929190829003018186803b158015612c2e57600080fd5b505afa158015612c42573d6000803e3d6000fd5b505050506040513d6020811015612c5857600080fd5b50519050677ce66c50e2840000612c728260ff8516613a71565b1115612cbe576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b6060866001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015612cf957600080fd5b505afa158015612d0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612d3657600080fd5b8101908080516040519392919084600160201b821115612d5557600080fd5b908301906020820185811115612d6a57600080fd5b8251600160201b811182820188101715612d8357600080fd5b82525081516020918201929091019080838360005b83811015612db0578181015183820152602001612d98565b50505050905090810190601f168015612ddd5780820380516001836020036101000a031916815260200191505b50604052505050905060608190506001815110158015612dff57506020815111155b612e50576040805162461bcd60e51b815260206004820152601d60248201527f6e616d65206c656e677468206d75737420626520696e205b312c33325d000000604482015290519081900360640190fd5b6060886001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612e8b57600080fd5b505afa158015612e9f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612ec857600080fd5b8101908080516040519392919084600160201b821115612ee757600080fd5b908301906020820185811115612efc57600080fd5b8251600160201b811182820188101715612f1557600080fd5b82525081516020918201929091019080838360005b83811015612f42578181015183820152602001612f2a565b50505050905090810190601f168015612f6f5780820380516001836020036101000a031916815260200191505b5060405250508151919250829160021180159150612f8f57508051600810155b612fe0576040805162461bcd60e51b815260206004820152601e60248201527f73796d626f6c206c656e677468206d75737420626520696e205b322c385d0000604482015290519081900360640190fd5b60005b81518160ff16101561313457604160f81b828260ff168151811061300357fe5b01602001516001600160f81b031916108015906130415750602d60f91b828260ff168151811061302f57fe5b01602001516001600160f81b03191611155b806130995750606160f81b828260ff168151811061305b57fe5b01602001516001600160f81b031916108015906130995750603d60f91b828260ff168151811061308757fe5b01602001516001600160f81b03191611155b806130f15750600360fc1b828260ff16815181106130b357fe5b01602001516001600160f81b031916108015906130f15750603960f81b828260ff16815181106130df57fe5b01602001516001600160f81b03191611155b61312c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615ac6602e913960400191505060405180910390fd5b600101612fe3565b50600454611004906108fc9061315190349063ffffffff613b0016565b6040518115909202916000818181858888f19350505050158015613179573d6000803e3d6000fd5b506001600160a01b038a166000908152600260209081526040909120805460ff1916600117905584810151908301516131b06158f1565b604051806101000160405280336001600160a01b031681526020018e6001600160a01b031681526020018481526020018381526020018981526020018a60ff16815260200161320f6402540be400600454613b4290919063ffffffff16565b81526001600160401b038e16602090910152905061200063f7a251d7600461323684614608565b6132546402540be40061131160045434613b0090919063ffffffff16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156132b257818101518382015260200161329a565b50505050905090810190601f1680156132df5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561330057600080fd5b505af1158015613314573d6000803e3d6000fd5b5050505060019a505050505050505050505092915050565b600781565b600981565b677ce66c50e284000081565b61100781565b61100681565b60005460ff1681565b600081565b336110071461339c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615b5b602e913960400191505060405180910390fd5b602081146133f1576040805162461bcd60e51b815260206004820152601860248201527f65787065637465642076616c7565206c656e6774682033320000000000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815293945060609392508691508590819084018382808284376000920191909152505050506020830151909150686d6972726f7246656560b81b8114156134e65760208201516402540be4008106156134de576040805162461bcd60e51b815260206004820152601a60248201527f6d6972726f72466565206d757374206265204e202a2031653130000000000000604482015290519081900360640190fd5b60045561359c565b6673796e6346656560c81b81141561355f5760208201516402540be400810615613557576040805162461bcd60e51b815260206004820152601860248201527f73796e63466565206d757374206265204e202a20316531300000000000000000604482015290519081900360640190fd5b60055561359c565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61100281565b33612000146136775760405162461bcd60e51b815260040180806020018281038252602f815260200180615b89602f913960400191505060405180910390fd5b60ff8316600414156136c25761287182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061477a92505050565b60ff8316600514156128c15761287182828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148b992505050565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b039093169391929181169061010090046001600160401b031687565b604d81565b61100381565b60055481565b61100081565b61271081565b61100481565b606061379161589e565b600061379c846149b3565b91509150806137f2576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff166138a5576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff0019166101006001600160401b03909216919091021790556139fc565b815160ff16600114156139af5760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156138fe57600080fd5b505afa158015613912573d6000803e3d6000fd5b505050506040513d602081101561392857600080fd5b505190506001600160a01b038116156139a95760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561399057600080fd5b505af11580156139a4573d6000803e3d6000fd5b505050505b506139fc565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b600082820183811015610e94576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006008821115613ae957604d60071983011115613acb576040805162461bcd60e51b8152602060048201526012602482015271746f6f206c6172676520646563696d616c7360701b604482015290519081900360640190fd5b613ae2836007198401600a0a63ffffffff613b4216565b90506113eb565b610e94836008849003600a0a63ffffffff614b0416565b6000610e9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614b5d565b6000610e9483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bf4565b60408051600680825260e08201909252606091829190816020015b6060815260200190600190039081613b9f5750508351909150613bca906001600160a01b0316614c59565b81600081518110613bd757fe5b6020026020010181905250613bf883602001516001600160a01b0316614c59565b81600181518110613c0557fe5b6020026020010181905250613c20836040015160001c614c7c565b81600281518110613c2d57fe5b6020026020010181905250613c458360600151614c7c565b81600381518110613c5257fe5b6020026020010181905250613c6a8360800151614c7c565b81600481518110613c7757fe5b6020026020010181905250613c988360a001516001600160401b0316614c7c565b81600581518110613ca557fe5b6020026020010181905250610e9481614c8f565b6020015190565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613cfc57600080fd5b505afa158015613d10573d6000803e3d6000fd5b505050506040513d6020811015613d2657600080fd5b5051604080516395d89b4160e01b8152905160ff90921692506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b158015613d7257600080fd5b505afa158015613d86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613daf57600080fd5b8101908080516040519392919084600160201b821115613dce57600080fd5b908301906020820185811115613de357600080fd5b8251600160201b811182820188101715613dfc57600080fd5b82525081516020918201929091019080838360005b83811015613e29578181015183820152602001613e11565b50505050905090810190601f168015613e565780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b158015613ea657600080fd5b505afa158015613eba573d6000803e3d6000fd5b505050506040513d6020811015613ed057600080fd5b505160808701516060880151919250600091613ef19163ffffffff613b0016565b9050428760c001516001600160401b03161015613f165750600193506113eb92505050565b613f24838860200151614d19565b613f365750600293506113eb92505050565b80821115613f4c5750600393506113eb92505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613f8e57600080fd5b505afa158015613fa2573d6000803e3d6000fd5b505050506040513d6020811015613fb857600080fd5b505114613fcd5750600493506113eb92505050565b8660a0015160ff168414613fe95750600593506113eb92505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b15801561402e57600080fd5b505afa158015614042573d6000803e3d6000fd5b505050506040513d602081101561405857600080fd5b50516001600160a01b03161415806140fa57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156140cb57600080fd5b505afa1580156140df573d6000803e3d6000fd5b505050506040513d60208110156140f557600080fd5b505114155b1561410d5750600693506113eb92505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b6060815260200190600190039081614133575050835190915061415b9063ffffffff16614c7c565b8160008151811061416857fe5b6020026020010181905250614183836020015160001c614c7c565b81600181518110613ca557fe5b614198615869565b60006141a383614e01565b91509150806141f0576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03166000908152600290915260409020805460ff1916905560a082015160ff166143515760808201516040516110049180156108fc02916000818181858888f19350505050158015614253573d6000803e3d6000fd5b506110046001600160a01b0316638eff336c8360600151846020015185604001516040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018260ff1681526020019350505050600060405180830381600087803b1580156142cd57600080fd5b505af11580156142e1573d6000803e3d6000fd5b50505050602082810180516001600160a01b03908116600090815260038452604090819020805460ff1916600117905591516060860151835190815292519116927f41787d7db08fc5907641ee8343379f28215727eb123d4b462099afab4300b036928290030190a2505061443a565b815160808301516040516000926001600160a01b0316916127109184818181858888f193505050503d80600081146143a5576040519150601f19603f3d011682016040523d82523d6000602084013e6143aa565b606091505b50509050806143e75760808301516040516110029180156108fc02916000818181858888f193505050501580156143e5573d6000803e3d6000fd5b505b82602001516001600160a01b03167fefe400ad0042ebf81a245de9ae669616105e0ca9fc946352c085da0c2bc524e58460a00151604051808260ff1660ff16815260200191505060405180910390a25050505b50565b614445615935565b600061445083614f0e565b915091508061449d576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b606082015160ff1661451d5760408083015190516110049180156108fc02916000818181858888f193505050501580156144db573d6000803e3d6000fd5b5081602001516001600160a01b03167fbb7d3a9a559080d8281b0e4fb39dacbe2fdcafd5ef765e9a6ed871c9167dc60f60405160405180910390a2505061443a565b81602001516001600160a01b03167ff1e25fa536da84053644fd788b1d6a27ea6edd1f3af80c7d36ca253c4c82c9c38360600151604051808260ff1660ff16815260200191505060405180910390a2815160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d80600081146145c0576040519150601f19603f3d011682016040523d82523d6000602084013e6145c5565b606091505b50509050806146025760408084015190516110029180156108fc02916000818181858888f19350505050158015614600573d6000803e3d6000fd5b505b50505050565b6040805160088082526101208201909252606091829190816020015b6060815260200190600190039081614624575050835190915061464f906001600160a01b0316614c59565b8160008151811061465c57fe5b602002602001018190525061467d83602001516001600160a01b0316614c59565b8160018151811061468a57fe5b60200260200101819052506146a5836040015160001c614c7c565b816002815181106146b257fe5b60200260200101819052506146cd836060015160001c614c7c565b816003815181106146da57fe5b60200260200101819052506146f28360800151614c7c565b816004815181106146ff57fe5b602002602001018190525061471a8360a0015160ff16614c7c565b8160058151811061472757fe5b602002602001018190525061473f8360c00151614c7c565b8160068151811061474c57fe5b602002602001018190525061476d8360e001516001600160401b0316614c7c565b81600781518110613ca557fe5b6147826158f1565b600061478d83614fda565b91509150806147da576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b039081166000908152600290925260408220805460ff19169055835160c085015191169061271090614824906402540be40063ffffffff614b0416565b6040516000818181858888f193505050503d8060008114614861576040519150601f19603f3d011682016040523d82523d6000602084013e614866565b606091505b50509050806146025760c0830151611002906108fc90614891906402540be40063ffffffff614b0416565b6040518115909202916000818181858888f19350505050158015614600573d6000803e3d6000fd5b6148c1615869565b60006148cc8361512b565b9150915080614919576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b815160808301516000916001600160a01b03169061271090614946906402540be40063ffffffff614b0416565b6040516000818181858888f193505050503d8060008114614983576040519150601f19603f3d011682016040523d82523d6000602084013e614988565b606091505b5050905080614602576080830151611002906108fc90614891906402540be40063ffffffff614b0416565b6149bb61589e565b60006149c561589e565b6149cd61595c565b6149de6149d98661523b565b615260565b90506000805b6149ed836152aa565b15614af75780614a1257614a08614a03846152cb565b615319565b60ff168452614aef565b8060011415614a3157614a27614a03846152cb565b6020850152614aef565b8060021415614a5e57614a4b614a46846152cb565b6153ce565b6001600160a01b03166040850152614aef565b8060031415614a7d57614a73614a03846152cb565b6060850152614aef565b8060041415614a9c57614a92614a03846152cb565b6080850152614aef565b8060051415614abe57614ab1614a03846152cb565b60ff1660a0850152614aef565b8060061415614aea57614ad3614a03846152cb565b6001600160401b031660c085015260019150614aef565b614af7565b6001016149e4565b5091935090915050915091565b600082614b13575060006113eb565b82820282848281614b2057fe5b0414610e945760405162461bcd60e51b8152600401808060200182810382526021815260200180615af46021913960400191505060405180910390fd5b60008184841115614bec5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bb1578181015183820152602001614b99565b50505050905090810190601f168015614bde5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183614c435760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614bb1578181015183820152602001614b99565b506000838581614c4f57fe5b0495945050505050565b60408051600560a21b8318601482015260348101909152606090610e94816153e8565b60606113eb614c8a8361543e565b6153e8565b6060815160001415614cb0575060408051600081526020810190915261157f565b606082600081518110614cbf57fe5b602002602001015190506000600190505b8351811015614d0057614cf682858381518110614ce957fe5b6020026020010151615524565b9150600101614cd0565b50610e94614d13825160c060ff166155a1565b82615524565b8151600090839060081080614d2f575080516002115b15614d3e5760009150506113eb565b60408051602080825281830190925260609160208201818036833701905050905083602082015280825181518110614d7257fe5b6020910101516001600160f81b031916602d60f81b14614d97576000925050506113eb565b600160005b8351811015614df757828181518110614db157fe5b602001015160f81c60f81b6001600160f81b031916848281518110614dd257fe5b01602001516001600160f81b03191614614def5760009150614df7565b600101614d9c565b5095945050505050565b614e09615869565b6000614e13615869565b614e1b61595c565b614e276149d98661523b565b90506000805b614e36836152aa565b15614af75780614e5c57614e4c614a46846152cb565b6001600160a01b03168452614f06565b8060011415614e8457614e71614a46846152cb565b6001600160a01b03166020850152614f06565b8060021415614ea657614e99614a03846152cb565b60ff166040850152614f06565b8060031415614ec557614ebb614a03846152cb565b6060850152614f06565b8060041415614ee457614eda614a03846152cb565b6080850152614f06565b8060051415614aea57614ef9614a03846152cb565b60ff1660a0850152600191505b600101614e2d565b614f16615935565b6000614f20615935565b614f2861595c565b614f346149d98661523b565b90506000805b614f43836152aa565b15614af75780614f6957614f59614a46846152cb565b6001600160a01b03168452614fd2565b8060011415614f9157614f7e614a46846152cb565b6001600160a01b03166020850152614fd2565b8060021415614fb057614fa6614a03846152cb565b6040850152614fd2565b8060031415614aea57614fc5614a03846152cb565b60ff166060850152600191505b600101614f3a565b614fe26158f1565b6000614fec6158f1565b614ff461595c565b6150006149d98661523b565b90506000805b61500f836152aa565b15614af7578061503557615025614a46846152cb565b6001600160a01b03168452615123565b806001141561505d5761504a614a46846152cb565b6001600160a01b03166020850152615123565b806002141561507c57615072614a03846152cb565b6040850152615123565b806003141561509b57615091614a03846152cb565b6060850152615123565b80600414156150ba576150b0614a03846152cb565b6080850152615123565b80600514156150dc576150cf614a03846152cb565b60ff1660a0850152615123565b80600614156150fb576150f1614a03846152cb565b60c0850152615123565b8060071415614aea57615110614a03846152cb565b6001600160401b031660e0850152600191505b600101615006565b615133615869565b600061513d615869565b61514561595c565b6151516149d98661523b565b90506000805b615160836152aa565b15614af7578061518657615176614a46846152cb565b6001600160a01b03168452615233565b80600114156151ae5761519b614a46846152cb565b6001600160a01b03166020850152615233565b80600214156151cd576151c3614a03846152cb565b6040850152615233565b80600314156151ec576151e2614a03846152cb565b6060850152615233565b806004141561520b57615201614a03846152cb565b6080850152615233565b8060051415614aea57615220614a03846152cb565b6001600160401b031660a0850152600191505b600101615157565b61524361597c565b506040805180820190915281518152602082810190820152919050565b61526861595c565b61527182615699565b61527a57600080fd5b600061528983602001516156d3565b60208085015160408051808201909152868152920190820152915050919050565b60006152b461597c565b505080518051602091820151919092015191011190565b6152d361597c565b6152dc826152aa565b6152e557600080fd5b602082015160006152f582615736565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061532e57508151602110155b61533757600080fd5b600061534683602001516156d3565b905080836000015110156153a1576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613a0e57506020919091036101000a90049392505050565b80516000906015146153df57600080fd5b6113eb82615319565b60608151600114801561541a5750607f60f81b8260008151811061540857fe5b01602001516001600160f81b03191611155b1561542657508061157f565b6113eb6154388351608060ff166155a1565b83615524565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615482575060186154a6565b6fffffffffffffffffffffffffffffffff1984166154a2575060106154a6565b5060005b60208110156154dc578181815181106154bb57fe5b01602001516001600160f81b031916156154d4576154dc565b6001016154a6565b60008160200390506060816040519080825280601f01601f191660200182016040528015615511576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561555557805183526020928301920161553d565b50855184518101855292509050808201602086015b8183101561558257805183526020928301920161556a565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106155f1576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b6040805160018082528183019092526060916020820181803683370190505090506037841161564b5782840160f81b8160008151811061562d57fe5b60200101906001600160f81b031916908160001a90535090506113eb565b60606156568561543e565b90508381510160370160f81b8260008151811061566f57fe5b60200101906001600160f81b031916908160001a9053506156908282615524565b95945050505050565b80516000906156aa5750600061157f565b6020820151805160001a9060c08210156156c95760009250505061157f565b5060019392505050565b8051600090811a60808110156156ed57600091505061157f565b60b8811080615708575060c08110801590615708575060f881105b1561571757600191505061157f565b60c081101561572b5760b51901905061157f565b60f51901905061157f565b80516000908190811a60808110156157515760019150615862565b60b881101561576657607e1981019150615862565b60c08110156157e057600060b78203600186019550806020036101000a8651049150600181018201935050808310156157da576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50615862565b60f88110156157f55760be1981019150615862565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615860576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806040016040528061596f61597c565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c7565206d757374206265204e202a203165313020616e642067726561746572207468616e2073756d206f66206d696e6952656c617946656520616e64206d6972726f724665656f6e6c79206265703230206f776e65722063616e20617070726f766520746869732062696e64207265717565737465787069726554696d65206d7573742062652074776f206d696e75746573206c6174657220616e64206f6e6520646179206561726c69657272656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e64207265717565737473796d626f6c2073686f756c64206f6e6c7920636f6e7461696e20616c70686162657420616e64206e756d626572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d73672e76616c7565206d757374206265204e202a203165313020616e64206e6f206c6573732073756d206f66206d696e6952656c617946656520616e642073796e63466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e747261637474686520626570323020746f6b656e20697320696e206d6972726f722070656e64696e6720737461747573a2646970667358221220d5a978e7f66cfd1df68dce9198b278a4a761278f29fe7aab4682c9ea36b909d264736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "60806040526004361061031e5760003560e01c80639a99b4f0116101ab578063bd466461116100f7578063f014847211610095578063fc1a598f1161006f578063fc1a598f14610cb3578063fc3e590814610996578063fd6a687914610ce6578063ff9c00271461068657610366565b8063f014847214610c74578063f9a2bbc714610c89578063fa9e915914610c9e57610366565b8063d9e6dae9116100d1578063d9e6dae914610608578063dc927faf14610c35578063e1c7392a14610c4a578063ebf71d5314610c5f57610366565b8063bd46646114610b68578063c81b166214610b9b578063c8509d8114610bb057610366565b8063aa7415f511610164578063b99328c51161013e578063b99328c514610ad2578063b9fd21e314610b0b578063ba35ead614610b20578063bbface1f14610b3557610366565b8063aa7415f5146109ab578063ab51bb96146109f2578063ac43175114610a0757610366565b80639a99b4f0146109095780639dc0926214610942578063a1a11bf514610957578063a496fba21461096c578063a78abc1614610981578063a7c9f02d1461099657610366565b8063613684751161026a57806375d47a0a116102235780638b87b21f116101fd5780638b87b21f146105875780638eff336c146108a057806396713da9146108df5780639a854bbd146108f457610366565b806375d47a0a146107f15780637942fd0514610806578063831d65d11461081b57610366565b8063613684751461060857806366dea52a146106865780636e0565201461069b5780636e47b482146107c757806370fd5bad1461068657806371d30863146107dc57610366565b806343a368b9116102d757806350432d32116102b157806350432d321461061d57806351e806721461063257806359b92789146106475780635d499b1b1461067157610366565b806343a368b9146105c7578063493279b1146105dc5780634bf6c8821461060857610366565b80630bee7a671461036b5780631182b87514610399578063149d14d9146104935780633d713223146104ba5780633dffc3871461058757806343756e5c146105b257610366565b36610366573415610364576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561037757600080fd5b50610380610cfb565b6040805163ffffffff9092168252519081900360200190f35b3480156103a557600080fd5b5061041e600480360360408110156103bc57600080fd5b60ff8235169190810190604081016020820135600160201b8111156103e057600080fd5b8201836020820111156103f257600080fd5b803590602001918460018302840111600160201b8311171561041357600080fd5b509092509050610d00565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610458578181015183820152602001610440565b50505050905090810190601f1680156104855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049f57600080fd5b506104a8610e2e565b60408051918252519081900360200190f35b3480156104c657600080fd5b5061056b600480360360208110156104dd57600080fd5b810190602081018135600160201b8111156104f757600080fd5b82018360208201111561050957600080fd5b803590602001918460018302840111600160201b8311171561052a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e34945050505050565b604080516001600160a01b039092168252519081900360200190f35b34801561059357600080fd5b5061059c610e58565b6040805160ff9092168252519081900360200190f35b3480156105be57600080fd5b5061056b610e5d565b3480156105d357600080fd5b506104a8610e63565b3480156105e857600080fd5b506105f1610e6f565b6040805161ffff9092168252519081900360200190f35b34801561061457600080fd5b5061059c610e74565b34801561062957600080fd5b506104a8610e79565b34801561063e57600080fd5b5061056b610e84565b34801561065357600080fd5b5061056b6004803603602081101561066a57600080fd5b5035610e8a565b34801561067d57600080fd5b506104a8610ea5565b34801561069257600080fd5b5061059c610eae565b6107b3600480360360808110156106b157600080fd5b810190602081018135600160201b8111156106cb57600080fd5b8201836020820111156106dd57600080fd5b803590602001918460208302840111600160201b831117156106fe57600080fd5b919390929091602081019035600160201b81111561071b57600080fd5b82018360208201111561072d57600080fd5b803590602001918460208302840111600160201b8311171561074e57600080fd5b919390929091602081019035600160201b81111561076b57600080fd5b82018360208201111561077d57600080fd5b803590602001918460208302840111600160201b8311171561079e57600080fd5b91935091503567ffffffffffffffff16610eb3565b604080519115158252519081900360200190f35b3480156107d357600080fd5b5061056b611388565b3480156107e857600080fd5b506104a861138e565b3480156107fd57600080fd5b5061056b611394565b34801561081257600080fd5b5061059c61139a565b34801561082757600080fd5b506103646004803603604081101561083e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561086257600080fd5b82018360208201111561087457600080fd5b803590602001918460018302840111600160201b8311171561089557600080fd5b50909250905061139f565b3480156108ac57600080fd5b50610364600480360360608110156108c357600080fd5b508035906001600160a01b0360208201351690604001356114e8565b3480156108eb57600080fd5b5061059c61156e565b34801561090057600080fd5b506104a8611573565b34801561091557600080fd5b506104a86004803603604081101561092c57600080fd5b506001600160a01b03813516906020013561157f565b34801561094e57600080fd5b5061056b6116bd565b34801561096357600080fd5b5061056b6116c3565b34801561097857600080fd5b5061059c6116c9565b34801561098d57600080fd5b506107b36116ce565b3480156109a257600080fd5b5061059c6116d7565b6107b3600480360360808110156109c157600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff166116dc565b3480156109fe57600080fd5b506103806116c9565b348015610a1357600080fd5b5061036460048036036040811015610a2a57600080fd5b810190602081018135600160201b811115610a4457600080fd5b820183602082011115610a5657600080fd5b803590602001918460018302840111600160201b83111715610a7757600080fd5b919390929091602081019035600160201b811115610a9457600080fd5b820183602082011115610aa657600080fd5b803590602001918460018302840111600160201b83111715610ac757600080fd5b509092509050611d9d565b348015610ade57600080fd5b5061036460048036036040811015610af557600080fd5b50803590602001356001600160a01b031661200c565b348015610b1757600080fd5b506104a8612082565b348015610b2c57600080fd5b506104a861208c565b348015610b4157600080fd5b506104a860048036036020811015610b5857600080fd5b50356001600160a01b0316612092565b348015610b7457600080fd5b506104a860048036036020811015610b8b57600080fd5b50356001600160a01b03166120a4565b348015610ba757600080fd5b5061056b6120bf565b348015610bbc57600080fd5b5061036460048036036040811015610bd357600080fd5b60ff8235169190810190604081016020820135600160201b811115610bf757600080fd5b820183602082011115610c0957600080fd5b803590602001918460018302840111600160201b83111715610c2a57600080fd5b5090925090506120c5565b348015610c4157600080fd5b5061056b612195565b348015610c5657600080fd5b5061036461219b565b348015610c6b57600080fd5b5061059c61223b565b348015610c8057600080fd5b5061059c612240565b348015610c9557600080fd5b5061056b612245565b348015610caa57600080fd5b506104a861224b565b348015610cbf57600080fd5b5061041e60048036036020811015610cd657600080fd5b50356001600160a01b0316612251565b348015610cf257600080fd5b5061056b612378565b606481565b60005460609060ff16610d48576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b3361200014610d885760405162461bcd60e51b815260040180806020018281038252602f815260200180614756602f913960400191505060405180910390fd5b60ff841660021415610dda57610dd383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237e92505050565b9050610e27565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b60015490565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b670de0b6b3a764000081565b606181565b600881565b66071afd498d000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b600281565b6000805460ff16610ef9576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b868514610f375760405162461bcd60e51b815260040180806020018281038252603b81526020018061471b603b913960400191505060405180910390fd5b868314610f755760405162461bcd60e51b815260040180806020018281038252603f8152602001806145ee603f913960400191505060405180910390fd5b426078018267ffffffffffffffff161015610fc15760405162461bcd60e51b81526004018080602001828103825260248152602001806144de6024913960400191505060405180910390fd5b6402540be4003406156110055760405162461bcd60e51b815260040180806020018281038252604081526020018061481e6040913960400191505060405180910390fd5b60408051868152602080880282010190915285906000908190606090848015611038578160200160208202803683370190505b50905060005b84811015611113576402540be4008b8b8381811061105857fe5b905060200201358161106657fe5b06156110a35760405162461bcd60e51b815260040180806020018281038252603c81526020018061462d603c913960400191505060405180910390fd5b6110c88b8b838181106110b257fe5b90506020020135856124a290919063ffffffff16565b93506110f46402540be4008c8c848181106110df57fe5b905060200201356124fc90919063ffffffff16565b82828151811061110057fe5b602090810291909101015260010161103e565b506001546111389061112b908663ffffffff61253e16565b849063ffffffff6124a216565b3410156111765760405162461bcd60e51b81526004018080602001828103825260568152602001806147c86056913960600191505060405180910390fd5b611186348463ffffffff61259716565b9150611190614337565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d76003611254846125d9565b611269876402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156112c75781810151838201526020016112af565b50505050905090810190601f1680156112f45780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b60015481565b61100881565b600b81565b60005460ff166113e4576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b33612000146114245760405162461bcd60e51b815260040180806020018281038252602f815260200180614756602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061289492505050565b6114e3565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b33611008146115285760405162461bcd60e51b81526004018080602001828103825260238152602001806147856023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff166115c5576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b33611005146116055760405162461bcd60e51b815260040180806020018281038252602f815260200180614451602f913960400191505060405180910390fd5b60004783106116145747611616565b825b9050670de0b6b3a76400008111156116325760009150506116b7565b80156116b4576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561166e573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60005460ff1681565b600381565b6000805460ff16611722576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff16101561176e5760405162461bcd60e51b81526004018080602001828103825260248152602001806144de6024913960400191505060405180910390fd5b6402540be4003406156117b25760405162461bcd60e51b815260040180806020018281038252604081526020018061481e6040913960400191505060405180910390fd5b600080806001600160a01b038816611891576001546117d890879063ffffffff6124a216565b3410156118165760405162461bcd60e51b81526004018080602001828103825260618152602001806145686061913960800191505060405180910390fd5b6402540be40086061561185a5760405162461bcd60e51b815260040180806020018281038252603c81526020018061462d603c913960400191505060405180910390fd5b61186a348763ffffffff61259716565b9050611881866402540be40063ffffffff6124fc16565b6221272160e91b93509150611b34565b6001600160a01b0388166000908152600360205260409020549250826118e85760405162461bcd60e51b81526004018080602001828103825260318152602001806145376031913960400191505060405180910390fd5b6001543410156119295760405162461bcd60e51b815260040180806020018281038252603f81526020018061468a603f913960400191505060405180910390fd5b506001600160a01b038716600090815260026020526040902054349060088111158061197457506008811180156119745750611972876007198301600a0a63ffffffff6128f016565b155b6119af5760405162461bcd60e51b815260040180806020018281038252603c81526020018061462d603c913960400191505060405180910390fd5b6119b98782612932565b92506119c484612972565b15611a0c576305f5e100831015611a0c5760405162461bcd60e51b815260040180806020018281038252603a815260200180614480603a913960400191505060405180910390fd5b600881101580611a265750600881108015611a2657508683115b611a615760405162461bcd60e51b81526004018080602001828103825260258152602001806145c96025913960400191505060405180910390fd5b677ce66c50e2840000831115611aa85760405162461bcd60e51b81526004018080602001828103825260358152602001806145026035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b158015611afd57600080fd5b505af1158015611b11573d6000803e3d6000fd5b505050506040513d6020811015611b2757600080fd5b5051611b3257600080fd5b505b611b3c614337565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff168152509050828160400151600081518110611bea57fe5b602002602001018181525050878160600151600081518110611c0857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611c3a57fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611c65846125d9565b611c7a866402540be40063ffffffff6124fc16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611cd8578181015183820152602001611cc0565b50505050905090810190601f168015611d055780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611d2657600080fd5b505af1158015611d3a573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b3361100714611ddd5760405162461bcd60e51b815260040180806020018281038252602e8152602001806146c9602e913960400191505060405180910390fd5b60208114611e32576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415611f3a576020820151670de0b6b3a76400008111801590611ee157506402540be4008106155b611f32576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155611f77565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b336110081461204c5760405162461bcd60e51b81526004018080602001828103825260238152602001806147856023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b61c35081565b60026020526000908152604090205481565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff1661210a576040805162461bcd60e51b815260206004820152601960248201526000805160206147a8833981519152604482015290519081900360640190fd5b336120001461214a5760405162461bcd60e51b815260040180806020018281038252602f815260200180614756602f913960400191505060405180910390fd5b60ff8316600314156114745761146f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a7892505050565b61100381565b60005460ff16156121f3576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b66071afd498d000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b600481565b600581565b61100081565b61271081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff1610156122e157828160ff16815181106122b557fe5b01602001516001600160f81b031916156122d4576001909101906122d9565b6122e1565b60010161229a565b5060608160ff166040519080825280601f01601f191660200182016040528015612312576020820181803683370190505b50905060005b8260ff168160ff16101561236e57838160ff168151811061233557fe5b602001015160f81c60f81b828260ff168151811061234f57fe5b60200101906001600160f81b031916908160001a905350600101612318565b5095945050505050565b61100481565b6060612388614383565b600061239384612b76565b91509150806123e9576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b60006123f483612cb5565b905063ffffffff811615612488576040808401516020808601516001600160a01b0316600090815260029091529182205461242f9190612932565b90506124396143b8565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061247c81613002565b95505050505050610e53565b50506040805160008152602081019091529150610e539050565b6000828201838110156116b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130de565b60008261254d575060006116b7565b8282028284828161255a57fe5b04146116b45760405162461bcd60e51b81526004018080602001828103825260218152602001806146696021913960400191505060405180910390fd5b60006116b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613180565b60408051600680825260e08201909252606091829190816020015b60608152602001906001900390816125f45750508351909150612616906131da565b8160008151811061262357fe5b602002602001018190525061264483602001516001600160a01b03166131ed565b8160018151811061265157fe5b60200260200101819052506000836040015151905060608160405190808252806020026020018201604052801561269c57816020015b60608152602001906001900390816126875790505b50905060005b828110156126e9576126ca866040015182815181106126bd57fe5b60200260200101516131da565b8282815181106126d657fe5b60209081029190910101526001016126a2565b506126f381613210565b8360028151811061270057fe5b602002602001018190525060608260405190808252806020026020018201604052801561274157816020015b606081526020019060019003908161272c5790505b50905060005b83811015612797576127788760600151828151811061276257fe5b60200260200101516001600160a01b03166131ed565b82828151811061278457fe5b6020908102919091010152600101612747565b506127a181613210565b846003815181106127ae57fe5b60200260200101819052506060836040519080825280602002602001820160405280156127ef57816020015b60608152602001906001900390816127da5790505b50905060005b8481101561282f576128108860800151828151811061276257fe5b82828151811061281c57fe5b60209081029190910101526001016127f5565b5061283981613210565b8560048151811061284657fe5b60200260200101819052506128688760a0015167ffffffffffffffff166131da565b8560058151811061287557fe5b602002602001018190525061288985613210565b979650505050505050565b61289c6143df565b60006128a78361329a565b91509150806128e75760405162461bcd60e51b81526004018080602001828103825260248152602001806146f76024913960400191505060405180910390fd5b6114e382613465565b60006116b483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506138e9565b6000600882111561295b57612954836007198401600a0a63ffffffff6124fc16565b90506116b7565b6116b4836008849003600a0a63ffffffff61253e16565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff1610156129e857828160ff16815181106129bc57fe5b01602001516001600160f81b031916156129db576001909101906129e0565b6129e8565b6001016129a1565b50600760ff82161015612a0057600092505050610e53565b816005820360ff1681518110612a1257fe5b6020910101516001600160f81b031916602d60f81b14612a3757600092505050610e53565b816001820360ff1681518110612a4957fe5b6020910101516001600160f81b031916604d60f81b14612a6e57600092505050610e53565b5060019392505050565b612a80614337565b6000612a8b8361394b565b9150915080612acb5760405162461bcd60e51b81526004018080602001828103825260248152602001806144ba6024913960400191505060405180910390fd5b612ad36143df565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b846040015151811015612b5457612b3185604001518281518110612b2357fe5b602002602001015183613baf565b85604001518281518110612b4157fe5b6020908102919091010152600101612b03565b506080840151604083015260056060830152612b6f82613465565b5050505050565b612b7e614383565b6000612b88614383565b612b90614416565b612ba1612b9c86613be8565b613c0d565b90506000805b612bb083613c57565b15612ca85780612bd257612bcb612bc684613c78565b613cc6565b8452612ca0565b8060011415612bff57612bec612be784613c78565b613d7d565b6001600160a01b03166020850152612ca0565b8060021415612c1e57612c14612bc684613c78565b6040850152612ca0565b8060031415612c4657612c33612be784613c78565b6001600160a01b03166060850152612ca0565b8060041415612c6e57612c5b612be784613c78565b6001600160a01b03166080850152612ca0565b8060051415612c9b57612c83612bc684613c78565b67ffffffffffffffff1660a085015260019150612ca0565b612ca8565b600101612ba7565b5091935090915050915091565b60208101516000906001600160a01b0316612dec578160a0015167ffffffffffffffff16421115612ce857506001610e53565b8160400151471015612cfc57506003610e53565b606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114612d53576040519150601f19603f3d011682016040523d82523d6000602084013e612d58565b606091505b5050905080612d6b575060049050610e53565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009050610e53565b8160a0015167ffffffffffffffff16421115612e0a57506001610e53565b81516020808401516001600160a01b031660009081526003909152604090205414612e3757506002610e53565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612e8757600080fd5b5086fa158015612e9b573d6000803e3d6000fd5b50505050506040513d6020811015612eb257600080fd5b50516040840151909150811015612ecd575060039050610e53565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612f3e57600080fd5b5087f1158015612f52573d6000803e3d6000fd5b50505050506040513d6020811015612f6957600080fd5b505190508015612ff6577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610e539050565b5060059150610e539050565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161301d575050835190915061303f906131da565b8160008151811061304c57fe5b602002602001018190525061306483602001516131da565b8160018151811061307157fe5b602002602001018190525061309283604001516001600160a01b03166131ed565b8160028151811061309f57fe5b60200260200101819052506130bd836060015163ffffffff166131da565b816003815181106130ca57fe5b6020026020010181905250610e2781613210565b6000818361316a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561312f578181015183820152602001613117565b50505050905090810190601f16801561315c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161317657fe5b0495945050505050565b600081848411156131d25760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b505050900390565b60606116b76131e883613d97565b613e7d565b60408051600560a21b8318601482015260348101909152606090610e2781613e7d565b60608151600014156132315750604080516000815260208101909152610e53565b60608260008151811061324057fe5b602002602001015190506000600190505b8351811015613281576132778285838151811061326a57fe5b6020026020010151613ecf565b9150600101613251565b50610e27613294825160c060ff16613f4c565b82613ecf565b6132a26143df565b60006132ac6143df565b6132b4614416565b6132c0612b9c86613be8565b90506000805b6132cf83613c57565b15612ca857806132f5576132e5612be784613c78565b6001600160a01b0316845261345d565b806001141561339657606061331161330c85613c78565b614044565b9050805160405190808252806020026020018201604052801561333e578160200160208202803683370190505b50602086015260005b815181101561338f5761336c82828151811061335f57fe5b6020026020010151613cc6565b8660200151828151811061337c57fe5b6020908102919091010152600101613347565b505061345d565b80600214156134385760606133ad61330c85613c78565b905080516040519080825280602002602001820160405280156133da578160200160208202803683370190505b50604086015260005b815181101561338f576134088282815181106133fb57fe5b6020026020010151613d7d565b8660400151828151811061341857fe5b6001600160a01b03909216602092830291909101909101526001016133e3565b8060031415612c9b5761344d612bc684613c78565b63ffffffff166060850152600191505b6001016132c6565b80516001600160a01b031661368f5760005b8160200151518110156136895760008260400151828151811061349657fe5b60200260200101516001600160a01b0316612710846020015184815181106134ba57fe5b60209081029190910101516040516000818181858888f193505050503d8060008114613502576040519150601f19603f3d011682016040523d82523d6000602084013e613507565b606091505b50509050806135ca577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061354657fe5b60200260200101518560200151858151811061355e57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613680565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061360057fe5b60200260200101518560200151858151811061361857fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613477565b506138e6565b60005b8160200151518110156138e457600082600001516001600160a01b031663a9059cbb61c350856040015185815181106136c757fe5b6020026020010151866020015186815181106136df57fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561373657600080fd5b5087f115801561374a573d6000803e3d6000fd5b50505050506040513d602081101561376157600080fd5b505190508015613825577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106137a157fe5b6020026020010151856020015185815181106137b957fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16138db565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061385b57fe5b60200260200101518560200151858151811061387357fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613692565b505b50565b600081836139385760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561312f578181015183820152602001613117565b5082848161394257fe5b06949350505050565b613953614337565b600061395d614337565b613965614416565b613971612b9c86613be8565b90506000805b61398083613c57565b15612ca8578061399d57613996612bc684613c78565b8452613ba7565b80600114156139c5576139b2612be784613c78565b6001600160a01b03166020850152613ba7565b8060021415613a545760606139dc61330c85613c78565b90508051604051908082528060200260200182016040528015613a09578160200160208202803683370190505b50604086015260005b8151811015613a4d57613a2a82828151811061335f57fe5b86604001518281518110613a3a57fe5b6020908102919091010152600101613a12565b5050613ba7565b8060031415613ae9576060613a6b61330c85613c78565b90508051604051908082528060200260200182016040528015613a98578160200160208202803683370190505b50606086015260005b8151811015613a4d57613ab98282815181106133fb57fe5b86606001518281518110613ac957fe5b6001600160a01b0390921660209283029190910190910152600101613aa1565b8060041415613b7e576060613b0061330c85613c78565b90508051604051908082528060200260200182016040528015613b2d578160200160208202803683370190505b50608086015260005b8151811015613a4d57613b4e8282815181106133fb57fe5b86608001518281518110613b5e57fe5b6001600160a01b0390921660209283029190910190910152600101613b36565b8060051415612c9b57613b93612bc684613c78565b67ffffffffffffffff1660a0850152600191505b600101613977565b60006008821115613bd157612954836007198401600a0a63ffffffff61253e16565b6116b4836008849003600a0a63ffffffff6124fc16565b613bf0614436565b506040805180820190915281518152602082810190820152919050565b613c15614416565b613c1e82614115565b613c2757600080fd5b6000613c368360200151614145565b60208085015160408051808201909152868152920190820152915050919050565b6000613c61614436565b505080518051602091820151919092015191011190565b613c80614436565b613c8982613c57565b613c9257600080fd5b60208201516000613ca2826141a8565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613cdb57508151602110155b613ce457600080fd5b6000613cf38360200151614145565b90508083600001511015613d4e576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613d7457826020036101000a820491505b50949350505050565b8051600090601514613d8e57600080fd5b6116b782613cc6565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613ddb57506018613dff565b6fffffffffffffffffffffffffffffffff198416613dfb57506010613dff565b5060005b6020811015613e3557818181518110613e1457fe5b01602001516001600160f81b03191615613e2d57613e35565b600101613dff565b60008160200390506060816040519080825280601f01601f191660200182016040528015613e6a576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613eaf5750607f60f81b82600081518110613e9d57fe5b01602001516001600160f81b03191611155b15613ebb575080610e53565b6116b7613ecd8351608060ff16613f4c565b835b6060806040519050835180825260208201818101602087015b81831015613f00578051835260209283019201613ee8565b50855184518101855292509050808201602086015b81831015613f2d578051835260209283019201613f15565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613f9c576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613ff65782840160f81b81600081518110613fd857fe5b60200101906001600160f81b031916908160001a90535090506116b7565b606061400185613d97565b90508381510160370160f81b8260008151811061401a57fe5b60200101906001600160f81b031916908160001a90535061403b8282613ecf565b95945050505050565b606061404f82614115565b61405857600080fd5b6000614063836142db565b90506060816040519080825280602002602001820160405280156140a157816020015b61408e614436565b8152602001906001900390816140865790505b50905060006140b38560200151614145565b60208601510190506000805b8481101561410a576140d0836141a8565b91506040518060400160405280838152602001848152508482815181106140f357fe5b6020908102919091010152918101916001016140bf565b509195945050505050565b805160009061412657506000610e53565b6020820151805160001a9060c0821015612a6e57600092505050610e53565b8051600090811a608081101561415f576000915050610e53565b60b881108061417a575060c0811080159061417a575060f881105b15614189576001915050610e53565b60c081101561419d5760b519019050610e53565b60f519019050610e53565b80516000908190811a60808110156141c357600191506142d4565b60b88110156141d857607e19810191506142d4565b60c081101561425257600060b78203600186019550806020036101000a86510491506001810182019350508083101561424c576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506142d4565b60f88110156142675760be19810191506142d4565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156142d2576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b80516000906142ec57506000610e53565b600080905060006143008460200151614145565b602085015185519181019250015b8082101561432e5761431f826141a8565b6001909301929091019061430e565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b6040518060400160405280614429614436565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6ea2646970667358221220835eacc2107a8d1718a0f05e56e1f7d7731256afbbcfccbe6551048c3c72819b64736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerIncentivizeContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "6080604052600436106102815760003560e01c8063930e1b091161014f578063bd4cc830116100c1578063e75d72c71161007a578063e75d72c7146107b5578063e89a3020146107e8578063f9a2bbc714610812578063fc3e590814610827578063fd6a68791461083c578063fdd31fcd1461085157610288565b8063bd4cc83014610722578063c81b16621461074c578063d0ab528a14610761578063dc927faf14610776578063dcae76ab1461078b578063e1c7392a146107a057610288565b8063a78abc1611610113578063a78abc16146105d3578063a7c6a59d146105e8578063ab51bb96146105fd578063ac43175114610612578063ace9fcc2146106e3578063af400681146106f857610288565b8063930e1b091461054c57806396713da91461057f5780639dc0926214610594578063a1a11bf5146105a9578063a3c3c0ad146105be57610288565b806343756e5c116101f35780636f93d2e6116101ac5780636f93d2e61461048457806370fd5bad146104e357806374f2272d146104f857806375d47a0a1461050d5780637942fd05146105225780637e146cc51461053757610288565b806343756e5c146103ef578063493279b1146104045780634bf6c8821461043057806351e8067214610445578063541333071461045a5780636e47b4821461046f57610288565b806312950c461161024557806312950c46146103215780631b20087c146103365780631c6433121461034b5780633a9756121461028d5780633dffc3871461039157806340bb43c0146103bc57610288565b8063081e9d131461028d57806308f2ec06146102b4578063093f2fc4146102c95780630bee7a67146102de57806310e06a761461030c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610884565b60408051918252519081900360200190f35b3480156102c057600080fd5b506102a2610889565b3480156102d557600080fd5b506102a261088e565b3480156102ea57600080fd5b506102f3610893565b6040805163ffffffff9092168252519081900360200190f35b34801561031857600080fd5b506102a2610898565b34801561032d57600080fd5b506102a261089e565b34801561034257600080fd5b506102a26108a4565b34801561035757600080fd5b506103756004803603602081101561036e57600080fd5b50356108aa565b604080516001600160a01b039092168252519081900360200190f35b34801561039d57600080fd5b506103a6610884565b6040805160ff9092168252519081900360200190f35b3480156103c857600080fd5b506102a2600480360360208110156103df57600080fd5b50356001600160a01b03166108d1565b3480156103fb57600080fd5b506103756108e3565b34801561041057600080fd5b506104196108e9565b6040805161ffff9092168252519081900360200190f35b34801561043c57600080fd5b506103a66108ee565b34801561045157600080fd5b506103756108f3565b34801561046657600080fd5b506102a2610893565b34801561047b57600080fd5b506103756108f9565b34801561049057600080fd5b506104cf600480360360808110156104a757600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013515156108ff565b604080519115158252519081900360200190f35b3480156104ef57600080fd5b506103a6610d91565b34801561050457600080fd5b506102a2610d96565b34801561051957600080fd5b50610375610d9c565b34801561052e57600080fd5b506103a6610da2565b34801561054357600080fd5b506102a2610da7565b34801561055857600080fd5b506102a26004803603602081101561056f57600080fd5b50356001600160a01b0316610dac565b34801561058b57600080fd5b506103a6610dbe565b3480156105a057600080fd5b50610375610dc3565b3480156105b557600080fd5b50610375610dc9565b3480156105ca57600080fd5b506102a2610dcf565b3480156105df57600080fd5b506104cf610dd5565b3480156105f457600080fd5b506102a2610dde565b34801561060957600080fd5b506102f3610de4565b34801561061e57600080fd5b506106e16004803603604081101561063557600080fd5b81019060208101813564010000000081111561065057600080fd5b82018360208201111561066257600080fd5b8035906020019184600183028401116401000000008311171561068457600080fd5b9193909290916020810190356401000000008111156106a257600080fd5b8201836020820111156106b457600080fd5b803590602001918460018302840111640100000000831117156106d657600080fd5b509092509050610de9565b005b3480156106ef57600080fd5b506102a2611537565b34801561070457600080fd5b506102a26004803603602081101561071b57600080fd5b503561153d565b34801561072e57600080fd5b506102a26004803603602081101561074557600080fd5b5035611598565b34801561075857600080fd5b506103756115b1565b34801561076d57600080fd5b506102a26115b7565b34801561078257600080fd5b506103756115bd565b34801561079757600080fd5b506102a26115c3565b3480156107ac57600080fd5b506106e16115c9565b3480156107c157600080fd5b506106e1600480360360208110156107d857600080fd5b50356001600160a01b0316611692565b3480156107f457600080fd5b506103756004803603602081101561080b57600080fd5b50356117eb565b34801561081e57600080fd5b506103756117f8565b34801561083357600080fd5b506103a66117fe565b34801561084857600080fd5b50610375611803565b34801561085d57600080fd5b506102a26004803603602081101561087457600080fd5b50356001600160a01b0316611809565b600181565b602881565b605081565b606481565b600b5481565b60015481565b600c5481565b600681815481106108b757fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205481565b61100181565b606181565b600881565b61200081565b61100581565b6000805460ff16610957576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33612000146109975760405162461bcd60e51b815260040180806020018281038252602f815260200180612377602f913960400191505060405180910390fd5b60008215610a4a576110026001600160a01b0316639a99b4f06110056109c8600e548861181b90919063ffffffff16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610a1757600080fd5b505af1158015610a2b573d6000803e3d6000fd5b505050506040513d6020811015610a4157600080fd5b50519050610b59565b604080516309a99b4f60e41b8152611005600482015260248101869052905161100491639a99b4f09160448083019260209291908290030181600087803b158015610a9457600080fd5b505af1158015610aa8573d6000803e3d6000fd5b505050506040513d6020811015610abe57600080fd5b5051600e5490915015610b5957600e54604080516309a99b4f60e41b81526110056004820152602481019290925251610b569161100291639a99b4f0916044808201926020929091908290030181600087803b158015610b1d57600080fd5b505af1158015610b31573d6000803e3d6000fd5b505050506040513d6020811015610b4757600080fd5b5051829063ffffffff61181b16565b90505b600c805460010190556000610b6d8261187e565b600954909150610b83908263ffffffff61181b16565b600955600a54610bab908290610b9f908563ffffffff61181b16565b9063ffffffff6118a716565b600a556001600160a01b038716600090815260056020526040902054610c1757600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038088166000908152600560209081526040808320805460010190559289168252600790522054610c9557600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260076020526040902080546001019055600c54606411610d8457600b54600954600a5460408051938452602084019290925282820152517f2649b1b772a1a74bd332a67695e285317dd722941166595741c60a00fa65bb759181900360600190a16000610d0f6118e9565b90506000610d1b611bcd565b6001600160a01b0389166000908152600d6020526040902054909150610d59908290610d4d908563ffffffff61181b16565b9063ffffffff61181b16565b6001600160a01b0389166000908152600d6020526040812091909155600b80546001019055600c5550505b5060019695505050505050565b600281565b60035481565b61100881565b600b81565b600581565b60056020526000908152604090205481565b600981565b61100781565b61100681565b600a5481565b60005460ff1681565b60045481565b600081565b3361100714610e295760405162461bcd60e51b815260040180806020018281038252602e8152602001806122bc602e913960400191505060405180910390fd5b60005460ff16610e6a5760405162461bcd60e51b81526004018080602001828103825260218152602001806122ea6021913960400191505060405180910390fd5b610ede84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601f81527f68656164657252656c61796572526577617264526174654d6f6c6563756c650060208201529150611e4b9050565b15610fab5760208114610f225760405162461bcd60e51b81526004018080602001828103825260328152602001806123a66032913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610f6091858580838501838280828437600092019190915250611f3292505050565b9050600254811115610fa35760405162461bcd60e51b81526004018080602001828103825260608152602001806121956060913960600191505060405180910390fd5b6001556114a5565b61100484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051606081019091526022808252909250905061229a6020830139611e4b565b156110dc57602081146110485760405162461bcd60e51b815260040180806020018281038252602e81526020018061224b602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161108691858580838501838280828437600092019190915250611f3292505050565b9050801580159061109957506001548110155b6110d45760405162461bcd60e51b815260040180806020018281038252606c81526020018061230b606c913960800191505060405180910390fd5b6002556114a5565b61115084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601a81527f63616c6c6572436f6d70656e736174696f6e4d6f6c6563756c6500000000000060208201529150611e4b9050565b1561121d57602081146111945760405162461bcd60e51b815260040180806020018281038252602e81526020018061224b602e913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916111d291858580838501838280828437600092019190915250611f3292505050565b90506004548111156112155760405162461bcd60e51b81526004018080602001828103825260568152602001806121f56056913960600191505060405180910390fd5b6003556114a5565b61129184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601d81527f63616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f7200000060208201529150611e4b9050565b1561136957602081146112d55760405162461bcd60e51b815260040180806020018281038252602e81526020018061224b602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161131391858580838501838280828437600092019190915250611f3292505050565b9050801580159061132657506003548110155b6113615760405162461bcd60e51b81526004018080602001828103825260618152602001806121066061913960800191505060405180910390fd5b6004556114a5565b6113dd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f64796e616d69634578747261496e63656e74697665416d6f756e74000000000060208201529150611e4b9050565b1561146857602081146114215760405162461bcd60e51b815260040180806020018281038252602e815260200180612167602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161145f91858580838501838280828437600092019190915250611f3292505050565b600e55506114a5565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60025481565b60006028821161154e575080611593565b81602810801561155f575060508211155b1561156c57506028611593565b60508211801561157d5750606e8211155b1561158d57506078819003611593565b50600481045b919050565b6000602882116115a9575080611593565b506028611593565b61100281565b600e5481565b61100381565b60095481565b60005460ff1615611621576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60005460ff161561166f576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60018080556005600255600381905560506004556000805460ff19169091179055565b6001600160a01b0381166000908152600d6020526040902054806116f1576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c995b185e595c881c995dd85c99607a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d60205260408082208290555184929184156108fc02918591818181858888f193505050506117a15760405161100290819084156108fc029085906000818181858888f1935050505015801561175b573d6000803e3d6000fd5b506040805161100281526020810185905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a15050506117e8565b604080516001600160a01b03851681526020810184905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a150505b50565b600881815481106108b757fe5b61100081565b600381565b61100481565b600d6020526000908152604090205481565b600082820183811015611875576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600061187860025461189b60015485611f3790919063ffffffff16565b9063ffffffff611f9016565b600061187583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fd2565b600954600680546040805160208084028201810190925282815260009493859360609383018282801561194557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611927575b5050505050905060608151604051908082528060200260200182016040528015611979578160200160208202803683370190505b50905060005b8251811015611a0657600083828151811061199657fe5b6020026020010151905060006119d060056000846001600160a01b03166001600160a01b0316815260200190815260200160002054611598565b9050808484815181106119df57fe5b60209081029190910101526119fa868263ffffffff61181b16565b9550505060010161197f565b506000611a2460045461189b60035488611f3790919063ffffffff16565b9050611a36858263ffffffff6118a716565b94508460015b8451811015611b0d576000611a718761189b8a888681518110611a5b57fe5b6020026020010151611f3790919063ffffffff16565b9050611abe81600d6000898681518110611a8757fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205461181b90919063ffffffff16565b600d6000888581518110611ace57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611b02838263ffffffff6118a716565b925050600101611a3c565b50611b2381600d600087600081518110611a8757fe5b600d600086600081518110611b3457fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060098190555060008090505b8451811015611bb55760056000868381518110611b8757fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611b6e565b50611bc2600660006120ce565b509450505050505b90565b600a546008805460408051602080840282018101909252828152600094938593606093830182828015611c2957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c0b575b5050505050905060608151604051908082528060200260200182016040528015611c5d578160200160208202803683370190505b50905060005b8251811015611cdc576000838281518110611c7a57fe5b602002602001015190506000611cb460076000846001600160a01b03166001600160a01b031681526020019081526020016000205461153d565b905080848481518110611cc357fe5b6020908102919091010152949094019350600101611c63565b506000611cfa60045461189b60035488611f3790919063ffffffff16565b9050611d0c858263ffffffff6118a716565b94508460015b8451811015611d96576000611d318761189b8a888681518110611a5b57fe5b9050611d4781600d6000898681518110611a8757fe5b600d6000888581518110611d5757fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611d8b838263ffffffff6118a716565b925050600101611d12565b50611dac81600d600087600081518110611a8757fe5b600d600086600081518110611dbd57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506000600a8190555060008090505b8451811015611e3e5760076000868381518110611e1057fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611df7565b50611bc2600860006120ce565b6000816040516020018082805190602001908083835b60208310611e805780518252601f199092019160209182019101611e61565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310611eee5780518252601f199092019160209182019101611ecf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b600082611f4657506000611878565b82820282848281611f5357fe5b04146118755760405162461bcd60e51b81526004018080602001828103825260218152602001806122796021913960400191505060405180910390fd5b600061187583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612069565b600081848411156120615760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561202657818101518382015260200161200e565b50505050905090810190601f1680156120535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836120b85760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561202657818101518382015260200161200e565b5060008385816120c457fe5b0495945050505050565b50805460008255906000526020600020908101906117e89190611bca91905b8082111561210157600081556001016120ed565b509056fe746865206e657743616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c656c656e677468206f662064796e616d69634578747261496e63656e74697665416d6f756e74206d69736d617463686e65772068656164657252656c61796572526577617264526174654d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2068656164657252656c617965725265776172645261746544656e6f6d696e61746f726e65772063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2063616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f726c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7768656164657252656c617965725265776172645261746544656e6f6d696e61746f72746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374636f6e747261637420686173206e6f74206265656e20696e697469616c697a6564746865206e65772068656164657252656c617965725265776172645261746544656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2068656164657252656c61796572526577617264526174654d6f6c6563756c65746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163746c656e677468206f662068656164657252656c61796572526577617264526174654d6f6c6563756c65206d69736d61746368a2646970667358221220627dba6e536686005f0eaa9f77c130ba330278d37049b690a78442862109871c64736f6c63430006040033", + }, + }, + } + + mirrorUpgrade[rialtoNet] = &Upgrade{ + UpgradeName: "mirror", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "6080604052600436106103815760003560e01c80637d078e13116101d1578063b795031711610102578063d9e6dae9116100a0578063fa9e91591161006f578063fa9e915914610d38578063fc3e5908146105b2578063fd6a687914610d4d578063fe3a2af514610d6257610381565b8063d9e6dae9146106fc578063dc927faf14610cf9578063e605bca014610d0e578063f9a2bbc714610d2357610381565b8063c8509d81116100dc578063c8509d8114610bdf578063c8e704a4146105b2578063d117a11014610c64578063d7109ce614610ce457610381565b8063b79503171461073b578063bd32d3f9146104d9578063c81b166214610bca57610381565b80639a854bbd1161016f578063a78abc1611610149578063a78abc1614610ad5578063ab51bb9614610aea578063ab67a4851461073b578063ac43175114610aff57610381565b80639a854bbd14610a965780639dc0926214610aab578063a1a11bf514610ac057610381565b8063859180fb116101ab578063859180fb146106e757806394553a4e14610a3757806395b9ad2614610a6c57806396713da914610a8157610381565b80637d078e13146104ee5780637ec816dd1461099b578063831d65d1146109b057610381565b8063493279b1116102b657806366dea52a1161025457806372c4e0861161022357806372c4e0861461081957806375d47a0a146108bd57806377d9dae8146108d25780637942fd051461098657610381565b806366dea52a1461073b5780636b3f1307146107505780636e47b4821461080457806370fd5bad1461073b57610381565b806351e806721161029057806351e80672146107115780635d499b1b146107265780635f558f861461073b57806361368475146106fc57610381565b8063493279b1146106bb5780634bc81c00146106e75780634bf6c882146106fc57610381565b80632e02d77611610323578063401809f9116102fd578063401809f9146105b257806343756e5c146105c7578063445fcefe146105f8578063487c88ac146104ee57610381565b80632e02d7761461054c57806337e6ecda1461057f5780633dffc387146104ee57610381565b80631f91600b1161035f5780631f91600b146104d957806323996b53146104ee57806325c751b7146105035780632d89ac32146104ee57610381565b80630bee7a67146103865780630f212b1b146103b45780631182b875146103df575b600080fd5b34801561039257600080fd5b5061039b610d77565b6040805163ffffffff9092168252519081900360200190f35b3480156103c057600080fd5b506103c9610d7c565b6040805160ff9092168252519081900360200190f35b3480156103eb57600080fd5b506104646004803603604081101561040257600080fd5b60ff8235169190810190604081016020820135600160201b81111561042657600080fd5b82018360208201111561043857600080fd5b803590602001918460018302840111600160201b8311171561045957600080fd5b509092509050610d81565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104e557600080fd5b506103c9610e9b565b3480156104fa57600080fd5b506103c9610ea0565b6105386004803603604081101561051957600080fd5b5080356001600160a01b031690602001356001600160401b0316610ea5565b604080519115158252519081900360200190f35b34801561055857600080fd5b506105386004803603602081101561056f57600080fd5b50356001600160a01b03166113f1565b34801561058b57600080fd5b50610538600480360360208110156105a257600080fd5b50356001600160a01b0316611406565b3480156105be57600080fd5b506103c961141b565b3480156105d357600080fd5b506105dc611420565b604080516001600160a01b039092168252519081900360200190f35b34801561060457600080fd5b506106a96004803603602081101561061b57600080fd5b810190602081018135600160201b81111561063557600080fd5b82018360208201111561064757600080fd5b803590602001918460018302840111600160201b8311171561066857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611426945050505050565b60408051918252519081900360200190f35b3480156106c757600080fd5b506106d0611584565b6040805161ffff9092168252519081900360200190f35b3480156106f357600080fd5b506103c961158a565b34801561070857600080fd5b506103c961158f565b34801561071d57600080fd5b506105dc611594565b34801561073257600080fd5b506106a961159a565b34801561074757600080fd5b506103c96115a3565b6105386004803603604081101561076657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561079057600080fd5b8201836020820111156107a257600080fd5b803590602001918460018302840111600160201b831117156107c357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115a8945050505050565b34801561081057600080fd5b506105dc611e7e565b6105386004803603602081101561082f57600080fd5b810190602081018135600160201b81111561084957600080fd5b82018360208201111561085b57600080fd5b803590602001918460018302840111600160201b8311171561087c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e84945050505050565b3480156108c957600080fd5b506105dc6122d0565b610538600480360360408110156108e857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561091257600080fd5b82018360208201111561092457600080fd5b803590602001918460018302840111600160201b8311171561094557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506122d6945050505050565b34801561099257600080fd5b506103c96127dc565b3480156109a757600080fd5b506106a96127e1565b3480156109bc57600080fd5b50610a35600480360360408110156109d357600080fd5b60ff8235169190810190604081016020820135600160201b8111156109f757600080fd5b820183602082011115610a0957600080fd5b803590602001918460018302840111600160201b83111715610a2a57600080fd5b5090925090506127e7565b005b61053860048036036040811015610a4d57600080fd5b5080356001600160a01b031690602001356001600160401b0316612936565b348015610a7857600080fd5b506103c961332d565b348015610a8d57600080fd5b506103c9613332565b348015610aa257600080fd5b506106a9613337565b348015610ab757600080fd5b506105dc613343565b348015610acc57600080fd5b506105dc613349565b348015610ae157600080fd5b5061053861334f565b348015610af657600080fd5b5061039b613358565b348015610b0b57600080fd5b50610a3560048036036040811015610b2257600080fd5b810190602081018135600160201b811115610b3c57600080fd5b820183602082011115610b4e57600080fd5b803590602001918460018302840111600160201b83111715610b6f57600080fd5b919390929091602081019035600160201b811115610b8c57600080fd5b820183602082011115610b9e57600080fd5b803590602001918460018302840111600160201b83111715610bbf57600080fd5b50909250905061335d565b348015610bd657600080fd5b506105dc613632565b348015610beb57600080fd5b50610a3560048036036040811015610c0257600080fd5b60ff8235169190810190604081016020820135600160201b811115610c2657600080fd5b820183602082011115610c3857600080fd5b803590602001918460018302840111600160201b83111715610c5957600080fd5b509092509050613638565b348015610c7057600080fd5b50610c8e60048036036020811015610c8757600080fd5b503561370e565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a08301526001600160401b0390921660c082015290519081900360e00190f35b348015610cf057600080fd5b506106a9613765565b348015610d0557600080fd5b506105dc61376a565b348015610d1a57600080fd5b506106a9613770565b348015610d2f57600080fd5b506105dc613776565b348015610d4457600080fd5b506106a961377c565b348015610d5957600080fd5b506105dc613782565b348015610d6e57600080fd5b506103c9613358565b606481565b600681565b60603361200014610dc35760405162461bcd60e51b815260040180806020018281038252602f815260200180615b8a602f913960400191505060405180910390fd5b60ff841660011415610e1557610e0e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061378892505050565b9050610e94565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605848484604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1506040805160008152602081019091525b9392505050565b600481565b600181565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b5051905080610f5e576040805162461bcd60e51b81526020600482015260096024820152681b9bdd08189bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602052604090205460ff16610fc1576040805162461bcd60e51b81526020600482015260136024820152723737ba103137bab73210313c9036b4b93937b960691b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610ffe57600080fd5b505afa158015611012573d6000803e3d6000fd5b505050506040513d602081101561102857600080fd5b505190506402540be4003406158015611053575060055461104f908263ffffffff613a1816565b3410155b61108e5760405162461bcd60e51b8152600401808060200182810382526046815260200180615b166046913960600191505060405180910390fd5b42607801846001600160401b0316101580156110b85750426201518001846001600160401b031611155b6110f35760405162461bcd60e51b8152600401808060200182810382526038815260200180615a136038913960400191505060405180910390fd5b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050506040513d602081101561115857600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0389169163313ce567916004808301926020929190829003018186803b1580156111a057600080fd5b505afa1580156111b4573d6000803e3d6000fd5b505050506040513d60208110156111ca57600080fd5b50519050677ce66c50e28400006111e48360ff8416613a72565b1115611230576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b600554611004906108fc9061124c90349063ffffffff613b0116565b6040518115909202916000818181858888f19350505050158015611274573d6000803e3d6000fd5b5061127d61586a565b6040518060c00160405280336001600160a01b03168152602001896001600160a01b031681526020018681526020018481526020016112cc6402540be400600554613b4390919063ffffffff16565b81526001600160401b038916602090910152905061200063f7a251d760056112f384613b85565b61131d6402540be40061131160055434613b0190919063ffffffff16565b9063ffffffff613b4316565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561137b578181015183820152602001611363565b50505050905090810190601f1680156113a85780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156113c957600080fd5b505af11580156113dd573d6000803e3d6000fd5b505050506001955050505050505b92915050565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b600381565b61100181565b602081015160009061143661589f565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a08201526101009091046001600160401b031660c0820152906114bd5760009250505061157f565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561151b57600080fd5b505afa15801561152f573d6000803e3d6000fd5b505050506040513d602081101561154557600080fd5b5051608083015160608401519192506000916115669163ffffffff613b0116565b9050611578818363ffffffff613b0116565b9450505050505b919050565b61058981565b600581565b600881565b61200081565b6402540be40081565b600281565b6001600160a01b03821660009081526002602052604081205460ff16156116005760405162461bcd60e51b815260040180806020018281038252602b815260200180615bb9602b913960400191505060405180910390fd5b600061160b83613cba565b905061161561589f565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526116da576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b60006116f782608001518360600151613b0190919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b03161461174d5760405162461bcd60e51b8152600401808060200182810382526045815260200180615a826045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561179057600080fd5b505afa1580156117a4573d6000803e3d6000fd5b505050506040513d60208110156117ba57600080fd5b50516001600160a01b0316146118015760405162461bcd60e51b815260040180806020018281038252602e8152602001806159e5602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561184d57600080fd5b505afa158015611861573d6000803e3d6000fd5b505050506040513d602081101561187757600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925083916119089184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b1580156118d057600080fd5b505afa1580156118e4573d6000803e3d6000fd5b505050506040513d60208110156118fa57600080fd5b50519063ffffffff613a1816565b101561195b576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561199d57600080fd5b505afa1580156119b1573d6000803e3d6000fd5b505050506040513d60208110156119c757600080fd5b505190508082108015906119e057506402540be4008206155b611a1b5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4b6037913960400191505060405180910390fd5b6000611a27868b613cc1565b905063ffffffff8116611c26576001600160a01b038a166323b872dd33611004611a57898963ffffffff613b0116565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611abf57600080fd5b505af1158015611ad3573d6000803e3d6000fd5b505050506040513d6020811015611ae957600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b158015611b5257600080fd5b505af1158015611b66573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611be5578181015183820152602001611bcd565b50505050905090810190601f168015611c125780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2611cde565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611ca2578181015183820152602001611c8a565b50505050905090810190601f168015611ccf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611d386158db565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611d80573d6000803e3d6000fd5b5061200063f7a251d76001611d948461411b565b611da9886402540be40063ffffffff613b4316565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e07578181015183820152602001611def565b50505050905090810190601f168015611e345780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e5557600080fd5b505af1158015611e69573d6000803e3d6000fd5b5060019e9d5050505050505050505050505050565b61100581565b600080611e9083613cba565b9050611e9a61589f565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c0830152611f5f576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c001516001600160401b031610611fc0576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561200257600080fd5b505afa158015612016573d6000803e3d6000fd5b505050506040513d602081101561202c57600080fd5b5051905080821080159061204557506402540be4008206155b6120805760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4b6037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556120da6158db565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f1935050505015801561211d573d6000803e3d6000fd5b5061200063f7a251d760016121318461411b565b612146876402540be40063ffffffff613b4316565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121a457818101518382015260200161218c565b50505050905090810190601f1680156121d15780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156121f257600080fd5b505af1158015612206573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612288578181015183820152602001612270565b50505050905090810190601f1680156122b55780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806122e283613cba565b90506122ec61589f565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526123b1576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146124055760405162461bcd60e51b8152600401808060200182810382526045815260200180615a826045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561244857600080fd5b505afa15801561245c573d6000803e3d6000fd5b505050506040513d602081101561247257600080fd5b50516001600160a01b0316146124cf576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703230206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561251157600080fd5b505afa158015612525573d6000803e3d6000fd5b505050506040513d602081101561253b57600080fd5b5051905080821080159061255457506402540be4008206155b61258f5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a4b6037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556125e96158db565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f1935050505015801561262c573d6000803e3d6000fd5b5061200063f7a251d760016126408461411b565b612655876402540be40063ffffffff613b4316565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156126b357818101518382015260200161269b565b50505050905090810190601f1680156126e05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561279357818101518382015260200161277b565b50505050905090810190601f1680156127c05780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b60045481565b33612000146128275760405162461bcd60e51b815260040180806020018281038252602f815260200180615b8a602f913960400191505060405180910390fd5b60ff8316600414156128775761287282828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061419192505050565b612931565b60ff8316600514156128c25761287282828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061443e92505050565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b15801561298357600080fd5b505afa158015612997573d6000803e3d6000fd5b505050506040513d60208110156129ad57600080fd5b5051146129f1576040805162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48189bdd5b99609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff1615612a50576040805162461bcd60e51b815260206004820152600e60248201526d6d6972726f722070656e64696e6760901b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8d57600080fd5b505afa158015612aa1573d6000803e3d6000fd5b505050506040513d6020811015612ab757600080fd5b505190506402540be4003406158015612ae25750600454612ade908263ffffffff613a1816565b3410155b612b1d5760405162461bcd60e51b815260040180806020018281038252604d815260200180615998604d913960600191505060405180910390fd5b42607801836001600160401b031610158015612b475750426201518001836001600160401b031611155b612b825760405162461bcd60e51b8152600401808060200182810382526038815260200180615a136038913960400191505060405180910390fd5b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612bbd57600080fd5b505afa158015612bd1573d6000803e3d6000fd5b505050506040513d6020811015612be757600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038816916318160ddd916004808301926020929190829003018186803b158015612c2f57600080fd5b505afa158015612c43573d6000803e3d6000fd5b505050506040513d6020811015612c5957600080fd5b50519050677ce66c50e2840000612c738260ff8516613a72565b1115612cbf576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b6060866001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015612cfa57600080fd5b505afa158015612d0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612d3757600080fd5b8101908080516040519392919084600160201b821115612d5657600080fd5b908301906020820185811115612d6b57600080fd5b8251600160201b811182820188101715612d8457600080fd5b82525081516020918201929091019080838360005b83811015612db1578181015183820152602001612d99565b50505050905090810190601f168015612dde5780820380516001836020036101000a031916815260200191505b50604052505050905060608190506001815110158015612e0057506020815111155b612e51576040805162461bcd60e51b815260206004820152601d60248201527f6e616d65206c656e677468206d75737420626520696e205b312c33325d000000604482015290519081900360640190fd5b6060886001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612e8c57600080fd5b505afa158015612ea0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612ec957600080fd5b8101908080516040519392919084600160201b821115612ee857600080fd5b908301906020820185811115612efd57600080fd5b8251600160201b811182820188101715612f1657600080fd5b82525081516020918201929091019080838360005b83811015612f43578181015183820152602001612f2b565b50505050905090810190601f168015612f705780820380516001836020036101000a031916815260200191505b5060405250508151919250829160021180159150612f9057508051600810155b612fe1576040805162461bcd60e51b815260206004820152601e60248201527f73796d626f6c206c656e677468206d75737420626520696e205b322c385d0000604482015290519081900360640190fd5b60005b81518160ff16101561313557604160f81b828260ff168151811061300457fe5b01602001516001600160f81b031916108015906130425750602d60f91b828260ff168151811061303057fe5b01602001516001600160f81b03191611155b8061309a5750606160f81b828260ff168151811061305c57fe5b01602001516001600160f81b0319161080159061309a5750603d60f91b828260ff168151811061308857fe5b01602001516001600160f81b03191611155b806130f25750600360fc1b828260ff16815181106130b457fe5b01602001516001600160f81b031916108015906130f25750603960f81b828260ff16815181106130e057fe5b01602001516001600160f81b03191611155b61312d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615ac7602e913960400191505060405180910390fd5b600101612fe4565b50600454611004906108fc9061315290349063ffffffff613b0116565b6040518115909202916000818181858888f1935050505015801561317a573d6000803e3d6000fd5b506001600160a01b038a166000908152600260209081526040909120805460ff1916600117905584810151908301516131b16158f2565b604051806101000160405280336001600160a01b031681526020018e6001600160a01b031681526020018481526020018381526020018981526020018a60ff1681526020016132106402540be400600454613b4390919063ffffffff16565b81526001600160401b038e16602090910152905061200063f7a251d7600461323784614609565b6132556402540be40061131160045434613b0190919063ffffffff16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156132b357818101518382015260200161329b565b50505050905090810190601f1680156132e05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561330157600080fd5b505af1158015613315573d6000803e3d6000fd5b5050505060019a505050505050505050505092915050565b600781565b600981565b677ce66c50e284000081565b61100781565b61100681565b60005460ff1681565b600081565b336110071461339d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615b5c602e913960400191505060405180910390fd5b602081146133f2576040805162461bcd60e51b815260206004820152601860248201527f65787065637465642076616c7565206c656e6774682033320000000000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815293945060609392508691508590819084018382808284376000920191909152505050506020830151909150686d6972726f7246656560b81b8114156134e75760208201516402540be4008106156134df576040805162461bcd60e51b815260206004820152601a60248201527f6d6972726f72466565206d757374206265204e202a2031653130000000000000604482015290519081900360640190fd5b60045561359d565b6673796e6346656560c81b8114156135605760208201516402540be400810615613558576040805162461bcd60e51b815260206004820152601860248201527f73796e63466565206d757374206265204e202a20316531300000000000000000604482015290519081900360640190fd5b60055561359d565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61100281565b33612000146136785760405162461bcd60e51b815260040180806020018281038252602f815260200180615b8a602f913960400191505060405180910390fd5b60ff8316600414156136c35761287282828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061477b92505050565b60ff8316600514156128c25761287282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148ba92505050565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b039093169391929181169061010090046001600160401b031687565b604d81565b61100381565b60055481565b61100081565b61271081565b61100481565b606061379261589f565b600061379d846149b4565b91509150806137f3576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff166138a6576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff0019166101006001600160401b03909216919091021790556139fd565b815160ff16600114156139b05760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156138ff57600080fd5b505afa158015613913573d6000803e3d6000fd5b505050506040513d602081101561392957600080fd5b505190506001600160a01b038116156139aa5760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561399157600080fd5b505af11580156139a5573d6000803e3d6000fd5b505050505b506139fd565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b600082820183811015610e94576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006008821115613aea57604d60071983011115613acc576040805162461bcd60e51b8152602060048201526012602482015271746f6f206c6172676520646563696d616c7360701b604482015290519081900360640190fd5b613ae3836007198401600a0a63ffffffff613b4316565b90506113eb565b610e94836008849003600a0a63ffffffff614b0516565b6000610e9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614b5e565b6000610e9483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bf5565b60408051600680825260e08201909252606091829190816020015b6060815260200190600190039081613ba05750508351909150613bcb906001600160a01b0316614c5a565b81600081518110613bd857fe5b6020026020010181905250613bf983602001516001600160a01b0316614c5a565b81600181518110613c0657fe5b6020026020010181905250613c21836040015160001c614c7d565b81600281518110613c2e57fe5b6020026020010181905250613c468360600151614c7d565b81600381518110613c5357fe5b6020026020010181905250613c6b8360800151614c7d565b81600481518110613c7857fe5b6020026020010181905250613c998360a001516001600160401b0316614c7d565b81600581518110613ca657fe5b6020026020010181905250610e9481614c90565b6020015190565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613cfd57600080fd5b505afa158015613d11573d6000803e3d6000fd5b505050506040513d6020811015613d2757600080fd5b5051604080516395d89b4160e01b8152905160ff90921692506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b158015613d7357600080fd5b505afa158015613d87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613db057600080fd5b8101908080516040519392919084600160201b821115613dcf57600080fd5b908301906020820185811115613de457600080fd5b8251600160201b811182820188101715613dfd57600080fd5b82525081516020918201929091019080838360005b83811015613e2a578181015183820152602001613e12565b50505050905090810190601f168015613e575780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b158015613ea757600080fd5b505afa158015613ebb573d6000803e3d6000fd5b505050506040513d6020811015613ed157600080fd5b505160808701516060880151919250600091613ef29163ffffffff613b0116565b9050428760c001516001600160401b03161015613f175750600193506113eb92505050565b613f25838860200151614d1a565b613f375750600293506113eb92505050565b80821115613f4d5750600393506113eb92505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613f8f57600080fd5b505afa158015613fa3573d6000803e3d6000fd5b505050506040513d6020811015613fb957600080fd5b505114613fce5750600493506113eb92505050565b8660a0015160ff168414613fea5750600593506113eb92505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b15801561402f57600080fd5b505afa158015614043573d6000803e3d6000fd5b505050506040513d602081101561405957600080fd5b50516001600160a01b03161415806140fb57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156140cc57600080fd5b505afa1580156140e0573d6000803e3d6000fd5b505050506040513d60208110156140f657600080fd5b505114155b1561410e5750600693506113eb92505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b6060815260200190600190039081614134575050835190915061415c9063ffffffff16614c7d565b8160008151811061416957fe5b6020026020010181905250614184836020015160001c614c7d565b81600181518110613ca657fe5b61419961586a565b60006141a483614e02565b91509150806141f1576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03166000908152600290915260409020805460ff1916905560a082015160ff166143525760808201516040516110049180156108fc02916000818181858888f19350505050158015614254573d6000803e3d6000fd5b506110046001600160a01b0316638eff336c8360600151846020015185604001516040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018260ff1681526020019350505050600060405180830381600087803b1580156142ce57600080fd5b505af11580156142e2573d6000803e3d6000fd5b50505050602082810180516001600160a01b03908116600090815260038452604090819020805460ff1916600117905591516060860151835190815292519116927f41787d7db08fc5907641ee8343379f28215727eb123d4b462099afab4300b036928290030190a2505061443b565b815160808301516040516000926001600160a01b0316916127109184818181858888f193505050503d80600081146143a6576040519150601f19603f3d011682016040523d82523d6000602084013e6143ab565b606091505b50509050806143e85760808301516040516110029180156108fc02916000818181858888f193505050501580156143e6573d6000803e3d6000fd5b505b82602001516001600160a01b03167fefe400ad0042ebf81a245de9ae669616105e0ca9fc946352c085da0c2bc524e58460a00151604051808260ff1660ff16815260200191505060405180910390a25050505b50565b614446615936565b600061445183614f0f565b915091508061449e576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b606082015160ff1661451e5760408083015190516110049180156108fc02916000818181858888f193505050501580156144dc573d6000803e3d6000fd5b5081602001516001600160a01b03167fbb7d3a9a559080d8281b0e4fb39dacbe2fdcafd5ef765e9a6ed871c9167dc60f60405160405180910390a2505061443b565b81602001516001600160a01b03167ff1e25fa536da84053644fd788b1d6a27ea6edd1f3af80c7d36ca253c4c82c9c38360600151604051808260ff1660ff16815260200191505060405180910390a2815160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d80600081146145c1576040519150601f19603f3d011682016040523d82523d6000602084013e6145c6565b606091505b50509050806146035760408084015190516110029180156108fc02916000818181858888f19350505050158015614601573d6000803e3d6000fd5b505b50505050565b6040805160088082526101208201909252606091829190816020015b60608152602001906001900390816146255750508351909150614650906001600160a01b0316614c5a565b8160008151811061465d57fe5b602002602001018190525061467e83602001516001600160a01b0316614c5a565b8160018151811061468b57fe5b60200260200101819052506146a6836040015160001c614c7d565b816002815181106146b357fe5b60200260200101819052506146ce836060015160001c614c7d565b816003815181106146db57fe5b60200260200101819052506146f38360800151614c7d565b8160048151811061470057fe5b602002602001018190525061471b8360a0015160ff16614c7d565b8160058151811061472857fe5b60200260200101819052506147408360c00151614c7d565b8160068151811061474d57fe5b602002602001018190525061476e8360e001516001600160401b0316614c7d565b81600781518110613ca657fe5b6147836158f2565b600061478e83614fdb565b91509150806147db576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b039081166000908152600290925260408220805460ff19169055835160c085015191169061271090614825906402540be40063ffffffff614b0516565b6040516000818181858888f193505050503d8060008114614862576040519150601f19603f3d011682016040523d82523d6000602084013e614867565b606091505b50509050806146035760c0830151611002906108fc90614892906402540be40063ffffffff614b0516565b6040518115909202916000818181858888f19350505050158015614601573d6000803e3d6000fd5b6148c261586a565b60006148cd8361512c565b915091508061491a576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b815160808301516000916001600160a01b03169061271090614947906402540be40063ffffffff614b0516565b6040516000818181858888f193505050503d8060008114614984576040519150601f19603f3d011682016040523d82523d6000602084013e614989565b606091505b5050905080614603576080830151611002906108fc90614892906402540be40063ffffffff614b0516565b6149bc61589f565b60006149c661589f565b6149ce61595d565b6149df6149da8661523c565b615261565b90506000805b6149ee836152ab565b15614af85780614a1357614a09614a04846152cc565b61531a565b60ff168452614af0565b8060011415614a3257614a28614a04846152cc565b6020850152614af0565b8060021415614a5f57614a4c614a47846152cc565b6153cf565b6001600160a01b03166040850152614af0565b8060031415614a7e57614a74614a04846152cc565b6060850152614af0565b8060041415614a9d57614a93614a04846152cc565b6080850152614af0565b8060051415614abf57614ab2614a04846152cc565b60ff1660a0850152614af0565b8060061415614aeb57614ad4614a04846152cc565b6001600160401b031660c085015260019150614af0565b614af8565b6001016149e5565b5091935090915050915091565b600082614b14575060006113eb565b82820282848281614b2157fe5b0414610e945760405162461bcd60e51b8152600401808060200182810382526021815260200180615af56021913960400191505060405180910390fd5b60008184841115614bed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bb2578181015183820152602001614b9a565b50505050905090810190601f168015614bdf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183614c445760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614bb2578181015183820152602001614b9a565b506000838581614c5057fe5b0495945050505050565b60408051600560a21b8318601482015260348101909152606090610e94816153e9565b60606113eb614c8b8361543f565b6153e9565b6060815160001415614cb1575060408051600081526020810190915261157f565b606082600081518110614cc057fe5b602002602001015190506000600190505b8351811015614d0157614cf782858381518110614cea57fe5b6020026020010151615525565b9150600101614cd1565b50610e94614d14825160c060ff166155a2565b82615525565b8151600090839060081080614d30575080516002115b15614d3f5760009150506113eb565b60408051602080825281830190925260609160208201818036833701905050905083602082015280825181518110614d7357fe5b6020910101516001600160f81b031916602d60f81b14614d98576000925050506113eb565b600160005b8351811015614df857828181518110614db257fe5b602001015160f81c60f81b6001600160f81b031916848281518110614dd357fe5b01602001516001600160f81b03191614614df05760009150614df8565b600101614d9d565b5095945050505050565b614e0a61586a565b6000614e1461586a565b614e1c61595d565b614e286149da8661523c565b90506000805b614e37836152ab565b15614af85780614e5d57614e4d614a47846152cc565b6001600160a01b03168452614f07565b8060011415614e8557614e72614a47846152cc565b6001600160a01b03166020850152614f07565b8060021415614ea757614e9a614a04846152cc565b60ff166040850152614f07565b8060031415614ec657614ebc614a04846152cc565b6060850152614f07565b8060041415614ee557614edb614a04846152cc565b6080850152614f07565b8060051415614aeb57614efa614a04846152cc565b60ff1660a0850152600191505b600101614e2e565b614f17615936565b6000614f21615936565b614f2961595d565b614f356149da8661523c565b90506000805b614f44836152ab565b15614af85780614f6a57614f5a614a47846152cc565b6001600160a01b03168452614fd3565b8060011415614f9257614f7f614a47846152cc565b6001600160a01b03166020850152614fd3565b8060021415614fb157614fa7614a04846152cc565b6040850152614fd3565b8060031415614aeb57614fc6614a04846152cc565b60ff166060850152600191505b600101614f3b565b614fe36158f2565b6000614fed6158f2565b614ff561595d565b6150016149da8661523c565b90506000805b615010836152ab565b15614af8578061503657615026614a47846152cc565b6001600160a01b03168452615124565b806001141561505e5761504b614a47846152cc565b6001600160a01b03166020850152615124565b806002141561507d57615073614a04846152cc565b6040850152615124565b806003141561509c57615092614a04846152cc565b6060850152615124565b80600414156150bb576150b1614a04846152cc565b6080850152615124565b80600514156150dd576150d0614a04846152cc565b60ff1660a0850152615124565b80600614156150fc576150f2614a04846152cc565b60c0850152615124565b8060071415614aeb57615111614a04846152cc565b6001600160401b031660e0850152600191505b600101615007565b61513461586a565b600061513e61586a565b61514661595d565b6151526149da8661523c565b90506000805b615161836152ab565b15614af8578061518757615177614a47846152cc565b6001600160a01b03168452615234565b80600114156151af5761519c614a47846152cc565b6001600160a01b03166020850152615234565b80600214156151ce576151c4614a04846152cc565b6040850152615234565b80600314156151ed576151e3614a04846152cc565b6060850152615234565b806004141561520c57615202614a04846152cc565b6080850152615234565b8060051415614aeb57615221614a04846152cc565b6001600160401b031660a0850152600191505b600101615158565b61524461597d565b506040805180820190915281518152602082810190820152919050565b61526961595d565b6152728261569a565b61527b57600080fd5b600061528a83602001516156d4565b60208085015160408051808201909152868152920190820152915050919050565b60006152b561597d565b505080518051602091820151919092015191011190565b6152d461597d565b6152dd826152ab565b6152e657600080fd5b602082015160006152f682615737565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061532f57508151602110155b61533857600080fd5b600061534783602001516156d4565b905080836000015110156153a2576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613a0f57506020919091036101000a90049392505050565b80516000906015146153e057600080fd5b6113eb8261531a565b60608151600114801561541b5750607f60f81b8260008151811061540957fe5b01602001516001600160f81b03191611155b1561542757508061157f565b6113eb6154398351608060ff166155a2565b83615525565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615483575060186154a7565b6fffffffffffffffffffffffffffffffff1984166154a3575060106154a7565b5060005b60208110156154dd578181815181106154bc57fe5b01602001516001600160f81b031916156154d5576154dd565b6001016154a7565b60008160200390506060816040519080825280601f01601f191660200182016040528015615512576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561555657805183526020928301920161553e565b50855184518101855292509050808201602086015b8183101561558357805183526020928301920161556b565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106155f2576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b6040805160018082528183019092526060916020820181803683370190505090506037841161564c5782840160f81b8160008151811061562e57fe5b60200101906001600160f81b031916908160001a90535090506113eb565b60606156578561543f565b90508381510160370160f81b8260008151811061567057fe5b60200101906001600160f81b031916908160001a9053506156918282615525565b95945050505050565b80516000906156ab5750600061157f565b6020820151805160001a9060c08210156156ca5760009250505061157f565b5060019392505050565b8051600090811a60808110156156ee57600091505061157f565b60b8811080615709575060c08110801590615709575060f881105b1561571857600191505061157f565b60c081101561572c5760b51901905061157f565b60f51901905061157f565b80516000908190811a60808110156157525760019150615863565b60b881101561576757607e1981019150615863565b60c08110156157e157600060b78203600186019550806020036101000a8651049150600181018201935050808310156157db576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50615863565b60f88110156157f65760be1981019150615863565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615861576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806040016040528061597061597d565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c7565206d757374206265204e202a203165313020616e642067726561746572207468616e2073756d206f66206d696e6952656c617946656520616e64206d6972726f724665656f6e6c79206265703230206f776e65722063616e20617070726f766520746869732062696e64207265717565737465787069726554696d65206d7573742062652074776f206d696e75746573206c6174657220616e64206f6e6520646179206561726c69657272656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e64207265717565737473796d626f6c2073686f756c64206f6e6c7920636f6e7461696e20616c70686162657420616e64206e756d626572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d73672e76616c7565206d757374206265204e202a203165313020616e64206e6f206c6573732073756d206f66206d696e6952656c617946656520616e642073796e63466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e747261637474686520626570323020746f6b656e20697320696e206d6972726f722070656e64696e6720737461747573a264697066735822122011643b1904024d40f68eeffb1121551fe6c8ee6c1d494c4463b904655149b5e264736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(TokenHubContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "60806040526004361061031e5760003560e01c80639a99b4f0116101ab578063bd466461116100f7578063f014847211610095578063fc1a598f1161006f578063fc1a598f14610cb3578063fc3e590814610996578063fd6a687914610ce6578063ff9c00271461068657610366565b8063f014847214610c74578063f9a2bbc714610c89578063fa9e915914610c9e57610366565b8063d9e6dae9116100d1578063d9e6dae914610608578063dc927faf14610c35578063e1c7392a14610c4a578063ebf71d5314610c5f57610366565b8063bd46646114610b68578063c81b166214610b9b578063c8509d8114610bb057610366565b8063aa7415f511610164578063b99328c51161013e578063b99328c514610ad2578063b9fd21e314610b0b578063ba35ead614610b20578063bbface1f14610b3557610366565b8063aa7415f5146109ab578063ab51bb96146109f2578063ac43175114610a0757610366565b80639a99b4f0146109095780639dc0926214610942578063a1a11bf514610957578063a496fba21461096c578063a78abc1614610981578063a7c9f02d1461099657610366565b8063613684751161026a57806375d47a0a116102235780638b87b21f116101fd5780638b87b21f146105875780638eff336c146108a057806396713da9146108df5780639a854bbd146108f457610366565b806375d47a0a146107f15780637942fd0514610806578063831d65d11461081b57610366565b8063613684751461060857806366dea52a146106865780636e0565201461069b5780636e47b482146107c757806370fd5bad1461068657806371d30863146107dc57610366565b806343a368b9116102d757806350432d32116102b157806350432d321461061d57806351e806721461063257806359b92789146106475780635d499b1b1461067157610366565b806343a368b9146105c7578063493279b1146105dc5780634bf6c8821461060857610366565b80630bee7a671461036b5780631182b87514610399578063149d14d9146104935780633d713223146104ba5780633dffc3871461058757806343756e5c146105b257610366565b36610366573415610364576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561037757600080fd5b50610380610cfb565b6040805163ffffffff9092168252519081900360200190f35b3480156103a557600080fd5b5061041e600480360360408110156103bc57600080fd5b60ff8235169190810190604081016020820135600160201b8111156103e057600080fd5b8201836020820111156103f257600080fd5b803590602001918460018302840111600160201b8311171561041357600080fd5b509092509050610d00565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610458578181015183820152602001610440565b50505050905090810190601f1680156104855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049f57600080fd5b506104a8610e2e565b60408051918252519081900360200190f35b3480156104c657600080fd5b5061056b600480360360208110156104dd57600080fd5b810190602081018135600160201b8111156104f757600080fd5b82018360208201111561050957600080fd5b803590602001918460018302840111600160201b8311171561052a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e34945050505050565b604080516001600160a01b039092168252519081900360200190f35b34801561059357600080fd5b5061059c610e58565b6040805160ff9092168252519081900360200190f35b3480156105be57600080fd5b5061056b610e5d565b3480156105d357600080fd5b506104a8610e63565b3480156105e857600080fd5b506105f1610e6f565b6040805161ffff9092168252519081900360200190f35b34801561061457600080fd5b5061059c610e75565b34801561062957600080fd5b506104a8610e7a565b34801561063e57600080fd5b5061056b610e85565b34801561065357600080fd5b5061056b6004803603602081101561066a57600080fd5b5035610e8b565b34801561067d57600080fd5b506104a8610ea6565b34801561069257600080fd5b5061059c610eaf565b6107b3600480360360808110156106b157600080fd5b810190602081018135600160201b8111156106cb57600080fd5b8201836020820111156106dd57600080fd5b803590602001918460208302840111600160201b831117156106fe57600080fd5b919390929091602081019035600160201b81111561071b57600080fd5b82018360208201111561072d57600080fd5b803590602001918460208302840111600160201b8311171561074e57600080fd5b919390929091602081019035600160201b81111561076b57600080fd5b82018360208201111561077d57600080fd5b803590602001918460208302840111600160201b8311171561079e57600080fd5b91935091503567ffffffffffffffff16610eb4565b604080519115158252519081900360200190f35b3480156107d357600080fd5b5061056b611389565b3480156107e857600080fd5b506104a861138f565b3480156107fd57600080fd5b5061056b611395565b34801561081257600080fd5b5061059c61139b565b34801561082757600080fd5b506103646004803603604081101561083e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561086257600080fd5b82018360208201111561087457600080fd5b803590602001918460018302840111600160201b8311171561089557600080fd5b5090925090506113a0565b3480156108ac57600080fd5b50610364600480360360608110156108c357600080fd5b508035906001600160a01b0360208201351690604001356114e9565b3480156108eb57600080fd5b5061059c61156f565b34801561090057600080fd5b506104a8611574565b34801561091557600080fd5b506104a86004803603604081101561092c57600080fd5b506001600160a01b038135169060200135611580565b34801561094e57600080fd5b5061056b6116be565b34801561096357600080fd5b5061056b6116c4565b34801561097857600080fd5b5061059c6116ca565b34801561098d57600080fd5b506107b36116cf565b3480156109a257600080fd5b5061059c6116d8565b6107b3600480360360808110156109c157600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff166116dd565b3480156109fe57600080fd5b506103806116ca565b348015610a1357600080fd5b5061036460048036036040811015610a2a57600080fd5b810190602081018135600160201b811115610a4457600080fd5b820183602082011115610a5657600080fd5b803590602001918460018302840111600160201b83111715610a7757600080fd5b919390929091602081019035600160201b811115610a9457600080fd5b820183602082011115610aa657600080fd5b803590602001918460018302840111600160201b83111715610ac757600080fd5b509092509050611d9e565b348015610ade57600080fd5b5061036460048036036040811015610af557600080fd5b50803590602001356001600160a01b031661200d565b348015610b1757600080fd5b506104a8612083565b348015610b2c57600080fd5b506104a861208d565b348015610b4157600080fd5b506104a860048036036020811015610b5857600080fd5b50356001600160a01b0316612093565b348015610b7457600080fd5b506104a860048036036020811015610b8b57600080fd5b50356001600160a01b03166120a5565b348015610ba757600080fd5b5061056b6120c0565b348015610bbc57600080fd5b5061036460048036036040811015610bd357600080fd5b60ff8235169190810190604081016020820135600160201b811115610bf757600080fd5b820183602082011115610c0957600080fd5b803590602001918460018302840111600160201b83111715610c2a57600080fd5b5090925090506120c6565b348015610c4157600080fd5b5061056b612196565b348015610c5657600080fd5b5061036461219c565b348015610c6b57600080fd5b5061059c61223c565b348015610c8057600080fd5b5061059c612241565b348015610c9557600080fd5b5061056b612246565b348015610caa57600080fd5b506104a861224c565b348015610cbf57600080fd5b5061041e60048036036020811015610cd657600080fd5b50356001600160a01b0316612252565b348015610cf257600080fd5b5061056b612379565b606481565b60005460609060ff16610d48576040805162461bcd60e51b815260206004820152601960248201526000805160206147a9833981519152604482015290519081900360640190fd5b3361200014610d885760405162461bcd60e51b815260040180806020018281038252602f815260200180614757602f913960400191505060405180910390fd5b60ff841660021415610dda57610dd383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237f92505050565b9050610e27565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b60015490565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b670de0b6b3a764000081565b61058981565b600881565b66071afd498d000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b600281565b6000805460ff16610efa576040805162461bcd60e51b815260206004820152601960248201526000805160206147a9833981519152604482015290519081900360640190fd5b868514610f385760405162461bcd60e51b815260040180806020018281038252603b81526020018061471c603b913960400191505060405180910390fd5b868314610f765760405162461bcd60e51b815260040180806020018281038252603f8152602001806145ef603f913960400191505060405180910390fd5b426078018267ffffffffffffffff161015610fc25760405162461bcd60e51b81526004018080602001828103825260248152602001806144df6024913960400191505060405180910390fd5b6402540be4003406156110065760405162461bcd60e51b815260040180806020018281038252604081526020018061481f6040913960400191505060405180910390fd5b60408051868152602080880282010190915285906000908190606090848015611039578160200160208202803683370190505b50905060005b84811015611114576402540be4008b8b8381811061105957fe5b905060200201358161106757fe5b06156110a45760405162461bcd60e51b815260040180806020018281038252603c81526020018061462e603c913960400191505060405180910390fd5b6110c98b8b838181106110b357fe5b90506020020135856124a390919063ffffffff16565b93506110f56402540be4008c8c848181106110e057fe5b905060200201356124fd90919063ffffffff16565b82828151811061110157fe5b602090810291909101015260010161103f565b506001546111399061112c908663ffffffff61253f16565b849063ffffffff6124a316565b3410156111775760405162461bcd60e51b81526004018080602001828103825260568152602001806147c96056913960600191505060405180910390fd5b611187348463ffffffff61259816565b9150611191614338565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d76003611255846125da565b61126a876402540be40063ffffffff6124fd16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156112c85781810151838201526020016112b0565b50505050905090810190601f1680156112f55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561131657600080fd5b505af115801561132a573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b60015481565b61100881565b600b81565b60005460ff166113e5576040805162461bcd60e51b815260206004820152601960248201526000805160206147a9833981519152604482015290519081900360640190fd5b33612000146114255760405162461bcd60e51b815260040180806020018281038252602f815260200180614757602f913960400191505060405180910390fd5b60ff8316600314156114755761147082828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061289592505050565b6114e4565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b33611008146115295760405162461bcd60e51b81526004018080602001828103825260238152602001806147866023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff166115c6576040805162461bcd60e51b815260206004820152601960248201526000805160206147a9833981519152604482015290519081900360640190fd5b33611005146116065760405162461bcd60e51b815260040180806020018281038252602f815260200180614452602f913960400191505060405180910390fd5b60004783106116155747611617565b825b9050670de0b6b3a76400008111156116335760009150506116b8565b80156116b5576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561166f573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60005460ff1681565b600381565b6000805460ff16611723576040805162461bcd60e51b815260206004820152601960248201526000805160206147a9833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff16101561176f5760405162461bcd60e51b81526004018080602001828103825260248152602001806144df6024913960400191505060405180910390fd5b6402540be4003406156117b35760405162461bcd60e51b815260040180806020018281038252604081526020018061481f6040913960400191505060405180910390fd5b600080806001600160a01b038816611892576001546117d990879063ffffffff6124a316565b3410156118175760405162461bcd60e51b81526004018080602001828103825260618152602001806145696061913960800191505060405180910390fd5b6402540be40086061561185b5760405162461bcd60e51b815260040180806020018281038252603c81526020018061462e603c913960400191505060405180910390fd5b61186b348763ffffffff61259816565b9050611882866402540be40063ffffffff6124fd16565b6221272160e91b93509150611b35565b6001600160a01b0388166000908152600360205260409020549250826118e95760405162461bcd60e51b81526004018080602001828103825260318152602001806145386031913960400191505060405180910390fd5b60015434101561192a5760405162461bcd60e51b815260040180806020018281038252603f81526020018061468b603f913960400191505060405180910390fd5b506001600160a01b038716600090815260026020526040902054349060088111158061197557506008811180156119755750611973876007198301600a0a63ffffffff6128f116565b155b6119b05760405162461bcd60e51b815260040180806020018281038252603c81526020018061462e603c913960400191505060405180910390fd5b6119ba8782612933565b92506119c584612973565b15611a0d576305f5e100831015611a0d5760405162461bcd60e51b815260040180806020018281038252603a815260200180614481603a913960400191505060405180910390fd5b600881101580611a275750600881108015611a2757508683115b611a625760405162461bcd60e51b81526004018080602001828103825260258152602001806145ca6025913960400191505060405180910390fd5b677ce66c50e2840000831115611aa95760405162461bcd60e51b81526004018080602001828103825260358152602001806145036035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b158015611afe57600080fd5b505af1158015611b12573d6000803e3d6000fd5b505050506040513d6020811015611b2857600080fd5b5051611b3357600080fd5b505b611b3d614338565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff168152509050828160400151600081518110611beb57fe5b602002602001018181525050878160600151600081518110611c0957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611c3b57fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611c66846125da565b611c7b866402540be40063ffffffff6124fd16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611cd9578181015183820152602001611cc1565b50505050905090810190601f168015611d065780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b3361100714611dde5760405162461bcd60e51b815260040180806020018281038252602e8152602001806146ca602e913960400191505060405180910390fd5b60208114611e33576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415611f3b576020820151670de0b6b3a76400008111801590611ee257506402540be4008106155b611f33576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155611f78565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b336110081461204d5760405162461bcd60e51b81526004018080602001828103825260238152602001806147866023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b61c35081565b60026020526000908152604090205481565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff1661210b576040805162461bcd60e51b815260206004820152601960248201526000805160206147a9833981519152604482015290519081900360640190fd5b336120001461214b5760405162461bcd60e51b815260040180806020018281038252602f815260200180614757602f913960400191505060405180910390fd5b60ff8316600314156114755761147082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a7992505050565b61100381565b60005460ff16156121f4576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b66071afd498d000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b600481565b600581565b61100081565b61271081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff1610156122e257828160ff16815181106122b657fe5b01602001516001600160f81b031916156122d5576001909101906122da565b6122e2565b60010161229b565b5060608160ff166040519080825280601f01601f191660200182016040528015612313576020820181803683370190505b50905060005b8260ff168160ff16101561236f57838160ff168151811061233657fe5b602001015160f81c60f81b828260ff168151811061235057fe5b60200101906001600160f81b031916908160001a905350600101612319565b5095945050505050565b61100481565b6060612389614384565b600061239484612b77565b91509150806123ea576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b60006123f583612cb6565b905063ffffffff811615612489576040808401516020808601516001600160a01b031660009081526002909152918220546124309190612933565b905061243a6143b9565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061247d81613003565b95505050505050610e53565b50506040805160008152602081019091529150610e539050565b6000828201838110156116b5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116b583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130df565b60008261254e575060006116b8565b8282028284828161255b57fe5b04146116b55760405162461bcd60e51b815260040180806020018281038252602181526020018061466a6021913960400191505060405180910390fd5b60006116b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613181565b60408051600680825260e08201909252606091829190816020015b60608152602001906001900390816125f55750508351909150612617906131db565b8160008151811061262457fe5b602002602001018190525061264583602001516001600160a01b03166131ee565b8160018151811061265257fe5b60200260200101819052506000836040015151905060608160405190808252806020026020018201604052801561269d57816020015b60608152602001906001900390816126885790505b50905060005b828110156126ea576126cb866040015182815181106126be57fe5b60200260200101516131db565b8282815181106126d757fe5b60209081029190910101526001016126a3565b506126f481613211565b8360028151811061270157fe5b602002602001018190525060608260405190808252806020026020018201604052801561274257816020015b606081526020019060019003908161272d5790505b50905060005b83811015612798576127798760600151828151811061276357fe5b60200260200101516001600160a01b03166131ee565b82828151811061278557fe5b6020908102919091010152600101612748565b506127a281613211565b846003815181106127af57fe5b60200260200101819052506060836040519080825280602002602001820160405280156127f057816020015b60608152602001906001900390816127db5790505b50905060005b84811015612830576128118860800151828151811061276357fe5b82828151811061281d57fe5b60209081029190910101526001016127f6565b5061283a81613211565b8560048151811061284757fe5b60200260200101819052506128698760a0015167ffffffffffffffff166131db565b8560058151811061287657fe5b602002602001018190525061288a85613211565b979650505050505050565b61289d6143e0565b60006128a88361329b565b91509150806128e85760405162461bcd60e51b81526004018080602001828103825260248152602001806146f86024913960400191505060405180910390fd5b6114e482613466565b60006116b583836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506138ea565b6000600882111561295c57612955836007198401600a0a63ffffffff6124fd16565b90506116b8565b6116b5836008849003600a0a63ffffffff61253f16565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff1610156129e957828160ff16815181106129bd57fe5b01602001516001600160f81b031916156129dc576001909101906129e1565b6129e9565b6001016129a2565b50600760ff82161015612a0157600092505050610e53565b816005820360ff1681518110612a1357fe5b6020910101516001600160f81b031916602d60f81b14612a3857600092505050610e53565b816001820360ff1681518110612a4a57fe5b6020910101516001600160f81b031916604d60f81b14612a6f57600092505050610e53565b5060019392505050565b612a81614338565b6000612a8c8361394c565b9150915080612acc5760405162461bcd60e51b81526004018080602001828103825260248152602001806144bb6024913960400191505060405180910390fd5b612ad46143e0565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b846040015151811015612b5557612b3285604001518281518110612b2457fe5b602002602001015183613bb0565b85604001518281518110612b4257fe5b6020908102919091010152600101612b04565b506080840151604083015260056060830152612b7082613466565b5050505050565b612b7f614384565b6000612b89614384565b612b91614417565b612ba2612b9d86613be9565b613c0e565b90506000805b612bb183613c58565b15612ca95780612bd357612bcc612bc784613c79565b613cc7565b8452612ca1565b8060011415612c0057612bed612be884613c79565b613d7e565b6001600160a01b03166020850152612ca1565b8060021415612c1f57612c15612bc784613c79565b6040850152612ca1565b8060031415612c4757612c34612be884613c79565b6001600160a01b03166060850152612ca1565b8060041415612c6f57612c5c612be884613c79565b6001600160a01b03166080850152612ca1565b8060051415612c9c57612c84612bc784613c79565b67ffffffffffffffff1660a085015260019150612ca1565b612ca9565b600101612ba8565b5091935090915050915091565b60208101516000906001600160a01b0316612ded578160a0015167ffffffffffffffff16421115612ce957506001610e53565b8160400151471015612cfd57506003610e53565b606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114612d54576040519150601f19603f3d011682016040523d82523d6000602084013e612d59565b606091505b5050905080612d6c575060049050610e53565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009050610e53565b8160a0015167ffffffffffffffff16421115612e0b57506001610e53565b81516020808401516001600160a01b031660009081526003909152604090205414612e3857506002610e53565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612e8857600080fd5b5086fa158015612e9c573d6000803e3d6000fd5b50505050506040513d6020811015612eb357600080fd5b50516040840151909150811015612ece575060039050610e53565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612f3f57600080fd5b5087f1158015612f53573d6000803e3d6000fd5b50505050506040513d6020811015612f6a57600080fd5b505190508015612ff7577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610e539050565b5060059150610e539050565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161301e5750508351909150613040906131db565b8160008151811061304d57fe5b602002602001018190525061306583602001516131db565b8160018151811061307257fe5b602002602001018190525061309383604001516001600160a01b03166131ee565b816002815181106130a057fe5b60200260200101819052506130be836060015163ffffffff166131db565b816003815181106130cb57fe5b6020026020010181905250610e2781613211565b6000818361316b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613130578181015183820152602001613118565b50505050905090810190601f16801561315d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161317757fe5b0495945050505050565b600081848411156131d35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613130578181015183820152602001613118565b505050900390565b60606116b86131e983613d98565b613e7e565b60408051600560a21b8318601482015260348101909152606090610e2781613e7e565b60608151600014156132325750604080516000815260208101909152610e53565b60608260008151811061324157fe5b602002602001015190506000600190505b8351811015613282576132788285838151811061326b57fe5b6020026020010151613ed0565b9150600101613252565b50610e27613295825160c060ff16613f4d565b82613ed0565b6132a36143e0565b60006132ad6143e0565b6132b5614417565b6132c1612b9d86613be9565b90506000805b6132d083613c58565b15612ca957806132f6576132e6612be884613c79565b6001600160a01b0316845261345e565b806001141561339757606061331261330d85613c79565b614045565b9050805160405190808252806020026020018201604052801561333f578160200160208202803683370190505b50602086015260005b81518110156133905761336d82828151811061336057fe5b6020026020010151613cc7565b8660200151828151811061337d57fe5b6020908102919091010152600101613348565b505061345e565b80600214156134395760606133ae61330d85613c79565b905080516040519080825280602002602001820160405280156133db578160200160208202803683370190505b50604086015260005b8151811015613390576134098282815181106133fc57fe5b6020026020010151613d7e565b8660400151828151811061341957fe5b6001600160a01b03909216602092830291909101909101526001016133e4565b8060031415612c9c5761344e612bc784613c79565b63ffffffff166060850152600191505b6001016132c7565b80516001600160a01b03166136905760005b81602001515181101561368a5760008260400151828151811061349757fe5b60200260200101516001600160a01b0316612710846020015184815181106134bb57fe5b60209081029190910101516040516000818181858888f193505050503d8060008114613503576040519150601f19603f3d011682016040523d82523d6000602084013e613508565b606091505b50509050806135cb577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061354757fe5b60200260200101518560200151858151811061355f57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613681565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061360157fe5b60200260200101518560200151858151811061361957fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613478565b506138e7565b60005b8160200151518110156138e557600082600001516001600160a01b031663a9059cbb61c350856040015185815181106136c857fe5b6020026020010151866020015186815181106136e057fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561373757600080fd5b5087f115801561374b573d6000803e3d6000fd5b50505050506040513d602081101561376257600080fd5b505190508015613826577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106137a257fe5b6020026020010151856020015185815181106137ba57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16138dc565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061385c57fe5b60200260200101518560200151858151811061387457fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101613693565b505b50565b600081836139395760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613130578181015183820152602001613118565b5082848161394357fe5b06949350505050565b613954614338565b600061395e614338565b613966614417565b613972612b9d86613be9565b90506000805b61398183613c58565b15612ca9578061399e57613997612bc784613c79565b8452613ba8565b80600114156139c6576139b3612be884613c79565b6001600160a01b03166020850152613ba8565b8060021415613a555760606139dd61330d85613c79565b90508051604051908082528060200260200182016040528015613a0a578160200160208202803683370190505b50604086015260005b8151811015613a4e57613a2b82828151811061336057fe5b86604001518281518110613a3b57fe5b6020908102919091010152600101613a13565b5050613ba8565b8060031415613aea576060613a6c61330d85613c79565b90508051604051908082528060200260200182016040528015613a99578160200160208202803683370190505b50606086015260005b8151811015613a4e57613aba8282815181106133fc57fe5b86606001518281518110613aca57fe5b6001600160a01b0390921660209283029190910190910152600101613aa2565b8060041415613b7f576060613b0161330d85613c79565b90508051604051908082528060200260200182016040528015613b2e578160200160208202803683370190505b50608086015260005b8151811015613a4e57613b4f8282815181106133fc57fe5b86608001518281518110613b5f57fe5b6001600160a01b0390921660209283029190910190910152600101613b37565b8060051415612c9c57613b94612bc784613c79565b67ffffffffffffffff1660a0850152600191505b600101613978565b60006008821115613bd257612955836007198401600a0a63ffffffff61253f16565b6116b5836008849003600a0a63ffffffff6124fd16565b613bf1614437565b506040805180820190915281518152602082810190820152919050565b613c16614417565b613c1f82614116565b613c2857600080fd5b6000613c378360200151614146565b60208085015160408051808201909152868152920190820152915050919050565b6000613c62614437565b505080518051602091820151919092015191011190565b613c81614437565b613c8a82613c58565b613c9357600080fd5b60208201516000613ca3826141a9565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613cdc57508151602110155b613ce557600080fd5b6000613cf48360200151614146565b90508083600001511015613d4f576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613d7557826020036101000a820491505b50949350505050565b8051600090601514613d8f57600080fd5b6116b882613cc7565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613ddc57506018613e00565b6fffffffffffffffffffffffffffffffff198416613dfc57506010613e00565b5060005b6020811015613e3657818181518110613e1557fe5b01602001516001600160f81b03191615613e2e57613e36565b600101613e00565b60008160200390506060816040519080825280601f01601f191660200182016040528015613e6b576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613eb05750607f60f81b82600081518110613e9e57fe5b01602001516001600160f81b03191611155b15613ebc575080610e53565b6116b8613ece8351608060ff16613f4d565b835b6060806040519050835180825260208201818101602087015b81831015613f01578051835260209283019201613ee9565b50855184518101855292509050808201602086015b81831015613f2e578051835260209283019201613f16565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613f9d576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613ff75782840160f81b81600081518110613fd957fe5b60200101906001600160f81b031916908160001a90535090506116b8565b606061400285613d98565b90508381510160370160f81b8260008151811061401b57fe5b60200101906001600160f81b031916908160001a90535061403c8282613ed0565b95945050505050565b606061405082614116565b61405957600080fd5b6000614064836142dc565b90506060816040519080825280602002602001820160405280156140a257816020015b61408f614437565b8152602001906001900390816140875790505b50905060006140b48560200151614146565b60208601510190506000805b8481101561410b576140d1836141a9565b91506040518060400160405280838152602001848152508482815181106140f457fe5b6020908102919091010152918101916001016140c0565b509195945050505050565b805160009061412757506000610e53565b6020820151805160001a9060c0821015612a6f57600092505050610e53565b8051600090811a6080811015614160576000915050610e53565b60b881108061417b575060c0811080159061417b575060f881105b1561418a576001915050610e53565b60c081101561419e5760b519019050610e53565b60f519019050610e53565b80516000908190811a60808110156141c457600191506142d5565b60b88110156141d957607e19810191506142d5565b60c081101561425357600060b78203600186019550806020036101000a86510491506001810182019350508083101561424d576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506142d5565b60f88110156142685760be19810191506142d5565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156142d3576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b80516000906142ed57506000610e53565b600080905060006143018460200151614146565b602085015185519181019250015b8082101561432f57614320826141a9565b6001909301929091019061430f565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b604051806040016040528061442a614437565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6ea26469706673582212206bf288411e92c39e8bfa404a8ee503fc38d3755589e06dd625f2e66aefbcbd2264736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(RelayerIncentivizeContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638", + Code: "6080604052600436106102815760003560e01c8063930e1b091161014f578063bd4cc830116100c1578063e75d72c71161007a578063e75d72c7146107b5578063e89a3020146107e8578063f9a2bbc714610812578063fc3e590814610827578063fd6a68791461083c578063fdd31fcd1461085157610288565b8063bd4cc83014610722578063c81b16621461074c578063d0ab528a14610761578063dc927faf14610776578063dcae76ab1461078b578063e1c7392a146107a057610288565b8063a78abc1611610113578063a78abc16146105d3578063a7c6a59d146105e8578063ab51bb96146105fd578063ac43175114610612578063ace9fcc2146106e3578063af400681146106f857610288565b8063930e1b091461054c57806396713da91461057f5780639dc0926214610594578063a1a11bf5146105a9578063a3c3c0ad146105be57610288565b806343756e5c116101f35780636f93d2e6116101ac5780636f93d2e61461048457806370fd5bad146104e357806374f2272d146104f857806375d47a0a1461050d5780637942fd05146105225780637e146cc51461053757610288565b806343756e5c146103ef578063493279b1146104045780634bf6c8821461043057806351e8067214610445578063541333071461045a5780636e47b4821461046f57610288565b806312950c461161024557806312950c46146103215780631b20087c146103365780631c6433121461034b5780633a9756121461028d5780633dffc3871461039157806340bb43c0146103bc57610288565b8063081e9d131461028d57806308f2ec06146102b4578063093f2fc4146102c95780630bee7a67146102de57806310e06a761461030c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610884565b60408051918252519081900360200190f35b3480156102c057600080fd5b506102a2610889565b3480156102d557600080fd5b506102a261088e565b3480156102ea57600080fd5b506102f3610893565b6040805163ffffffff9092168252519081900360200190f35b34801561031857600080fd5b506102a2610898565b34801561032d57600080fd5b506102a261089e565b34801561034257600080fd5b506102a26108a4565b34801561035757600080fd5b506103756004803603602081101561036e57600080fd5b50356108aa565b604080516001600160a01b039092168252519081900360200190f35b34801561039d57600080fd5b506103a6610884565b6040805160ff9092168252519081900360200190f35b3480156103c857600080fd5b506102a2600480360360208110156103df57600080fd5b50356001600160a01b03166108d1565b3480156103fb57600080fd5b506103756108e3565b34801561041057600080fd5b506104196108e9565b6040805161ffff9092168252519081900360200190f35b34801561043c57600080fd5b506103a66108ef565b34801561045157600080fd5b506103756108f4565b34801561046657600080fd5b506102a2610893565b34801561047b57600080fd5b506103756108fa565b34801561049057600080fd5b506104cf600480360360808110156104a757600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515610900565b604080519115158252519081900360200190f35b3480156104ef57600080fd5b506103a6610d92565b34801561050457600080fd5b506102a2610d97565b34801561051957600080fd5b50610375610d9d565b34801561052e57600080fd5b506103a6610da3565b34801561054357600080fd5b506102a2610da8565b34801561055857600080fd5b506102a26004803603602081101561056f57600080fd5b50356001600160a01b0316610dad565b34801561058b57600080fd5b506103a6610dbf565b3480156105a057600080fd5b50610375610dc4565b3480156105b557600080fd5b50610375610dca565b3480156105ca57600080fd5b506102a2610dd0565b3480156105df57600080fd5b506104cf610dd6565b3480156105f457600080fd5b506102a2610ddf565b34801561060957600080fd5b506102f3610de5565b34801561061e57600080fd5b506106e16004803603604081101561063557600080fd5b81019060208101813564010000000081111561065057600080fd5b82018360208201111561066257600080fd5b8035906020019184600183028401116401000000008311171561068457600080fd5b9193909290916020810190356401000000008111156106a257600080fd5b8201836020820111156106b457600080fd5b803590602001918460018302840111640100000000831117156106d657600080fd5b509092509050610dea565b005b3480156106ef57600080fd5b506102a2611538565b34801561070457600080fd5b506102a26004803603602081101561071b57600080fd5b503561153e565b34801561072e57600080fd5b506102a26004803603602081101561074557600080fd5b5035611599565b34801561075857600080fd5b506103756115b2565b34801561076d57600080fd5b506102a26115b8565b34801561078257600080fd5b506103756115be565b34801561079757600080fd5b506102a26115c4565b3480156107ac57600080fd5b506106e16115ca565b3480156107c157600080fd5b506106e1600480360360208110156107d857600080fd5b50356001600160a01b0316611693565b3480156107f457600080fd5b506103756004803603602081101561080b57600080fd5b50356117ec565b34801561081e57600080fd5b506103756117f9565b34801561083357600080fd5b506103a66117ff565b34801561084857600080fd5b50610375611804565b34801561085d57600080fd5b506102a26004803603602081101561087457600080fd5b50356001600160a01b031661180a565b600181565b602881565b605081565b606481565b600b5481565b60015481565b600c5481565b600681815481106108b757fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205481565b61100181565b61058981565b600881565b61200081565b61100581565b6000805460ff16610958576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33612000146109985760405162461bcd60e51b815260040180806020018281038252602f815260200180612378602f913960400191505060405180910390fd5b60008215610a4b576110026001600160a01b0316639a99b4f06110056109c9600e548861181c90919063ffffffff16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610a1857600080fd5b505af1158015610a2c573d6000803e3d6000fd5b505050506040513d6020811015610a4257600080fd5b50519050610b5a565b604080516309a99b4f60e41b8152611005600482015260248101869052905161100491639a99b4f09160448083019260209291908290030181600087803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b505050506040513d6020811015610abf57600080fd5b5051600e5490915015610b5a57600e54604080516309a99b4f60e41b81526110056004820152602481019290925251610b579161100291639a99b4f0916044808201926020929091908290030181600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050506040513d6020811015610b4857600080fd5b5051829063ffffffff61181c16565b90505b600c805460010190556000610b6e8261187f565b600954909150610b84908263ffffffff61181c16565b600955600a54610bac908290610ba0908563ffffffff61181c16565b9063ffffffff6118a816565b600a556001600160a01b038716600090815260056020526040902054610c1857600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038088166000908152600560209081526040808320805460010190559289168252600790522054610c9657600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260076020526040902080546001019055600c54606411610d8557600b54600954600a5460408051938452602084019290925282820152517f2649b1b772a1a74bd332a67695e285317dd722941166595741c60a00fa65bb759181900360600190a16000610d106118ea565b90506000610d1c611bce565b6001600160a01b0389166000908152600d6020526040902054909150610d5a908290610d4e908563ffffffff61181c16565b9063ffffffff61181c16565b6001600160a01b0389166000908152600d6020526040812091909155600b80546001019055600c5550505b5060019695505050505050565b600281565b60035481565b61100881565b600b81565b600581565b60056020526000908152604090205481565b600981565b61100781565b61100681565b600a5481565b60005460ff1681565b60045481565b600081565b3361100714610e2a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806122bd602e913960400191505060405180910390fd5b60005460ff16610e6b5760405162461bcd60e51b81526004018080602001828103825260218152602001806122eb6021913960400191505060405180910390fd5b610edf84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601f81527f68656164657252656c61796572526577617264526174654d6f6c6563756c650060208201529150611e4c9050565b15610fac5760208114610f235760405162461bcd60e51b81526004018080602001828103825260328152602001806123a76032913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610f6191858580838501838280828437600092019190915250611f3392505050565b9050600254811115610fa45760405162461bcd60e51b81526004018080602001828103825260608152602001806121966060913960600191505060405180910390fd5b6001556114a6565b61100584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051606081019091526022808252909250905061229b6020830139611e4c565b156110dd57602081146110495760405162461bcd60e51b815260040180806020018281038252602e81526020018061224c602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161108791858580838501838280828437600092019190915250611f3392505050565b9050801580159061109a57506001548110155b6110d55760405162461bcd60e51b815260040180806020018281038252606c81526020018061230c606c913960800191505060405180910390fd5b6002556114a6565b61115184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601a81527f63616c6c6572436f6d70656e736174696f6e4d6f6c6563756c6500000000000060208201529150611e4c9050565b1561121e57602081146111955760405162461bcd60e51b815260040180806020018281038252602e81526020018061224c602e913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916111d391858580838501838280828437600092019190915250611f3392505050565b90506004548111156112165760405162461bcd60e51b81526004018080602001828103825260568152602001806121f66056913960600191505060405180910390fd5b6003556114a6565b61129284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601d81527f63616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f7200000060208201529150611e4c9050565b1561136a57602081146112d65760405162461bcd60e51b815260040180806020018281038252602e81526020018061224c602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161131491858580838501838280828437600092019190915250611f3392505050565b9050801580159061132757506003548110155b6113625760405162461bcd60e51b81526004018080602001828103825260618152602001806121076061913960800191505060405180910390fd5b6004556114a6565b6113de84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f64796e616d69634578747261496e63656e74697665416d6f756e74000000000060208201529150611e4c9050565b1561146957602081146114225760405162461bcd60e51b815260040180806020018281038252602e815260200180612168602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161146091858580838501838280828437600092019190915250611f3392505050565b600e55506114a6565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60025481565b60006028821161154f575080611594565b816028108015611560575060508211155b1561156d57506028611594565b60508211801561157e5750606e8211155b1561158e57506078819003611594565b50600481045b919050565b6000602882116115aa575080611594565b506028611594565b61100281565b600e5481565b61100381565b60095481565b60005460ff1615611622576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60005460ff1615611670576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60018080556005600255600381905560506004556000805460ff19169091179055565b6001600160a01b0381166000908152600d6020526040902054806116f2576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c995b185e595c881c995dd85c99607a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d60205260408082208290555184929184156108fc02918591818181858888f193505050506117a25760405161100290819084156108fc029085906000818181858888f1935050505015801561175c573d6000803e3d6000fd5b506040805161100281526020810185905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a15050506117e9565b604080516001600160a01b03851681526020810184905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a150505b50565b600881815481106108b757fe5b61100081565b600381565b61100481565b600d6020526000908152604090205481565b600082820183811015611876576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600061187960025461189c60015485611f3890919063ffffffff16565b9063ffffffff611f9116565b600061187683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fd3565b600954600680546040805160208084028201810190925282815260009493859360609383018282801561194657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611928575b505050505090506060815160405190808252806020026020018201604052801561197a578160200160208202803683370190505b50905060005b8251811015611a0757600083828151811061199757fe5b6020026020010151905060006119d160056000846001600160a01b03166001600160a01b0316815260200190815260200160002054611599565b9050808484815181106119e057fe5b60209081029190910101526119fb868263ffffffff61181c16565b95505050600101611980565b506000611a2560045461189c60035488611f3890919063ffffffff16565b9050611a37858263ffffffff6118a816565b94508460015b8451811015611b0e576000611a728761189c8a888681518110611a5c57fe5b6020026020010151611f3890919063ffffffff16565b9050611abf81600d6000898681518110611a8857fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205461181c90919063ffffffff16565b600d6000888581518110611acf57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611b03838263ffffffff6118a816565b925050600101611a3d565b50611b2481600d600087600081518110611a8857fe5b600d600086600081518110611b3557fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060098190555060008090505b8451811015611bb65760056000868381518110611b8857fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611b6f565b50611bc3600660006120cf565b509450505050505b90565b600a546008805460408051602080840282018101909252828152600094938593606093830182828015611c2a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c0c575b5050505050905060608151604051908082528060200260200182016040528015611c5e578160200160208202803683370190505b50905060005b8251811015611cdd576000838281518110611c7b57fe5b602002602001015190506000611cb560076000846001600160a01b03166001600160a01b031681526020019081526020016000205461153e565b905080848481518110611cc457fe5b6020908102919091010152949094019350600101611c64565b506000611cfb60045461189c60035488611f3890919063ffffffff16565b9050611d0d858263ffffffff6118a816565b94508460015b8451811015611d97576000611d328761189c8a888681518110611a5c57fe5b9050611d4881600d6000898681518110611a8857fe5b600d6000888581518110611d5857fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611d8c838263ffffffff6118a816565b925050600101611d13565b50611dad81600d600087600081518110611a8857fe5b600d600086600081518110611dbe57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506000600a8190555060008090505b8451811015611e3f5760076000868381518110611e1157fe5b6020908102919091018101516001600160a01b03168252810191909152604001600090812055600101611df8565b50611bc3600860006120cf565b6000816040516020018082805190602001908083835b60208310611e815780518252601f199092019160209182019101611e62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310611eef5780518252601f199092019160209182019101611ed0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b600082611f4757506000611879565b82820282848281611f5457fe5b04146118765760405162461bcd60e51b815260040180806020018281038252602181526020018061227a6021913960400191505060405180910390fd5b600061187683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061206a565b600081848411156120625760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561202757818101518382015260200161200f565b50505050905090810190601f1680156120545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836120b95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561202757818101518382015260200161200f565b5060008385816120c557fe5b0495945050505050565b50805460008255906000526020600020908101906117e99190611bcb91905b8082111561210257600081556001016120ee565b509056fe746865206e657743616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c656c656e677468206f662064796e616d69634578747261496e63656e74697665416d6f756e74206d69736d617463686e65772068656164657252656c61796572526577617264526174654d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2068656164657252656c617965725265776172645261746544656e6f6d696e61746f726e65772063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2063616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f726c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7768656164657252656c617965725265776172645261746544656e6f6d696e61746f72746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374636f6e747261637420686173206e6f74206265656e20696e697469616c697a6564746865206e65772068656164657252656c617965725265776172645261746544656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2068656164657252656c61796572526577617264526174654d6f6c6563756c65746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163746c656e677468206f662068656164657252656c61796572526577617264526174654d6f6c6563756c65206d69736d61746368a26469706673582212207a24978ed859d46a1f36ba9c4c45eceb74a8f17d4d915a392823cce41e2fa19e64736f6c63430006040033", + }, + }, + } +} + +func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, statedb *state.StateDB) { + if config == nil || blockNumber == nil || statedb == nil { + return + } + var network string + switch GenesisHash { + /* Add mainnet genesis hash */ + case params.BSCGenesisHash: + network = mainNet + case params.ChapelGenesisHash: + network = chapelNet + case params.RialtoGenesisHash: + network = rialtoNet + default: + network = defaultNet + } + + logger := log.New("system-contract-upgrade", network) + if config.IsOnRamanujan(blockNumber) { + applySystemContractUpgrade(ramanujanUpgrade[network], blockNumber, statedb, logger) + } + + if config.IsOnNiels(blockNumber) { + applySystemContractUpgrade(nielsUpgrade[network], blockNumber, statedb, logger) + } + + if config.IsOnMirrorSync(blockNumber) { + applySystemContractUpgrade(mirrorUpgrade[network], blockNumber, statedb, logger) + } + + /* + apply other upgrades + */ +} + +func applySystemContractUpgrade(upgrade *Upgrade, blockNumber *big.Int, statedb *state.StateDB, logger log.Logger) { + if upgrade == nil { + logger.Info("Empty upgrade config", "height", blockNumber.String()) + return + } + + logger.Info(fmt.Sprintf("Apply upgrade %s at height %d", upgrade.UpgradeName, blockNumber.Int64())) + for _, cfg := range upgrade.Configs { + logger.Info(fmt.Sprintf("Upgrade contract %s to commit %s", cfg.ContractAddr.String(), cfg.CommitUrl)) + + if cfg.BeforeUpgrade != nil { + err := cfg.BeforeUpgrade(blockNumber, cfg.ContractAddr, statedb) + if err != nil { + panic(fmt.Errorf("contract address: %s, execute beforeUpgrade error: %s", cfg.ContractAddr.String(), err.Error())) + } + } + + newContractCode, err := hex.DecodeString(cfg.Code) + if err != nil { + panic(fmt.Errorf("failed to decode new contract code: %s", err.Error())) + } + statedb.SetCode(cfg.ContractAddr, newContractCode) + + if cfg.AfterUpgrade != nil { + err := cfg.AfterUpgrade(blockNumber, cfg.ContractAddr, statedb) + if err != nil { + panic(fmt.Errorf("contract address: %s, execute afterUpgrade error: %s", cfg.ContractAddr.String(), err.Error())) + } + } + } +} diff --git a/core/tx_pool.go b/core/tx_pool.go index e4e3c41cee..f35e1d8d7c 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -814,6 +814,7 @@ func (pool *TxPool) addTxs(txs []*types.Transaction, local, sync bool) []error { nilSlot++ } errs[nilSlot] = err + nilSlot++ } // Reorg the pool internals if needed and return done := pool.requestPromoteExecutables(dirtyAddrs) diff --git a/core/types/receipt.go b/core/types/receipt.go index a96c7525ef..00a67a05c5 100644 --- a/core/types/receipt.go +++ b/core/types/receipt.go @@ -46,6 +46,12 @@ const ( ReceiptStatusSuccessful = uint64(1) ) +// Receipt represents the results of a transaction. +type OriginalDataAndReceipt struct { + Receipt Receipt `json:"receipt"` + TxData Transaction `json:"txData"` +} + // Receipt represents the results of a transaction. type Receipt struct { // Consensus fields: These fields are defined by the Yellow Paper diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 7d304613ce..f18f773521 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -66,15 +66,18 @@ var PrecompiledContractsByzantium = map[common.Address]PrecompiledContract{ // PrecompiledContractsIstanbul contains the default set of pre-compiled Ethereum // contracts used in the Istanbul release. var PrecompiledContractsIstanbul = map[common.Address]PrecompiledContract{ - common.BytesToAddress([]byte{1}): &ecrecover{}, - common.BytesToAddress([]byte{2}): &sha256hash{}, - common.BytesToAddress([]byte{3}): &ripemd160hash{}, - common.BytesToAddress([]byte{4}): &dataCopy{}, - common.BytesToAddress([]byte{5}): &bigModExp{}, - common.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, - common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, - common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, - common.BytesToAddress([]byte{9}): &blake2F{}, + common.BytesToAddress([]byte{1}): &ecrecover{}, + common.BytesToAddress([]byte{2}): &sha256hash{}, + common.BytesToAddress([]byte{3}): &ripemd160hash{}, + common.BytesToAddress([]byte{4}): &dataCopy{}, + common.BytesToAddress([]byte{5}): &bigModExp{}, + common.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, + common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, + common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, + common.BytesToAddress([]byte{9}): &blake2F{}, + + common.BytesToAddress([]byte{100}): &tmHeaderValidate{}, + common.BytesToAddress([]byte{101}): &iavlMerkleProofValidate{}, } // RunPrecompiledContract runs and evaluates the output of a precompiled contract. diff --git a/core/vm/contracts_lightclient.go b/core/vm/contracts_lightclient.go new file mode 100644 index 0000000000..a91eb06be6 --- /dev/null +++ b/core/vm/contracts_lightclient.go @@ -0,0 +1,135 @@ +package vm + +import ( + "encoding/binary" + "fmt" + + "github.com/ethereum/go-ethereum/core/vm/lightclient" + "github.com/ethereum/go-ethereum/params" +) + +const ( + uint64TypeLength uint64 = 8 + precompileContractInputMetaDataLength uint64 = 32 + consensusStateLengthBytesLength uint64 = 32 + + tmHeaderValidateResultMetaDataLength uint64 = 32 + merkleProofValidateResultLength uint64 = 32 +) + +// input: +// consensus state length | consensus state | tendermint header | +// 32 bytes | | | +func decodeTendermintHeaderValidationInput(input []byte) (*lightclient.ConsensusState, *lightclient.Header, error) { + csLen := binary.BigEndian.Uint64(input[consensusStateLengthBytesLength-uint64TypeLength : consensusStateLengthBytesLength]) + if uint64(len(input)) <= consensusStateLengthBytesLength+csLen { + return nil, nil, fmt.Errorf("expected payload size %d, actual size: %d", consensusStateLengthBytesLength+csLen, len(input)) + } + + cs, err := lightclient.DecodeConsensusState(input[consensusStateLengthBytesLength : consensusStateLengthBytesLength+csLen]) + if err != nil { + return nil, nil, err + } + header, err := lightclient.DecodeHeader(input[consensusStateLengthBytesLength+csLen:]) + if err != nil { + return nil, nil, err + } + + return &cs, header, nil +} + +// tmHeaderValidate implemented as a native contract. +type tmHeaderValidate struct{} + +func (c *tmHeaderValidate) RequiredGas(input []byte) uint64 { + return params.TendermintHeaderValidateGas +} + +func (c *tmHeaderValidate) Run(input []byte) (result []byte, err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("internal error: %v\n", r) + } + }() + + if uint64(len(input)) <= precompileContractInputMetaDataLength { + return nil, fmt.Errorf("invalid input") + } + + payloadLength := binary.BigEndian.Uint64(input[precompileContractInputMetaDataLength-uint64TypeLength : precompileContractInputMetaDataLength]) + if uint64(len(input)) != payloadLength+precompileContractInputMetaDataLength { + return nil, fmt.Errorf("invalid input: input size should be %d, actual the size is %d", payloadLength+precompileContractInputMetaDataLength, len(input)) + } + + cs, header, err := decodeTendermintHeaderValidationInput(input[precompileContractInputMetaDataLength:]) + if err != nil { + return nil, err + } + + validatorSetChanged, err := cs.ApplyHeader(header) + if err != nil { + return nil, err + } + + consensusStateBytes, err := cs.EncodeConsensusState() + if err != nil { + return nil, err + } + + // result + // | validatorSetChanged | empty | consensusStateBytesLength | new consensusState | + // | 1 byte | 23 bytes | 8 bytes | | + lengthBytes := make([]byte, tmHeaderValidateResultMetaDataLength) + if validatorSetChanged { + copy(lengthBytes[:1], []byte{0x01}) + } + consensusStateBytesLength := uint64(len(consensusStateBytes)) + binary.BigEndian.PutUint64(lengthBytes[tmHeaderValidateResultMetaDataLength-uint64TypeLength:], consensusStateBytesLength) + + result = append(lengthBytes, consensusStateBytes...) + + return result, nil +} + +//------------------------------------------------------------------------------------------------------------------------------------------------ + +// tmHeaderValidate implemented as a native contract. +type iavlMerkleProofValidate struct{} + +func (c *iavlMerkleProofValidate) RequiredGas(input []byte) uint64 { + return params.IAVLMerkleProofValidateGas +} + +// input: +// | payload length | payload | +// | 32 bytes | | +func (c *iavlMerkleProofValidate) Run(input []byte) (result []byte, err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("internal error: %v\n", r) + } + }() + + if uint64(len(input)) <= precompileContractInputMetaDataLength { + return nil, fmt.Errorf("invalid input: input should include %d bytes payload length and payload", precompileContractInputMetaDataLength) + } + + payloadLength := binary.BigEndian.Uint64(input[precompileContractInputMetaDataLength-uint64TypeLength : precompileContractInputMetaDataLength]) + if uint64(len(input)) != payloadLength+precompileContractInputMetaDataLength { + return nil, fmt.Errorf("invalid input: input size should be %d, actual the size is %d", payloadLength+precompileContractInputMetaDataLength, len(input)) + } + + kvmp, err := lightclient.DecodeKeyValueMerkleProof(input[precompileContractInputMetaDataLength:]) + if err != nil { + return nil, err + } + + valid := kvmp.Validate() + if !valid { + return nil, fmt.Errorf("invalid merkle proof") + } + + result = make([]byte, merkleProofValidateResultLength) + binary.BigEndian.PutUint64(result[merkleProofValidateResultLength-uint64TypeLength:], 0x01) + return result, nil +} diff --git a/core/vm/contracts_lightclient_test.go b/core/vm/contracts_lightclient_test.go new file mode 100644 index 0000000000..cf17c03559 --- /dev/null +++ b/core/vm/contracts_lightclient_test.go @@ -0,0 +1,105 @@ +package vm + +import ( + "encoding/binary" + "encoding/hex" + "testing" + + "github.com/ethereum/go-ethereum/core/vm/lightclient" + "github.com/stretchr/testify/require" +) + +const ( + testHeight uint64 = 66848226 +) + +func TestTmHeaderValidateAndMerkleProofValidate(t *testing.T) { + consensusStateBytes, err := hex.DecodeString("42696e616e63652d436861696e2d4e696c650000000000000000000000000000000000000" + + "3fc05e2b7029751d2a6581efc2f79712ec44d8b4981850325a7feadaa58ef4ddaa18a9380d9ab0fc10d18ca0e0832d5f4c063c5489ec1443dfb738" + + "252d038a82131b27ae17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f000000174876e800184e7b103d34c41003f9b" + + "864d5f8c1adda9bd0436b253bb3c844bc739c1e77c9000000174876e8004d420aea843e92a0cfe69d89696dff6827769f9cb52a249af537ce89bf2" + + "a4b74000000174876e800bd03de9f8ab29e2800094e153fac6f696cfa512536c9c2f804dcb2c2c4e4aed6000000174876e8008f4a74a07351895dd" + + "f373057b98fae6dfaf2cd21f37a063e19601078fe470d53000000174876e8004a5d4753eb79f92e80efe22df7aca4f666a4f44bf81c536c4a09d4b" + + "9c5b654b5000000174876e800c80e9abef7ff439c10c68fe8f1303deddfc527718c3b37d8ba6807446e3c827a000000174876e8009142afcc691b7" + + "cc05d26c7b0be0c8b46418294171730e079f384fde2fa50bafc000000174876e80049b288e4ebbb3a281c2d546fc30253d5baf08993b6e5d295fb7" + + "87a5b314a298e000000174876e80004224339688f012e649de48e241880092eaa8f6aa0f4f14bfcf9e0c76917c0b6000000174876e8004034b37ce" + + "da8a0bf13b1abaeee7a8f9383542099a554d219b93d0ce69e3970e8000000174876e800") + require.NoError(t, err) + + cs, err := lightclient.DecodeConsensusState(consensusStateBytes) + require.NoError(t, err) + + headerBytes, err := hex.DecodeString("e3210a92130abb020a02080a121242696e616e63652d436861696e2d4e696c6518e38bf01f220c08e191aef20510f5f4e4c70230dae0c7173a480a20102b54820dd8fb5bc2c4e875ee573fa294d9b7b7ceb362aa8fd21b33dee41b1c12240801122082f341511f3e6b89d6177fd31f8a106013ba09d6e12ef40a7dec885d81b687634220b1b77e6977e0cd0177e3102a78833c9e152aa646ed4fb5a77e8af58c9867eec0522080d9ab0fc10d18ca0e0832d5f4c063c5489ec1443dfb738252d038a82131b27a5a2080d9ab0fc10d18ca0e0832d5f4c063c5489ec1443dfb738252d038a82131b27a6220294d8fbd0b94b767a7eba9840f299a3586da7fe6b5dead3b7eecba193c400f936a20a3e248bc209955054d880e4d89ff3c0419c0cd77681f4b4c6649ead5545054b982011462633d9db7ed78e951f79913fdc8231aa77ec12b12d1100a480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be212b601080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510cebfe23e321406fd60078eb4c2356137dd50036597db267cf61642409276f20ad4b152f91c344bd63ac691bad66e04e228a8b58dca293ff0bd10f8aef6dfbcecae49e32b09d89e10b771a6c01628628596a95e126b04763560c66c0f12b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510a4caa532321418e69cc672973992bb5f76d049a5b2c5ddf77436380142409ed2b74fa835296d552e68c439dd4ee3fa94fb197282edcc1cc815c863ca42a2c9a73475ff6be9064371a61655a3c31d2f0acc89c3a4489ad4c2671aef52360512b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510a69eca2f3214344c39bb8f4512d6cab1f6aafac1811ef9d8afdf38024240de2768ead90011bcbb1914abc1572749ab7b81382eb81cff3b41c56edc12470a7b8a4d61f8b4ca7b2cb7e24706edd219455796b4db74cd36965859f91dc8910312b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510dcdd833b321437ef19af29679b368d2b9e9de3f8769b357866763803424072ddfe0aeb13616b3f17eb60b19a923ec51fcc726625094aa069255c829c8cdd9e242080a1e559b0030fe9a0db19fd34e392bd78df12a9caff9f2b811bc1ac0a12b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510e9f2f859321462633d9db7ed78e951f79913fdc8231aa77ec12b38044240f5f61c640ab2402b44936de0d24e7b439df78bc3ef15467ecb29b92ece4aa0550790d5ce80761f2ac4b0e3283969725c42343749d9b44b179b2d4fced66c5d0412b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510ff90f55532147b343e041ca130000a8bc00c35152bd7e774003738054240df6e298b3efd42eb536e68a0210bc921e8b5dc145fe965f63f4d3490064f239f2a54a6db16c96086e4ae52280c04ad8b32b44f5ff3d41f0c364949ccb628c50312b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510cad7c931321491844d296bd8e591448efc65fd6ad51a888d58fa3806424030298627da1afd28229aac150f553724b594989e59136d6a175d84e45a4dee344ff9e0eeb69fdf29abb6d833adc3e1ccdc87b2a65019ef5fb627c44d9d132c0012b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510c8c296323214b3727172ce6473bc780298a2d66c12f1a14f5b2a38074240918491100730b4523f0c85409f6d1cca9ebc4b8ca6df8d55fe3d85158fa43286608693c50332953e1d3b93e3e78b24e158d6a2275ce8c6c7c07a7a646a19200312b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef2051086f1a2403214b6f20c7faa2b2f6f24518fa02b71cb5f4a09fba338084240ca59c9fc7f6ab660e9970fc03e5ed588ccb8be43fe5a3e8450287b726f29d039e53fe888438f178ac63c3d2ca969cd8c2fbc8606f067634339b6a94a7382960212b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef2051080efbb543214e0dd72609cc106210d1aa13936cb67b93a0aee2138094240e787a21f5cb7052624160759a9d379dd9db144f2b498bca026375c9ce8ecdc2a0936af1c309b3a0f686c92bf5578b595a4ca99036a19c9fc50d3718fd454b30012b801080210e38bf01f22480a207eaabf7df1081377e06e08efe7ad17974049380bdd65a9b053c099ef80ff6e6f122408011220d153cc308d9cb96ca43ffeceaae1ee85794c83d17408ff76cfee92f5e91d0be22a0b08e291aef20510ddf8d85a3214fc3108dc3814888f4187452182bc1baf83b71bc9380a4240d51ea31f6449eed71de22339722af1edbb0b21401037d85882b32a2ed8ae9127f2df4d1da2092729e582812856227ed6cdf98a3f60203d1ff80bd635fb03bb0912a4070a4f0a1406fd60078eb4c2356137dd50036597db267cf61612251624de6420e17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f1880d0dbc3f4022080e0ebdaf2e2ffffff010a4b0a1418e69cc672973992bb5f76d049a5b2c5ddf7743612251624de6420184e7b103d34c41003f9b864d5f8c1adda9bd0436b253bb3c844bc739c1e77c91880d0dbc3f4022080d0dbc3f4020a4b0a14344c39bb8f4512d6cab1f6aafac1811ef9d8afdf12251624de64204d420aea843e92a0cfe69d89696dff6827769f9cb52a249af537ce89bf2a4b741880d0dbc3f4022080d0dbc3f4020a4b0a1437ef19af29679b368d2b9e9de3f8769b3578667612251624de6420bd03de9f8ab29e2800094e153fac6f696cfa512536c9c2f804dcb2c2c4e4aed61880d0dbc3f4022080d0dbc3f4020a4b0a1462633d9db7ed78e951f79913fdc8231aa77ec12b12251624de64208f4a74a07351895ddf373057b98fae6dfaf2cd21f37a063e19601078fe470d531880d0dbc3f4022080d0dbc3f4020a4b0a147b343e041ca130000a8bc00c35152bd7e774003712251624de64204a5d4753eb79f92e80efe22df7aca4f666a4f44bf81c536c4a09d4b9c5b654b51880d0dbc3f4022080d0dbc3f4020a4b0a1491844d296bd8e591448efc65fd6ad51a888d58fa12251624de6420c80e9abef7ff439c10c68fe8f1303deddfc527718c3b37d8ba6807446e3c827a1880d0dbc3f4022080d0dbc3f4020a4b0a14b3727172ce6473bc780298a2d66c12f1a14f5b2a12251624de64209142afcc691b7cc05d26c7b0be0c8b46418294171730e079f384fde2fa50bafc1880d0dbc3f4022080d0dbc3f4020a4b0a14b6f20c7faa2b2f6f24518fa02b71cb5f4a09fba312251624de642049b288e4ebbb3a281c2d546fc30253d5baf08993b6e5d295fb787a5b314a298e1880d0dbc3f4022080d0dbc3f4020a4b0a14e0dd72609cc106210d1aa13936cb67b93a0aee2112251624de642004224339688f012e649de48e241880092eaa8f6aa0f4f14bfcf9e0c76917c0b61880d0dbc3f4022080d0dbc3f4020a4b0a14fc3108dc3814888f4187452182bc1baf83b71bc912251624de64204034b37ceda8a0bf13b1abaeee7a8f9383542099a554d219b93d0ce69e3970e81880d0dbc3f4022080d0dbc3f402124f0a1406fd60078eb4c2356137dd50036597db267cf61612251624de6420e17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f1880d0dbc3f4022080e0ebdaf2e2ffffff011aa4070a4f0a1406fd60078eb4c2356137dd50036597db267cf61612251624de6420e17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f1880d0dbc3f4022080e0ebdaf2e2ffffff010a4b0a1418e69cc672973992bb5f76d049a5b2c5ddf7743612251624de6420184e7b103d34c41003f9b864d5f8c1adda9bd0436b253bb3c844bc739c1e77c91880d0dbc3f4022080d0dbc3f4020a4b0a14344c39bb8f4512d6cab1f6aafac1811ef9d8afdf12251624de64204d420aea843e92a0cfe69d89696dff6827769f9cb52a249af537ce89bf2a4b741880d0dbc3f4022080d0dbc3f4020a4b0a1437ef19af29679b368d2b9e9de3f8769b3578667612251624de6420bd03de9f8ab29e2800094e153fac6f696cfa512536c9c2f804dcb2c2c4e4aed61880d0dbc3f4022080d0dbc3f4020a4b0a1462633d9db7ed78e951f79913fdc8231aa77ec12b12251624de64208f4a74a07351895ddf373057b98fae6dfaf2cd21f37a063e19601078fe470d531880d0dbc3f4022080d0dbc3f4020a4b0a147b343e041ca130000a8bc00c35152bd7e774003712251624de64204a5d4753eb79f92e80efe22df7aca4f666a4f44bf81c536c4a09d4b9c5b654b51880d0dbc3f4022080d0dbc3f4020a4b0a1491844d296bd8e591448efc65fd6ad51a888d58fa12251624de6420c80e9abef7ff439c10c68fe8f1303deddfc527718c3b37d8ba6807446e3c827a1880d0dbc3f4022080d0dbc3f4020a4b0a14b3727172ce6473bc780298a2d66c12f1a14f5b2a12251624de64209142afcc691b7cc05d26c7b0be0c8b46418294171730e079f384fde2fa50bafc1880d0dbc3f4022080d0dbc3f4020a4b0a14b6f20c7faa2b2f6f24518fa02b71cb5f4a09fba312251624de642049b288e4ebbb3a281c2d546fc30253d5baf08993b6e5d295fb787a5b314a298e1880d0dbc3f4022080d0dbc3f4020a4b0a14e0dd72609cc106210d1aa13936cb67b93a0aee2112251624de642004224339688f012e649de48e241880092eaa8f6aa0f4f14bfcf9e0c76917c0b61880d0dbc3f4022080d0dbc3f4020a4b0a14fc3108dc3814888f4187452182bc1baf83b71bc912251624de64204034b37ceda8a0bf13b1abaeee7a8f9383542099a554d219b93d0ce69e3970e81880d0dbc3f4022080d0dbc3f402124f0a1406fd60078eb4c2356137dd50036597db267cf61612251624de6420e17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f1880d0dbc3f4022080e0ebdaf2e2ffffff01") + require.NoError(t, err) + + parameterInput := make([]byte, 32+len(consensusStateBytes)+len(headerBytes)) + binary.BigEndian.PutUint64(parameterInput[24:32], uint64(len(consensusStateBytes))) + copy(parameterInput[32:32+len(consensusStateBytes)], consensusStateBytes) + copy(parameterInput[32+len(consensusStateBytes):], headerBytes) + + totalLengthPrefix := make([]byte, 32) + binary.BigEndian.PutUint64(totalLengthPrefix[0:8], 0) + binary.BigEndian.PutUint64(totalLengthPrefix[8:16], 0) + binary.BigEndian.PutUint64(totalLengthPrefix[16:24], 0) + binary.BigEndian.PutUint64(totalLengthPrefix[24:], uint64(len(parameterInput))) + input := append(totalLengthPrefix, parameterInput...) + + var tmHeaderValidateContract tmHeaderValidate + syncedConsensusStateBytes, err := tmHeaderValidateContract.Run(input) + require.NoError(t, err) + syncedConsensusState, err := lightclient.DecodeConsensusState(syncedConsensusStateBytes[32:]) + require.NoError(t, err) + require.Equal(t, testHeight+1, syncedConsensusState.Height) + require.Equal(t, cs.ChainID, syncedConsensusState.ChainID) + + headerBytes, err = hex.DecodeString("c11d0af00e0aba020a02080a121242696e616e63652d436861696e2d4e696c65188596a822220b08bd85c2f30510e8f3d65730a986f7173a480a209e4b742cb3d59618c5af9d9b9d8b6a8408802131a968c6d1e3a516c9548cedc01224080112201dd8f3e89b01db52d79f89a87c8abfe9836e8b828ed33d78e202664dfead9c0e422018c8c46d7665a5db717331ff3deebe8f9986352d308c5950cf1a09286439dd9d522080d9ab0fc10d18ca0e0832d5f4c063c5489ec1443dfb738252d038a82131b27a5a2080d9ab0fc10d18ca0e0832d5f4c063c5489ec1443dfb738252d038a82131b27a6220294d8fbd0b94b767a7eba9840f299a3586da7fe6b5dead3b7eecba193c400f936a202c69c314b4de5c8035253c8bc0771d9ca17b1b23a57c0c6d068b57579791cae2820114b3727172ce6473bc780298a2d66c12f1a14f5b2a12b00c0a480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b120012b9010802108596a82222480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b2a0c08bd85c2f30510cff5c5a102321418e69cc672973992bb5f76d049a5b2c5ddf7743638014240129b1ac9bcf178022f358161f90a0c83d8344be7ad7e1f55c98b4a7f366a95816e80a7e2beac669c73fa5bd6e17693f8a70347ab785c7883a8ef2c9d7464b50a12b9010802108596a82222480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b2a0c08bd85c2f30510e3f7919d023214344c39bb8f4512d6cab1f6aafac1811ef9d8afdf38024240ad6d56ffd8062b70f6c2bf7345a26fcb0a5de2bc477d21e71d780c7f029098aba7efaa2aae1b945602c22d0d1ccdec1e45e7d14d177677a2ba23feeffa88c103120012b9010802108596a82222480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b2a0c08bd85c2f305109c88b58202321462633d9db7ed78e951f79913fdc8231aa77ec12b3804424017c205e1eade76097e659a2c3a20bd7fc61e383b5b631499a8bf26ac81c537d7369ddc5be0c4f8a62c6cfb55d5d6cd4ce75aa57c03888aef365d0702032e6d0c12b9010802108596a82222480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b2a0c08bd85c2f30510bcbda5ff0132147b343e041ca130000a8bc00c35152bd7e7740037380542404c8536a8a2af12e88176699c93ee6c9032240b58b6f92897a7724bd41447f81ae8533e2e3676a44d398296006c1d51d14c9eb2ebca5ac02a5925c549de571b0012b9010802108596a82222480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b2a0c08bd85c2f30510968bff9c02321491844d296bd8e591448efc65fd6ad51a888d58fa38064240f1b55166334e16b2cf1e6bf35521a17b6fc8699807df66495c14508ed5c75b27bf0ba19f7ad4302166d673f027a37148f6ecf4b87fe60b6f196bfc944df3c90412b9010802108596a82222480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b2a0c08bd85c2f30510899ab59f023214b3727172ce6473bc780298a2d66c12f1a14f5b2a38074240b90deb286343c378597d36c381b11f720b9994cc4aefb28ebe840240bd68b4e8855b8508f072133e36a92f4160e5172dd4e086cde6799dc957e3d971784a130e120012b9010802108596a82222480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b2a0c08bd85c2f30510e7c1dffe013214e0dd72609cc106210d1aa13936cb67b93a0aee213809424085424cd5908cc12b9ce35b4891f20af1791f5a7a8f7dfef225a790890a1639badef168a57005ad64d167faf86c97c4bdfeba1d5307182abeb4ef768b4056c00d12b9010802108596a82222480a20c24c5e913fe4b8eec95d473d671c2dfc2cf651118b37e83661a24a1b8ef842251224080112206310a09cbcf41fd71c55e524c7a91f71414bb31ecf6e7b74161e8ec04a3c7b2b2a0c08bd85c2f305108bd8c5ff013214fc3108dc3814888f4187452182bc1baf83b71bc9380a424013382f84fa5d21f6a274159300b5fb20e21705c80b45beff6ca48d84ffa7ab700275e8017bcf69ac70f0c76bd497977c7373e3a9cfdfc09355cf5427272e4d0512a4070a4f0a1406fd60078eb4c2356137dd50036597db267cf61612251624de6420e17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f1880d0dbc3f4022080e0ebdaf2e2ffffff010a4b0a1418e69cc672973992bb5f76d049a5b2c5ddf7743612251624de6420184e7b103d34c41003f9b864d5f8c1adda9bd0436b253bb3c844bc739c1e77c91880d0dbc3f4022080d0dbc3f4020a4b0a14344c39bb8f4512d6cab1f6aafac1811ef9d8afdf12251624de64204d420aea843e92a0cfe69d89696dff6827769f9cb52a249af537ce89bf2a4b741880d0dbc3f4022080d0dbc3f4020a4b0a1437ef19af29679b368d2b9e9de3f8769b3578667612251624de6420bd03de9f8ab29e2800094e153fac6f696cfa512536c9c2f804dcb2c2c4e4aed61880d0dbc3f4022080d0dbc3f4020a4b0a1462633d9db7ed78e951f79913fdc8231aa77ec12b12251624de64208f4a74a07351895ddf373057b98fae6dfaf2cd21f37a063e19601078fe470d531880d0dbc3f4022080d0dbc3f4020a4b0a147b343e041ca130000a8bc00c35152bd7e774003712251624de64204a5d4753eb79f92e80efe22df7aca4f666a4f44bf81c536c4a09d4b9c5b654b51880d0dbc3f4022080d0dbc3f4020a4b0a1491844d296bd8e591448efc65fd6ad51a888d58fa12251624de6420c80e9abef7ff439c10c68fe8f1303deddfc527718c3b37d8ba6807446e3c827a1880d0dbc3f4022080d0dbc3f4020a4b0a14b3727172ce6473bc780298a2d66c12f1a14f5b2a12251624de64209142afcc691b7cc05d26c7b0be0c8b46418294171730e079f384fde2fa50bafc1880d0dbc3f4022080d0dbc3f4020a4b0a14b6f20c7faa2b2f6f24518fa02b71cb5f4a09fba312251624de642049b288e4ebbb3a281c2d546fc30253d5baf08993b6e5d295fb787a5b314a298e1880d0dbc3f4022080d0dbc3f4020a4b0a14e0dd72609cc106210d1aa13936cb67b93a0aee2112251624de642004224339688f012e649de48e241880092eaa8f6aa0f4f14bfcf9e0c76917c0b61880d0dbc3f4022080d0dbc3f4020a4b0a14fc3108dc3814888f4187452182bc1baf83b71bc912251624de64204034b37ceda8a0bf13b1abaeee7a8f9383542099a554d219b93d0ce69e3970e81880d0dbc3f4022080d0dbc3f402124f0a1406fd60078eb4c2356137dd50036597db267cf61612251624de6420e17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f1880d0dbc3f4022080e0ebdaf2e2ffffff011aa4070a4f0a1406fd60078eb4c2356137dd50036597db267cf61612251624de6420e17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f1880d0dbc3f4022080e0ebdaf2e2ffffff010a4b0a1418e69cc672973992bb5f76d049a5b2c5ddf7743612251624de6420184e7b103d34c41003f9b864d5f8c1adda9bd0436b253bb3c844bc739c1e77c91880d0dbc3f4022080d0dbc3f4020a4b0a14344c39bb8f4512d6cab1f6aafac1811ef9d8afdf12251624de64204d420aea843e92a0cfe69d89696dff6827769f9cb52a249af537ce89bf2a4b741880d0dbc3f4022080d0dbc3f4020a4b0a1437ef19af29679b368d2b9e9de3f8769b3578667612251624de6420bd03de9f8ab29e2800094e153fac6f696cfa512536c9c2f804dcb2c2c4e4aed61880d0dbc3f4022080d0dbc3f4020a4b0a1462633d9db7ed78e951f79913fdc8231aa77ec12b12251624de64208f4a74a07351895ddf373057b98fae6dfaf2cd21f37a063e19601078fe470d531880d0dbc3f4022080d0dbc3f4020a4b0a147b343e041ca130000a8bc00c35152bd7e774003712251624de64204a5d4753eb79f92e80efe22df7aca4f666a4f44bf81c536c4a09d4b9c5b654b51880d0dbc3f4022080d0dbc3f4020a4b0a1491844d296bd8e591448efc65fd6ad51a888d58fa12251624de6420c80e9abef7ff439c10c68fe8f1303deddfc527718c3b37d8ba6807446e3c827a1880d0dbc3f4022080d0dbc3f4020a4b0a14b3727172ce6473bc780298a2d66c12f1a14f5b2a12251624de64209142afcc691b7cc05d26c7b0be0c8b46418294171730e079f384fde2fa50bafc1880d0dbc3f4022080d0dbc3f4020a4b0a14b6f20c7faa2b2f6f24518fa02b71cb5f4a09fba312251624de642049b288e4ebbb3a281c2d546fc30253d5baf08993b6e5d295fb787a5b314a298e1880d0dbc3f4022080d0dbc3f4020a4b0a14e0dd72609cc106210d1aa13936cb67b93a0aee2112251624de642004224339688f012e649de48e241880092eaa8f6aa0f4f14bfcf9e0c76917c0b61880d0dbc3f4022080d0dbc3f4020a4b0a14fc3108dc3814888f4187452182bc1baf83b71bc912251624de64204034b37ceda8a0bf13b1abaeee7a8f9383542099a554d219b93d0ce69e3970e81880d0dbc3f4022080d0dbc3f402124f0a1406fd60078eb4c2356137dd50036597db267cf61612251624de6420e17cbe9c20cdcfdf876b3b12978d3264a007fcaaa71c4cdb701d9ebc0323f44f1880d0dbc3f4022080e0ebdaf2e2ffffff01") + require.NoError(t, err) + + syncedConsensusStateBytes = syncedConsensusStateBytes[32:] + parameterInput = make([]byte, 32+len(syncedConsensusStateBytes)+len(headerBytes)) + binary.BigEndian.PutUint64(parameterInput[24:32], uint64(len(syncedConsensusStateBytes))) + copy(parameterInput[32:32+len(syncedConsensusStateBytes)], syncedConsensusStateBytes) + copy(parameterInput[32+len(syncedConsensusStateBytes):], headerBytes) + + totalLengthPrefix = make([]byte, 32) + binary.BigEndian.PutUint64(totalLengthPrefix[24:32], uint64(len(parameterInput))) + input = append(totalLengthPrefix, parameterInput...) + + syncedAgainConsensusStateBytes, err := tmHeaderValidateContract.Run(input) + require.NoError(t, err) + syncedAgainConsensusState, err := lightclient.DecodeConsensusState(syncedAgainConsensusStateBytes[32:]) + require.NoError(t, err) + + newAppHash := syncedAgainConsensusState.AppHash + key, err := hex.DecodeString("6163636f756e743a8a4e2eb018bdf98a8f53ec755740ffc728637a1d") + require.NoError(t, err) + value, err := hex.DecodeString("4bdc4c270a750a148a4e2eb018bdf98a8f53ec755740ffc728637a1d12110a0941544348412d3733301080f69bf321120b0a03424e4210e8baeb8d44120f0a075050432d303041108094ebdc031a26eb5ae98721031c199c92e5b0080967da99be27cf2da53317441b4a663e6d9c6caf02be1fdbdc20d7962b2815") + require.NoError(t, err) + proofBytes, err := hex.DecodeString("0add070a066961766c3a76121c6163636f756e743a8a4e2eb018bdf98a8f53ec755740ffc728637a1d1ab407b2070aaf070a2d081810cdfd2b188096a82222209f223f804e2d94ac51c4321b0687397012e6d95eb9783b03bc790da631004c7c0a2d081710adb31a18f395a8222a20d2a38865de82383ccce0140513b65cec1bf2ae6cd7dfeb22eb6faadb4e26b26f0a2d081510b2990b18f395a82222208a02bbd5a695dfc772627ac8744aa9cf30ae26575bdce8c96a9a0d0999175b430a2d081410e6ff0418f395a8222a20d39619c779be909e67f23499fb74eb2c19afd7f21523401d4ccf7e917db5cd600a2d081210e3fe0118f395a8222a20a10cc73843f889d9e03a463eb135e928bb980e19734344cba0fbf4e8a4c5258b0a2c081010dd6518f395a8222a2007fd15843a2fd3f58d021b0e072a6c70742d7a3d993a922445e3491e1c14ee8e0a2c080f10cc2a18eda6a7222a20088942d7b30abd021d8e9505cc41313fad87c8c10a799f3b51018b7b2cfe4ad90a2c080d10b70d18eda6a7222a2091a37bc44d0c61e3752ddc59eb390355ab65e8a9fb453be4f0acec537f1ca14f0a2c080c10890818eda6a72222201cfc317855a06667c45812fe36efe33af05671dfe0d9b56b02662011af2e79e30a2c080b10ac0318c4b0ee212220aeb454a4b3243b6269a2fd8841dca9a951c53b30f1e27da91063dae7224402c70a2c080910e40118c4b0ee212a20441340a4de6498f861b97b3f3ad9603af055e5af51a0d96fff2ae28e3c5c6c9a0a2c0808108d0118c4b0ee212220ae32ea4b9ab7b53571da320e2815fd8b2c278124961cca4a1849a799842424450a2b0807104d18c4b0ee212220e2804c9b7f045ec0b4ab20920a937b82fda8b7a9ddd12b21637335b915cfda550a2b0806102418a5f4c7192a20ec85f22addedfc82c771af5b4c77544b7c1d7c5bbac33f2712dfba1045ebdbd00a2b0805101118a5f4c7192a2071ade34dcc447a0ba8adc603080633d15c06f3525830c86ebce35eca0a4921fc0a2b0804100c18a5f4c7192a205190bce93993e65b266a3417ed511df8897a812cb4b62569e5afcfbec10b69cd0a2b0803100618a5f4c7192220b76c6884f1d412ac10bfb3987fb7d26f0330b2a85539509ebc5c6bdec2f95d520a2b0802100418a5f4c71922206a285b4a4f9d1c687bbafa1f3649b6a6e32b1a85dd0402421210683e846cf0020a2b0801100218a5f4c7192220033b3f7c6dcb258b6e55545e7a4f51539447cd595eb8a2e373ba0015502da1051a450a1c6163636f756e743a8a4e2eb018bdf98a8f53ec755740ffc728637a1d12201a272295e94cf1d8090bdb019dde48e9dab026ad2c3e43aaa7e61cc954a9245d18a5f4c7190ab6040a0a6d756c746973746f726512036163631aa204a0040a9d040a300a0364657812290a27088496a822122038fc49f49648fec62acc434151a51eaa378c1b20a730a749548e36f1529422500a300a03676f7612290a27088496a8221220a78ce489bdf08b9ee869c184876e1623dc38b3e64a5cf1a0005f97976c64deac0a380a0b61746f6d69635f7377617012290a27088496a8221220544c2fa38f61e10a39ec00b3e724d5834761268bb455cdbf5843bcf1531f8fbc0a300a0376616c12290a27088496a82212201f71082c9f6f45fb456b2c00b41e50d2f662f2dfec3cb6965f19d214bf02f3980a0f0a046d61696e12070a05088496a8220a320a057374616b6512290a27088496a82212200dd467343c718f240e50b4feac42970fc8c1c69a018be955f9c27913ac1f8b3c0a300a0361636312290a27088496a8221220270c19ccc9c40c5176b3dfbd8af734c97a307e0dbd8df9e286dcd5d709f973ed0a330a06746f6b656e7312290a27088496a8221220c4f96eedf50c83964de9df013afec2e545012d92528b643a5166c828774187b60a320a05706169727312290a27088496a8221220351c55cfda84596ecd22ebc77013662aba97f81f19d9ef3d150213bb07c823060a360a0974696d655f6c6f636b12290a27088496a8221220e7adf5bd30ce022decf0e9341bf05c464ed70cdbc97423bd2bab8f3571e5179b0a330a06706172616d7312290a27088496a822122042a9dfc356ca435db131eb41fb1975c8482f2434537918665e530b0b4633b5f9") + require.NoError(t, err) + + merkleProofInput := make([]byte, 32+32+len(key)+32+len(value)+32+len(proofBytes)) + copy(merkleProofInput[:32], "acc") + binary.BigEndian.PutUint64(merkleProofInput[32+24:32+32], uint64(len(key))) + copy(merkleProofInput[32+32:32+32+len(key)], key) + + binary.BigEndian.PutUint64(merkleProofInput[32+32+len(key)+24:32+32+len(key)+32], uint64(len(value))) + copy(merkleProofInput[32+32+len(key)+32:32+32+len(key)+32+len(value)], value) + + copy(merkleProofInput[32+32+len(key)+32+len(value):32+32+len(key)+32+len(value)+32], newAppHash) + copy(merkleProofInput[32+32+len(key)+32+len(value)+32:], proofBytes) + + totalLengthPrefix = make([]byte, 32) + binary.BigEndian.PutUint64(totalLengthPrefix[0:8], 0) + binary.BigEndian.PutUint64(totalLengthPrefix[8:16], 0) + binary.BigEndian.PutUint64(totalLengthPrefix[16:24], 0) + binary.BigEndian.PutUint64(totalLengthPrefix[24:], uint64(len(merkleProofInput))) + input = append(totalLengthPrefix, merkleProofInput...) + + iavlMerkleProofValidateContract := iavlMerkleProofValidate{} + success, err := iavlMerkleProofValidateContract.Run(input) + require.NoError(t, err) + expectedResult := make([]byte, 32) + binary.BigEndian.PutUint64(expectedResult[24:], 0x01) + require.Equal(t, expectedResult, success) +} diff --git a/core/vm/interpreter.go b/core/vm/interpreter.go index 5d213acc83..949a39dacf 100644 --- a/core/vm/interpreter.go +++ b/core/vm/interpreter.go @@ -162,10 +162,11 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( // as every returning call will return new data anyway. in.returnData = nil + // TODO temporary fix for issue // Don't bother with the execution if there's no code. - if len(contract.Code) == 0 { - return nil, nil - } + //if len(contract.Code) == 0 { + // return nil, nil + //} var ( op OpCode // current opcode diff --git a/core/vm/lightclient/multistoreproof.go b/core/vm/lightclient/multistoreproof.go new file mode 100644 index 0000000000..819b7f0011 --- /dev/null +++ b/core/vm/lightclient/multistoreproof.go @@ -0,0 +1,138 @@ +package lightclient + +import ( + "bytes" + "fmt" + + "github.com/tendermint/iavl" + "github.com/tendermint/tendermint/crypto/merkle" + cmn "github.com/tendermint/tendermint/libs/common" +) + +// MultiStoreProof defines a collection of store proofs in a multi-store +type MultiStoreProof struct { + StoreInfos []StoreInfo +} + +func NewMultiStoreProof(storeInfos []StoreInfo) *MultiStoreProof { + return &MultiStoreProof{StoreInfos: storeInfos} +} + +// ComputeRootHash returns the root hash for a given multi-store proof. +func (proof *MultiStoreProof) ComputeRootHash() []byte { + ci := CommitInfo{ + Version: -1, // TODO: Not needed; improve code. + StoreInfos: proof.StoreInfos, + } + return ci.Hash() +} + +// RequireProof return whether proof is require for the subpath +func RequireProof(subpath string) bool { + // XXX: create a better convention. + // Currently, only when query subpath is "/store" or "/key", will proof be included in response. + // If there are some changes about proof building in iavlstore.go, we must change code here to keep consistency with iavlstore.go:212 + if subpath == "/store" || subpath == "/key" { + return true + } + return false +} + +//----------------------------------------------------------------------------- + +var _ merkle.ProofOperator = MultiStoreProofOp{} + +// the multi-store proof operation constant value +const ProofOpMultiStore = "multistore" + +// TODO: document +type MultiStoreProofOp struct { + // Encoded in ProofOp.Key + key []byte + + // To encode in ProofOp.Data. + Proof *MultiStoreProof `json:"proof"` +} + +func NewMultiStoreProofOp(key []byte, proof *MultiStoreProof) MultiStoreProofOp { + return MultiStoreProofOp{ + key: key, + Proof: proof, + } +} + +// MultiStoreProofOpDecoder returns a multi-store merkle proof operator from a +// given proof operation. +func MultiStoreProofOpDecoder(pop merkle.ProofOp) (merkle.ProofOperator, error) { + if pop.Type != ProofOpMultiStore { + return nil, cmn.NewError("unexpected ProofOp.Type; got %v, want %v", pop.Type, ProofOpMultiStore) + } + + // XXX: a bit strange as we'll discard this, but it works + var op MultiStoreProofOp + + err := Cdc.UnmarshalBinaryLengthPrefixed(pop.Data, &op) + if err != nil { + return nil, cmn.ErrorWrap(err, "decoding ProofOp.Data into MultiStoreProofOp") + } + + return NewMultiStoreProofOp(pop.Key, op.Proof), nil +} + +// ProofOp return a merkle proof operation from a given multi-store proof +// operation. +func (op MultiStoreProofOp) ProofOp() merkle.ProofOp { + bz := Cdc.MustMarshalBinaryLengthPrefixed(op) + return merkle.ProofOp{ + Type: ProofOpMultiStore, + Key: op.key, + Data: bz, + } +} + +// String implements the Stringer interface for a mult-store proof operation. +func (op MultiStoreProofOp) String() string { + return fmt.Sprintf("MultiStoreProofOp{%v}", op.GetKey()) +} + +// GetKey returns the key for a multi-store proof operation. +func (op MultiStoreProofOp) GetKey() []byte { + return op.key +} + +// Run executes a multi-store proof operation for a given value. It returns +// the root hash if the value matches all the store's commitID's hash or an +// error otherwise. +func (op MultiStoreProofOp) Run(args [][]byte) ([][]byte, error) { + if len(args) != 1 { + return nil, cmn.NewError("Value size is not 1") + } + + value := args[0] + root := op.Proof.ComputeRootHash() + + for _, si := range op.Proof.StoreInfos { + if si.Name == string(op.key) { + if bytes.Equal(value, si.Core.CommitID.Hash) { + return [][]byte{root}, nil + } + + return nil, cmn.NewError("hash mismatch for substore %v: %X vs %X", si.Name, si.Core.CommitID.Hash, value) + } + } + + return nil, cmn.NewError("key %v not found in multistore proof", op.key) +} + +//----------------------------------------------------------------------------- + +// XXX: This should be managed by the rootMultiStore which may want to register +// more proof ops? +func DefaultProofRuntime() (prt *merkle.ProofRuntime) { + prt = merkle.NewProofRuntime() + prt.RegisterOpDecoder(merkle.ProofOpSimpleValue, merkle.SimpleValueOpDecoder) + prt.RegisterOpDecoder(iavl.ProofOpIAVLValue, iavl.IAVLValueOpDecoder) + prt.RegisterOpDecoder(iavl.ProofOpIAVLAbsence, iavl.IAVLAbsenceOpDecoder) + prt.RegisterOpDecoder(ProofOpMultiStore, MultiStoreProofOpDecoder) + return +} diff --git a/core/vm/lightclient/rootmultistore.go b/core/vm/lightclient/rootmultistore.go new file mode 100644 index 0000000000..d0e016c0e7 --- /dev/null +++ b/core/vm/lightclient/rootmultistore.go @@ -0,0 +1,86 @@ +package lightclient + +import ( + "fmt" + + "github.com/tendermint/tendermint/crypto/merkle" + "github.com/tendermint/tendermint/crypto/tmhash" +) + +//---------------------------------------- +// CommitID + +// CommitID contains the tree version number and its merkle root. +type CommitID struct { + Version int64 + Hash []byte +} + +func (cid CommitID) IsZero() bool { //nolint + return cid.Version == 0 && len(cid.Hash) == 0 +} + +func (cid CommitID) String() string { + return fmt.Sprintf("CommitID{%v:%X}", cid.Hash, cid.Version) +} + +//---------------------------------------- +// CommitInfo + +// NOTE: Keep CommitInfo a simple immutable struct. +type CommitInfo struct { + + // Version + Version int64 + + // Store info for + StoreInfos []StoreInfo +} + +// Hash returns the simple merkle root hash of the stores sorted by name. +func (ci CommitInfo) Hash() []byte { + // TODO cache to ci.hash []byte + m := make(map[string][]byte, len(ci.StoreInfos)) + for _, storeInfo := range ci.StoreInfos { + m[storeInfo.Name] = storeInfo.Hash() + } + return merkle.SimpleHashFromMap(m) +} + +func (ci CommitInfo) CommitID() CommitID { + return CommitID{ + Version: ci.Version, + Hash: ci.Hash(), + } +} + +//---------------------------------------- +// StoreInfo + +// StoreInfo contains the name and core reference for an +// underlying store. It is the leaf of the rootMultiStores top +// level simple merkle tree. +type StoreInfo struct { + Name string + Core StoreCore +} + +type StoreCore struct { + // StoreType StoreType + CommitID CommitID + // ... maybe add more state +} + +// Implements merkle.Hasher. +func (si StoreInfo) Hash() []byte { + // Doesn't write Name, since merkle.SimpleHashFromMap() will + // include them via the keys. + bz, _ := Cdc.MarshalBinaryLengthPrefixed(si.Core) // Does not error + hasher := tmhash.New() + _, err := hasher.Write(bz) + if err != nil { + // TODO: Handle with #870 + panic(err) + } + return hasher.Sum(nil) +} diff --git a/core/vm/lightclient/types.go b/core/vm/lightclient/types.go new file mode 100644 index 0000000000..406d428e74 --- /dev/null +++ b/core/vm/lightclient/types.go @@ -0,0 +1,286 @@ +package lightclient + +import ( + "bytes" + "encoding/binary" + "fmt" + + "github.com/tendermint/tendermint/crypto/ed25519" + "github.com/tendermint/tendermint/crypto/merkle" + lerr "github.com/tendermint/tendermint/lite/errors" + tmtypes "github.com/tendermint/tendermint/types" +) + +const ( + chainIDLength uint64 = 32 + heightLength uint64 = 8 + validatorSetHashLength uint64 = 32 + validatorPubkeyLength uint64 = 32 + validatorVotingPowerLength uint64 = 8 + appHashLength uint64 = 32 + storeNameLengthBytesLength uint64 = 32 + keyLengthBytesLength uint64 = 32 + valueLengthBytesLength uint64 = 32 + maxConsensusStateLength uint64 = 32 * (128 - 1) // maximum validator quantity 99 +) + +type ConsensusState struct { + ChainID string + Height uint64 + AppHash []byte + CurValidatorSetHash []byte + NextValidatorSet *tmtypes.ValidatorSet +} + +// input: +// | chainID | height | appHash | curValidatorSetHash | [{validator pubkey, voting power}] | +// | 32 bytes | 8 bytes | 32 bytes | 32 bytes | [{32 bytes, 8 bytes}] | +func DecodeConsensusState(input []byte) (ConsensusState, error) { + + minimumLength := chainIDLength + heightLength + appHashLength + validatorSetHashLength + singleValidatorBytesLength := validatorPubkeyLength + validatorVotingPowerLength + + inputLen := uint64(len(input)) + if inputLen <= minimumLength || (inputLen-minimumLength)%singleValidatorBytesLength != 0 { + return ConsensusState{}, fmt.Errorf("expected input size %d+%d*N, actual input size: %d", minimumLength, singleValidatorBytesLength, inputLen) + } + pos := uint64(0) + + chainID := string(bytes.Trim(input[pos:pos+chainIDLength], "\x00")) + pos += chainIDLength + + height := binary.BigEndian.Uint64(input[pos : pos+heightLength]) + pos += heightLength + + appHash := input[pos : pos+appHashLength] + pos += appHashLength + + curValidatorSetHash := input[pos : pos+validatorSetHashLength] + pos += validatorSetHashLength + + nextValidatorSetLength := (inputLen - minimumLength) / singleValidatorBytesLength + validatorSetBytes := input[pos:] + var validatorSet []*tmtypes.Validator + for index := uint64(0); index < nextValidatorSetLength; index++ { + validatorAndPowerBytes := validatorSetBytes[singleValidatorBytesLength*index : singleValidatorBytesLength*(index+1)] + var pubkey ed25519.PubKeyEd25519 + copy(pubkey[:], validatorAndPowerBytes[:validatorPubkeyLength]) + votingPower := int64(binary.BigEndian.Uint64(validatorAndPowerBytes[validatorPubkeyLength:])) + + validator := tmtypes.NewValidator(pubkey, votingPower) + validatorSet = append(validatorSet, validator) + } + + consensusState := ConsensusState{ + ChainID: chainID, + Height: height, + AppHash: appHash, + CurValidatorSetHash: curValidatorSetHash, + NextValidatorSet: &tmtypes.ValidatorSet{ + Validators: validatorSet, + }, + } + + return consensusState, nil +} + +// output: +// | chainID | height | appHash | curValidatorSetHash | [{validator pubkey, voting power}] | +// | 32 bytes | 8 bytes | 32 bytes | 32 bytes | [{32 bytes, 8 bytes}] | +func (cs ConsensusState) EncodeConsensusState() ([]byte, error) { + validatorSetLength := uint64(len(cs.NextValidatorSet.Validators)) + serializeLength := chainIDLength + heightLength + appHashLength + validatorSetHashLength + validatorSetLength*(validatorPubkeyLength+validatorVotingPowerLength) + if serializeLength > maxConsensusStateLength { + return nil, fmt.Errorf("too many validators %d, consensus state bytes should not exceed %d", len(cs.NextValidatorSet.Validators), maxConsensusStateLength) + } + + encodingBytes := make([]byte, serializeLength) + + pos := uint64(0) + if uint64(len(cs.ChainID)) > chainIDLength { + return nil, fmt.Errorf("chainID length should be no more than 32") + } + copy(encodingBytes[pos:pos+chainIDLength], cs.ChainID) + pos += chainIDLength + + binary.BigEndian.PutUint64(encodingBytes[pos:pos+heightLength], uint64(cs.Height)) + pos += heightLength + + copy(encodingBytes[pos:pos+appHashLength], cs.AppHash) + pos += appHashLength + + copy(encodingBytes[pos:pos+validatorSetHashLength], cs.CurValidatorSetHash) + pos += validatorSetHashLength + + for index := uint64(0); index < validatorSetLength; index++ { + validator := cs.NextValidatorSet.Validators[index] + pubkey, ok := validator.PubKey.(ed25519.PubKeyEd25519) + if !ok { + return nil, fmt.Errorf("invalid pubkey type") + } + + copy(encodingBytes[pos:pos+validatorPubkeyLength], pubkey[:]) + pos += validatorPubkeyLength + + binary.BigEndian.PutUint64(encodingBytes[pos:pos+validatorVotingPowerLength], uint64(validator.VotingPower)) + pos += validatorVotingPowerLength + } + + return encodingBytes, nil +} + +func (cs *ConsensusState) ApplyHeader(header *Header) (bool, error) { + if uint64(header.Height) < cs.Height { + return false, fmt.Errorf("header height < consensus height (%d < %d)", header.Height, cs.Height) + } + + if err := header.Validate(cs.ChainID); err != nil { + return false, err + } + + trustedNextHash := cs.NextValidatorSet.Hash() + if cs.Height == uint64(header.Height-1) { + if !bytes.Equal(trustedNextHash, header.ValidatorsHash) { + return false, lerr.ErrUnexpectedValidators(header.ValidatorsHash, trustedNextHash) + } + err := cs.NextValidatorSet.VerifyCommit(cs.ChainID, header.Commit.BlockID, header.Height, header.Commit) + if err != nil { + return false, err + } + } else { + err := cs.NextValidatorSet.VerifyFutureCommit(header.ValidatorSet, cs.ChainID, + header.Commit.BlockID, header.Height, header.Commit) + if err != nil { + return false, err + } + } + validatorSetChanged := false + if !bytes.Equal(cs.CurValidatorSetHash, header.ValidatorsHash) || !bytes.Equal(cs.NextValidatorSet.Hash(), header.NextValidatorsHash) { + validatorSetChanged = true + } + // update consensus state + cs.Height = uint64(header.Height) + cs.AppHash = header.AppHash + cs.CurValidatorSetHash = header.ValidatorsHash + cs.NextValidatorSet = header.NextValidatorSet + + return validatorSetChanged, nil +} + +type Header struct { + tmtypes.SignedHeader + ValidatorSet *tmtypes.ValidatorSet `json:"validator_set"` + NextValidatorSet *tmtypes.ValidatorSet `json:"next_validator_set"` +} + +func (h *Header) Validate(chainID string) error { + if err := h.SignedHeader.ValidateBasic(chainID); err != nil { + return err + } + if h.ValidatorSet == nil { + return fmt.Errorf("invalid header: validator set is nil") + } + if h.NextValidatorSet == nil { + return fmt.Errorf("invalid header: next validator set is nil") + } + if !bytes.Equal(h.ValidatorsHash, h.ValidatorSet.Hash()) { + return fmt.Errorf("invalid header: validator set does not match hash") + } + if !bytes.Equal(h.NextValidatorsHash, h.NextValidatorSet.Hash()) { + return fmt.Errorf("invalid header: next validator set does not match hash") + } + return nil +} + +func (h *Header) EncodeHeader() ([]byte, error) { + bz, err := Cdc.MarshalBinaryLengthPrefixed(h) + if err != nil { + return nil, err + } + return bz, nil +} + +func DecodeHeader(input []byte) (*Header, error) { + var header Header + err := Cdc.UnmarshalBinaryLengthPrefixed(input, &header) + if err != nil { + return nil, err + } + return &header, nil +} + +type KeyValueMerkleProof struct { + Key []byte + Value []byte + StoreName string + AppHash []byte + Proof *merkle.Proof +} + +func (kvmp *KeyValueMerkleProof) Validate() bool { + prt := DefaultProofRuntime() + + kp := merkle.KeyPath{} + kp = kp.AppendKey([]byte(kvmp.StoreName), merkle.KeyEncodingURL) + kp = kp.AppendKey(kvmp.Key, merkle.KeyEncodingURL) + + if len(kvmp.Value) == 0 { + err := prt.VerifyAbsence(kvmp.Proof, kvmp.AppHash, kp.String()) + return err == nil + } + + err := prt.VerifyValue(kvmp.Proof, kvmp.AppHash, kp.String(), kvmp.Value) + return err == nil +} + +// input: +// | storeName | key length | key | value length | value | appHash | proof | +// | 32 bytes | 32 bytes | | 32 bytes | | 32 bytes | | +func DecodeKeyValueMerkleProof(input []byte) (*KeyValueMerkleProof, error) { + inputLength := uint64(len(input)) + pos := uint64(0) + + if inputLength <= storeNameLengthBytesLength+keyLengthBytesLength+valueLengthBytesLength+appHashLength { + return nil, fmt.Errorf("input length should be no less than %d", storeNameLengthBytesLength+keyLengthBytesLength+valueLengthBytesLength+appHashLength) + } + storeName := string(bytes.Trim(input[pos:pos+storeNameLengthBytesLength], "\x00")) + pos += storeNameLengthBytesLength + + keyLength := binary.BigEndian.Uint64(input[pos+keyLengthBytesLength-8 : pos+keyLengthBytesLength]) + pos += keyLengthBytesLength + + if inputLength <= storeNameLengthBytesLength+keyLengthBytesLength+keyLength+valueLengthBytesLength { + return nil, fmt.Errorf("invalid input, keyLength %d is too long", keyLength) + } + key := input[pos : pos+keyLength] + pos += keyLength + + valueLength := binary.BigEndian.Uint64(input[pos+valueLengthBytesLength-8 : pos+valueLengthBytesLength]) + pos += valueLengthBytesLength + + if inputLength <= storeNameLengthBytesLength+keyLengthBytesLength+keyLength+valueLengthBytesLength+valueLength+appHashLength { + return nil, fmt.Errorf("invalid input, valueLength %d is too long", valueLength) + } + value := input[pos : pos+valueLength] + pos += valueLength + + appHash := input[pos : pos+appHashLength] + pos += appHashLength + + proofBytes := input[pos:] + var merkleProof merkle.Proof + err := merkleProof.Unmarshal(proofBytes) + if err != nil { + return nil, err + } + + keyValueMerkleProof := &KeyValueMerkleProof{ + Key: key, + Value: value, + StoreName: storeName, + AppHash: appHash, + Proof: &merkleProof, + } + + return keyValueMerkleProof, nil +} diff --git a/core/vm/lightclient/utils.go b/core/vm/lightclient/utils.go new file mode 100644 index 0000000000..381866b146 --- /dev/null +++ b/core/vm/lightclient/utils.go @@ -0,0 +1,86 @@ +package lightclient + +import ( + "fmt" + + rpcclient "github.com/tendermint/tendermint/rpc/client" + tmtypes "github.com/tendermint/tendermint/types" +) + +func GetInitConsensusState(node rpcclient.Client, height int64) (*ConsensusState, error) { + status, err := node.Status() + if err != nil { + return nil, err + } + + nextValHeight := height + 1 + nextValidatorSet, err := node.Validators(&nextValHeight) + if err != nil { + return nil, err + } + + header, err := node.Block(&height) + if err != nil { + return nil, err + } + + appHash := header.BlockMeta.Header.AppHash + curValidatorSetHash := header.BlockMeta.Header.ValidatorsHash + + cs := &ConsensusState{ + ChainID: status.NodeInfo.Network, + Height: uint64(height), + AppHash: appHash, + CurValidatorSetHash: curValidatorSetHash, + NextValidatorSet: &tmtypes.ValidatorSet{ + Validators: nextValidatorSet.Validators, + }, + } + return cs, nil +} + +func QueryTendermintHeader(node rpcclient.Client, height int64) (*Header, error) { + nextHeight := height + 1 + + commit, err := node.Commit(&height) + if err != nil { + return nil, err + } + + validators, err := node.Validators(&height) + if err != nil { + return nil, err + } + + nextvalidators, err := node.Validators(&nextHeight) + if err != nil { + return nil, err + } + + header := &Header{ + SignedHeader: commit.SignedHeader, + ValidatorSet: tmtypes.NewValidatorSet(validators.Validators), + NextValidatorSet: tmtypes.NewValidatorSet(nextvalidators.Validators), + } + + return header, nil +} + +func QueryKeyWithProof(node rpcclient.Client, key []byte, storeName string, height int64) ([]byte, []byte, []byte, error) { + opts := rpcclient.ABCIQueryOptions{ + Height: height, + Prove: true, + } + + path := fmt.Sprintf("/store/%s/%s", storeName, "key") + result, err := node.ABCIQueryWithOptions(path, key, opts) + if err != nil { + return nil, nil, nil, err + } + proofBytes, err := result.Response.Proof.Marshal() + if err != nil { + return nil, nil, nil, err + } + + return key, result.Response.Value, proofBytes, nil +} diff --git a/core/vm/lightclient/wire.go b/core/vm/lightclient/wire.go new file mode 100644 index 0000000000..460dfce1de --- /dev/null +++ b/core/vm/lightclient/wire.go @@ -0,0 +1,16 @@ +package lightclient + +import ( + "github.com/tendermint/go-amino" + cryptoAmino "github.com/tendermint/tendermint/crypto/encoding/amino" +) + +type Codec = amino.Codec + +var Cdc *Codec + +func init() { + cdc := amino.NewCodec() + cryptoAmino.RegisterAmino(cdc) + Cdc = cdc.Seal() +} diff --git a/eth/api_tracer.go b/eth/api_tracer.go index 560f460445..7db3327990 100644 --- a/eth/api_tracer.go +++ b/eth/api_tracer.go @@ -22,7 +22,9 @@ import ( "context" "errors" "fmt" + "github.com/ethereum/go-ethereum/consensus" "io/ioutil" + "math/big" "os" "runtime" "sync" @@ -500,7 +502,15 @@ func (api *PrivateDebugAPI) traceBlock(ctx context.Context, block *types.Block, // Generate the next state snapshot fast without tracing msg, _ := tx.AsMessage(signer) vmctx := core.NewEVMContext(msg, block.Header(), api.eth.blockchain, nil) - + if posa, ok := api.eth.engine.(consensus.PoSA); ok { + if isSystem, _ := posa.IsSystemTransaction(tx, block.Header()); isSystem { + balance := statedb.GetBalance(consensus.SystemAddress) + if balance.Cmp(common.Big0) > 0 { + statedb.SetBalance(consensus.SystemAddress, big.NewInt(0)) + statedb.AddBalance(block.Header().Coinbase, balance) + } + } + } vmenv := vm.NewEVM(vmctx, statedb, api.eth.blockchain.Config(), vm.Config{}) if _, _, _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.Gas())); err != nil { failed = err @@ -757,7 +767,14 @@ func (api *PrivateDebugAPI) traceTx(ctx context.Context, message core.Message, v } // Run the transaction with tracing enabled. vmenv := vm.NewEVM(vmctx, statedb, api.eth.blockchain.Config(), vm.Config{Debug: true, Tracer: tracer}) - + if posa, ok := api.eth.engine.(consensus.PoSA); ok && message.From() == vmctx.Coinbase && + posa.IsSystemContract(message.To()) && message.GasPrice().Cmp(big.NewInt(0)) == 0 { + balance := statedb.GetBalance(consensus.SystemAddress) + if balance.Cmp(common.Big0) > 0 { + statedb.SetBalance(consensus.SystemAddress, big.NewInt(0)) + statedb.AddBalance(vmctx.Coinbase, balance) + } + } ret, gas, failed, err := core.ApplyMessage(vmenv, message, new(core.GasPool).AddGas(message.Gas())) if err != nil { return nil, fmt.Errorf("tracing failed: %v", err) @@ -806,6 +823,15 @@ func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, ree for idx, tx := range block.Transactions() { // Assemble the transaction call message and return if the requested offset msg, _ := tx.AsMessage(signer) + if posa, ok := api.eth.engine.(consensus.PoSA); ok { + if isSystem, _ := posa.IsSystemTransaction(tx, block.Header()); isSystem { + balance := statedb.GetBalance(consensus.SystemAddress) + if balance.Cmp(common.Big0) > 0 { + statedb.SetBalance(consensus.SystemAddress, big.NewInt(0)) + statedb.AddBalance(block.Header().Coinbase, balance) + } + } + } context := core.NewEVMContext(msg, block.Header(), api.eth.blockchain, nil) if idx == txIndex { return msg, context, statedb, nil diff --git a/eth/backend.go b/eth/backend.go index 98eee91e1f..8293cd3f12 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -32,6 +32,7 @@ import ( "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/consensus/parlia" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/bloombits" "github.com/ethereum/go-ethereum/core/rawdb" @@ -147,7 +148,6 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { chainDb: chainDb, eventMux: ctx.EventMux, accountManager: ctx.AccountManager, - engine: CreateConsensusEngine(ctx, chainConfig, &config.Ethash, config.Miner.Notify, config.Miner.Noverify, chainDb), closeBloomHandler: make(chan struct{}), networkID: config.NetworkId, gasPrice: config.Miner.GasPrice, @@ -156,6 +156,10 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { bloomIndexer: NewBloomIndexer(chainDb, params.BloomBitsBlocks, params.BloomConfirms), } + eth.APIBackend = &EthAPIBackend{ctx.ExtRPCEnabled(), eth, nil} + ethAPI := ethapi.NewPublicBlockChainAPI(eth.APIBackend) + eth.engine = CreateConsensusEngine(ctx, chainConfig, &config.Ethash, config.Miner.Notify, config.Miner.Noverify, chainDb, ethAPI, genesisHash) + bcVersion := rawdb.ReadDatabaseVersion(chainDb) var dbVer = "" if bcVersion != nil { @@ -209,13 +213,12 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { if checkpoint == nil { checkpoint = params.TrustedCheckpoints[genesisHash] } - if eth.protocolManager, err = NewProtocolManager(chainConfig, checkpoint, config.SyncMode, config.NetworkId, eth.eventMux, eth.txPool, eth.engine, eth.blockchain, chainDb, cacheLimit, config.Whitelist); err != nil { + if eth.protocolManager, err = NewProtocolManager(chainConfig, checkpoint, config.SyncMode, config.NetworkId, eth.eventMux, eth.txPool, eth.engine, eth.blockchain, chainDb, cacheLimit, config.Whitelist, config.DirectBroadcast); err != nil { return nil, err } + eth.miner = miner.New(eth, &config.Miner, chainConfig, eth.EventMux(), eth.engine, eth.isLocalBlock) eth.miner.SetExtra(makeExtraData(config.Miner.ExtraData)) - - eth.APIBackend = &EthAPIBackend{ctx.ExtRPCEnabled(), eth, nil} gpoParams := config.GPO if gpoParams.Default == nil { gpoParams.Default = config.Miner.GasPrice @@ -240,19 +243,22 @@ func makeExtraData(extra []byte) []byte { runtime.GOOS, }) } - if uint64(len(extra)) > params.MaximumExtraDataSize { - log.Warn("Miner extra data exceed limit", "extra", hexutil.Bytes(extra), "limit", params.MaximumExtraDataSize) + if uint64(len(extra)) > params.MaximumExtraDataSize-params.ForkIDSize { + log.Warn("Miner extra data exceed limit", "extra", hexutil.Bytes(extra), "limit", params.MaximumExtraDataSize-params.ForkIDSize) extra = nil } return extra } // CreateConsensusEngine creates the required type of consensus engine instance for an Ethereum service -func CreateConsensusEngine(ctx *node.ServiceContext, chainConfig *params.ChainConfig, config *ethash.Config, notify []string, noverify bool, db ethdb.Database) consensus.Engine { +func CreateConsensusEngine(ctx *node.ServiceContext, chainConfig *params.ChainConfig, config *ethash.Config, notify []string, noverify bool, db ethdb.Database, ee *ethapi.PublicBlockChainAPI, genesisHash common.Hash) consensus.Engine { // If proof-of-authority is requested, set it up if chainConfig.Clique != nil { return clique.New(chainConfig.Clique, db) } + if chainConfig.Parlia != nil { + return parlia.New(chainConfig, db, ee, genesisHash) + } // Otherwise assume proof-of-work switch config.PowMode { case ethash.ModeFake: @@ -322,7 +328,7 @@ func (s *Ethereum) APIs() []rpc.API { }, { Namespace: "eth", Version: "1.0", - Service: filters.NewPublicFilterAPI(s.APIBackend, false), + Service: filters.NewPublicFilterAPI(s.APIBackend, false, s.config.RangeLimit), Public: true, }, { Namespace: "admin", @@ -424,6 +430,9 @@ func (s *Ethereum) shouldPreserve(block *types.Block) bool { if _, ok := s.engine.(*clique.Clique); ok { return false } + if _, ok := s.engine.(*parlia.Parlia); ok { + return false + } return s.isLocalBlock(block) } @@ -473,6 +482,15 @@ func (s *Ethereum) StartMining(threads int) error { } clique.Authorize(eb, wallet.SignData) } + if parlia, ok := s.engine.(*parlia.Parlia); ok { + wallet, err := s.accountManager.Find(accounts.Account{Address: eb}) + if wallet == nil || err != nil { + log.Error("Etherbase account unavailable locally", "err", err) + return fmt.Errorf("signer missing: %v", err) + } + + parlia.Authorize(eb, wallet.SignData, wallet.SignTx) + } // If mining is started, we can disable the transaction rejection mechanism // introduced to speed sync times. atomic.StoreUint32(&s.protocolManager.acceptTxs, 1) diff --git a/eth/config.go b/eth/config.go index 20480f742c..05342a6306 100644 --- a/eth/config.go +++ b/eth/config.go @@ -54,15 +54,17 @@ var DefaultConfig = Config{ TrieTimeout: 60 * time.Minute, SnapshotCache: 256, Miner: miner.Config{ - GasFloor: 8000000, - GasCeil: 8000000, - GasPrice: big.NewInt(params.GWei), - Recommit: 3 * time.Second, + GasFloor: 8000000, + GasCeil: 8000000, + GasPrice: big.NewInt(params.GWei), + Recommit: 3 * time.Second, + DelayLeftOver: 50 * time.Millisecond, }, TxPool: core.DefaultTxPoolConfig, GPO: gasprice.Config{ - Blocks: 20, - Percentile: 60, + Blocks: 20, + Percentile: 60, + OracleThreshold: 1000, }, } @@ -102,8 +104,10 @@ type Config struct { // for nodes to connect to. DiscoveryURLs []string - NoPruning bool // Whether to disable pruning and flush everything to disk - NoPrefetch bool // Whether to disable prefetching and only load state on demand + NoPruning bool // Whether to disable pruning and flush everything to disk + NoPrefetch bool // Whether to disable prefetching and only load state on demand + DirectBroadcast bool + RangeLimit bool // Whitelist of required block number -> hash values to accept Whitelist map[uint64]common.Hash `toml:"-"` @@ -134,7 +138,7 @@ type Config struct { Miner miner.Config // Ethash options - Ethash ethash.Config + Ethash ethash.Config `toml:",omitempty"` // Transaction pool options TxPool core.TxPoolConfig diff --git a/eth/fetcher/block_fetcher.go b/eth/fetcher/block_fetcher.go index 7690a53862..d96957d418 100644 --- a/eth/fetcher/block_fetcher.go +++ b/eth/fetcher/block_fetcher.go @@ -37,7 +37,7 @@ const ( ) const ( - maxUncleDist = 7 // Maximum allowed backward distance from the chain head + maxUncleDist = 11 // Maximum allowed backward distance from the chain head maxQueueDist = 32 // Maximum allowed distance from the chain head to queue hashLimit = 256 // Maximum number of unique blocks a peer may have announced blockLimit = 64 // Maximum number of unique blocks a peer may have delivered @@ -681,11 +681,12 @@ func (f *BlockFetcher) insert(peer string, block *types.Block) { go f.broadcastBlock(block, true) case consensus.ErrFutureBlock: - // Weird future block, don't fail, but neither propagate + log.Error("Received future block", "peer", peer, "number", block.Number(), "hash", hash, "err", err) + f.dropPeer(peer) default: // Something went very wrong, drop the peer - log.Debug("Propagated block verification failed", "peer", peer, "number", block.Number(), "hash", hash, "err", err) + log.Error("Propagated block verification failed", "peer", peer, "number", block.Number(), "hash", hash, "err", err) f.dropPeer(peer) return } diff --git a/eth/filters/api.go b/eth/filters/api.go index 30d7b71c31..c299988dbd 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -52,22 +52,24 @@ type filter struct { // PublicFilterAPI offers support to create and manage filters. This will allow external clients to retrieve various // information related to the Ethereum protocol such als blocks, transactions and logs. type PublicFilterAPI struct { - backend Backend - mux *event.TypeMux - quit chan struct{} - chainDb ethdb.Database - events *EventSystem - filtersMu sync.Mutex - filters map[rpc.ID]*filter + backend Backend + mux *event.TypeMux + quit chan struct{} + chainDb ethdb.Database + events *EventSystem + filtersMu sync.Mutex + filters map[rpc.ID]*filter + rangeLimit bool } // NewPublicFilterAPI returns a new PublicFilterAPI instance. -func NewPublicFilterAPI(backend Backend, lightMode bool) *PublicFilterAPI { +func NewPublicFilterAPI(backend Backend, lightMode, rangeLimit bool) *PublicFilterAPI { api := &PublicFilterAPI{ - backend: backend, - chainDb: backend.ChainDb(), - events: NewEventSystem(backend, lightMode), - filters: make(map[rpc.ID]*filter), + backend: backend, + chainDb: backend.ChainDb(), + events: NewEventSystem(backend, lightMode), + filters: make(map[rpc.ID]*filter), + rangeLimit: rangeLimit, } go api.timeoutLoop() @@ -107,20 +109,16 @@ func (api *PublicFilterAPI) NewPendingTransactionFilter() rpc.ID { pendingTxs = make(chan []common.Hash) pendingTxSub = api.events.SubscribePendingTxs(pendingTxs) ) - + f := &filter{typ: PendingTransactionsSubscription, deadline: time.NewTimer(deadline), hashes: make([]common.Hash, 0), s: pendingTxSub} api.filtersMu.Lock() - api.filters[pendingTxSub.ID] = &filter{typ: PendingTransactionsSubscription, deadline: time.NewTimer(deadline), hashes: make([]common.Hash, 0), s: pendingTxSub} + api.filters[pendingTxSub.ID] = f api.filtersMu.Unlock() go func() { for { select { case ph := <-pendingTxs: - api.filtersMu.Lock() - if f, found := api.filters[pendingTxSub.ID]; found { - f.hashes = append(f.hashes, ph...) - } - api.filtersMu.Unlock() + f.hashes = append(f.hashes, ph...) case <-pendingTxSub.Err(): api.filtersMu.Lock() delete(api.filters, pendingTxSub.ID) @@ -339,7 +337,7 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([ end = crit.ToBlock.Int64() } // Construct the range filter - filter = NewRangeFilter(api.backend, begin, end, crit.Addresses, crit.Topics) + filter = NewRangeFilter(api.backend, begin, end, crit.Addresses, crit.Topics, api.rangeLimit) } // Run the filter and return all the logs logs, err := filter.Logs(ctx) @@ -394,7 +392,7 @@ func (api *PublicFilterAPI) GetFilterLogs(ctx context.Context, id rpc.ID) ([]*ty end = f.crit.ToBlock.Int64() } // Construct the range filter - filter = NewRangeFilter(api.backend, begin, end, f.crit.Addresses, f.crit.Topics) + filter = NewRangeFilter(api.backend, begin, end, f.crit.Addresses, f.crit.Topics, api.rangeLimit) } // Run the filter and return all the logs logs, err := filter.Logs(ctx) diff --git a/eth/filters/bench_test.go b/eth/filters/bench_test.go index 4f70d6d04a..e55ff0ca13 100644 --- a/eth/filters/bench_test.go +++ b/eth/filters/bench_test.go @@ -132,7 +132,7 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { var addr common.Address addr[0] = byte(i) addr[1] = byte(i / 256) - filter := NewRangeFilter(backend, 0, int64(cnt*sectionSize-1), []common.Address{addr}, nil) + filter := NewRangeFilter(backend, 0, int64(cnt*sectionSize-1), []common.Address{addr}, nil, false) if _, err := filter.Logs(context.Background()); err != nil { b.Error("filter.Find error:", err) } @@ -172,7 +172,7 @@ func BenchmarkNoBloomBits(b *testing.B) { b.Log("Running filter benchmarks...") start := time.Now() backend := &testBackend{db: db} - filter := NewRangeFilter(backend, 0, int64(*headNum), []common.Address{{}}, nil) + filter := NewRangeFilter(backend, 0, int64(*headNum), []common.Address{{}}, nil, false) filter.Logs(context.Background()) d := time.Since(start) b.Log("Finished running filter benchmarks") diff --git a/eth/filters/filter.go b/eth/filters/filter.go index 17635837af..1f281a4ee1 100644 --- a/eth/filters/filter.go +++ b/eth/filters/filter.go @@ -19,6 +19,7 @@ package filters import ( "context" "errors" + "fmt" "math/big" "github.com/ethereum/go-ethereum/common" @@ -30,6 +31,8 @@ import ( "github.com/ethereum/go-ethereum/rpc" ) +const maxFilterBlockRange = 5000 + type Backend interface { ChainDb() ethdb.Database HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) @@ -59,11 +62,13 @@ type Filter struct { begin, end int64 // Range interval if filtering multiple blocks matcher *bloombits.Matcher + + rangeLimit bool } // NewRangeFilter creates a new filter which uses a bloom filter on blocks to // figure out whether a particular block is interesting or not. -func NewRangeFilter(backend Backend, begin, end int64, addresses []common.Address, topics [][]common.Hash) *Filter { +func NewRangeFilter(backend Backend, begin, end int64, addresses []common.Address, topics [][]common.Hash, rangeLimit bool) *Filter { // Flatten the address and topic filter clauses into a single bloombits filter // system. Since the bloombits are not positional, nil topics are permitted, // which get flattened into a nil byte slice. @@ -90,6 +95,7 @@ func NewRangeFilter(backend Backend, begin, end int64, addresses []common.Addres filter.matcher = bloombits.NewMatcher(size, filters) filter.begin = begin filter.end = end + filter.rangeLimit = rangeLimit return filter } @@ -142,6 +148,9 @@ func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) { if f.end == -1 { end = head } + if f.rangeLimit && (int64(end)-f.begin) > maxFilterBlockRange { + return nil, fmt.Errorf("exceed maximum block range: %d", maxFilterBlockRange) + } // Gather all indexed logs, and finish with non indexed ones var ( logs []*types.Log diff --git a/eth/filters/filter_system.go b/eth/filters/filter_system.go index a105ec51c3..ca360ec86a 100644 --- a/eth/filters/filter_system.go +++ b/eth/filters/filter_system.go @@ -174,6 +174,17 @@ func (sub *Subscription) Unsubscribe() { // this ensures that the manager won't use the event channel which // will probably be closed by the client asap after this method returns. <-sub.Err() + + drainLoop: + for { + select { + case <-sub.f.logs: + case <-sub.f.hashes: + case <-sub.f.headers: + default: + break drainLoop + } + } }) } diff --git a/eth/filters/filter_system_test.go b/eth/filters/filter_system_test.go index c8d1d43abb..4aba9621cf 100644 --- a/eth/filters/filter_system_test.go +++ b/eth/filters/filter_system_test.go @@ -163,7 +163,7 @@ func TestBlockSubscription(t *testing.T) { var ( db = rawdb.NewMemoryDatabase() backend = &testBackend{db: db} - api = NewPublicFilterAPI(backend, false) + api = NewPublicFilterAPI(backend, false, false) genesis = new(core.Genesis).MustCommit(db) chain, _ = core.GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 10, func(i int, gen *core.BlockGen) {}) chainEvents = []core.ChainEvent{} @@ -215,7 +215,7 @@ func TestPendingTxFilter(t *testing.T) { var ( db = rawdb.NewMemoryDatabase() backend = &testBackend{db: db} - api = NewPublicFilterAPI(backend, false) + api = NewPublicFilterAPI(backend, false, false) transactions = []*types.Transaction{ types.NewTransaction(0, common.HexToAddress("0xb794f5ea0ba39494ce83a213fffba74279579268"), new(big.Int), 0, new(big.Int), nil), @@ -270,7 +270,7 @@ func TestLogFilterCreation(t *testing.T) { var ( db = rawdb.NewMemoryDatabase() backend = &testBackend{db: db} - api = NewPublicFilterAPI(backend, false) + api = NewPublicFilterAPI(backend, false, false) testCases = []struct { crit FilterCriteria @@ -314,7 +314,7 @@ func TestInvalidLogFilterCreation(t *testing.T) { var ( db = rawdb.NewMemoryDatabase() backend = &testBackend{db: db} - api = NewPublicFilterAPI(backend, false) + api = NewPublicFilterAPI(backend, false, false) ) // different situations where log filter creation should fail. @@ -336,7 +336,7 @@ func TestInvalidGetLogsRequest(t *testing.T) { var ( db = rawdb.NewMemoryDatabase() backend = &testBackend{db: db} - api = NewPublicFilterAPI(backend, false) + api = NewPublicFilterAPI(backend, false, false) blockHash = common.HexToHash("0x1111111111111111111111111111111111111111111111111111111111111111") ) @@ -361,7 +361,7 @@ func TestLogFilter(t *testing.T) { var ( db = rawdb.NewMemoryDatabase() backend = &testBackend{db: db} - api = NewPublicFilterAPI(backend, false) + api = NewPublicFilterAPI(backend, false, false) firstAddr = common.HexToAddress("0x1111111111111111111111111111111111111111") secondAddr = common.HexToAddress("0x2222222222222222222222222222222222222222") @@ -475,7 +475,7 @@ func TestPendingLogsSubscription(t *testing.T) { var ( db = rawdb.NewMemoryDatabase() backend = &testBackend{db: db} - api = NewPublicFilterAPI(backend, false) + api = NewPublicFilterAPI(backend, false, false) firstAddr = common.HexToAddress("0x1111111111111111111111111111111111111111") secondAddr = common.HexToAddress("0x2222222222222222222222222222222222222222") diff --git a/eth/filters/filter_test.go b/eth/filters/filter_test.go index f45720d5a9..b12efd6e29 100644 --- a/eth/filters/filter_test.go +++ b/eth/filters/filter_test.go @@ -85,7 +85,7 @@ func BenchmarkFilters(b *testing.B) { } b.ResetTimer() - filter := NewRangeFilter(backend, 0, -1, []common.Address{addr1, addr2, addr3, addr4}, nil) + filter := NewRangeFilter(backend, 0, -1, []common.Address{addr1, addr2, addr3, addr4}, nil, false) for i := 0; i < b.N; i++ { logs, _ := filter.Logs(context.Background()) @@ -168,14 +168,14 @@ func TestFilters(t *testing.T) { rawdb.WriteReceipts(db, block.Hash(), block.NumberU64(), receipts[i]) } - filter := NewRangeFilter(backend, 0, -1, []common.Address{addr}, [][]common.Hash{{hash1, hash2, hash3, hash4}}) + filter := NewRangeFilter(backend, 0, -1, []common.Address{addr}, [][]common.Hash{{hash1, hash2, hash3, hash4}}, false) logs, _ := filter.Logs(context.Background()) if len(logs) != 4 { t.Error("expected 4 log, got", len(logs)) } - filter = NewRangeFilter(backend, 900, 999, []common.Address{addr}, [][]common.Hash{{hash3}}) + filter = NewRangeFilter(backend, 900, 999, []common.Address{addr}, [][]common.Hash{{hash3}}, false) logs, _ = filter.Logs(context.Background()) if len(logs) != 1 { t.Error("expected 1 log, got", len(logs)) @@ -184,7 +184,7 @@ func TestFilters(t *testing.T) { t.Errorf("expected log[0].Topics[0] to be %x, got %x", hash3, logs[0].Topics[0]) } - filter = NewRangeFilter(backend, 990, -1, []common.Address{addr}, [][]common.Hash{{hash3}}) + filter = NewRangeFilter(backend, 990, -1, []common.Address{addr}, [][]common.Hash{{hash3}}, false) logs, _ = filter.Logs(context.Background()) if len(logs) != 1 { t.Error("expected 1 log, got", len(logs)) @@ -193,7 +193,7 @@ func TestFilters(t *testing.T) { t.Errorf("expected log[0].Topics[0] to be %x, got %x", hash3, logs[0].Topics[0]) } - filter = NewRangeFilter(backend, 1, 10, nil, [][]common.Hash{{hash1, hash2}}) + filter = NewRangeFilter(backend, 1, 10, nil, [][]common.Hash{{hash1, hash2}}, false) logs, _ = filter.Logs(context.Background()) if len(logs) != 2 { @@ -201,7 +201,7 @@ func TestFilters(t *testing.T) { } failHash := common.BytesToHash([]byte("fail")) - filter = NewRangeFilter(backend, 0, -1, nil, [][]common.Hash{{failHash}}) + filter = NewRangeFilter(backend, 0, -1, nil, [][]common.Hash{{failHash}}, false) logs, _ = filter.Logs(context.Background()) if len(logs) != 0 { @@ -209,14 +209,14 @@ func TestFilters(t *testing.T) { } failAddr := common.BytesToAddress([]byte("failmenow")) - filter = NewRangeFilter(backend, 0, -1, []common.Address{failAddr}, nil) + filter = NewRangeFilter(backend, 0, -1, []common.Address{failAddr}, nil, false) logs, _ = filter.Logs(context.Background()) if len(logs) != 0 { t.Error("expected 0 log, got", len(logs)) } - filter = NewRangeFilter(backend, 0, -1, nil, [][]common.Hash{{failHash}, {hash1}}) + filter = NewRangeFilter(backend, 0, -1, nil, [][]common.Hash{{failHash}, {hash1}}, false) logs, _ = filter.Logs(context.Background()) if len(logs) != 0 { diff --git a/eth/gasprice/gasprice.go b/eth/gasprice/gasprice.go index 3b8db78a1c..ecde8ac705 100644 --- a/eth/gasprice/gasprice.go +++ b/eth/gasprice/gasprice.go @@ -32,9 +32,10 @@ import ( var maxPrice = big.NewInt(500 * params.GWei) type Config struct { - Blocks int - Percentile int - Default *big.Int `toml:",omitempty"` + Blocks int + Percentile int + Default *big.Int `toml:",omitempty"` + OracleThreshold int `toml:",omitempty"` } // Oracle recommends gas prices based on the content of recent @@ -46,6 +47,9 @@ type Oracle struct { cacheLock sync.RWMutex fetchLock sync.Mutex + defaultPrice *big.Int + sampleTxThreshold int + checkBlocks, maxEmpty, maxBlocks int percentile int } @@ -64,12 +68,14 @@ func NewOracle(backend ethapi.Backend, params Config) *Oracle { percent = 100 } return &Oracle{ - backend: backend, - lastPrice: params.Default, - checkBlocks: blocks, - maxEmpty: blocks / 2, - maxBlocks: blocks * 5, - percentile: percent, + backend: backend, + lastPrice: params.Default, + defaultPrice: params.Default, + checkBlocks: blocks, + maxEmpty: blocks / 2, + maxBlocks: blocks * 5, + percentile: percent, + sampleTxThreshold: params.OracleThreshold, } } @@ -103,6 +109,7 @@ func (gpo *Oracle) SuggestPrice(ctx context.Context) (*big.Int, error) { sent := 0 exp := 0 var blockPrices []*big.Int + var totalTxSamples int for sent < gpo.checkBlocks && blockNum > 0 { go gpo.getBlockPrices(ctx, types.MakeSigner(gpo.backend.ChainConfig(), big.NewInt(int64(blockNum))), blockNum, ch) sent++ @@ -118,6 +125,7 @@ func (gpo *Oracle) SuggestPrice(ctx context.Context) (*big.Int, error) { exp-- if res.price != nil { blockPrices = append(blockPrices, res.price) + totalTxSamples = totalTxSamples + res.number continue } if maxEmpty > 0 { @@ -132,9 +140,11 @@ func (gpo *Oracle) SuggestPrice(ctx context.Context) (*big.Int, error) { } } price := lastPrice - if len(blockPrices) > 0 { + if len(blockPrices) > 0 && totalTxSamples > gpo.sampleTxThreshold { sort.Sort(bigIntArray(blockPrices)) price = blockPrices[(len(blockPrices)-1)*gpo.percentile/100] + } else { + price = gpo.defaultPrice } if price.Cmp(maxPrice) > 0 { price = new(big.Int).Set(maxPrice) @@ -148,8 +158,9 @@ func (gpo *Oracle) SuggestPrice(ctx context.Context) (*big.Int, error) { } type getBlockPricesResult struct { - price *big.Int - err error + number int + price *big.Int + err error } type transactionsByGasPrice []*types.Transaction @@ -163,7 +174,7 @@ func (t transactionsByGasPrice) Less(i, j int) bool { return t[i].GasPrice().Cmp func (gpo *Oracle) getBlockPrices(ctx context.Context, signer types.Signer, blockNum uint64, ch chan getBlockPricesResult) { block, err := gpo.backend.BlockByNumber(ctx, rpc.BlockNumber(blockNum)) if block == nil { - ch <- getBlockPricesResult{nil, err} + ch <- getBlockPricesResult{0, nil, err} return } @@ -175,11 +186,11 @@ func (gpo *Oracle) getBlockPrices(ctx context.Context, signer types.Signer, bloc for _, tx := range txs { sender, err := types.Sender(signer, tx) if err == nil && sender != block.Coinbase() { - ch <- getBlockPricesResult{tx.GasPrice(), nil} + ch <- getBlockPricesResult{len(txs), tx.GasPrice(), nil} return } } - ch <- getBlockPricesResult{nil, nil} + ch <- getBlockPricesResult{0, nil, nil} } type bigIntArray []*big.Int diff --git a/eth/handler.go b/eth/handler.go index 9a02f1f20f..6a1bc369a4 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -64,8 +64,9 @@ type ProtocolManager struct { networkID uint64 forkFilter forkid.Filter // Fork ID filter, constant across the lifetime of the node - fastSync uint32 // Flag whether fast sync is enabled (gets disabled if we already have blocks) - acceptTxs uint32 // Flag whether we're considered synchronised (enables transaction processing) + fastSync uint32 // Flag whether fast sync is enabled (gets disabled if we already have blocks) + acceptTxs uint32 // Flag whether we're considered synchronised (enables transaction processing) + directBroadcast bool checkpointNumber uint64 // Block number for the sync progress validator to cross reference checkpointHash common.Hash // Block hash for the sync progress validator to cross reference @@ -100,18 +101,19 @@ type ProtocolManager struct { // NewProtocolManager returns a new Ethereum sub protocol manager. The Ethereum sub protocol manages peers capable // with the Ethereum network. -func NewProtocolManager(config *params.ChainConfig, checkpoint *params.TrustedCheckpoint, mode downloader.SyncMode, networkID uint64, mux *event.TypeMux, txpool txPool, engine consensus.Engine, blockchain *core.BlockChain, chaindb ethdb.Database, cacheLimit int, whitelist map[uint64]common.Hash) (*ProtocolManager, error) { +func NewProtocolManager(config *params.ChainConfig, checkpoint *params.TrustedCheckpoint, mode downloader.SyncMode, networkID uint64, mux *event.TypeMux, txpool txPool, engine consensus.Engine, blockchain *core.BlockChain, chaindb ethdb.Database, cacheLimit int, whitelist map[uint64]common.Hash, directBroadcast bool) (*ProtocolManager, error) { // Create the protocol manager with the base fields manager := &ProtocolManager{ - networkID: networkID, - forkFilter: forkid.NewFilter(blockchain), - eventMux: mux, - txpool: txpool, - blockchain: blockchain, - peers: newPeerSet(), - whitelist: whitelist, - txsyncCh: make(chan *txsync), - quitSync: make(chan struct{}), + directBroadcast: directBroadcast, + networkID: networkID, + forkFilter: forkid.NewFilter(blockchain), + eventMux: mux, + txpool: txpool, + blockchain: blockchain, + peers: newPeerSet(), + whitelist: whitelist, + txsyncCh: make(chan *txsync), + quitSync: make(chan struct{}), } if mode == downloader.FullSync { @@ -821,7 +823,12 @@ func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool) { return } // Send the block to a subset of our peers - transfer := peers[:int(math.Sqrt(float64(len(peers))))] + var transfer []*peer + if pm.directBroadcast { + transfer = peers[:int(len(peers))] + } else { + transfer = peers[:int(math.Sqrt(float64(len(peers))))] + } for _, peer := range transfer { peer.AsyncSendNewBlock(block, td) } diff --git a/eth/handler_test.go b/eth/handler_test.go index 1b398a8c08..fd5898d6e6 100644 --- a/eth/handler_test.go +++ b/eth/handler_test.go @@ -495,7 +495,7 @@ func testCheckpointChallenge(t *testing.T, syncmode downloader.SyncMode, checkpo if err != nil { t.Fatalf("failed to create new blockchain: %v", err) } - pm, err := NewProtocolManager(config, cht, syncmode, DefaultConfig.NetworkId, new(event.TypeMux), &testTxPool{pool: make(map[common.Hash]*types.Transaction)}, ethash.NewFaker(), blockchain, db, 1, nil) + pm, err := NewProtocolManager(config, cht, syncmode, DefaultConfig.NetworkId, new(event.TypeMux), &testTxPool{pool: make(map[common.Hash]*types.Transaction)}, ethash.NewFaker(), blockchain, db, 1, nil, false) if err != nil { t.Fatalf("failed to start test protocol manager: %v", err) } @@ -582,7 +582,7 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) { if err != nil { t.Fatalf("failed to create new blockchain: %v", err) } - pm, err := NewProtocolManager(config, nil, downloader.FullSync, DefaultConfig.NetworkId, evmux, &testTxPool{pool: make(map[common.Hash]*types.Transaction)}, pow, blockchain, db, 1, nil) + pm, err := NewProtocolManager(config, nil, downloader.FullSync, DefaultConfig.NetworkId, evmux, &testTxPool{pool: make(map[common.Hash]*types.Transaction)}, pow, blockchain, db, 1, nil, false) if err != nil { t.Fatalf("failed to start test protocol manager: %v", err) } @@ -643,7 +643,7 @@ func TestBroadcastMalformedBlock(t *testing.T) { if err != nil { t.Fatalf("failed to create new blockchain: %v", err) } - pm, err := NewProtocolManager(config, nil, downloader.FullSync, DefaultConfig.NetworkId, new(event.TypeMux), new(testTxPool), engine, blockchain, db, 1, nil) + pm, err := NewProtocolManager(config, nil, downloader.FullSync, DefaultConfig.NetworkId, new(event.TypeMux), new(testTxPool), engine, blockchain, db, 1, nil, false) if err != nil { t.Fatalf("failed to start test protocol manager: %v", err) } diff --git a/eth/helper_test.go b/eth/helper_test.go index 3338af71d5..83ba7245a1 100644 --- a/eth/helper_test.go +++ b/eth/helper_test.go @@ -68,7 +68,7 @@ func newTestProtocolManager(mode downloader.SyncMode, blocks int, generator func if _, err := blockchain.InsertChain(chain); err != nil { panic(err) } - pm, err := NewProtocolManager(gspec.Config, nil, mode, DefaultConfig.NetworkId, evmux, &testTxPool{added: newtx, pool: make(map[common.Hash]*types.Transaction)}, engine, blockchain, db, 1, nil) + pm, err := NewProtocolManager(gspec.Config, nil, mode, DefaultConfig.NetworkId, evmux, &testTxPool{added: newtx, pool: make(map[common.Hash]*types.Transaction)}, engine, blockchain, db, 1, nil, false) if err != nil { return nil, nil, err } diff --git a/eth/protocol_test.go b/eth/protocol_test.go index a313e4e6cf..5f57c87175 100644 --- a/eth/protocol_test.go +++ b/eth/protocol_test.go @@ -181,8 +181,8 @@ func TestForkIDSplit(t *testing.T) { blocksNoFork, _ = core.GenerateChain(configNoFork, genesisNoFork, engine, dbNoFork, 2, nil) blocksProFork, _ = core.GenerateChain(configProFork, genesisProFork, engine, dbProFork, 2, nil) - ethNoFork, _ = NewProtocolManager(configNoFork, nil, downloader.FullSync, 1, new(event.TypeMux), &testTxPool{pool: make(map[common.Hash]*types.Transaction)}, engine, chainNoFork, dbNoFork, 1, nil) - ethProFork, _ = NewProtocolManager(configProFork, nil, downloader.FullSync, 1, new(event.TypeMux), &testTxPool{pool: make(map[common.Hash]*types.Transaction)}, engine, chainProFork, dbProFork, 1, nil) + ethNoFork, _ = NewProtocolManager(configNoFork, nil, downloader.FullSync, 1, new(event.TypeMux), &testTxPool{pool: make(map[common.Hash]*types.Transaction)}, engine, chainNoFork, dbNoFork, 1, nil, false) + ethProFork, _ = NewProtocolManager(configProFork, nil, downloader.FullSync, 1, new(event.TypeMux), &testTxPool{pool: make(map[common.Hash]*types.Transaction)}, engine, chainProFork, dbProFork, 1, nil, false) ) ethNoFork.Start(1000) ethProFork.Start(1000) diff --git a/eth/tracers/internal/tracers/assets.go b/eth/tracers/internal/tracers/assets.go index d0a0bf7c1a..c2da1ed1f8 100644 --- a/eth/tracers/internal/tracers/assets.go +++ b/eth/tracers/internal/tracers/assets.go @@ -2,8 +2,8 @@ // sources: // 4byte_tracer.js (2.933kB) // bigram_tracer.js (1.712kB) -// call_tracer.js (8.643kB) -// evmdis_tracer.js (4.194kB) +// call_tracer.js (8.704kB) +// evmdis_tracer.js (4.195kB) // noop_tracer.js (1.271kB) // opcount_tracer.js (1.372kB) // prestate_tracer.js (4.234kB) @@ -117,7 +117,7 @@ func bigram_tracerJs() (*asset, error) { return a, nil } -var _call_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\x5f\x6f\x1b\xb7\xb2\x7f\x96\x3e\xc5\x24\x0f\xb5\x84\x28\x92\x93\xf4\xf6\x02\x76\xd5\x0b\x5d\x47\x49\x0d\xb8\x71\x60\x2b\x0d\x82\x20\x0f\xd4\xee\xac\xc4\x9a\x4b\x6e\x49\xae\xe4\x3d\xa9\xbf\xfb\xc1\x0c\xb9\xab\xd5\x1f\x3b\x6e\x0f\xce\x41\xcf\x8b\xa0\x5d\xce\x0c\x87\x33\xbf\xf9\xc7\x1d\x8d\xe0\xcc\x14\x95\x95\x8b\xa5\x87\x97\xc7\x2f\xfe\x17\x66\x4b\x84\x85\x79\x8e\x7e\x89\x16\xcb\x1c\x26\xa5\x5f\x1a\xeb\xba\xa3\x11\xcc\x96\xd2\x41\x26\x15\x82\x74\x50\x08\xeb\xc1\x64\xe0\x77\xe8\x95\x9c\x5b\x61\xab\x61\x77\x34\x0a\x3c\x07\x97\x49\x42\x66\x11\xc1\x99\xcc\xaf\x85\xc5\x13\xa8\x4c\x09\x89\xd0\x60\x31\x95\xce\x5b\x39\x2f\x3d\x82\xf4\x20\x74\x3a\x32\x16\x72\x93\xca\xac\x22\x91\xd2\x43\xa9\x53\xb4\xbc\xb5\x47\x9b\xbb\x5a\x8f\xb7\xef\x3e\xc0\x05\x3a\x87\x16\xde\xa2\x46\x2b\x14\xbc\x2f\xe7\x4a\x26\x70\x21\x13\xd4\x0e\x41\x38\x28\xe8\x8d\x5b\x62\x0a\x73\x16\x47\x8c\x6f\x48\x95\xeb\xa8\x0a\xbc\x31\xa5\x4e\x85\x97\x46\x0f\x00\x25\x69\x0e\x2b\xb4\x4e\x1a\x0d\xaf\xea\xad\xa2\xc0\x01\x18\x4b\x42\x7a\xc2\xd3\x01\x2c\x98\x82\xf8\xfa\x20\x74\x05\x4a\xf8\x0d\xeb\x23\x0c\xb2\x39\x77\x0a\x52\xf3\x36\x4b\x53\x20\xf8\xa5\xf0\x74\xea\xb5\x54\x0a\xe6\x08\xa5\xc3\xac\x54\x03\x92\x36\x2f\x3d\x7c\x3c\x9f\xfd\x7c\xf9\x61\x06\x93\x77\x9f\xe0\xe3\xe4\xea\x6a\xf2\x6e\xf6\xe9\x14\xd6\xd2\x2f\x4d\xe9\x01\x57\x18\x44\xc9\xbc\x50\x12\x53\x58\x0b\x6b\x85\xf6\x15\x98\x8c\x24\xfc\x32\xbd\x3a\xfb\x79\xf2\x6e\x36\xf9\xff\xf3\x8b\xf3\xd9\x27\x30\x16\xde\x9c\xcf\xde\x4d\xaf\xaf\xe1\xcd\xe5\x15\x4c\xe0\xfd\xe4\x6a\x76\x7e\xf6\xe1\x62\x72\x05\xef\x3f\x5c\xbd\xbf\xbc\x9e\x0e\xe1\x1a\x49\x2b\x24\xfe\x6f\xdb\x3c\x63\xef\x59\x84\x14\xbd\x90\xca\xd5\x96\xf8\x64\x4a\x70\x4b\x53\xaa\x14\x96\x62\x85\x60\x31\x41\xb9\xc2\x14\x04\x24\xa6\xa8\x1e\xed\x54\x92\x25\x94\xd1\x0b\x3e\xf3\xbd\x80\x84\xf3\x0c\xb4\xf1\x03\x70\x88\xf0\xe3\xd2\xfb\xe2\x64\x34\x5a\xaf\xd7\xc3\x85\x2e\x87\xc6\x2e\x46\x2a\x88\x73\xa3\x9f\x86\x5d\x92\x99\x08\xa5\x66\x56\x24\x68\xc9\x39\x02\xb2\x92\xcc\xaf\xcc\x5a\x83\xb7\x42\x3b\x91\x90\xab\xe9\x7f\xc2\x60\x14\x1e\xf0\x96\x9e\xbc\x23\xd0\x82\xc5\xc2\x58\xfa\xaf\x54\x8d\x33\xa9\x3d\x5a\x2d\x14\xcb\x76\x90\x8b\x14\x61\x5e\x81\x68\x0b\x1c\xb4\x0f\x43\x30\x0a\xee\x06\xa9\x33\x63\x73\x86\xe5\xb0\xfb\xb5\xdb\x89\x1a\x3a\x2f\x92\x1b\x52\x90\xe4\x27\xa5\xb5\xa8\x3d\x99\xb2\xb4\x4e\xae\x90\x49\x20\xd0\x44\x7b\x4e\x7f\xfd\x05\xf0\x16\x93\x32\x48\xea\x34\x42\x4e\xe0\xf3\xd7\xbb\x2f\x83\x2e\x8b\x4e\xd1\x25\xa8\x53\x4c\xf9\x7c\x37\x0e\xd6\x4b\xb6\x28\xac\xf1\x68\x85\xf0\x5b\xe9\x7c\x8b\x26\xb3\x26\x07\xa1\xc1\x94\x84\xf8\xb6\x75\xa4\xf6\x86\x05\x0a\xfa\xaf\xd1\xb2\x46\xc3\x6e\xa7\x61\x3e\x81\x4c\x28\x87\x71\x5f\xe7\xb1\xa0\xd3\x48\xbd\x32\x37\x24\xd9\x58\x82\xb0\xad\xc0\x14\x89\x49\x63\x30\xd0\x39\x9a\x63\xa0\x1b\x76\x3b\xc4\x77\x02\x59\xa9\x79\xdb\x9e\x32\x8b\x01\xa4\xf3\x3e\x7c\xed\x76\x48\xec\x99\x28\x7c\x69\x91\xed\x89\xd6\x1a\xeb\x40\xe6\x39\xa6\x52\x78\x54\x55\xb7\xd3\x59\x09\x1b\x16\x60\x0c\xca\x2c\x86\x0b\xf4\x53\x7a\xec\xf5\x4f\xbb\x9d\x8e\xcc\xa0\x17\x56\x9f\x8c\xc7\x9c\x7d\x32\xa9\x31\x0d\xe2\x3b\x7e\x29\xdd\x30\x13\xa5\xf2\xcd\xbe\xc4\xd4\xb1\xe8\x4b\xab\xe9\xef\x5d\xd0\xe2\x23\x82\xd1\xaa\x82\x84\xb2\x8c\x98\x53\x78\xba\xca\x79\xcc\xe3\xe1\xdc\x00\x32\xe1\xc8\x84\x32\x83\x35\x42\x61\xf1\x79\xb2\x44\xf2\x9d\x4e\x30\x6a\xe9\x2a\xc7\x4e\x1d\x03\xed\x36\x34\xc5\xd0\x9b\x77\x65\x3e\x47\xdb\xeb\xc3\x77\x70\x7c\x9b\x1d\xf7\x61\x3c\xe6\x3f\xb5\xee\x91\x27\xea\x4b\x52\x4c\x11\x0f\xca\xfc\xd7\xde\x4a\xbd\x08\x67\x8d\xba\x9e\x67\x20\x40\xe3\x1a\x12\xa3\x19\xd4\xe4\x95\x39\x4a\xbd\x80\xc4\xa2\xf0\x98\x0e\x40\xa4\x29\x78\x13\x90\xd7\xe0\x6c\x7b\x4b\xf8\xee\x3b\xe8\xd1\x66\x63\x38\x3a\xbb\x9a\x4e\x66\xd3\x23\xf8\xe3\x0f\x08\x6f\x9e\x86\x37\x2f\x9f\xf6\x5b\x9a\x49\x7d\x99\x65\x51\x39\x16\x38\x2c\x10\x6f\x7a\x2f\xfa\xc3\x95\x50\x25\x5e\x66\x41\xcd\x48\x3b\xd5\x29\x8c\x23\xcf\xb3\x5d\x9e\x97\x5b\x3c\xc4\x34\x1a\xc1\xc4\x39\xcc\xe7\x0a\xf7\x03\x32\x46\x2c\x07\xaf\xf3\x94\xb1\x08\x7d\x89\xc9\x0b\x85\x84\xaa\x7a\xd7\x68\x7e\xd6\xb8\xe3\xab\x02\x4f\x00\x00\x4c\x31\xe0\x17\x14\x0b\xfc\xc2\x9b\x9f\xf1\x96\x7d\x54\x9b\x90\x50\x35\x49\x53\x8b\xce\xf5\xfa\xfd\x40\x2e\x75\x51\xfa\x93\x2d\xf2\x1c\x73\x63\xab\xa1\xa3\x84\xd4\xe3\xa3\x0d\xc2\x49\x6b\x9e\x85\x70\xe7\x9a\x78\x22\x52\xdf\x0a\xd7\xdb\x2c\x9d\x19\xe7\x4f\xea\x25\x7a\xa8\xd7\xd8\x16\xc4\x76\x74\x7c\x7b\xb4\x6f\xad\xe3\xfe\x06\x09\x2f\x7e\xe8\x13\xcb\xdd\x69\x83\xef\x26\x4d\x0c\x8b\xd2\x2d\x7b\x0c\xa7\xcd\xea\x26\x15\x8c\xc1\xdb\x12\x0f\xc2\x9f\x21\xb5\x0f\x27\x87\x2a\xa3\x5c\xe2\x6d\x99\x30\xac\x16\x82\x33\x0d\x47\xba\xa0\xcc\xeb\xca\x39\xdb\xdc\x1b\xb3\x8f\xae\x08\xae\xeb\xe9\xc5\x9b\xd7\xd3\xeb\xd9\xd5\x87\xb3\xd9\x51\x0b\x4e\x0a\x33\x4f\x4a\x6d\x9f\x41\xa1\x5e\xf8\x25\xeb\x4f\xe2\xb6\x57\x3f\x13\xcf\xf3\x17\x5f\xc2\x1b\x18\x1f\x08\xf9\xce\xc3\x1c\xf0\xf9\x0b\xcb\xbe\xdb\x37\xdf\x36\x69\x30\xe6\xd7\x00\x22\x53\xdc\xb5\x13\xc7\x81\x58\xcc\xd1\x2f\x4d\xca\xc9\x31\x11\x21\xbf\xd6\x56\x4c\x8d\xc6\x3f\x1f\x91\x93\x8b\x8b\x56\x3c\xf2\xf3\xd9\xe5\xeb\x76\x8c\x1e\xbd\x9e\x5e\x4c\xdf\x4e\x66\xd3\x5d\xda\xeb\xd9\x64\x76\x7e\xc6\x6f\xeb\xf0\x1d\x8d\xe0\xfa\x46\x16\x9c\x65\x39\x77\x99\xbc\xe0\x76\xb1\xd1\xd7\x0d\xc0\x2f\x0d\x35\x62\x36\x16\x91\x4c\xe8\xa4\x4e\xee\xae\x76\x9a\x37\xe4\x32\x53\xc7\xca\x7e\x2a\x68\x03\xb5\xdf\xb8\x51\xba\xf7\x16\xe3\xa6\x69\xcf\x9b\x5a\xaf\x8d\x41\x83\x47\x38\x01\x72\x92\xe9\x3d\xfe\x90\xf0\x7f\x70\x0c\x27\xf0\x22\x66\x92\x07\x52\xd5\x4b\x78\x46\xe2\xff\x42\xc2\x7a\x75\x80\xf3\xef\x99\xb6\xbc\x61\xe2\x9a\xdc\x9b\xff\x7c\x3a\x33\xa5\xbf\xcc\xb2\x13\xd8\x35\xe2\xf7\x7b\x46\x6c\xe8\x2f\x50\xef\xd3\xff\xcf\x1e\xfd\x26\xf5\x11\xaa\x4c\x01\x4f\xf6\x20\x12\x12\xcf\x93\x9d\x38\x88\xc6\xe5\x16\x87\xa5\xc1\xf8\x9e\x64\xfb\x72\x1b\xc3\xf7\x65\x8b\x7f\x29\xd9\x1e\x6c\xd5\xa8\x21\xdb\x6e\xc6\x06\x60\xd1\x5b\x89\x2b\x1a\xb7\x8e\x1c\x8b\xa4\xa6\xd5\xac\x85\x4e\x70\x08\x1f\x31\x48\xd4\x88\x9c\x5c\x62\x93\x4b\x3d\x0a\xf7\x7d\xd4\xa8\xc6\x71\x85\x21\x26\xb8\x17\xb5\x08\xb9\xa8\x68\x5c\xc9\x4a\x7d\x53\xc1\x42\x38\x48\x2b\x2d\x72\x99\xb8\x20\x8f\x1b\x5c\x8b\x0b\x61\x59\xac\xc5\xdf\x4b\x74\x34\xfb\x10\x90\x45\xe2\x4b\xa1\x54\x05\x0b\x49\x03\x0c\x71\xf7\x5e\xbe\x3a\x3e\x06\xe7\x65\x81\x3a\x1d\xc0\x0f\xaf\x46\x3f\x7c\x0f\xb6\x54\xd8\x1f\x76\x5b\x69\xbc\x39\x6a\xf4\x06\x2d\x44\xf4\xbc\xc6\xc2\x2f\x7b\x7d\xf8\xe9\x9e\x7a\x70\x4f\x72\x3f\x48\x0b\xcf\xe1\xc5\x97\x21\xe9\x35\xde\xc2\x6d\xf0\x24\xa0\x72\x18\xa5\xd1\xd0\x77\xf9\xfa\xb2\x77\x23\xac\x50\x62\x8e\xfd\x13\x1e\x02\xd9\x56\x6b\x11\xa7\x00\x72\x0a\x14\x4a\x48\x0d\x22\x49\x4c\xa9\x3d\x19\xbe\x6e\xe8\x55\x45\xf9\xfd\xc8\xd7\xf2\x78\x5e\x12\x49\x82\xce\xd5\xe9\x9e\xbd\x46\xea\x88\x9c\xb8\x41\x6a\x27\x53\x6c\x79\x85\xb2\x83\xe1\xd4\x1c\x29\x68\x9c\xac\x05\xe6\xc6\xd1\x26\x73\x84\xb5\xa5\xe1\xc3\x49\x9d\xf0\xf4\x9d\x22\x59\xdb\x81\xd1\x20\x40\x19\x1e\xf9\x39\xc6\x41\xd8\x85\x1b\x86\x7c\x4f\xdb\x52\xce\xd1\x66\x3d\xdc\x06\x72\x1b\xaa\xdc\xe6\xef\xb4\x03\x1a\xf0\x56\x3a\xcf\x5d\x25\x69\x29\x1d\x04\x24\x4b\xbd\x18\x40\x61\x0a\xce\xd3\xdf\x2a\x67\x31\x59\x5f\x4d\x7f\x9d\x5e\x35\xc5\xff\xf1\x4e\xac\xfb\xfe\xa7\xcd\x58\x04\x96\x66\x0e\x8f\xe9\xd3\x03\x8d\xfc\x01\x40\x8d\xef\x01\x14\xc9\xdf\xd4\xc6\xf7\xad\xe3\x28\xe1\xfc\xc6\x31\x0b\x0c\x33\x4d\x5b\x01\x57\x2a\xef\x76\x72\xf7\x6e\x72\x30\x45\x5d\x21\x48\x29\x4e\x3b\x94\xd8\x77\xbb\xed\xad\x85\x4d\xd3\xbd\xc1\xe7\x79\xcb\xc6\x6b\x6e\xb9\x02\x51\x2b\x35\xf0\x7a\xdd\xbb\x89\x50\x0d\x58\x77\x53\x7a\x82\x03\xd5\xef\x4d\xf2\x5b\x08\xf7\xc1\xb1\xd7\x63\xfa\x9b\xcb\xc5\xb9\xf6\xbd\x7a\xf1\x5c\xc3\x73\xa8\x1f\x28\xa9\xc3\xf3\xad\x28\x3a\x90\x1d\x3b\x29\x2a\xf4\x08\x1b\x11\xa7\xb0\xf3\x8a\x04\x05\x73\xb0\xd1\x2c\xfa\xfd\xe2\x7c\x1c\xa5\x91\xc1\x9e\x58\xf4\x43\xfc\xbd\x14\xca\xf5\x8e\x9b\x66\x21\x9c\xc0\x1b\x2e\x6f\xe3\xa6\xc0\xd5\x15\x90\x78\xb6\xda\x8f\x28\x30\xb0\x45\x6b\xd4\x6c\xe9\x3c\x54\xad\x14\x1f\x94\x10\x45\xc4\xb4\xd1\xf8\x32\x02\xf3\x50\xff\xd9\x69\x13\xc0\xd3\xa6\x21\xc8\x84\x54\xa5\xc5\xa7\xa7\x70\x20\xed\xb8\xd2\x66\x22\x61\x5f\x3a\x04\x9e\x58\x1d\x38\x93\xe3\xd2\xac\x83\x02\x87\x92\xd7\x3e\x38\x1a\x1c\xec\x94\x0f\xbe\x7a\x11\x0e\x4a\x27\x16\xd8\x02\x47\x63\xf0\xda\x51\x07\xc7\xe8\xbf\x0c\x9d\x67\xcd\xe3\x37\x50\x14\x76\xf9\x26\x34\x1e\xc2\xc6\x41\x2f\xef\x75\x39\x35\x11\xf7\x3a\xad\x87\x5a\xd5\xd0\x8a\x34\xc8\xf9\x33\x7e\xff\xf7\x38\x3e\x78\x3e\xfe\x3e\x36\xd0\x76\x69\xc3\x19\xb7\x89\xc3\x49\x37\xed\xcd\xb7\x51\xd0\xac\xde\x07\x80\xfb\x3a\x27\x82\xaa\xfe\x0d\x13\xbf\x81\x2b\x37\x3b\xf4\x54\x58\x5c\x49\x53\x52\x1d\xc3\xff\xa6\xc9\xb0\xe9\xfc\xee\xba\x9d\xbb\x78\x45\xc6\xee\x6b\xdf\x91\xad\x97\xf1\x8a\x37\x34\x4d\xad\x2a\x62\xb8\xc4\xc6\x9b\xb3\x2c\x5c\xbe\x76\x98\xff\x81\xbb\xb2\x18\xef\xde\x14\xd4\x15\xc4\x22\xa5\x2c\x8a\xb4\x6a\xea\xe2\x20\xf4\x23\xb0\x14\x3a\x8d\x33\x89\x48\x53\x49\xf2\x18\x8b\xa4\xa1\x58\x08\xa9\xbb\x07\xcd\xf8\xcd\x62\x7c\x08\x19\x7b\x2d\x6e\xbb\x9e\xc6\x59\x92\x06\x3f\xd6\xb8\xfb\x88\xba\xb9\x13\x4b\xbb\xd7\x7e\xf1\xe6\xd0\x68\x57\xe6\xdc\x10\x83\x58\x09\xa9\x04\x0d\x61\xdc\x68\xe9\x14\x12\x85\x42\x87\xcb\x7e\xcc\xbc\x59\xa1\x75\xdd\x47\x80\xfc\xaf\x60\x7c\x27\x39\xd6\x8f\xd1\x1c\x8f\x8f\xd9\xc7\x46\x6c\x38\xfe\x1b\x25\xbc\x8f\xf0\x6a\x99\x37\x44\x96\xf4\xfc\x1d\x08\xb5\xef\x3e\x2e\xa4\xb8\x75\x22\x9a\x9f\xe0\xb8\xd5\x9e\xff\x5d\x82\x6c\x1f\x62\x17\x4d\x9b\x16\x0f\xef\x8d\x19\x80\x42\xc1\xc3\x52\xfd\x95\xa6\x6e\x4b\x1f\x9a\xdd\xea\xe8\x0d\x8d\xdd\x5e\xf8\xf2\xf5\xd6\x12\xeb\x8b\x90\xd0\xe1\xcf\x11\x35\x48\x8f\x56\xd0\x58\x44\xe8\x8a\x1f\x16\x48\x4b\xc7\xe2\xd8\x2f\x92\x82\x2e\x0a\x8e\xb7\xfc\x54\x9f\xa5\x5e\x0c\xbb\x9d\xf0\xbe\x15\xef\x89\xbf\xdd\xc4\x7b\x28\x86\xcc\x19\xaf\x06\x9a\x9b\x81\xc4\xdf\x72\xd3\xc8\xd3\xf3\xce\xf5\x00\xad\xd1\xab\x30\x5a\xef\x5c\x06\x30\x63\xbc\x10\xd8\xbd\x73\xa4\x35\x7e\xb7\x05\x70\x26\x5d\x08\x17\xc4\xec\x84\x84\xbf\xdd\x8f\x88\x9a\x81\x82\xe1\xe4\x30\x03\x2d\x1d\x60\xda\xb9\xa0\x20\x62\x7e\x15\x56\x43\x61\x3f\x69\xaf\x86\x57\xf1\xa0\x32\x6f\xd9\x46\xe6\x6c\x9b\xbb\xd3\xc3\x49\xee\xb8\xc6\xe3\xe1\x64\x46\x36\x6f\x00\x7b\x0f\x6b\x7b\xe4\xd8\x27\x79\x28\x55\xb2\xf4\x3a\xb3\xdd\xc3\xca\xd2\x5b\xad\x87\xbf\x7d\xbc\xc8\x86\xb8\xad\xe2\x16\xcd\x21\x21\x31\xcf\x44\xba\x60\xd9\x5a\x40\x40\x75\xd0\x95\x11\x2d\xff\x81\x51\x62\x3b\x7e\xea\x25\xb0\x18\xbe\x43\x70\x43\x4a\xe1\x63\xe6\x5c\xfc\x4b\x47\xd3\xe4\x26\x2e\x52\x74\xd2\x62\x0a\x99\x44\x95\x82\x49\xd1\xf2\xac\xfa\x9b\x33\x3a\x7c\x71\x42\x2b\x49\x62\xf8\xb2\x16\x3e\x72\xf3\xf7\x3e\x2d\x13\xf4\x15\x64\x28\xf8\xd3\x91\x37\x50\x08\xe7\x20\x47\x41\xd3\x69\x56\x2a\x55\x81\xb1\x29\x92\xf0\x66\x5c\xa3\x90\x34\x50\x3a\xb4\x0e\xd6\x4b\x13\xcb\x24\x77\x69\x05\x35\x9d\xd2\x0f\xe2\x8d\x8c\x74\x85\x12\x15\x48\x4f\x25\x39\x1e\xaa\x1d\xa5\xcd\xf7\x1a\xfe\xe8\x63\xa8\xea\xee\x87\x68\x3d\xd8\x6d\xc7\x28\xbf\xa6\xa7\xed\xe8\x8c\x73\xcd\x76\x5c\x6e\xee\xaa\xb6\x83\xb0\x2e\x1b\xdb\x91\xd6\x2e\x42\xdb\xe1\xc4\x2b\xfc\xb4\x1d\x48\xad\x7e\x99\x17\x18\x1c\x0d\x03\x3f\xed\x84\x16\x6b\x19\x63\x2b\x7c\x9d\x6c\xc8\xf9\x69\x10\x01\x43\x5e\xec\x91\x71\x6e\xb0\xa2\x4c\x1c\x6c\xd4\x2a\x2b\xe1\xc5\xe7\x1b\xac\xbe\x1c\xae\x22\x11\x8e\x2d\xba\xa6\x6c\xd4\x90\x0e\x6b\x0f\x04\x72\xa3\x85\x1c\x1f\x9f\x82\xfc\xb1\xcd\x50\x57\x3e\x90\xcf\x9e\xd5\x7b\xb6\xd7\x3f\xcb\x2f\x75\x74\x36\x88\xdf\x59\xef\x6f\x69\x14\x63\x24\xd0\x50\x50\x74\xef\xba\xff\x0c\x00\x00\xff\xff\x00\x24\x55\x1f\xc3\x21\x00\x00") +var _call_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\xdf\x73\xdb\x36\xf2\x7f\x96\xfe\x8a\x4d\x1e\x6a\x69\xa2\x48\x4a\xd2\x6f\xbf\x33\x76\xd5\x1b\x9d\xa3\xa4\x9e\x71\xe3\x8c\xad\x34\x93\xc9\xe4\x01\x22\x97\x12\x6a\x08\x60\x01\xd0\x32\x2f\xf5\xff\x7e\xb3\x0b\x90\x22\x25\xd9\xf1\xf5\x6e\x6e\x7a\x6f\x24\xb1\xbb\x58\xec\x7e\xf6\x17\x38\x1a\xc1\xa9\xc9\x4b\x2b\x97\x2b\x0f\x2f\xc7\x2f\xfe\x1f\xe6\x2b\x84\xa5\x79\x8e\x7e\x85\x16\x8b\x35\x4c\x0b\xbf\x32\xd6\x75\x47\x23\x98\xaf\xa4\x83\x4c\x2a\x04\xe9\x20\x17\xd6\x83\xc9\xc0\xef\xd0\x2b\xb9\xb0\xc2\x96\xc3\xee\x68\x14\x78\x0e\x2e\x93\x84\xcc\x22\x82\x33\x99\xdf\x08\x8b\xc7\x50\x9a\x02\x12\xa1\xc1\x62\x2a\x9d\xb7\x72\x51\x78\x04\xe9\x41\xe8\x74\x64\x2c\xac\x4d\x2a\xb3\x92\x44\x4a\x0f\x85\x4e\xd1\xf2\xd6\x1e\xed\xda\x55\x7a\xbc\x7d\xf7\x01\xce\xd1\x39\xb4\xf0\x16\x35\x5a\xa1\xe0\x7d\xb1\x50\x32\x81\x73\x99\xa0\x76\x08\xc2\x41\x4e\x5f\xdc\x0a\x53\x58\xb0\x38\x62\x7c\x43\xaa\x5c\x45\x55\xe0\x8d\x29\x74\x2a\xbc\x34\x7a\x00\x28\x49\x73\xb8\x41\xeb\xa4\xd1\xf0\xaa\xda\x2a\x0a\x1c\x80\xb1\x24\xa4\x27\x3c\x1d\xc0\x82\xc9\x89\xaf\x0f\x42\x97\xa0\x84\xdf\xb2\x3e\xc2\x20\xdb\x73\xa7\x20\x35\x6f\xb3\x32\x39\x82\x5f\x09\x4f\xa7\xde\x48\xa5\x60\x81\x50\x38\xcc\x0a\x35\x20\x69\x8b\xc2\xc3\xc7\xb3\xf9\xcf\x17\x1f\xe6\x30\x7d\xf7\x09\x3e\x4e\x2f\x2f\xa7\xef\xe6\x9f\x4e\x60\x23\xfd\xca\x14\x1e\xf0\x06\x83\x28\xb9\xce\x95\xc4\x14\x36\xc2\x5a\xa1\x7d\x09\x26\x23\x09\xbf\xcc\x2e\x4f\x7f\x9e\xbe\x9b\x4f\xff\x7e\x76\x7e\x36\xff\x04\xc6\xc2\x9b\xb3\xf9\xbb\xd9\xd5\x15\xbc\xb9\xb8\x84\x29\xbc\x9f\x5e\xce\xcf\x4e\x3f\x9c\x4f\x2f\xe1\xfd\x87\xcb\xf7\x17\x57\xb3\x21\x5c\x21\x69\x85\xc4\xff\x6d\x9b\x67\xec\x3d\x8b\x90\xa2\x17\x52\xb9\xca\x12\x9f\x4c\x01\x6e\x65\x0a\x95\xc2\x4a\xdc\x20\x58\x4c\x50\xde\x60\x0a\x02\x12\x93\x97\x8f\x76\x2a\xc9\x12\xca\xe8\x25\x9f\xf9\x5e\x40\xc2\x59\x06\xda\xf8\x01\x38\x44\xf8\x71\xe5\x7d\x7e\x3c\x1a\x6d\x36\x9b\xe1\x52\x17\x43\x63\x97\x23\x15\xc4\xb9\xd1\x4f\xc3\x2e\xc9\x4c\x84\x52\x73\x2b\x12\xb4\xe4\x1c\x01\x59\x41\xe6\x57\x66\xa3\xc1\x5b\xa1\x9d\x48\xc8\xd5\xf4\x9c\x30\x18\x85\x07\xbc\xa5\x37\xef\x08\xb4\x60\x31\x37\x96\x9e\x95\xaa\x70\x26\xb5\x47\xab\x85\x62\xd9\x0e\xd6\x22\x45\x58\x94\x20\x9a\x02\x07\xcd\xc3\x10\x8c\x82\xbb\x41\xea\xcc\xd8\x35\xc3\x72\xd8\xfd\xda\xed\x44\x0d\x9d\x17\xc9\x35\x29\x48\xf2\x93\xc2\x5a\xd4\x9e\x4c\x59\x58\x27\x6f\x90\x49\x20\xd0\x44\x7b\xce\x7e\xfd\x05\xf0\x16\x93\x22\x48\xea\xd4\x42\x8e\xe1\xf3\xd7\xbb\x2f\x83\x2e\x8b\x4e\xd1\x25\xa8\x53\x4c\xf9\x7c\xd7\x0e\x36\x2b\xb6\x28\x6c\xf0\xe8\x06\xe1\xb7\xc2\xf9\x06\x4d\x66\xcd\x1a\x84\x06\x53\x10\xe2\x9b\xd6\x91\xda\x1b\x16\x28\xe8\x59\xa3\x65\x8d\x86\xdd\x4e\xcd\x7c\x0c\x99\x50\x0e\xe3\xbe\xce\x63\x4e\xa7\x91\xfa\xc6\x5c\x93\x64\x63\x09\xc2\xb6\x04\x93\x27\x26\x8d\xc1\x40\xe7\xa8\x8f\x81\x6e\xd8\xed\x10\xdf\x31\x64\x85\xe6\x6d\x7b\xca\x2c\x07\x90\x2e\xfa\xf0\xb5\xdb\x21\xb1\xa7\x22\xf7\x85\x45\xb6\x27\x5a\x6b\xac\x03\xb9\x5e\x63\x2a\x85\x47\x55\x76\x3b\x9d\x1b\x61\xc3\x02\x4c\x40\x99\xe5\x70\x89\x7e\x46\xaf\xbd\xfe\x49\xb7\xd3\x91\x19\xf4\xc2\xea\x93\xc9\x84\xb3\x4f\x26\x35\xa6\x41\x7c\xc7\xaf\xa4\x1b\x66\xa2\x50\xbe\xde\x97\x98\x3a\x16\x7d\x61\x35\x3d\xde\x05\x2d\x3e\x22\x18\xad\x4a\x48\x28\xcb\x88\x05\x85\xa7\x2b\x9d\xc7\x75\x3c\x9c\x1b\x40\x26\x1c\x99\x50\x66\xb0\x41\xc8\x2d\x3e\x4f\x56\x48\xbe\xd3\x09\x46\x2d\x5d\xe9\xd8\xa9\x13\xa0\xdd\x86\x26\x1f\x7a\xf3\xae\x58\x2f\xd0\xf6\xfa\xf0\x1d\x8c\x6f\xb3\x71\x1f\x26\x13\x7e\xa8\x74\x8f\x3c\x51\x5f\x92\x62\xf2\x78\x50\xe6\xbf\xf2\x56\xea\x65\x38\x6b\xd4\xf5\x2c\x03\x01\x1a\x37\x90\x18\xcd\xa0\x26\xaf\x2c\x50\xea\x25\x24\x16\x85\xc7\x74\x00\x22\x4d\xc1\x9b\x80\xbc\x1a\x67\xed\x2d\xe1\xbb\xef\xa0\x47\x9b\x4d\xe0\xe8\xf4\x72\x36\x9d\xcf\x8e\xe0\x8f\x3f\x20\x7c\x79\x1a\xbe\xbc\x7c\xda\x6f\x68\x26\xf5\x45\x96\x45\xe5\x58\xe0\x30\x47\xbc\xee\xbd\xe8\x0f\x6f\x84\x2a\xf0\x22\x0b\x6a\x46\xda\x99\x4e\x61\x12\x79\x9e\xed\xf2\xbc\x6c\xf1\x10\xd3\x68\x04\x53\xe7\x70\xbd\x50\xb8\x1f\x90\x31\x62\x39\x78\x9d\xa7\x8c\x45\xe8\x4b\xcc\x3a\x57\x48\xa8\xaa\x76\x8d\xe6\x67\x8d\x3b\xbe\xcc\xf1\x18\x00\xc0\xe4\x03\xfe\x40\xb1\xc0\x1f\xbc\xf9\x19\x6f\xd9\x47\x95\x09\x09\x55\xd3\x34\xb5\xe8\x5c\xaf\xdf\x0f\xe4\x52\xe7\x85\x3f\x6e\x91\xaf\x71\x6d\x6c\x39\x74\x94\x90\x7a\x7c\xb4\x41\x38\x69\xc5\xb3\x14\xee\x4c\x13\x4f\x44\xea\x5b\xe1\x7a\xdb\xa5\x53\xe3\xfc\x71\xb5\x44\x2f\xd5\x1a\xdb\x82\xd8\x8e\xc6\xb7\x47\xfb\xd6\x1a\xf7\xb7\x48\x78\xf1\x43\x9f\x58\xee\x4e\x6a\x7c\xd7\x69\x62\x98\x17\x6e\xd5\x63\x38\x6d\x57\xb7\xa9\x60\x02\xde\x16\x78\x10\xfe\x0c\xa9\x7d\x38\x39\x54\x19\xe5\x12\x6f\x8b\x84\x61\xb5\x14\x9c\x69\x38\xd2\x05\x65\x5e\x57\x2c\xd8\xe6\xde\x98\x7d\x74\x45\x70\x5d\xcd\xce\xdf\xbc\x9e\x5d\xcd\x2f\x3f\x9c\xce\x8f\x1a\x70\x52\x98\x79\x52\xaa\x7d\x06\x85\x7a\xe9\x57\xac\x3f\x89\x6b\xaf\x7e\x26\x9e\xe7\x2f\xbe\x84\x2f\x30\x39\x10\xf2\x9d\x87\x39\xe0\xf3\x17\x96\x7d\xb7\x6f\xbe\x36\x69\x30\xe6\xd7\x00\x22\x93\xdf\x35\x13\xc7\x81\x58\x5c\xa3\x5f\x99\x94\x93\x63\x22\x42\x7e\xad\xac\x98\x1a\x8d\xff\x7a\x44\x4e\xcf\xcf\x1b\xf1\xc8\xef\xa7\x17\xaf\x9b\x31\x7a\xf4\x7a\x76\x3e\x7b\x3b\x9d\xcf\x76\x69\xaf\xe6\xd3\xf9\xd9\x29\x7f\xad\xc2\x77\x34\x82\xab\x6b\x99\x73\x96\xe5\xdc\x65\xd6\x39\xb7\x8b\xb5\xbe\x6e\x00\x7e\x65\xa8\x11\xb3\xb1\x88\x64\x42\x27\x55\x72\x77\x95\xd3\xbc\x21\x97\x99\x2a\x56\xf6\x53\x41\x13\xa8\xfd\xda\x8d\xd2\xbd\xb7\x18\x37\x4d\x7b\xde\x54\x7a\x6d\x0d\x1a\x3c\xc2\x09\x90\x93\x4c\xef\xf1\x87\x84\xbf\xc1\x18\x8e\xe1\x45\xcc\x24\x0f\xa4\xaa\x97\xf0\x8c\xc4\xff\x89\x84\xf5\xea\x00\xe7\x5f\x33\x6d\x79\xc3\xc4\x15\xb9\x37\xff\xfd\x74\x66\x0a\x7f\x91\x65\xc7\xb0\x6b\xc4\xef\xf7\x8c\x58\xd3\x9f\xa3\xde\xa7\xff\xbf\x3d\xfa\x6d\xea\x23\x54\x99\x1c\x9e\xec\x41\x24\x24\x9e\x27\x3b\x71\x10\x8d\xcb\x2d\x0e\x4b\x83\xc9\x3d\xc9\xf6\x65\x1b\xc3\xf7\x65\x8b\x7f\x2b\xd9\x1e\x6c\xd5\xa8\x21\x6b\x37\x63\x03\xb0\xe8\xad\xc4\x1b\x1a\xb7\x8e\x1c\x8b\xa4\xa6\xd5\x6c\x84\x4e\x70\x08\x1f\x31\x48\xd4\x88\x9c\x5c\x62\x93\x4b\x3d\x0a\xf7\x7d\xd4\xa8\xc6\x71\x85\x21\x26\xb8\x17\xb5\x08\x6b\x51\xd2\xb8\x92\x15\xfa\xba\x84\xa5\x70\x90\x96\x5a\xac\x65\xe2\x82\x3c\x6e\x70\x2d\x2e\x85\x65\xb1\x16\x7f\x2f\xd0\xd1\xec\x43\x40\x16\x89\x2f\x84\x52\x25\x2c\x25\x0d\x30\xc4\xdd\x7b\xf9\x6a\x3c\x06\xe7\x65\x8e\x3a\x1d\xc0\x0f\xaf\x46\x3f\x7c\x0f\xb6\x50\xd8\x1f\x76\x1b\x69\xbc\x3e\x6a\xf4\x06\x2d\x44\xf4\xbc\xc6\xdc\xaf\x7a\x7d\xf8\xe9\x9e\x7a\x70\x4f\x72\x3f\x48\x0b\xcf\xe1\xc5\x97\x21\xe9\x35\x69\xe1\x36\x78\x12\x50\x39\x8c\xd2\x68\xe8\xbb\x78\x7d\xd1\xbb\x16\x56\x28\xb1\xc0\xfe\x31\x0f\x81\x6c\xab\x8d\x88\x53\x00\x39\x05\x72\x25\xa4\x06\x91\x24\xa6\xd0\x9e\x0c\x5f\x35\xf4\xaa\xa4\xfc\x7e\xe4\x2b\x79\x3c\x2f\x89\x24\x41\xe7\xaa\x74\xcf\x5e\x23\x75\xc4\x9a\xb8\x41\x6a\x27\x53\x6c\x78\x85\xb2\x83\xe1\xd4\x1c\x29\x68\x9c\xac\x04\xae\x8d\xa3\x4d\x16\x08\x1b\x4b\xc3\x87\x93\x3a\xe1\xe9\x3b\x45\xb2\xb6\x03\xa3\x41\x80\x32\x3c\xf2\x73\x8c\x83\xb0\x4b\x37\x0c\xf9\x9e\xb6\xa5\x9c\xa3\xcd\x66\xd8\x06\x72\x13\xaa\xdc\xe6\xef\xb4\x03\x1a\xf0\x56\x3a\xcf\x5d\x25\x69\x29\x1d\x04\x24\x4b\xbd\x1c\x40\x6e\x72\xce\xd3\xdf\x2a\x67\x31\x59\x5f\xce\x7e\x9d\x5d\xd6\xc5\xff\xf1\x4e\xac\xfa\xfe\xa7\xf5\x58\x04\x96\x66\x0e\x8f\xe9\xd3\x03\x8d\xfc\x01\x40\x4d\xee\x01\x14\xc9\xdf\xd6\xc6\xf7\x8d\xe3\x28\xe1\xfc\xd6\x31\x4b\x0c\x33\x4d\x53\x01\x57\x28\xef\x76\x72\xf7\x6e\x72\x30\x79\x55\x21\x48\x29\x4e\x3b\x94\xd8\x77\xbb\xed\xd6\xc2\xb6\xe9\xde\xe2\xf3\xac\x61\xe3\x0d\xb7\x5c\x81\xa8\x91\x1a\x78\xbd\xea\xdd\x44\xa8\x06\xac\xbb\x29\x3c\xc1\x81\xea\xf7\x36\xf9\x2d\x85\xfb\xe0\xd8\xeb\x31\xfd\x2d\xe4\xf2\x4c\xfb\x5e\xb5\x78\xa6\xe1\x39\x54\x2f\x94\xd4\xe1\x79\x2b\x8a\x0e\x64\xc7\x4e\x8a\x0a\x3d\xc2\x56\xc4\x09\xec\x7c\x22\x41\xc1\x1c\x6c\x34\x8b\x7e\xbf\x38\x8f\xa3\x34\x32\xd8\x13\x8b\x7e\x88\xbf\x17\x42\xb9\xde\xb8\x6e\x16\xc2\x09\xbc\xe1\xf2\x36\xa9\x0b\x5c\x55\x01\x89\xa7\xd5\x7e\x44\x81\x81\x2d\x5a\xa3\x62\x4b\x17\xa1\x6a\xa5\xf8\xa0\x84\x28\x22\xa6\x8d\xda\x97\x11\x98\x87\xfa\xcf\x4e\x93\x00\x9e\xd6\x0d\x41\x26\xa4\x2a\x2c\x3e\x3d\x81\x03\x69\xc7\x15\x36\x13\x09\xfb\xd2\x21\xf0\xc4\xea\xc0\x99\x35\xae\xcc\x26\x28\x70\x28\x79\xed\x83\xa3\xc6\xc1\x4e\xf9\xe0\xab\x17\xe1\xa0\x70\x62\x89\x0d\x70\xd4\x06\xaf\x1c\x75\x70\x8c\xfe\xd3\xd0\x79\x56\xbf\x3e\x02\x45\x77\xff\x19\x78\xec\xf8\x79\xaf\xcf\xa9\x88\xb8\xdb\x69\xbc\x54\xca\x86\x66\xe4\xaf\xe5\xf8\x47\x47\xd8\x2e\x6d\x38\x5a\x9b\x38\x1c\x70\xdb\xd7\x7c\xdb\xfd\xf5\xea\x7d\x9e\xbf\xaf\x65\x22\x8c\xea\xdf\x30\xf1\x5b\x9c\x72\x97\x43\x6f\xb9\xc5\x1b\x69\x0a\x2a\x60\xf8\xbf\x34\x12\xd6\x2d\xdf\x5d\xb7\x73\x17\xef\xc6\xd8\x6f\xcd\xcb\xb1\xcd\x2a\xde\xed\x86\x6e\xa9\x51\x3e\x0c\xd7\xd6\x78\x65\x96\x85\x5b\xd7\x0e\xf3\x3f\x70\x49\x16\x03\xdd\x9b\x9c\xda\x81\x58\x9d\x94\x45\x91\x96\x75\x41\x1c\x84\x46\x04\x56\x42\xa7\x71\x18\x11\x69\x2a\x49\x1e\x83\x90\x34\x14\x4b\x21\x75\xf7\xa0\x19\xbf\x59\x85\x0f\x21\x63\xaf\xb7\x6d\x16\xd2\x38\x44\xd2\xc4\xc7\x1a\x77\x1f\x51\x30\x77\x82\x68\xf7\xbe\x2f\x5e\x19\x1a\xed\x8a\x35\x77\xc2\x20\x6e\x84\x54\x82\xa6\x2f\xee\xb0\x74\x0a\x89\x42\xa1\xc3\x2d\x3f\x66\xde\xdc\xa0\x75\xdd\x47\x80\xfc\xcf\x60\x7c\x27\x2b\x56\xaf\xd1\x1c\x8f\x8f\xd9\xc7\x46\x6c\x38\xfe\x1b\x25\xbc\x8f\xf0\x6a\x98\x37\x44\x96\xf4\xfc\x03\x08\xb5\xef\x3e\x2e\xa4\xb8\x67\x22\x9a\x9f\x60\xdc\xe8\xcb\xff\x2a\x41\xb6\x0f\xb1\xf3\xba\x3f\x8b\x87\xf7\xc6\x0c\x40\xa1\xe0\x29\xa9\xfa\x3d\x53\xf5\xa3\x0f\x0d\x6d\x55\xf4\x86\x8e\x6e\x2f\x7c\xf9\x5e\x6b\x85\xd5\x0d\x48\x68\xed\x17\x88\x1a\xa4\x47\x2b\x68\x1e\x22\x74\xc5\x3f\x0a\xa4\xa5\x63\x71\xec\x17\x49\x41\x17\x05\xc7\xeb\x7d\x2a\xcc\x52\x2f\x87\xdd\x4e\xf8\xde\x88\xf7\xc4\xdf\x6e\xe3\x3d\x54\x40\xe6\x8c\x77\x02\xf5\x95\x40\xe2\x6f\xb9\x5b\xe4\xb1\x79\xe7\x5e\x80\xd6\xe8\x53\x98\xa9\x77\x6e\x01\x98\x31\xde\x04\xec\x5e\x36\xd2\x1a\x7f\x6b\x01\x9c\x49\x97\xc2\x05\x31\x3b\x21\xe1\x6f\xf7\x23\xa2\x62\xa0\x60\x38\x3e\xcc\x40\x4b\x07\x98\x76\x6e\x26\x88\x98\x3f\x85\xd5\x50\xcf\x8f\x9b\xab\xe1\x53\x3c\xa8\x5c\x37\x6c\x23\xd7\x6c\x9b\xbb\x93\xc3\x49\x6e\x5c\xe1\xf1\x70\x32\x23\x9b\xd7\x80\xbd\x87\xb5\x39\x6b\xec\x93\x3c\x94\x2a\x59\x7a\x95\xd9\xee\x61\x65\xe9\x8d\x96\xc3\xdf\x3e\x5e\x64\x4d\xdc\x54\xb1\x45\xd3\x12\xc2\xb7\x8d\x7b\xcb\x87\x26\x2d\x1a\x54\x22\x61\xd5\x5c\x4d\x26\x4f\xc7\xb7\xf5\xcf\x81\x98\xab\x5a\x34\x95\x12\x21\x32\xc2\x79\x39\x2a\xe4\x3f\x30\x6e\xdb\x8c\xc1\x6a\x09\x2c\x86\x9f\x18\xdc\xcd\x52\x08\x9a\x05\x37\x10\x85\xa3\x51\x74\x1b\x5b\x29\x3a\x69\x31\x85\x4c\xa2\x4a\xc1\xa4\x68\x79\xd0\xfd\xcd\x19\x1d\x7e\x57\xa1\x95\x24\x31\xfc\x96\x0b\x7f\xc8\xf9\x67\xa1\x96\x09\xfa\x12\x32\x14\xfc\xdf\xc9\x1b\xc8\x85\x73\xb0\x46\x41\xa3\x6d\x56\x28\x55\x82\xb1\x29\x92\xf0\x7a\xd6\xa3\xb0\x36\x50\x38\xb4\x0e\x36\x2b\x13\x4b\x2d\xb7\x78\x39\x75\xab\xd2\x0f\xe2\x75\x8e\x74\xb9\x12\x25\x48\x4f\x65\x3d\x1e\xaa\x19\xe9\xf5\xcf\x1e\xfe\x63\x64\xc8\xc0\xfb\x61\x5e\x4d\x85\xed\x38\xe7\xcf\xf4\xd6\x8e\xf0\x38\x14\xb5\x63\x7b\x7b\xd1\xd5\x0e\xe4\xaa\xf4\xb4\xa3\xb5\x59\xc8\xda\x21\xc9\x2b\xfc\xd6\x0e\xc6\x46\xab\xcd\x0b\x8c\xa0\x9a\x81\xdf\x76\xc2\x93\xb5\x8c\xf1\x19\x7e\x6d\xd6\xe4\xfc\x36\x88\x80\x21\x2f\xf6\xc8\x38\xd7\x58\x52\x36\x0f\x36\x6a\x94\xa6\xf0\xe1\xf3\x35\x96\x5f\x0e\x57\xa2\x08\xc7\x06\x5d\x5d\x7a\xaa\xb0\x08\x6b\x0f\x24\x83\x5a\x0b\x39\x19\x9f\x80\xfc\xb1\xc9\x50\x55\x4f\x90\xcf\x9e\x55\x7b\x36\xd7\x3f\xcb\x2f\x55\x84\xd7\x88\xdf\x59\xef\xb7\x34\x8a\x31\x12\x68\x28\x28\xba\x77\xdd\x7f\x06\x00\x00\xff\xff\x5a\x43\x33\xde\x00\x22\x00\x00") func call_tracerJsBytes() ([]byte, error) { return bindataRead( @@ -133,11 +133,11 @@ func call_tracerJs() (*asset, error) { } info := bindataFileInfo{name: "call_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0xef, 0x68, 0xda, 0xd8, 0x9, 0xf5, 0xd5, 0x71, 0xa8, 0x8a, 0xfb, 0x30, 0xe8, 0xf0, 0x72, 0x14, 0x36, 0x6b, 0x62, 0x5a, 0x4e, 0xff, 0x16, 0xdc, 0xd3, 0x2c, 0x68, 0x7b, 0x79, 0x9f, 0xd3}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0x39, 0xde, 0xc6, 0x79, 0xff, 0xe3, 0x5d, 0x47, 0xed, 0xbd, 0xf4, 0x21, 0xe8, 0xc9, 0x4, 0xe0, 0xe0, 0xe4, 0x76, 0x88, 0x25, 0x7f, 0x4f, 0x30, 0xfe, 0x30, 0x1f, 0x8c, 0x4d, 0x76, 0x3d}} return a, nil } -var _evmdis_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\xdf\x6f\xda\xca\x12\x7e\x86\xbf\x62\x94\x27\x50\x29\x60\x63\x08\x38\x27\x47\xe2\xa6\xf4\x1c\xae\xd2\x24\x02\x72\x8f\x2a\x94\x87\x05\xc6\xb0\xaa\xf1\x5a\xbb\x6b\x72\xb8\x55\xfe\xf7\xab\xd9\x59\x03\xf9\x75\xdb\x4a\xa7\x0f\x3b\xb5\x77\xbe\x6f\xbe\x9d\x19\xcf\x92\x56\x0b\xae\x54\xbe\xd7\x72\xbd\xb1\x10\xb6\x83\x73\x98\x6d\x10\xd6\xea\x23\xda\x0d\x6a\x2c\xb6\x30\x2c\xec\x46\x69\x53\x6d\xb5\x60\xb6\x91\x06\x12\x99\x22\x48\x03\xb9\xd0\x16\x54\x02\xf6\x85\x7f\x2a\x17\x5a\xe8\x7d\xb3\xda\x6a\x31\xe6\xcd\x6d\x62\x48\x34\x22\x18\x95\xd8\x47\xa1\x31\x86\xbd\x2a\x60\x29\x32\xd0\xb8\x92\xc6\x6a\xb9\x28\x2c\x82\xb4\x20\xb2\x55\x4b\x69\xd8\xaa\x95\x4c\xf6\x44\x29\x2d\x14\xd9\x0a\xb5\x0b\x6d\x51\x6f\x4d\xa9\xe3\x8f\x9b\x7b\xb8\x46\x63\x50\xc3\x1f\x98\xa1\x16\x29\xdc\x15\x8b\x54\x2e\xe1\x5a\x2e\x31\x33\x08\xc2\x40\x4e\x6f\xcc\x06\x57\xb0\x70\x74\x04\xfc\x4c\x52\xa6\x5e\x0a\x7c\x56\x45\xb6\x12\x56\xaa\xac\x01\x28\x49\x39\xec\x50\x1b\xa9\x32\xe8\x94\xa1\x3c\x61\x03\x94\x26\x92\x9a\xb0\x74\x00\x0d\x2a\x27\x5c\x1d\x44\xb6\x87\x54\xd8\x23\xf4\x27\x12\x72\x3c\xf7\x0a\x64\xe6\xc2\x6c\x54\x8e\x60\x37\xc2\xd2\xa9\x1f\x65\x9a\xc2\x02\xa1\x30\x98\x14\x69\x83\xd8\x16\x85\x85\xbf\xc6\xb3\x3f\x6f\xef\x67\x30\xbc\xf9\x0a\x7f\x0d\x27\x93\xe1\xcd\xec\xeb\x05\x3c\x4a\xbb\x51\x85\x05\xdc\x21\x53\xc9\x6d\x9e\x4a\x5c\xc1\xa3\xd0\x5a\x64\x76\x0f\x2a\x21\x86\x2f\xa3\xc9\xd5\x9f\xc3\x9b\xd9\xf0\x5f\xe3\xeb\xf1\xec\x2b\x28\x0d\x9f\xc7\xb3\x9b\xd1\x74\x0a\x9f\x6f\x27\x30\x84\xbb\xe1\x64\x36\xbe\xba\xbf\x1e\x4e\xe0\xee\x7e\x72\x77\x3b\x1d\x35\x61\x8a\xa4\x0a\x09\xff\xe3\x9c\x27\xae\x7a\x1a\x61\x85\x56\xc8\xd4\x94\x99\xf8\xaa\x0a\x30\x1b\x55\xa4\x2b\xd8\x88\x1d\x82\xc6\x25\xca\x1d\xae\x40\xc0\x52\xe5\xfb\x9f\x2e\x2a\x71\x89\x54\x65\x6b\x77\xe6\x77\x1b\x12\xc6\x09\x64\xca\x36\xc0\x20\xc2\x6f\x1b\x6b\xf3\xb8\xd5\x7a\x7c\x7c\x6c\xae\xb3\xa2\xa9\xf4\xba\x95\x32\x9d\x69\xfd\xde\xac\x12\x27\xee\xb6\x2b\x69\x66\x5a\x2c\x51\x83\x46\x5b\xe8\xcc\x80\x29\x92\x84\xfc\x2c\xc8\x2c\x51\x7a\xeb\xda\x04\x12\xad\xb6\x20\xc0\x92\x2f\x58\x05\x39\x6a\xda\xf4\x14\x1f\x8d\xdd\xa7\x4e\xe6\x4a\x1a\x61\x0c\x6e\x17\xe9\xbe\x59\xfd\x5e\xad\x18\x2b\x96\xdf\x62\x98\x7f\x57\xb9\x89\x61\xfe\xf0\xf4\xd0\xa8\x56\x2b\x59\x5e\x98\x0d\x9a\x18\xbe\xb7\x63\x68\x37\x20\x88\x21\x68\x40\xe8\xd6\x8e\x5b\x23\xb7\x76\xdd\xda\x73\xeb\xb9\x5b\xfb\x6e\x1d\xb8\x35\x68\xb3\x61\x74\xc0\x6e\x01\xfb\x05\xec\x18\xb0\x67\xc8\x9e\xa1\x8f\xc3\x81\x42\x8e\x14\x72\xa8\x90\x63\x85\xcc\xd2\x61\x97\x88\x59\x22\x66\xe9\x32\x4b\x97\x59\xba\xec\xd2\x65\x96\xae\x17\xdc\x75\xe7\xe9\x32\x4b\xf7\x9c\x9f\x98\xa5\xcb\x2c\x3d\x3e\x72\x8f\x01\x3d\x7f\x44\x06\xf4\x58\x7c\x8f\x01\x3d\x06\xf4\x19\xd0\xe7\xb0\xfd\x90\x9f\x3a\x6c\x98\xa5\xcf\x61\xfb\x3d\x36\x1c\xb6\xcf\x2c\x7d\x66\x19\xb0\xf8\x41\xe0\xf6\x06\x1c\x6f\xc0\xf1\x06\x3e\xab\x65\x5a\x7d\x5e\xdb\x3e\xb1\xed\xd0\xdb\x8e\xb7\x91\xb7\x5d\x6f\x7d\xe6\xdb\x3e\xf5\x6d\x9f\xfb\xb6\xe7\x3b\xd4\xc9\xf3\x05\x9e\x2f\xf0\x7c\x81\xe7\x0b\x3c\x5f\x59\xc9\xb2\x94\x65\x2d\x7d\x31\x03\x5f\xcd\xc0\x97\x33\xf0\xf5\x0c\x7c\x41\x03\x5f\xd1\xc0\x97\x34\xf0\x35\x0d\x42\xcf\x17\xf6\x63\x08\xc9\x0e\x62\xe8\x34\x20\xe8\xb4\x63\x88\xc8\x06\x31\x74\xc9\x86\x31\xf4\xc8\x76\x62\x38\x27\x1b\xc5\xd0\x27\xdb\x8d\x61\x40\x96\xf8\xa8\x6b\x3b\x44\x48\x8c\x1d\x52\x48\x94\x1d\x92\x48\x9c\x11\x69\x24\xd2\x88\x44\x12\x6b\x44\x2a\x89\x36\x22\x99\xc4\x1b\x45\xac\x23\xea\xb2\x8e\xa8\xc7\x3a\xa2\x73\xd6\x41\xdd\xe7\x00\x03\xd6\x41\xfd\x47\x3a\xa8\x01\x49\x87\xeb\x40\xd2\xe1\x7a\x90\x74\xb8\x2e\x24\x4a\xea\x43\xa7\xc3\x75\x22\x91\x52\x2f\x3a\x1d\xae\x1b\x89\xd6\xf5\x23\xf1\xfa\x8e\x0c\x7a\x81\xb7\xa1\xb7\x1d\x6f\x23\x67\xc3\xc8\x7f\x45\x91\xff\x8c\x22\xff\x1d\x45\x1d\xbf\xef\xfd\xdc\x47\xf0\x44\xdf\x79\xab\x05\x1a\x4d\x91\x5a\x1a\xfe\x32\xdb\xa9\x6f\x34\x9e\x37\x98\x81\x48\x53\x37\xc7\x54\xbe\x54\x2b\x34\x3c\x1f\x17\x88\x19\x48\x8b\x5a\xd0\x05\xa1\x76\xa8\xe9\x6e\x2c\x27\x93\xa3\x23\x4c\x22\x33\x91\x96\xc4\x7e\x86\xd2\x60\x92\xd9\xba\x59\xad\xf0\xfb\x18\x92\x22\x5b\xd2\xe8\xaa\xd5\xe1\xbb\xa7\x00\xbb\x91\xa6\xe9\x46\xd2\xbc\xfd\xd0\x54\xb9\xb9\x80\x52\x67\x22\xde\x92\x49\xd4\x62\x69\x0b\x91\x02\xfe\x8d\xcb\xc2\xcd\x42\x95\x80\xc8\xbc\x72\x48\x78\xe0\x57\x1c\xfe\x24\x6a\xaa\xd6\x0d\x58\x2d\x28\x78\x19\xc2\x58\xcc\x4f\x23\xd0\xb5\x81\x3b\xd4\xfb\x92\xcb\x5d\x83\x14\xf2\x3f\x5f\x7c\x38\x24\x6a\xc2\xbd\xc9\x5c\xad\x54\x76\x42\x43\xa2\xc5\x16\xe1\xf2\xf4\x74\xc7\xff\x36\x53\xcc\xd6\x76\x03\x1f\x21\x78\xb8\xa8\x7a\x04\x6a\xad\x34\x5c\x42\xaa\xd6\xcd\x35\xda\x11\x3d\xd6\xea\x17\xd5\x4a\x45\x26\x50\x73\xbb\x4c\x5f\x71\xdc\xf3\x33\xf7\xea\xec\x01\x2e\x19\x4a\x9e\x4f\x80\xa9\x41\x20\x80\xa7\xf9\x84\xb9\xdd\xd4\xea\x70\x79\x2a\xc5\xc7\xf7\x74\x2a\xa7\x4b\x05\x2e\xf9\xa9\xa2\xf2\x18\xe8\x1f\x11\xa8\xbc\x69\xd5\x4d\xb1\x5d\xa0\xae\xd5\x1b\x6e\x7b\x45\x84\x10\xc3\x73\x7e\xde\x2b\xcb\x3c\x7f\x70\xcf\x4f\x24\xc9\xa9\x77\x8a\xa9\xb6\xe5\xc9\x7f\x87\xb6\x8f\xee\xce\x9e\x6b\xdc\xa9\x1c\x2e\xe1\xe0\x38\x7f\x05\xe1\x64\x11\x22\x51\xba\x46\x28\x09\x97\xd0\xbe\x00\x09\xbf\xf1\xd9\xfc\x0d\x36\x67\xb6\xa6\xca\x1f\x2e\x40\x7e\xf8\x50\x77\xa0\x8a\x7f\xcb\x1a\x9b\xe4\xea\x72\xc4\x09\xc9\x11\xbf\xd5\x64\xbd\x69\xd5\xd4\x6a\x99\xad\x6b\x41\xaf\xee\x72\x5f\x79\xa2\xc5\x3c\x4a\xbb\x64\x7f\x97\x12\xef\x54\xf7\x67\x58\x0a\x83\x70\x76\x35\xbc\xbe\x3e\x8b\xe1\xf8\x70\x75\xfb\x69\x74\x16\x1f\x0e\x29\x33\x63\xe9\xe7\x2b\x97\xf8\x24\x6e\xa7\xde\xdc\x89\xb4\xc0\xdb\x84\xeb\x7d\x70\x97\xff\xc5\xd7\xde\xd1\x2b\x6f\x2e\xe0\xfc\x6c\x2d\x8c\x6b\x87\x17\x80\xf6\xbb\x00\xab\xde\xf2\x0f\x9e\xa7\xe1\x39\xc4\x31\xbd\x85\x0a\x4f\x50\x2f\x30\x32\xcb\x0b\x7b\xc0\x6c\x71\xab\xf4\xbe\x69\xe8\x87\x4f\xcd\xe7\xa4\x71\x48\xce\x07\x7f\xee\x17\x14\xc7\x5e\xcf\x8a\x34\x7d\xbe\xc7\x73\xe4\x9d\x4d\x95\x73\x4e\xe6\xbe\x77\x4e\x3e\x02\xd7\x02\xec\xe7\xa3\x2d\x34\x8a\x6f\x17\xc7\x8a\x7e\x1a\x5d\x8f\xfe\x18\xce\x46\xcf\x2a\x3b\x9d\x0d\x67\xe3\x2b\x7e\xf5\xe3\xda\x86\xbf\x54\xdb\xd7\x9d\x70\x3c\x87\x3b\x06\xbc\x6a\xc1\xb7\x5b\xe0\x97\x7b\xe0\x97\x9a\xe0\x58\xd0\x7f\xa2\xa2\xff\xbf\xa4\xff\x74\x4d\x27\xa3\xd9\xfd\xe4\xe6\xa4\x74\xf4\xe7\xca\x4f\x7c\x33\xde\xf5\xed\xba\x05\xaf\xdc\x79\x7c\xf9\x2b\xee\x8d\xc6\x57\x85\x6d\xb8\xd0\x1f\x4a\xd6\x77\xf4\x4e\x67\xb7\x77\xc7\xde\xbb\x1f\x5f\x8d\x0f\x43\xe5\x47\x31\xda\x0d\x68\xbf\xc3\xfa\xef\xfb\x2f\x77\x9f\x46\xd3\x99\x67\x2a\x33\x9b\x2f\x0f\x9f\xe9\x1a\xed\xdd\x55\xed\x64\x06\xca\xa4\x9c\x7f\xd2\xdc\x51\x9a\xcb\xe9\x77\x40\xa7\x98\x1d\xe0\xcf\x6e\x0e\xf8\x08\xed\xbf\xbb\x78\xe4\x3a\x0e\xf7\x97\x05\xf3\x37\x98\x23\x3e\xd6\xf5\xd9\x45\x7a\x3c\xdd\xf3\x3b\x88\xf1\xd5\xca\x53\xf5\xa9\xfa\xbf\x00\x00\x00\xff\xff\x51\x4b\xdc\x7e\x62\x10\x00\x00") +var _evmdis_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\xdf\x6f\xda\xca\x12\x7e\x86\xbf\x62\x94\x27\x50\x29\x60\x63\x08\x38\x27\x47\xe2\xa6\xf4\x1c\xae\xd2\x24\x02\x72\x8f\x2a\x94\x87\x05\xc6\xb0\xaa\xf1\x5a\xbb\x6b\x72\xb8\x55\xfe\xf7\xab\xd9\x59\x03\xf9\x75\xdb\x4a\xa7\x0f\x3b\xb5\x77\xbe\x6f\xbe\x9d\x19\xcf\x92\x56\x0b\xae\x54\xbe\xd7\x72\xbd\xb1\x10\xb6\x83\x73\x98\x6d\x10\xd6\xea\x23\xda\x0d\x6a\x2c\xb6\x30\x2c\xec\x46\x69\x53\x6d\xb5\x60\xb6\x91\x06\x12\x99\x22\x48\x03\xb9\xd0\x16\x54\x02\xf6\x85\x7f\x2a\x17\x5a\xe8\x7d\xb3\xda\x6a\x31\xe6\xcd\x6d\x62\x48\x34\x22\x18\x95\xd8\x47\xa1\x31\x86\xbd\x2a\x60\x29\x32\xd0\xb8\x92\xc6\x6a\xb9\x28\x2c\x82\xb4\x20\xb2\x55\x4b\x69\xd8\xaa\x95\x4c\xf6\x44\x29\x2d\x14\xd9\x0a\xb5\x0b\x6d\x51\x6f\x4d\xa9\xe3\x8f\x9b\x7b\xb8\x46\x63\x50\xc3\x1f\x98\xa1\x16\x29\xdc\x15\x8b\x54\x2e\xe1\x5a\x2e\x31\x33\x08\xc2\x40\x4e\x6f\xcc\x06\x57\xb0\x70\x74\x04\xfc\x4c\x52\xa6\x5e\x0a\x7c\x56\x45\xb6\x12\x56\xaa\xac\x01\x28\x49\x39\xec\x50\x1b\xa9\x32\xe8\x94\xa1\x3c\x61\x03\x94\x26\x92\x9a\xb0\x74\x00\x0d\x2a\x27\x5c\x1d\x44\xb6\x87\x54\xd8\x23\xf4\x27\x12\x72\x3c\xf7\x0a\x64\xe6\xc2\x6c\x54\x8e\x60\x37\xc2\xd2\xa9\x1f\x65\x9a\xc2\x02\xa1\x30\x98\x14\x69\x83\xd8\x16\x85\x85\xbf\xc6\xb3\x3f\x6f\xef\x67\x30\xbc\xf9\x0a\x7f\x0d\x27\x93\xe1\xcd\xec\xeb\x05\x3c\x4a\xbb\x51\x85\x05\xdc\x21\x53\xc9\x6d\x9e\x4a\x5c\xc1\xa3\xd0\x5a\x64\x76\x0f\x2a\x21\x86\x2f\xa3\xc9\xd5\x9f\xc3\x9b\xd9\xf0\x5f\xe3\xeb\xf1\xec\x2b\x28\x0d\x9f\xc7\xb3\x9b\xd1\x74\x0a\x9f\x6f\x27\x30\x84\xbb\xe1\x64\x36\xbe\xba\xbf\x1e\x4e\xe0\xee\x7e\x72\x77\x3b\x1d\x35\x61\x8a\xa4\x0a\x09\xff\xe3\x9c\x27\xae\x7a\x1a\x61\x85\x56\xc8\xd4\x94\x99\xf8\xaa\x0a\x30\x1b\x55\xa4\x2b\xd8\x88\x1d\x82\xc6\x25\xca\x1d\xae\x40\xc0\x52\xe5\xfb\x9f\x2e\x2a\x71\x89\x54\x65\x6b\x77\xe6\x77\x1b\x12\xc6\x09\x64\xca\x36\xc0\x20\xc2\x6f\x1b\x6b\xf3\xb8\xd5\x7a\x7c\x7c\x6c\xae\xb3\xa2\xa9\xf4\xba\x95\x32\x9d\x69\xfd\xde\xac\x12\x27\xee\xb6\x2b\x69\x66\x5a\x2c\x51\x83\x46\x5b\xe8\xcc\x80\x29\x92\x44\x2e\x25\x66\x16\x64\x96\x28\xbd\x75\x7d\x02\x89\x56\x5b\x10\x60\xc9\x19\xac\x82\x1c\x35\x6d\x7a\x8e\x8f\xc6\xee\x53\xa7\x73\x25\x8d\x30\x06\xb7\x8b\x74\xdf\xac\x7e\xaf\x56\x8c\x15\xcb\x6f\x31\xcc\xbf\xab\xdc\xc4\x30\x7f\x78\x7a\x68\x54\xab\x95\x2c\x2f\xcc\x06\x4d\x0c\xdf\xdb\x31\xb4\x1b\x10\xc4\x10\x34\x20\x74\x6b\xc7\xad\x91\x5b\xbb\x6e\xed\xb9\xf5\xdc\xad\x7d\xb7\x0e\xdc\x1a\xb4\xd9\x30\x3a\x60\xb7\x80\xfd\x02\x76\x0c\xd8\x33\x64\xcf\xd0\xc7\xe1\x40\x21\x47\x0a\x39\x54\xc8\xb1\x42\x66\xe9\xb0\x4b\xc4\x2c\x11\xb3\x74\x99\xa5\xcb\x2c\x5d\x76\xe9\x32\x4b\xd7\x0b\xee\xba\xf3\x74\x99\xa5\x7b\xce\x4f\xcc\xd2\x65\x96\x1e\x1f\xb9\xc7\x80\x9e\x3f\x22\x03\x7a\x2c\xbe\xc7\x80\x1e\x03\xfa\x0c\xe8\x73\xd8\x7e\xc8\x4f\x1d\x36\xcc\xd2\xe7\xb0\xfd\x1e\x1b\x0e\xdb\x67\x96\x3e\xb3\x0c\x58\xfc\x20\x70\x7b\x03\x8e\x37\xe0\x78\x03\x9f\xd5\x32\xad\x3e\xaf\x6d\x9f\xd8\x76\xe8\x6d\xc7\xdb\xc8\xdb\xae\xb7\x3e\xf3\x6d\x9f\xfa\xb6\xcf\x7d\xdb\xf3\x1d\xea\xe4\xf9\x02\xcf\x17\x78\xbe\xc0\xf3\x05\x9e\xaf\xac\x64\x59\xca\xb2\x96\xbe\x98\x81\xaf\x66\xe0\xcb\x19\xf8\x7a\x06\xbe\xa0\x81\xaf\x68\xe0\x4b\x1a\xf8\x9a\x06\xa1\xe7\x0b\xfb\x31\x84\x64\x07\x31\x74\x1a\x10\x74\xda\x31\x44\x64\x83\x18\xba\x64\xc3\x18\x7a\x64\x3b\x31\x9c\x93\x8d\x62\xe8\x93\xed\xc6\x30\x20\x4b\x7c\xd4\xb5\x1d\x22\x24\xc6\x0e\x29\x24\xca\x0e\x49\x24\xce\x88\x34\x12\x69\x44\x22\x89\x35\x22\x95\x44\x1b\x91\x4c\xe2\x8d\x22\xd6\x11\x75\x59\x47\xd4\x63\x1d\xd1\x39\xeb\xa0\xee\x73\x80\x01\xeb\xa0\xfe\x23\x1d\xd4\x80\xa4\xc3\x75\x20\xe9\x70\x3d\x48\x3a\x5c\x17\x12\x25\xf5\xa1\xd3\xe1\x3a\x91\x48\xa9\x17\x9d\x0e\xd7\x8d\x44\xeb\xfa\x91\x78\x7d\x47\x06\xbd\xc0\xdb\xd0\xdb\x8e\xb7\x91\xb3\x61\xe4\xbf\xa2\xc8\x7f\x46\x91\xff\x8e\xa2\x8e\xdf\xf7\x7e\xee\x23\x78\xa2\xef\xbc\xd5\x02\x8d\xa6\x48\x2d\x4d\x7f\x99\xed\xd4\x37\x9a\xcf\x1b\xcc\x40\xa4\xa9\x1b\x64\x2a\x5f\xaa\x15\x1a\x1e\x90\x0b\xc4\x0c\xa4\x45\x2d\xe8\x86\x50\x3b\xd4\x74\x39\x96\xa3\xc9\xd1\x11\x26\x91\x99\x48\x4b\x62\x3f\x44\x69\x30\xc9\x6c\xdd\xac\x56\xf8\x7d\x0c\x49\x91\x2d\x69\x74\xd5\xea\xf0\xdd\x53\x80\xdd\x48\xd3\x74\x23\x69\xde\x7e\x68\xaa\xdc\x5c\x40\xa9\x33\x11\x6f\xc9\x24\x6a\xb1\xb4\x85\x48\x01\xff\xc6\x65\xe1\x66\xa1\x4a\x40\x64\x5e\x39\x24\x3c\xf1\x2b\x0e\x7f\x12\x35\x55\xeb\x06\xac\x16\x14\xbc\x0c\x61\x2c\xe6\xa7\x11\xe8\xde\xc0\x1d\xea\x7d\xc9\xe5\xee\x41\x0a\xf9\x9f\x2f\x3e\x1c\x12\x35\xe1\xde\x64\xae\x56\x2a\x3b\xa1\x21\xd1\x62\x8b\x70\x79\x7a\xba\xe3\x7f\x9b\x29\x66\x6b\xbb\x81\x8f\x10\x3c\x5c\x54\x3d\x02\xb5\x56\x1a\x2e\x21\x55\xeb\xe6\x1a\xed\x88\x1e\x6b\xf5\x8b\x6a\xa5\x22\x13\xa8\xb9\x5d\xa6\xaf\x38\xee\xf9\x99\x7b\x75\xf6\x00\x97\x0c\x25\xcf\x27\xc0\xd4\x20\x10\xc0\xd3\x7c\xc2\xdc\x6e\x6a\x75\xb8\x3c\x95\xe2\xe3\x7b\x3a\x95\xd3\xa5\x02\x97\xfc\x54\x51\x79\x0c\xf4\x8f\x08\x54\xde\xb4\xea\xa6\xd8\x2e\x50\xd7\xea\x0d\xb7\xbd\x22\x42\x88\xe1\x39\x3f\xef\x95\x65\x9e\x3f\xb8\xe7\x27\x92\xe4\xd4\x3b\xc5\x54\xdb\xf2\xe4\xbf\x43\xdb\x47\x77\x67\xcf\x35\xee\x54\x0e\x97\x70\x70\x9c\xbf\x82\x70\xb2\x08\x91\x28\x5d\x23\x94\x84\x4b\x68\x5f\x80\x84\xdf\xf8\x6c\xfe\x06\x9b\x33\x5b\x53\xe5\x0f\x17\x20\x3f\x7c\xa8\x3b\x50\xc5\xbf\x65\x8d\x4d\x72\x75\x39\xe2\x84\xe4\x88\xdf\x6a\xb2\xde\xb4\x6a\x6a\xb5\xcc\xd6\xb5\xa0\x57\x77\xb9\xaf\x3c\xd1\x62\x1e\xa5\x5d\xb2\xbf\x4b\x89\x77\xaa\xfb\x33\x2c\x85\x41\x38\xbb\x1a\x5e\x5f\x9f\xc5\x70\x7c\xb8\xba\xfd\x34\x3a\x8b\x0f\x87\x94\x99\xb1\xf4\xfb\x95\x4b\x7c\x12\xb7\x53\x6f\xee\x44\x5a\xe0\x6d\xc2\xf5\x3e\xb8\xcb\xff\xe2\x6b\xef\xe8\x95\x37\x17\x70\x7e\xb6\x16\xc6\xb5\xc3\x0b\x40\xfb\x5d\x80\x55\x6f\xf9\x07\xcf\xd3\xf0\x1c\xe2\x98\xde\x42\x85\x27\xa8\x17\x18\x99\xe5\x85\x3d\x60\xb6\xb8\x55\x7a\xdf\x34\xf4\xcb\xa7\xe6\x73\xd2\x38\x24\xe7\x83\x3f\xf7\x0b\x8a\x63\xaf\x67\x45\x9a\x3e\xdf\xe3\x39\xf2\xce\xa6\xca\x39\x27\x73\xdf\x3b\x27\x1f\x81\x6b\x01\xf6\xf3\xd1\x16\x1a\xc5\xb7\x8b\x63\x45\x3f\x8d\xae\x47\x7f\x0c\x67\xa3\x67\x95\x9d\xce\x86\xb3\xf1\x15\xbf\xfa\x71\x6d\xc3\x5f\xaa\xed\xeb\x4e\x38\x9e\xc3\x1d\x03\x5e\xb5\xe0\xdb\x2d\xf0\xcb\x3d\xf0\x4b\x4d\x70\x2c\xe8\x3f\x51\xd1\xff\x5f\xd2\x7f\xba\xa6\x93\xd1\xec\x7e\x72\x73\x52\x3a\xfa\x7b\xe5\x27\xbe\x19\xef\xfa\x76\xdd\x82\x57\xee\x3c\xbe\xfc\x15\xf7\x46\xe3\xab\xc2\x36\x5c\xe8\x0f\x25\xeb\x3b\x7a\xa7\xb3\xdb\xbb\x63\xef\xdd\x8f\xaf\xc6\x87\xa1\xf2\xa3\x18\xed\x06\xb4\xdf\x61\xfd\xf7\xfd\x97\xbb\x4f\xa3\xe9\xcc\x33\x95\x99\xcd\x97\x87\xcf\x74\x8d\xf6\xee\xaa\x76\x32\x03\x65\x52\xce\x3f\x69\xee\x28\xcd\xe5\xf4\x3b\xa0\x53\xcc\x0e\xf0\x67\x37\x07\x7c\x84\xf6\xdf\x5d\x3c\x72\x1d\x87\xfb\xcb\x82\xf9\x1b\xcc\x11\x1f\xeb\xfa\xec\x22\x3d\x9e\xee\xf9\x1d\xc4\xf8\x6a\xe5\xa9\xfa\x54\xfd\x5f\x00\x00\x00\xff\xff\xdf\x2f\xd9\xfa\x63\x10\x00\x00") func evmdis_tracerJsBytes() ([]byte, error) { return bindataRead( @@ -153,7 +153,7 @@ func evmdis_tracerJs() (*asset, error) { } info := bindataFileInfo{name: "evmdis_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0xe8, 0x96, 0xa1, 0x8b, 0xc, 0x68, 0x3c, 0xe8, 0x5d, 0x7e, 0xf0, 0xab, 0xfe, 0xec, 0xd1, 0xb, 0x3d, 0xfc, 0xc7, 0xac, 0xb5, 0xa, 0x41, 0x55, 0x0, 0x3a, 0x60, 0xa7, 0x8e, 0x46, 0x93}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb5, 0xc8, 0x73, 0x8e, 0xfb, 0x1f, 0x84, 0x7d, 0x37, 0xd9, 0x26, 0x24, 0x37, 0xb8, 0x65, 0xb1, 0xed, 0xa0, 0x76, 0x9a, 0xf0, 0x8e, 0x3a, 0x9b, 0x20, 0x93, 0x27, 0x26, 0x2e, 0xc9, 0x9b, 0xde}} return a, nil } diff --git a/eth/tracers/internal/tracers/call_tracer.js b/eth/tracers/internal/tracers/call_tracer.js index f8b383cd96..352c309b49 100644 --- a/eth/tracers/internal/tracers/call_tracer.js +++ b/eth/tracers/internal/tracers/call_tracer.js @@ -132,13 +132,12 @@ // If the call was a contract call, retrieve the gas usage and output if (call.gas !== undefined) { call.gasUsed = '0x' + bigInt(call.gasIn - call.gasCost + call.gas - log.getGas()).toString(16); - - var ret = log.stack.peek(0); - if (!ret.equals(0)) { - call.output = toHex(log.memory.slice(call.outOff, call.outOff + call.outLen)); - } else if (call.error === undefined) { - call.error = "internal failure"; // TODO(karalabe): surface these faults somehow - } + } + var ret = log.stack.peek(0); + if (!ret.equals(0)) { + call.output = toHex(log.memory.slice(call.outOff, call.outOff + call.outLen)); + } else if (call.error === undefined) { + call.error = "internal failure"; // TODO(karalabe): surface these faults somehow } delete call.gasIn; delete call.gasCost; delete call.outOff; delete call.outLen; @@ -208,7 +207,7 @@ } else if (ctx.error !== undefined) { result.error = ctx.error; } - if (result.error !== undefined) { + if (result.error !== undefined && (result.error !== "execution reverted" || result.output ==="0x")) { delete result.output; } return this.finalize(result); diff --git a/eth/tracers/testdata/call_tracer_inner_instafail.json b/eth/tracers/testdata/call_tracer_inner_instafail.json new file mode 100644 index 0000000000..86070d1308 --- /dev/null +++ b/eth/tracers/testdata/call_tracer_inner_instafail.json @@ -0,0 +1,72 @@ +{ + "genesis": { + "difficulty": "117067574", + "extraData": "0xd783010502846765746887676f312e372e33856c696e7578", + "gasLimit": "4712380", + "hash": "0xe05db05eeb3f288041ecb10a787df121c0ed69499355716e17c307de313a4486", + "miner": "0x0c062b329265c965deef1eede55183b3acb8f611", + "mixHash": "0xb669ae39118a53d2c65fd3b1e1d3850dd3f8c6842030698ed846a2762d68b61d", + "nonce": "0x2b469722b8e28c45", + "number": "24973", + "stateRoot": "0x532a5c3f75453a696428db078e32ae283c85cb97e4d8560dbdf022adac6df369", + "timestamp": "1479891145", + "totalDifficulty": "1892250259406", + "alloc": { + "0x6c06b16512b332e6cd8293a2974872674716ce18": { + "balance": "0x0", + "nonce": "1", + "code": "0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900480632e1a7d4d146036575b6000565b34600057604e60048080359060200190919050506050565b005b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051809050600060405180830381858888f19350505050505b5056", + "storage": {} + }, + "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31": { + "balance": "0x229ebbb36c3e0f20", + "nonce": "3", + "code": "0x", + "storage": {} + } + }, + "config": { + "chainId": 3, + "homesteadBlock": 0, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "byzantiumBlock": 1700000, + "constantinopleBlock": 4230000, + "petersburgBlock": 4939394, + "istanbulBlock": 6485846, + "muirGlacierBlock": 7117117, + "ethash": {} + } + }, + "context": { + "number": "24974", + "difficulty": "117067574", + "timestamp": "1479891162", + "gasLimit": "4712388", + "miner": "0xc822ef32e6d26e170b70cf761e204c1806265914" + }, + "input": "0xf889038504a81557008301f97e946c06b16512b332e6cd8293a2974872674716ce1880a42e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b1600002aa0e2a6558040c5d72bc59f2fb62a38993a314c849cd22fb393018d2c5af3112095a01bdb6d7ba32263ccc2ecc880d38c49d9f0c5a72d8b7908e3122b31356d349745", + "result": { + "type": "CALL", + "from": "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31", + "to": "0x6c06b16512b332e6cd8293a2974872674716ce18", + "value": "0x0", + "gas": "0x1a466", + "gasUsed": "0x1dc6", + "input": "0x2e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b160000", + "output": "0x", + "calls": [ + { + "type": "CALL", + "from": "0x6c06b16512b332e6cd8293a2974872674716ce18", + "to": "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31", + "value": "0x14d1120d7b160000", + "error":"internal failure", + "input": "0x" + } + ] + } +} diff --git a/eth/tracers/testdata/call_tracer_revert_reason.json b/eth/tracers/testdata/call_tracer_revert_reason.json new file mode 100644 index 0000000000..094b044677 --- /dev/null +++ b/eth/tracers/testdata/call_tracer_revert_reason.json @@ -0,0 +1,64 @@ +{ + "context": { + "difficulty": "2", + "gasLimit": "8000000", + "miner": "0x0000000000000000000000000000000000000000", + "number": "3212651", + "timestamp": "1597246515" + }, + "genesis": { + "alloc": { + "0xf58833cf0c791881b494eb79d461e08a1f043f52": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063609ff1bd11610078578063609ff1bd146101af5780639e7b8d61146101cd578063a3ec138d14610211578063e2ba53f0146102ae576100a5565b80630121b93f146100aa578063013cf08b146100d85780632e4176cf146101215780635c19a95c1461016b575b600080fd5b6100d6600480360360208110156100c057600080fd5b81019080803590602001909291905050506102cc565b005b610104600480360360208110156100ee57600080fd5b8101908080359060200190929190505050610469565b604051808381526020018281526020019250505060405180910390f35b61012961049a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ad6004803603602081101561018157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104bf565b005b6101b76108db565b6040518082815260200191505060405180910390f35b61020f600480360360208110156101e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610952565b005b6102536004803603602081101561022757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b53565b60405180858152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b6102b6610bb0565b6040518082815260200191505060405180910390f35b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154141561038a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f486173206e6f20726967687420746f20766f746500000000000000000000000081525060200191505060405180910390fd5b8060010160009054906101000a900460ff161561040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f416c726561647920766f7465642e00000000000000000000000000000000000081525060200191505060405180910390fd5b60018160010160006101000a81548160ff02191690831515021790555081816002018190555080600001546002838154811061044757fe5b9060005260206000209060020201600101600082825401925050819055505050565b6002818154811061047657fe5b90600052602060002090600202016000915090508060000154908060010154905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff1615610587576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f7520616c726561647920766f7465642e000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f53656c662d64656c65676174696f6e20697320646973616c6c6f7765642e000081525060200191505060405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107cc57600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f466f756e64206c6f6f7020696e2064656c65676174696f6e2e0000000000000081525060200191505060405180910390fd5b61062a565b60018160010160006101000a81548160ff021916908315150217905550818160010160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff16156108bf578160000154600282600201548154811061089c57fe5b9060005260206000209060020201600101600082825401925050819055506108d6565b816000015481600001600082825401925050819055505b505050565b6000806000905060008090505b60028054905081101561094d57816002828154811061090357fe5b9060005260206000209060020201600101541115610940576002818154811061092857fe5b90600052602060002090600202016001015491508092505b80806001019150506108e8565b505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180610bde6028913960400191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615610aba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520766f74657220616c726561647920766f7465642e000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414610b0957600080fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555050565b60016020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905084565b60006002610bbc6108db565b81548110610bc657fe5b90600052602060002090600202016000015490509056fe4f6e6c79206368616972706572736f6e2063616e206769766520726967687420746f20766f74652ea26469706673582212201d282819f8f06fed792100d60a8b08809b081a34a1ecd225e83a4b41122165ed64736f6c63430006060033", + "nonce": "1", + "storage": { + "0x6200beec95762de01ce05f2a0e58ce3299dbb53c68c9f3254a242121223cdf58": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0xf7579c3d8a669c89d5ed246a22eb6db8f6fedbf1": { + "balance": "0x57af9d6b3df812900", + "code": "0x", + "nonce": "6", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "IstanbulBlock":1561651, + "chainId": 5, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3509749784", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "4727564", + "hash": "0x609948ac3bd3c00b7736b933248891d6c901ee28f066241bddb28f4e00a9f440", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0xb131e4507c93c7377de00e7c271bf409ec7492767142ff0f45c882f8068c2ada", + "nonce": "0x4eb12e19c16d43da", + "number": "2289805", + "stateRoot": "0xc7f10f352bff82fac3c2999d3085093d12652e19c7fd32591de49dc5d91b4f1f", + "timestamp": "1513601261", + "totalDifficulty": "7143276353481064" + }, + "input": "0xf888068449504f80832dc6c094f58833cf0c791881b494eb79d461e08a1f043f5280a45c19a95c000000000000000000000000f7579c3d8a669c89d5ed246a22eb6db8f6fedbf12da0264664db3e71fae1dbdaf2f53954be149ad3b7ba8a5054b4d89c70febfacc8b1a0212e8398757963f419681839ae8c5a54b411e252473c82d93dda68405ca63294", + "result": { + "error": "execution reverted", + "from": "0xf7579c3d8a669c89d5ed246a22eb6db8f6fedbf1", + "gas": "0x2d7308", + "gasUsed": "0x588", + "input": "0x5c19a95c000000000000000000000000f7579c3d8a669c89d5ed246a22eb6db8f6fedbf1", + "to": "0xf58833cf0c791881b494eb79d461e08a1f043f52", + "type": "CALL", + "value": "0x0", + "output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e53656c662d64656c65676174696f6e20697320646973616c6c6f7765642e0000" + } +} diff --git a/eth/tracers/tracers_test.go b/eth/tracers/tracers_test.go index 289c6c5bb4..65ecd674b8 100644 --- a/eth/tracers/tracers_test.go +++ b/eth/tracers/tracers_test.go @@ -269,9 +269,31 @@ func TestCallTracer(t *testing.T) { t.Fatalf("failed to unmarshal trace result: %v", err) } - if !reflect.DeepEqual(ret, test.Result) { + if !jsonEqual(ret, test.Result) { + // uncomment this for easier debugging + //have, _ := json.MarshalIndent(ret, "", " ") + //want, _ := json.MarshalIndent(test.Result, "", " ") + //t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", string(have), string(want)) t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", ret, test.Result) } }) } } + +// jsonEqual is similar to reflect.DeepEqual, but does a 'bounce' via json prior to +// comparison +func jsonEqual(x, y interface{}) bool { + xTrace := new(callTrace) + yTrace := new(callTrace) + if xj, err := json.Marshal(x); err == nil { + json.Unmarshal(xj, xTrace) + } else { + return false + } + if yj, err := json.Marshal(y); err == nil { + json.Unmarshal(yj, yTrace) + } else { + return false + } + return reflect.DeepEqual(xTrace, yTrace) +} diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go index a60d732231..6b7cccbed5 100644 --- a/ethclient/ethclient.go +++ b/ethclient/ethclient.go @@ -265,6 +265,44 @@ func (ec *Client) TransactionInBlock(ctx context.Context, blockHash common.Hash, return json.tx, err } +// TransactionInBlock returns a single transaction at index in the given block. +func (ec *Client) TransactionsInBlock(ctx context.Context, number *big.Int) ([]*types.Transaction, error) { + var rpcTxs []*rpcTransaction + err := ec.c.CallContext(ctx, &rpcTxs, "eth_getTransactionsByBlockNumber", toBlockNumArg(number)) + if err != nil { + return nil, err + } + fmt.Println(len(rpcTxs)) + txs := make([]*types.Transaction, 0, len(rpcTxs)) + for _, tx := range rpcTxs { + txs = append(txs, tx.tx) + } + return txs, err +} + +// TransactionInBlock returns a single transaction at index in the given block. +func (ec *Client) TransactionRecipientsInBlock(ctx context.Context, number *big.Int) ([]*types.Receipt, error) { + var rs []*types.Receipt + err := ec.c.CallContext(ctx, &rs, "eth_getTransactionReceiptsByBlockNumber", toBlockNumArg(number)) + if err != nil { + return nil, err + } + return rs, err +} + +// TransactionDataAndReceipt returns the original data and receipt of a transaction by transaction hash. +// Note that the receipt is not available for pending transactions. +func (ec *Client) TransactionDataAndReceipt(ctx context.Context, txHash common.Hash) (*types.OriginalDataAndReceipt, error) { + var r *types.OriginalDataAndReceipt + err := ec.c.CallContext(ctx, &r, "eth_getTransactionDataAndReceipt", txHash) + if err == nil { + if r == nil { + return nil, ethereum.NotFound + } + } + return r, err +} + // TransactionReceipt returns the receipt of a transaction by transaction hash. // Note that the receipt is not available for pending transactions. func (ec *Client) TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error) { diff --git a/go.mod b/go.mod index 6f2511d29d..c7bd1eb77d 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/ethereum/go-ethereum -go 1.13 +go 1.15 require ( github.com/Azure/azure-pipeline-go v0.2.2 // indirect @@ -8,12 +8,14 @@ require ( github.com/Azure/go-autorest/autorest/adal v0.8.0 // indirect github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect github.com/VictoriaMetrics/fastcache v1.5.3 + github.com/VividCortex/gohistogram v1.0.0 // indirect github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847 github.com/aws/aws-sdk-go v1.25.48 - github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6 + github.com/btcsuite/btcd v0.20.0-beta github.com/cespare/cp v0.1.0 github.com/cespare/xxhash/v2 v2.1.1 // indirect github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9 + github.com/cosmos/cosmos-sdk v0.25.0 // indirect github.com/davecgh/go-spew v1.1.1 github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea github.com/dlclark/regexp2 v1.2.0 // indirect @@ -21,49 +23,61 @@ require ( github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87 github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa + github.com/etcd-io/bbolt v1.3.3 // indirect github.com/fatih/color v1.3.0 github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc + github.com/fortytw2/leaktest v1.3.0 // indirect github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff github.com/go-ole/go-ole v1.2.1 // indirect github.com/go-sourcemap/sourcemap v2.1.2+incompatible // indirect github.com/go-stack/stack v1.8.0 - github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c + github.com/golang/protobuf v1.3.2 github.com/golang/snappy v0.0.1 - github.com/google/go-cmp v0.3.1 // indirect + github.com/google/go-cmp v0.4.0 // indirect + github.com/google/gofuzz v1.1.0 // indirect github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277 - github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad - github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3 + github.com/hashicorp/golang-lru v0.5.3 + github.com/huin/goupnp v1.0.0 github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883 github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 - github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21 + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/julienschmidt/httprouter v1.2.0 github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 - github.com/kr/pretty v0.1.0 // indirect + github.com/kr/pretty v0.2.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect - github.com/mattn/go-colorable v0.1.0 - github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035 + github.com/mattn/go-colorable v0.1.4 + github.com/mattn/go-isatty v0.0.10 github.com/naoina/go-stringutil v0.1.0 // indirect github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222 github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 - github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 + github.com/prometheus/tsdb v0.7.1 + github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 // indirect github.com/rjeczalik/notify v0.9.1 + github.com/robertkrimen/otto v0.0.0-20170205013659-6a77b7cbc37d github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00 github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521 // indirect + github.com/spf13/cobra v0.0.6 // indirect + github.com/spf13/viper v1.6.2 // indirect github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 // indirect github.com/stretchr/testify v1.4.0 github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d + github.com/tendermint/go-amino v0.14.1 + github.com/tendermint/iavl v0.12.0 + github.com/tendermint/tendermint v0.31.11 github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 - golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 + golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 golang.org/x/net v0.0.0-20200301022130-244492dfa37a // indirect - golang.org/x/sync v0.0.0-20181108010431-42b317875d0f - golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 + golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e + golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 golang.org/x/text v0.3.2 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 + google.golang.org/grpc v1.27.1 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9 gopkg.in/urfave/cli.v1 v1.20.0 diff --git a/go.sum b/go.sum index 2a823e15cf..c4c4a1cbc5 100644 --- a/go.sum +++ b/go.sum @@ -1,60 +1,72 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-storage-blob-go v0.7.0 h1:MuueVOYkufCxJw5YZzF842DY2MBsp+hLuh2apKY0mck= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0 h1:CxTzQrySOxDnKpLjFJeZAS5Qrv/qFPkgLjx5bOAi//I= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.3 h1:2odJnXLbFZcoV9KYtQ+7TH1UOq3dn3AssMgieaezkR4= github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847 h1:rtI0fD4oG/8eVokGVPYJEW1F88p1ZNgXiEIs9thEE4A= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/aws/aws-sdk-go v1.25.48 h1:J82DYDGZHOKHdhx6hD24Tm30c2C3GchYGfN0mf9iKUk= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6 h1:Eey/GGQ/E5Xp1P2Lyx1qj007hLZfbi0+CoVeJruGCtI= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= +github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/btcsuite/btcd v0.20.0-beta h1:PamBMopnHxO2nEIsU89ibVVnqnXR2yFTgGNc+PdG68o= +github.com/btcsuite/btcd v0.20.0-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18 h1:pl4eWIqvFe/Kg3zkn7NxevNzILnZYWDCG7qbA1CJik0= github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9 h1:J82+/8rub3qSy0HxEnoYD8cs+HDlHWYrqYXe2Vqxluk= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cosmos/cosmos-sdk v0.25.0/go.mod h1:JrX/JpJunJQXBI5PEX2zELHMFzQr/159jDjIhesOh2c= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk= @@ -67,72 +79,104 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c h1:JHHhtb9XWJrGNMcr github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa h1:XKAhUk/dtp+CV0VO6mhG2V7jA9vbcGcnYF/Ay9NjZrY= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/fatih/color v1.3.0 h1:YehCCcyeQ6Km0D6+IapqPinWBK6y+0eB5umvZXK9WPs= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc h1:jtW8jbpkO4YirRSyepBOH8E+2HEw6/hKkBvFPwhUN8c= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-sourcemap/sourcemap v2.1.2+incompatible h1:0b/xya7BKGhXuqFESKM4oIiRo9WOt2ebz7KxfreD6ug= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c h1:zqAKixg3cTcIasAMJV+EcfVbWwLpOZ7LeoWJvcuD/5Q= -github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 h1:giknQ4mEuDFmmHSrGcbargOuLHQGtywqo4mheITex54= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277 h1:E0whKxgp2ojts0FDgUA8dl62bmH0LxKanMoBr6MDTDM= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad h1:eMxs9EL0PvIGS9TTtxg4R+JxuPGav82J8rA+GFnY7po= -github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3 h1:DqD8eigqlUm0+znmx7zhL0xvTW3+e1jCekJMfBUADWI= -github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= +github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= +github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883 h1:FSeK4fZCo8u40n2JMnyAsd6x7+SbvoOMHvQOU/n10P4= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJyexcZ3pYbTI9jWx5tHo1Dee/tWbLMfPe2TA= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21 h1:F/iKcka0K2LgnKy/fgSBf235AETtm1n1TvBzqu40LE0= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 h1:I/yrLt2WilKxlQKCM52clh5rGzTKpVctGT1lH4Dc8Jw= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/mattn/go-colorable v0.1.0 h1:v2XXALHHh6zHfYTJ+cSkwtyffnaOyR1MXaA91mTrb8o= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d h1:oNAwILwmgWKFpuU+dXvI6dl9jG2mAWAZLX3r9s0PPiw= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035 h1:USWjF42jDCSEeikX/G1g40ZWnsPXN5WkZ4jMHZWyBK4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= @@ -142,38 +186,59 @@ github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXW github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c h1:1RHs3tNxjXGHeul8z2t6H2N2TlAqpKe5yryJztRx4Jk= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 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/pborman/uuid v0.0.0-20170112150404-1b00554d8222 h1:goeTyGkArOZIVOMA0dQbyuPWGNQJZGPwPu/QS9GlpnA= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3 h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 h1:ZeU+auZj1iNzN8iVhff6M38Mfu73FQiJve/GEXYJBjE= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 h1:sofwID9zm4tzrgykg80hfFph1mryUeLRsUfoocVVmRY= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 h1:dY6ETXrvDG7Sa4vE8ZQG4yqWg6UnOcbqTAahkV813vQ= +github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= +github.com/robertkrimen/otto v0.0.0-20170205013659-6a77b7cbc37d/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00 h1:8DPul/X0IT/1TNMIxoKLwdemEOBBHDC/K4EB16Cw5WE= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521 h1:3hxavr+IHMsQBrYUPQM5v0CgENFktkkbg1sfpgM3h20= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9 h1:5Cp3cVwpQP4aCQ6jx6dNLP3IarbYiuStmIzYu+BjQwY= github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE= @@ -181,32 +246,74 @@ github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8 github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639dk2kqnCPPv+wNjq7Xb6EfUxe/oX0/NM= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= +github.com/tendermint/go-amino v0.14.1 h1:o2WudxNfdLNBwMyl2dqOJxiro5rfrEaU0Ugs6offJMk= +github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso= +github.com/tendermint/iavl v0.12.0 h1:xcaFAr+ycqCj7WN1RzL2EfcBioRDOHcU1oWcg83K028= +github.com/tendermint/iavl v0.12.0/go.mod h1:EoKMMv++tDOL5qKKVnoIqtVPshRrEPeJ0WsgDOLAauM= +github.com/tendermint/tendermint v0.31.11 h1:TIs//4WfEAG4TOZc2eUfJPI3T8KrywXQCCPnGAaM1Wo= +github.com/tendermint/tendermint v0.31.11/go.mod h1:ymcPyWblXCplCPQjbOYbrF1fWnpslATMVqiGgWbZrlc= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 h1:QmwruyY+bKbDDL0BaglrbZABEali68eoMFhTZpCjYVA= golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -214,25 +321,40 @@ golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772 h1:hhsSf/5z74Ck/DJYc+R8zpq8KGm7uJvpdLRQED/IedA= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9 h1:ITeyKbRetrVzqR3U1eY+ywgp7IBspGd1U/bkwd1gWu4= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/graphql/graphql.go b/graphql/graphql.go index 0f7bba8657..52db342634 100644 --- a/graphql/graphql.go +++ b/graphql/graphql.go @@ -1023,7 +1023,7 @@ func (r *Resolver) Logs(ctx context.Context, args struct{ Filter FilterCriteria topics = *args.Filter.Topics } // Construct the range filter - filter := filters.NewRangeFilter(filters.Backend(r.backend), begin, end, addresses, topics) + filter := filters.NewRangeFilter(filters.Backend(r.backend), begin, end, addresses, topics, false) return runFilter(ctx, r.backend, filter) } diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 7b9f9dafaf..4cbe64bcf0 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -47,6 +47,8 @@ import ( "github.com/tyler-smith/go-bip39" ) +const UnHealthyTimeout = 5 * time.Second + // PublicEthereumAPI provides an API to access Ethereum related information. // It offers only methods that operate on public data that is freely available to anyone. type PublicEthereumAPI struct { @@ -657,6 +659,13 @@ func (s *PublicBlockChainAPI) GetBlockByHash(ctx context.Context, hash common.Ha return nil, err } +func (s *PublicBlockChainAPI) Health() bool { + if rpc.RpcServingTimer != nil { + return rpc.RpcServingTimer.Percentile(0.75) < float64(UnHealthyTimeout) + } + return true +} + // GetUncleByBlockNumberAndIndex returns the uncle block for the given block hash and index. When fullTx is true // all transactions in the block are returned in full detail, otherwise only the transaction hash is returned. func (s *PublicBlockChainAPI) GetUncleByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) (map[string]interface{}, error) { @@ -887,6 +896,11 @@ func DoEstimateGas(ctx context.Context, b Backend, args CallArgs, blockNrOrHash hi uint64 cap uint64 ) + // Use zero address if sender unspecified. + if args.From == nil { + return 0, fmt.Errorf("missing from address") + } + // Determine the highest gas limit can be used during the estimation. if args.Gas != nil && uint64(*args.Gas) >= params.TxGas { hi = uint64(*args.Gas) } else { @@ -895,18 +909,45 @@ func DoEstimateGas(ctx context.Context, b Backend, args CallArgs, blockNrOrHash if err != nil { return 0, err } + if block == nil { + return 0, errors.New("block not found") + } hi = block.GasLimit() } + // Recap the highest gas limit with account's available balance. + if args.GasPrice != nil && args.GasPrice.ToInt().BitLen() != 0 { + state, _, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) + if err != nil { + return 0, err + } + balance := state.GetBalance(*args.From) // from can't be nil + available := new(big.Int).Set(balance) + if args.Value != nil { + if args.Value.ToInt().Cmp(available) >= 0 { + return 0, errors.New("insufficient funds for transfer") + } + available.Sub(available, args.Value.ToInt()) + } + allowance := new(big.Int).Div(available, args.GasPrice.ToInt()) + + // If the allowance is larger than maximum uint64, skip checking + if allowance.IsUint64() && hi > allowance.Uint64() { + transfer := args.Value + if transfer == nil { + transfer = new(hexutil.Big) + } + log.Warn("Gas estimation capped by limited funds", "original", hi, "balance", balance, + "sent", transfer.ToInt(), "gasprice", args.GasPrice.ToInt(), "fundable", allowance) + hi = allowance.Uint64() + } + } + // Recap the highest gas allowance with specified gascap. if gasCap != nil && hi > gasCap.Uint64() { log.Warn("Caller gas above allowance, capping", "requested", hi, "cap", gasCap) hi = gasCap.Uint64() } cap = hi - // Use zero address if sender unspecified. - if args.From == nil { - args.From = new(common.Address) - } // Create a helper to check if a gas allowance results in an executable transaction executable := func(gas uint64) bool { args.Gas = (*hexutil.Uint64)(&gas) @@ -1137,6 +1178,17 @@ func newRPCPendingTransaction(tx *types.Transaction) *RPCTransaction { return newRPCTransaction(tx, common.Hash{}, 0, 0) } +// newRPCTransactionsFromBlockIndex returns transactions that will serialize to the RPC representation. +func newRPCTransactionsFromBlockIndex(b *types.Block) []*RPCTransaction { + txs := b.Transactions() + result := make([]*RPCTransaction, 0, len(txs)) + + for idx, tx := range txs { + result = append(result, newRPCTransaction(tx, b.Hash(), b.NumberU64(), uint64(idx))) + } + return result +} + // newRPCTransactionFromBlockIndex returns a transaction that will serialize to the RPC representation. func newRPCTransactionFromBlockIndex(b *types.Block, index uint64) *RPCTransaction { txs := b.Transactions() @@ -1195,6 +1247,14 @@ func (s *PublicTransactionPoolAPI) GetBlockTransactionCountByHash(ctx context.Co return nil } +// GetTransactionsByBlockNumber returns all the transactions for the given block number. +func (s *PublicTransactionPoolAPI) GetTransactionsByBlockNumber(ctx context.Context, blockNr rpc.BlockNumber) []*RPCTransaction { + if block, _ := s.b.BlockByNumber(ctx, blockNr); block != nil { + return newRPCTransactionsFromBlockIndex(block) + } + return nil +} + // GetTransactionByBlockNumberAndIndex returns the transaction for the given block number and index. func (s *PublicTransactionPoolAPI) GetTransactionByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) *RPCTransaction { if block, _ := s.b.BlockByNumber(ctx, blockNr); block != nil { @@ -1282,6 +1342,141 @@ func (s *PublicTransactionPoolAPI) GetRawTransactionByHash(ctx context.Context, return rlp.EncodeToBytes(tx) } +// GetTransactionReceipt returns the transaction receipt for the given transaction hash. +func (s *PublicTransactionPoolAPI) GetTransactionReceiptsByBlockNumber(ctx context.Context, blockNr rpc.BlockNumber) ([]map[string]interface{}, error) { + blockNumber := uint64(blockNr.Int64()) + blockHash := rawdb.ReadCanonicalHash(s.b.ChainDb(), blockNumber) + + receipts, err := s.b.GetReceipts(ctx, blockHash) + if err != nil { + return nil, err + } + block, err := s.b.BlockByHash(ctx, blockHash) + if err != nil { + return nil, err + } + txs := block.Transactions() + if len(txs) != len(receipts) { + return nil, fmt.Errorf("txs length doesn't equal to receipts' length") + } + + txReceipts := make([]map[string]interface{}, 0, len(txs)) + for idx, receipt := range receipts { + tx := txs[idx] + var signer types.Signer = types.FrontierSigner{} + if tx.Protected() { + signer = types.NewEIP155Signer(tx.ChainId()) + } + from, _ := types.Sender(signer, tx) + + fields := map[string]interface{}{ + "blockHash": blockHash, + "blockNumber": hexutil.Uint64(blockNumber), + "transactionHash": tx.Hash(), + "transactionIndex": hexutil.Uint64(idx), + "from": from, + "to": tx.To(), + "gasUsed": hexutil.Uint64(receipt.GasUsed), + "cumulativeGasUsed": hexutil.Uint64(receipt.CumulativeGasUsed), + "contractAddress": nil, + "logs": receipt.Logs, + "logsBloom": receipt.Bloom, + } + + // Assign receipt status or post state. + if len(receipt.PostState) > 0 { + fields["root"] = hexutil.Bytes(receipt.PostState) + } else { + fields["status"] = hexutil.Uint(receipt.Status) + } + if receipt.Logs == nil { + fields["logs"] = [][]*types.Log{} + } + // If the ContractAddress is 20 0x0 bytes, assume it is not a contract creation + if receipt.ContractAddress != (common.Address{}) { + fields["contractAddress"] = receipt.ContractAddress + } + + txReceipts = append(txReceipts, fields) + } + + return txReceipts, nil +} + +// GetTransactionDataAndReceipt returns the original transaction data and transaction receipt for the given transaction hash. +func (s *PublicTransactionPoolAPI) GetTransactionDataAndReceipt(ctx context.Context, hash common.Hash) (map[string]interface{}, error) { + tx, blockHash, blockNumber, index := rawdb.ReadTransaction(s.b.ChainDb(), hash) + if tx == nil { + return nil, nil + } + receipts, err := s.b.GetReceipts(ctx, blockHash) + if err != nil { + return nil, err + } + if len(receipts) <= int(index) { + return nil, nil + } + receipt := receipts[index] + + var signer types.Signer = types.FrontierSigner{} + if tx.Protected() { + signer = types.NewEIP155Signer(tx.ChainId()) + } + from, _ := types.Sender(signer, tx) + + rpcTransaction := newRPCTransaction(tx, blockHash, blockNumber, index) + + txData := map[string]interface{}{ + "blockHash": rpcTransaction.BlockHash.String(), + "blockNumber": rpcTransaction.BlockNumber.String(), + "from": rpcTransaction.From.String(), + "gas": rpcTransaction.Gas.String(), + "gasPrice": rpcTransaction.GasPrice.String(), + "hash": rpcTransaction.Hash.String(), + "input": rpcTransaction.Input.String(), + "nonce": rpcTransaction.Nonce.String(), + "to": rpcTransaction.To.String(), + "transactionIndex": rpcTransaction.TransactionIndex.String(), + "value": rpcTransaction.Value.String(), + "v": rpcTransaction.V.String(), + "r": rpcTransaction.R.String(), + "s": rpcTransaction.S.String(), + } + + fields := map[string]interface{}{ + "blockHash": blockHash, + "blockNumber": hexutil.Uint64(blockNumber), + "transactionHash": hash, + "transactionIndex": hexutil.Uint64(index), + "from": from, + "to": tx.To(), + "gasUsed": hexutil.Uint64(receipt.GasUsed), + "cumulativeGasUsed": hexutil.Uint64(receipt.CumulativeGasUsed), + "contractAddress": nil, + "logs": receipt.Logs, + "logsBloom": receipt.Bloom, + } + + // Assign receipt status or post state. + if len(receipt.PostState) > 0 { + fields["root"] = hexutil.Bytes(receipt.PostState) + } else { + fields["status"] = hexutil.Uint(receipt.Status) + } + if receipt.Logs == nil { + fields["logs"] = [][]*types.Log{} + } + // If the ContractAddress is 20 0x0 bytes, assume it is not a contract creation + if receipt.ContractAddress != (common.Address{}) { + fields["contractAddress"] = receipt.ContractAddress + } + result := map[string]interface{}{ + "txData": txData, + "receipt": fields, + } + return result, nil +} + // GetTransactionReceipt returns the transaction receipt for the given transaction hash. func (s *PublicTransactionPoolAPI) GetTransactionReceipt(ctx context.Context, hash common.Hash) (map[string]interface{}, error) { tx, blockHash, blockNumber, index := rawdb.ReadTransaction(s.b.ChainDb(), hash) diff --git a/internal/jsre/deps/bindata.go b/internal/jsre/deps/bindata.go index a6545b7140..f6582c1d6f 100644 --- a/internal/jsre/deps/bindata.go +++ b/internal/jsre/deps/bindata.go @@ -1,4 +1,4 @@ -// Package deps Code generated by go-bindata. (@generated) DO NOT EDIT. +// Code generated by go-bindata. DO NOT EDIT. // sources: // bignumber.js // web3.js @@ -19,7 +19,7 @@ import ( func bindataRead(data []byte, name string) ([]byte, error) { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) + return nil, fmt.Errorf("Read %q: %v", name, err) } var buf bytes.Buffer @@ -27,7 +27,7 @@ func bindataRead(data []byte, name string) ([]byte, error) { clErr := gz.Close() if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) + return nil, fmt.Errorf("Read %q: %v", name, err) } if clErr != nil { return nil, err @@ -48,32 +48,21 @@ type bindataFileInfo struct { modTime time.Time } -// Name return file name func (fi bindataFileInfo) Name() string { return fi.name } - -// Size return file size func (fi bindataFileInfo) Size() int64 { return fi.size } - -// Mode return file mode func (fi bindataFileInfo) Mode() os.FileMode { return fi.mode } - -// ModTime return file modify time func (fi bindataFileInfo) ModTime() time.Time { return fi.modTime } - -// IsDir return file whether a directory func (fi bindataFileInfo) IsDir() bool { - return fi.mode&os.ModeDir != 0 + return false } - -// Sys return file is sys mode func (fi bindataFileInfo) Sys() interface{} { return nil } @@ -98,7 +87,7 @@ func bignumberJs() (*asset, error) { return a, nil } -var _web3Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x7b\x13\x39\xd2\x38\x0e\xbf\xcf\xa7\x50\xfc\xdc\x0f\xb6\x49\x63\xe7\x34\x0c\xd3\x99\x0c\x1b\x02\x33\x64\x6f\x20\x5c\x40\x76\x76\xef\x6c\x96\xab\xed\x96\x6d\x0d\xed\x6e\xff\xba\xdb\x09\x19\x92\xef\xfe\xbf\x54\x3a\x1f\xfa\xe0\x24\xcc\x69\x93\x17\xe0\x96\x4a\xa7\x52\xa9\x54\x2a\x95\xaa\x72\xfc\xff\x96\x24\xc7\xfb\xbd\xc9\x32\x1d\x97\x24\x4b\x11\xee\x95\x41\x1a\xe4\xfd\x2f\x32\xa5\xe8\x65\xc1\xb2\xff\x85\x4c\x7a\xeb\xe9\x69\x76\xc6\x7e\x95\xf0\xeb\x3c\xca\x51\xb4\x5f\x5e\x2e\x70\x36\x41\xa2\xae\xfd\x8e\x28\xda\x79\xf0\x80\x27\xee\xd1\x32\xcb\x07\x0f\xa2\x7e\x8e\xcb\x65\x9e\xa2\xa8\x97\x05\xeb\x9b\x7d\x9a\x4e\x44\x1a\xe1\x69\xb4\xd6\xc9\x7e\x8a\x2f\xd0\x8b\x3c\xcf\xf2\x5e\xe7\x30\x4a\xd3\xac\x44\x13\x92\xc6\x68\x9e\xc5\xcb\x04\xa3\x6e\x67\x23\xdb\xe8\x74\x3b\xfd\xbd\x72\x96\x67\x17\x68\x32\x18\x67\x31\xde\xef\xbc\x3e\x7e\x7e\xf2\xea\xc5\xc7\x37\xc7\x1f\x3e\xfe\x78\x7c\xf2\xe6\x79\x27\x98\x5c\xd3\xfa\x92\x7d\xda\xf7\xfd\x2f\xf8\xf3\x22\xcb\xcb\x22\xfc\x72\x7d\xbd\x47\xc7\x70\xba\x79\x36\x18\x47\x49\xd2\x4b\x06\x3c\x2b\x10\xbd\xef\x61\x36\xc0\x74\x1f\x00\xb7\xce\x4e\xf1\xd9\x1e\xef\x6a\xd1\x4b\x9f\xa6\x21\xee\x5f\x07\x49\xa0\x4a\xe2\x80\xe1\xee\x9a\x43\xd1\x26\x45\x26\xf4\x82\xb4\xc2\xd5\x24\xcb\x7b\x14\x3a\xdb\xdf\xdc\xcb\xbe\xcf\x07\x09\x4e\xa7\xe5\x6c\x2f\xdb\xd8\xe8\x17\xbd\x9c\x22\x5e\x76\xe3\xba\xdf\xfb\xb2\x15\x9e\xca\x2e\xf3\x2a\x02\x86\xa5\x80\xb7\xdd\xff\xb2\xc6\x12\x44\x67\xf6\x4f\xd7\x10\xfa\xb2\x86\x10\x42\x9d\x71\x96\x16\x65\x94\x96\x9d\x10\x95\xf9\x12\x07\x2c\x95\xa4\x8b\x65\x59\x74\x42\x74\x0a\xdf\x02\x1a\xf2\xd2\x68\x8e\x3b\x21\xea\x7c\xcc\x2e\x52\x9c\x77\x02\x95\x43\x47\x47\x73\xa2\x38\xce\x71\x51\x74\x78\xce\x35\xfc\x7f\xc6\xab\x16\xc5\xe1\x7f\x9e\x96\x2d\xcb\xe6\xf6\xb2\x8f\x5a\x11\xa3\xbd\xd1\x65\x89\x8b\x9d\x6d\x7f\x7b\x02\x48\x62\x7a\x0d\xa1\xeb\xe0\x4e\x10\x70\xa3\xfe\xc8\xe1\x68\xd8\x6b\x87\x80\x95\x51\xfd\x47\x1d\xfa\x38\x4b\x4b\x9c\x96\xb7\x1e\xfc\x9f\x72\xde\xe9\x8c\xfd\x61\xa6\x7d\x12\x25\xc5\x6f\x37\xf4\x1c\x17\x38\x3f\xf7\xad\xfa\x3f\xfa\xa4\x15\xcb\xd1\x3b\x3c\x25\x45\x99\x47\xff\x05\x93\x17\xd4\xd5\x81\x2f\x8e\x6f\xc5\xf7\xcb\x3c\x4a\x8b\x89\x97\xf5\xfd\x59\x70\x90\x5b\xa4\xb0\x3a\x12\x0a\x5c\xbe\xaf\x27\xa9\x3b\xc3\x85\xdd\xf4\x6f\xd2\xe8\x57\x9e\x80\xa8\x0d\xe2\xeb\x2a\x58\xe4\x64\x1e\xe5\x97\xde\x7e\x64\x59\xd2\x38\x79\x07\xbc\xad\x3f\x2f\x0a\xcd\x3d\xb8\xb6\x9a\x2a\x24\x1c\x56\x6e\xe3\x7f\x24\x24\x78\x7b\x1f\x93\x22\xbb\x48\x6f\xd1\xf3\x28\xcd\xd2\xcb\x79\xb6\x2c\x56\xe8\x3a\x49\x63\xfc\x19\xc7\xc6\xde\x75\x67\x13\xab\x2a\xd7\xba\x63\xd6\x7e\x41\xd2\xdb\x30\xee\x83\x25\x60\xe2\x45\x1a\xe3\xb8\x63\xa1\x09\x9f\x53\x42\xf8\x0b\xe0\x68\x44\xe2\xb8\x1d\x8e\x6e\x56\xff\x79\x94\x2c\xbd\xdd\x5f\x92\xb4\xdc\xfe\xe6\x71\xfd\x14\xbc\xc1\x17\xcf\xc8\xef\x88\xfc\x5b\xad\xb9\xc3\x59\x94\x4e\x7f\x4f\xd2\xb9\x13\xca\xa9\xa8\x5b\x93\xea\x6b\xa9\xc6\x8b\x99\xb7\x6c\x37\x6a\x44\xd0\xda\xd9\xda\xda\x75\xf0\xe5\xfa\x2c\xd8\xfe\xdd\x0e\xfd\x7f\xa1\x33\xef\xef\x24\x3b\x4e\x96\x69\x7c\x63\x52\xb9\xf5\xc6\x75\x7f\xec\xfd\x73\x1f\x7b\xef\x0f\x7d\x7f\xe4\x33\x87\x77\xf0\xfc\xbc\xf0\x47\x93\x36\xbf\xee\x66\xae\xf6\xaa\x9d\x3b\xdb\xab\x56\x9d\xf7\x49\x9e\xcd\x6f\x39\xed\x65\x76\xcb\xa3\xe6\xed\x04\xbe\xdf\x77\xdd\xfc\x11\xf0\x47\xd2\x98\xe4\x78\x5c\x1e\x79\xf7\xcc\x15\x7a\x72\xbb\x89\x20\xe3\x68\xf1\xe1\x77\x9d\x0c\x3f\x26\xdb\x9d\x76\xf1\x22\x2b\x48\xdd\x41\x7d\x11\x5d\x46\xa3\x04\x9b\x42\xc1\xef\xc2\x95\xaa\x68\xee\x4e\x8e\x5f\xb7\xa3\x81\x03\x31\xde\xe7\x26\x3e\x7f\xfb\x93\xcc\x9d\x20\xa9\xa2\xee\x76\x74\xf6\x3b\xa0\xff\x0f\x8b\xf5\xbb\x38\x3f\xde\x98\x4f\x7e\x6d\xac\xdb\x4c\xef\x1e\xed\x2d\xd1\x7e\xeb\x8d\xeb\x6b\xcf\xec\x91\x67\x4b\xab\x93\xe3\x76\xdb\xc8\x71\x60\xbc\x81\xf6\x85\x85\x43\xaf\x3b\x18\x4e\xb2\x7c\x1e\x95\x25\xce\x8b\x6e\x7f\x0f\x00\xde\x67\x09\x89\x49\x79\xf9\xe1\x72\x81\x4d\x58\xda\x3e\x85\x5a\x1b\x3e\x7c\xb8\x86\x1e\x1a\x90\x5c\xe7\x8e\x48\x81\x22\xb4\xc8\xb3\x8c\x02\xa3\x72\x16\x95\x28\xc7\x0b\x7a\xc8\x4a\xcb\x02\xf1\xb9\x43\x34\x93\xd6\x70\x54\xa2\x79\x54\x8e\x67\xb8\x08\xe9\x27\xcf\xd6\x7e\x9e\x9e\xe9\x1f\xbb\xc6\xd7\x99\x99\xb9\x63\x7d\x9f\x9d\x3e\x3e\x3b\x3d\x0b\xd0\x60\x30\x58\x43\x0f\x87\xce\xd8\x44\x8f\xf7\x91\xb4\xa6\xe9\xf5\xf9\x14\x97\x33\x52\x0c\x3e\xc2\xc2\xf8\x51\x20\x88\x02\x0e\x18\xba\x8e\x68\xc6\x51\x5a\xee\x69\xc0\x6c\xdf\xf6\x41\x1f\x43\x0e\x6f\x6e\x6f\xed\x7a\x6f\x6d\xcd\xd3\x8f\xc1\x22\xcf\x4a\x86\xb5\x7d\x94\xe2\x0b\xa3\xaf\xbd\x2f\xd7\xfd\xbd\xfa\x52\x03\x90\x5e\xf2\xe5\xb8\xcc\x68\xe3\x1e\xd8\xa6\x76\x07\xa4\xe0\x73\xae\x10\x42\xc9\x51\x20\x85\xdb\xb5\xac\xaf\xd3\xc4\x01\xcc\x5b\x6f\xc8\xb1\xdd\xfb\xf7\x69\xef\x74\xf3\xd1\x77\x67\x0f\xfb\xff\x3e\xeb\x3f\x1d\xf6\xd9\x38\xcd\x83\x43\x65\xb7\xae\x83\x2f\x1d\x9d\x14\x3b\xe1\x77\x41\x87\xd1\x5b\x27\xdc\xda\xbd\x3e\x0b\xbe\xf9\x9d\xc9\xfb\x59\x96\x25\x0d\xb4\x3d\xa2\x20\x15\x84\x4d\xf3\xc4\xff\x8c\x4a\xe1\xd7\xae\xfa\x79\xa6\x25\xef\xe8\x1f\x4d\x64\x0c\x3d\xbb\x29\x0d\xd3\xc2\xab\x10\x31\x83\xb7\x29\x98\xa6\xae\x48\xbe\x66\x91\x1a\xda\x65\x2d\xd6\x95\xbd\x09\xd5\xfe\x87\xa2\xd6\xa4\xd9\x87\xff\xd3\x8a\x68\x79\x7f\x9a\x29\xf6\xf1\xef\x4d\xb1\x74\x0f\x93\x24\x5b\xfa\x69\xb6\x9c\x61\x04\x9b\x1d\x10\xee\xc0\x47\xb9\x34\x57\xfe\xe0\x74\x09\x3f\x77\xb5\xdf\x67\x7a\xc6\x8e\xf1\x65\xd2\x2f\xe2\x5b\xab\xfc\xf9\xc4\xa8\x87\x17\xf5\x50\x39\x74\xf2\xc6\x64\x4e\x4b\xaf\x44\xe7\xac\x80\x43\xe8\x34\x79\x55\x4a\x37\xcb\xd4\x91\x3a\x6b\xb4\xb6\xf4\xcd\x88\x9d\x56\xc2\x48\xfd\xcb\x56\x70\xdd\xbf\x19\xe1\xf3\xde\x35\x53\xfe\xb7\x6d\x28\x7f\xf8\x10\x3a\xfc\x61\x46\x0a\x34\x21\x09\xa6\x94\xba\x88\xf2\x12\x65\x13\x74\x81\x47\x3b\x83\x5f\x8a\xc1\x1a\x80\xf0\x2f\x0a\x30\xc9\x31\x46\x45\x36\x29\x2f\xa2\x1c\x87\xe8\x32\x5b\xa2\x71\x94\xa2\x1c\xc7\xa4\x28\x73\x32\x5a\x96\x18\x91\x12\x45\x69\x3c\xcc\x72\x34\xcf\x62\x32\xb9\x84\x3a\x48\x89\x96\x69\x8c\x73\x20\xf8\x12\xe7\xf3\x82\xb6\x43\x3f\x7e\x7a\x73\x82\x5e\xe1\xa2\xc0\x39\xfa\x09\xa7\x38\x8f\x12\xf4\x76\x39\x4a\xc8\x18\xbd\x22\x63\x9c\x16\x18\x45\x05\x5a\xd0\x94\x62\x86\x63\x34\xba\xe4\x54\x84\xd1\x8f\xb4\x33\xef\x79\x67\xd0\x8f\xd9\x32\x8d\x23\x3a\xe6\x00\x61\x52\xce\x70\x8e\xce\x71\x5e\xd0\x19\xda\x11\x6d\xf1\x1a\x03\x94\xe5\x50\x4b\x2f\x2a\xe9\x18\x72\x94\x2d\x68\xc1\x3e\x8a\xd2\x4b\x94\x44\xa5\x2a\xeb\xa2\x40\x8d\x34\x46\x24\x85\x6a\x67\x99\x58\xd9\xa4\x44\x17\x24\x49\xd0\x08\xa3\x65\x81\x27\xcb\x84\x09\x8e\xa3\x65\x89\x7e\x3e\xfa\xf0\xf2\xf8\xe4\x03\x3a\x78\xf3\x2f\xf4\xf3\xc1\xbb\x77\x07\x6f\x3e\xfc\x6b\x0f\x5d\x90\x72\x96\x2d\x4b\x44\x25\x4a\xa8\x8b\xcc\x17\x09\xc1\x31\xba\x88\xf2\x3c\x4a\xcb\x4b\x94\x4d\xa0\x8a\xd7\x2f\xde\x1d\xbe\x3c\x78\xf3\xe1\xe0\xd9\xd1\xab\xa3\x0f\xff\x42\x59\x8e\x7e\x3c\xfa\xf0\xe6\xc5\xfb\xf7\xe8\xc7\xe3\x77\xe8\x00\xbd\x3d\x78\xf7\xe1\xe8\xf0\xe4\xd5\xc1\x3b\xf4\xf6\xe4\xdd\xdb\xe3\xf7\x2f\x06\x08\xbd\xc7\xb4\x63\x18\x6a\x68\x46\xf4\x04\xe6\x2c\xc7\x28\xc6\x65\x44\x12\x31\xff\xff\xca\x96\xa8\x98\x65\xcb\x24\x46\xb3\xe8\x1c\xa3\x1c\x8f\x31\x39\xc7\x31\x8a\xd0\x38\x5b\x5c\xb6\x9e\x48\xa8\x2c\x4a\xb2\x74\x0a\xc3\x96\x54\x86\xd0\xd1\x04\xa5\x59\x19\xa0\x02\x63\xf4\xfd\xac\x2c\x17\xe1\x70\x78\x71\x71\x31\x98\xa6\xcb\x41\x96\x4f\x87\x09\xab\xa0\x18\xfe\x30\x58\x7b\x38\x14\xcc\xf6\x6f\x40\xb6\xe3\x2c\xc6\xf9\xe0\x17\x60\x91\x7f\x8b\x96\xe5\x2c\xcb\xd1\xeb\x28\xc7\x9f\xd0\xff\x66\x25\xbe\x20\xe3\x5f\xd1\xf7\x73\xfa\xfd\x37\x5c\xce\x62\x7c\x3e\x18\x67\xf3\x1f\x00\x38\x8e\x4a\x8c\xb6\x37\xb7\xbe\x01\x86\xd7\xbc\x15\xd4\x08\xb0\x5a\x19\x2e\x8f\xf9\xf6\x0e\x2e\x29\x68\xc0\x74\x17\xf4\x41\x1e\xa5\xa5\x09\x48\xd2\xd2\x07\x77\xe2\x00\x2e\x2b\x20\x9f\x5f\xa6\xd1\x9c\x8c\x05\x1b\xd7\x4a\xc4\x2c\x07\x78\x94\xaf\xe4\xfb\x32\x27\xe9\xd4\x2c\x53\x40\x9a\x0f\xfa\x1d\x8e\xac\x31\xe6\x38\xf2\x8e\xf1\xc4\x05\x5d\x56\xc1\x7a\xba\x2d\xfb\x0b\xc0\xa4\xe0\x03\x34\x38\x73\xa1\x55\x11\xc0\x0e\xcb\xf9\xb4\xb0\x10\xd7\xf2\x07\xb2\x0a\xd8\x46\x18\xf0\xd5\x95\x3c\x3d\xa2\x0a\xe8\x83\x3c\x8f\x2e\x19\x38\x63\xe2\x96\x28\x70\x48\xe9\x53\x93\x00\xf8\x4a\x62\x1c\x22\x46\x65\x86\x70\x4a\x69\x78\x18\x63\xfa\x9f\x6c\x85\x32\xe3\x88\xb1\x49\xca\x95\xb8\x5c\x6b\x6e\xcc\xac\x6e\x7d\xc4\x14\xac\x30\x77\x66\x48\x42\xfb\x50\x43\x61\x74\x11\x78\xff\x1c\x97\xb3\x2c\xf6\x74\x8b\x29\xd7\xb3\x7c\x8e\x98\xe4\x92\x19\x33\xb2\x86\xd8\x1a\xe4\xc5\x3f\xf2\x99\xe1\x59\xe8\x6f\xd0\x7b\xf4\x85\x11\xcf\xb5\x14\xcb\xff\xc6\x30\x5f\xa0\x2f\x7a\x65\xd7\x90\x05\x6f\x15\x0a\xf4\x05\xde\x35\x5c\x23\xfe\x49\x28\x6f\x60\x12\x11\x25\x43\xe8\x0b\xdd\x89\x28\xbb\x07\x84\x18\xc8\xd0\x76\x6a\xbd\x4b\x0e\x8e\x04\x8a\x28\x36\x0b\x53\xbc\xd3\xb0\x36\x98\x90\xa4\xc4\x79\x4f\x2b\xdb\xd7\x74\x10\x9c\x8a\x4a\x2e\x14\x08\x22\x00\x9d\x42\xff\x74\xf3\x6c\x8f\xf1\x4f\x32\x41\xbd\x75\xbd\x11\xbd\x0e\xf6\x40\x83\x3d\xe5\xe8\x92\xf4\x3c\x4a\x48\xac\x68\x80\xd6\xb8\x1e\xa2\x2e\xda\x40\x7a\xe5\x6b\xba\xac\xa1\xd7\x6c\x52\x60\x05\xa5\xa1\x45\x12\x91\x94\xd1\x97\x35\x8d\x0c\xe0\x2d\xcf\xa9\x9e\x45\x9e\x7e\x3c\xfa\x05\x8f\xcb\x6b\xab\x42\x31\xc9\xaa\x1c\xab\x36\xb6\xe0\xaa\xa7\x4e\xeb\x86\x33\x73\x01\x2b\x6f\x09\x5c\x30\x69\x5a\xb1\xa2\x77\x4a\x81\xcf\x02\x74\x0a\xe0\x67\xfd\x76\xa8\x49\x48\x01\x12\x10\x5b\x7c\xd5\xd8\x29\x74\x34\x00\x0b\x60\xd8\xf1\xa5\x2f\x54\x81\x2a\xc4\x38\xcd\xb6\xc2\x4d\xe1\x2e\x7d\x8e\x9d\xa2\x8a\xbe\x0b\x41\xe0\x53\x5c\xea\x2b\xb0\xe0\x9c\x83\x93\x2c\x2d\xc6\xfb\x46\x4b\x18\x35\x0c\xe6\xd1\xa2\x57\xc5\x63\x41\x2b\xe7\x59\x23\x06\xef\x64\x35\xf7\x58\x4f\x4f\xa1\xc8\x19\x63\xcf\xe2\x4b\xae\x22\xad\x3f\x7c\x9f\x3a\x9e\x4c\x0a\x5c\x3a\x9d\xca\x71\xbc\x1c\x63\xad\x5f\xd1\x78\x1c\xa0\x86\xce\x01\x76\xca\xa8\x24\xe3\xb7\x51\x5e\xbe\x82\x97\x44\x56\xcd\x03\x3b\xbf\xe7\xe9\xa7\xa8\x2b\xa7\x4c\x09\xc7\xef\xdd\x2a\x5f\x47\xe5\x6c\x30\x49\xb2\x2c\xef\xf5\x9c\x16\x37\xd0\xce\x56\x1f\x0d\xd1\xce\x76\x1f\x3d\x44\x3b\xdb\x7c\xd0\x1a\xfa\xa2\xf1\x18\x6d\xa0\x9e\xdc\x74\x0c\xac\x57\xa0\x10\x3d\xd5\xf6\x2e\x84\x76\xb6\x51\x68\x24\x54\x74\x56\xa0\x3e\x40\x9b\x3a\xf6\x73\x5c\x2c\x93\x52\x50\x0f\x9b\xc1\xd7\xcb\xa4\x24\x3f\x93\x72\xc6\xe6\x44\x50\xa0\xd1\xb7\x40\xd2\x51\x60\xce\xa0\xa8\x9c\x8f\x90\xd5\x6f\x9e\xf8\xfc\xa4\x6f\xb5\xea\x5b\x03\x2d\x7b\xa0\xad\x11\x39\xbc\x4e\x67\x4f\x2d\x1c\x9c\x4c\xf8\x88\x79\x67\xf9\xae\x90\xe5\x2f\xa2\xf1\xac\x67\x33\x26\xa2\xd3\x16\xe5\xfa\x95\xf3\xa5\xe6\xea\xac\xaf\x17\x62\x08\x81\xae\x6c\xb8\xda\xce\x9e\xd9\x7d\xb1\x8e\x34\x22\x94\x6b\x97\x52\x31\x4e\x26\x1c\xc4\x9e\x23\xe8\x80\xdb\x25\x81\x27\xf8\xb0\x27\x4b\x6f\xc2\x5c\x8a\x1b\xfb\x08\xf3\x67\x78\x68\x88\xb6\x15\xe8\x35\xc2\x49\x81\xad\xe1\x0d\x87\x28\xce\xd2\x6e\x89\xa2\x38\x46\xbc\x54\x99\x99\x55\x0e\x10\x29\xbb\x05\x8a\x92\x1c\x47\xf1\x25\x1a\x67\xcb\xb4\xc4\x71\x05\x96\xbe\xd2\x38\xaf\xd5\x22\x1c\x0e\xd1\x87\xe3\xe7\xc7\x21\x9a\x90\xe9\x32\xc7\x88\x1e\xd8\x52\x5c\xd0\x13\x20\x3d\xa5\x5d\x16\x26\xb3\xfa\x2d\x88\xe4\x8f\x33\xc9\xe6\x64\x60\x1d\x81\x02\x2b\x15\xcb\x5c\xa2\x35\xc7\x93\x08\xd4\x31\x17\xb3\x2c\xc1\xac\x87\x24\x9d\xae\x37\x30\x82\x1a\x1e\x60\x73\x7e\x3e\xe8\x00\x65\xce\xca\x37\x16\xb9\x98\x93\x46\x51\xdf\xb3\xc5\xf5\x5c\xd5\x98\x46\x40\xac\x61\x74\x11\x29\xb2\x2e\x70\xe9\xcc\x29\x23\xab\x37\xd1\x1c\xdb\xfb\x90\xca\xd1\xe5\x4c\xb7\xac\x67\xf3\xa9\xdf\xcf\x54\xc5\x9e\x3a\x25\x5f\xe4\x18\x54\x52\xad\xf8\xab\x19\xb6\xa8\x64\x91\xe3\x73\x92\x2d\x0b\xd9\xa1\xed\x3d\x8a\x12\x92\x22\x92\x96\x4e\x89\x26\xfc\x6b\xfd\xf5\x35\x48\xff\x26\x59\x8e\xe0\x91\x30\x41\xfb\x68\x6b\x0f\x11\xf4\xbd\x18\x80\x78\x2f\x8c\xc8\xc6\x46\x55\x71\xfa\x67\xf5\x79\x63\x1f\x6d\xf4\x04\x0e\x08\x7a\x84\xb6\xce\xa8\x84\x8f\xae\xae\xd0\xe6\x5e\x65\x25\x35\xac\x9c\xd3\xc3\x06\x22\xe8\x61\xd5\xcc\x6d\xd8\xbd\xa0\xc2\x41\x15\xdb\x17\x7f\xd7\x4e\xaa\x99\x72\xdd\xef\xf5\xad\x29\x1c\x0e\xd1\x84\xe4\x45\x89\x70\x82\xe7\x38\x2d\xe9\xf9\x8a\xa1\x29\x40\xc5\x27\xb2\x40\xa4\x5c\x65\xca\x0d\xec\x6f\xfa\xb0\x4f\xf1\x57\x3b\x03\xf0\x74\x3e\x8e\x09\x6d\x24\x4a\xe4\x22\xe7\xf8\x74\xf8\x8f\x8b\x6f\x3f\x5f\x54\xa4\x53\xc1\x20\x4e\x09\xda\x40\x5b\x67\x82\x4f\xa0\x0d\xe4\x74\xc3\x83\xf6\x46\x04\x5b\xcc\xcf\x03\xc9\xb7\x4a\x0f\xed\x33\xaa\xb8\x31\xeb\xf9\x43\x33\x15\x2a\x6c\x99\x98\xba\xe5\xe2\x6f\xa0\x4c\x54\xc5\x90\x36\xeb\x18\x12\x6a\x45\xd3\x8d\x1c\x65\x38\x44\xe3\x28\x19\x2f\x93\xa8\xc4\x42\xf0\xa1\x47\x3e\xde\x17\x44\x4a\x3c\xbf\x05\x3b\xa2\xac\xe8\xf4\x4f\xc4\x94\xfa\x36\xec\xf5\x4a\xfb\xca\x2d\x27\xe4\xf7\x63\x30\x3a\x73\xf9\xea\xbc\x05\x39\xda\x22\xde\x8f\x06\x6d\x08\xd7\x45\xf2\x9b\xc9\xac\x46\x63\xc4\x20\x5b\x6b\x8c\x44\xba\xbc\xd5\x94\x2a\x11\xbf\x2e\xa9\x5a\x0f\xa2\x35\xec\x11\xff\xa0\x7e\x9f\x8e\x48\x2b\xa6\x74\x44\x0c\x1a\x64\x9b\x36\x68\xa9\x55\x12\x55\x20\xa4\x4a\x47\x54\x8d\x10\x5e\x02\x4e\x18\xd0\x9a\x42\x4c\xbd\x86\x48\x1f\xa2\xef\x74\x6c\xe0\x66\x75\x05\x91\x28\xc5\xa8\x58\x87\x67\x44\x5c\x78\x4f\xe1\xd6\x71\xff\x8e\x35\x4a\x6c\xc8\x3d\x18\x99\x58\x5f\x4a\x2d\x62\xe8\x45\x44\x8d\x4a\xc3\x54\xa7\x72\x50\xa3\x6a\xd4\x33\xe8\x18\x65\x1c\x88\x96\xb9\xeb\x91\xb6\x51\x47\xc9\x93\xa8\x4f\x0e\xe6\x5d\xab\x64\x92\xc3\x21\x2a\x96\x73\x76\x43\xe7\xd9\xa5\xb8\x88\x28\xe1\x79\x75\xa7\xe4\x8c\x72\x45\xf9\x05\x5b\x92\x8f\xff\x88\xe6\x4d\x44\x08\x69\xd3\x41\xc1\x70\x88\x72\x3c\xcf\xce\xe1\x1a\x13\x8d\x97\x79\x4e\xe5\x53\x29\x9c\x66\x90\xcc\xbb\x49\x0a\xe8\xb9\xa7\xb7\xc5\x2a\x1a\x3f\x81\xcc\xd6\x9a\x3f\x63\x64\xe8\x91\x53\x7f\x6b\x4a\x7b\x6f\xad\xc3\x8a\x6b\x1d\xef\xa9\x55\xf0\x38\x0f\x95\x95\xd6\x95\x83\x20\x2b\xba\x83\xe9\x97\x24\xe6\xfd\x05\xeb\x2d\x6d\x6b\xcc\x6f\x99\x74\x53\x0b\xe8\x7d\x8f\xd9\xab\xda\x26\x18\xfc\x5a\xb4\xd7\x0f\xbc\xd9\xcf\xb2\x2c\xa9\xca\xa3\x42\x48\x45\xd6\x49\x4d\x9e\x7e\xb9\x59\xd9\x6c\x5d\x26\xe3\xc2\x55\xb9\xef\x70\x54\xd9\xe3\x13\x96\xb9\x46\x09\xc2\xb5\xdf\x00\xd4\x49\x9b\x0d\x61\x38\x1b\xee\x06\x1d\x76\xf7\xdb\x09\xbf\x81\x9f\xb4\x6f\x9d\xf0\x31\xfd\xad\x5f\xc7\x76\xc2\x27\x81\xcf\xd6\x83\xa4\x65\x27\xdc\xda\xa4\x3f\x73\x1c\x25\x9d\x70\x6b\x9b\xfe\x66\xb7\xb2\x9d\x70\x6b\x87\x7e\x2d\x19\x14\x34\xb0\xe4\x60\x8f\xaf\xcf\x82\x27\xbf\xa5\x5d\x54\xc3\x35\xf4\xcd\xac\x89\xf4\x4a\x56\x31\x2a\x32\xcb\xd9\xb6\x45\x7a\xee\x8a\x26\x46\xfe\xa2\x35\x96\x46\x66\x4f\xda\xd4\x75\x0b\xbb\xa3\x0a\x63\xa3\x56\x8d\x6a\x57\xe2\xde\xe9\x12\x6c\x27\x5f\xe2\x16\x26\x4c\xd6\xb0\x9b\x2d\x99\xbe\xbb\xb7\x64\xba\xb7\x64\xfa\x6f\xb1\x64\x52\x0b\xe1\xae\xcc\x99\x9e\x91\xe9\x9b\xe5\x7c\x04\xac\x50\x72\xe7\x11\x99\xa6\x90\x38\xf8\x45\x72\xf2\x65\x49\x12\xd3\xbe\x66\x30\x84\x34\xf6\xaf\x00\x1b\x7b\x41\xc6\x59\x3a\x21\x8e\x31\x90\x38\x99\x69\xbb\x02\x9c\x5d\x60\x5b\x10\x03\x67\xbc\xba\x40\xc0\xef\x11\x3c\xd8\xa0\xe7\x2c\xca\xb7\x94\x95\x2c\x2c\x05\x3a\x37\xa0\x9c\x79\x48\x71\xcc\x20\x49\x81\x52\x3c\x8d\x4a\x72\x8e\x03\xc1\x89\xe0\xe2\xa8\xbc\xc8\xba\x05\x1a\x67\xf3\x85\x90\x56\xa1\x14\x9d\x5b\x59\x72\x92\x64\x51\x49\xd2\x29\x5a\x64\x24\x2d\x03\x76\x1d\x4a\xc9\x3e\xce\x2e\x52\xeb\x4c\x67\xaa\x49\xdc\xe3\xdb\x15\xc3\xf2\x95\xc4\xf7\xb5\x18\x0b\x5d\x4a\x29\xc6\x31\x9c\xa2\x47\x6a\x8e\x63\xbf\x31\x0c\x20\xed\x5a\xda\xf9\x98\xed\x1a\x0c\x18\xea\x17\x5c\x58\xb6\x3b\x60\x73\xd1\x1b\x0f\x5e\x7c\x78\xf9\xf1\xd9\xd1\x4f\x6f\x4e\x5e\x3f\x7b\xf1\xee\xe3\xbb\xe3\x93\x37\xcf\x8f\xde\xfc\xf4\xf1\xf5\xf1\xf3\x17\xda\x19\x4e\x6a\xe2\x60\x26\x07\x8b\x28\x7e\x85\x27\x65\x8f\x7d\x95\xd9\x87\x8b\xac\x38\x94\x58\xe4\x6d\x0e\xca\x8c\x8b\x4b\x5b\x8f\xfb\x01\x7a\xbc\x6b\xde\xf0\xe8\xbb\x25\x0c\xa7\xc7\x1a\x31\x0d\x30\xcc\x89\x17\x87\xdf\x0a\x9c\x3f\x93\x67\x63\xf3\xd0\xbc\x2a\x0e\x5d\xa9\xc3\xc0\xa2\x07\x21\x65\xf6\x12\x7f\x16\xe3\x2e\x96\xa3\xa2\xcc\x7b\xdb\x1a\xfe\x12\xeb\x6a\x9f\x15\x17\x5a\xee\x0d\xf4\x78\xa7\x8f\x86\x3a\x8a\x6c\x74\xbf\x23\xd3\x59\xc9\x8b\x05\x28\x41\x0f\xbf\x32\x3e\xf9\x0e\x7c\xa7\x68\xad\x94\xe9\x6e\x8d\x5d\x71\x3c\x33\xd1\x2a\xb5\x73\xbf\xdb\x0c\x58\x6a\x53\xd6\x58\x7f\xc0\xd6\xfc\x06\x6a\x9e\xa0\x26\x4e\xc7\x24\xf9\xea\x15\xf1\x5e\xe4\xdf\x76\xee\xa4\x71\x67\xfb\x59\x9b\xe4\xd9\xfc\xa4\x9c\x3c\xb9\x9f\x38\xcf\xc4\xf1\x77\x46\x55\x8c\x8c\xbf\x42\x12\x93\x46\xbf\x71\x94\xae\xce\xc8\xec\x27\x47\xd5\x73\xd6\xdd\xbc\xdd\x5f\x17\x6d\xf0\xea\xd1\x53\x84\xba\x5b\x5d\x14\xa2\xee\x66\xf7\xf6\x3c\xaa\x09\x93\xf4\xc4\x4a\x4b\xfd\x83\xc2\x15\x88\x0a\xc6\xf3\x65\x52\x12\x26\x54\x8e\x2e\xd1\xf6\x7f\xe6\x54\x3c\x97\x36\x74\x11\xad\xb9\xc4\x53\x9c\xd7\x6c\x25\xef\x78\xad\x4d\xfb\xf7\xaa\x33\xc2\x6d\x99\x2b\x66\x84\xa3\xc9\xa2\x3e\x8a\x35\xd9\xa2\xdc\x5c\xc9\x1c\x17\x56\xd6\x76\x7f\xb0\xc8\x2e\x7a\x5b\xdb\x4f\xfa\x7d\x13\xa5\x87\x33\x3c\xfe\x84\xc8\xc4\xc0\xa9\x26\x16\x59\x88\x28\xc8\x34\xc5\xf1\x51\xf1\x46\x65\x3b\x8a\x68\x59\xc7\x0c\x7f\xe6\x3d\x36\x91\x21\x88\x16\x0e\x7d\xd0\x76\x69\x4a\x62\x19\x3d\xb2\x5c\x10\x2a\x86\x47\x49\xa1\xac\x96\xed\xd6\x1b\xf1\xe5\xc3\x90\x60\x37\x9b\x01\xda\xea\x07\x68\xeb\xb1\x26\x8f\x6c\xf7\x8d\xdc\x3e\xda\xdf\xdf\xa7\x24\xeb\xa5\xc2\x9c\xb2\x8f\x47\x51\x02\x9d\x42\x4c\x75\xa0\x2e\x3c\x98\xa8\xe9\x12\x11\x53\x24\xd8\x42\xa0\x41\x1e\x8e\x1d\x2c\xc5\x99\x12\x0c\x6b\xda\x95\xc2\x21\x2c\x0b\x32\x45\x4c\x4e\xb7\xe8\x4d\x76\xc1\xc0\x9f\x61\x14\x4b\x81\xd9\x3c\xee\xb3\xde\x68\xba\xcc\x5e\x1f\x5d\x5d\xa1\xce\x66\x87\xeb\x88\x87\x43\x34\x96\x54\x44\x85\x67\x31\x91\xb2\x75\x06\x44\x4a\x36\xd1\x52\xd2\x76\x85\x6c\x71\x7f\x6b\xcd\x33\x9f\x5b\x8f\x0a\xd2\x33\xbf\x6c\x4a\xe7\x24\x5d\xda\xab\xa0\x3b\xb9\xe5\x5f\x17\xea\x16\x95\x6f\xc9\xeb\xb1\x16\x1d\xba\x01\x05\x2d\xeb\x49\xe8\xa4\x96\x86\x7c\xd4\x83\x57\x22\x1f\xde\xbc\x4b\x38\x27\x77\x41\x39\x5f\x07\x65\x9c\xe5\x57\xa1\xcc\xe1\xdd\x8d\x28\x03\x8c\x69\x22\xb1\x89\x22\xde\x9c\x8b\x22\x87\x99\xfb\x2c\xce\xad\xc5\xc8\x61\x06\x31\x39\x27\x31\x8e\x9f\x5d\xd6\xf0\xf0\x9b\x50\x53\x03\x6e\x4e\xee\x1a\x39\xcb\x4a\xec\x9c\xac\x8c\x9e\x93\xdb\xe0\xc7\xbd\x85\x65\x55\x4b\x14\x55\x49\x5c\xea\xc1\x74\x6b\xbc\x88\x9d\xcd\x9c\x8b\x4a\x1c\xf1\xa6\x5d\x14\x39\xf2\x99\x0f\x43\x9e\xe5\x05\xfb\xd5\x2d\x05\xb6\xad\x2e\x7a\xca\xb6\x66\xee\x19\x63\x35\x6c\x56\x9e\x1c\xb5\x77\xb9\x35\x7b\x5f\x82\x27\x0a\x71\x54\x82\xa8\x39\xdb\x38\xa2\x47\x1a\xcd\x31\x7b\xe0\x43\x7f\x59\x22\x18\x87\xa1\x75\xca\x1a\x3c\x98\x77\x0e\xa1\xd0\x46\x80\x74\x65\x39\x2d\xc4\x9f\x58\xa3\x7d\x54\xf5\x52\xf7\x61\x7f\xa8\x1d\x69\x0a\xf2\x2b\xe7\x89\x05\xdc\x52\xf1\xf2\xa7\x5b\x67\xa6\x28\xdc\xdd\xfc\x4c\x45\x66\x77\x72\x07\x45\x42\xc6\x98\x4a\x26\xdb\xe8\x21\x54\xb7\x22\x9d\x37\xcc\x8c\x7e\x0a\xbf\xb3\x09\x5a\x15\xfd\x95\xaa\x00\x67\x93\x91\x47\x44\x8b\x0f\x30\xc4\xf1\x4b\x30\x1b\x73\x8f\x77\xfb\x7c\x0f\x2f\x33\x0e\xdf\x47\x0f\xc5\xa9\xd2\x37\x03\x56\x45\x4c\x3a\x7c\xbc\x1b\xf0\xf6\x57\x9b\x82\x9a\x53\x39\x1b\xbe\xe7\x58\x7e\xa7\xd8\x8f\x8a\x31\x21\x75\xf8\xf7\x1c\xe7\x7f\x43\xcc\x0b\xad\x0e\x68\x07\xda\xe1\x7f\xb5\x09\x50\xee\x69\xaa\x66\xe0\x40\x39\xb0\xa9\x98\x82\x4a\xde\x5e\x81\x72\x59\xa1\x8b\x6d\x9f\x03\x9b\x15\xa4\x29\x03\x77\x9d\xcd\xcf\x1d\xb4\x81\xf8\x19\x07\xd0\xce\x7e\x4b\xb3\x82\xdd\xcd\x00\xe9\x49\x55\x3e\x03\xbe\x08\xd3\x0f\xed\xac\x19\x5a\xdf\x81\x0d\x03\x2b\x36\x74\x52\x1c\x38\x7d\x81\x87\x55\x19\x4e\x29\x86\xcc\xd0\x4d\x72\xfb\x91\x65\x49\x68\x27\x38\x50\x54\x02\x09\xed\x04\x1d\x4a\x8a\x65\xa1\x9d\xe0\x42\x9d\x38\x60\x27\x5e\x38\xbd\x51\x95\xe2\xa9\xcf\x05\x3c\xf1\x43\xea\x83\x55\x29\x1e\x38\x1d\xdb\x5a\x92\x0b\xe9\x9b\x1e\x37\xc7\x2d\x67\x4e\x90\x9e\xe6\xc2\x72\xaa\x0f\xbd\xeb\xee\x5a\x5c\xeb\x9a\x97\x43\x9d\x70\xeb\x49\xd0\x31\x2f\x95\x3a\xe1\x36\x58\x30\xc0\xc2\xe8\x84\x5b\x5b\x41\x47\xbf\x9a\xea\x84\xe6\xe7\xf5\x59\xb0\xb5\xf9\x3b\xbb\x74\x39\x62\xb6\xf1\x35\x3e\x88\x48\x5a\x56\xb9\x20\xe2\xb7\x57\x24\x2d\x99\x77\x16\xfa\x63\x57\xfe\x3a\x53\x89\x3b\xda\x6f\xcb\x79\x0b\x49\x4b\xe6\xba\x85\xa4\xe5\xe3\x5d\x09\xf6\x44\x55\xb4\xfd\xcd\xe3\x8a\xba\x28\x7c\x83\x2b\x23\xfb\x68\xf8\x15\xbd\x71\x01\xb8\x6d\x86\x70\x94\x96\x2b\x5a\x5e\x18\x25\x6a\x0c\x2e\xa0\xb9\x9a\x92\x37\x32\xaf\x20\x69\x29\x44\xc5\xa7\x37\x72\xe9\xc2\x7a\xd5\x6c\x06\xb1\xd5\x2a\x8a\xdd\xbd\x1d\xc4\xbd\x1d\xc4\x9f\xd7\x0e\x02\x29\x43\x08\x26\x2a\xdd\x91\x0d\x44\x0b\xd3\x06\x9b\xd5\x33\xd3\x85\x0c\x0c\xd2\x95\xe7\x8e\x81\x47\x42\xbd\x98\xe1\x54\xbe\x57\x0c\x98\xed\x37\x15\xc0\xa5\x03\x07\x21\x59\x0e\xbd\xb6\x11\x96\xfa\xdb\x7e\x9e\x08\x9c\x54\xc8\x8f\xec\xff\xab\x2b\xd4\xed\x6a\x7c\x36\x13\x2f\x17\xd8\x8f\x3d\xed\xa9\x21\x49\x79\xeb\xad\x3d\x7e\x4c\x71\xa9\x9b\xfc\x82\x01\x79\xb7\x10\x0f\x41\x81\x97\xd0\x4a\x0c\x6b\x77\x25\xdf\x33\x63\x57\x53\x8a\x16\x6a\x26\x55\xab\x5e\x19\xea\x89\x3e\xf6\x0d\x83\x76\x40\x8f\x6e\xd0\x6e\x37\x52\x6b\x8a\x06\x56\xfe\xc6\xb1\x43\xbf\x7e\x6c\x8d\x8c\x71\x8e\x29\x31\x89\xf5\x60\xba\x65\x61\xe4\x1e\x93\xc9\x04\x83\x41\x32\x43\xb9\x75\x2e\xb9\x90\xef\x42\xf4\xe3\x88\x40\x09\x9f\x25\x61\xbb\x9c\x7a\x0f\x21\xe6\xd1\x85\x6e\x87\xbe\x7e\x44\x0b\xc6\x61\x64\x2f\xaa\x51\x79\xe1\x7f\x33\x6b\xd2\x5d\xe5\xad\x9e\x22\x48\x49\xaa\xab\x60\x34\x9b\x8f\x48\xea\x7a\xb8\x29\xb3\x29\xa6\xdc\x9d\xd6\x80\xa7\x03\xb6\xa8\xa2\xc5\x02\xa7\xb0\x96\xa2\x94\xbd\x81\xb0\xb0\xcb\x6b\x6b\xba\x87\xe1\x8c\x69\x46\xc6\x94\x3d\x89\x5e\x35\x17\xe6\x17\xa8\xd9\x84\xc3\xc2\x3e\x54\x8b\x5a\x31\xbc\x26\xbd\x5f\x1d\x5a\xa5\xde\x82\x5d\x99\xec\xa1\x66\xec\x8e\xa3\x24\xe1\xf8\x15\xd7\x38\x6c\x44\xb3\x48\x2d\xdd\x82\xfc\xca\x9d\x0b\xc2\x75\xdd\x2c\x2a\x02\xfa\xbf\x20\x34\x70\xff\xeb\xb9\xb7\xd3\xf1\x2d\x6d\x41\xfd\x3a\xd3\x5a\xd4\xf8\xbd\x33\xf9\x16\x2e\x5f\x15\xeb\xfb\xfb\x20\x5d\x4c\x48\x6a\xbd\x55\x6a\x42\x82\xf2\x5a\xc4\xab\xe2\x37\xcc\xb6\xd2\x80\xe5\x1e\x14\xcf\xaa\x8f\xfe\x4c\xe3\xeb\x6a\x68\x5a\x2c\x33\xa3\xf6\xba\x41\xaf\xc3\xa8\x95\x0b\x80\x3e\x7a\x8a\xba\x5d\x14\xb6\x33\xc8\xd2\x50\xe6\x35\xcb\x5a\x01\x6f\x94\xf7\x33\xe5\x84\x94\x19\x7d\xcf\xbd\x94\xfe\xc2\x8f\x33\xb1\xf7\x88\x5b\xe1\x48\x67\xf8\xd1\x5c\x27\x32\x20\xf1\x5a\x2c\xaa\xc6\xbc\x28\x04\xbf\x4a\x36\xfe\x7c\xfe\x99\xe4\xf2\xda\x43\xec\xca\x0f\x55\xd0\x1d\x9f\xb0\xde\xea\xa8\x33\xb6\xb5\x0a\xdc\x69\x9b\x92\x1f\x79\x22\x21\x12\x97\xf0\x2d\xb0\x88\xe7\x8b\xf2\x52\x57\x09\xb6\xd8\x44\x1b\x57\xa1\x49\x8f\x1a\x7b\x0a\x41\xfa\x58\x01\x37\xc2\xe3\x54\xa5\xaf\x29\x2f\x26\x6a\x07\xc2\xab\x6c\x1a\x83\x71\xb1\xb2\xe1\x11\x0b\x6e\x32\x0e\xf5\x18\xaf\xda\x3f\xd4\x2b\x52\x94\xce\xcb\xbf\x53\x63\x34\x67\x1e\xa7\x50\xb5\xa3\x57\x35\xbb\xdb\x8b\x7c\x17\x24\x6e\xea\x97\x8b\x98\x59\xb6\xf2\x77\x70\x52\x15\x59\x66\xa5\xf6\xd6\x95\x15\x16\xc2\x11\xf3\x3b\x84\x8c\xb7\x7d\xf2\x09\x21\x07\x35\x9f\x15\x19\x7b\x9b\x5c\x8f\x6c\xfb\xaa\x58\x90\xf6\xed\x97\xed\x2c\xc4\x6c\x1e\xed\xeb\x3d\x56\xb0\xfa\x30\x36\xf6\x5d\x45\x3f\x7f\xad\xe5\xbe\xd0\x62\x90\x4a\x04\xea\x65\xfa\xab\x5b\xf9\x6a\x6e\x38\x14\xd3\x8d\xcf\x71\x7e\x59\xce\xc0\x17\x89\x56\x8f\x8e\x1d\xd7\xf1\x94\xb0\x48\x73\xf0\x63\xbc\xd4\xf5\xdf\x50\x48\xdf\x4b\x77\xda\x84\xab\x74\xbe\x0e\x50\xb7\x2b\x94\xef\x35\x4a\x8a\xb7\x6c\x96\x2c\x9d\x9e\x54\xdf\x5d\x9f\x05\x5b\xad\x62\xed\x7d\x45\x9d\x1c\xdc\x46\xd7\x2b\xe5\x72\x0a\x52\xa1\x95\x13\x66\x66\xf4\x7f\xa6\x2a\x83\x5f\xbb\xea\xe7\x99\x96\xbc\xa3\x7f\x58\xba\x39\x9a\xc6\x94\x73\xf4\x97\xd0\xce\xd1\xdf\x4f\xb4\xea\x34\xfd\x9c\x53\x63\x0b\x0d\x9d\x73\xf7\xbe\x8a\x8a\x8e\x16\x5e\x45\x47\xc7\xe0\x6d\x25\x1d\x4d\x5d\x51\x4b\x67\x16\xa9\x51\xd3\xb1\x16\xeb\xca\xde\x44\x51\x47\x71\x5b\xa1\xa8\x6b\xe7\x28\x9f\x77\xab\x85\xa2\xae\x55\x34\xaf\xaf\xf5\xb8\xce\x73\xfb\xb7\x0a\x79\xb0\xe2\xab\x10\x88\x28\x61\x93\x08\x4b\x5f\x91\x48\xec\x42\x35\x64\x22\xda\xad\x2f\x7f\x23\x9d\x2e\x93\xa4\xda\xbc\x99\xf3\xb4\x77\xb7\xaf\xe5\xe4\x28\x5b\xd0\xdd\xdd\x47\x1f\xa9\x7d\xbf\xe3\xe1\xc3\x9a\x8b\x5b\x52\xb4\xf7\x6d\x3b\xc6\x79\x19\x91\xd4\xef\xdf\xd6\x41\x24\xbb\x4d\x6a\x20\x6a\x06\x34\x30\xd3\xeb\xc9\x9a\x17\xb1\x32\x1a\xbd\x41\x94\x38\x9f\xd3\x23\x3f\x99\x40\xcd\x66\xbf\x63\xee\xb5\x16\x4d\xc9\x39\x4e\x85\x49\x8b\x79\xa4\xae\x72\x97\x6b\xd9\xbf\xb0\x63\xb6\xb2\xb8\x05\x2c\xb3\xca\x9d\x76\xfd\xf6\xb7\x3a\x44\xfb\x25\xc2\x9c\xd3\x76\x4a\xaf\x70\x9c\x9d\xe3\x3c\xbf\xc8\x49\x59\x62\x30\xf7\x62\xbd\xea\xa0\x0d\xe8\x7d\x6b\xdc\x5d\x80\x96\xbd\xd0\x1f\xf2\x83\x15\x84\x3a\x8a\x92\x94\xa3\xb0\x74\xfd\x0e\xdb\x6f\xed\x5b\x21\xd3\xd5\x4a\x5a\xcd\x29\xad\x6d\x05\xde\x3c\x2e\x04\xfc\x18\x1c\x0e\x41\x15\x1e\xcd\xe9\xaa\x00\xaf\x87\x5c\x9b\x45\xc7\x4b\x39\x01\x66\x77\x0c\x09\xf9\x84\x51\x84\x0a\x92\x4e\x13\x2c\xfd\x70\x01\xe4\xc0\x30\x89\x06\x0a\x66\x6e\x66\x98\x5b\x0e\xd6\xda\xd5\x15\x3a\xed\x9e\x6e\x9d\x75\xcf\xfa\x52\x18\x6c\x70\x03\xc0\xbb\x67\xe2\x9d\x7e\xe9\xae\x0d\x2b\x44\x77\x66\x03\xc5\x50\x01\xb6\x0a\x5b\x01\x7a\x04\xf6\xd8\x9b\xd0\x97\x2d\xdd\x11\x8d\xea\x90\x23\xc8\x0a\x47\x0d\x81\x70\xed\x50\x75\x5a\x10\x0e\x1d\x1e\x0a\x40\xd5\xc0\x70\x88\xa2\x24\x41\xa3\xa8\x20\x63\xe6\xff\x00\x1e\x0b\xec\x6c\x73\x05\x4e\x92\xd1\x93\xb1\xe8\x4d\x80\x76\xb6\x9b\x8c\x4e\xcc\x85\xcd\x39\x9a\x38\x81\x0b\x5d\x24\xc2\x53\x10\x20\x21\x28\xd4\xe9\x59\x07\xed\xff\x00\xeb\x53\xa5\xed\xb2\xc4\x5a\x65\xda\x81\xa8\x6d\x55\x0e\x30\xc3\x95\x3d\xab\x59\xed\x7a\xab\x95\x34\xab\xdc\x7e\x19\x0e\x61\x1c\xa2\xdb\xb3\xb6\x51\xad\xc8\x83\x07\x48\xff\x3e\xd5\x7e\x6b\x2e\xe0\xce\xc4\xae\x2b\x23\x63\x0c\xa7\x37\x9a\x1b\xbe\x7c\xeb\xa6\x46\xcc\x82\x39\x37\x7c\xc2\xcc\xa9\xd1\x3c\xae\xdd\x72\x66\xac\x7e\xd5\x4c\x8c\xd6\xe6\xd7\x9e\x97\xbb\x9c\x18\xd3\xf5\x89\x62\xa4\xda\x4c\xc0\xd9\xa8\x03\xb6\x08\xdb\x0c\xe9\xec\x90\xd4\xe1\xc6\x0a\x5b\x7c\x2a\xb6\x76\x25\xe0\xf6\xd9\xe9\x0e\x07\x15\x69\x0c\x44\x42\x6c\x9d\x59\x09\xea\xdb\xdd\x1d\x00\xab\x37\xd8\x1e\xf4\xb1\xf0\x21\x36\xef\x09\x5a\x63\x77\x34\x91\x64\x82\x7a\x5a\x96\xc6\x21\x6d\x7e\x7c\xc3\x89\x05\x86\xed\x7b\x0d\xb1\x55\x33\xe5\x7c\x93\x10\xa7\x6a\xdf\x3c\xc3\xbc\xf9\xa6\xba\x23\xe3\xef\x39\x13\xce\x3f\x3b\xc6\xbc\x1b\x15\x9d\x9a\x95\xeb\xd3\xad\xbc\xaf\xb5\x9a\x67\x99\xc1\x86\xc2\xf3\x2b\xe7\xd7\xf0\xa2\x58\xb9\xdb\x73\x6f\x45\x49\x54\x94\xe8\xf4\x8c\x0a\x13\xac\xde\x1b\x4d\xfb\xba\x7f\xde\xe5\x1c\x80\x9c\x85\x1c\x1f\x4b\x70\xa0\x51\x2f\xa1\xe0\x53\xd2\x40\x1b\x22\xa9\x31\x8e\xd5\x8e\x30\x92\x03\xdb\x37\x4d\x68\x74\x89\x62\x3c\x89\x96\x09\x28\x42\x8b\x25\x95\x53\xe5\xc6\xdc\xe1\x6e\x6a\x02\x1e\xe6\xd1\x9e\x45\xe3\x18\x75\x03\x06\xac\x76\xc4\x15\x45\xe1\x96\xa7\xb7\x4a\xa3\x7a\xe1\xab\x5d\xe8\x88\xb5\x25\x52\xd8\x6b\x04\x28\x9e\x93\xf2\x69\x87\x52\x7c\x80\x3a\x74\x11\xd0\xff\xce\x3a\x67\x8a\xda\x39\x84\x96\x06\x85\xd2\x65\x62\x3f\x7b\xd0\x66\xb3\x15\xda\x6c\x07\x73\x56\x7f\x1b\x16\x82\xeb\xa4\xca\x59\x09\x6c\x6f\xe0\xce\xf2\xd8\xac\x17\x70\xc3\x4b\x87\x63\x8c\x97\xfe\x0b\xab\xde\x22\x62\xce\xad\x7a\xff\x3e\x65\xa7\xf1\x7f\x9f\xf5\x9b\x45\x04\xae\xbc\x95\xde\x1e\xaa\xef\x1d\xac\x30\x16\x02\xba\x3d\xeb\x10\x6f\x4f\xdd\xbb\x2c\x0b\x67\x9e\x4b\x0b\x7e\x8f\x6e\x6f\x0c\x5e\x7f\xd4\xe6\xad\x0c\x77\x85\x2a\x9c\xa0\xda\x6c\xa1\xc1\x1b\xac\xb4\xff\xd6\x8d\x89\xf7\x50\xe5\x9f\xdf\x31\xaa\xeb\x57\x16\x27\x13\xdd\x9f\x2c\x67\x65\x4e\x21\xf9\x32\xf9\xf4\xcc\xe7\x44\x7c\xb0\x58\x16\xb3\x9e\xe3\x99\x54\xbc\xd4\x16\x6e\x46\xdd\x9a\xe9\x58\x5c\x9f\xeb\xe7\x3e\x07\xa0\x7a\x4b\x9a\x1f\xcf\xde\x79\x80\x74\xff\xb2\x96\x7b\xd2\x5b\x39\xf5\xe5\x13\xa8\x3b\xf3\xbd\xf5\xfc\x41\xd7\x1d\xa9\x83\x23\xfe\xb7\x9f\x3f\x9f\x47\xd6\x06\x4f\xac\x95\x13\x41\x67\x13\x5c\xa5\xd6\xcc\xc7\xca\xb3\xb1\xe6\xdc\x11\x5a\xba\x23\x63\x49\x6a\x1e\x6d\xdb\xf8\x04\x65\xf7\xa3\x93\x3c\x9b\x7b\xcd\x0d\x18\x94\x8f\xb7\x8c\xec\x07\x3b\x96\x81\x90\x61\x19\xb4\xc2\x83\x29\xc1\xd4\x58\xcb\x2d\x58\x14\x1f\x88\xce\xa2\x0c\x7f\x9a\x0d\xac\xea\xab\xf0\x2a\xd8\x9b\xf4\x1b\x4b\x26\xe8\xf2\x27\x3e\xd0\x3d\x21\xe8\x70\x74\x3d\x44\xdb\x60\xfc\xd0\x17\x1e\x9d\x39\xf2\xaa\x16\x51\x6d\x9d\x7a\xf3\x4e\xc5\xbe\x15\x05\x05\xde\x97\xec\x8e\x5d\x2f\xbd\x81\x76\x98\xd3\x7b\xb6\xdb\x16\x14\xa4\x40\xd1\xa4\xc4\xb9\x5c\x24\x7a\x7f\x6f\xb4\x56\xfd\x65\x7c\xbe\xbb\x15\xe7\xa8\xf0\xd9\x8d\x6a\xb1\xc7\x43\xc7\xbc\xa9\xaa\x5f\xf7\xeb\x51\xe9\x46\xda\x8e\x79\x53\xcb\x68\x5a\x72\x1a\xf4\xb0\xbe\x6f\x14\x76\x63\xbf\x1e\xa6\x15\xa3\x32\x1d\xce\x6a\xd3\xbe\x81\xc8\xdd\x72\xad\x3f\xc4\x1e\xa2\xff\xb5\xa4\x7e\x61\x90\xda\xf2\xef\x0f\x45\xfc\xf7\xb4\xaf\xfd\xfd\x2e\xb4\x8f\xbc\xa4\xaf\x07\x68\xbc\x29\xe9\xdb\x61\xc4\x56\xdc\x54\x1c\x62\xb5\xeb\x6f\xb7\xb3\x98\xbd\x58\xa5\x7e\x3e\x7f\x5e\x7a\x4b\x1c\xfa\xf2\xaf\xbf\xea\x25\xbc\xe0\xb7\x7e\xae\x91\x6a\x53\xf7\x7b\x68\x0b\x6d\x98\xbd\xeb\x33\x9f\x4c\x2c\x92\x98\x67\xea\x99\x07\x62\xeb\xd2\xcd\x78\xb0\x5d\xe3\xcf\xde\xc0\xb5\x65\xf1\x65\x70\xb1\xb5\x15\xc7\xa6\xcf\xb9\x5c\x59\xdb\x7d\x53\xad\xea\xbd\x48\xb4\xba\xde\x78\xc1\x5b\x7d\xb5\x2b\xdf\xc4\x5d\x9f\x05\x5b\xbf\x77\xe8\xfd\x93\xe6\x67\x6f\xcb\x9a\x77\x6f\xdc\x13\x09\xfc\xcf\x6c\x5d\x96\xea\xe9\xdb\x52\x7b\xfb\xb6\xd4\x1f\xac\x2d\x3d\xaf\xdf\x96\xf2\xf9\xdb\x52\x7b\xff\xb6\xd4\x1e\xc0\x2d\xcd\x17\x70\x4e\x8d\x2d\x2c\x6c\x1c\xff\x28\x5f\xf1\x11\xdc\x89\xf7\x15\xdc\xc9\xea\xcf\xe0\x4e\xda\xbe\x83\x3b\x71\x1f\xc2\x9d\xdc\xc1\x4b\xb8\xe5\xad\x9f\xc2\x9d\xb4\x7e\x0b\xf7\x7b\xc7\xf5\x3f\x69\x61\x71\xb6\xac\x33\x39\x13\xae\x55\xd8\x0f\x4e\x9c\x9a\xd5\xd9\x52\x37\x3b\x5b\x1a\x56\x62\x4b\x9f\xe1\xd9\x52\x59\x9e\x2d\x75\xd3\xb3\xa5\x6e\x7b\xb6\xb4\x8c\xcf\x3c\xf5\xb6\x59\x1c\xbf\xa9\xfd\xd9\x89\xdf\x00\xed\xe4\x06\x16\x68\x27\xad\x4d\xd0\x4e\x3c\x36\x68\x76\xe9\x9b\xad\x91\x1a\x33\xb4\xb6\x8b\xa4\xbd\x21\xda\xb7\x6d\x56\x49\x77\x59\x60\x50\xcc\x8e\xcb\x2e\x0b\xc8\x37\xcd\x10\x4e\xcf\x51\x9c\x61\xb0\x56\x80\xd7\x81\x51\x1a\x83\x0f\x5b\xf4\xcf\xd7\xaf\x5e\x96\xe5\xe2\x1d\xfe\x7f\x4b\x5c\x94\x6b\x20\x98\x5d\x2e\x70\x36\xb1\x72\x98\x1f\x1b\xf9\x7e\xa3\x2b\xf0\xc2\x1b\x1e\xd8\xd0\xe8\xcb\xf5\xde\x9a\x11\x2c\xb2\x12\xd2\x4c\x00\x49\xfd\x97\x62\x46\x77\x1f\x32\x4d\xb3\x1c\x87\x09\x49\xf1\xda\x35\xb3\x58\xa5\x78\x68\xe5\xed\xfe\xfe\xe5\xec\xfd\xcb\xd9\x3f\xf1\xcb\x59\xf6\x6a\x96\xdb\xb0\x19\xcf\x66\xd9\x86\x83\x6e\xf6\x7a\x96\xef\x7d\x27\x25\x49\xa0\x4e\xa6\xcf\x84\xb5\xc3\x9e\x27\x39\x60\xa4\xbc\x94\x2c\x51\x15\x19\x27\x51\x51\xa0\x53\x28\x72\xc6\xbb\xc9\x32\x14\x13\x66\x55\xad\x0d\xe1\xde\x08\x56\x29\x57\xae\x52\x0e\x82\x6a\x9c\x59\xb7\xf7\x73\x0e\x90\xb4\xa6\x93\x37\x47\x1f\xde\xd3\xb3\x35\x4c\x42\xf7\x02\x93\x2e\x23\xcd\xee\x27\xed\xf7\x6b\xed\xf7\x4f\xda\xef\xe2\xd7\x68\x94\x89\x8f\x09\x49\x53\x7c\x29\xbf\xf0\xbc\xcc\xe0\x29\xa3\x48\x59\x90\xb1\x99\x90\x46\xa9\x99\x30\x27\xe3\xdc\x4e\x49\x12\xe2\x14\x32\xe0\x0d\x50\xf1\x61\x14\x99\xe6\x51\x1a\xcb\xa1\x18\x59\x3f\x19\x5f\x1f\x8c\xaf\xb7\xc6\xd7\x0b\xe3\xeb\xff\x8c\xaf\x7f\x19\x5f\x6f\x8c\xaf\xe7\xc6\xd7\x3f\x8c\xaf\x13\xf6\xb5\x76\x56\xed\xba\x86\xce\xd1\xdb\x83\xe7\x74\x8a\x43\xb4\xb3\x1d\xc8\xc4\xf7\x47\x3f\xbd\x39\xf8\x70\xf2\xee\xc5\xc7\x57\x2f\xde\xfc\xf4\xe1\x65\x88\x76\x55\x26\xcc\x6a\xa8\x7e\xaa\x9c\x0a\xca\x09\xd1\x17\x64\x25\x28\x3f\xea\x90\xf1\xf1\xf9\xf1\xcf\x6f\xd0\xb5\xaa\xe9\xed\xf1\xab\x57\x14\xfa\xc3\xd1\xeb\x17\xc7\x27\x1f\x42\xb4\xb5\xb9\xb9\x39\xe4\x3d\xe4\x37\xde\xcf\x92\x6c\xfc\x29\x44\x5d\xca\x3a\x8b\xb2\x6b\xe4\x1d\x8c\x21\x94\x71\xa8\xde\x36\xb2\x07\x18\x74\x3f\x6f\xf2\x7d\x72\x1f\x0a\xe3\x7e\x23\xfb\xab\x6f\x64\x6b\xd2\x05\x44\x31\x8b\x76\xee\xca\x03\xc4\x61\x7e\xb9\x28\xb3\xbf\xbf\xd7\x37\x87\x31\xa4\x3d\x52\x11\x30\x68\x83\x5e\x80\x21\xcd\xe9\x7a\xa3\x3b\xb9\xee\x1b\x80\xe2\x0a\xfd\x81\x2a\x4f\x42\x0f\x1e\x88\xdc\x81\xf0\x17\xc1\xc4\xe4\x19\xfe\xdc\xb5\x5f\xd1\x19\x9e\xbf\x7e\x40\xdb\xb4\xb4\xed\xfd\x78\x5b\xb8\x8b\x34\x8b\x23\x71\x19\x2e\x2f\xf8\x2d\xff\xec\xc8\x7a\x6d\xc7\x40\x05\x8e\x68\xe7\x06\x2f\xf1\xe7\x01\x68\x2f\xb9\xe7\x5e\x9f\x8d\x11\xc5\x8a\x18\xb6\x6a\x9d\x9d\xe8\x98\xfa\x2d\x44\xdb\xdf\x3c\x66\x25\xb5\xc7\xc9\xe2\xcd\x19\x65\x79\x12\xc7\x9d\xf0\x9b\xef\x82\x8e\x89\xf2\x4e\xf8\x64\xf3\xfa\x2c\xd8\x6e\xe5\xf3\xe9\x9e\xef\xdd\xf3\xbd\x3f\x2f\xdf\x53\x6c\x8f\xbd\xf3\xbf\x03\xbe\x67\xc9\xee\xab\x8b\xee\x1e\xc9\x5d\x14\xf4\x09\xee\x2b\x45\x1b\xb2\x79\xed\x60\xc8\xd9\xbd\x0a\x47\x34\x79\xa2\x03\xd0\x6f\x29\xc2\x2f\x53\x52\xbe\x8e\x16\x52\x5c\xec\x0a\x89\x3a\x64\x3c\xa8\xbb\x29\x64\x4d\x2a\xb5\x87\x8a\x2d\x76\xb7\x0c\x39\x3f\xd4\x32\x36\x37\x65\xa1\xff\xad\xc9\x1b\x45\xa3\x51\x34\xc5\xb2\x25\x3d\x4f\x13\xfe\x43\x3b\x6f\xee\xa9\x53\xcb\x7e\x5d\x9f\x9d\x64\xe7\x38\x89\xc6\xa2\x59\x3b\x5b\x9d\x31\x42\x5f\xf6\xd4\x5f\xb9\x06\xf1\x53\x23\x44\x31\x8b\xd2\x34\x4b\x8d\x71\x9b\x10\xea\x5c\x13\xd6\x40\x34\xb4\x02\x27\xab\xd0\x03\xa1\xa3\x52\x9d\x97\xc2\x7a\xa0\xa6\x9a\xf8\xd9\x2d\xf4\x02\x19\x95\xc9\xf3\x98\x3d\x36\x0f\xa0\x7f\x88\x26\xa0\x41\xae\x1e\x38\x0d\xf4\x93\x09\xeb\x03\xd5\xe7\x1a\x4e\x7d\xb5\x15\xeb\xfd\x6d\x55\xb7\x5e\x7d\xdb\x02\x5a\x99\x72\x85\x32\xb4\x98\xdf\xd8\x4a\x39\x62\x58\x44\x31\x37\x25\x05\x53\xcf\xcf\x0b\x3c\xa6\x9b\x97\x34\xcf\xd7\x8d\xae\xb8\xf7\x14\x9f\xe5\x94\xaa\x62\x84\x29\x5c\xcc\x23\x72\x59\x36\x58\xe3\x59\x94\x47\xe3\x12\xe7\x85\x50\xf1\xc3\xbd\x3c\x2f\xad\xed\x23\xde\x36\xc8\x34\x0d\x34\x5b\x68\xb4\xb9\xe6\x77\xfb\x41\xa6\xb3\x12\x09\x8f\xb4\x96\x77\x5f\x3e\x06\x43\xda\x64\x20\x01\xf4\xae\x08\xa0\x1d\x8f\x8f\x21\x66\x21\x02\x30\x10\x94\x16\x5e\xab\xca\x1b\xe2\xad\xfe\xe0\x97\x8c\xa4\x10\xac\x01\x3d\x85\x3a\x50\x88\x3a\x9b\x9d\x3e\xda\xe0\xc0\x15\x86\x6f\x37\x9e\x0b\x08\xd8\xf3\x67\x9f\x0c\x18\xc4\x8a\xb3\xc1\x7b\xb8\xc1\x3c\x2e\xdf\x74\x5e\xaa\x0c\x11\x4d\x47\x34\xb0\x75\x82\x19\x22\x04\xf3\x70\x7d\x4c\x5b\xf3\xc2\xbc\x35\xd7\xcc\x0a\x49\x69\x25\x7e\x64\xe9\xfe\xa8\x3d\x8e\x92\x68\xe3\xca\xec\x90\x79\x20\x39\x61\x5b\xbb\x14\xe9\x67\x2c\xde\xf3\x70\x88\x7e\x24\x69\x8c\xd8\xe3\x2e\xde\x51\x19\xaf\x99\x4a\x14\x9d\x8e\xba\xc9\x07\xdb\x97\x00\x42\x48\xcd\xf0\x67\x61\xc2\x2c\xcf\x5c\x34\x8d\x9d\x7a\xe8\x89\xa3\xfa\xac\x44\xab\xd9\xd6\xdf\xbd\x80\x71\x0d\xb7\xa9\xd9\x43\x64\x63\x7f\x5b\x07\x17\xb1\x90\x75\xdb\x0e\xd5\x54\x8f\xd0\x76\x78\xe8\x0b\xd9\xc2\x04\xf5\x58\x91\xfd\x7d\xb4\xd9\x37\x4e\x69\xa3\x1c\x47\x9f\x14\x28\x1d\xe5\xc6\x3e\xe2\xaf\xca\xe9\x0c\x1e\xce\xa2\xfc\x30\x8b\x31\xd4\xe0\x3d\x84\xd1\xc9\x16\xe6\x38\x45\x99\xb7\xa3\x10\x36\x69\x2b\x91\xc8\x01\x2d\xf2\xdb\xd1\x08\x34\xf7\xdf\x43\x24\x37\x99\xf9\xa2\xac\x7a\x9d\x6e\x4e\xb6\xc7\xc7\x7c\x6f\x91\xe3\x09\xf9\xcc\x82\x68\x6d\x7e\xee\xd3\x59\x00\xae\xe1\x77\x6f\xcf\xa3\xbd\x55\xcf\xbe\xd7\x76\x19\x8e\xa0\x51\x02\xdc\xbc\x36\x98\x80\x2f\xca\xa7\xe1\x6b\x9f\xbb\x5d\xe7\xdd\xd0\xa9\x82\x52\x3c\xc7\x3c\x9b\x7d\x58\x0e\xdc\x6c\x9b\x2d\x07\x31\x23\xb4\x25\x45\x1d\x93\x2c\xb7\x4d\xe8\x8a\x32\xaf\x8a\x88\xaf\xcd\x28\x85\x1a\xf3\xb9\x39\x28\x7b\xe4\x66\x2b\x1d\xac\x13\x79\x70\x70\xc3\x6b\x9b\x02\xa1\xfd\xdd\xd8\x47\xa9\xd8\x17\xbe\x47\xdb\xe8\x29\x3d\xd9\xa0\x0d\x44\xf7\x83\xd4\x47\x13\xdc\x85\xfc\x0c\x7f\xbe\x4b\xd2\xb0\x62\x0e\xd8\xb4\xd1\xc0\x1a\x7e\x33\xe2\x70\x78\x86\x46\x1d\xbf\x0d\x05\xfc\x6e\xd3\x6a\x79\x2c\x9d\x2c\x93\x44\xa2\x61\x88\xcf\x71\x5a\xb2\x87\x02\xc0\xf2\x7f\x29\xb2\x14\x45\x23\x62\xf3\x78\xe1\x36\xf1\x43\xf6\xe3\x32\x49\xec\x37\x94\xe2\x31\x01\x2d\xfd\x88\x95\x76\x1f\x43\xb1\x86\x9d\x76\x15\x63\x77\xdb\x30\x04\x29\x5a\xb9\xae\x3a\xa5\xdf\x03\x30\xa1\x20\x69\x8c\x3f\x1f\x4f\x7a\xdd\x5e\xb7\x0f\xbe\x21\x1f\x6d\x79\x9e\x43\x4a\x78\xc7\x4e\xb0\xbc\x5c\x60\xde\x1c\x00\x01\x15\x99\xfe\xcc\x7a\xa4\xff\x45\x84\x10\x1e\x50\xf8\x3d\x74\xcd\x45\x31\xd3\xf2\x4f\xb6\x82\x36\x50\xb7\x47\x67\x4e\xd6\xbe\x81\xba\xfd\x6e\xab\xb5\x17\x93\x62\x91\x44\x97\x6c\x5e\xc0\xc7\x68\x5a\x52\xd9\x56\x62\xc3\x7e\xb3\xf6\x19\xb2\x9f\xb3\x62\x75\x2f\x5c\x69\x6d\xe6\xe4\xfb\x97\x97\xd1\x03\xba\xa5\x59\x14\x83\xa7\x03\x11\x6f\xf1\xb2\xc7\xcd\xea\xfa\xe8\xd1\x0f\x32\x51\x4e\xab\xdb\xb7\xda\x87\xcf\xd2\x66\xd3\x99\x59\x03\xcd\x1c\x8c\x4d\x36\x7a\x6a\xbf\x69\xe5\xef\xc1\xe8\x9a\x51\xce\x46\x86\x43\x35\xd0\xec\x1c\xe7\x49\x16\xc5\x38\x96\x8a\x60\xcf\x9a\xd0\x07\xf0\x41\x11\x49\xd5\x9b\xc6\x21\xfa\x70\xfc\xfc\x38\x44\xf3\xe8\x13\xa8\x86\x49\x7a\xbe\x4c\x52\x9c\x47\xa3\x04\xdf\xe5\x00\xd5\x69\xc0\x7e\xbd\xbb\x85\x1e\x21\x2d\xbb\xdf\x1f\xe4\x78\x91\x44\x63\xdc\xeb\xa2\x2e\x38\x75\xa3\xa7\x85\x8e\x19\x24\x32\x4b\xcf\x71\x5e\x16\x2a\xe4\x26\xc8\x7d\x31\x1e\x93\x79\x94\xd8\x4c\x96\xa4\x7e\x66\x5f\x66\xcf\x59\x01\x97\xf2\x6a\xc3\x67\x9a\x6e\x0d\x99\x80\xc7\x6b\x6a\x0c\x00\x59\x66\x6e\x7c\x4c\x19\x7e\xa6\xcd\x18\x1b\x65\x5b\xca\x13\xef\x6a\x5c\x5a\x5d\xf5\xc1\x59\x53\xa1\x25\x75\xc7\xe7\x09\xcd\xcd\xd5\xa7\xe6\x8e\x62\x1c\xf6\x19\x40\x82\x8b\xe2\xc3\x2c\x4a\x7b\x9b\xe0\x44\xf6\x11\xb3\x3a\xe7\xd6\xfb\x9c\xb0\xb6\xfa\x10\xbe\x55\xcb\x31\xb0\x78\xb0\x04\x37\xcd\x1c\x95\x51\x7a\xc9\x1d\xef\x70\x77\xa4\x69\x35\x5a\x07\x1c\xaf\x07\x69\xcc\xd4\xff\x8c\x86\xc8\xe4\xb2\xe0\x8e\xd4\x0b\x34\xc2\x93\x2c\xc7\x03\x87\xae\x5e\xf2\xa3\x43\x3d\xee\xaf\xf8\x1e\xd4\x40\x5a\x2f\x61\x9f\x37\x90\x2f\xd7\xef\x43\x6e\x2a\x36\x8f\x3e\xb3\xb0\x95\x9f\x49\x79\x19\xa2\x27\xa0\xc2\x16\xbb\x0e\x29\xb8\x4b\x63\x28\xda\xb7\x37\x19\x6d\x92\x7b\x1b\x14\x62\xcf\x28\xaa\x4f\x67\x7d\x61\xab\x2c\x37\xa4\x3b\xa7\xb4\x43\x4f\x21\x0c\x69\x5d\x6f\x15\x10\x5f\xe9\xef\xef\x8f\xdf\x0c\x24\x96\x59\x7b\xca\x81\x25\xb8\x8e\x2d\x50\x64\x47\xf3\x0c\xd0\x22\x2a\x0a\xca\xbb\xca\x59\x9e\x2d\xa7\x33\x73\x05\xc8\x81\x70\x5a\x83\x5a\xdd\xcb\x49\xc5\xd5\x1e\xc1\x69\xc9\x23\xf3\x56\x8e\x58\x00\xf0\xb7\x1d\x66\x75\x0d\xb5\x9d\x0b\xfb\x51\xad\x02\xd4\x5b\x27\xc5\x8f\x24\x25\x25\xb6\x90\x6e\x75\x03\x24\x44\xad\x13\xa6\x94\xe5\x76\x54\x5b\x17\xef\xf8\xa6\xc2\xd6\x01\x3d\x2f\xa5\xc0\xfd\xd1\xcf\xd8\x16\xa4\xa6\xb8\x84\x88\xc5\xc7\x93\x93\x94\x78\xb5\x5d\x50\xb6\x9c\x61\xfe\x43\x2e\x38\x54\x66\x81\xd4\x4e\x49\x87\xe8\xde\xa8\x8d\xb2\x1f\xb2\x9a\x1e\xeb\x4c\x1f\x8a\x80\xdb\xae\x02\xe1\x3c\xcf\x72\xe1\x92\x86\xf5\xb8\x40\x69\x56\xa2\x71\x96\xe7\x78\x5c\x86\x17\x72\xdd\x98\xbd\x36\x16\x10\x2d\x28\x48\x60\xc9\x32\xe1\xbf\xa7\xf0\xdf\xa0\xcc\x5e\x65\x17\x38\x3f\x8c\x0a\xdc\x03\xe6\xc2\xf4\xbd\x8a\x8f\x51\xa8\x7f\xf0\x5b\x66\x7e\x75\x73\x4a\xff\x3f\x53\x47\x71\x0d\x44\xf7\xfb\xad\x13\x1e\xf3\x44\x96\xe2\x0b\xf4\x82\x8e\xaa\xd7\x85\xab\x5e\xe8\x08\xd8\xaa\xfe\xbb\x5b\x22\xfc\x99\x14\x65\x11\xa0\x45\x82\xa3\x02\xc4\x62\x18\x79\x96\x4a\x54\x4d\xb2\x24\xc9\x2e\x48\x3a\x85\x92\x05\xe5\x82\xd6\x32\xe2\x3d\x0c\xc0\xbf\x42\xa0\x9e\x7d\xd4\x44\x89\x95\xbd\x07\xef\x57\xa6\x57\xe1\xe8\x13\x86\x45\xc8\x18\x3e\x5c\x46\x13\xb0\xa7\x95\x4c\x96\x91\x00\x65\xb5\xe0\xab\x82\x4d\x3c\x43\x2d\xa7\xac\xb7\x59\x51\x90\x51\xc2\xa6\x10\x5c\x68\x70\xa3\xbe\xf7\x47\x54\xbe\xcc\x4b\xf6\x93\x8a\xd4\x02\x5b\x2f\x26\x13\x32\xbd\xe4\x1f\xc7\x82\x94\x1e\xa1\x4f\xb4\x79\xf6\xa7\xae\xab\xe0\x93\xdf\x6c\x31\xb0\xb9\x02\x93\x97\x4b\xec\x53\x5c\x45\x31\xb8\xa9\x82\x93\xf7\x3f\xec\x93\x5f\x18\xa9\x3c\x56\xe0\xd1\x23\xb9\x30\xd5\x3d\x0e\x2b\xf0\x6b\x34\xca\x8c\x3c\x4f\x09\x71\x0f\xc3\x06\x00\xd7\x37\x7a\x1e\x2b\xa1\xf5\x42\x2b\xcc\x3e\x39\x16\x34\x10\x64\x41\x68\x1f\x70\x99\xc2\x11\x82\x15\x0e\xa7\xda\xef\x52\xfc\xb6\x45\x0a\xc6\x17\xac\x93\xef\x95\x94\xd3\x19\x39\x8c\xa3\x94\x9e\x0c\x22\xc9\x9a\x79\x3a\xd7\x95\x65\x39\x8a\xd0\xcb\x17\xff\x84\x43\xb8\x90\xd6\xee\x8c\xa1\xc8\x7d\x56\x1c\xed\x7e\x9e\x61\xe1\x67\x2f\xd2\xae\x72\x79\x14\x14\x2d\x58\x00\x5d\x4f\x51\x81\x2e\x30\x5d\x20\xca\xc1\x8a\x18\xc6\x9a\x26\x0d\xfd\x8c\x8d\x23\xb9\x18\xa7\xce\x52\x98\xa8\x43\x6b\x16\x4c\x42\x17\x8a\x58\x09\x3d\x6a\xac\xc9\xa9\x18\x77\xb2\xe4\x21\x7d\x1b\xe6\x15\xa0\xa7\x46\x23\xa1\xfe\xa5\x49\x56\x8d\xcb\x37\x62\x38\xf6\xac\xe0\x0b\x4c\xee\x17\xec\x7f\xcb\x12\x2f\xb3\xba\x05\xae\x9d\x17\x7e\xb3\xa5\x4e\x57\xdb\xef\xb8\xd8\x01\x21\x77\xb3\xd4\x4b\x32\xc7\xc5\xef\xb1\xcc\x53\xae\x5c\xa4\x8b\x5b\xaa\xaa\x0a\x76\xcc\x87\x2d\x1a\x49\x5b\x16\x87\x1c\x64\x4f\x5a\x11\x85\x22\x03\x71\x77\x48\xe7\x5e\xd1\x82\x59\x9b\xf4\x72\xa5\x2a\x50\x00\x12\xff\xba\xf1\x8d\x35\x0b\x0d\xe7\x9f\x6f\xa8\x10\x08\xcb\x5e\x94\xe7\x3f\xae\xae\xd0\xe6\x9e\xf7\x70\xc3\xeb\x75\x0e\x27\x2c\xdd\x38\x11\x71\x9c\x8b\x9e\x3c\x78\x80\xf8\x6f\x9f\xd0\x4f\x9b\xb4\x73\xf5\x13\x86\xcf\x07\x9a\x21\x8b\xf1\xc2\x52\x27\xb2\xf9\xb9\x1b\x74\xbb\xfa\x85\x8b\xe5\x29\xcd\x57\x5a\x27\x94\x4a\x99\x2e\x15\xb1\x63\x3d\xa4\x22\xe9\x84\x81\x89\x28\x1e\xf2\x28\xc6\xcd\x26\x01\xb6\xbc\xc8\xba\x05\x1a\xcb\x98\x2e\x0e\x69\x99\x21\x5f\xda\xd0\x57\x05\xd5\x68\x87\x64\xb3\x4e\x53\xe1\x65\x90\x0c\x05\x1f\x69\x94\xe5\x5b\xb0\xf0\xe4\xbb\xa7\x79\xad\x93\x05\x74\x95\x44\xe3\xd4\x75\x26\xb7\xfc\xeb\xc0\x2c\x0f\x16\xc9\xb2\x50\x5d\xe0\xdf\x5e\xf7\x86\x12\xc8\xd4\x24\xcd\xf0\xf8\x53\x21\x8e\x4d\x8c\x47\x8a\x6b\xce\x82\x3f\x96\x4b\x2e\xc1\x8f\xaf\x37\x1a\x31\x23\xf9\xb1\x37\x12\xb1\x19\x53\x58\x6b\x80\xae\xff\x48\xc1\xeb\x8e\xed\x20\xb8\x12\x9f\x39\xab\x6e\x63\xe2\x78\xa5\x96\x06\x6d\xf8\x9f\xcd\xcf\xa7\x9b\x8f\xbe\x8b\x1e\x4d\xce\xbe\xec\x6e\x5e\xff\xcf\x90\x0c\x4a\x5c\x94\x12\x7c\x85\xb1\xd7\x0c\xf9\xeb\x0c\xb6\xc5\x30\xe1\xfc\x3f\xfc\x4f\x6f\xf3\x73\xff\x69\xed\x38\x75\xfa\x1b\x0e\x55\xac\x2c\x16\x0d\x0b\x7a\xc7\x3c\x08\x73\xa3\xc3\x39\xbc\xe3\xa5\xfb\xb1\x36\x6a\x93\x7e\xb9\x23\x40\x64\xba\xaa\xf0\x76\xc6\xec\x0b\x65\x73\x1a\xd8\xc1\xa3\x1f\xbd\x60\x56\x97\x21\x74\x57\xb7\x00\x67\xc7\xc5\x9c\xfe\x3b\x8e\x16\x05\xc8\x0e\x49\x82\xc4\x77\xa0\x7b\x68\xb4\x7b\xcc\x1c\xcf\x6b\x1d\x36\x1a\x38\x96\xdb\x3b\xc3\x0e\x8e\xc6\x33\x34\x8e\x0a\xa7\x1a\x52\x30\x42\x59\xce\xf9\x0c\x69\xd4\xc4\x56\x59\x7b\x9a\x62\x6d\x15\xcb\xf9\x1c\xc7\x95\xe4\x65\x35\x77\xc7\x64\x66\xd5\x5e\x47\x6e\xc3\x21\x1b\x8f\x85\x9b\x48\x96\xe4\xbf\x9c\x1d\x48\xe9\x43\x38\xc4\xcb\xa8\x00\x67\x34\xb3\x68\x47\x34\x62\xea\x52\x84\xb4\xe3\x73\xf8\xb2\xbb\x09\x77\x94\xc8\xa2\x10\x70\xde\x5d\xce\x50\x82\xe1\x39\xb5\x16\x81\x6f\xb1\xc0\x39\xed\xad\x98\x86\x14\xa2\x17\x4e\x09\x0b\x70\x17\x15\x78\x1e\x2d\xe8\x74\x6c\x19\x9a\xbe\x9e\xb4\x60\xd0\x3a\x0d\x6e\xd9\xb6\x1e\xf7\xd1\x0f\xe8\x5b\xba\x9d\xf3\xac\x53\x72\x36\x28\xb3\x13\xda\x10\xd7\x05\xad\xef\xef\x6b\x99\x40\xf4\xf5\x15\x7e\xbf\xef\xa9\x51\xd7\x2e\x59\x35\x56\xf8\x0a\xd7\x96\xa5\x62\xf9\x06\xe3\x57\xf1\x17\x24\x95\xbe\xe6\x47\x3d\x41\x8d\x15\xa4\x58\x66\x77\x49\x8a\x42\x7b\x2d\xf7\xe5\x15\x28\x51\xd3\x19\x4b\xea\xb3\x5f\x5d\xf3\x76\xba\x5d\x4e\x4a\x2e\x99\x1a\xf8\xbd\x11\xd1\x6a\x40\x63\xa7\xf7\xb4\xa2\x1a\x32\x16\xbd\xd0\xae\xdd\x6d\x92\x06\xa6\x37\x53\xa6\x7f\x94\x48\xbf\xa3\x07\x9f\x09\x73\xa0\x2f\x6e\xe2\x24\x85\x1b\x04\xdc\x44\xbf\x26\x05\xd9\xfd\xdf\xd8\xaf\x24\x6e\x8d\xbc\x6c\x46\xda\x58\x53\x2d\x69\x5a\x25\x4d\xc9\x53\x49\x9a\x06\x1b\x2d\x33\x2a\x51\x92\x18\x6d\x6f\x32\x9f\x41\x8f\xf8\x05\x21\x6b\x93\xbd\x4f\xd8\xfc\x8c\x98\x71\x87\x6b\xdc\xd5\x48\xc9\xfe\xdb\x7e\xee\x7d\x40\xe7\xda\xd2\x80\xab\x1d\xfd\x5a\xe2\x8c\x77\xe3\x13\x4e\x75\x05\x3e\x34\x19\x9e\xed\xb6\x75\x1b\xad\xa7\x22\x7e\xf9\xe5\xab\xcf\x84\x10\xa1\x17\xe1\x4a\x49\xd6\xa8\x5e\x53\x05\x68\x77\xd3\x7f\x4b\x20\x1c\x11\x8b\xd3\x74\xa1\xa4\xdc\xe6\x20\x9b\xde\x93\xa4\xef\xea\xcb\x08\xbc\xc9\x36\x32\xdf\x19\x10\xf5\x58\x37\x2c\xb9\x50\xf4\x2d\x2d\xca\x28\x1d\x53\x2e\xa2\x0a\x5f\x5d\x49\xa4\xf1\xc2\xf0\x7a\x0d\x7e\x19\x8e\x33\xbc\xa9\xcc\x36\x02\x78\x91\xac\xb2\xdb\x16\x51\xe2\x3c\xdc\x84\xa5\xf7\x8e\x71\x51\x4b\x14\x79\x42\x24\x79\xf1\xc3\x59\x2b\xef\x19\x8c\x86\xf5\xad\x7b\x77\xe8\x61\x7d\x69\x8d\x1b\xd1\xe3\x66\xec\xfc\xa8\x8c\x48\x56\xc5\x8f\x28\x7a\x23\x0c\x89\x12\xdd\x96\x23\xa2\x7d\x2a\x9b\x87\xc3\xba\x7e\x83\xc1\x1c\xf3\xbe\xb5\x5c\x0c\x54\xbc\x48\x97\x49\x02\x51\x12\x7a\xee\x0a\x01\xc3\x6d\x50\x61\x78\xc6\xce\xef\x6b\x5b\x8e\x7c\xc4\x3a\xdb\x82\x1d\x30\xc0\x9b\x30\x03\x96\x74\xa3\x89\xe4\xdd\x6b\x3b\x1a\x70\x01\xd8\x3c\x16\x27\xa2\x46\xcb\x91\xb8\x51\x31\x5a\xb2\x34\x28\x58\x3b\x06\xfb\x38\xc2\xf6\x51\xb0\x91\xcb\x04\xd5\x99\x83\xf8\x7b\x61\xae\x2b\x65\x81\x50\x3b\x06\x5a\xcc\x7e\x35\x20\x5d\x27\xe5\x97\xee\x3e\xb5\xbe\x0e\x37\x93\xec\x19\xae\x32\x66\xbd\x46\x63\x08\xfb\xd4\xc3\x9e\xbd\x4d\x3f\x90\xae\x32\xea\x88\x8f\xfb\x05\x9d\x40\xbc\x9c\xa3\x51\x92\x8d\x3f\xa1\x19\x8e\x62\x9c\xd3\x8f\x6c\x6e\x5b\x6d\x90\xe2\x19\x4d\xf6\x09\x0d\x33\xfc\x59\xfa\x45\x87\xb2\x68\x42\x92\xd2\x56\x66\x7a\x08\x16\x60\x0d\xf7\xc3\x34\xa5\xf6\xa4\xff\xcd\xd6\xb6\x3a\xea\x33\xf0\x06\xbc\x54\x1f\xd4\x59\x5d\x7a\x55\xbe\x73\xba\x0b\xe5\x8b\x38\xac\xce\xd9\x6b\x6e\x3f\x6e\x30\x33\x49\x46\xc5\xbc\x05\x19\xbb\xf3\xf0\x81\x26\x37\xcd\x43\x29\x81\x6a\x26\x00\x6a\x32\x26\x00\x8a\xd5\x4e\xc0\xe3\x5d\x85\x7f\x06\x7d\x63\xfc\x43\x55\x7a\x4d\x3e\xf4\x3b\x40\x37\xc2\x7e\x85\xe3\x11\x2e\xf2\x85\xe2\x47\x20\x52\xe1\xd1\x4f\x28\x7f\xb1\x74\x10\x0c\x43\xf6\x9f\x48\xe1\x16\x24\xa1\xfa\xc9\x72\x34\xeb\x92\x50\xff\x10\xe5\x4e\xca\xc9\x93\x90\xff\x2f\xd2\xc0\x5e\x25\x14\x3f\x54\x3d\x0c\x56\xfc\x52\xe9\x1c\x5e\xfe\xe4\xf5\xb8\x46\xb7\xa1\x2f\x91\x41\xbb\xb6\x9c\xa1\x27\xcd\x80\x15\x66\x93\xa1\x9d\x20\xc6\xf1\x33\x86\x51\xfc\x8c\xb5\x31\x40\x1a\xff\x21\xe0\xa4\xb4\x18\xea\x1f\x22\xd7\x54\x59\x87\x4e\x8a\xc4\x1a\x13\xd4\x43\xf5\x93\xe5\x68\xd2\x71\xa8\x7f\x88\x5c\xe3\x24\x12\xda\x09\x02\x4a\xcb\xb7\x72\xac\xa3\x7b\xe8\x26\x89\x1e\x3a\x90\x4e\x92\xa8\x53\x08\x63\xa1\xf6\x5b\xef\x6f\x3a\x0d\xe5\x2f\x91\xce\xf6\xd4\x50\xfe\x92\xa3\x67\xeb\x3d\x54\x3f\xe5\x98\xe8\x2e\x19\x8a\x1f\x22\x95\x6e\x58\x21\xff\x5f\xd6\x41\xf9\x5d\x28\x7e\x88\x54\x60\x1b\xa1\xf8\x11\xc0\x02\x63\x0e\xea\xf8\xab\xee\x4e\xb8\xf5\x5d\x50\xeb\xdf\x26\xe8\x2c\xcb\xc9\x93\x4e\xf8\xe4\x9b\xeb\xb3\x60\x7b\xab\x8d\xc7\x07\x73\x09\xef\xb3\x05\xdc\xe1\x8e\x0e\x3a\x21\xea\x6c\x0e\xb6\x37\x07\x5b\x9d\xb5\x6b\xe1\x0a\x6e\xbb\x55\xa4\xe2\x7b\x4f\x12\xf7\x9e\x24\xfe\x0a\x9e\x24\x78\x2d\x6b\xae\x2f\xb8\xbf\xe3\xc9\x24\xc7\x97\xe8\x67\x92\x8c\x3f\x61\xf4\xfd\x2f\x78\x32\xb1\xdd\x49\xb4\xf4\x18\x07\x60\x24\x4a\xd1\x31\x95\xb8\x23\x80\x22\x51\xea\x82\xfd\x18\x8d\x28\xd8\x3f\xb2\x29\x4e\x8a\x12\x27\x09\xce\xd1\xf7\x13\x48\x74\x81\x7f\x8a\xce\xd1\xcf\x59\x16\xa3\xef\xa7\x95\x6e\x2e\x76\x95\x7b\x1f\xee\x0b\xf2\x75\x94\x46\x53\xd3\xf7\xc4\x60\x48\xb1\x30\xcc\x19\xc0\x9c\x01\x08\x1f\x13\x47\x23\x38\x1c\xd9\xc0\x64\x14\xa5\x02\xe4\x05\x98\xf1\xdb\x10\x4c\xf2\x2a\x86\xb8\x9c\x09\xc0\xe7\xcf\x6a\xe0\xe2\x91\xf4\x37\x3b\xab\xab\xaf\x98\xc9\xfa\xde\x80\x67\xf2\x2a\xc0\x14\x97\x02\xf0\x2d\xce\x0b\x78\x4a\x55\x0d\xbd\xe0\x20\xb2\x13\x17\x51\x3e\xaf\xeb\x06\xcd\x97\xc0\xb8\x2c\x21\x6a\x93\x0b\x5f\xf0\x2c\x01\x2a\xb8\x8a\x01\x29\xd8\x05\x3d\x51\x29\xe7\x1e\x24\xb1\x2a\xd4\xc2\xca\x57\xfb\x08\x61\x40\xc2\x1b\x13\x7f\xb8\x81\xd3\xd8\xd3\x37\x96\x21\xc0\x9e\xc1\x89\xc9\x85\x1a\xd1\x74\x89\xc9\x3c\x5b\xe0\xbc\xbc\xf4\xc0\x2d\x78\x96\x00\x7d\x59\x96\x8b\xb7\x79\x76\x4e\x62\x2f\xb9\xd1\x85\xba\xe0\xd9\x92\xd8\x16\xe3\x9a\x12\x64\x31\xb6\x0b\xb4\xf3\x68\xb8\xb6\x26\x65\xf5\x9f\xf1\x68\x07\xf5\x44\x35\xa6\x57\xde\xdc\x5e\x21\x29\xbe\xb0\x96\x8d\x2a\xa9\x39\xe8\xe5\xa1\x56\xb5\x9e\x0b\x28\x0d\x08\xb3\xb7\x2e\xf8\x82\x2e\x17\x70\xd4\xaf\x57\x11\x8f\x78\xe6\xf3\x67\x4e\x5e\x31\x13\x25\xdf\xcf\xdc\x92\x29\xac\x01\x9a\xfb\x06\x97\x4e\xee\x42\x11\x3e\x05\x11\xeb\xc0\x81\x1b\xfd\xfa\xab\x68\x83\xd2\xb5\xdb\x07\x45\xe0\x00\xc4\x3f\x7b\x3a\x8c\xa2\x6c\x75\xd4\x88\x16\x24\x94\x9b\x21\xff\x9f\x1d\x39\xf4\x4e\x72\x6c\x15\x46\x51\x9d\x7c\x42\xe3\x2b\x90\x30\x1a\xbd\x84\xfa\x87\xd3\xc4\x47\xb9\x06\xd8\x0f\x67\x80\x1c\xa0\xa7\xda\xe7\xe4\x4c\x70\x11\x6a\xbf\x7b\xcc\x98\xe7\xba\xbf\x47\x25\xa6\xe1\x10\x5c\xf0\x16\x18\xa9\x31\x64\x6c\x27\x06\x9f\x40\x6b\x94\xdc\x3c\xe3\x6b\x1a\x5b\xe5\xb8\xa8\xd0\x28\xea\x14\xf1\x34\xb1\x4e\x79\x7a\xcc\xe0\x66\x1a\xd7\x0b\xaf\x4c\xda\x9e\xbe\xe4\x98\x05\x8b\x50\xbd\xf8\x84\xf1\xe2\xa8\x78\x7f\x99\x8e\x49\x3a\xad\xed\x0a\x94\xb5\xe0\xdb\x51\xa0\xa7\x23\x3a\x5f\x78\xa6\xec\x57\x2c\x28\xf1\x0c\x86\xb9\x93\x82\x2f\x0f\x8c\x78\x32\x2b\xa0\xe0\xdb\x03\xc7\xdf\x5d\x0b\x30\xfa\xe9\x40\xe9\x4f\x70\x19\xa0\x4c\xf1\xc2\x1a\x75\x8a\x04\x4f\xdb\xea\x3d\x95\x68\x9e\xa7\x78\x6b\xb5\xa1\xb5\x34\x4f\xdd\x3a\x2e\x45\xed\x75\x38\x65\x26\x8e\x02\xf2\x67\xec\x1f\x99\x0e\xc5\xbf\x1d\x38\xdd\xb4\x85\x41\xca\x14\x0f\xac\x7b\x2b\x2c\xca\x1c\xda\xb7\x85\x4e\x9f\xab\xca\x3a\x39\x9e\x76\x8f\x9e\x1d\xbc\xd1\x1a\xa3\x9f\x0e\x94\x72\x4f\xc3\xc0\xf8\xb7\x0f\x4e\x78\x4e\x91\x80\x90\x40\x77\x31\x7b\xe1\xb3\xad\x5f\x7f\xc9\xcd\x2e\x85\x4c\xef\x8a\xe6\x75\x1d\xdc\x49\xdb\x90\x55\xd7\xa7\x31\xc9\x41\x55\x3c\x8e\x16\xf0\xfa\x42\xbb\xc0\xf4\xcc\xe8\xd1\xe1\xc1\x5b\x63\xed\xd3\x72\xba\x85\x1c\x61\xa2\x24\x5d\xbe\x54\xaa\x64\xf9\xc6\x63\x4f\x0a\x31\xe0\xcd\x88\x95\x0d\x0e\x65\x24\xff\xad\x8b\x38\x7a\x2a\x79\x37\xec\x75\x5c\x1c\xe9\x99\x77\xce\x29\xe8\x60\xba\x62\x4f\x4a\xb3\x18\x77\x03\x03\x62\x0a\x66\x21\x21\xea\x52\xa1\xe3\xe3\x38\x21\x38\x2d\xff\xc1\xc0\xbb\xea\x4e\xba\x1f\xdc\xa4\x35\x5c\x5e\x64\xf9\xa7\xaa\x06\x53\x5c\x7e\xe4\xa0\x16\x88\x19\x30\x20\xb4\x57\xf9\x2d\xbb\x85\xb9\x42\xbb\xaa\x5f\xb8\x9c\x7d\x84\xb9\x1e\x67\xc9\x3f\x7e\x87\xfe\x5d\xcc\x48\xb1\x90\xbe\x91\x9d\xee\x15\xb3\xd9\xad\xd1\x06\x3f\xcf\xbc\x7b\x09\x29\x0e\xb3\x34\x65\x3e\x9b\xb4\xe5\xd6\x37\x68\xaf\xe7\xdd\x2e\x1f\x3c\xf0\x6e\xa3\x7a\x95\xbd\xbe\x7f\x07\x63\x5e\x0a\x84\x4c\x5e\x49\xf3\x60\x1c\x0a\x91\x13\xb8\x44\xe3\xd5\xdb\xd2\xba\x85\x37\x51\xfd\x84\xc0\x54\x4e\xc6\xc1\xa2\x13\x6e\x6f\xd2\x24\xfd\x48\xd2\x09\xb7\xb7\x68\x9a\x3a\x0e\x74\xc2\xed\x5d\x99\xc2\x44\xa7\x4e\xb8\xfd\x44\x26\xe9\xc2\x7d\x27\xdc\xd9\x96\x19\x74\x85\x77\xc2\x9d\x1d\x95\xa0\x84\xfa\x4e\xb8\xa3\x2a\x55\xc7\xc2\x4e\xb8\xf3\xad\x93\x8c\xcb\x59\x27\xdc\x79\xe2\xa4\xa7\xb8\xec\x84\x3b\xdf\x39\xe9\x42\x10\xee\x84\xbb\x9b\x4e\x66\x31\x9b\x75\xc2\xdd\x2d\x37\x9d\xca\xc2\x9d\x70\x57\x75\x5f\x9c\x71\x3a\xe1\xee\x37\x32\xd1\x3c\x38\x77\xc2\xdd\xc7\x32\x4b\x48\x2d\x9d\x70\xf7\xdb\x7a\xdd\xde\xf5\x59\xb0\xbd\x73\xaf\x79\xbb\xd7\xbc\xfd\xb7\x68\xde\xa2\x24\x01\x07\x13\xb7\xf3\xe3\xaa\x29\xb8\x1c\x55\x88\x4f\x17\x22\xc2\xc4\xbc\x38\x67\x16\xfd\x9a\x8e\x01\x7a\x23\xe0\x54\xd0\x98\xa6\xe8\x48\xae\x9e\xc6\xab\xa8\xf9\x11\x2e\x77\xad\xca\x20\x4d\x40\x5c\xb0\xd8\x47\x26\x88\x60\x45\x3c\x53\x7a\x77\x3d\x48\x12\x63\x28\xa6\x60\x64\x1e\xad\x02\xb8\xa9\x0f\x90\x65\x5a\x56\xa1\xf4\x30\x13\xf4\x23\xf2\x2f\xec\x72\x9e\xfe\xa7\x27\x3b\xe6\x92\x6c\x13\x72\x7a\x58\x1f\xe6\xdb\x92\x5a\x85\x3f\xf0\x7d\xf9\xeb\xea\x0a\xe2\xdf\x20\xdb\xef\x03\x4d\x84\xd4\xd3\x2e\x95\x42\x21\xae\x40\x37\x40\xdd\x32\x63\x3f\xcf\x06\x0c\xcd\x5a\xbc\xc3\x89\xe7\x36\x94\x37\x73\x3a\x39\x03\x03\x17\x69\x1f\xca\x6f\x48\xfb\x9e\xa0\xd9\x56\x35\xb4\x3f\xb4\xf8\xbe\x46\x3c\xcc\x85\x0e\x74\x84\x9d\x97\x54\x10\x3c\xd5\xa0\xb0\x59\x50\x0f\xb7\xc0\x17\x85\xc2\xab\x81\x67\xf3\x75\x97\xee\x9d\xa2\x0e\xe3\x9e\xa8\xc5\x71\x54\x46\x62\x04\xf4\xf7\x80\xfe\x83\xf6\xb5\xdf\x57\x57\x60\x14\x2b\x01\xe0\x2a\xb9\x10\x20\xfc\xeb\xea\x4a\x45\xdf\x04\x6d\x23\x6d\x5a\xdc\x91\x6b\x80\xa7\x9b\x67\x83\x82\x32\x04\xe9\x62\x9d\x42\xcf\xb9\x80\xa3\x28\xcc\x9d\xae\x5f\x3c\xd3\xa5\xb7\xb2\xcf\x4d\x6d\xb9\x74\xe7\x5e\xda\xf6\x7e\x91\xef\xd3\xfb\xa7\x9b\x67\xda\xc3\xab\x75\x68\xbf\x8f\xbe\xc0\x63\x87\x28\x4d\xb3\x12\x4d\x48\x1a\xb3\x7e\x91\x74\xca\x1a\x7a\x2a\x9b\x1f\x67\x69\x91\x25\x78\x70\x11\xe5\x69\xaf\xab\x97\x60\xde\x72\x28\x2b\x4e\xb2\x69\x57\x33\x7d\xe5\x3d\xa6\xa8\x70\x3c\x2e\x61\xce\x86\xf4\xc8\x5c\x30\x77\x3d\xdf\xea\x0c\x58\xb7\x02\x93\x20\xcc\x23\x14\xd4\x28\x9c\x1d\xc2\x14\xb7\x58\x8e\x9f\xf1\x98\x4a\x00\x9e\xf5\x18\x80\x47\xa6\x51\x34\xfe\x24\x63\x88\x82\x2b\x02\x7e\xd8\x15\xd7\xad\xbd\x28\x9f\x2e\xe1\x2d\xc8\xa9\xfc\xa5\x79\xe3\x31\x8d\xd0\x45\x8d\x10\xfb\xb9\xb6\x98\xee\x37\xae\xe7\x40\xd0\x89\xdf\x32\xfd\x58\x28\xb6\x91\x2e\x93\xc4\x41\x77\x26\x28\x8d\x7b\xbf\x53\x07\x60\x01\x31\xd1\xa2\xac\x31\xcd\x2c\x60\x72\x30\x22\xa6\xd2\x50\x13\xbf\x19\x67\xef\x65\x01\x1c\x94\xba\x81\x97\xb1\x06\x82\xbd\xd3\xc3\x56\xaf\x1f\xa8\x86\x34\x0c\x37\xcf\x54\x54\x96\xd1\x78\xf6\x21\x3b\x14\x8e\xb0\xf4\x29\x13\xde\xb1\xf4\x33\xb7\x9a\x5a\x36\x6e\xf6\xe9\x0c\x47\x14\x1d\x44\x49\x22\xf7\x13\x0e\x5c\x71\xa6\x70\xba\x29\x0f\x18\x9e\x13\x86\xf7\x88\x01\xa4\xda\x09\xb7\x41\xba\x67\xab\xbe\x13\x6e\x83\xec\xae\xc7\x6c\xdb\x01\x60\x6b\x23\xec\x84\xbb\x3b\x54\x64\xde\xbd\x17\x99\xef\x45\xe6\xbf\xb6\xc8\xac\x85\x7b\x81\xb3\xf7\x5d\xc5\x7b\xf9\x7b\x91\xa5\xf9\x62\x6c\xca\x9b\xbf\xb0\x44\x79\x75\x98\xe7\x99\x2d\x02\xb3\x34\x29\x89\xba\x2a\x0a\x3a\x58\x43\xc8\x74\x64\x4c\x40\xc7\xc7\x4a\x49\x93\x67\x14\x3c\xb0\x77\x83\xa3\xc0\x28\x8e\x85\x4f\x47\xca\x8e\x79\x61\x70\x93\x0d\x5d\xe3\x09\x96\x45\x60\x14\xc7\x1e\x1b\x5b\xc4\xc7\xcf\x0a\x95\xca\xba\x75\xb8\x06\xe3\xd4\x59\x71\x1c\xfb\x64\x6e\xdf\xc0\x0b\x16\x15\x5c\x40\x34\x8e\x48\x30\xed\xba\xfe\x73\x18\x6f\xd7\x7c\xfb\xb9\xe9\x5d\x40\xe2\xd7\xe8\xa6\x3b\x05\xea\x9e\x28\x8d\x99\x9a\x49\xc0\x06\x5a\xdd\x38\xcf\x03\x2e\x89\x16\xae\x4c\xcc\xc8\x87\xfd\xe2\xc2\xa2\x02\xe0\xf8\xd1\x5d\x4c\x4a\x54\x06\x08\x5e\xb7\x57\xbc\x5f\xe3\x55\x9e\x02\xcc\x99\x7e\x3c\xa8\x14\xd8\x59\x91\x8a\x6a\xa9\x58\x23\xfa\xc3\x2b\x1d\x38\xb2\x8f\x5d\x60\x9d\x2f\xa2\x01\x29\xfe\x11\x25\x24\x7e\x87\x8b\x45\x96\x16\x98\x37\xe5\xbc\xbd\x73\xc6\xe0\x6f\xaf\xc7\xd6\xd8\xe0\x28\x3d\xf7\xd6\xba\xe7\x54\x7a\xed\xf6\xaf\xb2\x72\xe6\xb3\xc9\x19\x2c\xdb\x73\xc1\x37\x84\x2f\x83\x37\x3e\xe0\x7d\x00\xaf\x11\x7a\x82\x13\xc5\x5e\x4d\x85\x3c\xdf\x20\xbf\x28\x01\x94\xa5\xf4\x93\x6c\xf0\x9d\x70\x1b\xf4\x68\x7c\x45\x76\xc2\x1d\xb0\x7a\x6b\x15\xe5\xfb\x7e\xc3\xbf\xdf\xf0\xff\xbc\x1b\xbe\xda\xef\xa5\x58\x7e\x47\x2a\xb2\x96\xba\x2a\x7a\xe2\xc9\x2d\xb0\x82\xcb\xfa\x43\xc8\x5c\x55\x9d\x26\xe0\xb4\x77\x53\xba\x1e\x4c\x3c\x88\xe2\xd0\x07\xda\x21\x44\x03\x93\x1a\x43\x23\xe4\xb8\x6f\xff\x64\xea\x25\xfd\x91\x19\x6c\xf3\xf6\x33\x65\x06\x77\xa8\xc0\xde\x0a\x28\x29\x17\x80\xb1\xef\x35\x12\xbe\x9c\xcd\x54\x6f\x03\xdc\xdb\xaf\xbf\x6a\xf3\xa9\xe7\x88\x04\xbc\x9c\x75\xab\x13\x8d\x88\x47\x0d\xa2\xf9\x7d\x46\x96\xa3\x65\x16\xe0\x7b\x7f\x1f\x75\xb5\x3e\x75\xd1\x83\x07\x86\x23\x67\xed\xdc\xcc\x9a\x35\xbc\xfd\x5f\xf7\xad\x6d\xb8\xae\x41\x8f\x6b\x68\xd4\x83\xc4\x8a\xed\x1a\xf2\x98\xc7\x68\xcf\xce\x60\x55\x44\xc1\x0a\x4f\xd3\x40\x7b\xfc\xf0\xce\x10\xca\x40\x25\x1a\x35\x2d\x8f\xd0\x5e\xb5\x90\x1e\x65\x40\x2f\xee\x2a\x8a\x1d\xad\xbd\x2f\x9b\xa2\x38\x16\x34\x5c\xa8\x63\xb8\x4e\x1b\x22\xed\x5a\xd6\x54\x49\x4f\x8c\x54\xfc\x55\xd6\x9e\xec\xd5\x71\xfd\xe6\x84\xa2\xbd\x42\x5c\x65\xf6\x75\x4d\x95\xd4\xfe\xc8\xfe\x7c\xc4\xe5\x4c\xa8\x9b\x55\x27\x4d\xaf\x17\x8d\xaa\xd4\x89\xa3\xe6\x50\x08\x50\xaa\xd2\x16\xf3\xca\xb8\x45\xab\x49\x65\xfc\xe6\xee\x66\xd4\xae\xaf\x59\x51\x23\x18\xde\x5d\xcc\x2d\xe3\xbd\x96\x5a\x99\x73\x56\xae\x6d\x94\x3c\xd6\x9c\x3c\x57\x6f\xc5\x3a\x56\x39\x9d\x07\x49\x52\x3b\x5d\x00\xc4\x2f\x7a\x56\x26\x30\xa6\x0a\x6d\xe8\xe0\xea\xd4\x66\x3c\x0a\x74\x95\x6a\x55\xd4\x56\x47\x6e\xd2\x51\x0e\xd8\xfe\x89\x49\x9f\xe2\xb2\xe0\xc6\x2b\xc9\x25\x8a\xf1\x22\xc9\x2e\x71\x2c\x4c\x04\xe1\xf9\xe0\x78\x16\x91\xd4\x7e\xae\x06\xb5\xfd\x98\xe5\xa2\x47\x1e\xdf\x03\xe2\xc0\xea\x23\x49\xb1\x2e\xaf\xa5\x6a\x71\xcd\x70\x91\x7b\x22\x2e\x37\xd4\xb3\xb6\x8a\x16\x75\x83\x07\xd1\x92\xa6\xb0\x54\xe4\x0b\x01\x9b\x21\x92\x8c\xa3\xe6\xfd\x11\xa2\x94\xef\x8b\x87\x65\x90\x3f\x1c\xa2\x8b\x88\x30\x75\x39\x88\x5c\x8b\x52\xa9\x60\xc5\x4d\x99\x39\xef\x7c\x29\xc8\x80\xd1\xaa\x63\xb8\x6f\x7a\x5e\x5e\xc7\xf0\x34\xd9\x68\xdf\xde\x95\xa0\xbf\x1b\x1b\x7b\xe6\xb1\x69\x38\x44\x45\x99\x2d\x98\xae\x96\xa4\x53\x14\x4d\x68\x57\xbe\xd9\x64\x73\x55\xa0\x5e\x49\xe6\x38\x5b\x96\x7d\xe7\xe8\xc8\x10\xf0\x03\xfa\x66\xd3\x7b\x58\x64\xbd\x1f\xd0\xda\x7f\xe6\x95\xab\x98\x0a\x7d\xf4\xe5\xda\x73\xa6\xb3\x11\xc8\x1e\xec\x79\xcf\xa1\x72\x46\xbc\xa7\x4d\x75\xf2\x53\x8e\x81\x25\x63\x82\xfb\x92\x88\xad\x8c\x31\x25\x6c\x70\x12\x3c\xa2\x12\xf3\x32\x8d\x6d\x0c\x74\x7d\x87\x4f\x9c\x68\x0e\x45\xf4\x3f\xc7\x1d\xf1\x8d\x5b\xa5\xcb\x4f\xaf\x59\xfa\x13\x71\xb1\x66\x50\xcd\x14\x97\x1f\x54\x53\xef\x18\xa9\x29\x8e\xa2\x75\xe3\x65\x54\xcc\x74\xa2\x0a\x04\x61\xf6\xfd\x47\x78\x32\xe9\x71\x00\x3f\xb5\x79\x0b\x79\x3b\x08\x21\x8c\x78\x5d\x83\xb1\xb9\x00\xcd\x1e\x41\x9c\x23\x7f\x77\xc4\x5f\x95\xf7\xf6\xc7\xd2\x7b\x7b\xd5\x1f\x99\xf4\x4c\x8a\xbb\xba\x42\xeb\xd0\x62\x6d\x31\x24\x59\xb7\x87\x36\xf5\xbf\x9b\x2c\x01\xfd\xaf\xe5\x72\xb0\x87\x94\xc5\x5a\x88\xe8\x9d\xda\x99\x11\x7f\xc3\xa1\xbc\xe7\x4b\xb2\xa9\x46\xb5\x70\xac\x10\x6c\x7c\xbd\xdb\x6f\x68\x1e\x19\xa2\x9a\xe4\xa8\x15\x53\xdd\xa2\xb2\xe1\x10\xb1\xcd\x4a\x88\x0b\x51\x1a\x23\x7e\x33\x82\xa2\x69\x44\x52\xbe\x72\x2e\x30\x8f\xf0\xd7\xf0\xe7\x97\x3d\xed\x0d\xb0\xa1\x06\x5b\xd6\x71\xb6\xff\x86\x21\x8d\x99\x53\x36\x7e\x29\x48\xb7\x04\xba\x3b\x16\x78\x9c\xa5\x31\xa2\x0c\xb7\xb1\x12\x8d\x74\x9b\x89\x15\x19\x1c\x11\x74\x61\x6d\x3b\xec\xf5\x62\x74\xc7\x1d\xd2\x7d\xb7\x6b\xa2\x04\x3f\xd1\x6a\x9c\xb2\x28\xb3\x1c\xc7\xd2\x8f\x3b\x93\x40\x40\xe3\x33\x8d\x0a\x14\xcd\xe9\x86\x34\xf0\xf2\x6b\xfb\xaf\x92\x7f\xdb\x7f\x1e\xf7\xf2\x77\xd1\xc5\xfa\x1e\x5e\x57\xe6\x56\x71\x0c\xb7\x84\x0d\xa9\x69\x27\xdb\x1e\x28\xb4\x2b\x06\x41\xe8\x3f\x46\xf4\x98\x7d\x29\x7d\x69\x58\x52\x9c\x05\xd6\x70\x68\xb0\x2b\xd5\x0f\x0c\x70\xaa\x8a\x46\xc4\xb8\x5c\x60\x2f\x8a\xb0\x38\xbe\x43\x5a\x34\x22\x68\x9f\x42\x0a\x39\xeb\x21\xd3\x84\x36\x8f\x49\x9d\x90\x52\x14\x69\xa2\x29\x2f\x2e\x6a\x11\x63\x4b\xf1\x85\x4c\x12\x63\x4a\x2f\xaf\x75\x62\xb0\x74\x23\x5b\xc2\xa6\x20\x4a\xfa\x2b\x16\xdd\xae\x29\x6a\xcb\xc1\x86\x64\xc1\x7d\x9d\x08\x45\x71\xec\x94\xf6\x49\xca\x1c\x42\x4a\xcb\xea\xf8\x27\x92\x64\x5b\x6a\xe2\xa1\xd0\x50\x4d\x04\x45\xa9\xef\xfa\x05\xd5\x6c\xd1\xdf\x8a\x1a\xe8\x9f\xfc\xc1\xa4\x6b\x79\x8a\xd4\xe9\xaf\x27\xe8\x20\x90\xb3\xaf\x73\xb0\xe1\x90\xc5\x56\x54\x56\x16\x46\xa5\xca\x56\xe2\xcb\xf5\x1e\x05\x16\x58\x5a\x37\xdb\xe6\x88\xd1\x2a\x86\x33\x6e\x0e\x6f\x71\x80\x90\xf5\x47\x09\x09\x19\x63\xb8\x6a\x50\xf6\x1a\x56\xf8\x3f\x9f\xed\x08\xd8\x7f\x54\x5b\x8c\x20\xc7\x6a\xa4\x18\x2c\xb2\x85\xe1\x60\xce\xec\x5e\x12\x15\x25\x87\x74\xaa\xf6\x77\x87\x11\x52\x8f\x16\x04\xe7\x45\xeb\xf2\xc5\x09\x04\xa2\x85\x74\xbb\x4f\x0a\x85\x0d\x5d\xa2\x0d\x71\xe0\x01\x8b\x4a\xf2\x03\xda\xb4\x6b\xe3\x33\x2d\x68\xff\x40\xac\xe5\x66\x2d\x80\xf8\xbb\x95\x4a\x50\x43\x93\xc5\x2c\x85\x3a\x4d\x9a\xda\xe9\xc3\x5a\x37\xbb\x3c\x58\x44\x97\xd1\x28\xc1\xbe\xee\xb9\xc7\x01\x66\x3f\x55\xe0\x34\x56\x11\xa9\xd2\x2c\x7d\xc4\x2b\xd1\xd1\x61\x6f\x13\xd7\x55\x53\x0f\xbe\xfd\x28\x67\xf4\xab\x60\x7b\x62\xa9\x04\x30\x62\xad\x56\x31\x41\x60\xfb\xb6\xb1\xcf\x2a\xda\x33\x27\xb1\xf2\x46\x50\x3f\xd1\x1a\x3a\x00\x21\xf7\x45\x71\x6a\x6b\x09\x62\x8c\x2e\xa2\x42\x0a\x94\x6b\x26\xae\xd8\xd2\x86\xab\x57\xed\x08\xa3\x0c\xb3\xac\xfb\xd7\x59\x54\xcc\x7c\x48\xa7\xbd\xc6\x79\x5e\x75\x13\xa9\x5f\x39\xfa\xee\x15\xeb\x24\x1e\x2a\x8e\xc6\x31\xbb\xf6\xd2\xb8\x2e\xed\x89\xbf\xad\x8a\x63\x17\xda\x87\x32\x15\xc2\x57\xa5\x84\x38\x21\x79\x51\x56\x0b\x88\x2b\xca\x78\x15\x1a\x10\x9f\xda\xc3\x77\xfd\x6a\x7c\x35\x39\xbe\x84\x48\x9b\x6c\xe0\x4d\xf3\x6c\x35\xd6\x16\xe5\x8d\xa8\x5e\x65\xe8\x7e\x9e\x26\x75\xf2\x0c\x88\xeb\xca\x38\x76\xc5\x26\x48\xcf\xb7\xcf\x99\x5d\x29\x24\xf1\x4f\xc3\x00\xed\xc6\x82\x97\xad\x35\x6b\xd2\xce\x7a\x36\x75\x5e\xd3\xb5\x29\x03\x4d\x64\xfd\xc3\xb5\xe1\xd0\xda\x81\x8d\x0b\x1c\xe5\xf1\x58\x53\x5f\x5a\x95\xf7\xd8\xbe\x3c\x1c\x1a\xae\x74\x2b\xe3\x4e\x8f\xc7\xe0\x15\x37\x63\x81\x9a\x48\x3a\xad\x91\xcd\x4c\x35\xb6\x39\x72\x36\x89\xd7\x2e\x27\xd2\xc5\xa1\x3a\x51\x08\x7d\xd1\xa4\xae\xb6\x12\xd1\x04\xa5\x99\xaa\x81\xb2\xb7\x45\x54\x14\x38\x0e\x68\x15\xca\xf5\x1d\x85\x28\xb4\x25\x6d\xf2\x32\x49\x78\x30\x03\x16\x3a\x0d\x73\x48\x9f\xef\x54\xd3\x66\x15\xad\x2c\x43\x29\x4b\x79\xa5\xad\x2c\x67\x9a\x6b\x49\x08\x56\x03\x21\xc2\x84\x51\x81\xec\x52\x20\x0a\x8c\xf0\x38\x5a\x16\x98\x9e\xc4\xe3\x2c\x2d\xd1\x45\x94\x82\x4d\x52\xb1\xc8\x48\xc2\x6e\xc3\xd3\x12\xe7\x93\x68\x2c\x7d\x63\xb7\x38\x89\xb7\x39\x6d\xdb\xdb\x54\x33\x3f\x44\x8e\x7b\x5d\xb9\xa6\xb5\xb5\xf9\x13\x2e\x99\xb3\x66\xba\x3f\x06\xe8\x62\x46\xc6\x33\x30\x1a\xa0\xcb\xbb\xcc\xf8\x36\x86\x16\xc9\xb2\x68\xbe\x7a\xe5\x7c\xa0\x61\x7e\x15\xf3\xf0\x1b\x32\x35\x88\xb0\xab\xcb\xa9\xb2\x58\xb3\xfc\x78\x1b\xd9\xb1\x5a\x6e\xd4\x8c\x95\x6f\x24\xc7\xd4\xc9\x30\xe6\x4b\x87\x01\x33\x48\x6f\xcf\x7c\x3d\xa7\x1e\xef\x71\xb7\xc5\xf5\x79\x15\x6b\x72\x0e\xc3\xde\x53\x70\xc5\x4b\x16\xdf\x79\xd8\xdd\xfd\x94\x5d\x38\xc3\x9f\xfb\x78\x05\x79\x0e\xd3\x5e\xb3\x25\x8b\x6e\xf7\xa4\xf9\xb3\x69\x2b\xd1\x09\xbf\xad\xb2\x80\x96\x16\x0d\x9d\x70\x7b\xc7\x35\x89\xe6\x23\xef\x84\x3b\x5b\xd7\x67\xc1\xf6\xe3\x7b\xd3\xa7\x7b\xd3\xa7\xbf\xb6\xe9\x93\x66\xeb\xcc\x4d\x20\xef\xc0\xd8\xb9\xc2\x8d\x25\x37\xae\x64\xef\xb2\x8e\x27\xe2\xce\xf9\x20\x9f\x16\x61\x85\xe6\x46\x93\xf1\xf8\x09\x96\x57\xa2\xc7\xbe\x13\xdb\x09\x65\x9f\xa2\x52\xa4\x9b\x38\x01\x9f\x0f\x7c\x7d\x78\xf7\xf6\x90\x31\xf7\xdb\x74\x80\xc5\x5b\x02\x56\x8b\xe1\x01\x63\x99\xa1\x77\x6f\x0f\xf9\x3d\x81\xbf\x03\xfc\x39\x3a\x38\x51\x54\x2d\xcf\xb2\x42\xbf\xfd\x72\x1b\x3f\x3c\x7e\xf3\xe6\xc5\xe1\x87\xa3\xe3\x37\xe8\xc5\xbb\x77\xc7\xef\x42\x74\x28\xd5\xbf\x63\x56\x25\x3b\xd1\xc7\x18\x75\x37\x10\xad\x0f\x6d\x74\x07\xfe\x3e\x28\x8f\x37\x6d\xc7\x2e\xdf\xd9\x33\x25\x42\x49\x57\x0f\x61\x95\xf9\x9b\x10\x86\xb4\x21\xb2\x8d\x82\xb5\x61\xc2\xb3\x34\x5c\x14\xd1\x14\xa3\x7d\xb4\xbe\xce\x5f\x1a\xd2\x6d\x9d\xff\x1e\xb0\x90\xb1\x4e\xca\x40\x14\x7b\x8a\xbc\xc9\x21\x92\xd3\xf5\xf7\xf7\xc7\x6f\x60\x56\x72\xd9\x25\x4f\x98\x55\xde\x37\xe7\x2d\x99\xc2\x01\xaf\xda\x1c\xad\x9a\xcd\x0f\xec\xba\x5a\x1f\xef\xbc\x68\x3b\xa5\x1f\x8e\x5e\xbf\x38\x3e\xf9\x10\x22\x7e\xe9\x4d\x89\x8b\x76\x72\x5e\xa0\x0d\xd4\xa5\xff\x45\xe3\x19\xe5\x18\x5d\x23\xa0\x0d\x77\x23\xf9\xed\xfd\x6e\x75\xbf\x5b\xfd\xb5\x77\x2b\x6d\xb3\x82\x57\x97\x7f\x54\x2b\xdd\xf6\x8f\xd9\x5b\xbd\xa1\xbf\xc3\xa7\xec\xc2\xe7\x10\x5d\xff\xf2\x70\xa6\x47\x64\x2a\x8c\x63\x08\x7f\x63\x0b\x6d\xa9\xc3\x82\x6d\x84\xfc\xb5\xdf\xc1\x2f\x84\x29\xaf\xa6\x48\xd7\xf3\x59\xe8\x0a\x54\xf3\x1c\xb9\xc8\xd2\x7e\xc3\x13\x7a\x2d\x33\xcd\xd2\xcb\x79\xb6\x94\x2d\xca\x84\x8a\xd3\x9b\x40\xda\x14\x0b\x5c\xe1\x98\xc9\x03\x10\xc4\xc0\x09\xd6\xc4\xd3\xe4\xf1\xec\x59\x96\x25\xd7\x10\x5e\x35\x06\x17\xe4\x6c\x93\xc0\x0c\x32\xd6\x66\x07\xde\x87\xe0\xd8\x70\x98\x2e\x4e\x7c\x10\x8c\x80\x2e\x4a\x5e\xfb\x70\xcd\x98\x26\xdd\xfb\x16\x85\x30\x1d\x47\xb1\x7a\xed\x00\x0c\x1a\xf2\xdd\x2b\x11\xe2\x11\x15\xc8\x80\xd7\x04\xf7\x1b\xfc\x77\x85\xb9\xab\xbf\xbc\xb2\x57\xae\xbc\x21\xd6\xb1\xcd\xe8\x33\x66\x2e\xc0\xc1\x8b\x91\x85\xeb\x58\x79\x07\xf7\x46\x0b\xf2\x56\x50\x8d\x3a\xad\xba\x3a\x27\x41\x8c\x12\x5d\x07\xe5\x3d\x45\xaf\xed\x47\x07\x2b\xd4\x33\xb4\x92\xfb\x33\xaf\x19\x97\x5e\xb4\x9e\x1e\x56\x1a\x91\xf0\xa4\x7e\xa3\xe1\x14\x64\x9a\x46\xe5\x32\xb7\x87\xa3\xa7\x57\x8d\x47\x87\xa9\x1e\x8f\x84\xaa\x1b\x10\x38\x30\x68\xdf\x7f\xfe\xc2\x41\x90\x37\xe7\x48\x51\x1a\x4b\xd5\x52\x99\x41\x50\xe2\x09\x49\xa3\xc4\x6f\xf5\xcc\xea\xf0\xd9\x94\xea\xeb\xda\xca\xe2\xd5\x1b\x48\x11\x79\xf8\x1c\xe7\x97\xe5\x8c\x69\xac\xe7\x23\x02\x2c\x23\x63\x51\xa2\xa1\x6f\x3c\xcc\x42\x2d\xb6\x3c\xae\x41\x78\x77\x1c\xcf\x76\x72\x71\xcb\x5f\xda\x23\xc0\x7b\x07\x22\xca\x5d\x87\xf4\xcf\xd1\xe4\x59\x44\xe8\x35\xd7\xad\x9d\xc7\xed\x27\xaf\x9c\x3d\x6c\xe5\xbe\x05\x99\x9f\x4e\x41\xed\xbd\xbe\xab\xd2\xe4\xf3\xf4\x41\x74\xec\xb6\x2c\x5d\x0b\x61\x51\xcb\xcf\xc1\xf1\x32\x0f\xa6\xcd\xcb\x9f\x12\x08\x31\x65\x19\x03\x70\x20\x7d\xfe\x28\xdd\xa8\xe4\x74\x99\x24\x15\x2f\x5c\x94\x66\x11\xb9\x97\xff\xa6\x42\x18\xea\xab\x0a\xcc\x08\x99\xd6\x68\xce\x6b\x6e\xfb\x39\xf6\x9d\xb7\x31\x3d\xb6\x7d\x05\xe8\xdc\xbe\x39\xef\xdb\xb1\xf5\x56\xaa\x0d\xfa\xde\x40\x71\x26\x91\x8c\xb3\x74\x1c\x95\x3d\x63\xf6\xfb\xd5\x7e\x6c\x2a\xb9\x1e\x77\x62\x53\xcd\xf5\xec\xdd\x16\x57\x71\xb8\x98\xdd\x3d\xb8\x3c\x8c\x73\x05\x6e\x38\x04\x27\x04\x56\x4b\x2c\x9b\x7d\xf0\x00\xf4\x0d\x66\x2f\xea\xb7\xe9\x6a\xe7\x3b\x80\x83\x3b\xf4\xbe\x13\xe5\x53\x6b\x75\x29\xf1\xf1\xa9\x51\x32\xd4\xbf\xb8\x67\x9e\x2d\xcd\x13\x0a\x1f\x1f\xbf\x7f\x91\xf5\xda\x2f\xb5\xd8\x64\xa2\x2f\x52\x4a\xd3\xeb\xdb\xee\xef\xd1\x95\xf9\x4b\x46\xd2\x5e\xa7\xe3\x56\x2e\x1f\xc5\x31\x72\x63\x78\xd2\xaf\x37\x40\x36\xec\xd1\x65\xde\x0f\xf4\x1e\xe9\x57\x35\x69\x56\x1e\x19\x7d\x95\x28\xf4\xf8\x1b\x52\xc0\x2d\xdb\x86\x57\x0b\xfd\xc0\x6a\x45\x6f\x5f\x6e\x24\x1a\xd7\xce\x96\xe5\x62\x59\xbe\xca\xa6\x8a\x5d\x73\x5f\x3c\xda\x6a\x11\xce\x7f\x98\x9f\x19\x4d\x2c\x33\xc1\x14\xb7\x86\x31\xd9\x6e\xa0\x18\x0c\xbb\xe5\x32\xf8\x69\x8e\xe3\xe5\x18\x6b\x73\x15\x8d\xc7\x01\xe2\xae\x28\x75\x7e\x12\x8d\xc7\xa7\x3c\x99\xf1\x44\x8a\x14\xfe\x2d\xa8\xfc\xa9\x39\x65\x83\x62\x46\x26\x65\xaf\x8f\x42\x07\xa3\x22\xcb\x51\x5a\x45\xe3\xb1\xd0\x52\x31\x63\x6f\x46\xda\x38\xc1\x25\x16\xe3\x50\x4e\x92\xcc\x74\x46\x55\x37\x60\x19\xda\xfd\x15\x7f\x57\xc2\x97\x36\xdd\xea\x99\x18\x57\xe9\x58\xe1\xae\xe4\x22\xa3\xe1\x7a\xe1\xc7\xe3\xb8\xc1\x96\x7e\xfe\xe8\x1e\x99\xb6\x9b\x3d\x32\xd5\x15\xdf\xaa\xb6\xb1\x33\x2b\x40\x86\x04\x68\xf8\x7e\xb0\xc5\x0e\xdb\xed\x93\x23\x50\xfe\xa1\xfc\x3f\x55\xd2\xb2\x6e\xfa\xdf\xe2\x51\xa3\xf5\xaa\xcd\xfb\xa2\xb1\x96\x1a\xbf\x96\xb3\x29\x0a\x6a\x9e\x5c\xab\x38\xa0\xb0\x2f\x84\x96\x4e\x35\x80\x33\x83\x7a\x7d\x00\xba\xff\x2a\x45\x14\x5e\xd0\x53\xc9\xee\x59\xdb\x67\x95\x03\x30\xac\x26\xbc\x77\xc2\x06\x2e\x35\x8f\x58\x75\x57\xc2\x4d\x7e\xb2\x6e\xe8\x1a\xeb\x49\x1b\x05\xfc\x6d\x7d\x5d\x0e\xfd\xba\xc9\xd7\x8c\x06\x3d\xfa\xbf\xfa\x40\x22\x7a\x0c\x91\xb5\xe1\x10\x7d\x38\x7e\x7e\x1c\xa2\x1c\x33\x83\xac\x00\x15\x19\x37\x9d\x91\x57\x5c\xca\x16\x27\x62\x9a\xae\x01\x2d\x47\xca\x6e\x81\x52\x3c\xc6\x45\x11\xe5\x97\x74\xb1\x40\x04\xec\x82\x92\x5b\x17\xfc\x15\x83\xb7\x68\x74\x91\xe5\x9f\x98\x94\x37\x5f\x26\x25\x59\x24\x5a\x24\x07\x33\x76\x8a\xdf\xbd\xd1\xf0\x21\xf2\xda\x72\x7f\x23\x4c\xb9\x59\x1d\xa6\x19\x83\x68\xde\xb0\x21\x55\x8d\xe1\x98\x6d\x1c\xe6\xc9\x44\x96\x1a\x08\x1c\xf9\x1c\xd8\xac\xd3\xce\x9d\xba\xb0\x67\xbe\xf3\x43\x15\xac\xc5\x4e\x91\x63\xdf\x68\xf6\x93\xfb\x73\xf2\xd5\xd4\x60\x06\xe9\xad\xa7\xf2\x08\xa5\xea\xe7\x04\x6f\x8f\xc9\x01\xf0\x1c\xb9\x59\x8e\x0f\x1b\x2c\x47\x32\x3d\x6e\xd2\x63\x76\xd1\x63\xf9\xc9\x8b\x15\xb8\xb4\x22\xc5\xf8\x7c\x5c\xd5\x1e\xc4\xea\xa7\x9b\xe0\x9a\xf1\x2a\x18\xcf\x90\xab\xe8\x05\xa9\x20\x27\x97\x2b\x0f\x5b\x16\xbc\x83\x81\x23\xcd\x6e\x14\x7f\x1e\x18\xec\x48\x7d\xec\x21\x01\x20\xb8\x10\xfc\xbf\x27\x52\x25\xcb\x61\x3f\x64\xba\xc6\x68\xc4\x4f\x53\x8e\xc4\x9f\xf9\xf3\x6e\x97\x9b\x33\x34\x28\xcf\x44\x15\xfc\xb9\x82\x23\x77\xc2\x1d\xf0\x60\xa4\x3b\x0d\xa7\x8c\xf9\xbb\xfb\x9b\xd1\xfb\x9b\xd1\xbf\xf6\xcd\x28\xbf\x16\xe5\x4f\x7e\xff\x2b\xe2\xeb\xdd\xa9\xc7\x70\x38\x04\x3c\x44\x87\x59\x7a\x8e\x29\x2b\x8a\x78\xc8\x63\x38\x07\xc3\x59\x00\xe2\x16\x8b\x40\x2e\x94\x80\xa3\xa4\xc8\x50\x94\x24\xd9\x45\xc1\xc2\xb3\x83\xa2\xae\x18\xac\xd1\x8a\x84\xe0\xff\x9a\x7c\xc6\xf1\x35\xcb\x5a\x73\xef\x35\xd6\xf8\x8d\x6a\x99\xd9\x41\x8e\xb9\xca\x52\x1e\x38\x7b\xa6\x4a\x14\x5d\x5d\x89\x00\xe9\x2a\xa3\x2b\x75\xa8\xdd\xbe\xad\x0c\x60\x67\x39\x2e\x22\x31\xc5\x2c\xeb\x43\x4f\xe8\x17\x8d\x86\x98\x1e\xe2\x78\x02\xaa\xe6\x3e\xd4\xbe\xe9\xd4\x09\x90\x9c\xef\xeb\x2f\x5a\x8d\x3b\x23\x11\x44\x49\xb6\x03\x47\x2e\x2a\x6a\x52\x4e\x2b\x2e\x7f\x6c\x4b\xd8\x4c\xea\xf7\xf9\x61\x2b\xa0\x93\x70\x8e\x73\x32\x01\xbf\x1e\x39\x1e\x47\x94\xe3\x68\x81\x6a\x1e\x3c\x40\x49\xf4\xeb\x25\x4a\xb2\x28\x46\xf1\x65\x1a\xcd\xc9\x18\x65\x29\x2e\xa0\x35\x3e\x21\xaa\x21\x1e\xcc\x3a\x93\x7a\x02\x80\x12\xf6\xf5\xa2\x71\x07\x8a\xce\xd6\x14\x97\xc7\xf2\x90\xec\xf1\xe0\x4c\x27\x46\x09\xac\x4d\xee\x01\x74\x65\x02\x9f\x12\x71\x4c\xae\xbe\xf5\x30\x34\xfd\x95\x57\x2f\x2c\xbb\xb8\x20\x10\xaf\x44\xeb\x15\x02\x1d\x44\x81\xd9\x09\x3a\x74\x5e\x56\x31\xe1\x7d\x99\x63\xae\x5e\x0c\xe0\x02\x6f\xcc\x56\x07\x3b\x1c\xcf\xf0\x67\x9f\xda\x40\x69\x4d\xad\x04\xcb\x13\x65\x8b\x22\x86\xe6\x93\x87\xd5\xae\x54\xca\x5b\x0a\x7f\x11\x84\xfb\x29\x0f\x4f\x4e\xab\xe2\x8b\xac\x8f\x42\xb1\xde\x38\x98\x2b\x2b\xf9\xae\x09\x3c\xcf\xeb\xa0\x9b\xa1\xd5\xed\xc0\x81\xa3\x4b\x40\x41\xd1\x2f\x17\xa6\xcc\xf4\x7a\xdc\xfc\x48\x44\x65\x16\x40\x91\x1e\x93\xd9\x6e\x0d\xee\xaf\xc2\x95\xae\xb5\x06\xb2\x5c\xdf\xd7\xbb\x9b\xd4\xc8\x4b\x99\xfa\x29\xed\xa0\xc3\x28\xb0\x98\x51\x0a\xf4\x20\xdc\x22\x75\xa1\xaa\x39\x88\x63\xf6\x2c\x42\x2a\xd1\xa2\x34\x46\x05\x2e\x0b\xb4\x5c\x40\x06\x3f\x8d\x00\xcb\x20\x25\xce\xe9\xde\x91\x9d\x73\x61\x8b\xbb\x31\x1d\xac\xad\x69\x4f\x23\x5e\x65\xd3\xe2\xa0\x7c\x5f\x46\x79\xb9\x66\x6b\x1a\x0b\x9c\x4c\x64\xe2\xc4\x7d\xbf\xcc\x59\xb8\x59\x8b\x11\x27\x0c\x27\x13\xc7\x87\x8f\x78\x64\x37\xc5\x25\xd3\x67\xd1\xc2\xd6\x4b\x3b\xd0\x2f\xa8\x61\x16\xd0\x3d\x24\x4e\x9e\x16\xcf\xa0\xad\x0c\x7c\x8c\x03\x32\xa6\xb8\xec\x59\x6f\x7e\xb8\x25\xa3\x73\xca\x19\x0e\x51\x9c\xa5\x5d\xfe\x4a\x94\xf6\x91\xa3\x0d\xcc\x26\xe1\xa2\x5b\x24\x0a\xb3\x23\xf0\x84\x31\x18\x0c\xd0\x2f\x4b\xe6\x08\x98\xb6\x49\x79\xaf\x73\x5e\xae\x78\x18\x59\xf3\x28\xf2\xda\x7e\x01\x6b\xad\x74\x39\x0c\xff\x19\x93\x65\x7a\x0f\xa6\xcc\x90\xb3\xe9\x99\x26\x7b\xbc\x63\x9a\x7d\x1a\xfd\x6b\xf6\xc3\xfa\xf5\x48\x77\x91\x25\x09\x23\x1f\x3f\xd9\x72\xda\x54\x60\x36\x5d\x4a\x95\x08\xa8\x6d\xd3\xd7\xd2\x0c\xd7\x20\x96\xac\x82\x5c\xf8\x8c\x66\xce\x9c\x0a\x23\x0b\x4a\x7a\x62\xac\xbe\x49\xf0\x3d\x9b\xf2\xd1\x44\xd6\xfa\x24\xdf\x96\x3a\x6e\x46\x19\xca\x4c\x19\x86\xa6\x94\xd7\x4f\xad\x04\x55\x49\x28\x0a\xb9\xa4\x73\x2b\xf4\xdc\x8e\x48\x2b\xf5\x01\xd0\x27\xdb\x19\x35\x65\x3c\x6f\xb3\x24\xa1\x7c\x46\xf5\x84\xd1\x60\xc8\x8a\xd0\x73\x1a\x9e\xe3\xb4\x84\x23\xe7\x80\x52\x1c\x0c\x4d\xed\x25\x0b\x6e\x68\x7f\xca\x30\x05\xe4\x78\x14\x9f\x05\xe2\x8a\xca\x48\x0e\x14\x31\xf2\x1c\xdd\x8d\x11\x53\x10\x03\xfd\xd2\xcd\x5a\x44\x2d\x74\x48\xdc\x92\xc9\x02\xe4\x84\xf7\x10\xcb\xcd\x73\x3b\x10\xf0\xd3\xd4\x61\x8e\x61\x4c\x60\xaf\x7d\xe8\x79\xe8\x08\xcc\x8e\x69\xb0\xb5\x0b\x57\x03\x1f\x9a\x86\x6f\x15\x55\x59\xa5\xae\xab\x52\xd9\xe3\x57\xaa\x99\x9d\xd1\x6c\x09\x50\xa5\xc7\xf8\x4a\x6b\x4c\x25\x6c\x2a\x31\xd8\x12\x7d\x35\x68\x07\x0d\x66\x82\x06\x29\x66\xde\x7d\x32\x26\x57\x08\xb7\xac\x91\x19\x7c\xcb\x3d\xac\xca\x57\x6c\xcf\xc9\xd2\xaf\x9d\xe4\xef\xca\x7e\x0f\x52\x7c\xc1\x6f\x9d\x74\x1c\xe8\xbe\xc2\x18\x93\x24\xb1\xe1\x1a\xcf\xcf\x1c\x1b\x96\x7d\x6f\x3c\xf2\x88\xb9\xe3\x51\x23\x1f\x44\x9c\x23\xf3\x73\x61\x0d\xf5\x5a\x0e\x49\x5d\xf6\x52\x53\xd6\xdf\x8d\x7a\xbd\xb3\xb1\xb4\x29\x11\xc4\xae\x1f\x40\xdd\x55\x43\x8e\xe1\x92\x81\x9e\x39\x16\x38\x8d\xc1\xc0\x4d\x4e\x72\x54\x80\xa2\x25\x2d\x28\x85\x4a\x5f\x30\xaa\xa2\x6c\x02\xc0\xb4\x10\x95\x7a\xfa\x4c\xb9\x22\x5b\x5f\xa6\x51\x51\x90\x69\x8a\xe3\x81\xdb\x47\x9b\xa2\x7c\x3c\xd9\x37\x3b\x52\xc6\x1a\x8f\x1a\x26\xc8\xdb\x8c\x6e\x32\xa6\x8d\x44\xd9\x13\xa3\x44\x97\x0e\xa3\x24\xc7\x51\x7c\xa9\xde\xab\x2b\x41\xb1\xb8\x3d\xa5\x99\x82\xac\x90\x5e\x9b\xc6\x45\x26\x3d\xab\x35\xe9\x03\x6e\xd3\xf5\xc8\xa5\x56\x26\xe3\xe2\x3e\xb7\x90\x54\x8a\x2e\x33\x3e\x36\x32\x9f\xe3\x98\x44\x25\x4e\x2e\xed\x66\x39\xb9\x8f\xdb\xd2\xb6\x29\x9d\x40\xf5\xbd\x0a\x4f\x13\x3e\xaf\x55\xba\x26\x9b\xb1\x7c\xba\xfd\xb0\xc1\x68\x77\xb9\x17\x4e\x94\x0e\x7b\x33\x37\x79\x1b\x33\xec\xd3\xfa\x21\xd4\x31\x06\x73\xd4\x47\x63\xcd\x13\xbf\x2e\x75\x07\xa2\xe1\x5a\xbb\x13\xbe\x6e\x3b\x10\x7d\xdf\x6d\x1e\x8f\x23\x39\x64\x0b\x21\x38\x98\x03\x69\xe0\xef\xf0\xb4\x7c\x9e\x9d\x0b\x95\x26\x8a\x8a\xcb\x74\x2c\x0f\x3f\x3e\xc1\xc8\xc7\xb7\x97\x29\xbc\x9d\x36\x10\xa0\xc9\x18\x16\xb6\x1c\xde\xa5\x1b\xc2\xaf\x52\xb3\x21\xf8\x3b\x18\x9d\x5a\x21\xdb\x7d\xce\x13\x1c\x99\xc2\x6b\x72\x22\x4b\xda\x42\xb9\xb5\xa3\x56\xd8\x51\x0e\x87\xe8\x68\xa2\x38\x23\x29\xe4\xbb\xbe\x4b\xcc\xdd\xaf\x20\x52\x22\xe5\xa5\x4b\x95\xbb\x98\x61\x30\xc6\xe0\xa3\xef\x23\xc6\x54\x0b\x44\x4a\x93\xad\x7a\x37\x6a\x87\xd8\xe5\x32\xf3\xed\x1e\x3e\xf4\xf3\x1a\xed\x09\xd5\xf7\x63\x88\x90\xe2\xe1\x6f\x5f\xd1\x3f\x8f\x25\x8f\xe7\xd8\xb6\xde\x4b\xb2\x69\x55\xbb\xc8\x62\x4c\x35\x67\x0b\xa8\x25\xa4\x7b\x42\x85\x3b\x3e\x7f\xc0\x12\x13\xc4\x39\x00\xd8\x03\x6b\x4f\x47\x8e\x9b\x29\x2e\x88\x1f\x3d\x67\x09\x21\xa7\xb1\x5e\x7f\xc0\x76\xe4\x71\x24\x1c\x16\x82\x5b\x15\x1c\x23\xba\xba\x67\x79\x96\x66\xcb\x42\x7a\x2f\xe4\x86\x01\x74\xb7\xb7\x3d\x11\xb1\x6a\xb8\xb0\xdb\xf5\x9a\xd7\x82\x53\x89\x4c\x59\xe9\xb5\x21\x20\xd7\x86\x8e\xd6\xd0\x3c\x87\xb7\x98\xb7\xeb\x06\x7e\xec\x5c\x91\x32\xdc\x3a\xb1\xdf\x6a\x2e\x48\xaf\xcf\x82\x9d\xcd\x36\x57\xa0\xdd\x65\xc1\xf4\xe2\xe3\xb2\xbb\x76\x7f\x21\x7a\x7f\x21\xfa\x27\xbe\x10\x55\x4f\x45\x35\x95\xf5\x4d\xde\x8b\x72\xe0\x15\x6e\x32\x7d\xb1\xdf\x5a\x3f\x31\x4d\x27\x64\xea\x85\x63\x59\x02\xf0\x68\x14\x59\x31\x5d\xc8\x28\x4a\x3d\x71\x5a\x40\x9b\xcc\x02\x4d\x31\x1b\x69\x76\x99\x39\x22\x53\xee\xc1\xc0\xb2\x62\x64\x40\xcf\xc8\xd4\x52\xea\xeb\xd6\x8c\x4c\xe3\x7c\xc5\x20\xae\x24\xec\xb5\xe9\xb4\x4a\xa5\xeb\x96\xb8\xa0\x67\xac\x68\xc3\x90\x8a\x58\xef\xbc\xcf\xd0\xca\x4c\x96\x15\x60\x7b\x52\x09\x44\x8a\xb7\x39\xe6\xd7\xa0\xda\xed\x84\x51\xf7\x48\xa5\x5b\x0d\x8c\xf4\x12\xf4\x20\xc1\xbd\xdf\xa3\xab\x2b\x37\x8f\x9f\x4d\xfd\x99\x38\xca\x13\x42\x8b\x6a\x5d\x4b\x17\xcb\xf2\x39\x9e\x44\xcb\xc4\x7b\x71\xd2\xd4\x47\xba\x23\xdb\xed\xc8\x2b\x5f\x6f\xf4\x16\x4a\x32\x83\x58\x6b\xd1\xe3\x7b\xaa\xfa\x1e\x47\xef\x82\x35\x8a\xdf\xa2\xfb\xf6\x8b\x2e\x26\xa0\xd0\x5a\x2a\xe6\xd8\x68\xd4\x53\xa1\x96\xed\xc1\x83\xa0\xad\x97\xf8\xb3\x67\xe4\x7c\x55\xb1\xc1\x16\x9a\x51\x64\x36\x41\x91\xe1\x1a\x30\x4a\x63\x71\x53\x5a\xc0\x4d\x09\xb3\x0b\xa0\xeb\xee\xe5\x8b\x7f\x5a\xcb\x0d\xea\xa0\x72\xb1\x77\xa1\x09\x5d\xbe\xe1\x62\xd7\x31\x7c\x17\x57\xe4\x42\xdb\xef\xd6\xe9\x0d\xfc\xfd\xc5\xb8\x3c\x86\xeb\x3f\xed\x0a\x16\x3e\xaf\xae\x2c\x1a\x3a\x18\x43\xd8\x05\xcd\xf1\x99\x0e\xef\xf1\xb8\x25\xaa\x85\x3e\x71\x37\x54\xfe\xab\x47\x53\x0e\xd2\xab\x2e\x33\x1e\x2f\x9a\x94\x68\x4e\xa6\x33\x26\x38\x4a\xe7\xc5\x5c\x49\xe5\xb4\x5c\x66\x8d\xed\x96\x99\xd9\xea\x69\x77\x1a\x15\x6f\x73\x32\xc6\xdd\x00\xd1\xdf\xf4\x3f\x98\x3e\xfa\x23\xcd\xd2\x31\xf6\xbd\x4e\xfc\x84\x2f\x6b\xde\x27\x7e\xc2\x97\x6d\x5f\x28\x42\x4d\x0e\x0e\x59\x0d\xfb\x9a\x3d\xc5\x73\x3c\x26\xf3\x28\xe9\xe9\x00\xee\x0b\x31\xf3\x12\xf5\x6b\x13\xb1\xe6\x4a\xf3\xae\x69\xd9\x57\xf5\xdd\x93\xf4\x4d\xa9\xf6\x9e\x5e\x7f\x4b\x7a\xe5\x42\x8c\x43\xb0\x70\x5f\x2a\x62\xff\x70\x6a\xf5\x8a\x36\xad\xe9\xf4\xb3\x29\xce\xf0\xf4\x35\x43\x86\x69\xa4\xcc\xf2\x73\xff\x8b\xd4\xe4\x7d\x1e\xe8\xdb\xdf\xba\x38\x4d\x2b\x0d\x96\x09\x20\x3d\x5a\x64\x02\x7f\x26\x80\x7c\xb3\x41\xd3\x35\x5c\xc0\xeb\x30\x7f\xf5\x0e\x94\xb7\x0d\x1b\x4a\x28\xeb\x3e\x0f\x80\xa4\xfc\x85\x20\x4b\x41\x4e\xa3\xc2\x0f\x37\x8d\x0a\x03\x0a\xc8\x57\x03\x55\xa2\x9d\x96\xaf\x4a\x08\xe3\x35\x2f\xb8\xfe\x54\x56\x9c\xa4\x3f\xaf\x4c\x4a\x22\xca\xcc\x4d\x48\x8a\x07\xbc\xa9\xa5\x2c\x19\x7f\x69\x15\xf2\xb2\x2b\xb6\xdc\xae\xe8\x81\x73\x54\xa0\x9c\x06\x7a\xf3\x41\xb9\x73\xe6\x81\x52\x94\x27\x32\x5b\x90\x5f\x25\x68\x75\x93\x15\x84\x28\xe3\xb9\x2c\xe7\xcb\x24\x2a\xc9\x39\xfe\x29\x2a\x4e\x0a\x78\x97\x56\x55\x95\x03\x6b\xd5\x35\x6d\xac\x61\x2a\xcb\x89\xc1\x9b\xa6\x06\x02\x2e\xc9\xa6\xb6\xe5\x9e\xca\xd0\xa2\xd1\x38\xaa\x25\xd0\x0f\x79\x15\x4b\x9e\xd7\xad\x14\xb6\x49\x8b\xc4\x5b\x6a\xb5\x00\x60\x76\xdb\x93\x3c\x48\xdd\xb5\x54\x0e\x15\xb6\xa0\x71\xb3\x26\xdd\x3e\x05\x6a\x90\x06\x2a\xc3\x21\x92\xae\x7d\xc0\xc7\x1d\x3f\xbd\x22\xc4\x9a\xa2\xf3\xf3\x8a\xcc\x49\xe9\x99\x42\x13\x80\xe3\x4a\x26\x56\xcc\xbb\x91\x6f\x94\x29\xc8\xaf\x3e\x26\xa8\x32\x0d\xe8\x92\xcc\x71\x51\x46\xf3\x45\x65\x11\x09\xa1\xd6\x15\xcb\x48\xab\x56\xae\x91\x5d\x55\xad\x3c\x1a\x6b\x9d\x89\xc9\x64\x42\xc6\xcb\x04\x9e\x67\xb8\x3c\xd4\x06\x32\x07\x92\x95\x51\xf2\xbc\x4d\x05\x16\xa4\x2e\x24\x99\x6b\x86\x83\xab\x65\x6e\xae\x1c\x37\xdb\x15\x41\x48\x89\xe7\x7d\xfb\x61\x96\x63\x1d\x07\x50\xee\x3d\xa4\xb1\xbe\x7c\x9b\x39\x2b\xd8\xb4\xd0\x46\xec\x68\xdd\x62\x99\x25\xd9\xd4\xbb\x9e\xf4\xb5\xed\x5b\x4d\x49\x36\x55\x5a\x14\x77\x49\x41\xbd\xc6\xb2\xd2\x2b\xd4\x17\x95\xa6\xbd\x26\x13\xfa\x65\xf0\x75\x39\x4e\x2b\xc3\x43\x63\x76\xd1\x3d\xbd\x4e\x87\x71\x1b\x15\xb7\xd8\x01\xbc\x95\x18\x4d\x24\xd9\xd4\x53\xb5\x48\xad\xa8\x52\x16\x32\x85\x4e\xd0\xc8\x37\x1f\x90\x2e\x66\xa4\xa0\x7c\x71\x91\x15\xe5\x0d\x4e\x48\x6f\xb3\xa2\x5e\x30\x70\x23\xe9\xd4\xf2\x4f\xb7\x52\x7d\xa2\x69\x27\x75\xe6\x49\xbf\x07\x8b\xe8\x12\xcc\xe3\xf7\x0d\x6d\x87\x9e\xc5\x91\x0c\x49\x65\x99\x78\xc5\x78\x91\xa9\xc3\x5e\x64\xf9\xa7\x0f\xd9\xdb\x3c\x3b\xc7\xd5\x65\x34\x20\xbd\xec\x22\x27\x59\x4e\x34\x8e\xe2\x14\x14\x10\x9a\x83\xf8\x89\x1e\x3f\xc8\x30\x88\x65\xac\x85\x75\x92\x79\xcb\xd0\x79\x8a\x96\x8e\xf6\x8d\xaf\xa7\xe8\x54\xfb\x3c\x43\xa1\xbc\x8d\xbe\x56\xad\x32\x55\x2a\xd3\xaa\x26\x49\x76\x01\xaf\x03\xc4\x31\xb6\xae\xfa\x7a\x6b\x76\x16\x01\x8f\x12\x13\xca\xd2\xe4\x92\xb9\xf5\x2f\x0d\x23\x7b\x61\xe8\xce\x0c\xda\x7d\xef\x33\x84\xb5\x3b\x0a\xed\xb7\x17\xba\x9d\xbb\x7d\xe2\xa2\x7d\x6c\xc5\xbb\xa4\x5a\x1f\xe8\x9f\x1b\x1b\x7a\xb9\x59\x13\xa5\xfb\xc9\xda\x54\x0f\xd7\x13\x36\xa7\x6b\xc0\x2f\xfe\xbc\x20\xf9\xa5\x67\xc5\x6b\xb9\x3a\xb9\x15\xcc\x0b\x88\x17\x9a\xe6\x55\x2d\x01\x0b\xd4\xb3\x00\x80\xb2\x7d\xb2\x84\x05\xd1\xdf\xf3\xad\xca\x77\xd1\x85\x20\x19\x9e\xe2\x05\xd3\xaa\x3f\x28\xc6\x84\xd8\xcb\x57\x94\xd1\x77\xdb\xbf\x17\x1c\x71\x12\x4e\xc5\xd1\x50\xab\x42\x35\x00\x6e\x71\x21\x96\x95\x8f\x39\x0c\x87\xab\xac\x08\x58\x9b\xfa\x6a\xac\x5c\x8c\x6a\xb9\xdd\x62\x25\x59\xda\x5c\x86\xa2\x76\xf4\x2f\x99\xaa\xad\x80\xf1\x05\xbd\xd0\xad\x35\x08\xbb\x8d\x49\xf1\x05\x5c\xcc\xf4\xcc\x90\xc8\xa0\xb1\x1e\x45\xe9\x80\x14\xff\x88\x12\x12\xf7\x20\x64\x01\x4f\x79\x4e\x72\x3c\x2e\x7b\x3e\x75\x35\xf7\x0c\x05\x80\xbc\xc6\x5e\xdf\xd1\x85\xeb\x82\x8e\x8a\x24\x23\x7a\xe0\xa9\xd6\x70\x3e\xe6\xa9\xa8\x45\x15\xbc\x67\x66\x4d\xfc\xda\xd5\x32\x05\xe0\xee\xa1\x05\x6c\x57\x84\x76\x56\x0b\xfd\xfd\x65\x3a\x26\xa9\x5f\x5a\xe1\xfe\x98\xb5\x0b\x84\x75\x33\x09\xb9\xee\x69\x0c\xf1\x0c\x9c\xd9\x80\x2d\x19\x49\xa7\x70\xd4\xf0\x9e\xf0\x5c\x30\xd3\x25\x10\xf7\xce\xd3\x50\x81\x0e\x65\x96\x9f\x91\xe9\x0c\x17\x4d\xe5\x75\x28\x8d\x76\x78\xee\xa7\x34\xbb\x48\xdf\x97\x51\x69\x47\xea\xb7\x73\xab\x1b\xd0\xab\xd8\xb3\x6b\x58\x2c\x93\x04\xc7\x4d\x55\xe8\x50\x15\x87\x4e\xe5\x25\xa8\xc2\x11\x7c\xd3\x3d\x58\xd8\x08\x11\xa8\x7a\x6a\x2a\x68\x28\x69\x5c\x91\x84\x9e\x34\x0d\xd6\x77\x36\x08\xab\xb3\xb4\x92\x36\x2f\x09\xfd\xc9\x5a\x09\x63\xe7\x0b\x3d\x69\x0c\xb6\xea\x16\x35\xac\xcc\xd1\xcb\xf9\x07\x54\x9d\x57\x51\xd6\x56\x4b\x79\xaa\xb0\x41\x8c\xde\x1b\x87\xff\xd0\x9b\xaa\xc3\xeb\xa7\x9a\xd0\x93\xa6\xc3\x5a\x68\xf4\x24\xea\xd0\x36\x17\x0a\x2b\xd2\x19\xf7\x32\x4c\x6f\xd8\x7d\x42\x27\xdc\x7a\x52\xe5\x50\x86\xb2\xf0\x4e\xb8\xb3\x73\x7d\x16\xec\x6c\xdd\x3b\x23\xb8\xb7\xbd\xf9\xaf\xb1\xbd\xe1\x94\x7e\x17\x51\x45\x56\x73\xc1\xde\xd2\xe0\x86\x05\x3d\x31\x2d\x69\x58\xda\x57\xf0\xe5\xde\xde\xfb\x7a\x94\x24\x43\x2b\x3e\x21\x3c\xab\xb4\xa3\x9b\xb8\x3e\xd9\x85\x6d\xb0\x1b\xc8\xa9\xc6\x17\xbb\x2f\x92\xd3\x47\xb6\xb9\x71\x5f\xe1\x7a\x08\xd3\xd5\xfd\x78\xab\x4a\xf9\xee\xa0\xd7\xca\x92\x6e\x57\x2d\x84\x3f\x8b\xe0\x58\x07\x75\x8a\x6f\x1d\x46\x84\x38\xe5\x20\xfc\x53\x87\xb8\x13\x3f\xf2\x74\x7f\xb0\x27\xc3\xf0\x38\x08\xd7\xc0\xea\x25\x8e\x7e\xb2\xc8\xa7\x85\x2e\xeb\xde\x20\x70\xaf\x90\xf1\x55\x94\x33\x78\xce\x0f\xbc\x9e\xbd\x1d\xc9\xa7\x05\x73\x16\xbf\xce\x85\xb7\x76\x1d\xd6\x85\xb1\xda\x4e\xeb\xdd\xfb\xc1\x21\x25\x91\xa3\xc7\x6c\xe3\x8f\xd4\xdc\xc1\xf9\xc7\x66\x3f\x41\xaf\x11\x13\x7b\x0a\x0f\x2d\x11\x51\x17\x99\x4d\x8f\x25\xeb\x0b\x3f\x44\x0a\x34\xce\xf2\xdc\xf5\x0c\x08\x27\xa0\xa8\xc4\x07\xf9\xb4\xf0\x05\x6b\x53\xd1\xa2\x1f\xa2\xbf\xc1\x09\xaa\x40\x5f\xe0\xfc\x74\x4d\xdb\x23\x25\x37\xcd\x37\x9c\x07\x7a\xa6\x4a\x6f\xa7\x72\x8e\xd4\x21\x97\x41\x01\x8a\x1c\x13\x81\x48\x21\x9e\x9e\xf1\x99\x3d\x37\x28\x84\x0c\xaf\x1c\xb0\x79\x82\x2f\x38\x15\x84\x89\x6e\xb5\x11\xbc\xe0\xca\xa3\x4b\xf1\x1e\x89\xcf\xdd\x7a\xcf\x89\xe1\x17\xf5\xa5\x67\x69\x7a\x2e\x76\x54\xf4\xd6\x8d\x01\x07\x67\x5e\x62\x6b\xe1\xd5\xa5\x84\x51\xc6\x2a\x60\x3d\x86\x84\xb3\xba\xc0\x8e\x20\xc4\xf5\xfd\xfd\x2a\x42\x36\x1f\xa0\xd0\xb3\x2f\x0f\xa3\x55\x13\xec\xaa\xe7\xbc\x0b\xaf\xf3\xa4\x2a\x94\x32\x60\x92\xa2\x93\x8a\x11\x0b\x20\x7b\xcb\xc0\x3c\xe4\xe5\x6c\x1a\xca\x83\x72\x85\x57\xd5\x28\x91\xad\x2a\x0b\x9d\x5a\xca\x93\xed\xd7\x92\x9d\x11\x3d\x72\x75\x86\xb1\x2a\xbf\x30\x83\x3e\x56\x44\x95\xbc\x56\xdc\x5c\x5f\x3e\x3d\x4f\x88\xc7\x32\xf3\x3b\x70\x37\x42\x40\xee\xa3\x0a\xe7\xec\x3e\x1f\xdf\xfc\xf9\x81\x36\x5c\x23\xb6\x64\x8d\x49\x4c\x45\xf0\x11\x81\xfa\x9b\x05\x59\xf0\x16\xaf\x9d\xf7\x1b\x85\x5a\xe0\x5e\xa2\x37\x03\xf4\x44\x68\x83\x6a\x9a\x58\xa6\x8b\x68\xfc\xe9\x98\xe9\xa1\x0d\xa3\x2f\x48\x32\x74\x43\x66\x92\xea\x82\xe9\x2d\x47\x54\xc5\x7e\x48\xd2\xdb\x47\xdb\xe8\xa9\x48\x14\x8e\xac\x91\x38\x07\xaa\x97\xdd\xd2\xfd\x74\x95\x1f\x6b\x5d\xc8\x09\x78\x71\x73\x46\xb9\x2e\x45\xf7\xc2\x2b\x43\x98\x9d\x6e\x9e\xa1\xd0\xe7\x6b\xf9\x10\x22\xf8\x46\x5a\xd0\x64\x81\x2c\x3b\x2c\x73\x94\x24\xfa\xe2\x1e\x0c\x06\x62\x7d\x1f\xda\x65\xad\xcd\xc7\xf1\x72\x72\xc4\xb6\x3b\x88\xce\x2a\x40\xe9\x6e\x14\xc9\x1a\x02\x33\xfa\xba\x48\x66\x2e\xbd\xe0\x09\x99\x38\x74\x45\xc6\x23\x9f\x28\x8d\x4d\x57\x18\x02\x8c\x85\x2f\x66\x27\x23\x5a\x07\x8b\xfd\x46\xc1\x39\xda\xbc\xb4\xcb\x67\x15\xc2\xaf\x36\x51\x2d\xf4\xaa\x2a\xc4\xed\x2a\xf1\x6b\xfd\xfb\xa6\x90\xc1\x2c\x23\x3a\xb9\xc7\xc0\x41\x46\xc9\x7f\xdc\xf3\xad\x21\x16\xea\xec\x07\xbc\xf7\x9a\xd2\x97\x5e\x44\x17\x7f\xec\x62\x4a\xa1\xcf\x3c\xee\x0a\x2e\x2d\xe0\xd4\xb5\xfc\xba\xef\x45\xa5\xd2\xd1\x4a\xc6\x87\xcb\x19\x43\x02\xaf\x3a\x30\xba\xe6\xbe\x9f\x82\x52\xfa\x12\xee\x19\xeb\x41\xf3\x19\xed\xbc\x78\x6c\xd3\x60\xe0\xfa\x29\x71\x79\x80\xe6\xa5\x44\x18\xc6\x1b\x6f\xd9\x03\x66\x5c\xb1\x67\xfa\x86\x65\x9d\xc6\xb1\xe3\x07\xbb\xcc\x2f\xad\xe7\x5f\x1a\x28\xbc\xf8\xaa\x1e\x2f\x32\x9e\xa8\x8d\xe1\x8d\x70\xcf\xf1\x34\xc2\x28\x7e\x1f\x61\xaf\x8f\x13\xbb\xf3\xa2\x75\x4d\x92\xa9\xdd\x28\xda\x9c\x2b\xed\x6d\xc3\x2c\xd2\xb8\x2b\x58\x2d\xfc\xa9\x96\x5a\xe3\x9a\x11\x24\xc5\x01\xb9\x45\xe2\x0f\x68\x13\x0e\x35\xc6\x59\xd3\x95\x0e\xf5\xc0\x8f\x51\xca\x9e\xdb\xa6\x31\x77\xc9\x07\x91\x3b\xd3\x47\xe2\xa0\xea\x84\x30\x6d\x58\xae\x46\xd8\x2e\xba\x6e\xac\x79\xe8\x99\xb7\x78\xbc\xba\x46\xf0\xf6\xfe\xd2\x71\x51\x92\x79\x54\xe2\x9f\x22\x50\x20\x36\x51\x95\x06\xde\x44\x51\x7a\xcd\x77\x41\x4d\x5f\x9f\x3a\xda\xcd\x90\x36\xae\xa6\xd9\xf1\x80\x56\xcd\xcc\x3b\xd1\x0c\x16\x11\xa0\x58\xcc\x78\xae\x0b\xe4\xf2\x81\x3f\x3a\xbc\xbb\xb3\xda\xd5\x34\xcd\x55\x53\x0c\xf9\x9b\xcd\x53\x2b\xc4\x8b\x1b\x5d\xbe\x32\x6b\x02\xae\x7b\xa5\xe6\x5b\xc4\x91\xd3\x8b\x0a\x3c\x6b\x64\x5f\x8b\xb0\xdf\x36\xa8\x9c\xac\xff\x46\x71\xe5\x64\xa1\x55\x07\xf9\x35\x83\xcc\x29\x1d\x0d\x1d\x60\xbe\x18\x0b\xef\x45\x05\x3b\x35\x37\x31\x22\x0e\x5d\x6d\x95\x52\x33\x2e\x5e\xf6\x8f\xcd\x95\x90\x11\x6c\x43\x80\xe9\x62\x8a\x11\x33\x42\x9f\x13\xd7\xdd\x97\xa5\x71\x7d\x0a\x3e\x44\x3f\xd2\x1e\x77\x51\xc8\x3e\xac\x9d\xa4\x1b\x38\xc2\x4b\xa8\xdc\x6c\xc9\x3c\xe9\x20\x8c\x0f\xe7\x4c\x65\xb1\x8e\x0b\xf7\x93\x8c\x41\x36\x12\x83\x88\x8e\x51\xb5\xfd\xc8\xb8\x33\xf5\x5b\x8f\x27\x44\x8c\x3e\xc1\xa5\x21\xe8\xac\x9b\xd8\x51\xd6\x38\xb0\xcd\x97\xba\x0c\x25\x5c\x2c\xa8\xb4\xaa\xad\xc2\x42\xe7\x20\x5a\x2c\x92\x4b\xee\xf0\xa5\x15\x61\xf5\x6d\x33\x36\xb6\x05\x58\xcd\xd0\xc4\x1b\xd5\xdd\x30\x0f\x3c\x8c\x8a\x62\x3c\x2a\x92\xca\xad\x43\xa8\x78\x26\xec\x6b\x45\x51\x11\xe9\x6a\xc5\xeb\x1e\x6f\x2a\xc1\xf9\x61\x53\x61\xb8\x0a\xd0\x95\x9a\xbd\x93\x5f\x55\xdc\x14\x91\xd8\x48\x54\x52\x65\x31\xb5\x5b\x0b\x4f\x2d\xf4\xf3\x4f\x19\x42\x46\x94\x05\x02\x27\xf9\x78\x99\x44\xf9\xfa\xfa\xfa\x7a\x7d\xe0\x18\x41\x41\x7b\x77\x12\x3a\x86\x69\x7f\x3b\xe1\xf6\x63\xbf\x1f\x8e\xed\xfb\xdb\xff\xfb\xdb\xff\xbf\xf6\xed\x3f\xbf\xfa\xa7\xb0\x22\xb4\x8f\x3f\x20\xc1\xef\x16\x6a\xc0\x67\x59\x50\x6f\x08\xb0\x36\x1c\x42\xe8\xa2\x28\xa7\xa4\x4c\x77\xb0\x65\x61\x0e\x91\x12\x5c\x4c\x26\x13\x9c\xe3\xb4\x44\x38\x3d\x2f\xa0\xd0\x28\xcf\x2e\x0a\x9c\xaf\x69\x7e\x19\x2f\x48\x1a\x67\x17\xa0\xb1\xd0\x1c\xf6\xa3\x07\x0f\x78\xce\xe0\x9f\xaf\x5f\xbd\x2c\xcb\x05\x77\xf9\xc9\xb8\xa6\x99\x86\xf6\xfd\xb0\xc0\xfa\xb8\xbf\x79\x32\x4d\x33\xca\x08\x12\x92\x62\xda\x93\x34\x8b\xf1\x9a\xe6\xe4\xc9\xa9\x51\x0e\xfc\xf3\x3c\xa1\x23\xe3\x1b\x5b\xb7\xdf\xb6\x91\x6b\x86\xc9\x7f\xbe\x7c\xb7\x6d\x54\x37\xcb\xb7\xbb\xfd\xca\x52\x42\x72\xa0\x2d\xbc\x15\xc8\x74\x4d\x22\x40\x7e\xa2\xa2\x3d\x78\x39\x64\x3e\x91\x69\x2f\xa5\x01\x84\x51\x5e\xdf\xf2\x67\x59\x51\x06\xa8\x24\x73\x9c\x2d\xcb\x80\x56\x98\x07\xa0\x64\xbe\xc8\x72\xee\x76\x02\x36\x13\x0a\x87\xf6\x11\xfc\x77\x75\x85\xba\x9c\xd8\x93\x6c\x1c\x25\x34\x31\x7c\xf2\xcd\xee\x37\x10\x1f\x94\xed\x3d\xac\x42\xba\x13\xf2\x5f\x57\x57\x68\x53\x66\xd3\x66\xd0\x3e\xb4\x26\xd3\x44\xa3\x68\x5f\xb6\xdf\x28\x3c\x2d\x72\xbc\x80\x80\x5b\xf8\xc2\x9a\x32\x4b\x76\xe2\x80\xef\xb4\xb3\x8c\x16\x5e\x1e\x47\xe9\x35\xdc\xb1\xb2\xf8\xf2\x6c\xce\x15\x96\xb9\x77\x3d\xed\xc0\x67\xb6\x65\xb8\x70\xd1\x31\xad\xc9\x5d\x66\x07\xcc\x8b\x40\x5a\x3d\x43\x35\xbb\x41\x61\x84\x44\x79\x18\xdc\x00\xaa\x6c\x84\x94\x78\x05\x43\x7e\xf9\x6e\x5b\x85\xe7\x64\x92\x96\x86\x79\x6d\x22\x28\x8c\xe1\xc3\xcc\xaa\xc8\x18\x0f\xab\x12\xe4\x61\x51\x6b\xb6\xc0\x69\xaf\xfb\xf6\xf8\xfd\x07\x11\x51\x90\x11\x0e\xeb\xdc\xde\x9a\xe6\x10\x0d\xe6\xf6\xc1\x03\x73\x52\x8d\x43\xdf\x12\x0c\x6a\xba\xcf\xa2\x82\x8c\x51\x17\x6d\x40\x17\x9e\x2d\x29\x7b\xd0\xaa\xd8\x40\xdd\x50\x5e\x15\xca\x7a\x06\x65\xc6\x1f\xad\x75\x47\x51\x81\x1f\xef\x76\xad\xf1\x2b\x77\xc0\x2f\x71\x14\xe3\xbc\xd7\x3d\x00\xbe\x4a\x7e\x8d\xd8\x69\x0b\xda\x67\x23\xac\x29\x44\xe5\x63\x9c\x96\x8f\xe8\x41\xbb\x1b\xa0\x2e\x95\xfc\xc9\x18\xaa\x18\xfe\x52\x08\xb5\xa3\xbc\xb1\xe2\x53\xd6\x40\xae\x2c\x70\xc4\x65\x3a\xd6\x0e\xd5\xb6\x26\xd9\x77\xf1\xbc\xd0\xae\xaf\xfd\x21\x82\xeb\x48\xaf\xb0\x43\xc6\x09\x5d\x9a\x4d\x72\x82\x66\x4c\x5a\xe5\x31\x67\x81\x1e\x95\x76\x5f\x61\x2e\x8d\x7b\xf0\x20\x82\x05\x03\x21\x93\x4b\x59\x3f\x47\xb2\x50\xe4\xeb\xde\x7e\x7d\xd6\x00\x87\x59\x9a\x62\xfe\x6c\x41\x50\x98\xa2\x44\xe3\x72\x51\xb4\x2e\xfc\xee\x7f\xc0\x9f\x4b\xa7\x83\x1c\x56\x7b\xad\xc1\xad\xe3\xcd\x6e\xd5\x75\xe9\x1d\xaf\xbf\xe7\x6b\x50\x5f\x25\xed\x43\xc0\x02\x0d\x44\x0d\x44\x70\x20\x39\x4e\x0d\x25\xf0\xac\x1f\x9d\xa0\x0b\xa8\xcc\xc9\x74\x8a\x73\x16\x29\x86\xce\x3e\x88\x2d\xd2\xed\x23\xc5\x41\x13\xc1\x40\x0f\x7c\x54\x63\x06\x7c\x6d\x43\x3f\x60\xbc\xb2\x67\x70\x93\x14\x5c\xf4\x16\x65\x54\xe2\xf1\x2c\x4a\xa7\x7e\x05\x02\x33\xef\x17\x88\x8f\xe2\x4b\x30\xac\x87\x1b\xe1\x5d\xca\x61\x6c\x96\xb7\x6e\x06\x6c\x6d\x41\x31\x0a\x50\xdc\x2a\x69\x91\x80\xec\xcb\xac\x06\x8a\x82\x33\x99\xf7\xd6\x4a\xde\x58\xad\x48\x5b\x48\xbf\xda\xb2\x2f\xb6\x8c\x96\xe9\x59\xf0\xda\x42\xb1\xda\x08\x5c\xcc\x9a\x95\x15\x03\xb5\xf4\x3e\xb0\x52\x3d\x7d\xf3\xe0\x0b\xf9\x6e\x39\x80\xdd\x85\x3a\x26\xc0\x57\x9a\xbe\xae\xd4\x65\x79\x72\x49\xe9\x9d\xbd\x2d\x85\xc5\x45\xa9\xba\x62\x6d\x91\x82\xd7\x8f\x4d\x66\x2a\x85\x00\xa1\xe0\xb4\x85\x01\x7a\x7e\x48\xbb\x25\x9a\x44\x24\xc1\xf1\x00\x1d\xd3\x73\xda\x05\xa1\x67\x8f\x08\x82\x3b\x55\xaf\x26\xad\x4d\xcf\x5c\x28\x7c\x4a\x7d\x86\x0c\x22\x40\xe2\x10\x7d\x27\xff\x84\xbe\x8f\xee\x3e\xf9\x62\x1c\xa2\xee\xf6\x60\x53\x2a\x0f\x85\xfe\xb1\x9b\xe2\xf2\x63\x42\x8a\x12\xa7\x24\x9d\xca\x6c\xa9\x3d\x3c\x33\x0c\xba\x84\x82\x2b\x67\x91\xaa\x5c\xf2\x15\x56\x85\x74\x90\x6a\x12\x1c\x75\x81\x3e\x74\xa1\x2a\x30\x4e\xfb\x54\xcc\xed\x84\x4f\xe8\x2f\x43\x7e\xee\x84\x5b\xdf\xd2\x93\xff\xce\xfd\xc9\xff\xfe\xe4\xff\x17\x3f\xf9\x2b\xc3\x7f\x78\xb4\x78\x47\x46\xff\xd2\x90\x53\x3f\x55\x8e\xc8\x94\xd9\xe0\x0e\x7e\x61\x27\x74\x76\x0f\x12\xbf\xc2\x13\x73\x43\x90\x21\xfb\x2e\xb5\x87\x73\xc6\xc6\xc9\x20\x18\xbb\xb8\x98\xd1\xde\xf7\x4c\x03\xad\xef\x59\x61\xf4\x10\x6d\xbb\x2f\xef\xc0\xe2\x8f\x4a\xf1\xe6\xfb\x43\x54\x1b\x37\xff\x2d\x3f\xd5\x45\x29\x3a\x7a\x76\xf0\x86\x4f\x72\x8c\xbe\xfb\x16\x8d\xb3\xf9\x62\xc9\xc3\x65\x8c\x2e\xd1\x3c\x3b\x27\xe9\x54\x0b\x0a\xb5\x8b\xc6\xb3\x28\x87\xbd\x80\xdd\xcc\xc6\xcc\x94\x4a\x98\xab\x0b\xe8\x04\xb3\x47\x0b\x65\x46\x1b\x64\xb8\x2a\x50\xef\x00\xed\xa3\xad\xcd\x00\x3d\xa3\xff\x6f\x05\x68\x30\x18\x04\xe8\xff\xd0\x3e\xda\xf9\xa6\x4f\x0f\x3b\xa8\x58\xe0\x31\x99\x10\xb6\x90\x8e\xde\x1f\x6f\xed\x3c\xde\x7a\x6c\x9b\x98\x91\x22\x83\x74\x3e\x0e\xd7\x39\xe8\x35\x7b\x13\x4b\x3b\x42\x07\x68\x5e\xad\xe9\x37\xcb\x5c\x92\x8a\x05\x18\x77\x6d\x60\xd6\x6f\xc6\xe7\x1f\x45\xa9\x3e\x8f\x74\x44\xdd\x83\xee\x80\xa2\xe5\x30\x8b\xf1\x41\xd9\xdb\xd4\xb4\xd6\x74\x6c\xdd\xff\x73\xb2\x19\x03\x64\xef\x76\x81\x58\xcb\xec\x64\xb1\xc0\xf9\x61\x54\x28\x55\xb6\x96\x5d\x2c\x47\x45\x99\xf7\x76\xfb\xe2\x45\x2e\x4f\xd8\x0c\x76\xad\x1b\x33\x96\xbb\x48\x48\xd9\xeb\x76\xfb\xe6\x63\xe5\xb4\x6f\x5a\x57\x8d\xb3\x98\x0e\x2e\xf5\x75\x5e\xc8\x87\x00\xf3\xc3\x3e\x3a\xa0\x02\x21\x7c\x7c\xbf\x8f\xfe\xaf\xef\xb8\x72\xf7\xcc\x2c\x9f\x58\x03\x52\xfa\x06\x8d\x31\x7a\x84\x0e\xd0\x06\xda\xda\xd4\xec\x8c\x7c\xee\xcd\x45\x08\x49\xdb\x86\xe9\xba\x3f\xf8\x25\x23\x29\x1d\xa6\x6d\xa9\x38\x5e\x82\xe3\x54\x98\xe2\xd7\xc7\xcf\x29\x61\x6f\x6d\x0a\xa6\xc4\x2d\xfc\x80\xf2\x3d\x14\xf7\xed\xe6\xe3\x5d\x9b\xe0\xe6\x59\xfc\xdd\xb7\x5b\x9b\x55\x84\x66\xd2\x97\x72\x47\xcb\xa8\x89\x17\xae\xa5\xa2\x1c\xcf\x23\x92\x32\xdd\x11\xcd\x53\x77\x8f\xdc\xb9\x8b\xc9\x1e\x38\xb0\xb2\x5b\xde\xee\x5b\x6e\x6b\x80\x59\x09\x30\x69\xf1\xfa\x9d\x61\x22\xa7\x9a\x04\x59\xfb\x28\x2d\x99\x47\x9c\x00\x6d\x6d\xf6\xd1\xff\x9f\x62\x6d\xc3\xa9\x85\x39\xc5\xe1\xe6\xe7\xbe\x17\xb8\xb2\x2e\x59\x52\xd5\x67\xcc\x53\xf3\x3b\x24\x66\x82\x0e\xeb\x80\x1b\xfc\xc3\x85\x3a\x24\xf0\xb7\x0e\x9c\x7d\x8a\xf9\xf2\x4f\xce\x50\x77\x5a\xec\x9f\x04\x6e\x09\xad\x96\x9c\xdb\x55\x27\x58\x68\x53\x3f\x31\xc4\x92\x59\xce\xc5\xeb\x1c\x8b\xa8\x28\xcc\x81\xcc\x71\xfa\x1e\x69\x59\x42\x8c\xa6\x43\xb8\x96\x6c\x4d\xd7\x8a\xd1\x9c\x81\x56\x63\x93\xcf\x80\xa8\x78\x26\x7c\x06\x68\x2f\x15\x78\x50\x47\xb4\xf5\x58\x63\x61\xa3\xa8\xc0\x3b\x8f\xd1\x3e\x94\x51\xea\xa1\x9d\xc7\x86\x09\x40\x1c\x63\xa6\x59\x84\x3d\xb0\xc7\x0a\x05\x68\xeb\x1b\x53\x12\x96\xfd\x7c\x36\x8a\xd2\x1e\x2b\x66\x32\x3f\x6b\x31\x73\xb7\x24\xda\xc2\x7d\x46\x87\x5e\x66\xc6\xee\x45\xa7\x0f\x81\x27\xcd\xfc\x52\xac\x68\xa6\x4c\x02\x7b\xdd\xb7\xcc\xa5\x7f\x9a\x95\x5c\x28\xfb\x9e\xfc\xd0\x99\x82\x44\xc2\xdc\xdd\x4c\x14\x52\x8b\x59\xc4\xa4\x35\xd8\xdf\x3e\x8f\x93\x65\x41\xce\x65\x04\x42\x32\x22\x09\x29\xa5\x80\x33\x8a\xd2\x4f\xc3\x51\x1e\xa5\xe3\x19\x2a\x70\x7e\x4e\xc6\x62\x03\x8c\x98\x63\xcf\xce\xf7\x43\xf2\xc3\xc0\xa6\x21\x19\x0d\xa0\x10\xbb\xd0\x04\xe7\x74\x1b\x8a\x92\x69\x96\x93\x72\x36\x47\x31\x2e\xc6\x39\x19\x31\xb6\xc4\xe5\x1f\x9c\x0e\x2e\xc8\x27\xb2\xc0\x31\x89\x40\x08\xa2\x5f\xc3\xa3\xb4\xc4\x79\x1a\xb1\xa7\x13\x1f\x9f\x45\xe9\xa7\x8f\xdc\xab\xe8\x47\x36\xaf\xff\xbf\x9f\xf8\x48\xd3\xe9\x47\x3a\xc4\x8f\xf0\x96\xe8\x63\x4c\xa6\xc4\x79\xca\x21\xa6\xc6\x47\x91\x23\xb1\xa7\x8a\x19\x10\x3e\x63\xca\xcc\xb3\xcd\xb6\xa0\xd5\x67\xf6\x8a\x1c\x59\x6c\x91\xcf\xe8\x21\xdb\xa7\xba\xff\x7c\xd1\xdd\x5b\xf3\xf2\x4c\xce\x63\x7b\xd6\xce\xdd\xd3\x2b\xd8\x40\xdd\x4d\x10\x95\xa0\x15\xdd\xdc\x85\xa2\xe3\x39\xc5\x06\xda\x47\x3d\x26\x4e\xf5\xbe\x7b\x82\x1e\xa9\x26\xfa\xe2\xd9\xc0\xa3\x6d\x6b\xbf\x95\x5e\x37\xcc\xa6\xb4\x3a\x79\x83\x0d\x6a\x2b\xce\x44\x34\x5c\x01\x61\xb3\x38\xd0\x24\x2d\x4a\x52\x2e\x4b\xe1\x1b\x97\xc4\x38\x2d\xe9\xa6\x65\xfb\x4f\x67\xb5\x1c\xa5\x31\xc9\xb1\x69\xc0\x60\xbe\xb1\x29\x02\x21\xcb\xca\x47\x36\xf0\x6a\xaa\xa3\xb5\xd4\x81\xa6\x3a\xaa\xad\xce\x2a\xbc\xc8\xec\x89\xd7\x5f\xae\x79\x04\x36\x39\x43\xf7\xc5\x87\x97\x74\x1e\xc4\xeb\x16\x1d\x03\x5a\xaa\xec\x5b\xdf\xe2\xd7\x59\x1d\xbf\x16\x4f\xe9\x18\x72\x79\x90\x65\x52\xb0\x97\x72\x3a\x1f\x77\xe4\x4e\xf0\xa0\x52\x29\x6f\xca\xbd\xc8\xa3\xf8\x10\x0a\x0f\xf6\x9c\x8e\xb5\x24\x85\xce\x23\xcd\x3f\x4b\xad\x9c\x40\x74\x3f\x2f\x84\x91\x95\x2e\xfc\x29\x27\x2f\x8d\xba\x72\x89\x05\xe8\x7a\xe5\xeb\x41\x7d\xcc\xca\xb9\xbe\x77\x54\x01\xca\x3c\x5a\x1b\x18\x9b\xae\xad\x71\x47\x69\x51\xc2\xf0\x3f\xff\x7c\x71\xba\xf9\xe8\xbb\xb3\x2f\xdb\xd7\xbd\x17\x1f\x5e\xd2\xdf\x07\x8f\xfe\xef\xec\xcb\xd6\xce\xf5\x95\xfc\xd8\xd9\x0c\x76\xb6\xae\xfb\xff\x33\x1c\x94\xa0\x04\x95\x1b\xb8\xf1\x2e\xaf\x8a\x31\x68\xe0\xec\x79\xde\xd6\x8a\x08\xe3\x4f\x30\xe1\xf4\xef\x45\xdb\x73\xb5\x04\xef\x06\x6f\xcf\xdd\x95\x64\x21\x4e\x0d\x4a\x7f\xdc\xb3\xb3\x0b\xe1\xda\xfd\x79\xdf\xdc\x70\xd8\x13\x44\xd2\x8a\x81\x1b\xdc\xe7\x6e\x86\xee\x65\x23\xad\x06\xbf\xbd\xd9\xca\x6a\x93\x89\x94\x74\xa4\xc5\x72\x4e\x01\x4f\x0a\x7e\x7c\x98\x67\xf1\xa3\xef\xbe\x7d\xb4\xb5\x29\xb3\xe1\x8c\x0b\xbd\x1b\x67\x09\xea\x1d\xbd\x3f\x1e\x1e\xbd\x38\x44\xf4\xdc\x10\x6e\x6f\x6e\xee\xf4\x6d\x9e\xac\x55\xeb\x9e\x42\xb5\x5c\x67\xe0\x22\xaf\xe5\xb0\xf9\x99\x70\x3b\x40\xdb\xed\x6c\x55\x75\xa6\x6a\x6c\x29\x08\x4f\x07\xe8\x9f\xef\x5e\xfc\xe4\x38\x12\x94\x05\xfc\xa3\xa9\xac\xd1\x9d\x54\x0d\xb2\x69\x78\x8a\x00\x7a\xe0\x65\xce\x19\xf2\xb7\x01\xda\xed\xa3\x10\x75\xbb\xad\xc6\x3d\x4e\x08\x3c\x24\x93\x1d\x04\xe5\x13\x49\xed\xf1\x51\x2c\xfc\x74\xf0\x8f\xe3\x1f\xff\x75\xfc\xee\x7f\xed\x59\x85\x3a\x2a\xe6\xd4\xae\xdf\x3b\xb9\x0c\xe8\xd6\x63\xdf\xda\x5a\x7d\xe4\x7c\x35\xf9\xcf\x25\xee\xc1\xc3\x1d\x9a\x53\x81\x33\xbc\xc8\x73\x0e\xd1\xef\x9d\xf8\xe0\x7c\x0e\xc8\x8c\x43\x87\x3b\xe0\x5d\xed\x10\x5b\x79\x94\x11\xe7\x0f\x79\x4a\x31\x4e\xa8\xec\x8c\x62\x9e\x67\xb6\x1e\xf7\x03\xb4\xbd\x29\x5d\x9c\x19\x52\x9e\x40\xaf\x35\x48\x51\xb8\xdd\x02\xad\xf0\x4a\x75\x04\x59\x4c\xa9\xaf\xeb\x15\x3b\xa1\xf9\x79\x7d\x16\xec\xec\xde\xab\xf1\xef\xd5\xf8\x7f\x71\x35\x3e\x57\xe1\x2f\xc6\xf5\xf6\x7b\xb7\xb0\xb8\xeb\xa8\x48\x73\x9d\xbd\x95\x22\x64\x35\xd8\xe9\x31\x3d\xd3\x62\xec\xb5\x04\x5b\x44\xe5\x2c\x40\x29\x36\xac\xbf\x3f\x82\xe6\xc2\x79\x78\x2a\xae\xaa\xf5\x18\xbd\xc2\x6b\x01\xb7\xd7\x01\x1b\x1f\xfa\x1f\x4b\x55\x59\x63\x79\xc3\x0b\x5c\xb1\x14\x09\xbd\x2f\x14\x3a\x54\xe5\xa5\x2b\x4a\xab\xd8\x20\x4b\x7b\x5d\x18\x55\x57\x8f\x69\xd9\x37\xec\xa7\x8b\x8c\x32\x31\xf6\x96\xf0\xe8\xed\x21\x52\xf7\xca\xec\x85\x61\x37\x40\x7a\x28\xf8\x8f\x8c\x0d\xf2\x0b\xef\x9e\xed\x0c\xd3\xdb\x83\x34\xd6\xdb\xd7\x9a\xaf\xac\x0c\xad\xc9\x37\x06\xaf\x8e\xde\x7f\x78\xf1\x06\x56\xd0\xe1\xf1\x9b\x37\x2f\x0e\x3f\x1c\x1d\xbf\x41\xef\x5e\xbc\x7f\x7b\xfc\xe6\xfd\x8b\xf7\x95\xad\xc6\x51\x19\xe9\xcd\xd2\x6f\x7d\x73\x1a\x3e\xe4\x66\x84\xf3\xe8\xf3\x38\x9b\x2f\x12\xfc\x99\x94\x97\x21\x7a\x0c\x94\x65\xf5\x10\x74\xa1\xd2\x0e\x81\x56\xa5\xf6\x9b\xbe\x27\xa0\x09\xb7\x39\xf8\x62\xc6\x23\x86\x83\x5f\x6c\xdb\x4e\xf0\xee\xb0\x38\xcd\xc0\x5f\x62\x74\x31\x23\xe3\x19\x9a\x47\xe5\x78\xc6\xc5\x57\xb6\x09\x51\x86\x16\x1b\xe5\x3c\xf1\x03\xa0\x69\x7f\xc0\x62\xb8\x8e\x72\x7a\x0b\x16\x08\xfe\x70\xa2\x64\xd2\xfb\xe8\x27\xe4\x53\x78\x1b\x47\xe2\x33\xd7\x1d\xba\x2c\x4c\xc7\xca\xc1\xf6\x1c\x28\x3b\xf4\x73\x65\x48\x54\xa8\x86\xf7\xdd\xae\xe8\xda\xc1\xe2\x84\xe4\xd8\xf0\x08\x60\xa3\xab\x6a\x3c\x74\x28\x9e\xd6\x6b\xc0\x55\x7c\x56\xdd\xb4\x45\xfd\xc5\x38\xc1\x25\xae\xab\xc1\x1e\x8c\x8d\x1b\xfd\x15\xf6\xcf\x74\xd7\x02\x42\xe4\x04\xc1\xea\x03\xe5\x0e\xb3\x95\x4a\x99\xb3\x1c\x94\x31\x57\xcb\xa4\x1c\xac\xad\x09\x61\xd0\x24\xe1\x35\x5b\xed\x01\x2f\x32\xa9\xf0\xa7\x78\x9e\x26\x1e\x99\x85\x75\xcf\xaa\xfa\xaa\xb2\xd9\x60\x60\xc9\x6b\xff\x60\x9e\xcd\x95\x83\x5e\xb1\xc4\x9f\xbf\x78\x74\xf8\xf2\xe4\xcd\xff\xbe\x78\x27\xeb\x89\xf1\x78\xb6\x4c\x3f\xe1\x98\xbf\x2a\x61\x2f\x46\xf9\xdf\x20\xc7\x8b\x24\x1a\xe3\xde\xf0\xdf\xd7\xa7\xff\x4e\xff\x9d\x9f\x3d\xfd\xf7\x97\xe1\x34\xe8\x5e\x5f\x3d\x7a\x74\xf5\xa5\xdb\x07\xd7\xc2\x5f\xbc\xf0\xff\x3e\x13\x25\x4e\x79\x99\x33\x5a\xe8\x54\x94\x3a\x3b\xf5\x97\xb3\x4b\x19\x85\x2a\xca\xa8\xb6\xb4\x96\x64\x43\x5a\x19\x7e\xcd\x47\xb3\xbb\x82\x93\x1a\x18\x70\xd7\x2c\x20\x5e\xe3\x2f\xc3\x21\xdc\x81\x62\xee\x0e\x03\x3c\x6d\x40\x05\x6b\x0e\xe9\xd3\xbc\x43\x9a\x65\xae\x5c\xee\x77\xc6\x82\x41\x1b\x88\xbd\x7f\x35\x44\x75\x79\x67\x6d\x71\x32\xd7\xa9\x81\xcf\x16\x0c\xfa\xae\x95\xe2\xd6\x34\xcc\x98\x66\xcd\x5d\x7c\xaa\x33\xfb\x76\x67\x90\x11\xe6\x9d\x1b\x72\x81\xeb\xbb\x74\x8c\x13\x70\xa8\x2f\x1e\x71\x1a\x65\xc6\x09\x8e\x72\x61\xc2\x65\xb5\xc2\x93\xad\x05\xed\x07\x02\x5f\x0d\xa5\xa8\xc8\xb7\xc7\x99\xe5\xed\xbd\x4e\xff\xab\xb5\xab\xe4\x38\xd3\xe1\xaf\x03\xb4\xb5\xb9\xb9\x89\x1e\xb2\xcb\x19\xcf\x5d\xab\xd7\xf1\x03\xbc\xdb\x03\xec\x08\x7c\x51\x0e\x52\x60\x4e\x2f\x2c\x28\x0a\x7f\xd7\xb7\x3a\xaa\xdc\x19\xb3\x48\x04\xa2\xfd\x70\xcb\x4a\xa7\xc3\x8c\x45\xb0\xb8\xde\xa6\xdd\x9e\xa5\xad\xd7\xc1\xb9\xf3\x1f\xca\x23\x7f\xe2\x5b\x68\x14\xc7\x85\x1e\xf0\x99\x5b\x39\xb8\xd2\x18\x53\x0f\x07\x6b\x6c\xc3\x15\x07\x03\x7e\xd6\x26\xcc\x5d\x3d\xe7\x7a\x73\x11\xbd\xde\xe0\xbe\x47\x31\x2b\x15\xe5\x39\x39\xc7\x3a\xc3\x8d\x62\x39\x7b\xa2\xbd\x1a\x0e\xeb\x81\x36\xbc\xd5\xfb\x6d\x4a\x35\x99\x42\xbc\x56\x27\x31\xba\xba\x12\x5f\xa7\x9b\x67\x72\xcb\x84\x2b\x6c\xd6\x37\x05\xcd\x13\xcc\x12\x2c\x51\x97\xe8\xbc\x9b\x17\xda\x97\xbd\xa9\x93\x78\x29\xe8\x40\x36\x2c\xea\x16\xbb\x9a\x58\x47\xfa\x4a\x65\x61\xe1\xb9\x59\x0a\x13\xcb\xe1\xf4\x05\x1a\x77\xba\xbf\xc7\x1a\x9a\x39\x11\xd7\xa0\xd6\xb5\xef\x94\x47\xfb\x49\x96\xf7\x28\x5e\x3e\xe1\x4b\x76\x52\xf4\x0d\xc0\x74\x02\xd3\xf3\x03\x0d\x66\x51\x71\x7c\x91\xbe\x85\x90\x47\xe5\x25\x84\xb4\xb3\xb8\x40\x05\x7a\x3e\xe1\xcb\xb3\x6a\xdb\xce\x6e\x96\xa2\xa3\xb7\x87\x5d\x3b\x16\x3b\x97\x2d\x6a\xea\x74\xcc\x2c\xd4\x32\x39\xd4\x7d\x10\x72\x77\xe3\x48\x3b\x6e\x90\x02\x15\x25\x61\xc1\x48\x48\xac\x11\xb5\x6e\x16\x5a\x89\x70\xbf\x1d\x67\xaf\xfa\xb4\x24\xe4\x00\xba\x7b\xe4\x98\xf7\x23\x60\x54\x60\xf6\x6a\x9a\xa5\x98\x6b\x9e\x7a\xeb\x1f\x6d\xb1\xff\x22\x27\x25\xf8\x4b\xb1\xb8\x91\x06\x62\x1d\xa1\x3e\xba\x67\x28\xe1\x62\x70\xbd\xaa\x76\xae\x40\xf2\x0e\xbd\xee\x05\xc1\x9a\x4e\x3f\x56\xbd\xf8\xbd\xf6\x74\x05\x19\x9b\xec\x9e\xc1\xb9\x57\x40\x91\x40\x53\x33\x96\x90\xe7\x08\xd5\x78\xd6\x14\xbd\x8c\xb5\x67\xbf\xbe\x51\xd5\x58\x3c\xdf\x4c\x6c\x90\x54\xad\x4b\x0d\xe6\x50\x1a\xf7\x51\x64\xfd\xf9\xf6\x49\xcb\xec\x8e\x6b\x13\xad\x33\x8a\xe3\x8e\xe7\x5f\xd9\x12\xac\xac\xd5\x6b\xb3\x4e\x77\xc3\x66\xb7\x1b\xdd\x0e\x2a\x74\xc3\xec\x81\x6e\xa7\xad\xf8\x20\xbc\xd8\xca\x4a\x54\x2c\x17\x8b\x2c\x2f\x41\xb7\xc6\x6e\x6a\xdf\x1e\x22\xa9\x55\xe9\x1a\x8e\x20\xab\x09\xb3\xf5\x4b\x85\x9b\x2c\xc6\x66\x2a\x5b\x89\xc2\xbc\xc7\x7a\xa0\xa9\x5a\x0b\x7a\xcd\xa1\xae\xbd\x9b\x56\x7a\xbb\x71\xf5\xb8\x0a\x83\x8e\x93\xf6\x8a\x57\xda\xd7\x67\xc1\xce\x37\xf7\x2a\xdd\x7b\x95\xee\x7f\x85\x4a\x97\x3f\xac\xb8\xd5\x73\xec\x83\x28\xcf\x52\xf4\xbf\xcb\x79\x74\x4e\x0a\xf4\x7d\x44\x3f\xff\xf6\x89\x7d\x0e\xe6\xd8\xab\xee\x1d\x0e\xd1\x51\x4a\x4a\x12\x25\xe4\x57\x8c\xfe\xce\x7a\x41\x09\x35\x42\x05\x58\x62\x09\x83\x1b\x18\x28\x5d\xaa\x86\x93\xf3\x01\x68\x75\x45\x31\x11\x45\x84\x07\xa0\x3a\x8a\x43\xb4\xd9\x74\xf3\xc6\xac\x3d\xe8\xf0\x6d\xb7\xba\x5e\x33\x13\xaf\x3b\x5d\xf5\x0a\x4d\xc4\xba\x9a\x08\x84\x42\x4b\xca\xa0\xc7\xe3\x84\x97\xbd\x4e\x09\x34\x55\xcf\x44\x54\x23\xb2\x84\xef\x5d\xaf\x1b\x22\x6d\x04\xb4\x3d\xa7\xf7\xc3\x35\x8e\x9e\x0a\x57\xbc\xac\xad\x80\x37\x66\x38\x4d\x65\x59\xfd\x2a\xd5\xb2\x68\xd2\x31\xe6\x91\x66\xbb\xeb\x5d\x2d\xea\x54\x14\x9f\xd3\x33\xaa\x98\x1d\x74\xf4\x1c\x72\x44\xef\xe4\xa4\x6d\x6c\x54\xf9\x19\xf2\xbf\xfe\x61\x6f\x85\x9c\x6a\x54\xb6\x78\x1e\xc4\x47\x2a\xd3\xc5\xbb\x20\xf6\x3f\x3d\x30\x89\x17\x42\xed\x0d\x2f\x04\x0e\xe4\xe1\x51\x18\x10\xf9\x4d\x75\xa4\xb2\xae\x29\xf2\x99\xe7\x65\xb6\xd5\x80\xdf\x3c\x43\xa0\xc1\x6a\xcf\x8a\x09\xcc\x12\xad\xcb\x50\xe6\xd3\x47\xd3\x39\x73\xa0\xa7\xb2\xed\x01\x3e\xc7\xf9\x65\x4f\x78\x43\x7e\x4f\xd2\x69\x82\x5f\x33\x84\xf7\x51\x88\xbc\x19\xaa\x26\x3e\xad\xb2\x23\x7e\x70\x3e\x81\xf2\xa0\x25\x85\x77\x41\x37\x9a\x05\x91\x48\x63\x14\x69\xd8\x16\xf1\x0c\x31\x3f\xfb\xfb\xfb\x8c\x6a\x74\x20\xee\x76\x41\xc0\xd2\x33\x37\x05\x63\xd7\xba\x5d\x5f\x75\x5c\x86\xb5\x7c\x4a\x0e\x87\x2c\x34\x9f\x4c\xe2\x5e\xd9\x75\xe6\x22\xd6\x63\x2b\x7f\xf2\x8c\x11\x8d\xe0\x3d\x5a\x03\x3b\x7a\x46\x81\xaa\x5d\x7c\xf3\x8e\x5b\xfc\x85\xd5\x55\x30\xa6\xca\xab\x12\x02\x4e\xdc\x07\xe5\x11\x5f\x14\x3d\xc1\x7b\xfa\x68\x42\x70\x12\x5b\xa6\x07\xbc\x15\xa3\xa7\x16\xcf\xd1\x3b\x68\x31\x1e\xd6\x35\x8b\x0c\x45\xb2\x15\xf5\x41\x90\x85\xeb\x08\xcb\x61\x6f\x02\x76\x20\x58\x9b\xf8\xe6\x2c\xce\xd4\xc3\x3b\xb2\x22\xaf\x8f\xcb\x89\x54\x0c\x7c\x7c\x2f\x06\xde\x8b\x81\x7f\x6d\x31\x50\xbd\xcf\x63\x8b\xe6\xae\x5e\xe8\xdd\xcd\xdd\x3d\x05\x79\x2d\xd4\x8d\x95\xc6\xca\x70\x4e\xe4\x91\x5a\x84\x15\x32\xfd\xd4\x4e\x91\xdc\xe5\x9a\xc8\xa5\x9f\xc6\xc5\x3d\xf0\x3c\x95\xaf\x24\x83\x4d\x0d\x0c\x7c\xf2\xeb\x41\x09\x95\x21\xb4\x9e\xa1\x95\x60\x9e\x9e\x7d\x45\xac\x1c\x43\xe9\x0a\x1a\x83\xd7\x51\x1a\x4d\xb1\x7a\x9d\x4f\x59\x16\x43\x85\xa1\x0a\x10\x2e\x3c\x14\xb8\xb6\xdf\xcf\x0d\x0c\x39\x15\xe7\xf3\x06\xfb\xf7\x18\x53\x0e\x43\x52\xd3\xbf\xa7\x25\xfe\x8d\xa2\x82\xf9\x5c\xa8\x8a\x44\x31\xc5\xe0\xa5\xd2\xb3\x49\x99\x9e\xe6\x6d\xc7\xa2\xa2\x4d\xb3\x3d\x20\x31\x07\x11\xbc\x8d\xca\x58\x13\x86\x3b\x51\x2d\x7c\x8e\x24\x0e\x69\xc7\x27\x7c\x19\x16\x54\xb0\x91\x29\x4d\x6e\x8e\x99\x33\x4e\x75\x49\xc1\x43\x73\xf0\x6d\x57\x8e\x73\x80\x5e\x53\x56\x4e\x70\xc1\x83\x48\x03\x3e\x1c\x2f\x94\x86\x67\xcf\xd6\x78\x13\x83\xba\x7a\xb3\x4c\x12\xe5\x18\x23\xa0\x52\x24\xfe\x4c\xe0\xda\xcc\x87\xbb\x3f\x66\xfc\xa1\x3b\x0b\xbb\x83\xd6\xbe\x56\xdc\x1d\x07\x93\xad\xa2\xed\xd8\x01\x4e\x64\x28\x19\xf3\x20\x86\x1a\xc2\xc7\xbc\x7b\x7b\xc8\x23\x4c\xd4\xc7\x8e\x51\x68\xe3\xae\x5e\x19\xe1\x01\xd2\xe5\x89\xd3\x46\x13\x03\x3d\xa2\x90\x2e\x96\x0c\xa2\x93\x49\x1e\x74\x68\xb5\xd4\x62\x63\xdd\xc3\x5d\x2b\x28\xc8\xf7\xb8\xd1\x53\xda\x92\x21\xa5\xd3\xc5\x00\x41\x90\xec\xba\x10\x52\xe8\xa9\xfa\xcd\xa8\x1b\x8a\x9c\x51\x76\xa0\x7d\x36\x78\xd6\x77\xb0\xce\xf8\xbd\x8c\x5e\xab\x63\xde\x45\x3c\x73\xc0\x5b\x7f\x56\x34\xdd\x11\x57\xe0\xde\x13\x23\xc5\x0c\x96\xab\xa3\xd0\xde\xac\xc0\xd9\x0c\x1c\x7b\x9e\x7a\x01\x64\x55\xde\xd8\x24\x1c\x17\xbe\x90\x45\xe2\xfd\x94\xa0\xc3\x15\x22\x17\x45\x62\xdd\xb6\x42\x42\xbb\x18\x44\xba\x3b\x56\xbe\x8f\xd8\x5e\x92\x57\x76\xbe\xcc\xe5\x09\x00\xd6\x96\x81\x0e\x08\x79\x46\x80\x21\x79\x4c\xf1\x6b\x41\x84\x3a\x03\x34\x4b\x15\xca\x8c\x3a\xb7\xca\xba\x8a\xc3\x41\x95\x70\x91\xcb\xf0\x69\x4a\x5b\xa3\x5f\x74\x74\xd1\x0c\x31\xb4\xd1\x92\x24\x31\x20\x8c\x0f\x8a\x66\x3a\xfe\x6d\x81\xe1\x7f\x38\x7e\x7e\xbc\xbe\xbe\x0e\xe2\x7d\xb7\x40\xcb\x69\x72\x39\xe0\x51\xc4\xe8\x81\x60\x59\xd0\x3d\xb1\x94\xad\xa4\x9a\x4b\x59\xfa\x5b\xd8\xd5\xc8\x1b\x12\xca\x38\x20\x43\xbe\xb7\xde\x32\x22\x3d\x8d\x7e\x39\xa5\xd9\xa7\x9b\x67\x67\x54\xec\xd2\x3f\xaf\xae\xa4\xdd\xa6\x0d\xca\x7e\x6c\x41\x19\x3a\x96\x3d\xff\x55\x91\x55\x3b\x40\x22\x8d\x0b\x3b\xe8\x95\x88\xaa\xba\x45\x95\x97\xea\xca\xe8\x94\x85\x40\x49\xfd\xcf\xb2\x90\xe3\xe7\x9b\xcb\xef\xea\x34\xbc\x8a\x1f\x68\x64\x45\xb0\xf0\x85\x2a\x30\xce\xea\xd0\x96\x29\x51\xaa\x8b\x29\x75\x3f\x63\xc4\x62\x91\xe6\x75\x1e\xd3\x3c\xbb\x61\x06\xcf\xdb\xd1\x99\x99\x34\x8a\xb4\x0c\x68\xbc\xe1\x54\xcc\xee\x1a\xd5\x54\x0f\xc1\xbe\x86\xe2\xa4\x42\xb3\xda\x7a\x7a\x16\x61\xae\x70\xda\xec\xce\x51\x70\xc8\x65\x8e\xe1\x86\xf4\xdd\xdb\x43\xe9\x81\x89\x99\xb2\x8c\xa3\x54\x0a\x9b\x24\xe5\x4a\x17\xbf\xaf\xa7\xdc\xf5\xf5\x38\x18\x0c\xae\xf5\xf8\x6e\xb6\x2f\x3d\xa5\xc9\x14\x45\x3d\x9c\xb4\xc9\xa7\x7d\xa5\xbb\xf9\x55\x88\x50\xd0\x80\xe9\x93\x5e\x9f\xb5\x2a\x44\xf3\x92\x15\x8a\x9d\xd7\xc2\x06\xa6\xed\xf5\xdf\xb7\xf7\x7a\x9f\x7b\xbd\xcf\x5f\x5b\xef\xc3\x95\x3e\xf1\xe8\x16\x37\x7f\x3e\xbd\x8f\xd4\xd6\xe8\x8a\x1f\xc6\x9c\xa4\x46\xe7\xf9\x33\x83\x8f\xd0\x61\x98\x2e\x3f\x1c\x4d\x05\x8c\xd4\x4a\xde\xab\x09\x14\xb6\xa6\xe4\xa5\xa2\xe7\xb1\xe9\xe7\x17\x5c\xe8\x0b\xb2\xa4\x2b\x4b\x0e\xea\xd1\x9a\xb5\x9d\x85\x03\x39\x6a\x97\x9e\xaf\x83\x96\xbe\x59\xed\xf2\xd5\x01\x8b\x16\xcb\x52\x3e\x5e\x4b\xf1\x05\xc7\x66\x4f\x6d\x97\x54\xe8\x08\x51\x57\xc2\x59\x71\x34\x42\xd4\x8d\x47\x1f\x7d\xb9\x42\x4c\xdc\x91\x7d\x92\x8d\x4e\x71\xbb\x46\x25\x9c\xb7\x51\x5f\xae\x68\x74\xdb\x6d\x74\xb1\x2c\x5f\xe2\xcf\xcd\xc3\x7c\x89\x3f\x57\x8d\xd1\xcc\xaa\x1f\x60\x73\x5b\x0c\xa8\x6a\x68\xfe\xb6\xac\x71\xf1\xcd\xe8\x54\xc1\x89\x89\x08\x14\x92\x03\x3e\xf4\x80\x77\x0b\x80\xcf\x2a\x76\xae\xe7\xcf\xd4\xae\xc5\x68\xa7\x13\xee\xc0\x16\xf5\xe4\x7e\x8b\xba\xdf\xa2\xfe\xda\x5b\x94\xba\x9a\xc0\xe5\xec\x46\xf7\x12\x1c\xf8\x6e\x5f\x25\x56\x44\xff\xf7\x85\xff\xf7\x5d\x82\xf8\xef\x41\x1a\xb6\x4d\x0a\x22\xcc\x91\x2d\xa0\x05\x4f\x16\x60\xe3\xaa\xf6\xc6\x59\x3a\x21\x53\x01\xa6\x85\xc2\xd1\xa1\x45\x64\x15\x01\x76\xc1\x9f\xad\x19\x17\x34\x3c\x51\xc0\xfc\xc8\x42\x81\x5b\xc8\x80\x44\x01\x72\x54\xbc\xbf\x4c\xc7\x6c\x8b\xd1\xa1\x0a\x96\x2a\xc0\x28\x2b\xce\xb1\x0d\xc4\x53\x65\x5d\xcc\x41\x91\x0e\x41\x46\x51\x2a\xb2\x99\xd7\x43\xa7\x3f\x22\x59\x0a\x21\xe0\x33\xad\xcd\x9d\x81\xd4\x79\xf3\x37\x82\xa0\x04\xdc\x3c\xeb\xa3\x07\x0f\x10\xff\x3d\x00\x9d\xe0\xf1\xa4\xd7\xdd\xfc\xdc\x65\xae\x4b\x36\xfb\xe8\x29\xea\xe0\x72\x46\x77\x0f\x08\x4c\xfa\xec\xf2\x65\x54\xcc\x3a\x28\xb4\x93\x99\x46\xb7\xa3\xa4\x04\x2d\xfe\xd3\x8f\x79\x36\x7f\xf6\x1b\xf4\xb4\xcb\xbb\xa4\x85\x15\x7a\x76\x09\x0d\xd3\x4e\x1f\xa4\xf1\x11\x2d\x27\xa3\x79\x79\x21\xd9\x38\x24\xac\x1a\xcf\x32\x1d\x27\xf8\x37\x1a\xc0\x09\x6d\xab\xa1\xeb\x3a\x4c\x65\xa7\xc5\xfc\x68\xe3\x3c\xcc\x96\x69\xab\x6b\xa6\x3b\x18\x87\xb7\x6d\x46\x42\xfa\x50\x2a\xc0\xd8\xa8\x9c\x29\xf8\x0d\xfb\x7f\x22\x1b\xd4\x26\xc3\x99\x04\x1d\xc0\xe8\xb3\xec\xde\x8b\x72\x76\xd7\x07\x84\xd6\x87\x83\x3b\x3a\x1b\x40\x00\xe0\xea\xb3\x01\x53\x7d\x30\x2e\x4e\xb0\xb7\x47\x0b\xbd\x33\x8b\x86\x7e\x2c\x6e\xd0\x05\xed\x8e\x9b\x71\x57\xe6\xff\x02\xe9\x1e\xba\x8f\x9e\x1d\xbc\xb1\x82\x91\x71\x9e\xca\xb4\x32\xec\x01\x2d\xd7\xcd\x5c\xaf\xad\xb1\xde\x0d\x98\x65\x94\x7c\x4b\xf3\xa2\x9c\x29\x6d\x50\x80\xba\x7a\xe8\xe6\x6e\xc0\x87\x39\xc5\x65\x58\xa1\xf3\x14\xbe\x4a\x07\x7a\x41\x3e\x92\x80\xeb\xe9\x8c\xc2\xe7\x51\x62\x44\x19\x1b\x58\x81\xb3\xcf\xa3\xc4\x71\x46\x22\xd3\xae\xd7\x00\x3d\x2b\x0d\x85\xfb\xf9\xbb\xc9\x60\x78\xd1\x9b\x0c\x87\x17\x6d\x39\xa0\x36\x67\x51\xca\x5d\xa2\x04\x2c\x37\x1b\x4f\x4e\x1c\xd0\x3d\x3d\x09\x36\xe5\xe4\xcb\x23\x94\x66\xcd\x69\x5c\xe1\x85\xe8\x54\x09\x54\xec\x7a\x8f\xbb\xd1\xfc\x51\xdd\xe6\xd9\x10\x7a\xe4\x73\xc6\x4f\x24\xb0\x16\x3a\xd2\xba\xc7\x0a\xf5\x6a\x58\x9e\xf4\x59\x23\x81\x2a\x8e\xcd\x59\x1e\x4d\xf1\x41\xd9\xe6\xe4\xcc\x41\x2b\x71\xe4\x83\x90\x87\xda\x1a\x2c\xb1\x75\xc7\x38\x76\x99\xc1\xc9\x72\x15\xb4\x78\x07\xc6\x9d\x3b\x36\x8c\x89\x42\x55\x0e\xc7\xca\xfc\xed\xe7\xdb\x3b\x30\xb1\xea\x9b\xe8\x99\xb1\x23\x6b\x68\x52\x64\xbc\xdd\xb0\x7c\xbd\x0d\x9c\x25\xae\xec\x5f\xe9\xe2\x45\xd7\xab\xd1\x2f\x6d\xa2\x9e\x76\x61\xff\x6d\xc6\x04\x80\x39\x98\x90\x12\xdd\xd7\xc0\x84\x46\xca\xb7\x18\x74\xb0\x56\x41\xd9\xf3\x05\x49\xd8\xe1\xad\x91\xbc\x39\x68\x0d\x8d\xbb\x10\x02\x0f\x9b\xd5\xf4\x67\xcb\x6b\x2d\xe9\xd1\x2e\xe6\x74\xab\x4e\x64\x75\x3b\xb8\x75\xcb\x89\xaa\x9b\x1b\x31\x85\xcf\xf1\x98\xcc\xa3\xa4\x1a\x15\x4a\x0a\x6c\x89\x04\x55\xa0\x82\x28\xff\xb8\x03\x36\x85\xa7\x86\xc1\x56\xc7\x4a\xae\x38\x82\x81\x7c\x5d\x3b\xe8\xe6\x15\xa4\x55\x58\xcf\x3c\x3e\x78\x4e\xa8\x2b\x8d\x49\x96\x72\x06\x57\x75\xf8\xfd\x23\x71\x9a\x9b\xe0\xe9\x1d\x1e\x63\xb2\x68\x41\xe6\x6e\x99\x36\x04\xe0\x82\xde\x96\x02\x78\x8d\xad\x07\xd8\x72\x15\x37\x72\x31\xcf\xe0\x6c\xc0\x36\x14\xc0\xc4\xa2\x3b\x12\x10\x1b\x97\x37\x3d\x20\xbd\x8b\x2e\xda\x2f\x71\xb7\x80\x1f\x11\xb5\x70\x6d\x38\x1b\xc5\x83\x47\x16\x72\x43\x4b\x37\xf5\xb6\x55\x57\x6f\xde\x4f\x7b\xa6\x7c\x6b\xcc\x37\x0e\x32\x4d\x57\x18\x87\x09\x5d\x31\x8e\x4a\xa0\xaf\x3c\x8e\x16\x9d\xaf\xee\xf1\x9d\xcb\xda\x15\x84\xc3\x8d\xbb\xea\x3a\x0a\x81\xff\xbd\x1d\xb5\x72\x6e\xd2\x51\xba\x17\xdc\xd9\x89\xc0\x8c\x90\x5e\x37\x26\x0d\xd2\x3f\x34\x3f\xc0\x4d\x28\xc6\x18\xe1\xad\xb8\xd2\x98\xc9\xa7\x22\xae\x79\xd3\xb4\x31\xe8\x81\x08\x76\x5e\x31\x85\x66\x9d\xbe\xb1\x56\x76\xe4\xd5\xab\x57\x2d\xfb\x90\x54\x52\x90\xac\x69\xa5\x96\xdf\xe3\x7c\x81\x1b\xb7\x27\x89\x01\x06\x5d\x8f\x00\x07\xa6\xa6\x17\xc5\x72\x34\x27\xe5\xcf\x59\xde\x24\x25\x29\xc0\x8a\x95\xee\xcb\xaf\xbf\xfa\x6e\xd1\x2a\x87\xaa\xdc\x8a\x2b\xda\xb3\x8e\x38\xce\xf5\xb7\x52\xfc\x04\x7a\x9a\x54\x74\x18\xa9\x87\x59\x6c\x82\xc1\x12\x36\x52\x40\xf6\xb7\x0a\xf1\x03\x98\x5b\xd2\x16\x1f\x5c\x08\x75\x94\x30\xf2\xb4\x82\x55\xe9\x52\x30\xad\x02\xe0\xb2\x53\x55\xb6\xd5\xa8\x69\xd0\xab\x31\x12\x95\xe8\x8a\x01\x5a\x9e\xb9\x5f\x99\x85\x2a\x4b\x68\xcd\x9b\x2b\xda\xc9\x78\xf5\xea\x95\x0b\xcc\xa8\x5f\xab\x52\x12\xa6\x31\x68\x9a\x00\xdf\xdc\xc2\x81\xc5\x64\x93\xca\xee\x3a\x1f\xcd\x8a\x8e\x28\xe9\x4a\xad\xab\x69\x3a\x2a\x17\x2e\x49\x47\x51\xa1\x2b\x2a\x78\x07\x80\x51\xf2\x75\xcb\x61\x24\xc8\x75\x3f\x58\xa1\x8d\x39\x49\x4d\xeb\x16\xa7\x05\x0e\x71\xc3\xfa\x67\x51\x31\xcb\xa3\xb2\x76\x0c\x15\x30\xad\x76\x86\xd5\x7b\x24\x6e\x67\x6b\x3a\xe4\x07\x69\x3e\x67\xf0\xeb\x60\xf3\x70\xb1\x7a\x0f\xa7\x51\xf1\x36\x27\xe3\x5a\x9c\x55\xc0\xdc\x58\x09\xbc\x7a\x2f\x79\xd8\xa1\xa2\xae\x97\x12\xe6\x86\x6d\x8c\xb4\x2b\xb4\x9a\x66\xaa\xc1\xbe\x12\x0d\x89\x98\x0c\xff\x60\xb6\x36\x75\x7d\xb3\x41\xb5\x16\x75\x16\x62\x5c\xbb\x0c\xc6\xca\x8e\x41\xbb\xd2\x1c\x11\xe3\xc5\x42\x34\x2e\xb3\x5c\x88\x3f\xc2\xf2\x01\xcc\x88\x03\x44\x61\x0d\x5b\x62\x0e\xed\x6b\x6c\x22\x2c\x1d\x9c\xa7\xa8\x81\xf6\xdc\x8e\x41\x1d\xe6\x18\x2c\x95\xe0\xf1\xd8\xa1\x65\x4e\xaf\xc5\x29\x62\xd6\x13\xaa\x1e\x8a\x0a\x11\x6e\xde\xba\xb1\x0b\x84\x39\xc6\x00\x97\xb3\x5e\x3f\x70\x49\xf6\x55\x36\xd5\x64\xe3\x76\x5d\xf2\x0d\x54\x19\x62\xd4\xbb\xd0\x17\xd8\xef\xf1\x02\x83\x69\x92\x8d\xa2\x64\x40\x91\x3a\x88\xdc\x64\x1e\xf3\xcc\xd7\x24\x19\x47\x8b\x37\x37\x6d\x96\x16\x76\x1a\x65\x89\x75\x4d\x6a\x56\x29\xaa\x41\xfb\xe9\x83\x1e\x53\x4a\x14\xe8\xf9\xa7\xa7\xc9\x1b\xd5\x8b\x72\xa6\xec\xf9\x2c\xc3\x9c\x4e\xb8\xf5\x24\xe8\x38\x06\x42\xdc\x40\x5d\x59\xe6\x74\xc2\xed\x6f\x20\x81\xcd\x69\x27\xdc\xfe\x8e\x7d\x4a\x5a\xe8\x84\x3b\xac\x08\x19\x45\x69\x27\xdc\xd9\x09\x4c\xf3\x41\xf8\xe4\x48\xea\x84\xbb\xbb\xf0\x2d\xcc\x88\x3a\xe1\x2e\xab\x9e\x73\xf6\x4e\xb8\xcb\xba\x25\x2e\x7b\x3b\xe1\x2e\x6d\x50\x18\x01\x75\xc2\xdd\x9d\xeb\xb3\x60\xe7\xbb\x7b\x7b\xc4\x7b\x7b\xc4\xbf\xb6\x3d\x62\x95\x31\xe2\xad\x6d\xe6\xdb\x9b\x09\xb6\xb0\x01\x04\xb8\x37\xb8\xfc\x9a\x26\xf6\x90\xda\x6c\xb2\xa2\x8c\xeb\x6f\x62\xb3\xd2\xc2\xa4\x7e\x38\x1c\x2a\x9f\x34\x3e\x3f\x37\x3c\x60\x23\x65\xf1\x50\x1d\xfe\xff\xd8\x7b\xf7\xb5\xb6\x91\x65\x71\xf4\xef\xe4\x29\x7a\xe6\x77\xd6\xc4\x0e\x02\x7c\x87\x90\x30\x7b\x13\x03\x81\x95\x10\xf8\x01\x99\x99\xb5\xf9\x98\x7c\xb2\xd5\xc6\x4a\x6c\xc9\x5b\x92\xc1\x64\xc2\x7a\x9f\xf3\x1c\xe7\xc5\xce\xd7\xd5\x17\xf5\x55\x96\xb9\x64\x32\xb3\x60\xed\x9d\xb1\xa4\xee\xea\xea\xee\xea\xea\xea\xea\xba\x64\x43\xe4\x4f\x42\x09\xf7\x07\x3a\x90\x98\xc9\xe8\x35\x81\x47\xcd\x58\x7f\x5b\xe1\x0a\xe3\x44\xd7\x8d\x1b\xad\xb8\x0a\x2d\x20\xf0\xc9\xe2\x97\xb1\xa9\xbd\xc7\x99\x65\x53\x53\x37\x2f\x79\x77\xb9\x39\xf7\x5a\xb5\xc7\xdd\xe2\x71\xb7\xf8\x7b\xef\x16\xdf\xa9\xf5\xfa\xfd\x19\x9a\x97\xb4\x83\xcf\x4d\x39\x8f\x70\x92\xc6\x91\x3f\x7a\xb4\xe7\x7c\x68\x7b\xce\x9b\x72\x16\x7e\x11\xbe\xca\xcd\x06\x8b\xf4\xc3\x79\x41\x53\x45\x3c\x61\xb3\xfa\xd1\x5a\xe8\x0e\x37\x94\xe1\x98\x6c\x04\xc7\xfe\xd5\x5b\x3c\xef\xe6\x42\x2e\xfa\xcc\x7b\xfa\xe4\x89\x8e\x9b\x51\xa0\xc0\x33\xad\xfc\x4d\x9c\xd9\x8e\xf8\x20\x19\xee\x3d\x79\x52\xf2\x6e\xba\xf4\x15\x1c\xee\x1f\xe3\x7e\x7c\x49\x83\x43\x15\xdd\x59\xf1\x72\x56\x5c\xd5\xaf\x05\x03\x32\x8d\x46\x71\xff\x73\x39\x4a\x51\xca\x16\x10\x8b\xab\x5c\x19\x83\xc7\x72\xe3\xe6\x1c\xbd\x7b\xbe\xf9\xce\xe7\x7e\xee\xf5\xf7\x22\xd7\x9c\xb6\x6b\x63\x67\x97\xca\xcf\x4f\xb9\xd9\x29\x9e\x9b\x45\xee\x32\xf5\xb9\xd1\x90\xb7\x49\xd6\xac\x61\xa9\x11\x69\xf1\xe6\x6f\x15\x0a\x92\x6e\x4f\x38\x55\xbb\x6e\x3b\x9c\x97\x22\x12\x38\x59\xde\x7d\xb8\xf3\xc1\xd6\x1c\xb5\x70\x3e\x1d\x72\x61\x87\x58\x6e\xca\xe5\x7c\xbb\xcd\x85\x73\x8b\x8a\x48\xd3\x0a\xe9\x72\x7a\xfd\x51\x4e\x7f\x94\xd3\xff\xde\x72\x3a\x13\xd2\xd3\xa1\x43\xab\x33\x47\xfc\xc6\x09\x9e\x8e\x09\xe8\x9f\xe7\x28\x81\xfa\x71\x82\x57\xc2\x58\x95\xd3\xd7\x4a\x07\x4e\x28\xe9\x68\x39\xcf\x5f\x13\x0a\x9d\x0c\x87\x0f\xae\x1d\xfa\x7e\xe4\x71\xc2\x1d\x4f\x86\xca\xed\x06\xbe\x62\x41\xa7\x77\xbf\xc5\x85\x4e\x3a\x9c\x7f\xa1\x93\x0e\xe1\x42\x87\x0a\x2e\x8b\xdc\xdb\x14\xc9\xf9\xee\xcd\xc9\x10\x0f\xa4\xad\xe9\xd2\x7a\x53\xc7\x44\x84\x74\x38\xfc\x68\x2f\xa0\x1a\x85\x20\x8b\x2e\xab\xa8\xd1\x30\x1a\xc4\xee\x16\x2d\x5f\xef\xd6\x5c\x8a\xb3\x03\x7f\xc6\x88\xe0\x24\xfc\xa2\x5f\x0e\x4b\x6d\xcf\x2b\xaa\x5a\xfd\xdc\x06\x91\x30\x3a\x8a\x7f\x2d\x46\xc0\x56\xe4\x6e\x0d\x8f\xfd\xe4\xf3\x69\x32\x4d\x33\x1c\x1c\x61\xe3\x32\x58\x6a\xbe\xb8\xe0\xdd\x90\x88\x30\x91\xe9\x8e\xfc\xb0\xa0\x7d\x67\x99\xbb\x51\x80\x1f\x04\x47\x49\x78\xe9\x67\x98\x1e\x09\x1d\xad\x17\x15\xbb\x5b\xdf\x69\xd2\xaf\xb9\xdd\x2f\x2a\x76\x37\x04\x86\x7e\x3a\xb7\x75\x67\x99\xbb\x35\x7d\x81\x33\xba\xa1\x17\x8e\x7d\x41\xa9\xbb\x37\x5f\x62\xee\x8b\x8a\xdd\x99\xee\x4f\xae\xc7\x85\x8d\xbb\x8a\xdc\x99\xea\xe7\x35\xec\x2a\x72\xd7\x21\x27\x72\x5c\x86\x29\xe8\xdd\x24\x1e\x1f\xf9\x69\x7a\x15\x27\x41\xd1\xf8\x97\xac\x73\xe7\x75\x30\x6f\x4c\x5c\x45\xee\x4c\x86\xf3\x1a\x76\x15\xb9\x0f\xd6\x33\xaf\xed\x82\x52\xf6\xe6\xc5\xc3\xea\x2a\x4a\xa7\x3d\xb8\x79\xa3\x29\x8d\xa7\x51\xfe\x3c\x0e\xd3\x34\x8c\x2e\x9e\x96\xc6\x76\x12\xa7\xfa\xd5\x95\x84\xa5\xe5\xab\x45\x4f\x81\x8a\xf5\x8e\x68\xfe\x2d\xd7\xc9\x70\x28\x25\x10\xd3\x6c\x2f\x94\x53\xb4\x66\x19\xd1\x6a\x3c\x9e\xa1\x1f\xcf\xd0\x7f\xef\x33\x74\x7e\xd7\xd5\xfb\xf2\x45\xbb\xeb\xda\x1a\xe1\x19\x7a\x8d\x13\x7c\x91\x7e\xf1\xd3\x2f\x21\x7a\xe5\x8f\xf0\xec\xbf\x93\x6c\x90\xae\x0c\xa7\xea\x71\xb8\xc3\xa2\x99\x1e\xe3\x01\x4e\x70\xd4\xc7\x1b\x88\xb4\x9f\x6e\xac\xae\x5e\x84\xd9\x70\xda\x5b\xe9\xc7\xe3\x55\x7e\xea\x5e\xbd\x88\x97\xc5\xef\xde\x28\xee\xad\xa6\x57\x7e\x32\x5e\x0d\xa3\x0c\x27\x91\x3f\x5a\x25\x5d\xc2\xb3\x8c\xff\x77\xe5\x22\xfe\x3f\xef\x9a\xcd\x07\xbe\x1a\xcb\xef\xbb\x4e\x08\x36\x7f\xf3\xc3\x35\xfc\xf8\x4b\x5c\x76\x51\xcb\x57\x9c\x5d\xc5\xc9\xe7\x63\x0c\xa1\x6a\x8b\x14\xe5\x7a\x71\x53\x5b\xde\xfb\xf2\xe5\x63\x41\xa9\xbb\xf8\xe6\x5d\x47\xfd\x9d\xc8\xef\x8d\xf0\x3c\x2c\xa5\x92\x76\x04\xed\x05\xee\x82\xdb\x95\x3f\x29\x89\x5b\x5e\xd2\x81\x9b\xb5\xc0\x1d\x70\x0b\xe2\xab\x88\x45\x21\x2e\x42\x8c\x17\xb3\x63\x65\xf9\x5a\xde\xdd\xd4\x81\xd8\x74\x52\x02\x2d\x5a\xc8\x8e\x94\xf1\xed\xce\x28\x25\x38\x4b\x42\x7c\x39\x2f\x02\x04\x2f\x66\x47\xcb\xf2\xf5\x2e\xa4\x95\x91\xdd\x6e\x0e\x51\x91\x32\x0e\x72\xd2\x3e\xdd\x79\x88\x2e\x70\x09\x77\x66\x3b\x2e\xea\x87\x3b\x8c\x09\xcd\xde\x30\x27\x46\xaa\x1d\x07\xf5\xc3\x9d\x47\x83\x25\x6c\x29\x46\x86\x16\xb2\xe3\x63\x7c\xe3\x28\xb5\x4a\xa1\x54\x70\xab\x6b\xa8\x38\x75\xb6\x2c\xdd\xfe\xe5\xfc\x50\x7a\x99\x33\xa2\xfc\x25\xe7\x03\xd2\x8d\xe3\x44\x7d\xe6\xd4\x2f\x01\x22\x24\x98\x3f\x5e\x60\xe9\x62\x72\x32\x95\x1e\x24\x59\xfc\x41\xaf\x19\x87\xe1\xa5\xd3\x37\x86\xcc\x09\x7c\x77\x9e\x21\x8b\x61\x5b\x94\xb2\x0a\x6c\xf8\xee\x38\x5e\x59\xce\x57\x44\x58\xb2\x05\xbb\xb5\xde\x4b\x36\x1f\xcf\x54\x8f\x67\xaa\xbf\xf7\x99\x8a\x1d\xa8\xf8\x05\xd1\xb7\x8d\xd2\x7e\x1b\xc3\x6a\xee\x1d\xe5\x4f\x42\x2e\x8c\xd3\x14\x7f\xd9\xb0\xc8\x02\x8d\x5e\x97\x15\x46\xa5\xe4\xa5\xb3\xeb\x09\x91\x0f\x58\x04\xca\x97\x4f\x25\x06\x1e\x66\xfd\x61\x85\x7c\xd7\x73\x8b\xf4\xfd\x14\xa3\x67\x84\xe2\xd3\xec\xd9\x86\xf2\x09\x26\x2b\xb9\x48\x57\xd2\x61\x38\xc8\x2a\x5a\x42\x11\x64\x24\x07\xac\x99\x05\x18\x4b\x06\xf7\xb5\x08\x5f\xd1\x08\x54\xf4\x42\xf6\xa5\x05\x8d\x09\x8e\x82\x30\xba\x78\x70\x3c\x8e\x68\x3b\xb2\x0d\x91\x0d\x29\x16\x3a\xd0\xc4\x46\x03\x67\x54\xa6\x09\x56\x6e\x24\xe9\x40\x94\x9a\x6f\x49\xc8\xa0\xe9\x32\x82\x42\x0a\x16\xd9\xc9\x22\x55\x47\x61\x94\x66\xfe\x68\x54\xaa\x65\xad\xb4\xdd\xd7\xdd\x5d\xa8\x00\x8f\x0b\x9c\xbd\x8b\x2f\x4a\x04\x14\x23\xa5\x9c\x3e\xf6\xb4\x45\xad\x48\x41\xab\x93\x78\x6e\x1c\x0e\x52\x64\x4e\x7b\xdd\xa1\x1f\x5d\xe0\x12\x4d\xda\x84\x0f\x0a\x42\x36\xc9\x52\x46\x4f\x11\x84\x48\xc7\xa4\x46\xe2\xd1\x48\x96\x07\x16\xe6\x37\xe9\x70\xb8\x02\xac\xd1\x60\x37\xe9\xd0\x64\x37\x6e\xf1\x69\xce\x2d\x8d\x41\x06\xc8\xb8\xa5\x51\x2c\x09\xee\x55\x4d\xef\x26\x46\x64\xd3\xd4\x3f\x1c\x22\x26\xe9\x22\xe3\x9a\x82\x36\xcb\x70\xd0\x8b\xde\xad\x79\x8d\x8c\xef\xa1\x6d\x99\xf4\x0c\x49\x94\xe2\x80\xb3\xe1\x06\xf9\x87\x02\x4b\x87\xc3\x0d\xf2\x0f\x15\x5e\x6d\x09\x19\x5a\xad\x47\x91\xf4\x51\x24\xfd\x9b\x8b\xa4\xb9\x9e\x9f\xfb\x58\xdf\x53\xb6\x68\xea\x1f\x7e\x8c\x2f\xc8\x3c\xfb\xc9\x56\x2f\x74\xe4\x25\x48\x57\xdf\xa8\x45\x21\xd1\x3f\x57\xcf\x87\x7d\x7f\x22\x03\x71\xc1\xd8\xef\x6e\x1d\x99\x10\x24\x4c\x98\x23\x3a\xb3\x5e\x46\x9b\xe8\x59\x6d\xd6\xef\x04\x2f\x82\x46\x3f\x68\xb5\x5e\xf8\x6b\xed\x56\xbf\xf5\xa2\xd5\xe8\xb4\x70\x7d\xbd\xf6\xa2\xdf\xae\xe1\x66\x2b\xe8\xb4\xda\x9d\x46\xef\x59\x8e\x8b\x0d\x8c\x5f\xf7\xeb\xf5\x7a\xaf\x5f\x5b\x6b\xf5\x5f\xf4\x07\xfe\xda\x7a\x7d\x50\xeb\x37\xd7\x71\xa7\xd9\x0b\xda\xf5\xfe\x8b\x7a\x6f\xdd\x1f\xd4\x6a\xcf\xdc\xbc\x89\xe2\xb8\x21\x49\xba\x7e\x2f\xdc\xb0\x0c\x62\xce\x09\x99\x1b\xfc\x86\xb5\x7f\x74\xa7\xa7\x85\x09\xda\x06\x64\x7d\x5c\x2d\x70\xcd\xee\x52\xa8\x0a\xc7\x2c\x9e\xc5\x1f\x37\xea\xde\x8f\x73\xe6\xe9\xc7\x8d\x06\x61\xb6\xed\x47\x66\xfb\xc8\x6c\xff\xde\xcc\x36\xe7\xb5\x5c\xf9\xa5\x31\xdb\x22\xc3\xe4\x41\x12\x7f\xc1\x63\x3f\x5a\x09\xf0\xcf\xdf\x2a\x9d\xbf\x7e\x41\x7a\x97\x74\xfd\x54\x91\x28\x7d\xa7\x2f\x94\x8c\x04\x5a\x89\x54\x2f\x71\x9b\xdc\xfb\x8b\x67\xf8\x2f\xc8\xd6\xcf\xc7\xe2\xe1\xf3\xf5\x97\xcd\xf1\x7d\xe7\x14\xdf\x96\x2e\x15\x24\xf9\xb6\x85\x6e\xd1\x46\xf8\xbf\x6c\x6f\x69\x5d\x48\xb7\xfd\x9d\xa4\xd7\x76\xf6\xfb\x9e\x12\x6c\xff\xb0\x49\x09\x47\x7b\x45\x36\x94\x41\x18\xe1\xe0\x2e\x19\xb8\x79\xe6\xd8\x2c\x46\x2c\x6d\x75\x9e\xce\x1a\xd2\x71\x8b\xc3\xb6\x48\xc8\xba\x82\x0e\xc8\xc6\x16\xe2\x94\x51\x12\x0c\x93\x36\x96\x5a\x0e\xec\xb9\xd9\xf4\xf9\xb8\xee\xb2\x91\xfa\xfa\x7e\x3a\x1a\xdd\x48\xc6\xee\xe1\x00\xe1\x59\x98\x42\x71\xeb\x90\x6b\x2d\x16\xe6\x94\xe7\x19\x6c\x78\x6b\x34\x87\x8d\x9c\x77\x7f\x19\xd5\xcf\xab\x8e\x34\xf3\x2b\x93\x78\x52\xa9\x42\xde\x6a\x76\xef\x45\xf8\x3f\xac\x27\x18\xad\x1f\x64\xe1\x46\x1d\x6e\x6a\xdf\x90\x63\x96\xc5\x76\x52\x54\xed\x20\x5c\xc4\xc8\x5e\xf1\x5e\x38\xa9\xb1\x7c\xfa\x6e\xa8\x23\x44\x49\xc4\x13\x94\xe4\xe9\xbc\xdf\xe0\xac\x22\x9d\xce\x71\x34\x1d\xe3\xc4\xef\x8d\xf0\x06\xca\x92\x29\x36\x55\x7f\xfe\x18\xa7\x85\xa9\xba\xa5\x7c\xde\x50\x18\x94\xb7\x48\xca\xe1\x9d\xce\x49\xe2\x9d\x6a\x59\xbc\x53\x47\x1a\x6f\xbd\xc8\x4b\x45\x23\x26\x9a\xaf\xf3\xec\xfd\xb4\x13\xf6\xec\x2e\x71\xef\x93\x07\xe5\x3d\x3a\x64\xac\x2f\x04\xbe\x9f\x5e\x47\xfd\x37\xb0\xdf\x10\x91\x17\xba\x50\x3d\x57\x72\xa2\x6f\xb1\x22\x15\xc9\x4d\x43\xab\xa6\x4c\x12\x80\x50\x59\x06\xdc\x2e\xa3\x25\xc0\x61\xa5\x3f\xf4\x93\xad\xac\x52\xab\xae\x64\xf1\x87\xc9\x04\x27\x5d\x3f\xc5\x95\x2a\xff\x0c\x59\x95\x2b\xf5\xaa\x73\xe3\xe1\x33\xeb\xce\x3c\x9a\x6f\xdc\x79\x1a\x55\x1e\x11\x8d\xd7\xb8\x20\x1d\x32\x57\x8c\x10\x50\x94\x04\xdb\xe2\xad\x2d\xc5\xb6\xaa\xe8\xe1\x99\xed\x45\x15\xba\xdd\x4b\x1a\x9b\x3c\x15\x77\x51\x07\xf9\xa8\x2f\xd6\xcb\xfc\xae\xdf\x1d\x04\x0c\xe5\x66\x4e\xd6\x0e\xd1\xb4\xe7\x0b\xf6\xaa\x64\x7a\x74\x35\x25\xba\x7d\xb0\xcd\xa4\xe8\x37\x6a\xf6\xf2\x0b\x9c\x2d\x98\xbc\xfc\x02\xbb\xb6\x93\xef\x3b\x77\xb9\x85\x38\xca\x67\x2f\xd7\xcd\xe6\x36\x64\x79\xd4\x54\x92\x9f\x9d\xab\xea\x75\x32\x4d\xac\x8a\xb6\x59\x95\x4c\x84\x2e\x4f\xd9\x43\xa5\x43\xe7\x03\x24\x1d\xcc\xb5\x98\x3d\xe4\x88\xdd\x79\x3c\x62\x3f\x1e\xb1\xff\xde\x47\x6c\x49\x9f\xc9\x38\xc4\x98\xb1\x74\xf5\xa4\xfd\x4f\x3c\x18\x24\xf8\x1a\xfd\x1a\x8e\xfa\x9f\x31\x7a\xf5\x09\x0f\x06\xae\x68\x3d\x0b\x85\xf6\x39\xf0\x13\x72\x84\x3f\xf4\xa3\x3e\xf6\xa1\xac\x2d\xa8\xcf\x2d\xe2\x00\xb1\x2a\x6f\xfc\x4b\xf4\x6b\x1c\x07\xe8\xd5\x85\xf3\x90\xdf\xca\x0f\xf9\xff\x64\xdc\x54\x71\x1e\x66\x2c\xb6\x28\xa5\xad\x25\x50\x9d\x9e\x85\xd6\x96\x82\x16\x27\x49\xac\x05\x0f\x5a\xa5\xef\xa8\x0d\x02\xdd\x76\xf6\xb3\x67\x29\xd9\x18\x27\x71\x94\x86\xbd\x11\x25\xb0\x89\x0f\x4e\x24\x68\xcc\xee\x7c\xc8\x5e\x34\x49\xe2\xcb\x30\xc0\x49\x2a\x6a\xf9\xa3\x34\x36\xab\xc6\xa3\x11\xa9\x4a\xa8\x8d\x5b\x8f\xa3\x28\x0e\xe8\xd7\x30\xea\xc7\x63\x19\x32\x01\xc6\x72\x0a\xd0\x2b\xd7\x2c\x1c\x63\xb2\xd8\xc2\x14\xd5\x51\x8a\xfb\x71\x14\xc0\xee\x18\x46\x17\x23\x9c\xc5\x11\x0c\x27\xe9\x5e\xc1\x41\x9f\xa3\xaa\x1c\xf7\xf9\x4b\xb4\x29\xba\x22\xe9\x19\x48\xdb\xa0\x01\xbe\x91\x5e\x72\x5c\x64\xad\x83\xf3\xf0\x47\x24\x94\x61\x12\x47\xf1\x34\x1d\x5d\x43\x18\x0c\xc7\x3e\x4c\x3e\x59\xce\x23\x28\xf0\x33\xdf\x79\x42\x56\x7b\xab\xa8\x3c\xa2\x40\xe9\x3c\x01\x23\x9f\xd4\x7e\x50\x7a\xaf\x24\x37\x8c\xa3\x34\x26\x5b\x17\x21\x8a\x0a\x25\x8d\x95\xfd\xe8\xd2\x1f\x85\xc1\x11\x2b\x5f\x91\x65\x1e\xee\x85\x0d\x83\x21\x49\xf8\xea\x1e\xcf\xc8\x7c\x25\x8b\x8f\xe8\x3b\x40\x69\x85\xf6\xde\x83\x6e\x32\x63\x0b\xe9\xfc\xc2\x4e\xe5\x9b\xea\x5c\x51\x61\x96\x81\xe6\x57\xe5\xd0\x29\xde\x48\x98\xfe\x42\xd0\x3d\xa6\x54\x88\x85\xa0\x26\x75\x33\x1b\x26\xf1\x15\x52\xbb\xa7\x97\x57\xba\xc3\xba\x49\x3f\xad\x94\x3a\xf9\xfb\x0b\xcd\x3e\x48\xb3\x85\x24\xa0\x9f\x4b\x85\xf4\x33\x9f\x18\x00\xb8\x41\x11\x52\xf0\xdc\x52\xb4\xc1\x53\x67\x4a\xb2\x71\x11\x75\xdc\x0f\x21\x98\x73\x4f\xe5\x7e\x06\xb2\x84\x3c\x4f\x3a\x85\x93\x44\x17\xf1\x2d\xbd\xa9\xea\xe6\x36\xe4\x4f\x81\xb3\x08\x8d\xcd\x1f\x32\xa3\xb6\xdc\xbe\x21\xe4\xb2\x6c\xaf\x0a\x09\xea\xc1\x39\xdd\xc7\x06\x1b\x35\x16\x9d\x0c\x48\x81\xd7\xe4\xbb\x45\xc9\x44\xeb\xdd\x07\x61\x42\x0b\xdf\x19\x61\x02\x4e\x32\x75\x72\x26\x73\x3b\x52\x4c\xef\x81\x16\x55\x1a\xe4\x7a\x36\x98\x8d\x0a\x6f\xe5\x4e\xa4\x97\xce\xa3\x3d\xa5\x43\x82\xe8\xd0\x9c\xed\x0f\x67\x62\x5f\x25\xd2\x26\x3f\x13\x32\x91\xcf\xa0\xb8\x8c\x4f\x95\x5d\x35\x57\x48\x4b\xa2\xae\xba\xeb\x3b\xb7\xfb\x79\x3b\x77\x46\x8e\x54\x4c\x70\xd1\x11\x25\xdf\x8e\xc4\xa7\xb9\x1c\x9b\xc6\xfe\xbf\x01\x68\xfb\xc1\xdc\x25\x63\xf9\x2a\xcc\x92\x38\x26\x59\x1c\xc4\xa8\x3f\xc2\x7e\x34\x9d\xa0\x08\xe0\x93\x01\x16\xc7\xf6\xa2\xa1\x92\xb0\xb7\xac\x3c\x8a\xa4\x1c\x10\x45\x34\xae\x8e\x25\x11\x8e\xce\x68\xe9\x73\x22\x24\x91\xea\x1b\x88\x02\x09\x83\x0d\x03\xd0\x86\x0d\xe4\x46\xfe\xf3\x86\xe7\xc4\x5e\x5d\xd5\x47\x5f\x61\x00\x4c\x00\x53\x77\x73\x86\x50\x45\xac\xf0\x39\x93\x1b\x4f\x84\x50\x4a\x44\x50\x66\x46\x0b\xa7\x9b\x8b\x90\x1c\xe9\x42\x5d\x77\x4c\xea\x58\xe6\xdc\x98\xdb\xc2\x91\x17\x20\x54\x22\x85\xba\xbc\x43\xd4\xb2\xcc\x32\xc8\x2f\xa5\xe1\xc9\xf1\x67\xa3\x53\x61\x1a\xd5\xcf\xf8\x3a\xad\xe4\x75\xab\x5c\xcb\x0b\xc9\xe2\xd1\x4f\x3f\x21\xd7\x18\x12\x62\x4a\x4e\xe9\xfb\x8a\x52\xe8\xa5\x3a\xce\xba\x00\x5c\x30\xde\xf9\xee\x93\x60\xc2\x0b\x88\xfc\xcf\x87\x7d\x8c\xfb\x43\x3f\x0a\xd3\x31\x3f\x86\x16\x33\x07\x00\x50\x3c\xbc\xb4\x0d\x79\x60\x3f\x63\x3c\x11\xf9\x03\x78\x67\x57\x9f\x7f\x4a\x87\x61\x44\x1a\x9a\xf5\xe3\xf1\x64\x84\x67\x61\x76\xbd\xd1\x86\x23\x19\x29\x40\x08\xa2\x42\x36\x87\xcf\xf8\x9a\x6a\x0a\xc4\x68\x4a\xe3\xb5\xba\x8a\x12\x3c\x8e\x2f\x31\xf2\x47\x23\xe8\x55\xea\x21\x3c\xeb\xe3\x49\x06\x62\x3f\x7b\x25\x97\xcf\x86\xf8\x1a\x45\x98\x8e\x48\x0f\xb3\xfa\x01\xe9\xf1\xd4\x1f\x8d\xae\x51\xef\x1a\x86\x8c\x0c\x0f\x4b\x05\x00\x34\xf3\x2b\xd9\x90\xc2\xe8\xa2\x52\x95\xf6\x81\xca\x0f\x4a\xef\xd0\xd7\xaf\x04\xdf\x95\x30\x0a\xf0\xec\x70\x50\x01\x37\x45\x42\x6c\x1f\x9f\x55\x61\xf2\x97\xeb\xfa\x06\x21\x51\xd8\x67\x7c\x7d\xbe\x22\x56\xa2\x6e\x0e\x6d\x52\x24\x29\x6f\x98\x26\xff\x85\xc9\x13\x4e\x99\x64\xde\xfb\xd4\x36\x17\xc5\x51\x19\x9e\x40\x4d\x6a\x8b\x68\x92\x59\x0c\x9b\x2a\x50\x07\x15\xa2\x0e\x01\x67\xe9\x4c\x8a\x33\xa5\xf7\x04\xb0\xa4\x8a\xf4\x50\x7f\x65\xe7\x74\xef\xe3\xd1\xe1\xbb\x77\xfb\xef\xdf\x7c\x3c\xdd\x3f\xd8\x39\xfc\x70\x2a\x1f\x8f\xca\xcc\x80\x29\x54\x29\x12\xd3\x83\x1c\x1d\x4d\x99\x8c\xe0\xb5\xed\x67\x3e\xda\x44\x67\xe7\x2f\xd5\xf7\xfb\xe0\x6e\xcc\x5f\x97\x5b\xaa\x02\xe0\xca\x64\x9a\x0e\x2b\x3a\xdd\x33\x11\x4f\x29\xbd\x1f\xa4\xb4\xf0\x67\x7c\x5d\x35\xc6\x20\x07\xb8\xc0\xe0\x95\x12\x37\x05\x64\xd6\x28\x5f\x52\x63\x7f\xa2\x30\xc9\x10\xc8\x16\x18\x0a\x90\x18\x21\x4d\x75\x98\x0e\xfc\x89\xa4\xba\x90\xf4\xda\xaa\xa7\x38\x15\x5c\x81\x6b\x54\xff\xd0\xc7\xe0\xc0\x9f\x9c\x41\xb5\x10\xb6\x78\x3e\x32\x67\x50\xfc\x5c\xf2\x48\x17\x8d\x2b\x7e\xf3\x68\x61\x99\x39\x56\xa5\x66\x25\xbc\xc9\xe9\xe1\xf6\xe1\x06\x27\x32\x34\x8a\x2f\xfe\x4b\x97\xaa\x63\x87\x5c\x7d\x57\x49\xba\x84\xb2\x20\xb5\x1e\x1d\xd9\xb7\x95\xb1\x3f\xa9\xb8\x8c\x15\xf8\x1f\xd8\x2f\x06\xf9\x28\x93\xb1\x67\x47\xbd\x30\x90\x1d\x6f\x04\x45\x7c\xc6\x28\x9d\x26\xa0\x27\xe6\xcc\x2a\x4c\x51\x9a\x85\x84\x1e\x28\x27\xc7\x01\xf2\x07\xe0\x20\x94\x24\xe1\xa5\x3f\xd2\xf6\x5a\x05\x26\x19\x10\x70\xfb\xa7\x4b\x23\x0c\xce\x75\x14\xf3\x2e\xad\xf4\x73\x7b\x00\xb5\x8e\xf8\xe2\x74\x98\xe1\xba\x13\xf9\xd3\x0d\xc2\x23\xa6\x67\xb6\xd4\x18\xf8\xa3\x14\xcb\xb7\x6c\xcc\xed\x69\xee\x98\x8a\x74\xfe\xac\x4d\x74\x0b\x18\x64\x5e\x60\xc6\xa5\x45\xeb\x38\xfc\xbf\x34\xc6\xf3\x07\xa8\x59\x62\x1c\xcb\x2b\x06\x90\x42\x61\x52\x2f\xa1\xa2\x3a\x4a\xda\x62\x77\x0f\x93\x8a\x8b\x5b\xcf\x80\xe4\x4b\x4e\x57\xc6\xa5\x63\x3d\xa8\x86\x7a\xe3\xa5\xa5\x5e\x32\x53\x57\x30\x85\xf4\x8f\x1b\x0d\x08\xed\xc3\x94\xe1\x3f\x6e\x34\xc1\x0d\x75\xad\xcc\x1d\x19\x8b\xb9\x89\xb3\x2c\x8c\x2e\xec\x9e\xbd\xc0\x98\x02\x29\x73\x2d\xda\x14\x3e\x6b\x2f\x8d\x12\x79\xa4\x67\x61\x1f\xe4\x0a\x5a\xc4\x1a\x65\xfd\x26\x28\xaf\x3f\x5e\xeb\x3d\x5e\xeb\xfd\xcd\xaf\xf5\x58\x44\x5f\x76\x6a\xb9\x4d\x54\xdf\x79\xe6\xb0\x8e\xdc\x17\x5a\xea\x8b\x45\x0c\x67\xf9\x92\xae\xb3\xc3\xc1\x56\x10\xa4\x30\x74\x62\x77\xf3\x23\x50\x4b\xa5\x68\x4a\xc5\x2f\xe6\xf4\xe6\x11\xe1\x2b\xcc\x20\x52\x1e\x82\xa4\x00\x74\x53\xa5\xbb\xfd\xd3\xa7\xf2\xf9\x80\x9d\xcf\x9e\xea\x4a\x22\xb2\x6d\x3e\x65\xd7\x56\x52\x39\x89\x57\xd1\x38\x3d\xdc\x95\x8e\x94\x8b\x23\xe6\x70\xa5\x70\x34\x26\x37\x91\xb1\xb7\xa8\x1a\x5d\x42\x11\xdd\xb7\x79\x4f\x53\xcb\x66\x61\xb3\xc7\xe1\x7f\xea\xbe\xa5\x6f\x4f\x2e\xdd\xa5\xb0\x10\xe4\x81\x88\x00\xe5\x9f\x7e\x02\xdc\xa9\x62\x2a\x8c\x2e\x80\x1b\x57\x15\x88\xfc\xfa\x62\x5e\x4a\x53\x0a\x51\xf6\x52\xbe\x6d\x27\x85\x34\x34\xf2\x53\x68\xe6\x24\x23\x93\xfd\xc3\xe6\xa6\x31\xd0\xfc\xcf\x78\xb1\xba\x4a\x33\xb7\x2b\x24\x05\x4b\x2d\x4b\xa6\x44\x66\x4b\xd2\x0c\xa5\x31\xb5\x73\x9c\x4c\x80\x75\xc3\xd9\xd9\x8f\xae\x33\x72\xe0\xf7\x50\x0f\x0f\x08\x03\xa0\x4b\x9c\x5f\xa1\xc2\x68\x50\x25\xa3\xf6\x17\x0e\x2a\x3f\x58\xb0\xfe\xe9\x27\x64\x1b\xf9\xaa\x51\x1f\x99\xd7\x0d\x04\x55\x8b\x7b\xb4\xb3\xb3\x31\xe5\x9b\x11\x9e\x65\xa8\x7b\xf4\x01\xf5\xaf\xfb\x23\xec\x89\x6e\xc2\xb0\x8b\xcd\x06\x7a\x02\x5d\x66\x36\x4b\x93\x24\xee\x13\x9e\x95\xd2\xd1\x31\x5a\x91\x8e\xc1\x62\x99\xd8\xe6\xc2\xd2\x11\x46\x1a\x7a\xa9\x1b\x0f\xd5\xca\xf4\xcf\x32\xac\x94\x14\x5c\xa2\x99\x64\x0c\xf6\x54\x00\xd0\xcd\xd8\x24\x5d\x6c\xc5\xb4\x83\x72\xa4\xfb\xd5\x2d\xa1\x6e\xbc\x5c\x08\xdf\x0f\xbc\x9c\x4d\xb0\xf7\xb2\x0e\x89\xea\x0c\x80\xb3\x90\x75\xc2\xed\x24\xf7\xad\x69\x39\x9d\xb9\x36\x8b\x4d\xe6\x35\xf9\x0f\xc9\xba\xa6\x7d\x22\x47\x4b\xca\xa9\x25\xca\x85\x97\x96\xa4\x72\x62\xbd\x4a\x27\x7d\xf8\xe0\x07\x81\xb0\xed\x92\xf2\x7e\x8a\xef\xfa\xf4\x48\x07\x07\x89\xc5\x72\xe3\x2d\x78\x2f\xd9\x8a\x53\x81\x4e\x8c\x84\x6c\xe9\x9b\xb7\x5b\x68\xb1\x18\x0e\xf2\x57\xaa\x56\x2a\x67\x41\xa0\x55\xd0\x90\x2f\x85\x84\x3c\x8b\x6e\x89\xd6\x20\x30\xa1\x72\xae\x48\x73\x50\x2d\x18\x6d\xab\x54\x2b\x10\x72\x1b\xb0\x11\x59\x5d\xcd\x76\x41\x64\xdf\xc7\x1c\xa5\x8f\xb2\xef\xdf\x5d\xf6\xcd\x4d\xda\x78\xc2\xde\xfb\xf2\xd1\xdd\xef\xf9\x91\x2a\xed\x86\x3d\x5f\xb8\xde\xe2\x19\x55\x57\x17\xb9\xee\x9e\x8c\xfd\x24\xdb\x61\x05\x73\xb7\x5b\xe7\xd5\x18\xa8\x95\xa0\x59\xde\x17\x4d\xe7\x2d\xbd\x16\x97\x60\x27\x59\x12\x46\x17\x37\xe0\xda\x62\x7b\x4f\xa4\xe5\x9e\x1f\xc9\x9f\x7e\xf1\x47\x53\x7c\x83\x2e\xc9\x7f\xd8\x75\x08\x81\x3c\xc0\x09\x9e\x73\x43\xea\xa9\xe6\x05\x10\xa4\x86\xe1\xa4\x8a\xc5\xd9\xd0\x03\x8c\x88\xb4\xee\xd1\x96\xcc\x2d\x0c\xd4\x6e\x74\x94\x21\xdb\x74\xcf\x8f\x2a\x59\x5c\x65\xaa\x22\xd0\xe1\x90\xcf\x5c\xe5\x53\xb1\x58\x11\x91\x7a\x90\x26\xa2\xf2\x2c\xa4\xea\x1b\x0a\x91\xf9\xe9\x3e\x33\xf5\xc7\x0c\xe2\x76\x98\x10\x59\xcc\xe6\x10\xc3\x7b\x74\x1a\x33\xcf\x5e\xb9\x3b\x50\x9d\x41\xaf\x54\xcd\xae\xf1\xf6\x84\x1c\x03\xdd\xb0\x49\xba\xe0\x22\x21\x3c\xa5\x71\x36\x94\x53\x82\x57\xaa\xd0\x08\xc3\x36\x4a\xb3\x30\x9b\x52\x81\xcb\x34\xff\x0a\xf0\x24\x4e\xc3\x4c\xc6\x92\xc1\x15\xe8\x01\x98\xfe\x28\xc4\x51\xa6\x5b\x62\x94\x6e\xd8\x30\xb1\xe0\xa9\xc6\xcd\x11\x5c\x14\x23\x73\xfc\xb8\x0a\xbe\xf0\x2a\x59\x90\xde\x60\x1a\x05\x60\x13\xd9\xc7\x49\xe6\x87\x62\xfa\x1d\xcb\x47\x4c\xec\x62\xeb\xe8\xc1\x97\x90\xc0\xeb\x16\x6b\x89\x8d\x3c\x99\x4d\x2d\xe3\x97\x24\xdb\x0a\xef\xf5\x2c\xce\x25\x5a\x02\x7a\x83\x36\x20\xd1\xe6\x68\x8a\x37\xe8\x7f\xb8\x98\xab\x25\x7b\x77\xce\x0a\x9b\xfc\x7c\x52\x20\xae\x7d\xd8\x47\x9c\x13\x22\xce\x21\x51\x65\x3c\x4d\x33\xd8\xea\xf0\x18\x47\x99\xa0\x9b\xde\x75\x86\xd3\x66\xa3\xca\x84\xf1\x1f\xaa\xda\x44\xb2\x72\xf7\x3e\x7d\xa9\x31\x7f\xbc\x3a\xa5\x54\x34\x8d\xc2\xff\x9d\x62\x14\x06\x38\xca\xc2\x41\xa8\x72\xe2\x52\x73\xcd\x47\xa7\xc4\x0c\x43\x93\x76\xae\xe9\xc3\xae\x23\xed\x41\x2f\x75\x22\xe0\x63\x5c\xf1\x7b\x61\x75\xc5\xcf\x08\x63\x5d\xe1\xe3\xcb\x41\xff\x71\x57\x22\x30\x64\x55\x3e\x8a\xd6\x20\x08\xe6\x7e\xf8\xe3\x46\x93\x88\xae\x3c\x71\xff\xcd\xb9\xd7\x2e\x95\x2a\x99\x69\x77\xdb\xa5\xf2\xb5\xbd\x94\x95\xf0\x31\x91\x2f\x06\x7e\x3f\x8b\x93\x6b\x8f\x2a\x94\xc9\xc0\x3e\x21\x6c\x9a\x88\xfa\xf1\x00\x89\xde\x6c\x6e\xa2\x1f\x69\x40\xa6\x1f\xa1\xcc\x93\xd5\x55\xd4\x8d\xc7\xe3\x38\xfa\xe7\xc9\xd3\x27\x4f\x8c\xce\xe7\xbf\x58\x03\x1c\xa7\xca\x8f\x64\x18\x12\xfc\x63\xd5\x43\xd2\x2b\x1c\xf5\x97\x7b\x7e\x8a\x3b\x2d\xed\xc3\x38\x68\xeb\x45\x2f\x27\x9f\x83\x81\xf6\xb2\x1f\x4e\x86\x38\x59\xa6\x90\xab\x2f\x9f\x3e\xb9\x79\xfa\x04\x8f\x52\x8c\xa4\xce\x50\x85\x39\xed\x0b\x1f\x86\x1f\xd1\x4f\x3f\xb1\x0f\x2b\xfe\x38\x10\x7d\xdb\x3a\xd8\x7e\xfa\xe4\x09\xfd\x50\x39\xe3\x38\x7b\x48\x45\x15\x9e\x09\x86\xf4\x03\x45\x0c\x7e\xcb\xf8\x9c\x8b\x51\x96\x11\x63\x0d\xd1\x68\x18\xa8\xd2\x4b\xe2\xab\x14\x27\xd5\xa7\x4f\x9e\x88\x11\x8b\xe3\x6c\xa5\x9b\x5c\x4f\xb2\xf8\x9f\x27\xb4\xea\x0d\x9c\x9e\xe4\xed\x47\x7c\x47\x7f\x3c\x7d\xfa\xa4\xa2\x1e\xc7\x9e\x20\xaa\x11\x39\x19\xc6\x49\xd6\x9f\x66\x29\x7d\x43\x96\x4d\x17\x6d\x22\x5e\xf7\xa5\xf4\xfa\xe3\x28\xec\x91\x4f\x2b\xa3\xb0\x27\xbd\x07\x65\x58\x17\x3a\x45\xbe\x92\x52\x2b\xd2\x3b\x05\x82\x3f\xba\x88\x01\x04\xf9\xf1\xf2\xa9\xc0\xe2\x5d\x1c\x7f\x9e\x4e\x50\xe6\xf7\x46\x58\xc2\xe4\xe4\xf5\xe1\x6f\xec\xcc\x27\xde\xed\xbf\xff\xe5\xa3\xed\xfd\xc9\x87\xd7\x1f\x0f\xf6\x7f\xfb\x58\x73\x7d\xa8\xbb\x3e\x34\x5c\x1f\x9a\xd6\xb6\x5d\xed\xc8\x1f\x8d\xb6\xe4\x8f\x46\x7b\xf2\x47\xde\xa6\x18\x9a\x6e\x3c\x9e\x90\x83\xe2\xc8\x1c\x22\xdb\x94\x6a\xb5\x82\x78\xda\x23\x52\x3f\xa9\x95\x17\x00\x16\x2b\x63\x81\x64\x4b\x85\x10\xa2\x09\xa2\x10\xbd\x42\x8d\x76\xe7\x25\x0a\x97\x96\x14\xf0\x42\x46\x44\xaf\x50\xbd\xb1\x6e\x7c\x23\x7f\xc1\x59\x78\x8e\x36\x09\x8c\x57\xa8\xfe\x52\xfd\x4e\xaf\x52\x0b\x6a\x55\x68\xb5\x2a\xfa\x1d\xd5\x66\xf5\x7a\x4f\xaf\x9f\x3f\xde\x3c\x55\x7a\xfd\xab\x3f\xfa\x8c\xde\xec\x56\x1a\xbf\xaf\x57\xd5\xde\xce\x68\x84\x44\xf5\x5d\xa8\xbd\x5c\x68\x04\xa4\x41\x4e\x7b\xf1\x4c\xfd\x08\x86\x06\xa4\xcd\x59\x88\x7e\x47\x95\x59\xde\x21\xf6\xbb\x21\xfd\x6e\x4a\xbf\x5b\x55\xad\xb3\x00\xa5\x92\xce\xd0\xcf\x3f\xff\x8c\xd6\xa1\x64\x3a\x43\x3f\xa1\xda\x6c\x30\xa0\x03\xd4\x69\x6a\x55\xc8\xea\x38\x9b\x91\x81\x4c\x67\xda\x27\xbe\x78\xce\x52\xf8\x3e\x7b\xf9\xd4\xd9\xa9\xf1\x74\x94\x85\x93\x51\xd8\x07\x2d\x81\xd9\xbd\x19\x21\xe3\xe0\x6c\x76\xfe\xd2\xf2\xad\x45\xbf\x35\xac\x1f\xd7\xe9\xc7\xd6\x79\x41\xeb\xe9\xb4\x87\x40\xbe\xf1\xd0\x38\x9c\xa1\x7e\x3c\x9a\x8e\xa3\x54\xa1\x7e\x19\x26\x91\x14\x2a\x01\xf4\xea\x39\xa1\x99\x5a\x9d\x8f\x14\x7b\xac\xd5\x6b\x35\x7d\x68\xc5\x4a\xa6\x83\x55\xc9\x60\x62\x5a\x55\xf4\x95\xfc\xa6\xe3\xed\xa8\x52\x97\xab\xd4\x3b\x52\x95\x7a\xc7\x55\xa7\x21\xd7\x59\xaf\xa2\xbc\x4e\xc3\x98\x75\xc1\x0d\x68\x9d\xac\x60\xa4\xc2\xe8\x52\x1e\x2d\xf2\x58\x7a\xc4\x66\xeb\xd2\xf8\x30\xf2\x6c\xb1\x57\x35\xfe\xa2\xa1\x0c\x69\xe1\x88\x2a\xfc\x91\xd1\x58\x99\x61\x55\x58\xa7\x52\x6f\xce\xd8\x2a\x6c\x55\xa9\x38\x67\x80\x15\x96\xcb\x2a\x16\x8d\x32\x5c\x16\x80\x1e\x18\x27\x26\x27\xfc\x61\x66\x65\x82\x8c\x01\x6c\x2e\xc0\x01\xa1\x4a\x03\xfd\x8e\x82\x33\xf2\xbf\xd9\x3a\xfa\x1d\xcd\x1a\xe7\xe7\xfa\x42\x82\xb2\x21\xfa\x7d\x13\x0a\xce\x42\xa3\x80\xc2\x24\xe1\xe7\x0d\x9c\x69\xc5\xbe\x72\x94\xe0\x3e\xed\x5c\x80\x8e\xfb\x71\xc4\x36\x98\x7c\x57\x3a\xee\x1e\xbe\x27\x7b\x44\x6d\x56\xab\x79\xa8\x36\xab\xd5\xe1\xdf\x06\xfc\xdb\x82\x7f\xd7\x3d\xa0\x05\xf2\x6f\x03\xfe\x6d\xc1\xbf\xeb\xf0\x6f\xbd\x47\xfe\x6d\x76\xf2\xcd\xec\xf9\x73\x86\xd4\x73\xb4\xb5\x73\x42\xe3\xb1\x23\x2a\x0e\x21\x22\x10\x24\x61\x36\x1c\xaf\xf0\x32\xab\x39\x2a\xa4\xf4\x26\x13\x1f\x56\xe8\x83\x24\x61\xac\xe0\x59\x46\xa3\x07\x88\x2e\x7f\x0c\xe2\x63\x9c\xe2\x6c\x03\x39\xb6\x48\x36\x08\x27\x9f\xc3\x09\xb3\xfc\x8d\x07\x28\x3a\x8e\xe1\x34\x36\xf4\x53\xd4\xc3\x38\x02\xef\x00\x76\xbf\xe5\x47\x01\x98\xf0\x05\x61\x80\xa2\x38\x63\x66\x98\x26\x29\xd0\x64\x2e\x1c\x12\x37\x17\xfd\xf8\x19\x5f\x1f\x25\x61\x9c\x1c\x53\x0b\xe0\xcd\xcd\xfc\xbd\x95\x74\xb8\x59\x98\x36\xa7\x66\x07\x54\xf1\x8d\xff\x71\x83\xc3\x4d\x7b\xf3\xf9\x5b\x0b\x7f\xfe\x8c\xaf\x7f\x8d\x13\x30\x62\xfc\x8c\xaf\x57\xae\xc8\x6f\x7b\xb1\x93\xf0\x0b\x66\xa5\xd2\xf0\xe2\x35\x61\x40\x68\x15\xb5\x8a\x96\x91\xf0\x03\x48\x60\x80\x4c\xb0\x7c\xe4\x38\x8e\xf9\x33\x6f\x70\x09\x75\x4a\xb5\x40\xfa\x9f\xf6\x87\x98\x1c\x3f\x10\x11\xa1\x2d\x7d\x48\x8f\xe3\x2b\x02\xbb\xc2\x9b\x59\x22\xbb\xf4\xf3\xc2\x3e\xc8\x70\xed\xc3\xc2\x1b\x95\xc6\x59\x7a\x77\xa6\x2f\xd5\xdc\x44\x94\xa0\x43\x45\x0f\xfa\xf3\x15\xc3\x90\x3d\x5b\xa4\x10\xc4\xc8\x4e\x94\xa7\x83\x64\x2d\x47\xfe\x24\x54\xce\xa0\xce\x39\x1d\x59\x98\x71\xf6\xc6\xc2\x6a\xdc\x0c\x0b\x49\xfb\x89\x01\x1c\xa2\xe9\xe8\x43\x29\xa3\xfd\x03\x43\xfc\x1f\x02\x71\x27\xe6\x6c\x16\x8e\xe3\x0c\x11\x92\x74\x17\xca\xe4\x3d\x40\xdd\x02\x0a\x21\x9f\x4c\x7b\x65\x20\x83\xf8\xc4\x61\x9e\x4b\x7b\x1b\x7c\xc8\x77\x2a\x26\xa3\x9d\x4b\xbb\x98\x5c\x62\x5d\x29\x00\x98\x32\xc8\xec\xf5\x1c\x6c\x0f\xc2\x19\xb0\xed\x22\x6c\x7f\xdf\x04\x26\x7e\xc6\x06\x79\x35\xa7\x8e\xaf\xa8\xc6\x50\xb7\x4c\x36\xca\x27\x1c\x48\x8b\xad\xbb\x9f\x51\x87\xf0\x33\x6d\xc2\xd0\xe6\x26\x6a\xcd\x9b\xb4\xef\x6e\x68\xed\x7d\x76\x8c\xb8\x6b\xcd\x18\xb4\xce\x86\xe4\x1c\xfd\x4e\x64\x09\x73\x11\xcd\xe5\xe6\xb2\x4c\x57\xcc\x66\xc2\xe8\xf2\xad\x85\xd3\x18\xaf\xdd\xcc\x86\x14\xcd\xf9\x8d\x78\xca\x59\x0e\x7f\xe5\xe0\x3a\x32\xc3\x62\x7c\x74\x59\xd4\xb1\x11\x2f\x1c\x19\x79\x33\xff\x28\x20\x1a\x27\x3b\xb9\x5f\xce\xd4\xb2\x82\x9b\x87\xf8\x2b\xd4\x02\x47\x16\xfa\x50\x44\xfb\xea\x5c\x9c\x71\x08\x4c\xd2\x5c\xb0\x23\x05\xc0\x54\xa1\x5b\x5d\x43\x84\x14\x55\xe1\xda\xb1\x94\xce\xd1\xef\xee\xc5\xe9\xf8\x53\x85\x6f\xfb\x0a\xd4\x11\x68\x9e\xa9\x4b\xd1\x3e\x07\x4e\x49\xd6\x93\xa6\x07\x47\xfd\xe4\x7a\x42\x2d\x63\x65\x39\xef\xc0\x43\xf1\x60\x90\xe2\xcc\x98\x19\xba\x46\x82\xb8\x2b\xea\xe5\x85\x3d\x73\xaf\xf6\xf2\x13\x62\xfe\xb3\x9e\xff\x6c\xe4\x3f\x9b\x1e\xb0\x18\xf9\x94\xa1\xe0\x1a\xe0\x45\x71\x25\x5c\xf3\xca\x9f\xa0\x46\x14\x80\xec\xd9\xca\x86\x0e\x21\x86\xd0\xf7\xc1\x19\x05\x43\xe4\x17\x7d\x48\x95\x6f\x6a\xd9\x66\x41\xd9\xa6\xf5\x48\x54\x66\x08\x55\x5a\xf5\x54\x02\x55\x1f\xeb\xea\x63\x43\x7d\x6c\x7a\x42\x61\x61\x6c\xde\xab\xab\x68\x9f\x9c\x7c\xbf\x8b\x31\xb2\x4f\xba\x32\x4c\xd6\x59\xf7\xd0\xdd\xc8\xcd\x46\x34\xec\x40\x50\x5a\xb2\xb6\x0c\xec\x1b\xcc\x62\x85\xc2\x85\x24\x15\xd5\x09\xa6\x16\x1d\x57\x4d\x1a\xac\x73\x78\xfd\xbb\xc2\x6c\x6b\x36\x0d\x50\x5a\xd7\xa7\x43\xab\x65\xcc\x0f\xd4\x6a\xa8\xb5\x1a\x7a\x2d\xab\xb6\x29\x6d\xea\xd3\xa9\xd5\x6a\xda\xd4\x50\x6f\xb5\xb3\x83\xfd\xe8\x2f\x6f\x81\xb6\x13\xc3\xb1\xe5\x8c\x23\xf6\x5f\x3a\xaa\x9b\xa8\xfe\x92\xfd\x7c\xc5\x67\x88\xbd\x70\xec\xbb\x30\xc7\xe1\x20\x03\x4a\xf7\x1c\x8a\xb2\xc2\x89\xe3\xa8\x67\x64\xf2\x24\x75\x4d\x4d\x48\x5e\xbf\x4b\x8a\xae\x4a\x5a\x37\xe4\xae\xdf\x25\xa5\x56\x25\x6d\xe8\x52\xd7\xef\x92\xfe\x2a\x6d\x4a\xaf\x8d\x6d\x78\x69\xc9\xb6\x01\x00\x72\x75\x15\xb9\xba\x03\xb9\xc6\x1c\xe4\x9a\x85\xc8\xd5\x6e\x89\x5c\x43\x45\xae\xe1\x40\xae\x39\x07\xb9\x5a\x21\x72\xf5\x5b\x22\xd7\x54\x91\x6b\x3a\x90\xab\xcd\x41\xae\x5e\x88\x5c\x63\x2e\x72\x56\xd2\xfd\x30\x01\x1b\xa2\x34\xf3\x33\x6c\x16\x00\x76\x92\xd5\x2c\x1d\x03\x96\x91\xe9\x7a\x34\xf8\x42\xe6\x22\x6b\xd8\xbe\x90\x81\xc8\x74\xed\xb8\x55\x89\x62\x5d\x4f\x73\x78\x1f\x2c\x9f\x0a\x3d\x79\x48\x6b\x47\x3f\xb5\x58\x96\x8f\x7e\x6c\x31\x57\x90\x72\x6e\xc9\x97\x50\xb5\x1c\x25\x88\xf5\xc3\xb1\xab\xbb\xb1\x33\xd7\x8f\x81\x9d\xb1\x84\x54\xec\x6a\xb7\xc1\xae\x21\x61\xd7\x70\x63\x67\x2e\x20\x03\x3b\x63\x0d\xa9\xd8\xd5\x6f\x83\x5d\x53\xc2\xae\xe9\xc6\xce\x5c\x41\x06\x76\xc6\x22\x52\xb1\x6b\xcc\xc7\xce\xa4\x56\xcc\x03\x5b\xdb\xe5\x12\xba\x0d\x5b\xd6\x91\x2e\xe4\x18\xcb\x49\xdd\x5c\x2d\xab\xca\x10\x7d\x9a\x2e\xd9\x87\x1d\x85\x37\x50\xa3\xdd\x59\x6d\x36\x98\x06\xba\x6a\x53\x05\x73\x89\x45\x08\x48\x29\x73\x1c\x66\xaa\xe1\x67\x29\xcb\xf7\x84\x20\x85\xf7\xc0\xef\x63\xa1\x23\x16\x40\xfe\x1b\xcf\xfc\xf1\x44\x9c\x94\xf3\x0f\x7c\x4e\x29\xac\x0c\xcf\x32\xe9\x76\x7b\x65\x6b\xe7\x64\x85\x9d\x23\x2a\x63\x6e\x91\xfe\x19\x5f\x7b\xa8\x3f\xb8\x10\xd2\x7c\x0e\x65\x32\xf2\x09\x12\xb3\x0c\xe9\x50\x98\x84\x5f\xc9\xdb\xb1\x01\x62\x3a\xed\xae\x45\x89\xfd\x91\x46\x4d\xdd\xc3\xa3\x09\x4e\x2a\x5b\x3b\xf4\x5a\x9f\xea\xec\x9f\x3e\x61\x36\x2b\x72\x93\x2f\x9f\x3e\x85\x08\xb8\x60\x40\xa2\x58\x15\x6c\xb4\x1b\x1e\xb7\x4b\xd8\x68\x83\xed\x88\x64\x99\xb0\xd1\x6e\x79\xb9\x49\xc2\x46\x1b\x5c\x18\xc7\x41\xfb\xc7\x8d\x4e\xfd\xe6\xdc\x6b\x37\xee\x64\x2d\xf2\x2d\xcd\x44\x1e\xcc\x98\xe3\x1b\x9a\x65\xd0\x95\xf0\x1c\x31\x03\x0a\xd2\x3c\xea\xc7\xe3\x49\x1c\x41\xc8\x75\xf2\x6d\xf5\xe9\x13\x31\xef\xa3\xb0\xb7\xc2\x8a\x7e\xfd\x2a\x1b\x00\x08\xa7\xcf\x7b\x36\xee\xf0\x53\x9c\x5b\x75\xf8\x29\x96\xbe\xfd\x1a\x27\x01\xb8\xa5\x8b\x02\xe2\x8d\x0c\x61\x3a\x00\x7b\x31\xa0\xf5\x2d\x7e\xcb\x93\xc3\xb4\x7e\x56\x30\xc3\xe0\x59\xd5\x25\x0b\x55\x7a\xff\x21\x1b\xac\x03\x14\x1c\xf5\x57\xc8\x83\x86\x75\xa7\x25\xbe\xd2\xc7\x22\x43\x14\xf1\x65\xe7\x72\xf2\x76\x7b\x37\xbf\x6c\xa2\xcf\xd6\x1b\xac\x5e\x4a\xcd\xf3\xc8\xb2\xe2\xb7\x58\x19\x1e\x4f\x46\x7e\x66\x63\x50\x22\xc8\xf4\x1f\x11\x0b\xc8\xc3\x35\xa8\xe0\x54\x20\x78\x1d\xe8\xfd\xc2\x2f\x78\x85\x07\x98\xdc\x40\x2d\x54\xa9\x37\xd6\x51\x2f\xcc\xd2\x6a\x11\xc0\xf0\xd2\x02\x6f\xff\x97\xdb\x82\xfb\xb8\xf3\xbe\xfb\xf1\xb7\xdd\xc3\xe3\x83\x8f\x07\x87\xdb\x3b\x68\x0b\x42\x1b\x64\x7e\x94\xa1\x04\x4f\x12\x9c\xe2\x28\x0b\xa3\x0b\xae\x88\x21\x64\x38\x8e\x83\xbc\xef\x56\x98\xdb\x3b\xa5\x60\x32\x76\x6a\xc0\x94\x2e\x05\x35\x93\x23\xf1\x68\xa7\x28\xcb\x25\x61\x3e\x9b\x14\xdd\x2e\xb8\x7d\x4f\x13\x30\x78\x10\x39\x3e\xe4\x22\x4a\x71\xa9\x77\x82\xee\xc9\x1c\xa0\xd3\x21\x26\xa3\x9e\xc5\x68\xca\xdc\x04\x08\x0b\x40\xa4\x30\x80\x56\x40\xae\xe6\x0f\xfd\xc1\xc5\x06\x90\x2e\xc7\xb5\x2a\xef\xa8\x06\xb6\xb0\x5d\xa4\x14\x36\x23\xbf\x30\x72\x4d\x86\x0d\x7d\x6a\x8f\x29\xe1\x4e\x48\x8f\x20\xff\x19\x5f\xaf\x58\xcb\x72\xcf\xd0\xfe\xe0\x02\x55\x0e\xa1\x15\x7f\x54\x85\x3a\x7d\xdb\xe0\x95\x1c\x03\xb5\x2d\x1e\x47\x94\x4e\xe8\x0d\x21\x11\xde\x3b\x42\x28\xfd\xa2\x3e\x91\x73\x45\xd8\x77\x7f\x57\xa5\x04\xb3\x00\x52\xa4\x05\x79\x8f\xe7\x57\xcf\x2b\x74\x9b\xde\xa1\xc3\x1c\x27\x15\x76\x79\x06\x43\xe8\xa1\x3f\x50\x78\xb9\x81\xc2\xcb\x9c\x37\xde\x28\xa6\x07\xca\x7c\xab\x90\x36\x94\xb0\x50\x4c\x72\xd0\x35\x00\x72\xe2\x10\x5a\x9f\xdd\x38\xab\x6b\xd5\x22\x7b\xe8\x12\x5a\x49\x7a\x72\x2c\xc4\x47\x7a\xba\x5f\x7a\xda\xc6\xf7\x45\x4f\x02\xd2\xdd\xe8\x49\xe5\xd3\xb7\xa0\xa7\xfd\x28\xcc\x42\x7f\x14\x7e\xc1\x29\xf2\x51\x84\xaf\x46\xd7\x0c\xc3\x80\x0d\xc7\x7c\x5a\xe2\xbb\xc6\x6c\x10\x27\xe3\x83\x38\xc0\x68\x87\xfa\xaa\x41\x98\xe6\x9c\xd3\xc5\x89\x4c\xa7\x60\x5d\x0d\x6e\x7e\x9c\x6a\xc5\x26\x63\x27\xc3\xef\x8e\x64\xef\x8d\xac\x2a\xe6\x07\x1b\xa7\xb8\x25\xc1\x85\x51\xa8\x58\xd8\x88\x69\x92\xc8\xc5\xa2\xa2\xde\x9a\x4c\x08\x2d\xc0\x68\xf1\x6c\xd3\xa9\xe5\x9a\x81\x0c\xf1\xa6\xf8\xc9\x37\x45\x4a\x83\xe6\xa9\x38\x23\x92\x33\x35\xac\x8f\x93\x31\x9d\x76\xdf\xa6\xbb\xa1\xf4\x9d\x93\xd4\x66\x4e\x5e\x2f\x6d\x25\xa9\x1d\x0d\xd8\xca\x58\xcf\xe2\x21\x25\x74\xea\x01\x60\xeb\x07\xd8\x17\x55\x4a\x2f\x1c\xb0\xd1\x51\xf9\x30\xc4\x72\x48\x45\x4b\xa0\x3d\xbb\x23\xf9\xb0\x25\x68\xe2\xa6\xcc\x70\x52\xc6\x88\x8a\x1a\x15\x05\x7e\xe6\xa3\x1e\xc8\x5e\x6a\x09\x87\x3c\x06\xa0\x69\xa6\x0b\xee\xed\xac\x03\x3e\xc2\x09\xcc\x65\x3f\x8e\xfa\x09\xce\xf0\x32\x1b\x8e\x51\x7c\xa1\x30\x65\xe9\x5e\xea\x78\xb1\xb1\x86\x78\x1a\x80\x39\x75\x6f\x61\x3c\x05\x07\x12\x4b\xc1\xc1\x02\x9b\xde\xd7\x94\xb9\xc2\x10\xa0\x4c\xd9\x49\x78\x03\x6f\x83\x35\x20\x81\x2f\xb1\x73\x49\xfc\x49\xc0\xa2\x41\xb3\x58\x30\x82\x30\xba\xb8\x07\x6e\x92\x77\x7e\x93\x93\x07\x83\x5f\x79\x46\xda\x7c\xa6\x92\x49\x99\x7a\x57\x1c\x73\x27\x85\xb1\x92\x1b\x5a\x94\x57\x3a\x74\x0e\xee\x81\xa3\xc0\x36\xfb\x3e\x7c\x91\xab\xdb\x68\x8a\xb6\x87\xfc\x4b\x3f\x1c\xf9\xbd\x11\xa6\x66\x88\xa9\x7b\x5b\xfc\xc8\x3b\x53\x9a\xaa\x76\xc3\x88\x6d\x7c\x85\xfb\x14\x83\xab\xee\x33\xef\xe3\x8c\x79\x47\xd3\xa0\x69\x14\x52\xbe\x6b\xa0\x30\x45\x78\x30\xc0\xfd\x2c\xbc\xc4\xa3\x6b\xe4\xa3\x00\xa7\x59\x32\x85\x67\x0f\x25\xd8\x0f\x96\xe3\xa8\x8f\x4b\xed\x33\x65\xa9\x17\xd0\x78\x28\x1a\xa6\xc0\x1f\x9a\x92\xf9\x48\x56\xca\x13\xb1\xa8\xb2\x28\xf5\x8b\x8a\xf3\xc9\x9f\x17\x2d\x4f\xff\xbb\xf9\x5c\x4c\xa1\x90\x5a\x22\x1c\x14\x02\x40\x85\xab\x45\x29\x6a\xb9\x28\x59\x80\x21\x43\x3c\x24\x82\x2a\x5b\x70\x38\x60\xf1\x32\x39\xa7\xde\x95\x26\xc4\xba\xf8\xcc\xda\x73\x95\xcd\xf5\xc6\xfa\x6a\xb3\x21\x7f\xa2\x2a\x11\xdb\x17\x4d\x0e\xda\x40\x75\xe5\xab\x2a\xff\x6e\xa0\x46\x99\xb3\x53\x6a\x55\x65\xfb\xf3\x15\xd9\xc8\xb9\x36\xf9\xa9\x85\x8d\xf4\xe9\x10\x4b\x42\x01\x4b\xb4\xe5\xa3\x21\x68\x8d\x89\x90\x59\x62\x29\x72\x11\x76\x2b\xe2\xf8\x40\x80\x01\xbe\xac\x89\xd0\xc4\xd6\xb5\xa5\x43\xdf\xe0\xb0\xc4\xac\xbd\x4d\x95\xa7\xa6\x23\x37\x64\x5b\xe7\x2a\x53\xea\x6d\x38\xfd\xa6\xc8\x9f\xf8\x94\xe2\x11\xee\x67\xb4\xe1\x93\x2c\xf1\x33\x7c\x71\x5d\x71\x99\x6b\x4b\xda\x67\x10\x17\x37\xd1\x33\xca\x4a\x9f\x39\xcd\xc3\xd8\x6c\x1c\xf9\x69\x4a\xd8\xc4\x6b\x3f\xc5\x81\xe2\x31\x27\xff\x15\x1b\x87\x31\x50\x27\x38\x81\x03\x17\xd9\xd5\xdc\x90\x8a\x17\xb9\x9e\xdb\x8f\xdd\x67\x14\xd8\xa8\xbb\x90\x62\xe4\x24\x33\x36\xf3\x86\xa5\xc8\x6e\x34\x0f\x02\x66\x9f\x07\x71\x71\x43\x51\xf4\x90\xfb\x02\x47\x1f\x03\xcf\x61\xe9\xc9\xc8\x7e\xc3\xe8\xbf\x76\x9f\x73\x27\xb4\xd5\x9b\x22\x0f\x15\xde\x18\xe9\x98\x5b\x26\x54\x67\xdb\x32\x97\xac\x54\x99\x86\xd7\x7e\xf5\xa6\xea\xb0\xd3\x2c\xc1\xfe\xf8\x56\xaa\x6c\x90\xa1\x98\xf2\x59\xb6\xc1\x6f\x36\x96\x7b\x21\x35\xd8\x56\x4f\x34\x54\x3a\x81\x30\xd6\x92\x66\xba\x8e\x2a\xcd\x86\xaa\x98\x96\x14\xbe\x27\x80\x9f\xa6\xf6\xd5\x5f\x16\x78\x84\xec\x5a\xf6\x5a\xdb\x0e\xcb\x45\xc4\x89\x9f\xc0\x71\xcb\x26\x20\x9a\xdb\x1b\x1c\x6f\x72\xeb\x2a\x2e\x34\xfe\xf0\xc3\xb3\xc1\x68\x9a\x0e\x9f\x95\xdb\xe6\x28\x14\xd7\x46\x27\x86\x79\x03\xd5\x8b\xe6\x15\xce\xb5\x90\xd5\x74\x22\xdf\x96\xca\xca\xf3\x8f\x63\x7a\xf6\xed\xae\xb0\x1f\x7f\xdc\xcc\xa7\x10\xc5\x63\x07\xea\x19\x54\x22\xb5\x21\xdd\x6e\xb2\x83\xb6\xe1\x1c\xcc\xde\xcb\x4a\xef\x22\x05\xbd\xac\xa2\x1c\xf3\xe4\x5c\xb9\x7c\xbd\xf0\x6e\xba\xa5\xf6\xc8\xaa\x10\xd4\x33\xcb\xe4\x0a\x7e\xa0\xea\x6f\xb0\x1f\xf2\x99\xe2\xdb\x1d\xe8\x61\xbb\xaf\xbb\x86\x2a\x9a\x73\x94\xf0\x92\x7a\xed\xdc\x46\xf3\x9c\xc3\x28\xd4\x15\x8a\xba\x5c\xd1\x24\xd5\xbb\x95\xc6\x59\x4c\x67\x7e\x40\xfa\xcf\x9c\xce\x5c\x13\xbc\xe0\x74\x5a\x15\xbf\x25\xa7\x53\xd4\xbd\xc3\x74\x16\x29\x7c\xcb\x5d\x1d\x7c\xd3\xe9\xbc\xf3\x74\x15\x2c\x81\x39\xf3\xa5\xeb\x4d\x0b\x26\x89\x6e\x26\x42\xcf\xdb\xb7\x89\x75\xcc\xea\xfa\x12\x6d\xa2\xf0\x52\x9e\xad\xa2\x2d\x82\xed\x98\x34\xae\x74\x77\xe8\x87\x11\xa4\x3c\x71\xdd\xb5\xbe\x06\xbb\x81\x8f\xbc\xf3\x68\xd3\x1d\x7c\x40\x57\xb1\x29\x3b\x08\xa9\x6b\x10\x83\x34\x34\x79\x63\xda\x2e\x21\xee\x44\x5f\x16\x71\x94\xd7\x5d\xbe\x1d\x68\x27\x21\xa9\x09\x65\xee\x48\xaf\x5e\x77\x2d\x7b\x8f\x09\x9e\x36\x71\x24\xc2\x7f\x66\x5c\x8d\x41\xa9\xd4\xcf\x98\x51\xf7\x8a\x5e\xc7\x80\xa1\xd1\x2c\x95\x8e\x84\x56\x84\x09\x4b\x31\x97\x91\x90\xca\x09\x91\xf5\x86\x84\xd9\x65\x11\x20\xec\xe7\xd5\x10\xb3\xc8\xfb\x14\x3f\x08\xe4\x99\x96\x40\xce\x5c\x18\xf6\x82\xe4\x0f\xa6\x92\x89\x3a\xd4\x1b\x00\xd2\xe3\x41\x17\x84\x6b\x83\x2e\xcb\xca\x93\x81\x72\x15\xa0\x61\x26\xaf\x42\x71\xda\x42\x5b\x1d\x60\x91\x7e\x43\x22\x2f\x24\x87\xe1\x6c\x2e\xc4\x0a\x4d\x8e\x78\xe5\x30\x67\xfd\xed\xf0\x18\xce\xcb\x8c\xe8\xcc\x32\xb3\x38\x81\x7e\xe5\x8a\x6e\x0f\x29\xfd\xf2\xf2\x66\x6d\x42\x3f\xc3\x43\xf6\x75\xa9\xe8\xa3\x6b\xc5\xec\x18\x8f\x31\x48\xe1\xb0\xbb\x52\x12\x60\x57\x51\x70\xda\x07\x87\x76\x78\x6d\x56\xe7\x12\x2c\xbe\xe4\x61\xe7\x29\x33\xa5\xf9\xe4\x39\xde\xc2\x14\xd0\xd9\x01\xd9\x73\x67\xee\xba\x0d\x70\x89\x75\x2b\xf6\xa9\xc7\x75\xfb\xb8\x6e\xd1\xed\xd7\xed\x5d\x56\x07\x58\x08\x0f\xc3\x74\xe1\xb5\x61\xc5\x84\x51\x34\x70\x91\xdf\x0e\x8f\x9d\x1c\x40\xf6\x20\x33\x38\xc0\x5d\xd9\x8e\x15\xb3\xd3\x7c\x68\x7a\xb8\x1f\x8f\xd9\xd2\x21\x6c\x21\x8c\xa7\x69\x79\xe6\x21\x06\xab\x2c\x7b\x10\xa4\xc4\xbb\x51\x71\xe2\xbe\x90\x07\x14\x88\x48\x5c\x5a\xb2\x79\xf8\x0f\xe3\x38\xc5\x68\x1c\xce\x88\x2c\x64\xe9\x1f\x78\x82\x9a\x42\x1a\x92\x09\x91\x49\x61\x2e\xb2\x8b\x2f\x41\x3a\x25\x27\x9d\x74\xda\x4b\xf1\xff\x4e\x71\x94\x59\x55\x0c\x48\x15\xed\xa4\xac\x1e\xea\x28\x3a\x55\x83\x32\x4a\xda\xac\xcc\x57\xf5\x93\x9d\xcd\x86\x95\x2d\x46\x52\xbe\xda\xac\x91\x92\xc8\x1f\x4c\x60\x6e\x3d\x1e\x9e\xa3\xdf\x37\x69\xbd\xb3\xb0\x30\x74\x49\xfe\x9b\x9b\x40\xbf\xee\xb2\xf2\x4a\x40\x13\x49\xb4\x3d\xf2\x83\x80\x4c\xe0\x1c\x05\xc8\x04\xb2\x5c\x75\x57\xe8\x7f\xed\xea\x8f\xa3\xb7\xdd\x13\xf4\x7f\xda\xab\x6b\x68\xc2\x80\xa6\x4c\x97\x67\x83\x79\xf4\xb9\x9f\xae\x81\x9c\x3c\xf1\x83\x15\xfe\x54\x20\x1b\x1f\xf9\xfc\xfa\x79\x9a\xf2\xd0\xf9\x22\x10\x0a\x33\x57\x86\xb8\xc9\x02\x8f\x85\xec\xaf\x00\xb2\x7c\xfb\x4c\xd0\xb2\x56\xb2\xeb\xf1\x58\x08\x28\xe9\x3e\x12\x00\xa5\x22\x98\x25\x19\x14\x08\x67\xf9\xc0\xc7\x66\x71\xf8\x12\xe3\x4a\x7e\xe5\xd7\x6b\x9e\x16\x37\x4b\xb9\x60\xf6\x03\xfd\x72\xed\xd6\x0c\x44\x54\xa3\xb1\x4e\x36\xa5\xf1\x72\xc5\x0c\x99\x46\x99\xa0\x1d\xf0\x2b\x32\xa1\x46\x8c\x60\x0d\xa0\xf4\xc5\x32\x4d\x39\x2d\x22\xac\xfc\x43\x2b\x60\x6b\x96\xde\x0b\xf1\x76\xcd\xd0\x0b\x34\xd3\x1b\x7c\x25\xf4\x02\x11\x50\x14\x2c\x72\x5f\x17\xe3\x3d\x73\x70\x31\xde\x83\x5b\x8b\xf2\x76\x2e\x66\x85\x48\xa5\xc5\xe1\x0b\x72\xf6\xa3\xb6\x89\x42\xb4\xe4\x72\xcb\x97\xa1\xd3\x30\xf7\xd2\x9b\x02\xe9\x55\xc3\x0e\x6d\xe6\xb6\xef\xfc\xf0\x2f\x83\xf6\x54\x94\x6c\x66\x08\x5b\x41\x60\x1f\x04\x98\xeb\x7e\x1c\xf5\xfd\x8c\xc3\x2c\xad\x81\xf9\x10\x4d\x04\x43\x81\x25\x3b\xf4\x03\x1a\xc8\x88\x2d\xd4\x6f\xc3\x65\xa6\x91\xce\x67\xbe\x09\x47\x80\x66\x4b\x5c\xb9\x43\x39\x9d\x25\xd8\xf8\xc0\x1b\x9c\x29\x89\x8b\xa5\x45\x0c\x31\x60\xd1\xc8\x4f\x33\x78\x9e\xbf\xa6\x73\xf1\xfa\xac\xa2\x2e\xe7\x65\x54\xaf\x52\x17\xb3\x73\xe6\x0c\x66\xf3\x24\xa6\x82\x83\x9b\x62\x72\x70\x9b\xfa\x1a\x94\x36\x53\xba\x6d\x2e\xa8\xe7\xff\x33\x2e\x82\x6c\x2e\x0a\xf6\x9b\x05\xdb\xad\x42\xd1\x3d\xd0\xfd\x19\xfd\x1f\xc4\x01\xbe\xa1\xea\xc1\x53\x71\x5a\xa3\x97\x22\x70\x92\x90\xba\xd3\x7d\xdd\x75\x41\x61\x73\x75\x23\xe8\x8b\xc0\xd2\x85\x0d\x13\x22\x90\xbc\x83\xc0\xc1\x8f\x80\x0d\x80\x64\x38\xa9\x11\x38\xc1\x14\x30\xf3\xb4\x53\x1d\x6d\xdb\x68\xe2\x46\xf1\x46\x58\xc0\x30\x90\x4e\xb4\xfa\xb1\x2b\x59\x1f\x16\xdb\x00\x16\x04\x38\x53\xed\x43\x2d\x7e\x9c\x20\x37\x93\x11\x50\xd4\xa2\x48\x55\xec\x92\xef\x63\xb0\xfd\x74\xe0\x9f\x4f\xac\x79\x18\x30\x6c\x49\xb9\xa4\xad\x1a\x97\x38\x4f\x0c\x04\x2a\x6c\x89\xa0\xd1\x80\x53\xb9\x76\x37\x63\x97\xf6\x57\x9f\x17\x37\xaf\x5a\xaf\x54\xd1\xf3\xd5\x85\x31\x10\xaa\x16\xc7\x59\xe6\x2d\xc6\x13\xe4\x67\x68\x84\x09\x17\x8c\x23\xbe\x02\x58\x96\x0f\x6a\x09\x0a\xfb\x35\x30\x5c\x93\x6f\x21\x71\xbe\x19\x87\x11\x35\x12\x65\x87\x78\x23\x5c\xa2\xfa\xc8\x2a\xd1\xe9\x93\xf0\xa7\x84\x34\x06\xfb\x63\x7a\xe4\x0d\x2f\xd1\x4f\x3f\x59\xf5\xf1\x7a\xa0\x8e\xa3\x5b\xe9\x32\x72\x4c\x54\x65\x8a\xf3\x7c\xae\x37\x5b\xf6\x4a\xda\x2d\x92\xe6\x22\x89\x30\x94\x66\xaf\x2c\x04\xcd\x9b\xbb\x5f\x42\x5e\x5d\x25\x07\x19\x9a\xee\xcb\x25\x72\x81\xbc\xce\x4c\xbf\x40\x02\x87\xdf\x73\x75\x10\xfc\x2a\x9e\xda\x08\xba\x4e\xc9\xb7\xba\x8c\x7f\xb8\x65\xf5\xb0\x78\x5b\xdb\x03\xc9\x6f\xce\x0c\x50\xf9\xc8\xd6\xde\x3c\xcb\xbf\x3b\x5a\x2a\x80\xe9\x1d\x93\x3d\xec\x66\x28\xa8\x1f\x8f\x46\x98\xd2\x7f\x3c\xe0\xa2\x01\x88\x9a\x18\x72\xe9\x15\x89\x1e\x92\x28\x2a\x39\x79\x93\x6d\x34\xf1\xaf\xa4\x57\x56\xbf\x44\xbb\xeb\x07\x75\x40\x17\x42\x4a\x99\xda\xf9\xc5\x23\x64\x78\x60\x5c\x90\xd6\x27\xeb\xd3\x30\xc7\x75\x01\x4a\xfd\x11\xc5\x1e\x7e\x00\x30\x50\x49\xfa\x34\xfc\x28\x4e\xc2\x4b\x2a\xab\x70\x8e\x61\x05\xc8\xaf\x52\x73\x39\x5f\xb2\x1c\x34\x63\xad\x96\x93\x6b\x6e\xd3\xb3\x62\xf9\xa6\x3f\xc4\xe3\xdb\xc1\xb5\x0b\x9c\x4c\x65\x0e\x16\xd3\x03\x09\x9e\x15\x04\xcd\xc9\x78\x93\xe7\x6c\xa4\xa7\x18\x2a\x62\xf1\xb7\xba\x18\xd6\x8f\xa3\x4b\x9c\x64\x8a\x0c\x4b\xb3\xdd\x71\x63\x4a\xb0\xf8\xa4\xd6\x7f\x6e\xb7\xd5\x23\x5a\x45\x75\x5e\x15\x2f\x4b\xda\xc3\xcc\x77\xb1\x52\x51\x9b\x7f\xac\x13\xde\x4d\x32\x3e\x9a\x9d\xa8\x1f\x89\x24\x56\x93\x38\x4d\xc3\xde\x08\xbb\x57\xac\xa5\xa9\xc5\x9c\x9b\xf2\x81\x32\xed\x41\xe9\x37\x7e\x02\xff\xc3\x80\x82\x84\xfa\x9c\xac\xe0\x0d\xe9\x77\xee\xf0\x64\xad\xf4\x19\x5f\x6f\xa8\x7e\x51\xd6\x62\x9a\xa7\x94\xbd\x10\x59\xc6\x1b\xf0\xef\x9c\x82\x62\x55\x6e\x98\xee\x5c\xf6\x1a\x4c\x84\xd7\x2d\x13\xec\x85\x85\x5c\xaf\x1e\x9d\xdf\x76\x4f\xd6\xec\x15\x24\x16\xde\xb2\x97\x10\x0b\x47\x02\x4a\xdf\xad\x1c\x4e\x70\x74\x72\xf2\xce\xa8\x56\xde\x99\x4c\x9e\x7e\xbb\xe0\x35\x0e\x67\xfb\x91\x5a\xae\xb4\xe9\x11\x5d\xc5\xe9\x62\xcb\x18\x39\xd7\x8d\xc9\x4a\x34\xdf\x40\x07\x37\x21\x87\x3a\x37\x70\x6e\x60\xcb\xbd\x32\x60\x57\x80\xdf\xe1\x20\xd4\xd7\x78\x01\x1c\x48\x02\x96\xd2\x0c\x60\x90\x3d\x0e\xe7\x5e\x94\x39\xc6\x51\x4c\xdf\x68\x0c\x90\xe5\xec\xc7\x45\xdc\xa3\xec\x92\xa6\xc8\x8b\x6b\x3a\xb6\xb6\x97\xd0\xb3\x67\x76\xdf\x0a\x6b\xf9\x95\x2c\xa6\xf9\x86\x5c\xae\x1c\x73\x6a\x39\x48\xd5\x49\x98\xbc\xa2\x4c\x9c\x62\x6c\x5c\x56\x55\x79\x09\xf4\xf5\x2b\x25\xd7\xbc\xce\x0a\x9f\xc4\x6b\x7e\xec\x35\x74\x34\x56\x39\x89\x52\xd9\xbc\x7b\x0d\xda\x0e\x5c\x6d\x88\x9f\xf6\xdb\x0d\xd6\x73\x1b\x71\xda\x40\xb3\xe2\x22\x95\x31\xec\x5e\xea\x20\x16\x5f\x77\x88\x55\xe7\xbb\x97\x5c\xc4\x9b\x59\xee\xc7\xe3\x89\x9f\xc1\xf6\x52\x76\x19\xca\xdb\x82\xb6\x89\x49\xe2\x4f\xd9\x3d\xd1\xb6\xfc\x6e\x83\xdc\x7d\x19\x0e\xc6\xb4\xed\x13\x4e\xde\x0e\x42\x96\xa8\xcb\xc5\x1b\x15\xfa\x16\xc5\x4b\x73\xdf\x39\x6a\x19\x39\xd2\x92\xb2\x04\xf3\x2f\xb6\x40\x8d\x44\xdc\xd5\x2a\x90\x77\xb6\x63\x2c\xf4\xd7\x3c\xc4\x92\xe2\x4e\x55\xcb\x95\x14\xad\xc6\xd0\xde\x9f\xd5\x66\xed\x66\xa7\xde\xe9\xaf\x41\x62\x83\x4e\xbb\xd3\x6a\x0f\xda\x83\xf3\x2a\x57\xc5\x03\x68\xfe\x90\xf7\xc3\x71\x8e\x2c\x81\x82\x73\x2c\x1c\x87\x2f\x51\x37\x67\x64\x34\xac\xcd\xe2\x7b\x5e\xd1\x1a\x93\xfd\x95\x16\x15\x1e\xf9\x3a\xc9\xe9\xf4\xd6\x4b\x46\x8d\xd9\xc0\x17\xf4\x2d\xd6\xf0\xfd\x06\x70\x30\x85\x51\x6d\xe9\x4d\xfc\x24\xc5\x15\x65\xa1\x16\x5c\x4c\x26\xa9\xa2\xf8\xc9\xab\x59\xbd\x12\x48\x71\x44\x63\x78\xcd\x59\x74\x94\x30\x0c\x64\x8a\xd4\xab\x45\x10\xf9\x65\x9c\x74\x18\x66\x49\x21\x0c\x70\xa7\x38\xcd\xa8\x6d\x83\x3f\xb2\x2c\x50\x0d\xe6\x59\xed\x1c\x6d\x6e\xa2\x7c\xed\xa1\x9f\x7e\xd2\xdb\x3d\xab\xb3\x32\x7c\x4d\xba\x54\x50\x3b\x33\x7a\x81\x61\xb6\x8c\x54\x0e\x63\x2c\x7e\xad\x45\x66\xca\xd3\xf0\x50\xab\x5a\x60\x5d\x17\x5f\xb2\x23\x3a\x5c\x05\xe5\x30\xcc\xf2\x06\xfc\x09\x34\x50\xd3\x6f\xad\x8d\xe2\xca\xad\x4e\xbd\x53\x8e\x51\x58\x8f\x46\x8e\x63\x90\x27\x9d\x4e\x54\xd1\xbc\xf0\xae\x88\x2f\xc2\xab\xc4\x9f\x4c\x40\x8e\xf4\x33\xd6\xbc\xac\x32\x41\x3e\xd9\xe9\x53\xc9\x2b\xad\x70\xf5\x2a\xae\x3e\x86\x2b\x5b\xee\xf0\x63\xfb\x54\xd6\x81\xe4\xd6\x97\x3d\x42\xe8\xe1\x32\x7e\x91\x54\xcf\x75\x04\x72\x6f\x59\x67\xa9\x43\x68\x14\x50\xaa\x11\x07\x8c\xfc\x62\xc7\x72\x70\x2a\x0a\x11\xa5\x7b\x2f\x02\x42\x1b\x86\xa8\x26\x4d\x6c\x61\x50\x29\x76\xed\x40\xe6\x8d\x79\xd3\xdd\xc5\x43\x35\x57\x3e\x59\x8e\x3a\x05\xde\xe7\xac\x69\x6a\x83\xc2\x7e\xe7\x7e\xe7\x7f\x91\x18\x2e\xf6\x2d\x6c\xeb\xcf\xdd\xc0\xc8\xb2\xb4\x6b\x54\xcc\x65\x25\xfc\x2b\x4d\x6d\x84\xe2\x6a\xe9\x38\x85\x3d\x5c\x83\x79\x90\x1a\x5d\x9d\xf0\x4d\x1b\xf7\xc4\x6a\x73\x48\x03\x05\xca\x0e\x8b\x73\xac\xdb\x8b\xf5\x76\x21\x74\x16\x8a\x9e\xb3\x63\xb3\x5f\x97\xa2\x1b\xc4\xb9\xf3\x89\x2d\x00\x9a\xd5\x67\xd5\x10\x4b\x72\xcf\x0c\x11\x20\x81\x75\xf6\x36\x92\x49\x17\xfa\x97\xc3\x84\x2b\x60\x03\x0a\xb3\x37\x22\x1c\x57\x38\xe6\xba\xf6\xa3\xf2\xdb\x69\xd1\xa6\xad\xec\xaf\x66\x41\xae\x5a\xb4\x7c\x22\x64\x25\xfa\xb6\x12\x5e\x5a\x8a\x48\x3a\x42\x46\x2f\x66\x19\xaa\x15\xcc\x01\xc1\x85\xa8\x59\x4c\xe8\x03\xf3\x92\xec\x95\xa5\xb0\xa4\x0b\xd4\x2d\xac\x2d\xa5\x25\xbd\x20\x21\xbd\x81\xe5\xb8\x76\x53\xfa\xd8\xc2\xee\xa1\x53\x31\x71\x42\xf1\x25\x5f\xcb\xa0\x07\xdb\x9e\x64\x02\x10\x3b\x94\x76\xd1\x24\x3d\x42\x6a\xef\xbf\xe2\x3e\xa5\x05\x68\x11\x91\x8e\xbf\xc1\xde\x94\x47\x55\x9e\xcf\xa6\xb9\xf7\xbc\x85\x4d\x73\xb2\x63\x61\x14\x24\x8f\xfa\x5b\xb3\xec\xfb\x46\x51\xdf\x97\xee\x71\x4b\x71\xc6\x2e\x70\x44\x18\xf8\x06\xbb\x0a\xd3\x38\x48\xaa\x05\x79\x31\x69\x80\xe5\x9d\x82\xdd\x7e\xc3\xf9\x55\x46\x3e\xe7\x26\xb6\xe6\x18\xa7\x30\x37\x0c\x79\xf2\x94\x4d\x4c\x89\xba\x48\x87\x25\xdf\x9b\x24\x26\xa3\x28\x7c\xac\xdb\x84\x68\x62\x61\x6d\x8c\x95\xad\xe9\x63\xa5\xde\xbf\x80\x8e\xc9\x4f\xd3\xe9\x18\x07\xea\x7d\xa2\x3f\x4a\xb0\x1f\x5c\x4b\xfb\x9d\x72\x20\x9b\x46\x34\x6d\x65\x89\x88\x66\x8b\xb1\x3d\x3b\xff\x5a\xe8\xd0\x44\x18\x17\x98\xa8\x27\x29\x5e\x98\xd7\xbb\xf5\x45\xd3\x68\x51\x58\x7f\xa2\xc4\x6d\x90\x3c\x55\x21\x1d\x72\x2a\x40\x82\xf8\xed\x3c\xe0\xa3\xa1\x53\x92\x57\x0f\xab\x6c\x4b\xe5\xcd\x62\xd7\xc8\x8b\x70\x4e\x08\x1b\x6e\x13\x42\xd9\x93\xb9\x54\xf5\x8b\x0d\x54\xa8\x1d\x65\xd0\x0a\x94\xa2\x86\x66\xc2\x7a\x43\xf2\xd6\x6e\x22\x31\xef\xca\xe4\x73\x30\x80\xfb\x12\xfa\xdf\xe2\xcb\x92\x79\x56\x18\xe6\x85\xc9\x5b\x0a\x9d\xb4\x52\xee\x9e\x64\x9b\x80\x87\x3b\x7d\xd2\x18\x59\xcb\xfb\xbf\x70\x85\xc1\x84\xc5\x0b\x2a\xaf\x8e\xe5\x35\x98\xe5\x05\x7b\x00\x39\x85\x34\x03\x80\x8b\xbd\x42\xf2\x40\xe5\x98\xda\x56\x84\x11\xb3\xe4\x65\x76\x00\xcc\x64\xe6\x02\x47\x60\xcc\x5b\x0c\x4d\x44\x29\x77\x00\xa3\xa1\xb3\x8b\x61\x99\x3a\x03\x50\x61\x49\x42\xd2\x16\xea\xb4\xc0\xe4\x18\x3e\x70\xfb\xd9\xfd\x01\x8a\xc7\x21\x91\x11\x3c\xe4\xd3\x4f\x57\xe1\x68\x84\x7a\x58\x34\x18\xa0\xc4\x8f\x82\x78\x3c\xba\xbe\xa7\xc3\x3d\xb5\x9a\x60\xc3\xe4\xa1\xfd\x5f\x3c\x98\x52\xd2\xf8\x37\xe0\x42\x74\x92\x03\x93\x05\x49\xd4\xb8\x82\x67\xb8\x3f\xcd\x70\xe5\x19\x8f\x46\xf5\xcc\x63\x89\x3b\x3c\x66\xbe\xe5\x10\x8b\xee\x09\xba\x87\x9e\x91\xe1\x20\xff\xff\xcc\x7d\x66\xa6\x60\x64\xee\xc6\xa9\xd9\xe3\x24\xea\x31\xea\xa2\x8a\x4d\xbb\x51\x3f\x9d\x66\x36\xcb\x0e\x45\xf5\x0f\xce\xab\x24\x43\x89\x4c\xe1\x54\x3a\xad\x55\x23\xad\xb9\xc5\xad\x8e\x2e\x6d\x69\x5d\x9b\xd2\x0a\x8d\x37\x4b\x13\x0f\xe4\x0a\x5c\x11\xe3\x2e\x4f\x83\xcc\x16\xd2\x4d\x75\x85\x25\xf2\x96\xc6\x03\xf0\xb7\x06\xac\x25\xb4\x99\x15\x63\x00\x76\xd3\x86\x9a\x5c\x24\x83\x66\x0a\x72\x9e\x4c\x96\x8f\x39\x7a\x6e\xea\xb3\x95\xd4\xd0\x79\x0a\x67\xbb\xb3\xd4\x31\x13\xa5\x16\x3c\x8c\xe7\x47\x6a\x21\x45\xdf\x4e\xab\x6d\xd3\x0c\x28\x2a\xee\x80\xf1\x65\xce\xf2\x34\x96\xec\x09\x58\x0e\xf1\xeb\xf6\xfa\x70\x4b\x94\x38\xa1\x10\xb7\x7f\xb3\x69\xb8\x1e\x50\x3f\xfe\x76\x7b\xf7\x06\x91\xed\x93\x5b\x50\xda\x76\xe1\x5c\xca\xe3\xcc\xb6\x78\x8b\x5b\x48\x2b\x6e\xe9\xb0\xdb\xf9\xe1\x73\x30\xd8\x90\xb6\x67\x89\x42\x16\x54\x8f\x33\x97\xaa\x45\xf6\xe5\xef\x43\x5f\x5e\x28\x1d\x7c\x07\xea\x88\xbf\x88\xda\xdc\xb2\xf8\x4a\x69\x92\x9f\xf1\xa1\x76\x85\x95\x7d\xf8\x86\x3d\xf4\xc7\x03\x6b\xb0\xf3\xed\xe8\x1b\x29\x1c\xb4\xdd\x35\xce\x5c\xca\x5d\x9b\xec\x42\xc0\x13\xb1\x85\x8b\x2b\x12\xf6\x74\x78\x85\x8c\xc1\x9e\xe9\xb6\xe7\xf2\xee\xa4\x62\x2c\xed\x9b\xd1\xa5\x15\xd8\x62\x15\x0c\x56\xac\x21\x09\x9c\x8a\x79\x45\x5f\xe2\xbe\xce\x90\x03\x40\x18\xf3\xa3\xb6\x2f\xe9\xf1\x0d\x34\x0e\xc2\x19\x4d\x06\x02\x15\xac\x43\x2a\x9d\xad\xa9\x61\xa6\x02\xdd\xa5\x37\xb1\x9e\xf8\xee\xa0\x0f\xfe\x13\xf8\xf1\x3d\x2b\x88\xbf\x77\xc6\xfc\x3d\xea\x89\x6d\xcc\x70\x51\x45\xf1\x9d\x18\xe3\xbd\xa3\x68\x2a\x8a\xef\x8b\x71\x97\xd4\x13\x7f\x73\xde\xfd\xcd\x95\xc5\xdf\x7e\xab\xf0\x14\xdb\x1e\xc7\x09\xed\xfe\xf6\x8e\x52\xfa\x70\xf7\xfd\x85\x6d\xeb\x90\xc7\xb7\xe4\xee\x51\xa4\x20\xcf\x55\x79\x22\xd3\xa5\x9c\xd2\x92\xe5\xaf\xbc\x39\xf7\xda\xcd\xef\x35\x29\xe5\xbd\xe7\xa0\x5c\x34\xf7\xa4\x92\x73\xd2\x40\xcc\x4c\x3f\xa9\xa5\x9d\xe4\x15\x1d\x89\x27\x41\x3f\x9a\x03\x17\x3f\xd5\xe4\x93\x07\x7e\x36\xf4\x90\x25\x05\x65\x7e\xbc\x7e\x17\xf7\xfd\x11\x9a\xc4\xa3\xeb\x41\x38\x42\xf1\x00\xd1\x4d\x8b\x9d\xe2\x2d\x47\x5e\x16\xdb\x7e\x53\x2d\xa8\x35\xac\x30\x26\xf1\x7a\x97\xbc\xbf\x79\x69\xc6\x0e\x92\x6c\x2d\x7b\x9f\x0c\xa6\x06\x36\x82\xd3\x1e\x99\x41\x9d\x88\x77\x57\x26\x49\x9c\xc5\xe4\x13\xda\x24\xa7\x0f\xbd\x00\xab\x87\x36\x51\x84\xaf\x08\x02\xc5\x10\xa2\xe9\x68\xe4\x58\x28\x02\x83\x7c\x99\x48\xf1\x8e\x6c\x91\x3c\xf9\x9c\x14\x2b\xb9\x9d\x8a\xed\x77\x61\x2f\xf1\x93\xeb\x79\x3a\x72\x29\x3f\xa8\x13\x14\x64\x0b\x65\x5a\x4f\x22\x5c\xf0\x2e\xfb\x23\x14\x46\x43\x9c\x84\x4a\x00\x57\x25\xa2\x83\x9e\x67\xd4\x8c\x30\x6a\x4e\x67\x89\xb0\x7f\x3c\xc6\x30\xb8\xc7\x09\x3f\x83\xa1\x9f\x71\x84\x58\x28\x0f\x2a\x06\x19\xa7\x4a\x84\x8a\xe2\x00\x72\xb9\x2b\xbe\xc4\x49\x12\x06\x38\x45\x47\x54\x21\x12\xe2\x94\x32\xf0\xc9\x35\x0a\x23\x96\xcd\x38\x47\xa0\x44\x0b\x7a\xae\x86\xd3\x45\x01\x18\x32\x97\xa3\xdc\x22\x51\x03\xc9\x44\x1d\x5c\x9f\x52\x12\x56\xa4\x9b\x02\x93\x44\xd9\x5f\x2c\xc4\xa3\x60\x03\x3d\x83\x4c\x59\xcf\x74\xc3\x11\x7b\x9b\xe4\x6f\x8c\xb3\x61\x1c\x14\xfa\xc8\x4b\xa5\xf5\x18\xf9\x36\xc7\x33\x84\xcc\x70\x86\x14\x7d\xc5\x20\x9b\xcf\xab\x33\x88\xe1\xc4\xbf\x8a\xcc\x2f\x12\x23\x21\xc2\x42\x9e\x56\xcf\x65\x4e\xbc\x35\xbd\x18\xe3\xc8\x62\x3a\x4c\x76\x94\x62\x2c\x50\xce\x7c\xd8\xb9\x2b\x2f\x6f\x4d\xff\x60\x45\x80\x99\x49\x71\xd7\xaf\x50\x38\x96\x26\x76\x9c\x7e\xe0\x4d\x0e\xfd\xf4\xf0\x2a\x62\x64\x7f\x5d\x79\x46\x6a\x3e\xab\x0a\x9f\x27\xf2\x08\x9b\x20\x2f\x4f\x5e\xcc\xed\x07\xad\x55\x38\xdd\x96\x5a\xff\x4f\x3a\x9d\x10\x51\x2b\x0a\xb3\x15\x9f\x08\xa7\x6c\xeb\xf3\x93\x8b\x29\x19\x5d\xeb\x78\x20\x4b\x06\x85\x82\x71\xca\x3d\x6e\x93\x67\x29\xca\x39\x7a\x48\x95\xc2\x7c\xd2\xe9\x2a\x35\x21\xc8\x1d\x54\xf6\x03\xc7\xb6\x83\xb8\x62\x7c\x80\x13\x1c\xf5\x49\x03\x30\xce\x13\x7d\xbd\x1a\xc3\xc0\xe4\x62\x1b\x40\xe7\x3e\x83\x6c\xa9\x31\x6c\x4c\x75\x07\x56\x4a\x2a\x33\x4d\xaa\xf2\x9e\x46\x74\x1c\x60\x02\xe9\xaa\x35\x43\xa0\x6e\xf1\xf9\xc8\x33\xd8\x54\xaa\xe2\x1a\x8e\x88\xd2\x10\x52\x0e\x80\x54\xaa\x7f\x65\x5e\xc9\x23\x96\xa3\x4d\xc6\x36\xf9\x9d\xc5\x5c\x5e\x44\xcb\x15\x73\x3c\xb3\x11\x58\x72\x79\x9c\x6c\x73\xe5\xf2\x08\xea\xd2\x1a\xe1\xef\xd4\x75\xe2\xa4\x1a\x5e\xfc\x36\x64\x53\xe4\xae\xee\x98\x2b\x74\xc8\x98\x19\x4b\x12\x00\x24\x05\x26\xf4\x41\x80\xd2\x78\x8c\x69\xea\x29\x74\x35\xc4\x11\xba\x8e\xa7\x89\x30\xb3\xf7\x89\x38\x4b\x81\xdf\x73\xec\xdc\xbb\xee\x82\xba\xa3\x73\xd1\x5e\x86\x28\x03\x58\x59\x31\x47\x46\x0c\xfd\x2d\xb7\xbb\xb9\x68\x94\x9a\xd3\x6e\x3c\x21\xc2\xce\x24\x97\x7b\x98\xbc\x73\x07\x71\x4a\x02\x06\x1a\x26\x45\xa6\x1a\x83\x26\xf2\x9e\xa7\x94\xad\x4e\xba\x7f\x96\x95\x5f\x6e\x39\xee\xd0\x88\x72\x89\x2d\xfa\x67\x5d\xe3\x22\xe2\x21\xbf\x6c\x7b\xef\x8f\xc1\x68\x62\x4e\x3d\xc4\xb6\xea\xbc\x98\xbe\x59\xcb\x00\xab\x85\x5b\x2c\x99\xce\x33\xb9\xf8\x39\xda\x94\xda\x57\x3f\x2d\x90\xba\xc8\xb1\xc9\xee\xa0\xab\x38\x7a\x96\x51\xf9\x99\xbb\x3b\x4a\xc1\x0b\x47\x71\x3c\x41\x7e\x2f\xbe\xb4\x6c\x83\xc5\x5d\x7e\xc6\xa1\x3d\x73\x77\x18\xb8\xa8\x68\x55\xee\xa7\x78\x5b\x22\xaf\x56\xa9\xc5\x23\x0e\x27\xd0\x53\xb0\x7f\x59\x64\xdd\xd8\x36\xbe\xfe\x28\x8e\xf0\x03\x70\x3c\x80\x8b\x36\xf3\x3d\x04\x5e\x94\xd8\xc9\x48\xb1\xb9\x1b\x99\x9c\x8b\x44\x15\x8e\x38\x3f\xb5\xda\x93\xd9\xcf\xc8\xd6\xdb\xfd\x08\xf9\xe0\x79\xab\xc5\x22\x2c\x8c\x2c\x64\xc4\x79\x2f\x06\x61\x0b\x4f\x23\x8c\x1f\xd4\x70\x88\x69\x78\x11\x85\x83\xb0\xef\x47\x19\x0b\x28\x19\xd2\xde\x03\x48\xda\x8e\xed\x98\xfc\xab\xe4\x41\x4c\xcf\xca\xf2\x9b\x7b\x08\x1b\x63\x36\xaf\x93\x85\x23\x0c\xbe\x6c\x7a\x35\x67\xac\x91\xd5\x2c\x4c\x8c\x94\x76\x83\x31\x77\xd0\xf0\xbd\xa5\x7a\x91\xfd\xb3\x95\x8d\xdd\xb0\x85\x71\x68\xff\xcb\x03\x38\xab\xcd\x6a\xb5\x5a\xbd\xd6\xa8\x35\x3d\x54\x9b\xd5\x5a\xb5\x76\xad\x53\x5b\x3b\x7f\x30\xc0\x1e\xea\x94\x0e\xbd\xc2\xc2\xd7\xf1\x19\x31\x56\xec\x15\x73\x08\x86\xe5\xca\x1f\xe8\x7f\xbf\x7e\x85\x98\xbd\x9a\xa8\x31\x40\x15\x31\xbd\x3f\x6c\x5a\x14\x85\xf2\x1f\x40\x95\x8c\x86\xf8\xcf\xd2\xc6\xa4\x3a\x00\x4a\x1e\x23\x1c\x5d\x64\x43\x6a\x7a\xe4\xe4\x22\xe5\x63\xc6\xe4\x0b\x65\xb1\x48\x31\x3b\x51\x3f\x0e\x08\xbd\x63\xfa\x43\x27\x77\x78\x5d\x1c\xfb\x53\x10\x00\x8e\xfa\x2b\x7b\x78\xe6\x6e\x73\x5e\x00\x99\x52\xab\x7d\xe1\xe0\x2e\x39\xb1\x96\x88\xec\x62\x89\x6b\x30\x2f\xac\x8b\xa5\x8a\x32\x24\x1f\xb2\xc1\xfa\x42\xd1\x5c\xd8\x54\x38\x63\xb9\xf0\xa9\xfa\xfa\x15\xed\xe1\x59\x61\xf8\x96\x39\x04\xd4\xf7\x33\x1c\xb1\x3d\x5f\xa5\x20\x07\xf3\x77\x13\x92\x74\x0f\x9b\x0f\xf8\x29\xe3\x86\x12\x65\x42\x9a\xdf\x45\xef\x75\xcb\xe2\x52\x86\x36\x04\x76\x75\x1e\x3f\x43\xbc\x69\xb8\x53\x9a\x41\x49\x9d\x29\xd1\xc0\xce\x8b\x85\x23\x21\x03\xfb\xab\xc1\xb0\x2c\xbe\x8a\xd9\xd0\x17\xa1\x0e\x72\x12\x73\x97\x0e\xd3\x93\x9c\xc7\x28\x3c\xc7\x01\xfc\x44\x65\x49\x14\x7e\x5e\xc7\xe8\x54\x77\xe4\x8f\x27\x08\xcf\x20\x92\x64\x2f\xd4\x3b\x47\xef\x55\x49\x19\xf3\xb6\x81\xde\xa7\xf6\x6d\x41\x52\x14\xc4\xff\xe1\x08\x94\x0e\xf5\x89\x48\x1a\x61\xd8\x6a\x91\x9f\x21\x1f\x65\xe1\xd8\x22\x71\xdb\x42\xb2\xcb\xdd\x75\x27\x85\x90\x07\x87\x14\x45\x9b\x04\x3d\x36\x0b\x67\x21\x8f\x8a\x4d\xfe\x53\x69\xb4\xd0\x32\xaa\x84\x14\xe3\xe7\x68\xbd\x5a\x15\xd1\xb2\x9d\x52\x3c\x85\xa3\xf6\x78\x09\x85\x22\xdc\xf6\xd7\xcd\xbc\xe9\x57\xaf\x78\x1b\x96\xf2\xa2\xd1\x12\x82\xbf\x73\x5b\x92\xc7\x94\x2e\xae\x3b\x8d\xa9\x3b\xca\x7d\xd9\xee\x6f\x22\x73\xb0\xcb\x64\x0c\x36\xa9\x50\x6c\xb6\x4b\x9b\x2a\x9a\xb6\x1c\x2b\x7e\x18\xf9\x3d\xfd\xe4\x21\x1d\x00\xca\xb2\x53\x1a\x83\x83\x08\x81\x8a\x60\x18\x66\x77\x15\x05\xf3\xc5\x29\x56\x97\x83\x49\x91\xcf\x65\x43\xf7\x5a\x58\x93\x29\x47\xd9\xe2\x22\x39\x99\x8c\x9d\x61\x58\x44\xb5\x33\x01\x83\xc7\x99\xdf\x84\xa5\x43\xff\x80\xf4\x9b\x0d\x42\xfa\xa9\xc2\x17\x2c\x04\xaf\x88\x52\x9b\xe8\xc0\xcf\x86\x2b\x7d\x1c\x8e\xf2\x9a\xab\x68\x81\x88\x44\xf6\xf3\x6f\xa9\x9d\xc7\x61\x8e\x64\x1c\x7f\x6f\x6b\xf7\xc9\x8e\xbb\x32\x2d\x18\xe7\x5d\x95\x16\xe6\x9d\x73\x65\xb0\x70\x52\xa3\xb8\xca\xd1\xcf\xcd\x93\xf3\x8a\x49\x23\xcc\xfc\xbe\xe6\x34\xa9\x23\xf5\x16\x9f\x02\x49\x6c\x18\x84\xa3\x11\x0f\x3b\xcb\xdc\x24\xe0\xbc\x35\x5f\x28\xe1\x87\xb9\xc8\x76\xe8\x95\x41\x39\x5d\x7c\x4a\xcd\x32\x83\x54\x8a\x50\xee\xcb\xf8\xac\xc4\x11\x8c\xb9\x82\xd4\xdd\x27\x2d\x5a\x42\x26\x93\xc8\x7e\xc4\x92\xd9\x83\x79\xa0\x22\x5f\x13\xf5\x86\x7c\xfc\xf1\xca\x1d\x65\xfe\xe3\x15\xda\x24\xff\x3a\x12\xa8\x8d\x3f\x7e\x21\xdb\xcc\xac\xe9\x07\xb8\xb3\xde\xd3\xc3\xaf\x8b\x62\x7e\xfa\x19\xc9\x9c\xa3\xe0\x9e\xa0\xc4\xdd\x1d\x6d\xb5\x52\x9b\xbd\xa8\x75\x5e\xa0\xe7\xa4\x0b\x5f\x60\x4f\xdf\xdd\xdd\xdd\xad\xa2\x25\xfa\xe2\xe7\x9f\x51\x6d\x56\xaf\xc1\x76\x4f\x10\x70\x6c\xf7\xb4\x8b\x95\xda\xac\xd5\x69\xd7\x28\xb0\x2b\x1d\xd8\x55\x59\x60\x30\xbc\x38\x9d\x82\xa7\x4f\x05\xd0\x78\xf5\x8a\xd6\x44\x4b\x08\x46\xba\xb0\x3e\xab\xbb\xba\x09\x75\xd8\x5f\x71\xd9\xa5\x4d\x54\x5b\x69\x3b\xcb\xc0\x98\xb2\xa2\xcf\xa9\xbd\x0d\xa7\xb6\x2a\xfa\x19\xad\xb4\xd1\x7f\xa1\x3a\xda\x40\xcb\xf5\x32\x22\x8a\xc1\x39\x54\x71\xc3\x43\x49\xdf\xef\x0f\x31\xcb\xae\x33\x5f\xe0\x20\x35\x3f\x12\x7a\x4c\x2a\x15\x5a\x95\x1c\x95\x14\x24\xc9\x6e\x22\x0d\x86\xfd\x8a\x89\x56\xdd\x44\x1f\x93\x0a\x2d\x0f\x04\xb9\xd6\x5b\xb3\xf4\xe9\x2a\xcf\xe1\x53\x11\xe5\x73\xf8\xe8\x2b\xaa\x95\x0c\x6b\x1e\xe1\x2b\xc9\xd9\x09\x6e\x1d\x99\x02\x24\xe2\xe9\x7b\x9e\x68\x23\x69\x77\x3e\x65\x47\xfb\x79\x86\x34\x38\xea\x83\x21\x0d\xfd\xaf\xdd\x90\x66\x0f\xcf\x4c\x4d\x80\x0d\x1c\x29\xb8\x49\x81\xae\xd0\xdf\xe5\xe2\x6f\xea\xea\x8b\x21\x9e\x95\x56\x61\x94\x38\x79\x2e\x18\x55\xb3\x54\xeb\xf7\xc5\xc8\x87\x78\x66\x86\xd0\x64\xe3\x27\x1d\xed\xe7\x27\x12\xb2\x06\xce\xbc\xed\x31\xf5\xaa\xf4\xc9\x33\x5d\xf4\x18\x49\x67\xdd\x04\x34\xc4\xb3\xee\xd0\x4f\x4a\xe7\xd9\x4a\xe7\x1e\xe8\x20\x47\x5a\x48\x0f\x72\x57\x77\x3c\xc4\x71\xec\xd8\x1a\x07\xb0\x04\x48\xab\x9a\xab\x7d\xea\x9d\xaa\x8d\xdf\xd9\xaa\x92\x76\x6a\x83\xe2\xba\x0e\x06\x21\xc0\x7d\x8a\xc3\xa8\xf2\xec\xd9\x2d\x22\x6e\x4a\x14\x4e\xd7\xdb\x22\x9a\x1e\xbe\x52\x28\xe1\x96\x5f\x30\x0e\xe1\xe9\xcf\x97\x9a\xf8\x62\xa3\x36\xdb\x62\x3d\x96\x8f\x94\x49\xab\x2c\x96\x28\x85\xd6\x79\xc7\x8f\x2e\xf4\x91\x1d\x65\x16\x59\x35\x57\x8b\xa4\xa6\x93\x1b\x65\x5b\x68\xa3\x20\x3f\x26\x5d\x2d\x4d\xd0\x4c\x40\xa7\xf7\xa3\x8c\x75\x76\x25\x9d\xf6\xd2\x2c\xa9\x84\x1e\x6a\x54\x3d\x48\xc2\x97\xab\x2c\xc8\x8a\x5a\xaf\xda\x1c\x70\x17\xde\xf3\x94\x61\x5a\x45\x8d\xb2\xee\xb3\xef\xfc\x2c\x8c\xea\xe5\x36\x2d\x56\x96\xef\x5b\xe2\xf1\x76\x5b\x17\xab\xfe\xe7\xed\x5e\x65\x11\xb8\xaf\x35\x35\x82\xf6\xec\x7b\x18\xc5\xe5\x3f\x6a\x1b\xa3\xc3\xf1\x1d\xef\x64\x12\x82\x74\x47\xa2\x53\xb7\x32\x48\xe2\x31\x79\xdb\x8d\x03\x0c\x9b\x54\xd9\x0d\x49\x06\x78\x87\x3d\x49\xa1\xdb\xdb\x6f\x4b\x82\x1c\x17\x5a\x0c\xdf\xf5\xe6\xc4\x56\x11\xdd\x9f\xe4\xe5\x56\x7e\x8b\x12\xb5\x16\xdb\xa5\x44\x35\xb1\x51\x89\x37\x0f\xbd\x57\x69\x4d\xcf\xcb\xe5\x1c\x4a\x5a\xf4\xbc\xb7\x2b\x7d\x46\xd0\x5b\x59\x25\xe4\x6b\x42\xdf\xaa\xec\xba\xc5\x85\xb7\x2a\x0d\xe1\xb2\x3b\xd5\x87\xd3\xdd\xe5\xf5\x72\x1b\xd5\x87\x6c\xb0\x2e\xb6\x29\xf6\x70\xbb\x4d\x8a\x36\xfa\xe7\xed\x51\x25\xdb\xbf\xaf\x95\x35\xcd\x06\xeb\xf6\x0d\x8a\x8c\xe2\x43\x6e\x4f\x59\x72\x5d\x60\x60\x14\x60\x72\x44\xff\x70\xbc\xdf\xe5\x9e\x4e\x15\x9c\xf6\xfd\x09\xae\x14\x6c\x9c\x26\x5b\x46\x7d\x3f\xeb\x0f\x51\xc5\x4c\x1f\x0d\x28\x0c\x93\xf8\x0a\xe8\x16\x32\xae\x54\x9e\x1d\xf8\xa3\x41\x9c\x8c\x71\xc0\xa6\x21\xf0\x33\xdf\x4c\x41\xb7\x38\x03\x97\x27\xf5\xf6\xfc\x9b\xcd\xd5\x22\x64\xf2\x5d\x33\x6f\xa0\x30\xca\xba\x73\x32\x2c\xcf\xb8\x59\x1d\x97\x31\x80\xb2\x35\x4c\x23\x46\x3d\xd4\x42\x40\xa1\x2b\x0e\xa7\x5a\x3a\x00\x8d\x48\xc1\x0b\xb9\x30\x71\xc0\xb2\x99\x49\x5e\xe8\xce\x4c\xbc\x92\x9d\xec\xb5\x94\x12\x6d\x3c\x4d\x33\xd4\xc3\x28\x24\x23\x3a\xc6\x51\x46\xf3\xac\xf9\x70\xbd\x9e\xe0\x4c\x78\x2c\x94\xca\xed\xab\xe5\xe9\x54\x95\xfb\x34\xc7\x21\x75\xad\xca\x13\xc4\x7f\xc6\x93\x0c\x4d\xa3\x09\x4f\x1a\xa8\x66\x07\x95\x6c\x5a\x6a\x16\xee\xfb\x9a\x8d\x03\x64\x1a\xdc\x12\xa3\x20\xbc\xc4\x5c\x9f\x4b\x9a\xc1\x41\x76\x57\x66\xcd\xa3\x8d\xf4\x33\x96\x44\x9b\x25\x31\xcd\x62\x14\x66\x29\xf7\x8a\x41\x84\x82\xef\x7a\xc7\xd4\xb3\x22\x4f\x13\xe2\xba\x2f\x99\x4a\x65\xdd\x65\xe6\x7d\x08\xac\x94\x6d\x36\x03\x90\x81\x93\x79\x2a\x6a\x3b\xab\xce\x94\x68\xf9\x68\xdb\xcf\x7c\x2e\xac\xd7\xca\x4a\x9a\x5b\x41\x90\x42\x1b\x3c\x2f\xb8\x63\xa4\x19\x2d\x94\xdf\x14\x45\x90\x05\x23\xf3\x38\x33\x76\x41\x74\xcd\x33\x27\x00\xca\x2f\xa9\x4f\x89\x2f\x59\x50\x52\x7b\x62\xe0\x78\x0f\x33\x99\x1f\x29\x3a\x95\x67\x26\xbf\x2f\x55\x6f\xfe\xde\xc8\x4a\x96\x49\x66\x6e\xba\xd7\xe7\xe9\xe8\xe4\x80\xa2\xd2\x00\xb1\x60\xa2\x2a\x28\xd9\xc7\x19\xc8\x68\x4e\x9c\x48\x46\x6b\x12\x53\x06\x0c\xe7\x47\x4a\xdb\x82\xae\xb9\xc8\x97\x9b\x12\xd9\x80\x19\x44\xbb\xb4\xa9\x26\x49\x2f\x4b\xc1\x3c\xd7\x69\x8a\xfc\x4b\x3f\x1c\x41\xc4\x2e\xca\x17\x80\xd9\xb9\xa9\xe6\x54\x72\x56\x09\xa3\xcb\xf8\x33\x4e\xf5\x24\xc3\x15\x96\x1c\xd8\x43\x57\xc3\xb0\x3f\xb4\xb2\xea\xde\x75\x01\xab\x36\x5b\xe5\x0b\xa5\x17\xc7\x23\xec\x47\x37\x28\x88\x77\x47\xd3\x74\x88\x7e\x1d\xe2\x8c\xc6\x33\xe1\xb9\x68\xc1\x5d\x6b\xe2\x27\xc0\x28\xd8\xab\x9c\x6b\x0b\x76\x7d\x8b\x70\x20\x82\xd3\xc3\x88\xdf\x7d\x9b\x17\x00\xb7\x29\x21\xb9\xd6\x0c\x4f\x95\xeb\x8a\xcb\xb1\x20\x18\x7b\xa6\x60\x35\xd6\x2a\x2d\xaa\x2c\x3e\x3a\xe0\x0b\xea\x4c\xd8\x12\xc9\x89\xdb\xa2\x2d\x21\xaf\xb9\x71\x1a\x8c\xac\x4b\xad\x42\x3e\x4a\x86\x66\x2e\xba\xe7\xc5\x73\x59\x61\x53\x4b\xc9\x5c\x54\x98\x43\xcf\x6b\xdb\x23\xfa\x75\xe3\x69\x94\x71\xfa\xb2\x30\x13\x02\x34\xa2\x89\x84\x8f\x21\x6e\xf1\xa6\x8a\xff\xaa\xd6\xe4\x4b\x93\x17\xb9\x86\x9c\x61\x70\x1c\x4f\xa3\x00\x4d\x27\xd4\xa1\xb0\x3f\x9a\x06\x58\xa3\x7b\xb3\x9a\x86\x51\x6e\xe4\x22\x7f\x28\x1f\xdb\x56\x60\x11\xc4\x57\x91\x8c\x47\x1c\x8d\xae\xd1\x60\x2a\x16\xa5\x25\x92\xfe\xea\x2a\x1a\xe1\x94\x3a\x55\xda\x65\x2d\xe0\x1b\x09\x1e\xfb\x61\xa4\x0a\x57\xe5\xfa\x35\xf6\x67\x15\xa5\x5f\x70\x71\x8a\x96\x6d\x99\xd9\xbd\xf9\x57\xaa\x62\xce\xa9\xe6\xc1\x35\xe5\x40\xc9\x1c\x0f\xa5\xf5\xe7\x48\x22\x40\x17\x3d\x01\x6d\x38\xc9\x89\x7c\x55\xfb\x18\x46\x15\xb9\xc9\xe7\xa8\xe5\x29\x74\x66\x33\x9f\xe4\x19\xbc\x6d\x44\x42\xe8\x4e\x02\x58\xec\xb6\x45\xf9\x3c\x55\xb3\xb0\xdf\xaf\xe4\x11\x10\x6f\x97\xa4\xf5\xe4\x34\x9a\x20\x98\xe1\x84\x9c\x26\xc5\xc6\xb0\x9c\x1f\x10\xc0\x19\xd2\x5e\x91\x71\x17\x75\x0f\x12\x5c\xc5\x96\xab\xde\x35\xc7\x48\x49\x81\x95\x33\x7c\x98\x72\xb3\xa8\xc2\x7d\x65\x16\xa6\x27\xc3\x92\x47\xd4\x82\x86\xc2\xc9\xd0\xf2\xa6\x3c\xd3\xf3\xa9\x92\xc7\x16\x2d\xc2\xd6\xad\x70\x52\xf1\xf7\xe4\xa6\xef\x6a\xec\x56\x3a\x0b\x65\xa1\x93\xd7\x1d\xad\xdc\x1c\xbb\xe1\x9f\x64\xf2\xf6\xd1\xd8\x10\x73\x4c\xac\x33\x56\x68\xf1\xa6\xf2\x30\x71\xd2\x74\x64\xa2\xe7\x67\xf0\xa1\x9f\x42\x86\x5c\xe7\x89\x7b\x6e\x2a\xf2\x9c\x5d\xcb\x3e\x50\x74\xd2\x19\x74\x1a\x76\x0d\xa7\x28\x8e\xa4\xa3\x70\xbd\x83\x2a\xed\x7a\x03\x2c\x59\xab\x96\x63\xf1\x1e\xad\xcc\x8f\xc1\xe2\xd1\x7e\x1e\xbe\x97\xa8\xaf\x45\x19\xc8\x0a\x03\xa6\x16\xb9\x9a\xd1\x41\x58\x20\x27\xf9\x6d\xa3\xdb\x91\x86\x10\x0d\x91\x3c\x2f\xc8\x5d\x69\x1b\x12\x31\x07\x4a\xe8\xb6\x93\xbd\xad\x46\xbb\x63\x77\x12\x2b\x4a\x75\x7d\xeb\x08\x6b\x3c\xb6\x5a\xf9\x30\x6b\x27\x58\x84\xf7\x70\x6b\x08\x4c\x35\xc4\x1c\x4b\xec\x5c\x93\xc2\x17\xce\xfd\xab\x4c\x18\xbd\xdc\x87\x8a\x04\x10\x96\x55\x3c\x6a\x09\xc7\x4a\x02\xd0\x0a\xf3\x32\xa5\x06\x7d\x6f\x66\xc3\x61\xd9\x98\xf9\x86\x7c\xbc\xd8\x58\x7f\x98\x04\xc0\x32\xe4\xc1\xa6\x69\xf9\xcb\x67\xec\x73\x46\x10\xa6\xc0\xf5\x38\xc2\xa5\x5d\x88\x28\x2b\x62\xfe\x43\x73\x97\xf7\x02\x73\x3e\x05\xbc\x2a\xcf\x18\x52\x36\x5d\x8a\x5a\x72\xbe\xea\x84\x16\x94\x09\x45\x19\x03\xc7\x7a\x74\x68\x24\x98\xc2\x46\x85\x60\x21\x0f\x36\xbe\x44\x48\x27\xf8\xda\x40\x49\xe7\x58\x53\xfc\xbd\x37\xdf\x89\x5d\x96\xe4\x26\x15\xb8\x38\x19\x24\x7a\x1f\x03\xca\x7e\x46\xf3\xc5\xb3\x9a\x79\xcc\x50\x14\xa6\x08\x0f\x06\xb8\x9f\x85\x97\x78\x74\x8d\x7c\x14\xe0\x34\x4b\xa6\xf0\xec\x81\x9c\xbe\x1c\x47\x7d\x5c\x2a\xca\x68\x49\x0a\x55\x12\x3d\x00\x4a\x79\x40\x6e\x28\xb1\xb8\xe6\x82\x0c\xc2\x3d\xed\x0c\x68\x93\x93\xa3\x48\x26\xe4\x50\x4b\x38\x4a\x17\x11\x7a\x41\xb5\xf9\x54\xcf\x8b\x2e\x44\xf7\xbb\x96\xf1\x35\x0f\x44\xc5\x60\xd0\xbc\xb5\x32\x4f\x80\x5f\x80\xb3\x4a\x23\xc4\x99\xec\xae\x34\x0f\xd6\xc5\x43\xca\xbb\x16\x8f\x94\xfc\xae\x5d\x6f\xac\x36\x1b\xe5\xc4\xfc\x94\x69\x7c\x94\xf8\xf7\x3e\x9b\xb4\x67\x22\x70\x52\x18\x65\x38\x19\x48\xd6\xc2\xc8\xb9\x2a\x38\x7f\x65\x5d\xe7\x54\x4b\xb7\x5b\x16\x1f\xd1\x47\x43\x3c\x9a\xe0\x84\x88\x3f\x25\x16\xc1\x2e\xc3\x8d\xf9\x06\xeb\x28\x7f\x83\x7b\x3c\x2a\x33\xe9\x4e\x15\xb4\xab\x2b\x1f\x69\xaf\xf6\xa0\x4b\x15\x9b\xb0\xe5\xd6\xcf\xc9\x55\x15\xe3\x41\x00\xed\xba\xdf\x33\xd6\x85\x3d\x00\x2e\x52\xcf\x8b\x6c\x25\xc2\x61\x51\xcd\x22\x96\x67\xb8\x54\x29\x7c\xf1\x63\xa3\x95\x9e\x08\x4b\xde\x3b\xd8\xea\xde\x3f\x3d\x11\x11\x9a\x07\xa5\x20\x2d\x30\xba\xfa\x4b\xd0\xd4\xde\xd8\xef\x97\xa2\xab\xb1\xdf\xbf\x0b\x6d\x89\xea\x77\xa2\xaf\xcf\xd8\xae\x42\x92\xe8\xab\xfb\x11\xd0\x22\xf3\x40\x89\x8c\x36\x42\xeb\x2e\x46\x6c\x85\xc7\x5f\xa1\x49\x9a\xe3\xc3\x40\xb0\x01\x27\x06\xf6\x23\xf7\x62\xe0\x99\x5a\x20\xa4\xef\x81\x9f\x0d\x69\x58\xdf\x27\xfc\x3d\x1b\xe6\x97\x79\xa4\xdf\x9b\x73\xaf\xdd\xfa\x5e\xc3\xfb\x32\x64\x2a\x3c\x1c\x71\xf5\xde\xe3\xfd\x72\xc8\x8b\xc6\xfd\x15\x18\xca\xf1\x7f\x5d\x41\x7f\xc5\x77\x08\xfe\x6b\x0b\xa0\x6b\x5e\x51\xf0\xa8\xb1\xf9\x94\x49\x04\x20\x45\x83\x95\xde\x17\x84\xa7\x51\x6a\x4b\x2e\x30\xae\x30\xb2\x9d\x56\x39\x13\x2d\x56\x96\x1b\x69\x89\xc7\xdb\x99\x69\xb1\xea\x7f\x9e\x9d\x56\x59\x04\xee\x8b\x53\xf6\xa0\x3d\xbb\xa9\x16\xc5\xe5\x6f\x60\x4b\x6c\x94\x1f\xfb\x13\x21\x1c\x8e\xfd\xc9\xe2\xb1\x17\x2c\x2e\xe2\x26\x08\x97\x55\x26\x1d\xf3\xdb\x1a\x2c\xa3\xa5\x4d\xd4\x74\xdb\x2c\x5f\x67\xb8\x6e\x31\x5a\xa6\x7f\x2e\xd3\x65\xfa\xe7\x34\x60\xe6\x80\x1b\x39\xe0\x4a\x88\x96\x50\xbd\x6a\xb1\x89\xe6\x5f\xca\x58\x46\x73\xc0\x4d\x0d\x70\xc3\x09\xb8\x61\x05\x6c\x87\x9c\x25\xe1\x64\x04\x57\x2f\x15\x3a\x2c\xaf\x5e\x81\xdf\xc4\x57\xfa\xdc\x20\xcf\xeb\xe4\x11\x50\xb0\x41\x11\x53\xf1\x89\x4e\x45\xe5\x13\x7a\x45\x5a\xff\xe9\x27\x04\xd8\x7c\x42\xcf\x51\x6d\x65\xad\x2d\xcd\x50\xf5\x25\xfa\x54\x10\xee\x42\x9a\x7b\x6a\x0b\x3e\xf6\x27\x60\x33\xbb\x95\x55\x2a\x1c\x61\xe8\x74\x07\x3d\x47\x95\x26\x5a\x46\x9f\xaa\xac\xa7\xcd\x81\xd5\xdb\xc9\x88\xcf\x60\x2a\x2e\x82\x80\xa7\xfb\x36\xa9\x91\x7d\x20\x28\xa1\x4d\x24\xa1\xd3\x31\x9c\x49\x20\xb6\x5e\x5e\xdc\x6e\x1c\x3c\x0c\x47\x18\x55\xe4\x7e\xb2\x70\x01\xae\x58\x23\xd6\x61\x91\x9b\x59\xbc\xcf\x8c\xb3\xca\x50\xef\x60\x27\xaf\xf0\xe4\xdb\xdb\x59\x0a\x56\xbb\x10\xa3\xff\xae\x4d\x2d\xd9\x0e\x41\xed\x7a\xe4\xad\xa4\xbc\xb9\xa5\xa8\xb5\xe0\xe6\x20\xea\x09\x43\x79\xf1\x46\x18\xca\xcf\xe7\xfb\x46\x89\x04\x5f\xe2\x24\xc5\x07\x52\xc1\xfc\x95\x2d\xae\xd9\x0f\xf9\x67\x27\x75\x17\x02\xb5\x6d\x01\xfc\x4f\xe7\x3f\x84\xfd\x90\x15\xca\x3a\x58\xc8\x69\xd4\x86\xcf\xf8\xc2\x66\xb6\xf9\x9f\xaa\xe7\x68\x13\x7d\x2a\x17\xab\xd3\xc2\x52\xf6\x2f\xa2\x38\xc1\xdf\x8c\xab\x48\x20\xf7\xa3\x00\xfc\x9c\xf3\xe9\x0e\xc9\x9b\xc3\xc1\x3c\x9e\x21\xb5\x43\x61\xfc\xb0\xb9\x89\x96\xeb\x73\x78\x92\x4c\x61\x72\xed\x5b\x31\x62\xab\x48\x90\x88\xb4\x97\x29\x7e\x17\xc7\x93\x7c\x49\x78\x3a\x0e\x9e\x34\xa3\x8a\xc8\xa1\xdd\x78\xfa\x93\x0d\xf4\x6c\xeb\x75\x77\x7b\x67\xf7\xcd\xde\xfe\x3f\xdf\xbe\x3b\x78\x7f\x78\xf4\x7f\x8f\x4f\x4e\x3f\xfc\xf2\xeb\x6f\xff\xfa\x1f\xbf\xd7\x0f\xf0\xe0\x62\x18\x7e\xfa\x3c\x1a\x47\xf1\xe4\x7f\x93\x34\x9b\x5e\x5e\xcd\xae\xbf\xd4\xea\x8d\x66\xab\xdd\x59\x5b\x7f\xb1\xb4\xba\xc9\x22\xdc\x8a\xa3\x9d\x58\xb4\x0b\xa3\x9a\x0f\xb1\xc3\x2b\x25\xb7\xdc\x50\x2c\x4c\x6d\xa2\x90\xd6\x8e\xcd\x4d\x85\xcc\x74\xe8\xd8\x6f\x98\x63\x57\x4a\x84\x24\x69\x79\xe4\xd4\x24\x3b\xb0\xa0\x65\x54\xaf\x9e\x83\xf7\x4a\x2e\x30\x35\x4c\xe2\xe2\x40\x1b\x65\x80\x56\xcf\xf9\x06\x2f\x8b\x61\x16\xa8\x54\x20\x8a\x94\xc8\x3d\x5f\x89\x30\x03\xe8\x7f\xa5\x2d\xca\xbe\x35\x51\x71\xf0\x1e\xc4\x86\x78\x69\x49\xf9\x20\xc8\x56\xfc\x60\x14\x69\xc4\x96\xb4\x86\x45\xb8\xc9\x73\xf7\xe8\x87\x7c\x69\x8f\x78\xe9\xcc\xec\xd3\x7e\x3c\xfa\x3f\x1e\xfd\xc5\xd1\xff\xc3\xe9\xee\x72\xbd\x83\x5e\xef\x94\x76\xd0\xaa\x77\x5e\xef\xc8\x3e\x5a\xf5\x8e\xfa\x04\x5f\x6f\xef\xb4\x45\x91\xf9\x73\x1d\xb7\x4a\xe2\x70\x8f\xce\x5b\xf5\x8e\xd3\x7b\xab\xde\xf9\x1b\x68\x04\xca\x1f\xd6\x61\x30\xee\x72\x56\xb7\xfb\xfb\x83\x65\x54\x1c\xe0\xa3\x38\x8c\x32\x97\x93\x71\xbd\xe3\x70\x32\xb6\x1e\xa6\x73\x4c\xdd\x5e\xc6\xa2\xc9\xb2\xae\xc6\x12\xd0\x3b\x9c\xa0\x74\x22\xbe\x93\xb3\x1a\xd0\xe6\xa2\x6b\xe3\xbb\x3e\x46\xd1\x55\x25\x5c\xd6\xf8\xe2\x5b\xc8\x67\x0d\x2a\x2d\xe6\x6b\xcc\x6b\x09\xf9\x96\xbf\x78\x68\x4f\x63\xb5\xe1\x72\x8e\xc6\x75\x90\x7d\x04\x86\xaa\x9b\x31\x11\x81\xf2\xc5\xd2\x20\x8b\x45\x0b\xc2\xe6\xa6\x70\x97\x94\xa3\x8d\xce\xf3\xf2\xa1\x30\x18\x59\xbe\x2b\xb1\x87\x49\xfb\xd4\xbb\x3b\xef\x53\xef\xbe\x83\x7d\xaa\x0c\x0e\xf7\xbd\x4f\x59\x97\xd3\xbb\x9d\xc7\x6d\x4a\xfc\xdd\xdb\x36\x95\x5e\xf9\x93\x9d\x28\x08\xfd\xa8\xb2\xe8\x8e\x65\x3b\x92\x7f\xff\x5b\xd6\xbb\x87\xd9\xb2\xca\x2c\x93\xef\x7f\xcb\x7a\xb7\xa3\x6d\x5a\x8f\x3b\x96\xb1\x63\x49\x2b\x66\xa1\xcd\xeb\x9b\xee\x5e\x62\x5e\x24\x6c\x09\x20\xa5\x8f\x3c\x1a\x3e\x7c\x61\x77\x27\x74\x71\xd7\x6a\xe4\xff\xe1\x62\x85\x7e\x24\xdd\x67\x5f\xe9\xb7\x7c\xf9\xcf\x53\x17\x00\x61\xb9\xb5\x05\x9d\x3b\x69\x0b\x58\x8e\xda\x6f\xa9\x34\xf0\x90\xf4\x2a\x1d\xfa\x75\xed\xd5\x70\xec\xf7\x1f\x50\xb5\xe0\x21\xde\x2c\xfc\x82\xd6\xfe\x0e\xea\x06\x23\x5f\xec\x2d\x54\x11\x8a\x11\x8b\xf4\xe5\x60\xbb\x0d\x35\xc1\xe4\xe6\x60\xbb\x6d\x93\xf1\xc0\xc4\xf9\x33\xbe\xa6\x59\xb0\xa9\x1d\xac\xe8\x2b\x38\xff\xfa\x51\xc6\x93\x78\xc7\xc9\x98\xda\x68\xef\xfc\x72\xf4\x11\x36\xdd\xd3\xf8\x2d\xce\x85\x41\x74\x75\x75\xb5\x12\x4f\x70\x94\xa6\xa3\x95\x38\xb9\x58\x0d\xe2\x7e\xba\x0a\x49\xb8\xe3\x55\xad\xce\x30\x1b\x8f\x2c\x8a\x90\x9d\xcb\xc9\xdb\xed\xdd\x1c\x6d\xf1\x5c\x32\x18\xc2\x7c\x1f\x10\x6d\x8f\x33\xbc\x5f\x58\xca\x73\xd8\xa3\xc8\xc0\xa4\xe4\x21\x8c\xb8\xdb\x8b\x14\xee\x39\x77\x75\x69\xa1\x4a\xbd\xb1\xae\x78\xba\x18\xf0\x1d\x46\x6a\x72\x58\x0c\x3d\x41\xca\xc1\x76\x7b\x1e\xb6\x61\xc6\x6c\x91\xf5\x20\xd5\xd2\x87\x2c\x46\x13\x6a\x75\x2a\x7b\xe7\x38\x76\x38\xc3\x2f\x46\xdb\x1d\xd8\xf0\x6c\xa0\x7a\x63\x1d\x4c\x48\x95\xaf\xb4\x73\x80\xb9\xf6\x25\xc7\x47\x69\xfb\xe6\xd6\x6e\x37\x0e\xa2\x7d\x68\x3f\x1c\x2c\x35\x7a\x0f\x66\xd6\x9f\x83\x81\xe1\x7d\x43\x69\x7e\x4e\x8a\xa6\xf9\x15\xff\xc8\xe7\x6a\x5d\xcb\xe7\x77\x5b\x30\x9e\x3a\x8d\xb5\x5a\x4d\x07\xbc\xa0\x77\xd0\x5c\xbf\x9f\x72\xf2\xee\x36\xa4\xf0\x27\x34\x42\xa8\x02\x12\x61\xfb\x90\x81\x95\x2c\xda\xdb\x58\xe9\xf3\xba\x34\x16\x80\x0d\x50\x41\xe5\xd4\x1f\x65\x68\x0b\xfe\xb3\xb8\x58\x0c\xd4\x45\xc9\xfb\x3e\xc8\x0b\x93\xcd\xe3\x73\x30\x58\xa1\x6e\x11\xb8\xc2\x3b\xe3\x01\x7e\x05\x79\x6b\xa0\xb8\x92\xdf\x51\xad\xb9\x90\xc0\xab\x4e\xb1\x45\xbc\x25\x2b\x9d\x71\x0f\xb3\xb6\xf0\x52\x23\xe4\xc1\x4c\x94\xf3\xd5\x61\x85\xe5\x72\x0b\x83\xd0\x02\x74\x88\xdf\xc2\xd8\xd8\x52\xa2\x2d\x72\x46\xce\x81\x09\x9f\x60\xf1\xc6\x79\x5c\xe6\x7b\x0c\xed\x11\x7b\xb2\x94\x93\x98\x38\x2d\x9a\xbf\xb0\x60\xf9\x86\x6d\x4c\x04\xbc\xfa\x91\x19\xb3\x68\xb8\x72\x83\x96\x57\x1c\x1f\xeb\x51\x80\x88\x71\xe0\x39\xe0\xbc\x60\x56\x5d\x96\x68\xd9\xf9\xd7\xca\x48\x0e\xc6\x90\x3b\x81\x30\x28\x9c\xd8\x24\xa3\x60\x83\x5e\xd5\xe6\x85\x3f\x9d\x59\x82\xd0\x84\x18\x38\xf3\xb3\x72\x50\xaa\xd3\x83\x92\x34\xd0\x85\x69\x7f\x34\xec\x05\xb2\xce\x51\xb0\x61\x6c\x19\x2a\xf3\x9d\x44\x56\x2c\x66\x8c\xb5\x0d\x6d\x94\xa5\x5a\x92\x8e\x86\xd3\x9f\x25\xda\x85\x08\x30\xc7\xeb\x95\xb5\xb9\x2e\xc5\x83\x65\xbf\xe3\x5b\xf1\xde\x05\xf9\xee\x3d\x7a\xdf\x5a\xfc\xca\xa4\xde\x94\xe7\xe6\x52\x25\x45\xbb\x21\xbd\x57\xb9\x7b\xfe\x01\x29\x5c\x5d\x6c\xda\x74\xbf\x76\x71\xf6\xc5\xaa\x79\xc8\x21\x36\xdc\x05\x4c\xa1\xd8\x20\x54\xc8\xb9\xac\xef\xda\x73\x4c\x17\x16\x36\xec\xaa\xc4\x02\x8e\x2b\xc5\xfb\xdd\xcd\xcb\x82\xe3\x3b\x85\x66\x3f\xbb\x7b\xfc\xf0\xb9\xd1\x5e\xf7\xf8\x91\x74\x63\x6d\x8d\x9c\xe9\xd7\xfe\xd2\x67\xfa\x7e\x38\x19\xe2\x64\xf9\x81\x4d\x04\xe0\xf4\x2e\x37\xf5\xe7\x1c\xe2\xcd\xcc\x9d\xf7\x72\x9a\xef\x42\xc7\x8e\x08\xc7\x49\xc5\xa1\x5d\x7e\xe9\x36\x21\x10\xef\xb5\x4c\x18\x4a\x0d\x72\x86\xf3\x33\xa8\x44\x7f\x72\x46\xcc\x2a\xee\xc2\xcb\x8c\x45\x55\xa0\x45\x16\x48\xa7\x41\x4e\x37\x74\x6e\x32\x3c\xcb\xc8\x29\xd2\x67\xcf\x68\x42\xfb\xc4\x7c\xb3\x78\xaa\x0d\x3f\xc0\xfd\x70\xec\x8f\x46\xd7\x2c\x0d\x68\x50\xfa\xe6\x46\x1e\x95\x1b\xd6\x0a\x1b\xb8\x53\x81\x86\xda\xec\xe2\xc9\x38\x6e\x83\xdf\x83\xa6\xe7\xc8\xa7\x44\xba\xd5\x91\x3b\xbf\xd8\xc5\x8e\x52\xd3\xe1\xa8\x25\x97\x59\xc9\x67\x37\x4f\x20\xb1\x87\x67\xb7\xcc\x04\x61\x19\x5e\x89\x7c\xe4\xfb\x86\x05\xa7\x53\xbb\x79\x08\xa3\xc9\x34\xbb\xcb\x9c\x72\xf2\x50\x89\xee\x16\x74\x76\x5f\xc4\xd1\xd7\x18\x85\x85\x3e\x6e\x9d\x54\x02\x46\xcb\x1e\xc2\x26\x9f\x9c\x4d\x94\xb7\x41\x2b\xbc\xb4\x52\x4f\x57\xa1\x1e\xae\x11\xc8\x01\x6d\xc8\x40\x6f\xec\xba\x79\xf7\x4e\x9b\x77\x57\xdb\x6d\xa5\x0d\x62\xa3\xdd\xf0\x34\xe5\xf9\xfa\xa3\xa9\xdd\xdf\x5d\xf7\xed\xda\x1d\x8d\x48\xe6\x45\x9a\x70\xf3\x90\x02\x0e\xc0\x42\xe3\x6a\x4d\x44\x45\x4a\x6c\xca\x8e\xaa\xf7\x93\x90\x1e\x5c\x5e\xe7\x72\xbc\xd2\x4a\xe2\x92\xaa\x28\x22\xab\x83\xf3\x32\xee\x27\x38\xbb\x27\xa5\x12\x91\x7f\xf7\xec\x81\x83\xa0\x97\x8c\x4d\xd8\x3c\x91\xa9\xa3\x6f\x59\x8d\xa1\xec\x1c\xec\x08\x10\x6c\xd5\x19\x09\x7d\x11\xf5\x51\x10\x8f\xba\x87\x7b\x81\xb7\xdb\x7d\xc6\x97\x85\x03\xd3\x9c\xf0\xb2\xf4\x50\x25\x45\x97\xd5\xc7\xc9\x6e\x88\x5f\xa0\x98\xa2\x1d\x7d\x2d\xc5\xc5\x64\x5d\x2f\x8a\x8c\xa9\x55\xe2\xfa\x02\x1d\x96\x3d\x4a\xe6\xd6\x68\x14\x5f\x21\x3f\xe9\x85\x59\xe2\x27\xd7\x88\xa9\x97\x3e\xe3\x6b\x4b\xdc\xc1\xcf\xb2\x46\xe2\x67\x6b\xc3\x05\x03\xa5\xab\x5b\xca\x8d\xd6\x1c\x67\x48\x82\x52\x81\x1b\x24\xc4\x7f\x03\xdd\x46\x9c\xa0\x30\x8a\x70\x02\xd1\x67\xe3\x69\x06\x02\x84\x1e\x85\x0f\x62\x26\x52\x1d\x23\x25\x43\xf6\x40\x5b\x31\x02\xd2\x71\x8d\x9f\x5c\x23\xb4\xd4\x58\x84\x04\x62\x49\x2b\x19\x17\xe9\x23\x43\xa9\x60\x28\x15\x34\x1a\xfb\xed\xf0\x18\xe6\x93\x5e\x03\x4e\xfc\x00\xf5\xe3\x28\xcd\xfc\x48\x6f\xde\x9a\x44\x4a\x9d\x63\xb7\x62\x4d\xe0\x7d\x16\x9e\xa3\xdf\x37\x51\x6d\xd6\xee\xd3\xff\xd9\xdc\x61\x8c\xc2\xcd\x0e\xfd\x5f\xb1\x66\x2c\xd6\x74\x62\xa1\xf6\x6c\xa3\xc8\x3f\x21\x0e\x19\xec\x40\x0f\x11\x85\x4c\x30\xf1\x7b\x89\x44\x56\x90\xaf\xcc\xc6\x8c\x2d\x03\x09\x9d\xb6\xf1\x71\x87\x9e\x54\xd5\x17\xe7\x0b\xe6\x76\x11\xc8\x60\x98\xbf\x9b\xf8\x63\x07\x5b\x5d\x16\x7d\x0c\xf0\x0a\x61\x89\x15\x46\x42\x59\x70\xca\xcb\x04\x22\x33\x4a\xdf\x7f\x30\x32\x99\x24\x78\x2b\x73\x83\x8f\x3d\x54\xf4\x30\x18\xea\xff\xf4\xe8\x61\x73\xc4\xd4\x45\x44\x44\xc2\x43\x73\x1a\x9a\x1b\x41\xcc\x5d\x63\x6e\x14\x31\x77\xd5\x07\x8a\x24\x76\x77\x6e\xd7\xa5\xea\x69\x18\x6f\xcb\x7e\x4c\xa4\x8b\x3d\x7b\x70\xb4\xc2\x80\x63\x85\x1c\x53\x1e\x2b\x0d\x68\x2e\xa1\x70\x49\x83\x5f\x32\x09\x54\xaa\xce\x90\x63\x63\xbf\x6f\xbf\x24\x12\x07\x7f\x87\x11\xdc\x8b\xbf\xb4\xc2\x7c\xd6\x69\x2d\x5b\x5e\x8f\xc2\xde\x32\x41\x25\x00\xdb\xd6\x54\xfb\x8a\xa3\xfe\x32\xd8\x34\x5a\xde\x53\x37\x4b\xed\xc3\x38\x68\xcf\x37\xbe\x4b\x87\x7e\xa3\xad\x83\x24\x2f\x1b\x3a\xb8\x74\xe8\xb7\xeb\x0d\xf3\x65\x73\xdd\x52\xb2\xa9\xbd\x4a\xc2\x09\x1e\x07\xf5\x4e\xcd\x6a\xfb\xa7\xbc\x9a\xf4\x3e\x07\x03\xbd\x1d\x7c\x39\xf9\x1c\x0c\x8a\xee\x1d\xd4\xae\xc7\x01\x5e\xee\x0f\x7a\xd6\xd7\x59\xe2\x78\xbd\x7c\x31\xf2\x83\xb1\x1f\xd9\x3e\xc7\x76\x60\xb8\xaf\xbf\x9e\xf8\xc1\xb2\x1f\xa5\xe1\xec\x45\x43\x1f\x04\xf2\x29\x4c\xe3\x7a\xad\xde\xd0\x47\x9c\x7d\x7a\xb1\xf6\x62\x4d\x9f\x21\xf2\xe9\x0b\x4e\x62\xe6\x7a\x6d\xf9\x1a\x39\xbe\x51\x1d\xd9\xf2\x10\xcf\xb4\x0f\x3e\xd6\x89\x8b\xc6\xdd\x08\x8c\xf7\x49\x5f\x9f\xdc\xc4\xef\xf5\xc2\xcc\xfa\x72\x79\x84\x2f\xfc\xfe\xf5\x43\xdf\x01\x89\xd5\x03\x4f\xfa\xa2\x81\x97\xf9\x5a\x11\x8f\x6c\x89\xc0\x33\x59\x19\x9a\x59\x28\x5b\x07\xe2\x77\xa3\x25\x7e\x13\xaa\xe7\xbf\x09\xb1\x8b\xdf\xf4\x57\x4e\xda\xb9\x7d\x29\xfc\x62\x84\x4c\x31\xa0\xf4\x6b\xdc\x61\x51\x74\x38\xb5\x4a\x4f\x59\xa2\x3e\x09\xda\xcc\xdf\xc6\x4a\x0d\x42\x89\xb4\x59\x99\x00\xc5\x1b\x41\x77\xf2\x1b\x4a\x6e\xe2\x8d\x4c\x65\xe2\x65\xa4\xbe\x92\x68\x0a\x9e\x09\x29\xc1\x8f\x9c\x82\xe8\xa8\xf4\xd9\x40\x31\x7a\x91\x7e\x73\x32\x59\x54\x11\xa9\x28\x20\x65\x5e\xbb\xb8\x62\xd2\x1d\x8a\x8d\x75\x69\xa3\x5d\xf7\x8a\xb5\xc9\x9e\x4a\x57\x1b\xed\x96\xa7\x10\xde\x46\xbb\xed\xe5\x13\xbf\xd1\xee\x78\xea\xe8\x6d\xb4\xd7\xf4\x1b\x61\x9d\x94\x37\x3a\x35\x8f\x51\xeb\x46\x07\xf0\x11\x94\xb2\xd1\x69\x78\x32\xad\x6c\x74\x5a\x9e\x8d\x5a\x36\x3a\x4d\x4f\xa6\x90\x8d\x4e\xdb\x93\xe9\x67\xa3\x03\x78\x29\x34\xb3\xd1\x59\xf3\x74\xaa\xd9\xe8\xac\x7b\x3a\xdd\x6c\x74\x5e\x78\x06\x91\x6c\xac\xd5\x3c\x0b\x39\x6d\xac\x01\xfe\x6c\x49\x6c\xac\x01\xf6\x8c\x34\x36\xd6\x5a\x9e\x41\x1c\x1b\x6b\x80\x38\x21\xa3\x8d\x35\xc0\x39\x5f\x67\x1b\x6b\x1d\xf9\x02\xdd\xcb\x97\xec\xc6\x1a\xbf\x5a\x27\x8b\x79\x63\xed\x85\xc7\x97\xea\xc6\x7a\xcd\xcb\x97\xf0\xc6\x7a\xdd\xcb\x17\xf7\xc6\x3a\xa0\x93\x53\xf0\xc6\x3a\x34\x2e\x18\xcd\xc6\x7a\xeb\xe6\xdc\xeb\xd4\x1e\x2f\x0f\xfe\xfc\xcb\x83\xee\x10\xf7\x3f\x93\x4e\xc1\x4a\xa1\x6e\x40\x34\xcd\x59\x3a\x9d\x90\x81\xc1\x2c\x3e\xb5\xd4\x6f\x90\xe3\x69\x48\x73\xf4\xc3\x26\x7a\xc6\x21\x3f\xb3\x58\x84\x08\x27\x8d\x7b\xbc\xae\x28\x34\xc7\x17\xed\x1c\xe3\x01\x4e\x30\x1c\xf4\x92\xf0\x02\xce\x64\x61\x14\x66\x39\x98\x74\x3a\xc1\x09\xa8\xae\x37\xb5\xf4\x1c\x12\x94\xad\xe9\xc5\x18\x47\x99\x56\x00\x65\x31\x1a\xfa\x51\x30\xc2\xca\xb8\xc9\xb0\x7b\x56\xc8\x8a\x4d\x0d\x54\x35\xdd\x01\x25\xdd\x37\x8d\x25\x4f\x4d\xa0\xc2\x28\x5b\x97\x34\xf4\x03\xb9\xbe\x50\x4c\xa8\xb3\x63\x1e\xf3\xf3\x1a\x54\x09\xff\x81\x40\x85\x17\x32\x36\xca\x21\xc2\x8a\x58\x4c\xd3\x7f\x01\xa4\xcb\x10\x5f\xb9\x50\x74\x36\x2f\x21\xbc\xcf\x51\x40\x5f\xbf\xaa\xe5\x39\xc1\x01\x96\xa0\x33\xe6\xd5\x7f\x20\x6b\x4e\xd8\x8e\xc0\xa2\xb3\x03\x37\xaa\x56\x8d\x56\x9c\x58\xd5\x3b\x76\xb4\xdc\x2d\x2d\x56\x63\x3f\xca\x9a\x8d\x45\x9b\x58\xac\xc6\xee\x28\xf6\x6f\x53\xa5\xd3\x82\xf7\x79\xf9\x5b\x92\xd2\x0a\xa5\x60\x0f\xc9\xaf\xae\x33\x7c\x08\xc9\x81\x8c\xd7\xb6\xbc\xcb\x0a\xfd\xed\xd1\x45\x97\xb7\x55\x66\x45\xe4\xa5\x17\x53\x21\xe4\xd0\x5e\x0b\xdc\xd0\xa6\x1d\x67\x8b\x66\x61\x67\xc6\xb2\xaf\x5e\x67\x36\xe3\xe7\x85\xdc\x05\x6d\xa8\x2c\x92\x4f\x3b\xaf\x7f\x16\x9e\xdf\x2a\x79\x76\x6e\xce\x1d\x7e\xc1\x54\x55\x9b\x3b\x8e\xaa\x45\x05\x63\xcd\x53\x5b\x78\x88\xb9\x11\xda\x3a\xa2\xcc\xb7\x35\xeb\x19\x19\x4d\xf2\x9a\xc0\x43\x11\x91\xfa\x64\x66\x6e\xb6\xeb\x4f\x26\xa3\x6b\xd6\xb0\x9f\x5c\x4c\x09\x0b\x4f\x8b\xfc\x15\x19\xbf\x5e\x99\x24\x71\x16\x13\x1c\x65\xce\x5d\x64\x38\xa1\xef\x3e\x76\x05\x4b\xa7\xfe\x28\xeb\xfc\x39\xb2\x0e\x04\x8c\xfe\x13\xe2\x12\x59\x73\x2a\x95\x30\x91\x80\x2d\x96\xde\xe3\xa1\x2c\xd7\xad\x93\x2a\xa7\x8c\x59\x48\x25\xa9\xea\x52\xbb\xf9\xb3\x49\x7a\x2e\xbe\xd2\x69\xd9\xb9\xc8\x29\x61\x13\x9b\x74\xf8\x56\xfc\x5e\x4a\x7f\xa4\x61\xc4\x82\xb1\x12\x96\x51\x9b\xd5\x6b\xec\xaf\x8a\xbe\xaa\x69\x7c\xd9\xf2\xaa\x54\xad\x16\xea\x07\xdb\x6d\xcd\x9a\xc2\x66\x00\xa2\x7b\x4d\xa2\x4d\x36\xaa\x16\x03\x10\x9e\xf6\xa6\xf0\x76\x2c\xd7\x04\xdb\x73\x15\x9f\x99\x9c\xb4\x36\xeb\xac\xb5\xda\x8d\x66\xad\xee\xa1\xda\x0c\x0f\xfa\x81\xdf\x5b\x7f\x61\xc9\xab\x58\x9b\xbd\x58\xef\xf9\x41\x7f\x80\x3d\x18\x98\x66\xa3\xdd\x5a\xeb\xa8\xe5\xce\x9d\x37\x62\x5a\x1a\x3d\xb9\x17\x07\x22\x93\x9e\x6d\xef\xba\xf2\x27\x08\x83\x7b\xf5\xfc\x3d\xa4\xde\x71\xef\x18\xee\xeb\x6b\x3e\x1b\x14\x89\x8f\x04\x1e\x4f\x2f\x88\x42\x47\x04\xde\x83\x8f\x52\xe9\x83\x33\xfe\x70\x6e\x73\x09\x91\x3e\x13\x82\x33\x0b\x90\xbf\x4a\xa5\x22\xc1\xa4\x9e\xe2\xe8\x2b\x92\x5f\xc2\x5e\xd7\xaa\x6a\x3e\xe2\xe8\x6b\x49\x80\x8d\x56\xd5\x02\x10\x42\x19\x2b\x2e\xe9\x26\xb8\xbb\x19\x87\xec\x29\x37\x14\xf6\xeb\x7e\x65\x48\x6b\x48\x1a\x53\xb4\x84\x6a\xba\xf8\xa0\x94\xae\x6b\xa5\xeb\x85\xa5\x1b\x5a\xe9\x46\x61\xe9\xa6\x56\xba\x59\x58\xba\xa5\x95\x6e\x15\x96\x6e\x6b\xa5\xdb\x85\xa5\x3b\x5a\xe9\x4e\x61\xe9\x35\xad\xf4\x5a\x61\xe9\x75\xad\xf4\x7a\x61\xe9\x17\x5a\xe9\x17\xc5\xb3\x53\xd3\x66\x67\xce\x64\xd6\xb5\xe2\xc5\xb3\x59\x6f\x68\xc5\x8b\xa7\xb3\xde\xd4\x8a\x17\xcf\x67\xbd\xa5\x15\x2f\x9e\xd0\x7a\x5b\x2b\xde\x36\xb8\xc1\xea\x2a\x61\xc8\x9f\xc3\xe8\x82\x54\x0d\xfd\x51\xcf\x26\x36\xfb\x64\x1b\x38\xb3\x0e\x54\x0f\x3e\x59\x07\xa5\x0f\x9f\xac\x03\x10\xc0\xa7\xa6\x0d\x9d\x6e\x7e\x07\xad\x7e\x23\x48\xec\xee\x56\x7c\x0f\xf5\x3c\xd4\xf7\x50\xe0\x49\x0b\xd4\x43\x68\xcd\x23\x5b\x68\xed\x5c\xe7\x0d\x01\xad\x17\x78\x48\x54\xcd\x47\xc8\x43\xa8\xde\xf0\xd0\xe9\x59\xdd\xa8\xd7\xa7\xf5\x68\x4b\xb4\x6a\xbe\x68\x49\xbd\x35\x52\xaf\x61\xd4\xeb\xd1\x7a\x02\x49\x5f\xaa\xd7\xf4\x10\x6a\x40\x7b\x4d\xa3\x5e\x51\xff\x5a\xa2\x7f\xad\x85\xfa\xd7\x16\xfd\x6b\x2f\xd4\xbf\x8e\xe8\x5f\x67\xa1\xfe\xad\x89\xfe\xad\x2d\xd4\xbf\x75\xd1\xbf\xf5\x85\xfa\xf7\x42\xf4\xef\xc5\x42\xfd\xab\xd7\x3c\xd6\xbf\xba\x49\x30\x45\x1d\xac\xd7\x3d\xd6\xc1\xba\x49\x31\x45\x3d\x24\x58\xd2\x1e\xd6\x4d\x92\x29\x24\xd1\xa6\xc7\x49\xd4\xa4\x99\xc2\x3e\xb6\x44\x1f\x4d\xa2\x29\xec\x63\x5b\xf4\x11\xa8\xc6\xec\xe4\x9b\x37\x8e\x4e\x7a\x08\xb5\x69\x27\x4d\xba\x09\x68\x45\x6b\x27\x09\xbd\xbd\xa0\x15\x4d\xc2\xe9\xd3\x8a\xf6\x4e\xd6\x3d\x44\x3a\x7a\x7a\x56\x37\x29\xa7\x47\x2b\x5a\x3b\x49\x38\x46\xa3\x06\x15\x4d\xd2\x29\xea\x63\x5b\xf4\xb1\x61\xe7\x35\xae\x3e\x12\x9a\xa3\x7d\x6c\xd8\x99\x8d\xb3\x8f\x6d\xde\xc7\x86\x9d\xdb\xb8\xfa\xd8\x12\x7d\x6c\xd8\xd9\x8d\xab\x8f\x2f\xf2\x3e\xda\xf9\x8d\xb3\x8f\x2d\xd1\x47\x3b\xc3\x71\xf5\x91\x30\x46\xd6\x47\x3b\xc7\x71\xf5\x71\x3d\xef\xa3\x9d\xe5\x38\x69\xb5\xe9\xf1\x3e\xda\x79\x8e\xab\x8f\x0d\x41\xab\x0d\x3b\xd3\x71\xf5\x71\x4d\xf4\xb1\x69\x67\x3a\xae\x3e\x92\xe5\x4f\xfb\xd8\xac\xdb\x17\xe4\xde\x9e\x9b\x58\x5b\x80\x6b\xd3\xce\x75\xf6\xf6\xec\x9d\x24\xc3\x4a\xd6\xd6\xe9\x59\xd3\xce\x75\xf6\xf6\x0a\x16\x64\x07\x2a\xda\xb9\xce\xde\x9e\xa3\x93\x2d\x0f\x35\x9a\x50\xd1\x24\x9d\xa2\x3e\xd6\xf3\x3e\xda\x99\x8e\xab\x8f\xad\xbc\x8f\x76\xa6\xe3\xea\x23\x4c\x24\xed\xa3\x9d\xe9\x38\xfb\x58\x13\x7d\xb4\x33\x1d\x67\x1f\x9b\x1e\xeb\x63\xcb\xce\x74\x5c\x7d\xac\x89\x3e\xb6\xec\x4c\xc7\xd5\xc7\xa6\xe8\x63\xcb\xce\x74\x5c\x7d\x24\xac\x9c\xf6\xb1\x65\x67\x3a\xae\x3e\xbe\x10\xf3\xd8\xb2\x33\x1d\x57\x1f\xc9\xf2\x60\x7d\xb4\x33\x1d\x27\xad\xb6\x39\xad\xb6\xec\x4c\xc7\xd5\xc7\x46\xde\xc7\x35\xfb\x82\xdc\xdf\x77\x0b\xaa\x1d\xda\x49\x3b\xd7\xd9\xdf\xb7\x77\x12\x68\x0e\x78\x40\xcb\xce\x75\xf6\xf7\x0b\xc4\x80\x36\x88\x80\x76\xae\xb3\xbf\x6f\xef\x24\xe1\x1d\x0d\x18\xd6\xb6\x5d\xd4\x71\xf5\x91\xcc\x07\xed\x63\xdb\xce\x74\x5c\x7d\x6c\x8a\x3e\xb6\xed\x4c\xc7\xd9\xc7\x9a\xe8\xa3\x9d\xe9\xb8\xfa\x58\xcf\xfb\x68\x67\x3a\xae\x3e\xae\x8b\x79\x6c\xdb\x99\x8e\xab\x8f\x40\x73\xb4\x8f\x76\xa6\xe3\xea\x23\x88\xe4\xb4\x8f\x76\xa6\xe3\xec\x63\xd3\xe3\x7d\xb4\x33\x1d\x57\x1f\x5b\xa2\x8f\x1d\x3b\xd3\x71\xf6\xb1\xce\xfb\xd8\xb1\x33\x1d\x57\x1f\x1b\xa2\x8f\x1d\x3b\xd3\x71\xf5\xf1\x85\x98\xc7\x4e\xd3\x5c\x90\x70\x8d\x92\xe1\x64\x8c\x83\xd0\xcf\x98\x53\x19\xb8\x2b\xa8\xe5\xc8\x11\x17\x6d\xa2\x0a\xfc\x77\x09\xf9\xba\x86\x95\x96\xa9\xb3\x32\x75\x52\xa6\x67\x2f\xd3\x60\x65\x1a\xa4\x4c\xdf\x5e\xa6\xc9\xca\x34\x49\x99\xc0\xd0\xe6\x6a\xaa\xca\x5d\x8b\xa5\xee\x82\x01\x6d\x21\x53\xba\xc8\xa6\xeb\x67\xbe\xed\x60\xee\x67\xbe\x08\xe5\xe3\x67\xbe\x5b\x39\x16\xbd\x0e\xb3\xf4\x34\xce\xfc\x91\x80\x19\x6d\xfb\x99\x4f\x3d\x48\x9e\xa3\x75\x0b\x74\xa8\xf3\x0e\x0f\x32\x0e\x5d\x78\x9c\x40\x79\xa3\x33\xce\x94\x57\x02\xcd\xb3\x1c\xe4\xcf\x3f\xff\x8c\xda\x70\xf1\x56\x9b\xad\xd7\xf2\xfb\xb6\xbc\xc4\x3f\x50\xb3\x61\x10\x87\xda\x97\x3d\xb4\x89\x40\xed\x3e\x18\xc5\x71\x52\x91\x3a\xb9\xaa\xe8\xde\x5d\x9d\x83\xb2\xef\xd0\xa6\xf4\xa4\x2f\x1c\x81\x7a\xa5\x52\xc9\x71\x5b\x42\x9d\x16\xcd\x97\xf6\x02\x82\x89\xb6\xaa\x54\x61\x63\xd7\xcf\xf2\xaa\x0c\xe7\x5c\x39\x2b\xbf\x2d\xaf\x9d\x35\xc1\x31\xd5\xac\x0e\x6e\x9e\x6e\xd6\xe0\x12\x8b\x74\xb6\x55\xa6\xb3\xef\xac\x9d\x7d\x77\xdb\xce\xbe\xb3\x76\xf6\x5d\xd9\xce\x9a\xbd\x95\x9d\xa8\x2a\xa2\xfb\x3c\xd8\x14\xe4\xd4\xb3\xfb\x0f\x82\xc1\x3b\x75\x63\x00\x1f\x45\x9b\x27\x55\x61\x5e\xf9\x39\xde\x90\x8a\xce\xdb\x42\xbe\x7b\xcc\x30\xde\xe9\xfd\xb6\xd0\xbd\x87\xe3\x8a\x0b\x15\x5d\xff\x0b\x4c\xe0\x0a\x63\xef\xcc\x7e\x77\xb1\xc7\x6e\xc9\x2a\x95\x3d\xe5\x5a\x62\x6f\xe1\xfb\x08\x4a\x0b\x7b\xca\x5d\xc4\x9e\xf3\x12\x62\xfe\x8d\xc3\x31\xcb\x0d\x0c\x73\xc8\x22\xf0\x04\x30\xa6\x6a\xd1\x12\xc9\xca\xc1\x0d\xa1\x90\xd5\x83\x82\x15\x9c\x32\xc5\x0d\x1d\x3c\xe6\xd7\xff\xc6\xc6\x0b\x9f\x3f\x1a\xb4\xe0\xf2\xae\xe4\x11\x34\xc8\x57\xbb\x87\x03\xfd\x25\x90\xd4\x54\x5f\x33\x0f\xa5\x1e\x52\xaf\xd0\x80\x4f\xa2\x4d\xe4\xa3\x25\x54\xa9\xf4\xd0\x4f\x74\x73\xac\xfc\x9b\xfc\x0c\xaa\x84\x0d\xcc\xd0\x12\xca\xa4\xf6\x44\xc0\xe2\x88\x4c\x53\x4a\x57\x2a\x8d\x53\xde\x6c\xa0\x65\x94\x56\xa1\x5a\x4f\x33\x7a\x13\x58\x69\xe7\xff\x72\x58\xc1\x76\x5c\xe9\xa3\x9f\xd0\xbf\x1f\x06\x2b\xed\x10\x34\x17\xab\x1e\xfa\x1d\xf5\xd1\xef\x04\xb1\xfb\x47\x46\x13\x00\xe7\x22\x43\x10\xa9\xf4\xd0\xd7\x7b\x1e\x1c\xf9\xb6\xfa\xc4\x95\x26\x7d\x6e\xe2\xfd\x32\x41\xd6\xb8\x9f\x98\xe6\xa2\x08\xab\xc1\x04\xe3\x70\x16\x73\x94\xbe\x6d\x58\x33\xb6\x2e\x85\x91\xcb\xc1\x76\xdb\xe2\xfb\x55\x5c\xde\x74\xf8\xca\xe3\x8b\x29\x97\xf9\x6a\x46\xfe\x83\xed\xb6\xd5\x64\xc0\x39\x09\x73\x72\xd5\xdf\xd7\x14\xdc\x2a\xb4\xc3\xfc\x89\x93\xbd\xfc\xee\x63\xe2\xa8\x53\x99\x98\x88\xbd\xb1\xdf\x27\x93\xa1\x64\x86\x37\xe7\x83\x15\x33\xe7\x24\xcf\x66\x4f\xe7\xa5\x30\x03\x3b\x8b\x6c\xed\xb0\x80\x6a\xfc\xa5\x5d\xcc\xfe\xfe\x31\xd9\xe8\x62\x7b\xce\xe2\x0c\xa1\x5d\x8c\x83\x9e\xdf\xff\xcc\xe2\x6a\x8e\xe3\x00\x96\x14\xa1\x19\x31\xdf\xf0\xb2\xbb\xfb\x9a\x88\x40\x16\xf1\x00\xcc\x9c\xe0\xab\x62\x2d\x07\x16\x2e\xb4\x95\x03\x02\x80\x19\xf3\x88\x55\xdf\xdd\x7d\xbd\xb2\x13\xd1\x58\xe5\x60\x40\xb5\xfb\xda\x62\xf0\x33\x71\x98\xcb\x30\x33\xc3\x02\x93\x19\xb7\x68\xca\x42\x50\x71\x81\x84\x3e\xda\xee\x99\xa5\x50\x1e\xb4\x90\x1c\xca\x43\x2d\xcf\x63\x94\xbf\xc5\xd7\x69\x96\x60\x7f\xbc\x15\x05\xac\x77\x16\xeb\xc8\x98\x99\xc5\x0a\x70\x1e\x6b\xc0\x26\x64\x1f\xe3\x31\x86\x20\xe3\x60\x8c\x49\xe7\x89\xc5\xca\x04\xff\xf9\x08\xcf\x32\xfa\xda\x2e\xbe\xe3\xcb\xd7\x2c\x66\x2a\xb4\xbe\x92\x8e\xc2\x3e\xae\x70\x14\xc4\x4d\xbd\xc0\xc5\x66\x3f\xa9\xcc\xda\x36\xfe\xbb\xcc\xda\x1d\x46\x17\x0c\x87\x87\x61\xba\xf0\xd8\x7e\x33\xba\x39\xcd\x3b\xd4\xc3\xfd\x78\xcc\xbc\xee\x09\x41\x84\xf1\x34\x2d\x47\x32\xa2\x8b\xa5\xc4\xf1\x82\xde\x54\xe6\x76\x41\xf3\x8d\x30\x0f\x6c\x70\xde\xbb\xcc\x83\xb5\x5c\xbe\x54\x8d\xc6\xe5\x70\xcc\xb4\xf9\xfc\x33\x64\x76\xbd\xb4\x1e\x69\x44\x69\xb4\x89\xc2\x4b\x36\x85\x35\xc7\x4a\x8c\x2f\x31\xda\xff\x05\xce\x9f\xe9\xb4\x97\xe2\xff\x9d\xe2\x28\x2b\x38\x3d\x03\xbe\xc2\x81\x61\xae\x01\xb4\x8e\x8f\x36\x21\xe6\x24\x90\x3f\x46\xe5\x98\x0e\x34\x14\xac\x08\x20\x1e\x52\xbb\xb2\xba\x8a\xd8\x8c\xe4\xef\xac\xd9\x72\x8b\xa3\xc6\x50\xd3\xf3\xdc\x42\x10\x22\xc1\x88\x46\xe1\x1c\x6d\xd0\x0b\xc3\x82\x8b\x13\xbb\xaf\x8b\x0c\xae\xf9\xa6\xb3\x48\x9c\xba\x4e\xf3\x51\xf8\xf8\xde\x85\x0f\xf4\xdf\x93\x04\xa7\x38\xb9\xc4\x54\x0c\x89\xa7\x44\x94\x97\xc4\x0f\x50\x63\xf8\x59\xd8\x1b\x31\x0e\x8c\xb6\x13\xf4\x3a\x09\xfd\x08\xbd\xa1\xee\x99\x68\x10\x8e\x30\x8e\xfa\x2b\x7d\x00\xc1\x43\x3e\x43\x04\x6c\x8d\x7e\x4e\x8f\xa1\xc8\x3f\xfd\x08\xed\x25\xd3\xde\x35\xfa\x34\x24\xff\x59\xb9\xc2\xbd\xff\xbe\x18\xfb\xe1\x68\xa5\x1f\x8f\xed\xf2\xce\xe9\x31\x6f\xae\x40\xec\x91\x0b\x95\x96\x7e\x9e\xe4\xf9\x5e\xa2\x3e\x39\x28\xd0\x94\x49\x4f\x9f\x3c\x21\x83\x0e\xa4\x27\xd2\x21\x81\x92\x88\x2a\x85\xaa\x30\xeb\xf4\xd7\x1f\x68\x75\x35\xbe\xc4\xc9\x60\x14\x5f\x91\x3a\xb0\xf1\xd5\x79\x3a\x50\x52\xaf\xde\xa9\xfe\x44\xca\xbe\x14\x9f\x1b\xf2\xe7\x75\xfd\x6b\x93\xed\x61\xac\x31\xc0\x13\x50\x21\x60\x45\xbb\xab\xab\x88\x37\x8b\x7a\x75\x52\x04\x50\x86\xa6\x6b\x2f\x45\x95\x46\x5e\x45\x94\x79\x02\x08\xd0\x42\xb4\x54\x53\x2d\xc5\x8a\x3d\x01\x54\x58\xb9\x1b\xf8\x97\x10\xa4\x5c\x62\x69\xa9\xd7\x94\xbe\xc3\x3f\xbc\x0c\x2d\xb2\xb4\xd4\x6b\xbc\x7c\xea\x2e\xb0\xb4\xd4\xab\xb3\xef\xe4\x5f\xe8\x38\x6f\x14\x1e\x96\x36\xa1\xe7\xaf\x5e\xb1\x7c\x90\xf2\xeb\x06\x55\x01\x2a\x6f\x19\x42\x66\x4b\xa2\x5a\x6d\x56\xab\x33\xad\x5f\x5e\x94\x71\x3d\x52\x88\xbc\xbc\xd1\xa9\x83\x2d\x8f\x4a\x9f\xfe\x57\xa5\x11\xf6\x92\xde\x20\x71\x52\xca\x5f\x56\x19\xc1\x48\x53\xb0\xba\x8a\xc8\x2e\x01\x37\x31\x28\x94\x16\x12\x5d\x3c\xc6\x4a\x7b\x96\x22\x80\x97\xa2\x38\x1a\x5d\xd3\xe5\xb8\xfd\xeb\xe1\xf1\x36\xfa\x84\x5e\xa1\x75\x80\xc9\x1b\xac\xdb\xb0\xa0\x77\x71\x6a\x67\xd9\x37\xde\x5f\xbe\x96\x94\xb3\x80\x58\x57\x2b\x8e\xd7\x7f\xa2\xcc\xb9\xa8\xc8\x69\x14\xd7\x64\x18\xb3\x55\xc6\x13\x45\xb3\x7c\xc0\x0c\xd4\x8b\x24\x1e\xe4\x96\x7a\x40\x68\xb0\x37\x52\x2c\x03\xa1\x5b\xc8\x41\x68\xbe\x2c\xc4\xa5\x03\x42\xd8\x26\xcd\x53\x56\xf4\x44\x17\x8d\xd8\x67\x09\x57\x55\xf5\xbc\x88\x50\x84\x1c\x82\x11\xba\x9d\x70\x84\x16\x14\x90\x90\x2a\xcf\x99\x87\xae\x9c\xee\xe5\xb3\x97\x58\x1a\x2f\x35\xc9\x4a\x14\x97\x04\x2c\xa7\x88\x25\x15\x5e\x40\xd2\x6a\x3d\x4a\x5a\xdf\xbb\xa4\xe5\x90\xaf\x1c\xea\x9d\xd3\xe3\x62\x39\x67\x51\xf5\x8e\x85\xa5\xeb\xbc\xfc\x91\x89\xff\xfd\x98\x78\xe1\x69\xf6\x01\x58\xf6\x7e\xd4\x4f\x30\x44\x6e\x60\xc0\x35\x90\x4c\x0e\xc9\x27\x77\x19\x51\x63\x1a\xc7\x17\xb8\x2d\xff\x8a\x6a\x7f\xa9\xcd\xa1\xec\xae\x30\xff\xbc\x4d\xca\x2c\xb0\x0b\xb4\x1f\x77\x81\xbf\xc4\x2e\xb0\x33\xc2\xfd\x2c\x89\xa3\xb0\x8f\xba\x71\x80\x7b\x71\x3c\x5f\xe1\xbf\xd3\x2d\x52\xf8\xd3\xaf\x0b\xed\x08\x3b\x5d\x55\xe1\x4f\x9e\xef\x6b\x07\x90\x59\xbb\xca\x40\xd4\x7a\x45\x5a\x4c\x82\x8f\xb2\x90\x1e\x0a\xbf\x00\xdf\x0a\x3f\x9e\x7a\xa9\x3b\x5f\x6f\x06\x65\x16\x58\xc7\x7f\xed\xe4\xc8\xff\x39\xeb\xf8\x70\x9a\x4d\xa6\x59\xf9\x4b\xbb\xc3\xc2\x4b\xbb\xc3\xc5\x2f\xed\x74\xa9\xee\x50\xbb\xc4\x3b\xfc\x73\xaf\x83\x1e\x5c\xaa\x33\x75\xf3\xe2\xcd\xfd\x4a\x76\x05\x0d\x7d\x2f\xd2\xdd\xdf\xe9\x84\x7d\xa8\x5d\x6b\xba\x84\xa8\xc3\x12\x97\x16\x87\x0b\x5e\x5a\x3c\x66\xb1\xfb\x6b\x30\xdf\xad\xf7\x27\xfb\xe8\xb7\x95\x17\x8d\x26\x37\x10\x47\x69\x46\x96\xf7\xc5\xb5\xc1\x7d\x27\x7e\xb0\xb2\x15\xa5\xe1\x6f\xa4\xb4\xc8\x05\x37\xf1\x03\x99\xfd\x05\x7e\xe6\x4b\x17\xa1\xae\x0b\xd0\x54\xbd\x01\x25\xb5\x4e\x72\x83\x5f\xc5\x00\xf8\xa5\x5a\xb4\xa7\xa7\x15\xe9\xb9\x12\x8a\x00\x51\x4c\xa3\x4c\xf4\x4c\x0b\x66\x05\xb6\x78\x47\xf4\x9b\x01\x8c\xbe\x58\x56\x31\xfb\x87\xf6\xdd\x68\x8d\xc6\xb4\x19\xf9\x29\x8d\x9c\x85\x26\x71\x1a\xaa\x1e\xf8\xa4\x51\xf2\x9d\xd4\x3f\x8a\x79\x67\x45\x0b\x4b\x1a\x46\xcb\xa8\xae\x35\x72\xe4\x07\xf9\x33\x0c\x94\xc8\x36\xa2\xbe\xa6\xac\x44\x6e\x2b\x0f\xa9\xa5\x36\x92\x87\xd4\x92\x4b\xdb\x82\x6b\xa9\x96\xd9\x4b\x1a\x20\x6e\x87\xc8\x2d\x70\xa7\x91\x85\x38\x74\x8a\x78\x83\x33\x29\xe1\xbc\x32\x55\x54\x81\x2f\x46\xb3\x78\xe6\xa4\x3e\x57\x54\x34\x97\xc9\xf1\x97\xf5\x3d\xbf\x08\x92\x50\x60\xfb\x8a\xe1\x21\xa1\x81\x71\xf4\xf6\xe9\x93\x1b\x2b\xdf\xe4\xcb\x65\xf6\xa2\xd1\x5c\x88\x77\xde\x2d\x31\xd9\x23\xef\xfc\x56\xbc\x73\xff\xe4\x10\x41\x48\xdc\x72\xac\x73\x9f\x05\xd0\xbd\x2b\xeb\xfc\xd3\xd9\x61\xbe\x24\xe6\xf0\x43\x0b\xab\xa2\xe9\x00\xec\x11\xe8\x56\x12\x3f\x0a\xe2\x71\xc5\xe0\x80\xd5\xea\x8a\x26\x29\x15\xc3\x61\xa9\xc3\xce\x0c\x2e\xd7\x68\x9d\x7b\x04\xdc\x23\xa3\xd2\x19\x15\x27\xce\x85\x18\xd5\x5f\x3b\xf3\xc2\x7f\x14\xa3\x5a\xdd\xdf\xe9\xa2\x17\x6b\x2f\xd6\x96\xeb\x88\xd1\x06\x3a\xc0\xd9\x30\x0e\x50\xc3\xc5\xad\x20\xb4\xf7\x6d\xb9\xd5\x56\x10\x50\xff\x41\x75\x41\x94\xe0\x02\x7c\xf5\x92\xda\xf4\x8f\x2f\x5a\xa5\x81\xff\xc1\x49\x0c\xb9\xc3\xb2\x21\x46\x09\x4e\x25\xbe\xa8\x74\x84\x94\x63\x3d\x26\xcf\x06\xde\xb7\xe2\x05\x6c\x21\x7e\x61\x38\xa8\xab\xd1\xd9\x3c\x80\xa6\xf0\xec\x0b\x3b\x8e\x30\x1a\xc7\x09\xa6\xc2\xe3\xf2\x32\xf4\xcd\x35\x8a\x7c\xbd\x2f\x2f\x97\x5c\xe0\x30\x9f\x8b\x2c\xf0\xb5\xbb\x45\x39\x7f\x5c\xe0\xdf\xec\x14\x87\xa2\x38\x9e\x94\x13\x43\xde\x73\x72\x74\xae\x6c\x41\xec\xee\x35\x91\x17\x29\xa2\x39\xd1\xd4\x42\x44\x77\xb7\x70\xb3\x8f\x44\xf7\xad\x88\xee\x7f\x24\xe6\x57\x4c\x72\x12\x0f\xfc\x13\x85\xdf\xd2\x07\x67\xf9\x7c\x6b\x08\xc0\x95\x4a\xb1\x08\x5c\x45\x5f\xbf\xea\xaf\x6e\xb5\xc5\xd8\x7b\x3c\x3f\xae\xc0\xea\x2a\xfa\x40\xe0\xab\xf5\x42\x23\x52\x00\x68\x16\x44\x99\xab\x61\x38\xc2\xa8\xf2\x43\x25\xf7\xb5\xce\x63\x70\x83\xc7\xa1\x11\x73\x5b\x98\x70\x1a\x8a\xcc\x50\x6c\x49\x48\x55\x51\xea\x8e\xdd\x10\x8f\xb7\xcc\xee\x25\x51\xd0\x42\xbc\xe4\xaf\xed\xb8\x65\xc9\xd1\x45\x93\x64\x3d\x2c\x5f\xc9\x33\x21\x41\x6b\x7f\x7e\x9e\x8f\x87\x4d\x12\x5e\x2e\x26\xb6\x11\xf3\x5a\x7c\x39\xd9\xdb\xaa\xe7\xb1\x9e\xc9\x93\xf4\xd1\x4c\x04\x6e\x73\x10\x3d\xf2\xd3\x94\x2c\xe4\x65\x82\x5a\x80\xde\xe2\x6b\xb4\x8d\x93\xf0\x92\xe6\x84\xdc\xe5\x83\xd2\x28\x8e\x39\x7d\xf4\xfa\xed\xf6\x6e\x23\x6f\x4d\x3c\x97\x4c\x3c\xde\x8d\xa3\x41\x78\x31\x65\x99\x28\x63\xc8\x0a\x99\x16\xe5\x97\x4c\xe2\x09\x4e\xb2\x6b\xf4\x07\x3d\x16\x83\x37\x29\x30\xdf\xd3\x21\xcd\x71\x9c\x92\x87\x30\x62\xe9\x02\xb2\x58\xf8\xd2\xac\xa0\x6d\x3c\xf0\xa7\xa3\x6c\x03\xb5\x50\xa5\xde\x58\x87\x44\xca\x55\x17\x7c\x47\x42\x73\x9c\xf0\x44\xe6\x39\x38\x32\xfe\xf3\xd0\x0c\x33\x96\x3c\x33\x05\x50\xf9\xa1\x5e\xfa\x90\xc5\x68\x82\x93\x41\x9c\x8c\x25\xe0\x0a\x64\x29\xfd\x63\x7f\x70\xb1\xe1\x1a\x65\x44\x2f\xbe\x4e\x20\xe6\x4c\xbd\xb1\xbe\xda\x6c\x68\x21\xb8\x69\x57\x28\xea\xda\xa7\x1c\x21\xa5\xf1\x9b\x6a\x51\x42\xd2\xa2\x04\xf2\x64\x56\x82\x9c\xb4\xf8\x7a\x9b\x9f\x45\xf4\x10\xf8\xdc\x0d\xe9\xaa\x9c\x31\x94\x8c\x5f\xdf\x46\x37\xdc\xdf\x6c\x10\x27\x70\x8a\xc9\x1b\xbd\x87\xc4\xa0\x9f\x83\x81\x91\x34\x9e\x52\x3b\x3f\x3d\x2a\x66\x58\x8b\x54\xfc\x23\x9f\xac\x75\x9a\x7e\xf2\xce\x60\x3c\x75\x1a\x6b\xb5\x9a\x0e\xb8\x20\x7b\x7d\x7f\x70\x61\x37\xbc\x20\x13\xb1\x29\x7e\x72\xc2\x23\xc5\x5d\xc1\x30\xcc\xf5\x0e\xd7\x15\xd4\x83\xae\x2c\x0b\xba\x4d\xbe\xd9\x09\x83\x0d\xd4\xc2\x1f\x56\x4a\x56\x4e\xfd\x51\x86\xb6\xe0\x3f\x8b\x27\xa2\xe5\x6e\x34\x92\x5f\xfb\x5d\xc8\x8e\x26\x52\x0f\x06\x2b\x2c\x2a\x49\x85\x77\xc6\x03\xfc\x9c\x93\xca\x8a\xcb\xf3\xaa\xd5\x5c\x28\xb7\x8b\x3a\xf5\x56\x03\xc2\x30\x73\x24\x85\x65\x5e\xf6\xe0\xbb\xcf\x68\x95\x90\x0f\xe5\x41\x9e\x98\x1d\xbb\x59\xa2\x3b\x41\x39\xc8\xa6\x74\xb0\x69\xba\x79\x43\x9f\x63\x0b\xf5\x04\x72\xf2\x7e\x14\xe0\x99\xad\xc6\x59\x6d\xc6\x14\x40\x96\x68\x9d\x73\x42\x74\x09\x54\x84\xb0\x2c\xde\x38\xf3\xd7\xe7\xd8\xf0\x4a\xf9\x1b\x67\x25\xbe\xe5\x6d\x92\x59\x59\x61\x4f\x36\x23\x8c\x7c\x6b\xa1\x45\xf3\x17\x73\x8c\x2c\xd4\x8f\x4c\x50\xd7\x3a\xc8\xe3\x22\xbd\xe2\xf8\x58\x8d\x0b\x44\x27\x59\x9e\x63\x9e\x2c\x1b\x28\x30\x4f\xe3\x9b\xf7\x5a\x9f\x33\xc4\x32\x7a\xe7\xa9\x81\xcd\xef\xf3\xb3\x31\x00\x7c\x65\x88\xad\xa3\x6b\x16\x17\x59\x8c\xf2\x57\xac\xe3\x0e\x44\xf6\xc5\x18\xdb\x41\x87\x72\x34\x3b\x06\xd6\x82\x85\x62\xcb\x51\xa7\xb6\x1c\xd2\xf4\x39\x8d\x39\x10\xf0\x73\xa5\x09\x18\x3d\x31\xd2\xf2\x47\xdb\x58\x97\x19\x6f\x34\x2f\x14\x94\xad\xb3\x7c\xf4\xe5\x77\xf6\x80\x55\x52\x13\xbf\x1d\x1e\xab\xdd\x01\xd7\x29\x8b\xc7\xb5\x31\x6e\x9f\xa8\x0d\xcc\x27\x6e\x03\x23\xcd\xe6\x4b\xf4\xa9\x60\xf4\xc8\x5f\x5e\xe3\xec\x13\x98\xc3\x18\x1d\x39\xfb\xa4\x9b\xc5\xf0\xbf\x1b\xf3\xb5\x1e\x70\x8a\xfc\x49\xcc\x81\xe9\xa6\xa1\x51\xdb\x94\x68\x4c\xe2\xac\x76\xbe\xb4\x54\x6c\x52\x24\x01\x97\x8e\xbe\x9c\x6f\x58\x82\x98\xb1\xbd\x2c\xaf\x57\x64\x40\x29\x1f\x23\xee\xb4\xa1\x97\x09\x36\x53\xb8\x91\x2f\xb8\x89\xdf\x97\x68\x19\xa6\xb6\x74\xfb\xf3\xa3\xd7\x58\x44\x83\x7b\x08\x62\x43\x45\x04\x21\x19\x52\xa1\xd0\x25\x26\x2c\x56\xcd\x43\x0e\xd9\xf4\x2e\x60\x0a\x65\xd3\x3c\xc8\x8e\x38\x4a\xba\x04\x18\x0f\xe9\x82\x2a\x1b\x76\x55\x2c\x26\x85\xe6\x08\x4f\x37\x45\xb6\x68\x14\x9a\x3d\x50\x8f\x9e\x42\x97\xe7\x84\xbd\x39\xf7\xd6\xfe\xda\x3e\xf4\x0b\xa4\x75\x9f\x9f\x1c\xfd\x61\x75\x47\xce\xf4\xda\xae\xac\xd7\x7f\x07\xed\xd2\x09\x18\x67\x76\xb9\xf1\x2e\x55\x22\xc9\x2f\x8b\xf4\x48\x02\x8f\x63\x3c\x4d\xfd\xde\x08\xb3\x70\x60\x12\x3a\x27\x48\x4e\xb5\x48\xa1\xe8\x6f\xde\x20\x35\xc3\x9a\xb4\x2d\x1c\x43\x36\x65\xc4\x0c\x6d\x99\x8d\xb1\xa9\x49\x12\xe5\x21\xc6\x4a\x98\x22\x1f\xd1\x04\xcc\xe8\x12\x27\x29\x44\x2d\x1b\xfa\x19\x8a\xf0\xc5\x08\xf7\x33\x1c\x10\x36\xdc\x67\x29\x55\x33\xa6\xf0\xc9\x62\x34\x0a\xb3\x6c\x84\x97\x69\x80\xcb\x15\x15\x28\x4e\x92\x38\x41\x41\x8c\xd3\xe8\x59\x86\xfc\xc1\x00\xf7\x69\x5d\x8a\xd4\xb3\x14\xa5\xb8\x3f\x4d\xc2\xec\xda\x13\x15\x7b\xd3\x0c\x85\x19\x54\xe2\x35\xc2\x2c\x15\x01\x15\xc2\x51\x98\x31\x27\x6e\x9a\xd7\x35\x24\xfc\x79\x8c\x23\xba\x1f\xa4\x36\x45\x19\x1d\x90\x77\xb4\x73\x42\x5d\xa6\xbd\x95\xe7\xef\xb6\x49\xdb\x8a\x0f\x29\x6f\x65\x33\x68\xe7\x01\x23\xb7\xde\x86\x53\xc3\x65\xd1\x69\x21\x64\x27\x34\xb2\x7b\x61\xe7\x39\xed\x37\xd1\x2e\xf9\x65\x49\x1c\xf7\xf6\xac\x76\xee\xa1\xca\xdb\xb3\xe6\x39\x0b\x16\x80\xbe\x92\x47\x76\x15\x50\xef\x54\x2d\x49\xe4\xde\x9e\xd5\x69\xa5\x9a\x5a\xa9\x59\x5c\xa9\x41\x2b\xd5\xd5\x4a\xb5\xe2\x4a\x4d\x5a\xa9\xa1\x56\xaa\x8b\x4a\x6a\x1d\x5b\x76\x24\x63\xc8\xb8\x97\xa1\x6b\xd0\xba\x62\xd0\xba\xf6\x41\x33\xf1\x91\x86\x8b\xf5\x89\x5e\x98\x0c\x06\x3c\xed\x20\x45\x9a\x06\x59\xad\xd5\xc8\x17\x5b\x7f\xcd\x89\x68\xaa\x90\xeb\x56\xc8\x8d\x52\x90\x6b\xce\x81\x97\x60\x68\x90\x9b\xa5\x20\xd7\x5d\xb3\xe3\x49\x30\x34\xc8\x35\x0d\xf2\xfc\x89\xec\xfa\x49\x72\x8d\x7a\x7a\x3a\x55\x3a\x55\x3d\x1a\xff\xc2\xd4\x64\x64\x74\xf2\x09\xeb\x49\xaf\xd3\x0c\x8f\xd1\x20\x9e\x26\x28\x0b\xc7\xfa\xdc\x2f\x18\x94\x37\xc2\xb3\xec\x84\xac\x3e\x77\xfc\x58\x4b\xc4\xdb\x83\x38\x08\x07\xd7\x94\x13\x52\x3a\x2c\x81\xc5\xba\x1b\x8b\xee\x19\x75\x1c\xf8\xed\x0c\x52\x5e\x42\xb4\x15\x23\x53\x9c\x2d\x49\xee\x2f\x28\xc5\xd9\x74\xa2\x7e\x28\xf0\xe8\x98\x7f\xd8\xdf\xff\x85\xba\x76\x14\x9d\xf0\xf7\x7f\xf9\x58\x43\x9b\x68\xff\x17\x33\x35\x9a\x54\xa4\x4e\x8b\xd4\xad\xd1\x8c\xe5\x25\x0d\x53\x99\x4e\x7b\x97\x98\x88\x0a\xae\xa3\x7f\x8d\x06\x3f\x86\xb6\x69\xf4\xe3\xaf\x88\x3e\xb9\xa2\x1f\xcb\xc5\x59\x98\x63\x51\x3e\xbf\x0e\xb5\x87\x39\x16\xcd\x36\x44\xb3\x75\xa5\xd9\xfa\xbc\x66\xeb\x6a\xb3\xf5\xc5\x9a\x85\x30\x3a\x61\x8d\x2f\x41\x02\x24\x6c\xa8\x2b\xd0\x55\xb5\x09\x55\x1b\x7c\x31\x43\xd5\x9a\xba\x4c\x1d\x33\xc2\xc8\xba\x88\xb5\x22\xa0\xd6\x1a\x3d\xd7\xeb\xb1\xfd\xe9\xc7\x3a\xfd\x58\xb7\x7e\x6c\xd0\x8f\x0d\xeb\xc7\x26\xfd\xd8\xb4\x7e\x6c\x15\xb5\xd9\x2e\x6a\xb3\x53\xd4\xe6\x9a\x68\xb3\x40\x23\x55\x8a\xf3\xa0\xc5\xb9\x0f\x2a\xc7\x81\x90\xa9\xa4\x90\xfd\x88\xee\x25\xb9\xab\x53\x79\x2d\x49\x1f\xa5\x38\xb3\x5a\xc4\xde\x3b\xf7\xf6\x0e\x83\x9b\x7b\x99\x01\x17\x52\x4b\x9f\xd0\x50\x43\xbf\x01\x11\xa2\xca\x6f\x64\xee\xf9\x2a\x81\x67\xb1\xf7\xbe\xd4\x2b\xd6\x69\xc5\x06\xab\xb8\xa6\x55\x6c\x3b\x2b\x36\x68\xc5\x16\xab\x58\xd7\x2a\xae\x39\x2b\x36\x69\xc5\xce\xb9\x40\x4d\xa9\x58\xcf\x2b\xde\x69\x17\x2b\x8a\x52\x4f\x11\xe1\xb1\xe3\x4f\x58\x4a\x76\x16\x3c\x1e\x1e\x6f\x13\x3d\x9e\xc3\x61\x0c\x4e\xc0\xb1\xc5\x8f\xb7\xe2\x6b\x75\xc2\x43\x52\x8e\x5e\xe1\x4d\x77\x52\xec\x45\x27\x53\xbf\xb0\xe3\xc9\x6f\x6e\xf3\x8f\xe1\x25\xfd\xd2\x69\xad\x36\x1b\xba\x5a\x4e\x2c\x13\x41\xb0\x95\x92\xae\x50\xca\xfa\x50\xbe\x48\x22\xa8\x66\xf0\x73\xe2\x5f\x62\x14\x8f\x02\x27\xab\x5d\x40\x7e\xe8\x7e\xa4\x93\xdb\xd5\xe3\x1d\x2a\x2d\x76\xfd\x51\x7f\x3a\x22\x2b\x2c\xc2\x57\xce\x66\xbb\x2c\x11\x4c\x97\x26\x82\xa9\xcd\x5a\x41\x13\xfe\x0f\x2d\x71\x09\x4d\xcf\xd7\xd2\x65\x79\x61\xba\x34\x2f\x4c\x6d\xc6\x6a\x34\x21\xa6\x7c\x97\x0b\xa8\xb5\x2a\x7a\x85\x2a\xdd\x8f\xd2\xf3\x7f\xa1\x3a\xda\x40\xb5\xaa\x09\xb1\xc1\x20\x36\x28\x44\x06\xb0\xc5\x20\xd6\x35\x88\xf5\x12\x10\x9b\x0c\x62\xd3\xe8\x56\x85\xb6\xa3\x40\x6c\x94\x80\xd8\x62\x10\x5b\xd6\x5e\x37\x35\x88\xcd\x12\x10\xdb\x0c\x62\xdb\xda\xeb\x96\x06\xb1\x55\x02\x62\x87\x41\xec\x58\x7b\xdd\xd6\x20\xb6\x4b\x40\x5c\x63\x10\xd7\xac\xbd\xee\x68\x10\x3b\x73\x21\xe6\x62\x3f\x05\xaa\x54\x5f\xd3\xab\xeb\xde\x31\x82\xa6\xc9\xee\x73\xb1\x7c\x87\x45\x44\x4a\x5d\xcc\x80\x57\x87\xa4\x6b\x5d\x4b\x12\x0e\x9e\x2e\x3f\x99\xf6\x33\x34\x0c\x2f\x86\xc8\x8f\x02\x34\x8a\xaf\x90\x9f\x5c\x4c\x21\xfc\x0b\xb8\x39\xff\xef\xd4\x4f\x8c\xc4\x3d\xd0\x80\x8f\x36\x49\x2b\x5c\x8a\xb3\x28\x0f\x2e\x7a\xb4\x08\xdd\x25\xac\xc7\x27\xde\x67\x05\x83\x04\xa7\xd3\x51\x86\xe2\x41\x51\xf3\x43\xba\x05\x54\x2e\x7c\xf4\x1c\x5d\xf8\xd4\x75\xa5\xbe\x56\x45\x4b\x88\xbe\xea\xb1\x57\x6d\x78\xd5\x83\x57\x36\x24\x47\x14\x90\xd4\x15\x7a\x24\x7c\x8e\x2e\x66\x30\xc3\x55\x20\x08\x5e\x40\x88\x9d\x52\x01\x5b\x22\x18\xd2\xa1\xdf\x0e\x8f\x11\x84\x93\x94\x3f\xbe\xa1\x1c\xee\x62\x88\x7e\x47\x17\xa3\xb2\x4c\xce\xae\x54\xf9\x8d\xb1\xb8\x37\x94\xc5\x55\x2a\x6f\xf2\xed\x9b\xec\x64\x6f\x24\xb1\xa0\xca\x0a\x74\xd4\x02\x9d\xbc\x80\x4e\xcf\xbf\x31\x6e\xf8\x86\x72\xc3\x0a\x6d\x26\xdf\x6f\xdf\x70\xfe\x07\xfb\xed\x12\x22\xad\x99\x30\x1a\x0c\x46\x83\xc3\xa8\xab\x08\xd4\x0d\x0c\x6b\x6a\x81\x5a\x11\x86\x4d\x06\xbd\xc9\xa1\x37\x54\x0c\x1b\x1a\x86\x75\x0b\x86\x2d\x06\xa3\xc5\x61\x34\x55\x04\x9a\x06\x86\x0d\xb5\x40\xa3\x08\xc3\x36\x83\xde\xe6\xd0\x5b\x2a\x86\x2d\x0d\xc3\xa6\x05\xc3\x0e\x83\xd1\xe1\x30\xda\x2a\x02\x6d\x03\xc3\x96\x5a\xa0\x55\x84\xe1\x1a\x83\xbe\x76\xae\x90\x88\xc0\xb0\xa3\x61\xd8\x56\x30\x2c\x95\xf8\x23\xe5\x49\x27\x84\xae\xb5\x44\xda\x89\x79\xd7\x5d\x14\x56\x86\x67\x99\x7c\xef\x24\x6b\x52\x79\x28\x05\x25\x8d\x03\xbd\x2d\x32\xef\xaf\x26\x23\x9f\x60\x33\xcb\x90\x13\x1c\x8b\x33\x53\xc9\x5b\xb6\x41\x14\x17\x57\x45\x4a\x5d\x35\x79\x87\x5c\xb2\x5a\x74\x07\x25\x17\x2c\x6d\x8c\xec\xa9\x77\x23\x1b\xed\x96\x97\x5f\x8a\x6c\xb4\x3b\x1e\xbb\x2b\xd9\xe8\xd4\x6f\xce\xbd\xb5\xbf\x76\x24\xc2\xc7\xfb\xaa\xc7\xfb\xaa\x07\xbb\xaf\xd2\x96\x78\x7e\x9f\xa3\xdf\xe4\xfc\xb5\xee\x70\xee\x2b\x2b\xdc\x5b\x71\x34\x7f\xab\x1e\xcd\xdf\xde\xf6\x68\xfe\x56\x3d\x9a\xbf\x2d\x3a\x9a\xcf\x53\x30\x3f\xde\x54\x3d\xde\x54\x3d\xde\x54\x29\x5f\x1e\x6f\xaa\x1e\x6f\xaa\x1e\x6f\xaa\xf2\x66\x1f\x6f\xaa\xf4\x8f\x8f\x37\x55\x8e\xc7\xc7\x9b\xaa\xc7\x9b\xaa\xc7\x9b\x2a\xf8\x7b\xbc\xa9\x2a\xa7\xc4\x7d\xbc\xa9\x7a\xbc\xa9\x7a\xbc\xa9\x92\xfe\x1e\x6f\xaa\x1e\x6f\xaa\x1e\x6f\xaa\x1e\x6f\xaa\xfe\x93\x6f\xaa\xee\xed\x8e\xea\x76\xb7\x53\x65\xee\xa5\x4a\xdc\x48\x3d\xd4\x5d\xd4\x5f\x3b\x1f\xca\xe3\x5d\xd4\xdf\xff\x2e\x4a\xbe\x3b\xea\xb6\xe6\x3a\x3a\xc9\x37\x47\xdd\x96\x74\x6d\x04\x0f\x0f\x7f\x67\x44\xbd\x34\xc5\xad\x91\x3d\xa8\x00\xf7\xd0\x2e\xba\x56\x02\x37\x4e\xd9\xa3\x58\x8a\x99\x6e\xea\x2b\xa2\x30\x43\x69\x2f\x9e\x99\x70\x4e\x04\x3a\x27\xf2\x35\x1d\xff\xb3\x49\x93\x8d\x76\xc7\x7d\x28\x67\x87\xee\x70\xbe\x1a\xf7\x2d\xbe\xb6\xe9\x71\xd5\x16\x3d\xee\x3f\x3e\xb7\x61\x36\x28\x64\x08\x78\x54\x89\x10\xfd\x43\x1e\x27\x87\xea\x90\x55\x22\x5b\x1b\x1f\xfb\x33\x05\x90\x19\x09\x4d\xf9\x6c\x04\x45\xb3\x9d\xfd\x49\x2f\x2a\x9f\xd0\x12\x1d\x9f\x25\xde\x68\x15\xfd\x03\x7a\xe5\x88\xa5\x70\xe5\x4f\xec\x38\xc3\xbe\x61\x6a\x08\xa4\x09\x38\xb1\x3b\xc6\x93\xd7\x64\xc6\xe7\x4f\x4f\xd7\xaa\xe2\x67\x59\x35\x04\xd1\x7c\x62\x59\x66\x05\xa0\x3b\xab\xe5\xb8\x26\x04\xb4\x20\x46\xfe\x75\x32\x3d\x76\x95\xa1\xd2\xb2\x70\x72\x6e\xb4\x3b\x0e\x85\x48\xcd\xa9\x0c\xb1\x36\x5a\x56\x31\x22\xad\x27\x4d\x31\x92\x0f\x5a\xa8\x7d\xf9\x94\x0f\xe7\xdc\x0c\xf0\xa0\x1c\x54\xab\x7f\x96\xf1\xd4\xe6\x43\xac\xa6\x88\x2e\xa3\x88\xaa\xd4\x22\xcb\x22\x0a\x41\x83\x4e\x13\xc6\x31\xaa\x54\xbe\x2b\x24\xec\x20\x5c\x2b\xd1\x16\x10\xac\x9b\x58\x73\x42\x55\xdf\xab\x9d\xfd\x4a\xea\x56\xd8\x9a\x22\x55\x18\x5e\xe7\x79\x5e\x83\x48\xcf\x63\xa0\x1d\x9f\x3e\x40\x1c\x14\xcb\x8d\x56\x4e\xea\xa1\x71\x76\x27\x63\xa1\xcc\x15\x13\xcb\x14\xec\xbe\x57\xb9\xb7\xdb\xba\x0f\xa1\xb7\xdb\x5a\x58\xe2\x35\xf7\x58\x4d\xdc\xed\xb6\xac\xb1\x2d\xe0\x86\x26\xc4\xc1\x2d\x76\xf8\xed\x24\x9e\x28\xbb\x3c\x7b\x01\x83\xf0\x0d\xa2\xe2\x05\xa4\x39\x35\xd0\x9c\xa6\xe7\x27\x13\x4f\x4a\x89\x50\x73\xa8\xfe\xa2\x21\x83\xd5\x63\xcd\x11\xd4\xa5\xa8\x5f\xda\x2a\x26\xa0\x36\x54\x10\x6a\xc4\xb8\x52\x42\x0c\x69\x83\x17\x2c\xbe\xc3\x20\xe3\x59\xb0\x81\x0b\xc3\x17\x82\x17\xd9\xc5\x7f\x86\xcd\x7c\x79\xd9\xba\x87\x2f\xc0\xee\xd1\x9c\x04\x48\xdf\xd1\x6a\x23\x43\x74\x3f\x2b\x0e\x20\x2d\xbe\xea\x18\xcd\x17\xaf\x3c\x52\xa8\xf8\xa4\xd9\x6d\x3d\xd4\x31\xf3\x6e\xe9\xfa\xbe\xe5\xf9\xf2\xc1\x4e\x81\xdf\x36\x88\x33\x61\x55\x38\xc5\xc9\x25\x7e\xfa\xa4\xd2\xaf\xa2\x46\xad\xde\x40\xbd\x6b\xd4\xfd\xff\xfe\xdf\x20\x09\xfb\xe8\x00\xa7\x51\x38\x5a\x41\x5b\xa3\x11\x4a\xc2\x8b\x61\x96\x22\x56\x3e\x58\x79\xfa\xf4\xc9\x31\x0e\xc2\x34\x4b\xc2\xde\x14\xe0\xfb\x51\x00\x41\x79\xc2\x08\xa5\xf1\x34\xe9\x63\x78\xd3\x0b\x23\x3f\xb9\x26\xec\x60\x9c\x7a\x2c\x4a\x43\x02\xff\x8d\xa7\x19\x1a\x03\x4f\xef\x03\x67\xf5\x90\x9f\x60\x34\xc1\xc9\x38\xcc\x32\x1c\xa0\x49\x12\x5f\x86\x01\x0e\x68\xd0\x09\xb2\x4e\x07\xf1\x68\x14\x5f\x85\xd1\x05\xea\xc7\x51\x10\xd2\x35\x4c\x2a\x8d\x71\xb6\xc1\x56\xfc\x32\x52\xd1\x4a\x41\x31\x4c\xf1\xe9\xc7\x01\x46\xe3\x69\x9a\x91\x8d\xda\x0f\x23\x00\xea\xf7\xe2\x4b\xf2\x69\x72\x0d\x5d\x44\x51\x9c\x85\x7d\xec\xd1\xb8\x42\xa3\x30\x05\xcd\xb2\xdc\x5e\x14\x68\xc8\x04\x61\xda\x1f\xf9\xe1\x18\x27\x2b\x2e\x1c\xc2\x48\x1e\x08\x8e\xc3\x24\x89\x83\x69\x1f\xdf\x3b\x1a\x88\x75\x2d\x88\xfb\x53\x11\x07\x83\xd4\x58\x8d\x13\x16\x23\x63\xec\x67\x38\x09\xfd\x51\x9a\x0f\x33\xcc\x0d\x54\x93\x50\x27\xf3\x7c\xba\xb7\x7f\x82\x4e\x0e\x77\x4f\x7f\xdd\x3a\xde\x41\xfb\x27\xe8\xe8\xf8\xf0\x97\xfd\xed\x9d\x6d\xf4\xfa\x5f\xe8\x74\x6f\x07\x75\x0f\x8f\xfe\x75\xbc\xff\x66\xef\x14\xed\x1d\xbe\xdb\xde\x39\x3e\x41\x5b\xef\xb7\x51\xf7\xf0\xfd\xe9\xf1\xfe\xeb\x0f\xa7\x87\xc7\x27\xe8\xc7\xad\x13\xb4\x7f\xf2\x23\x7c\xd8\x7a\xff\x2f\xb4\xf3\xdb\xd1\xf1\xce\xc9\x09\x3a\x3c\x46\xfb\x07\x47\xef\xf6\x77\xb6\xd1\xaf\x5b\xc7\xc7\x5b\xef\x4f\xf7\x77\x4e\x3c\xb4\xff\xbe\xfb\xee\xc3\xf6\xfe\xfb\x37\x1e\x7a\xfd\xe1\x14\xbd\x3f\x3c\x45\xef\xf6\x0f\xf6\x4f\x77\xb6\xd1\xe9\xa1\x07\x8d\x9a\xd5\xd0\xe1\x2e\x3a\xd8\x39\xee\xee\x6d\xbd\x3f\xdd\x7a\xbd\xff\x6e\xff\xf4\x5f\xd0\xde\xee\xfe\xe9\x7b\xd2\xd6\xee\xe1\x31\xda\x42\x47\x5b\xc7\xa7\xfb\xdd\x0f\xef\xb6\x8e\xd1\xd1\x87\xe3\xa3\xc3\x93\x1d\x44\xba\xb5\xbd\x7f\xd2\x7d\xb7\xb5\x7f\xb0\xb3\xbd\x82\xf6\xdf\xa3\xf7\x87\x68\xe7\x97\x9d\xf7\xa7\xe8\x64\x6f\xeb\xdd\x3b\x6b\x2f\x09\xee\x4a\x1f\x5f\xef\xa0\x77\xfb\x5b\xaf\xdf\xed\xd0\x96\xde\xff\x0b\x6d\xef\x1f\xef\x74\x4f\x49\x77\xf2\x5f\xdd\xfd\xed\x9d\xf7\xa7\x5b\xef\x3c\x74\x72\xb4\xd3\xdd\x27\x3f\x76\x7e\xdb\x39\x38\x7a\xb7\x75\xfc\x2f\x8f\xc1\x3c\xd9\xf9\xbf\x1f\x76\xde\x9f\xee\x6f\xbd\x43\xdb\x5b\x07\x5b\x6f\x76\x4e\x50\x65\xce\x90\x1c\x1d\x1f\x76\x3f\x1c\xef\x1c\x10\x9c\x0f\x77\xd1\xc9\x87\xd7\x27\xa7\xfb\xa7\x1f\x4e\x77\xd0\x9b\xc3\xc3\x6d\x18\xe8\x93\x9d\xe3\x5f\xf6\xbb\x3b\x27\x2f\xd1\xbb\xc3\x13\x18\xad\x0f\x27\x3b\x1e\xda\xde\x3a\xdd\x82\x86\x8f\x8e\x0f\x77\xf7\x4f\x4f\x5e\x92\xdf\xaf\x3f\x9c\xec\xc3\xa0\xed\xbf\x3f\xdd\x39\x3e\xfe\x70\x74\xba\x7f\xf8\xbe\x8a\xf6\x0e\x7f\xdd\xf9\x65\xe7\x18\x75\xb7\x3e\x9c\xec\x6c\xc3\xe8\x1e\xbe\x87\xae\x9e\xee\xed\x1c\x1e\xff\x8b\x00\x25\x63\x00\x83\xef\xa1\x5f\xf7\x76\x4e\xf7\x76\x8e\xc9\x80\xc2\x48\x6d\x91\x21\x38\x39\x3d\xde\xef\x9e\xca\xc5\x0e\x8f\xd1\xe9\xe1\xf1\xa9\xd4\x47\xf4\x7e\xe7\xcd\xbb\xfd\x37\x3b\xef\xbb\x3b\xe4\xeb\x21\x81\xf2\xeb\xfe\xc9\x4e\x15\x6d\x1d\xef\x9f\x90\x02\xfb\xb4\xd9\x5f\xb7\xfe\x85\x0e\x3f\x40\x97\xc9\x1c\x7d\x38\xd9\xa1\x3f\x25\x8a\xf5\x60\x26\xd1\xfe\x2e\xda\xda\xfe\x65\x9f\xa0\xcd\x0a\x1f\x1d\x9e\x9c\xec\x33\x3a\x81\x21\xeb\xee\xb1\xe1\x5e\x79\xfa\xe4\xf9\xaa\xaa\xf3\x3a\xf0\xb3\xe1\xfd\xea\xbd\xca\x45\x9d\xa6\x81\x8f\x45\x11\xfa\x58\xca\x3a\x1b\x2e\xec\xfc\x28\x4b\x51\xe6\xf7\xb8\xc4\x42\xaa\x7c\xfc\x32\xb2\x06\xdb\xcc\xe5\xa8\x9a\x87\x50\xdd\x43\xa8\xe1\x21\xd4\xf4\x10\x6a\x79\x08\xb5\x3d\x84\x3a\x1e\x42\x6b\x1e\x42\xeb\x1e\x42\x2f\x3c\x54\xaf\x79\xa8\x5e\xf7\x50\xbd\xe1\xa1\x7a\xd3\x43\xf5\x96\x87\xea\x6d\xc9\xc2\x72\x8d\xd6\x25\xdf\x08\x3c\x52\x9e\xc0\xa8\xb7\x29\x5c\x52\x0f\xda\x7a\xc1\xe0\x37\x18\x8c\x3a\xb4\x91\xc3\x69\xb2\xb6\x5a\x0c\x97\x17\x0c\xc6\xba\x84\xe7\x1a\x83\xd5\x61\xb8\xd4\x29\xcc\xba\x1c\x6b\xb9\xce\xea\x72\x5c\x6a\x14\x06\xe0\xc1\xf1\x6c\x52\x58\x04\x7e\x5d\xee\xb7\x0c\xa7\xc5\xea\xb6\x19\xee\x6b\x0c\x46\x43\xc2\xb3\xce\x60\xad\x33\x5c\x58\xbf\xeb\xcd\xf3\xea\x4b\x79\x2e\x92\x39\x73\xc1\xf1\x58\x93\xc6\xaa\xc1\x60\x72\x9c\x3b\xea\x78\x40\xdf\x9a\x5a\xdf\x3b\xac\x4e\x33\x87\x05\x75\xdb\x39\xce\x1c\x06\x1f\x0f\x68\xab\xae\xf5\x1d\x0a\xb5\xa5\x0e\xae\x31\x04\x3b\xf9\xe0\x0a\x20\x0d\x69\xa0\x29\xb2\x39\xa0\x75\x56\x47\x1a\x2c\x98\x98\x76\x3e\xb8\x02\x46\x53\x1a\x68\x8a\xac\x84\x50\x83\x8d\x6c\x4d\x02\xc6\x47\x63\x4d\xcc\x9e\xa0\x50\xc4\x46\x87\x22\xab\xce\x46\x3a\x6f\x65\x50\x14\xd9\x58\x01\x7a\x72\x4b\x9c\xb6\x9a\xd2\x78\x76\xf2\x6f\x0a\x4d\xaf\x79\xf0\x09\x86\x8a\xd3\xeb\x8b\x9c\xf6\x38\x4d\xd5\xdb\xd2\xb0\xae\xb1\xb2\xca\x7c\xd4\x73\x22\x10\x73\xf1\x82\x15\xe4\xc4\xb3\x2e\x95\xe1\x88\xaf\xc1\x6f\xf9\x2c\x25\xd6\x72\x2b\xaf\xca\xdb\x17\x6b\x5e\x5e\x13\xeb\x0a\xc8\x1c\x14\x5f\x9f\xed\x9c\xf6\x45\x3f\x1b\x39\x0a\x62\x9c\x18\xc9\x50\xb8\x48\x9b\x92\x79\x0b\x84\x21\xa6\x0c\x7e\x3b\x47\x00\xfa\xb9\x96\x2f\x44\x68\xb0\xc5\x10\xe9\x68\x48\x37\xd5\xc1\x17\x9d\xae\xe7\x70\xc4\xd8\x89\x05\x0d\xdf\x15\x38\x82\x81\xd4\xa5\x41\xea\xe4\xed\x8a\x85\xc7\x16\x70\xbd\x69\x99\x0f\xd1\x01\x0d\x71\x0e\x48\x2c\xb8\x86\xf4\xdf\xb6\x58\xc5\xea\x00\xb5\x2d\xe5\x5a\xea\xcc\x88\x99\xcc\x3b\x85\xea\x75\x74\xae\x64\xc9\xfe\x38\x24\x2b\xc4\x32\x1f\x48\x84\x6a\xae\x79\xa8\x36\x6b\x6f\xad\x37\xd6\x5e\xbc\x78\x41\x7e\x77\x76\xb6\x5f\xec\xbc\xde\xaa\x93\xdf\xeb\xbb\xf5\xd7\xaf\xbb\xdb\x5d\xf2\x7b\xeb\x45\xbb\xb9\xbb\xdd\xda\x51\xe7\x7b\x98\x38\x1b\x68\xd7\xb6\x1a\xeb\xaf\x77\x3a\xd0\x40\xb7\xb5\xbd\x5d\x6f\xb4\xa0\x81\xed\xb5\x5a\x73\x67\xb7\x49\x7e\xaf\x6d\x75\xb6\xd7\x3a\x3b\xd0\x30\x47\xe8\xdc\xaa\x0f\x38\xde\x3f\xda\x39\xd8\xae\x77\x6a\x10\x7e\x7f\x8e\x0e\x49\x94\xcd\xb5\x48\xd2\x2b\xba\x2b\xdf\xf6\xae\x88\x2a\x13\x01\x09\x47\x10\xec\xce\x5a\xab\xdd\x68\xd6\x60\x04\x77\x76\xbb\xdb\x5b\xaf\xd7\xa1\x83\x2f\xd6\x5f\x6f\x6d\x77\x77\x77\xc8\xef\x7a\xad\xd9\x68\xb7\xd6\x60\x70\xba\xcd\xed\xc6\x4e\x7d\xb7\x76\xee\x54\x8d\x97\x55\xca\x5b\x15\xbb\xa5\xbd\x94\xea\x05\x37\x35\xf3\xcd\xf1\x29\x16\xa0\x7b\xcd\xcd\x22\x1d\xd7\x37\x07\x1f\xa5\xd2\xfc\xf2\xe0\xa3\x69\xc8\x84\x8a\xee\x54\xa4\x7a\x68\x13\x55\xcc\x02\x88\x1a\x80\x4a\x8d\xe5\x86\x0f\xd2\xcb\xc5\x8c\x4a\x0d\x80\xcc\xae\x54\x03\x68\x5a\x97\x9a\xe0\x0a\x54\x63\x68\x9e\xad\xf3\x1e\x12\xf7\x0f\x84\x14\x9d\x57\x8e\xc0\x00\x3e\x0e\x47\xee\x02\x09\x14\x48\x9c\x05\x40\xfc\xfc\xf8\xc5\x0d\x01\x64\xa2\x8f\x5f\xdc\x10\x60\x9b\xfe\x98\xba\x21\xc0\xa6\xf1\x31\x4d\xec\x11\xad\x57\x57\xc9\x2a\xfb\x4c\x0e\xcd\x97\x7e\x12\x12\xe9\xd8\x72\x49\xeb\x8f\x3c\xd4\x1b\x79\xa8\x3f\xf2\x50\x30\xf2\x10\x1e\x59\x1a\xf2\x13\x0f\xf5\x12\x0f\xf5\x13\x0f\x05\x89\x87\x70\xa2\x37\xe6\x13\x54\x7c\x82\xf0\x9e\xe9\x32\xd2\x4b\x20\xe8\x38\x7c\xac\xeb\x1f\xfb\xe4\x63\x9f\x7e\x6c\xe8\x1f\x03\xf2\x31\xa0\x1f\x9b\xfa\x47\x38\x30\x60\xfa\xb1\xa5\x7f\x14\x69\xaa\x7d\x35\x2f\x35\xef\x92\x7e\x2b\x68\x35\x25\x84\xff\x2e\x6d\xa2\xba\x75\x6d\x67\x64\xf9\xf8\x23\xb4\x94\xaf\xa9\xa5\x2f\xa3\xb3\xf0\xfc\xbc\xfa\xd5\xe6\xc4\x00\x5e\x3b\xaf\xea\x9d\xea\x1f\x4f\x9f\xa8\xac\x91\xb4\x81\x06\xf5\x4a\x6f\xe4\xf5\x47\x5e\x30\xaa\xa2\x25\x34\x1c\xd9\x7d\x6f\x6e\x90\x50\xc8\x85\xaf\x9a\x0d\xaa\x6a\xb3\x40\x6b\xe8\xd0\x8c\x91\x37\xa0\xb5\xd6\x9d\xd0\x9a\x3a\x34\x63\xaa\x0c\x68\x9d\x96\x13\x5a\x4b\x87\x66\xcc\xad\x04\xed\x8f\xd5\x55\x06\x71\xbd\xe6\x84\xd8\xd6\x21\x1a\x04\x81\xec\x61\xd2\xc9\x24\x66\xd6\xe9\x22\x5f\x50\x12\x67\xa3\x4a\xe6\xa5\x64\x5a\x6d\x4e\x1b\x40\x03\xd9\x12\x1e\xd9\xa7\x1c\x56\x84\xb1\xa4\xc8\x1f\xd0\x6d\x60\xfb\x02\xe4\x0e\xed\x92\x35\x59\xb7\xba\x01\xc1\x7a\xe9\xd9\x6a\xc3\x32\x33\x6e\x12\x05\xaa\x7e\x82\x96\x24\x6a\x4d\x6e\x4f\xad\xed\x4a\x2f\xf1\xfa\x89\x17\x24\x30\xe2\xc9\xdd\xa8\xb5\xa5\x43\xbb\x2b\xb5\xaa\xd0\xee\x44\xad\x0d\x1d\xda\x9d\xa9\xb5\xae\x43\xbc\x67\x6a\x4d\xe0\xd6\xba\x80\x5c\x13\x07\xb9\x02\x47\x4d\x6c\xe4\x0a\x8c\xd8\xf6\x05\x58\x34\x25\xd7\xc4\x49\xae\xb0\x01\xd8\x6a\xc3\xd6\x60\x5a\x68\xe8\xac\x7c\x5f\x4e\xc7\x00\x32\x24\x58\xfd\x6a\x12\x26\xf9\x67\x13\x55\xf6\xa8\x69\x6e\x9f\x70\xe6\xc0\xd2\xd3\x3d\x66\xc2\xbb\x47\xcd\x6f\x03\x52\xce\x36\x22\x7b\xcc\x4c\x77\x8f\x1a\xd2\x62\x52\xce\xb7\x96\x6b\xb2\x72\x60\x2c\x0b\x3b\x42\xcf\x5a\xae\xc5\xca\x81\x61\x72\x8f\x94\xeb\x5b\xcb\x81\x01\xb3\x32\x2c\xba\x58\xbb\xcb\x52\x6b\xdc\xc1\x3c\x2b\xf0\x33\x5f\x08\x43\xe4\xc1\xb2\xf1\xcf\x4f\xc3\xc8\x4b\x46\xaf\xc3\x2c\x3d\x8d\x33\xe0\x78\x14\x66\xb4\xed\x67\x3e\xb5\xda\x7a\x8e\xd6\x2d\xd0\xa1\xce\x3b\x3c\xc8\x8c\xa4\x8d\x50\xde\xe8\xcc\x56\x10\x98\x59\x88\x11\xcb\xb7\x48\x8d\x99\x72\x90\x44\x9a\x6c\x9f\xa3\xaf\x9b\x34\xb1\x70\x6e\x23\x21\x4a\xfc\x03\x35\x1b\x3a\xb5\xe6\x90\x2a\x95\x4a\x5e\x74\x09\x11\xfe\x40\x40\xbe\xa8\x12\x50\x2d\xb2\x6e\xeb\x2d\x87\x00\xcd\xab\xd2\xe1\xc8\x85\x67\xe9\x65\x79\xe1\xd9\x00\xc6\x04\x67\x0d\xd8\x3c\xc1\xd9\xd6\x51\x39\x4f\x47\x9e\x0f\x93\xe7\xd8\x01\xe3\x18\x4b\xda\x8e\xd5\x55\x38\x09\x22\xc8\xee\x42\x1d\xb2\xac\x86\x53\x13\x7a\xf2\x32\xb3\xb9\x14\x93\x25\xac\x6e\x59\x46\xb7\x10\xce\x1e\xda\x44\xb2\xf8\x7e\xb7\xf3\x5b\xbb\xd4\xf1\xcd\x7e\x22\xdb\x83\xa3\xd8\x9e\xc5\x99\x04\x15\x9d\xc1\xf6\x84\xbb\xde\x9e\x72\xbc\xda\x5b\xf8\x5c\x45\x29\x64\x4f\x39\x53\xed\x39\x0f\x53\xf3\x4d\xe1\x8e\xe9\x4d\x38\x9d\x5c\x96\xc1\x22\x80\xc1\x56\x8b\xb2\x1b\x73\x6d\x82\x14\x36\xd5\x1f\xc5\x51\x31\x83\x02\x53\x02\x52\x2a\xd7\x2e\xc0\xa3\xdb\x0c\x82\x7e\xfe\x68\x10\x09\xad\x67\xd2\x1a\x43\x13\xbe\x2a\x76\x51\xf0\xf3\x86\xde\xfe\x23\xd9\x22\x6e\x50\xaf\xcc\x3c\x74\xed\xa1\x2f\xb6\x34\x1f\x95\xca\x0c\x3c\x3b\xaf\xe1\xdf\x2f\x79\xb6\xf6\x1b\x03\x4e\xa3\x18\x4e\x65\x56\xfd\xa9\x72\x5d\xa5\xee\xe4\xff\x26\x0f\x5f\xaa\xd5\xea\x4b\x17\xb4\xe6\x5c\x68\x04\xd0\xbf\x09\xc4\x1c\x35\x07\xac\xd6\x7c\x58\x3f\x01\x04\xc0\xed\xba\xfa\x53\xe5\xdf\x80\x9c\x1b\x62\xbb\xcc\x98\x91\x41\xfb\x9a\x83\x72\xc0\x02\x51\x62\xe6\x45\x56\x48\xb3\x57\xaf\x22\xc0\x6a\xf6\xf3\xcf\x3f\x57\x9a\x8d\xe5\x48\x46\x8a\xfe\x28\xb4\x86\xe1\xc6\x30\x34\x0f\x5c\x39\x63\x18\x67\xb6\x1f\x66\xdf\x02\x36\x4f\xfc\x77\x16\xff\xff\xec\xbd\x7d\x77\xd4\x38\xd2\x28\xfe\xf7\xf0\x29\xb4\xfb\x3b\x0b\x1d\xd2\x49\x2c\xf9\x4d\x06\x32\xbf\xcb\x64\xe0\x61\xee\xc0\xc0\x81\xcc\x85\xe7\x70\x60\x56\xb6\xe5\xb4\x87\x4e\x77\x9e\x6e\x87\x24\xbb\xc3\x9e\xfb\x35\xee\xd7\xbb\x9f\xe4\x1e\x95\x64\x5b\xb6\x25\xb9\x3b\x84\x79\x76\x76\xc9\x9e\x65\xba\xdb\xa5\xaa\x52\xbd\xa9\xac\x97\x92\x8c\x4c\x43\x34\x96\xfb\x79\x2c\xd0\xd7\xbd\x98\x47\x79\x46\xbb\x93\xa5\x9e\xc0\x9b\xdc\x51\x2c\xde\x31\xec\xc2\xb1\xb7\xba\xa8\xb9\x35\x6d\xb7\x19\x4e\x0e\xf6\xb6\xda\xd4\x00\x9b\x6d\x55\xaa\x95\xf3\xe4\xd9\xc3\xa3\xdf\x41\x35\x8e\xe6\x1f\xf8\x15\x34\x5d\xf3\x6c\xc5\x2b\xcb\xdd\x49\x16\x85\xc2\x95\x83\x37\xa8\x50\x79\x91\x61\xa3\x9a\x27\xa7\x2c\x6b\xd5\xa3\x6f\xb1\x32\x68\xa8\x03\x3c\xd4\xd2\x29\xcb\x0c\x9a\xfa\xe6\x93\x5c\x07\xb6\x6c\x8d\xaa\x21\xcd\xb7\x13\x7d\x7a\x37\x8d\xe3\xaf\x5b\x9c\xfe\x15\x8e\xac\x7c\xe9\xa5\xfb\x5e\x61\x35\x8d\xb0\xb5\x64\xda\xab\x27\x0f\xf7\xf0\x06\x2b\x19\xc3\xbb\xaa\x6f\x72\xfd\xe2\x10\x4e\x9f\xb6\x4b\x18\xe5\xa2\xac\x26\x86\x02\x54\xdd\x25\x0d\x5e\x64\x39\x4b\x69\x62\xa8\xcd\xe4\x5d\x26\x34\x65\x79\x56\xf0\xce\x1a\x87\x09\x30\xf3\x73\xc2\x71\xe1\x75\x9f\x7d\xfe\x12\x88\x2d\x43\x37\x27\xdf\xc3\x19\xf4\x01\x82\x4d\xe6\x9e\xcd\xd3\xc5\xe2\x51\x6a\x9e\x2c\x86\x84\xd1\x3c\x55\x0c\xaf\xab\xe6\x89\x62\xf1\x88\x37\xd3\xc4\x03\x4e\xad\xf3\xc4\xd6\x39\x61\xcb\xdb\x02\xcc\xfb\x20\x79\xc2\xd4\x52\x0b\xe6\xb5\x4c\xfc\xbb\x25\x30\xba\x67\x4f\xeb\xbf\x7a\x42\xc9\x8c\xa8\x3e\xe7\xf0\xfa\x6d\x89\xf6\x90\xff\x0e\xbd\x57\x1f\x69\xfb\x11\x07\xda\xe7\xc8\x76\x77\xa4\x62\x69\xb2\x80\xc3\xb1\xf2\xdd\x12\x5e\x1f\x7c\x6c\x2e\x53\x63\x7e\x13\x82\xa9\xa5\x09\x13\x48\x42\x40\xc2\xe4\x9b\x4c\x0c\x07\x64\x39\xda\x05\x42\xb6\x89\x46\xf4\x00\x11\xcf\x2a\x35\x98\x36\x9b\x4c\x52\x74\x1b\x65\x32\xcf\x15\x1f\x73\xc0\xec\x5d\x86\x4c\xae\xc2\x8e\x4c\xf1\xa1\x07\x28\x18\x23\x91\xa2\xf7\x28\x43\xef\x51\x2e\x31\x47\x3c\x4f\x78\xca\x4c\x45\x87\x7a\x98\xa3\x2d\x98\x97\xbc\x8b\x4f\x99\xea\xc5\x1e\xf2\x2e\x63\x8f\x07\x81\x4f\x02\x3b\xad\x83\xbb\x0d\x39\xea\xed\xa0\xbb\x07\x1b\xf7\x45\xe0\xf7\xc3\x24\xf7\x39\xe9\xcf\xf2\x20\x8b\x4a\x85\xbf\xe4\xa6\xe9\x3e\x74\x88\x32\xd3\x14\x1f\x02\x92\x0f\x1e\x20\xdf\x53\xbd\x04\xf5\x1b\xef\x16\x45\x87\xc8\xc4\x07\xdb\xec\xb4\xd6\x46\x93\x81\x6a\x12\xad\x9e\x6c\x63\xfd\x13\xde\xa8\x33\x11\x08\x13\x86\x83\xca\x27\xa8\x33\x09\x08\x93\x85\x99\x19\xc6\xd7\x27\x0a\x73\x33\x4c\xa0\x4f\x12\xf2\x3e\xcc\xd7\x09\xbe\x7f\xd6\x09\x3e\x91\x0b\xef\x17\xf3\xe5\x72\xa5\xcf\xb9\x1d\xc0\x40\xad\xfe\x3e\x8b\x08\xd4\x42\x68\x31\x8f\xcc\xd3\x0d\xa6\xe9\xbe\xd0\x0c\xdd\x96\xf3\x40\xc6\xe9\xba\x3f\xe2\x6c\xd0\xd7\x29\x84\xc1\x64\x80\x48\x9f\xb7\x9a\x3d\x80\x06\xae\x89\x83\x6e\x42\xde\x9d\x33\x10\xcf\xbe\x4e\x17\xdc\xe8\x74\x01\xe8\x63\x83\x99\x02\xb3\x5a\xda\x49\x02\xa5\x1a\xfb\xb1\x29\x01\x60\x9f\x16\xa0\x7f\xe8\x02\x1b\xeb\x19\x23\x61\xf4\xa5\x6b\x63\x28\x2a\xff\x3e\xd3\x07\x83\xe9\x01\xfd\x1d\x9e\x84\x51\xe7\x2d\x5e\x3b\x85\xdd\x9f\x15\x20\x24\xd8\x6c\x5e\x40\x00\x76\x70\xc2\x77\x89\xfc\x77\x9d\x1b\xc8\xb0\x17\x26\x3c\xa7\xe2\x95\xdf\x8f\xe2\x2c\x0f\xbd\x18\x3e\x7b\xb1\x97\xe7\x18\x3e\x17\xb1\xc7\xc3\xc4\x37\xcf\x19\x14\x45\xe6\x79\xa9\x0f\x93\x0b\x11\x0d\x29\x0e\xb1\xfc\x1c\x14\x09\x2d\x18\x20\x48\x79\xc1\x82\x82\x05\x5b\x4c\x17\x6c\x94\x79\x6a\x61\x5f\x89\x4e\x6b\xe9\x38\x45\x0b\x11\xb5\x49\x67\xf6\x0e\x87\xc9\x8b\x65\x61\xe9\xeb\x10\x3d\x32\xe2\x12\x12\x6c\x3b\x48\x8b\x26\x23\xc3\x74\xc7\x3b\x06\x03\x35\x21\xe6\x43\xec\x5f\x87\xea\xcf\x18\xaa\x85\x56\x36\x1b\xac\x8d\xca\xe9\x0c\xd7\x52\x41\xce\x01\x9b\x90\xfe\x51\x67\xed\x5c\xb3\x1a\x8e\xee\xc5\x89\x18\xc0\x93\xaf\xf3\xfa\xff\x3d\x03\xf3\x1f\xef\x58\xde\x0f\xf2\x12\x87\xf2\x6f\xcd\xa9\x5c\xb4\x5a\x9e\x2f\x72\x94\x75\xcf\xeb\x69\x3d\x78\xd2\xbf\x3a\xe5\xc7\xee\x32\x40\x3d\x51\xcb\x5b\x1c\xf2\x89\x29\x83\x41\xfa\x92\x72\xb9\x7e\xb1\x2a\x4f\xf9\x64\x61\x1c\xc6\xd6\xff\xb5\xaa\x7e\xaa\xdf\xf3\xc5\x97\xc9\xa2\xff\x9e\xd9\x4c\x04\x4b\x75\xa2\x43\x44\xee\xd7\x9f\x1f\x1c\x4a\x0c\xf5\x0f\x8e\xb9\xe1\x3f\x4d\x16\xe8\x2f\x0a\x6c\xc7\x3a\x5f\xa8\x7c\xb4\x60\xf3\x35\x1f\xdf\x15\xd8\x9f\x1f\xab\xdf\xc7\x57\xe7\xdd\x37\x5c\x83\x58\x4e\x78\xf5\x78\xc5\xe0\x33\x9b\x7f\x57\x56\x6b\x83\x80\x9a\x25\xfc\x05\xda\x43\x93\x05\x54\xf6\xdc\x41\x77\x3b\x93\x1f\xfd\x99\x2c\x8d\x56\x3d\x4b\xad\x57\x66\x87\xdf\x40\x21\xbd\xfa\x3d\x17\xb3\x72\xce\xd1\x44\x3d\x7b\x80\xd4\x96\xcc\xbe\x14\x5b\x6d\x5a\x05\xdd\xa0\xa0\x56\x29\x3f\x79\x2b\x81\xa0\xec\xe8\x40\x10\x60\x0b\x67\xcb\x8b\xc9\x62\x8a\x30\x3a\x40\x64\x67\x83\x8a\xed\x08\x6e\x42\xd9\x06\xad\xbf\x63\x2c\x9e\x2d\x51\xec\xee\x8e\x4c\x85\x2e\x3a\x10\x75\x86\x34\x69\x71\x5e\x7f\x8d\x4d\x24\xde\x9b\x65\xd3\xc3\x0c\xfd\x8b\xaf\xb4\x3d\xd9\x5f\xcf\xcb\x8c\x4f\xbc\x9d\xaf\xab\x5e\x1b\xaf\x7a\x0d\x1e\x15\xf0\x28\x34\x3d\x3a\x81\x47\x83\x05\x23\xc8\x59\xe0\x51\xfc\xd9\xcb\x68\x91\xa3\xd6\xfd\xef\xbd\x8c\x76\xc2\x4e\x4f\x99\x77\xd9\x2c\xa6\xe1\x81\x50\x86\xd0\xb0\xd1\x78\x52\xb7\x7c\xf0\x00\x11\xb9\xe8\x55\xff\xf2\xed\xb7\xdf\xa2\x78\x67\x07\xa1\xf7\x66\x4c\xdd\xbf\x0e\x26\x1c\x0c\x30\x61\xba\xb3\xb3\x19\xa6\x6e\x3b\xdf\x18\x5e\x3a\x3d\xc1\x6d\xbf\x8d\x9b\xe4\xbb\xc0\x5a\xb7\xb1\x64\x56\xeb\x36\xbe\xac\xeb\x4d\x6f\xc8\x6c\x17\x93\x3f\xc4\x94\x6c\xd9\xed\xba\x9d\xf9\x4e\x02\xd4\x1a\x8e\x52\xe2\xae\xea\x39\x14\xf9\x55\x3d\xdc\x75\x2e\x98\xda\x56\x3f\x33\x38\xd5\x38\xe1\xe8\x36\x2a\x60\xb3\xdb\x3f\xc4\xc7\x13\xdb\x15\x2e\xa7\x0c\x2a\xcc\x31\x74\x1b\xa5\x00\xce\xe4\xea\xe0\x7b\xa4\xd6\x09\x4d\xfc\x43\xb2\x52\x9e\x08\xc6\x9b\xa5\x56\xb5\xd8\xa6\xd6\x5a\xe5\xd6\x3f\xf9\x04\x27\xda\x13\xec\x77\x1e\x75\x1a\x99\xc7\xb6\x86\x18\xdc\x53\x33\xe1\x60\xe3\xb2\x72\x32\x87\x76\x91\xc2\x28\x9f\x60\xed\x09\xc6\xfa\xa3\x58\xee\x6c\x95\x8f\x48\x68\x1e\xf1\x60\x01\x59\x50\x9a\xa1\xdd\x9a\xec\xae\x10\xea\xae\xbc\xe8\xcd\xba\x78\x0c\x0d\x09\x3a\xac\x05\xb3\x2b\x44\x6b\xa2\x20\x02\xd7\x89\x01\x81\x88\x75\xfd\x3a\xed\xe2\x4f\x84\x47\x53\xfa\x05\xb5\x33\xe1\xb6\x04\x6c\x5a\xe6\x43\x23\x4b\xa4\xfd\x6a\xeb\x68\x64\x39\x74\x52\x09\x41\x54\xc4\x44\xeb\xdf\x65\x69\x54\xc2\x84\x0a\x06\x4a\x86\x17\x66\x98\x48\xc1\x40\x49\xf0\x13\x33\x4c\xac\x60\xc0\xe7\x67\x5f\x97\x61\xbf\x2e\xc3\x7e\x5d\x86\x1d\x66\x9b\x5f\x97\x61\xff\x29\xe7\x78\xc3\x68\xeb\x39\xde\x30\x1a\x9d\xe3\xd5\xdf\xd9\x86\x73\xbc\x61\xf4\x75\x8e\xf7\xc6\xe7\x78\xc3\x68\xd3\x39\x5e\x93\x72\xba\x73\xbc\xa0\x20\xf7\xa6\xed\x66\xed\xcc\xbc\x34\x4b\xbd\x3f\xf4\xd2\xec\x65\x14\xfc\x2e\x17\x17\x34\x74\xbe\xce\x02\x77\x67\x81\x2f\x23\x58\x53\xdd\xbf\x8c\x02\xed\xf7\x37\x51\xa0\xaa\x74\x03\xc4\xbe\x56\x27\x7a\xab\x9a\x6e\x5a\xff\x5e\x3e\x79\xfe\xcb\xf3\xc7\x8f\x5f\x3d\x3a\x7e\xd5\x9f\x2d\x7e\xf1\xc3\x2f\x3f\xfc\xf4\xfd\xa3\x37\x8f\x86\xb7\x72\xbf\x7c\xfe\xf3\x4f\xdf\xff\x72\xf4\xfc\xa7\x57\xc7\x0f\x7f\x6a\x5a\x6a\xe4\xe4\xb4\xf2\xd1\x66\xd3\xca\x5a\x8b\xd5\x6c\x59\x17\x6d\xe9\xcd\x49\xd7\xa4\xc5\xdb\x35\x9e\xa2\x2b\x5b\xa9\xf2\x4a\x4e\x89\x54\xe8\x01\x22\xc1\x7d\x54\x19\xa6\x44\xb4\x3e\xbf\xbd\x44\xbb\x28\x44\x77\xd1\x95\x3c\x3d\x58\xd5\x87\x34\xe1\x13\xd9\x81\x99\x4a\xf4\x17\x14\x0d\x72\x11\x48\x03\xf9\xc5\x1b\x74\x88\xae\xd0\x5f\x50\x68\xca\x12\xf9\xc5\x7f\x0a\xac\x04\xdd\x45\x82\x8e\x2f\xe8\xec\x18\x80\x2f\xe5\xb4\xdc\x9b\xde\xcf\x57\xf2\xe7\xff\xb4\x4c\x05\x6b\x62\x3b\x2b\x51\x09\xd7\x09\x18\x84\xd6\x48\xe6\x52\x4a\xe6\x52\x1e\xd0\xbc\x34\x08\xa6\x01\x95\xd2\x45\x57\x12\xf4\xca\x32\xad\xd4\x1a\x48\x57\x8c\x57\x70\xc1\xcf\xb0\xd7\x42\xae\xfd\xae\x7f\x1a\xed\x5b\x6f\x95\xa3\x6b\x0d\x4f\x1f\xbf\x7a\x29\x78\xbd\xf4\xb0\xc9\x18\xf4\x7b\x27\x2c\xf3\x63\x02\x0c\x48\xd4\xc6\xfa\x6c\x7d\xd1\xb3\x2d\x23\xd8\xd3\x1a\xcc\x22\x42\x75\xf3\xc4\xaf\xe8\x01\x8a\xef\xa3\x5f\x1d\x33\x73\xd0\x07\x38\x9a\x6a\xae\x8a\x52\x93\x4f\xcb\xea\xc5\x72\x0d\x75\x5c\x85\x55\xc1\x65\xb9\xbf\xee\xa0\x3d\x64\xda\x4d\x5d\x23\xd7\x1b\x3d\x40\xaa\x5e\x84\x09\x58\xfc\x0d\x3a\xf8\xfe\x10\x01\x19\x0d\x8b\x85\x56\x77\x47\xb5\x4e\xf5\xdb\x43\x20\x6b\xdf\x5c\x3d\xa0\xfc\x4c\xa3\xdc\x41\xb5\x67\x78\xef\x69\x18\xd8\x6c\x6a\x49\x33\xac\x05\xbf\xac\xc0\x80\x46\xd4\x42\xed\x3b\xd1\x0f\x0e\xd0\x8b\x55\x79\x5a\x56\xe5\x47\x8e\xce\x96\xf3\xab\xc5\xf2\xb4\x64\x73\xb4\xfc\xc8\x57\xe8\x3f\x1e\x4f\xc8\xce\x3d\x74\xf9\x9e\xa2\x5d\x74\xf9\x3e\x82\x7f\x43\xf8\x37\x10\x61\xc6\x8c\x52\x59\xb4\x24\x2f\xcf\x0f\xbc\x47\xde\x65\xec\xd8\x32\x6f\x61\x4e\x61\x38\x34\xda\xc7\xc8\xa2\x57\x2f\xc0\xcb\x39\x3e\x35\xfc\xd4\x05\xc6\xfa\x3a\x9b\x0e\xec\x67\x67\xdb\xd5\x94\x35\xf8\x4f\xc5\x4f\xcf\x96\x2b\xb6\xba\xea\xdc\x44\x27\x5c\xe0\x58\x1f\x88\xac\xab\x94\xc6\x5b\x67\xcc\xde\x7f\x6c\xec\xd9\x18\xdf\xbd\xb5\x1d\x7f\xb3\x95\x1d\xbf\xb3\xae\xe3\xbb\x56\x75\x6e\xfe\x2a\x81\xe5\x79\x75\x76\x5e\x3d\x85\x57\xeb\x0e\x2c\x82\x24\x3d\xe7\xeb\x72\xc5\x73\xed\xa2\x81\xb4\xac\xd6\x75\x41\x68\xd9\xb8\xf3\xb6\x50\x37\x7e\xbe\x98\xd7\x6a\xd2\x6a\x70\xb3\x15\xbf\x87\x08\x09\xa6\x88\x84\xd1\x14\xf9\x34\x98\xa2\x10\x93\x7e\x63\x75\x67\xc1\x3d\xf1\x4c\x7f\xd4\xbf\xb4\xa0\x7e\x69\xb6\xde\x5b\xa0\xf7\xae\x87\xed\x1a\xf7\x17\xc0\x4c\x2d\xdc\x84\x58\xbf\x7b\xd7\xdf\xde\xbe\xb3\x44\xfb\x0d\x4c\x4d\xfc\x01\x1e\x69\x72\x0b\x7e\xd1\x98\x1d\x2c\xc2\x8d\x95\x12\x00\x4e\x9a\xdb\x7a\x61\x04\x88\x3c\x0f\xed\x21\x31\xd0\x36\x37\x25\xe8\x92\x10\xd9\x8b\x4f\xbe\xd4\x8a\x9e\x61\x62\xce\x20\x34\xe3\xe4\x59\xdd\x89\xa7\x6c\x01\x73\x3f\xbd\xae\x1d\x20\x62\x9a\x43\x4b\xd7\xcb\x55\x3a\x2e\xff\x1e\xfa\xcf\xa9\x24\xf8\x8c\x94\xa8\xbb\x28\x26\x64\x6d\x9d\x36\x7f\x46\xe0\x0e\xfa\x3e\xb8\x88\xf5\xae\x62\x16\xd6\x2b\xa8\x05\x79\x67\x3d\x41\xd2\x29\x24\x48\xae\x53\x41\x90\x74\x4a\x07\x92\xeb\xd7\x0c\x54\x0c\xe3\x31\x8e\x71\x97\x65\x7c\x2d\x9e\x71\x97\x69\xbc\x0d\xd7\x46\x3d\x48\xe3\x6a\xa6\x46\xca\x45\xb5\x94\xd6\x6c\xd6\xf4\x9c\xc1\x64\x5e\xed\xce\x06\x51\x08\x88\x7d\xb8\x6f\xf6\xfd\x21\xc8\xc5\x06\x33\x5f\x5e\x20\x05\x33\xbe\x1a\xf1\x52\x0c\xb0\x6b\x8b\x0f\xc8\x44\x19\xfc\x40\x7e\x94\x49\x2f\x7c\xb6\xbb\xc0\xf1\x8c\x57\x6c\xf8\x64\x8b\xb7\x06\x0d\xd9\xb3\x52\xbc\x82\xcc\xcf\x4f\x17\xd0\x39\x83\x5b\xd5\x12\xac\xd3\xec\x29\x6a\x33\x69\x23\xf0\x96\xef\x24\x3a\x8d\x8e\x96\xda\x37\x14\x0b\x21\xf1\x57\xa7\x9e\x8d\xf6\x5c\xb0\x4f\x35\xd8\xf9\xf2\xc2\x9a\x97\x5a\xa5\x75\x6c\xcc\x73\x4c\x3d\x39\x16\x5a\x38\x7e\x7b\x69\xe3\xfd\xf8\x52\xda\xda\x21\xf4\xc0\x0e\x04\xc6\x76\x08\xac\x6f\xb6\xfb\xe6\x7a\x66\xe0\x08\xab\x6d\x8f\x02\xe8\xd2\x44\xe8\x25\x80\xd7\x43\xd7\x62\xf9\xf1\x25\x6e\xc1\xf1\x26\xe0\xd2\xbe\x8e\x2f\xb1\x4b\x8f\x0a\xf6\x69\x03\x0b\x7a\x74\x9a\xf7\xfa\x7c\x05\x1e\x25\xaf\x13\x11\xa6\x3e\x6e\xe5\xc7\x97\x81\x8a\x05\x68\x32\x51\xbc\x35\x47\x83\x15\x7d\x75\x3e\xd8\xf6\x7a\x03\xd8\x9e\x36\xd8\x64\xd4\x90\xd8\x9e\xf6\xb0\x3d\x1b\xc7\xf6\xbb\x3a\x55\x27\x14\x3a\xec\x13\xf5\x43\xa2\xc5\x4c\xd1\x56\x6f\x7b\x2f\x67\x4b\xf4\xa2\x74\x58\xb6\x20\x59\xdf\xf9\x88\xef\x6b\x5f\x65\x2a\xd7\x7c\xff\x6c\x93\xef\x48\xae\x41\xeb\x32\x63\x01\x24\x2d\x68\x2c\x20\xd5\xd0\x4f\x5b\x68\x7b\x48\x82\xc1\x62\xb6\x7c\x2e\xb3\x94\xc3\xce\x7c\x98\xce\x97\xb5\xb3\x2f\x97\x90\xe8\x39\x42\xbc\x78\x81\x6e\x49\x8c\x4e\x3c\x68\xbe\x32\xa9\x3b\xfd\xe0\x41\xcb\x24\x98\x76\xdd\x3f\xb8\x4a\xd3\x27\x68\x4f\x7b\x6e\x33\x74\xd4\x75\x9d\x06\x87\x11\xf9\xb3\x2d\x91\x77\xe7\x3c\xda\xee\x6e\x34\xe3\xd1\xef\xb2\xe2\x4a\x43\x03\xb3\x1d\x43\xe6\xa2\xe0\xda\x3d\x7f\x36\x42\xe3\xe9\x96\x34\x5c\x63\xdb\x8a\x2d\xd6\x67\xcb\xb5\xd3\x4a\x20\xfc\xbe\x28\x9f\x4a\xc7\x38\x7e\xab\x4d\x28\xb6\x76\x68\x1d\xf3\x64\xc3\x4d\x06\x3e\x05\x39\x36\xfa\x59\xe3\xc7\x59\x89\x58\x05\x43\x20\xc4\x4b\x73\x4e\x78\xec\x41\x1f\x8c\x45\x5b\x9b\x97\x23\xaf\x09\x00\x46\xb8\x63\xaf\xee\x8e\x84\xb6\xb9\xfc\xb1\x57\x77\x46\xc1\x59\xc6\xad\x83\x03\x74\x34\x73\x05\xbf\xcd\x87\xf5\x6b\x0e\x19\xe3\xa1\x11\x69\xe1\xab\x8e\xc3\xcd\xb8\x32\x62\xdc\xdb\x85\xd4\xba\xd5\x71\x63\x70\x9b\x37\xb9\xc4\x4d\xa3\x89\x96\x84\xec\x6c\x32\x00\x4a\x04\xa4\x87\x80\x0c\x10\x38\xa5\x28\x72\x8f\xd5\xf2\xc2\x21\xc4\xb9\xe6\x0d\xc7\xad\x6b\xbc\x47\x93\x7f\x28\xf6\xe5\x0f\xb7\x6b\x66\xe0\xab\x2b\x7e\xcc\x35\xaf\x39\x6e\x5d\x48\xc7\x08\x3f\xb4\x18\xe7\xcb\x8b\xcf\x9f\xa0\xfd\x61\x69\x7a\x23\x19\xe8\xdb\xea\x69\x9d\x69\x48\x31\xbe\xf5\x26\x33\xe1\xf9\xe8\x4b\x5b\x07\x8b\xcd\x11\x3b\xf9\x4a\xb7\x85\x70\x49\xc7\x62\xc7\x3f\xd7\xb6\x28\xc3\x24\xcd\x8d\xef\x8a\x1a\xc0\x37\x33\x3e\xa2\xdd\x70\x1a\xe8\x2e\x4c\x5e\x0d\xe7\x81\xae\xbb\x97\x0a\x5f\x67\x2b\x15\x6c\x92\xca\x78\x39\xef\xee\x77\xc2\x3b\xe8\xa0\xcb\xff\x0e\xba\xdb\xff\x01\x88\xc3\x02\x4d\xb3\x9b\xeb\x9f\x64\x13\xd4\x67\xcf\xe1\xe9\xd3\x8c\x35\xf3\xc6\x39\x48\x74\x60\x54\xbd\x0e\x52\xcf\x02\x0e\x71\x1e\x18\x37\xd3\xbd\xfa\xaf\x73\xce\xff\xc6\x87\x48\x67\x6c\x3d\xab\x8d\x7b\xa3\xbb\xe8\x07\x5c\x7c\xce\x64\xe1\xf8\x9c\xd0\xe6\x29\xbd\x2d\x9d\xdf\x7e\x0e\xb1\xa5\x67\x9f\x95\xd3\x52\x43\x35\x31\xa7\x27\x9c\x5b\xcd\xcd\x69\xa8\xd4\xf4\x9c\x8e\xea\xba\xf3\x8a\xad\x28\xdc\x9d\x78\x3a\xe8\xc4\xd3\xeb\x76\xe2\xe9\xa0\x13\x4f\xb7\xeb\x84\x59\x55\xd2\x74\x95\x93\x55\x4b\xb4\xe2\xd5\xaa\xe4\x1f\xb9\x61\x03\x22\x52\x87\xbb\x65\x3c\x38\x3b\x5f\xcf\x6a\x36\x4c\x22\x32\x40\x3e\x1b\x42\x7e\x7e\x79\x62\xc3\xe9\xa1\x86\xf4\x74\xe8\xc2\xd6\xf3\x44\x37\xb4\x6b\xd2\x1e\xbf\xd4\x16\x4a\x43\x38\x6b\x0e\x3b\x6d\x10\x21\x36\x5c\xcc\xa9\x3f\xb6\xfb\x33\x9d\x62\xff\xba\x5d\xf3\x9a\xdb\x35\xfd\x6d\x37\x6b\xfa\x63\x5b\x35\x7d\xc7\x46\x4d\xff\xeb\x36\xcd\x9b\xde\xa6\xe9\x6f\xb8\x49\xd3\xa0\x96\xce\x16\x4d\x7f\x93\x0d\x9a\xbe\xfd\x18\x7e\xb3\xf1\xf0\x1e\x0d\x3e\xbd\x9b\x52\xfc\x2f\xb2\x5d\xb3\x5f\x60\x27\xc4\xe4\x77\xdb\xc3\x59\x97\xdb\x11\x34\xff\x58\xe5\x76\xae\xb5\xdb\x52\x3d\x6e\x77\x7b\xd6\x30\x5b\x15\xe4\x09\x31\xe9\x6c\x0b\x09\x31\xb1\x6e\x33\xa1\x1b\x16\xe4\x11\x80\x9d\xad\x26\x54\x55\xb5\x08\x31\xb9\xb1\x23\xc4\x7a\xf7\xad\x35\x79\x06\x9b\x1c\xbc\xcb\x2c\x4d\xd3\x24\x0f\xf3\xa9\x56\xb0\x67\x67\x6a\x82\x8c\x48\xc2\x48\x42\x98\x5e\xce\x67\xc7\x50\xb7\xc7\xd0\x34\xc1\x61\xe2\xe1\x90\xe9\xd5\x7f\xcc\x44\x70\x48\x0a\x9e\xc9\x9a\x41\x75\x6d\xa0\x0d\x89\x44\xb1\xef\x93\x28\x92\x65\x85\x54\xe5\x20\x33\x11\xca\xd3\x20\x60\x34\xd6\xeb\x0a\x6d\x48\x24\x4f\xbd\x8c\x70\x2f\xd7\xcb\x10\x99\x89\x04\x71\x1a\x06\x14\xe7\x7a\x91\xa2\x5e\x6a\x7a\xd3\x55\x8a\x84\x3d\x5d\xb3\x4a\x11\x8e\xbe\x96\x29\xba\xa1\x9c\x88\x6e\x5d\xa6\x48\x34\x19\xcb\x8b\xf4\x98\x31\xcc\x8c\xe8\xd7\x32\x45\x37\x9f\x1b\xd1\x4d\xcb\x14\x19\x95\xd3\xcd\x8f\xe8\x68\x99\x22\x9f\xba\xcb\x14\x89\x61\xfc\x1e\x25\xa6\x6c\x89\xfc\x8b\x64\x4b\xff\xd2\x87\x5b\x6e\xf6\x60\xcb\x17\x3a\xb2\x72\xfd\x24\x4a\x3e\x6a\xba\xab\x10\xfd\x52\xef\xe0\x35\xdc\x75\xd3\xdd\xe4\xbb\xcf\xce\xce\xe6\x57\x13\xf5\xe3\x14\xb1\xd5\xc9\xf9\x29\x5f\x54\xeb\xfe\x9d\x3c\xfa\xf1\x99\x96\x1f\x28\xa5\xd4\x92\xe8\x91\xf7\x2e\x03\x42\x19\x29\x12\xc8\x2b\xf2\x98\x50\xc6\x09\xd9\x99\x0e\xe1\x62\xec\xc7\x41\x90\x40\x99\x41\xe2\xf3\x22\x0a\xb3\x5c\x4f\x0d\x06\x0d\xd2\x30\xf3\x8a\x34\x2b\xe0\x02\x84\x2c\xc8\xfd\x94\x14\x26\xc4\x3c\x49\xc3\x3c\x65\x21\xdc\x9e\x8d\x69\x92\xa7\x69\xe6\x44\xec\x27\x61\x94\x91\x30\x85\x74\xc6\x0f\x68\x1a\xfa\xd4\x84\x38\x4c\x0a\x8c\x71\x01\x1c\xa7\x91\x17\xe6\x1e\x4e\x9c\x88\x13\xe2\x17\x94\x30\xb8\x72\x9b\x15\x38\x09\x8a\x24\x35\x21\x66\x29\xce\x42\x9e\x03\xc7\x39\x8b\x72\x8a\x31\x75\x22\xce\xa9\x17\x33\x26\x65\xcc\x7c\xcf\xf7\x48\x60\x94\x31\x26\xd4\x0f\x53\x79\x67\x44\x10\xc6\x5e\x54\xa4\xdc\x89\x98\x04\x3e\xa6\x61\x0a\x77\x47\x04\x9c\x07\x29\xa1\x99\x51\x14\xa1\x97\xc5\x79\x06\x17\x88\xe7\x61\x51\xa4\x01\x27\x4e\xc4\x31\x49\x79\x98\xc7\x20\x8a\x82\xc4\x29\x4d\x22\xa3\xf2\xa8\x97\xf3\x14\xcb\xcb\x2b\xfc\x14\x47\x49\x94\x62\xb7\x8c\xd3\x3c\xf3\x22\x59\xa1\x92\x84\x59\x8c\x89\x1f\x9a\x10\x67\x38\x49\x0b\x2c\x19\xc8\x8a\x28\x21\x51\x12\x38\x11\xf3\x20\x49\xa3\x24\x03\xd9\x25\xbc\xc0\x01\xcb\x8d\x32\xe6\x45\xca\x83\x98\xc2\x35\xe2\x3e\x0d\x0a\x12\x72\xdf\x89\xd8\x2b\x32\x9c\xe4\x19\x34\xa0\x29\xcd\xf2\x30\x35\x72\x4c\x02\x2f\x63\x38\xcb\xe0\x92\xf6\x98\x65\x49\x16\x85\x6e\xe5\xe5\x3c\x21\x59\x04\x0e\x12\x26\x24\xf5\x48\x6c\x44\x1c\xb0\x38\xa0\x01\x83\x77\x84\x88\xb3\x88\x07\xd4\xcd\x71\x98\xa5\x1e\x4b\x72\xe0\x24\xcd\x03\x5c\xa4\x79\x60\x74\xe9\xa8\x48\x28\xcd\x01\x31\xf5\x31\x0e\xfd\xd4\xcd\x71\x42\x7d\x1e\xe2\x90\x80\x4b\xf3\x28\xca\x0b\x66\x76\x10\xea\xe3\x2c\x8a\x20\xc3\x27\x79\x1a\xf8\x04\x7b\xee\x58\xe1\x79\x3e\x89\x33\x2a\xef\x7c\x2f\x52\x82\x7d\xa3\xb9\xa5\x45\x98\xc4\x45\xa6\xea\x9b\xf2\xc2\xe3\xdc\x6d\x15\x59\xc4\x3d\x2f\x2d\xc0\xf0\xfd\x9c\x51\x5a\x64\x46\xab\xc8\x43\x16\x27\x38\x00\xc4\x89\xef\x31\x16\x13\xb7\x28\xbc\x28\x63\x91\x1f\xca\xeb\x5d\x3c\xcf\xa7\xc4\xec\x20\x38\x20\x09\x49\xe4\xbb\x97\xc7\x3c\x1e\xf1\xd8\x2d\x0a\x12\xa7\xb1\xc7\x28\x04\x97\x20\xca\x09\x29\x0a\xa3\x4b\x13\x8e\x85\x98\x40\x64\x61\x46\xa2\x2c\x21\x91\x13\x71\x90\x93\x2c\xca\x0b\xb0\x8a\x90\x65\x01\x61\x3c\x37\xc6\x0a\xdf\xa7\x5e\x8e\x41\x64\x49\x9e\x84\xa9\x9f\x17\x4e\xc4\x51\xe8\xb1\xd8\x0f\x03\xe9\x20\xac\x88\xfc\x9c\x9b\xcd\x2d\x62\x1e\x4b\x21\x6e\xfb\x59\x1c\xa7\x84\xb9\xc3\x26\xc5\x19\xc9\x12\x22\xa3\x5b\xcc\x73\xc6\x79\x64\x42\x9c\x90\x98\x90\x4c\x8a\x0c\x07\x94\xf8\xa1\x9f\x3a\x11\x33\x92\x16\x9c\x32\x19\x67\xb3\x02\x7b\x7e\x64\x74\x10\x46\x31\x8b\xa2\x00\x38\x4e\xb3\x80\xf8\x9e\xe7\x8e\x6e\x19\x09\x52\x9a\xc6\x1e\xc4\x59\xaf\xa0\x49\x9c\x60\x63\x74\x8b\xa3\x2c\xc4\x0c\x64\xec\x45\x61\x90\x72\xdf\x6d\x15\x39\x4e\x08\xa7\x38\x01\xc4\x11\x2f\x42\x82\x8d\x63\x5e\x1e\x25\x89\x17\x11\xd0\x45\x18\x46\x21\x4b\x46\x3c\xaf\x08\x3c\xee\x87\x52\x76\x61\x1c\x63\xe2\x11\x66\xb4\x63\x2f\x62\xcc\x93\x3d\xf3\x49\x9a\xe6\x38\x75\x2b\x0f\x27\x2c\xc8\x30\x86\xb0\x99\xd2\x9c\xe4\x5e\x66\xe4\x18\x73\x3f\x8e\x32\x4f\xda\x31\x0e\x30\x4b\x43\x77\x74\x23\x71\x40\xe3\x38\x00\x3b\xce\x0b\xca\x79\x9a\x24\x26\xc4\x7e\x90\x7a\x69\x96\x42\xcf\x38\x4e\xd2\x80\x8e\x98\x9b\x9f\xe0\xcc\xcb\x52\x50\x4a\x16\x66\x49\xc8\x22\xdf\x18\x8f\x79\x4e\x19\x0b\x20\x6c\x72\x3f\xc0\x94\x65\x6e\x73\x0b\xd3\x24\xcb\x58\x50\xc8\x91\x21\xf2\xb9\x1f\x1b\x11\x47\x94\xf0\xa8\x90\xc1\x2a\x8f\x52\x92\x52\xe6\x16\x45\x1c\xd0\x82\x12\x0e\x0e\x12\xe6\xbc\x48\x89\x39\x56\xc4\x94\x85\x91\x2f\x47\x9a\xc0\xc7\x31\x29\x22\xb7\x55\xd0\x20\xa3\x31\xc5\x32\x13\xc2\x85\xc7\xd2\xd8\x18\x36\x69\x96\xc5\x1e\x91\xca\xc3\x2c\x0a\xfc\x84\xbb\x73\xb7\xc4\x4b\x79\x51\x14\x4c\x66\x91\x91\x8f\x39\x31\x5a\x05\x0b\x42\x2f\xca\x38\x78\x5e\xce\x29\x49\x73\xee\xce\xdd\x52\x5e\x24\xcc\x2f\xe4\xc8\x40\xb2\x28\x4e\xb0\x39\xaf\x88\x62\x1c\xd3\x42\x0e\x61\x7e\x4c\x42\x9f\xb8\x95\x97\x31\x12\xfb\x3c\x03\x19\x73\x46\xa2\x08\x27\x46\x19\xe7\x98\x46\x29\x95\x43\x13\x11\x86\x44\xba\x93\x80\xc3\x44\x84\xe5\x2c\xce\x73\x70\x90\x2c\xe7\x1e\x4f\xb1\x31\x6c\x16\x61\x9c\x07\x45\x5c\xa8\x41\x97\xe7\x38\x76\xdb\xb1\x17\x15\x5e\x14\xcb\x7c\x21\x26\x38\x8e\x8a\xd4\xe8\xd2\x1e\x8b\xfc\x38\xcf\xc0\x41\x18\xc9\x68\x42\x99\x7b\x04\xc1\xd8\x2f\x12\xea\x05\x6a\xe2\x2e\xf1\x72\x66\xe4\x18\xa7\x31\xf6\x52\x5f\xc6\x63\x1f\x67\x41\x8c\xdd\x32\x26\x34\x4f\xe3\xb8\x08\xa5\x55\x78\x41\x9c\x53\x63\x3c\xf6\x49\xc6\x58\x1a\x83\x55\x04\x5e\x16\x93\x20\x71\x3b\x88\x9f\x25\x3c\xe5\x1e\x88\x02\x87\x59\x92\xf2\xd4\xa8\xbc\xc0\xc7\x79\x14\x67\xd0\xb3\x24\xc3\x9e\x97\x07\x6e\x3b\x0e\xb2\x2c\xcc\x03\x99\x78\x67\xa9\xcf\x03\x92\x1a\x87\x26\x91\xae\x90\x24\x81\x60\x55\x64\x51\x18\x73\x11\x5e\x5d\xb1\xa2\xc8\xd2\xa8\x60\x72\x90\x64\x79\x54\x30\x6e\xe4\x38\xca\x82\x00\x27\x14\x10\x07\x2c\x88\x43\x8a\x63\x35\x89\xfa\xce\x71\x6c\xb5\x7d\x2f\x7c\x7d\xdd\x13\xaa\xb6\x6b\xd0\x5e\x77\x4e\xa8\xfe\x72\xbd\x13\xaa\x21\x26\x9b\x2d\x1d\x18\x96\x23\x6e\xbe\xfa\xe8\x75\x97\x0e\x22\xe6\x25\xbc\x9e\x70\xf7\xd3\x2c\x4b\x3c\xcb\xd2\x41\x9a\x46\x31\xe3\x72\xf8\xa5\x41\xc6\x58\xdc\x4d\x5d\x1c\x44\xfc\x2c\xe2\x85\x1f\x43\x24\x2b\x78\x12\x14\x54\x44\x32\x13\x24\x0b\x83\xa2\x08\x7d\xf0\x82\xb0\xc0\xb9\x1f\x15\x9b\xce\xea\x87\xd8\xe3\x21\x91\xc1\x87\xe5\x3c\xa2\x24\xb7\x2c\x1d\x24\xa9\x17\x46\x54\x1a\x24\x49\x7d\x1e\x65\xb8\xd8\x90\x08\x2e\xa8\x9f\x27\xd2\xe6\x8b\x34\xc0\x69\x1e\x59\x7a\x12\xa6\xdc\xcb\x72\x99\x06\x61\x3f\xe6\x04\xc7\xc9\x36\x4b\x07\x37\x7d\x8e\x74\x93\xd2\xb0\x00\xe7\xd9\x2b\xbf\x3e\xc1\xf6\xd2\xaf\x4f\x88\xbd\xf6\xeb\x13\xdf\x5e\xfc\xf5\x49\x60\xaf\xfe\xfa\x24\xb4\x97\x7f\x7d\x12\xd9\xeb\xbf\x3e\x89\x2d\x05\x60\x65\x07\xa1\x3c\xac\x71\x1f\xb8\x7c\x3e\x97\xcf\x87\x87\x3d\xa4\x0c\xa0\xb9\xf1\x08\x94\x7c\x3e\x97\xcf\x2d\xcd\x09\x34\x27\xd6\xe6\x64\x2e\x9f\x5b\x9a\xfb\xd0\xdc\xb7\x36\xf7\xe7\xf2\xb9\xa5\x79\x00\xcd\x03\x6b\xf3\x60\x2e\x9f\x5b\x9a\x87\xd0\x3c\xb4\x36\x0f\xe7\xf2\xb9\xa5\x79\x04\xcd\x23\x6b\xf3\x68\x2e\x9f\x5b\x9a\xc7\xd0\x3c\xb6\x36\x8f\xe7\xf2\xb9\x61\x5b\xdf\x86\x45\x8f\xa5\x65\x98\x90\x33\x69\x14\xfd\x8a\x7b\xb0\xe5\x56\x1a\x84\xa9\x55\x2a\x6d\xc1\xd4\x2a\x93\x76\x60\x6a\x95\x49\x13\x30\xb5\xca\xa5\xfa\x4d\xad\x72\xa9\x79\x53\x2b\x2e\xb5\x6e\x6a\xc5\xa5\xc2\x4d\xad\x0a\xa9\x6c\x53\xab\x42\xea\xd9\xd4\xea\x44\xea\xd8\xd4\xea\x44\xaa\xd7\xd4\x6a\x26\x55\x6b\x6a\x35\x93\x5a\x9d\x9b\xea\x0e\xba\x8e\xee\x6e\x78\x1d\xaa\xb5\x9e\x76\x4d\xff\x75\x29\x6b\x0f\xdb\x8e\x9b\x3f\x82\x11\xbc\x5e\x3e\x1b\x82\x6c\x50\x28\x5a\x92\x11\x22\x78\x5d\xd6\xa7\x0d\xf4\xaa\xd1\xe8\x2e\x22\xef\x00\xd2\x5c\xcb\xb5\xc5\x31\x97\x38\xd4\xf9\x82\x3e\x0e\x38\x35\x7f\xad\x0a\xd4\x07\x07\xe8\x3f\xa0\x1a\xb1\x9d\x78\x5d\xd2\x79\xab\x0a\xd5\x97\xb3\xa6\xce\xf1\xe5\xd8\x59\x3c\x05\x36\xd7\x5a\xb8\xcf\xe3\x49\xa8\x59\xa7\x0a\xf6\x4c\x16\xff\xd5\x8b\x57\xcf\xa1\x44\x71\x5d\x0e\xb8\x03\x47\x07\x70\xb0\xe9\xf5\x3d\xea\x82\xc5\xae\x13\xa6\x12\x72\xde\xe1\x62\x3e\xe4\x62\x66\xe2\x62\x3e\xe4\x62\xa6\x73\xd1\x85\x8b\x87\x70\x96\x4a\xc6\xba\x4a\x2d\x35\x73\x3e\x6a\xb5\xb7\xb7\x29\xbe\xdd\x6a\x14\x6f\xa6\x51\xdc\x6a\x14\x6f\xa4\x51\x3c\xeb\x14\xf8\x9e\xd5\x55\xb8\xb5\xc2\xdc\x73\x55\xab\x5b\x13\x12\x56\x12\xee\x82\xc1\x3e\xe6\x44\x53\x69\x8d\x2f\x1a\x55\x29\x9e\x77\xd8\x98\x1b\xd8\x98\x99\xd8\x98\x0f\xd8\x98\x75\xd8\xe8\x22\x8c\x06\xf8\x48\xe4\xd4\xe9\x56\xb5\xc3\x5d\xa1\x24\x6e\xd5\x1e\xbb\xd4\xfe\xba\x8c\x65\xe4\x32\x0e\xcc\x3d\xc8\xb9\x82\x74\x9c\x09\x97\x90\x38\xd2\x02\x89\xf5\x56\xe8\x1a\x56\x32\x80\x8d\x99\x45\x1f\x76\x5e\xc3\x8e\xf2\xd0\x46\x9a\xb9\x10\x5a\x19\xf7\x47\xae\x2e\x78\x1b\xca\x66\x12\x7c\x06\x35\xdb\x04\x1e\xa1\x49\x6f\x07\x3d\xa8\xbd\xb3\xf9\xe5\xff\x47\x18\xdd\x43\x83\x6d\xd3\x43\x3e\xc4\xbf\xb5\x06\xc7\xd9\x10\xff\xee\x36\xde\x62\xe1\x02\x5f\x97\x0b\x90\xe2\x86\x3c\x48\xed\x0c\x39\x90\x9a\x18\xd0\x37\x23\x6d\x47\xc5\xd7\xa5\x4d\xbd\xed\xa8\xf7\xba\x34\x31\x67\xaf\x89\xaf\x8a\xe2\xcf\xd0\x6d\x54\xcc\x54\x59\x7c\xf1\xc5\x7c\x8e\x4f\xb6\x91\xbe\xcf\xe7\xa2\xcd\x5c\xb5\x11\x5f\x4e\xe6\x8e\x62\xfa\x33\xa8\xa6\x2f\x50\xa7\x92\x0e\x7c\xce\xe4\xe7\x54\x7d\xb6\x37\x9f\x43\x73\x41\x25\x95\x24\xe1\x73\x26\x3f\xa7\xea\xb3\xbb\x24\xff\x4c\xd6\xe4\x57\x01\x47\x8e\x2b\x6c\x2e\xcb\x4b\xef\xc8\xe2\x07\x6c\x56\x57\xec\x57\x0f\x3b\x35\xfb\x67\xda\x2d\x12\xac\x1e\x75\x9c\x95\xf9\xe1\x6d\x6a\xd2\x20\x52\x34\x67\x5d\x9a\xf3\x0e\xcd\x59\x97\xe6\x5c\xa7\x39\xdb\x84\x26\x96\xfd\xe4\x6a\x68\x90\xe7\x4d\xb8\x1c\x14\x68\x5d\xf6\x7f\x56\x5f\x5a\xa1\x3d\x0c\xda\x87\x82\xa6\x5f\x3f\x93\x65\xb8\xdd\x34\x65\x3f\x15\x70\x4d\x73\xd6\xa5\x39\xef\xd0\x9c\x75\x69\xce\x75\x9a\xb3\x96\xa6\x31\xeb\x1c\xbf\x87\xc0\xcc\xeb\x8f\x50\x7d\xe9\x47\xfb\x61\xaa\x1f\xc1\x79\x7f\x2c\x5d\xc7\xa8\x7e\x84\x60\xf0\x63\x69\x0b\xa1\x1f\xe1\xa2\x04\x01\x33\x9b\x37\x2c\x9a\x9c\x52\x02\x0a\x82\xb3\xb6\x2f\x32\x5c\x54\x58\x0f\x17\xb3\x4d\x62\x55\x4b\x56\xfc\x2b\x24\xe2\xa6\x59\x01\xa9\x6c\x66\x22\x98\x5d\x8b\xe2\x8f\xc6\xd0\xd3\xa7\xf8\x63\x69\xa2\xf8\x63\x79\x1d\x8a\xe6\x60\xd7\xa7\xf8\xda\x48\xf1\xb5\x89\xa2\xd9\xda\xfa\x97\x57\x58\x48\xc2\xe4\x45\xed\xf6\x00\x68\xe5\x0e\xe6\x41\xea\xa8\xb4\x2b\xc3\x23\xb0\x48\x74\x16\x6b\x5c\x9b\xb1\xf9\xf3\x59\xce\x2a\x8e\x2e\xdc\x6f\xfa\xe2\x0f\xde\x37\x8d\xf6\x0d\xaf\x9b\x27\x26\xb6\x61\x00\x2a\x4c\x6d\xe0\xc5\xb6\x30\xb5\x81\x77\x68\x6e\x6a\x03\xaf\xd0\xdc\xd4\x06\x5e\xc9\x27\xf9\x1c\xae\xef\x98\xdb\xee\xef\x80\x77\xfa\x49\x3e\x03\x28\x29\x3a\xae\x4b\x2e\x1f\x08\xcd\x7a\x13\x88\xc0\x94\x99\x78\x84\x29\x85\xcc\xc4\x23\xcc\x5e\xa4\xa6\x36\x30\x79\x91\x9a\xda\xc0\x3c\x09\x33\xb5\x81\x69\x92\xc1\x6d\x06\xe2\x0f\xa6\x5d\x26\xd2\xd4\x2b\x62\x15\x06\x4c\xdc\x4c\xa4\x1c\x84\x65\xed\xb6\x23\x8e\x94\x46\x35\x4c\x76\x6e\xf4\xb2\x12\x6d\xce\x10\x32\x83\x27\x60\xff\x6c\x90\x0d\x3c\x69\x8a\x51\x4c\x9e\x80\xdd\x33\xc9\xec\x13\x4f\xe7\x96\x0d\x99\xed\xe3\xd1\x66\x19\x25\x41\x10\x51\x3a\x24\x88\x5b\x82\x20\x9e\x54\x11\xec\x44\x82\x74\x9c\xa0\x36\x2f\x29\x09\x12\x08\xb1\x43\x82\xa4\x25\x48\x66\xf5\xb8\x34\x01\x78\x2d\xbc\x8e\x13\xd4\x66\x32\x25\x41\x5f\x10\xcc\x87\x04\xfd\x96\xa0\x2f\x68\xe5\x8a\xa0\x3f\xe2\x0e\x7d\x3c\xda\xdc\xa7\x24\x18\x08\x82\x7c\x48\x30\x68\x09\x06\x82\x16\x57\x04\x03\x9d\x20\x1f\x27\xa8\xcd\x96\x4a\x82\xa1\x20\x58\x0c\x09\x86\x2d\xc1\x50\xd0\x2a\x14\xc1\x50\x27\x58\x8c\x13\xd4\xe6\x57\x25\xc1\x08\x5e\x2a\x86\x04\xa3\x96\x20\x64\xef\x27\x8a\x60\xd4\x79\x89\x18\x27\xa8\xcd\xc8\x4a\x82\xb1\x20\x38\x1b\x12\x8c\x5b\x82\xf0\xda\xa4\xc6\x64\x01\xef\x4a\x02\x3e\xfb\xec\xc5\xd7\x4b\x71\x6e\xee\x52\x1c\x2c\x92\x7b\x75\xb3\x99\x40\x06\x75\x58\x7c\xef\xa6\xaf\xc5\x31\x93\xc1\xff\x94\x17\xe3\x1c\x2d\x17\x1f\xf9\x4a\x56\xf9\x45\xd5\x12\xf9\x64\x2f\x2d\x2b\x91\xa0\xe4\x88\xc1\xfe\xec\x94\x17\xcb\x15\x57\xdb\xa9\x07\x5a\xd3\xce\x9a\x68\x6b\x77\xd5\xf2\x8d\x4f\x6e\xe2\x22\x9e\x3f\xea\x15\x3c\x3a\x9f\x4d\x7d\x90\x7b\x08\x7b\x24\x38\xf0\x55\x9d\xe2\xaf\xa7\x9b\xac\x47\x95\x42\x4c\xb6\x3d\xdd\x24\x9a\x8c\x9c\x6e\xea\x6c\x6b\x18\x9c\x6e\x0a\x31\xf9\x7a\xba\xe9\xa6\x4f\x37\x09\xad\x6c\x76\xba\xc9\xa8\x9c\xce\xe9\x26\xa9\x20\xe7\xe9\x26\x79\x8e\x76\xc3\xd3\xdf\xfe\x1f\xfa\x3c\x13\x5f\x64\x7b\x29\x5b\xf3\x28\xe8\x3d\x38\xcd\xc3\x3e\xe8\xc7\xb3\x0f\x79\xd1\xfb\x31\x2b\xcf\x66\x7c\xf5\xbb\x1c\x89\xd2\x58\x85\xef\x82\x43\xf9\x40\x32\x06\x9f\x75\x7e\xfe\x15\x8e\x4e\xbd\xde\xe8\x4e\x20\xd8\x3c\x73\x04\x5d\x6f\xe0\xb4\xdf\xc6\x8f\x42\x1d\x1c\xa0\x17\x7c\x75\x0a\xa3\xe8\xd1\x6c\x59\x66\x1c\xe1\xfe\xb5\x29\xa2\xf9\x8b\x23\xdc\x3d\xbb\x14\xc6\x53\x14\x24\x53\x14\xe0\x29\xf2\xfd\x29\x22\xe1\x14\xe1\x78\x8a\x92\x29\x42\x58\xdb\x6a\x14\xd2\x29\x0a\xbd\x29\x0a\xc8\x14\xf9\xc1\x14\x91\x68\x8a\x30\x9d\x22\xec\x4d\x11\xd1\xe1\x92\x29\x0a\xf1\x14\x05\xfe\x14\xf9\xe1\x14\x91\x78\x8a\x70\x32\x45\x58\xe0\xd7\xe0\x22\x6f\x8a\x42\x32\x45\x41\x30\x45\x7e\x34\x45\x91\x3f\x45\x61\x38\x45\x41\x3c\x45\x7e\xa2\x01\xfa\x78\x8a\x88\x3f\x45\x38\x9c\xa2\x78\x8a\x50\x44\xa6\x28\x0c\xa6\x28\x80\xab\x05\x74\x40\xc1\x09\x99\x22\x1c\x4c\x51\x24\x00\xf1\x14\x85\xfe\x14\x05\xe1\x14\xf9\xb1\x06\x48\x92\x29\x22\x78\x8a\xb0\x20\x39\x45\x88\xd0\x29\x22\xde\x14\x61\xc1\x8e\x04\x7b\xe7\x90\x2b\x31\xcb\x95\x74\xe5\x2a\xb8\x10\x72\x14\xfd\x26\xe2\xf3\x14\xa1\x50\xe7\x56\x11\x16\xdd\x12\xdc\x02\x43\x9e\xce\xa5\xaf\x04\x27\xb8\x12\x00\xd1\x14\xe9\xdd\xc5\x91\x94\x87\x10\x30\x70\xef\x77\x15\x21\x14\x2a\x04\x2c\xe4\xe7\xc7\x52\xb0\x61\xd8\x93\x57\xe0\x29\x6d\x85\x52\xfb\x81\x4e\x41\xa8\x46\x98\x86\x2f\x54\x1a\x49\xb5\x87\xba\x0e\x85\x0a\x84\x3d\x08\xbb\x10\x3a\x14\x82\xad\xb3\x9a\xce\x8d\x50\xe7\xa7\xe7\x73\x06\xd7\xa4\x88\xa4\x72\x3d\x2b\x8b\xc1\x0d\x4f\xe0\x05\x3f\x1c\xff\xf2\xea\xc9\x0f\x8f\xe5\x9d\x52\x42\x62\x64\x8a\xa0\xf3\x42\x42\x54\x58\xa4\x52\x13\x48\x57\x59\x2a\x56\xea\x24\xca\x7a\x41\x20\x54\xa7\xff\xea\xbb\xe7\x6f\xf8\x1a\xb1\x45\xae\x6a\xa3\x9f\x81\x4a\xe5\x7d\x1a\x06\x3e\x04\xfc\x2f\x2f\xba\xfa\xec\xa5\x94\xde\xa5\x77\x0f\x5e\x46\x28\xf1\xbc\x69\xff\x59\xfd\xae\x20\x41\x0c\x00\xa4\x03\x40\x3d\x8f\x0c\x40\x7c\x0d\x64\xf8\x34\xd0\x9f\x1a\x08\x84\x5d\x02\xc4\x40\x20\xea\x32\x69\x02\x89\x7b\xfd\x30\x10\xa2\x1d\x46\x86\x28\x92\x3e\x95\x21\x0a\xa6\x83\x98\x00\xd2\xbe\xb4\x86\x20\x59\x8f\xcc\x00\x20\xef\x77\x65\x08\xc2\x35\x90\x21\x85\xa2\xcb\xe5\xb0\x39\x75\xb5\xc6\x74\x54\x1f\x84\x8e\x10\xf0\xe9\x88\x55\x05\x7d\x22\x06\xbb\xa0\x6e\xbb\x89\xe8\xa8\x61\xc6\xd4\x65\x98\x94\x8e\xea\x3b\xa1\x23\xfa\x66\x7d\x26\x0c\x26\xd1\x27\x33\xe4\x24\xa3\xa3\x1a\xcf\xe9\x88\xd5\x70\xea\xb6\xee\xa2\x4f\xc3\xa0\x79\xab\xba\x54\x94\xc0\x66\x41\x12\xed\xa9\x45\x99\x7e\x07\xc4\x48\x3d\xe8\x62\x31\xf5\x31\xd4\x41\x8c\x36\xa1\xf3\x69\x78\x1e\x77\xd9\x70\xf8\x06\x76\x98\x7f\xd2\xe7\xd4\x1a\x28\xb0\x43\xa3\x69\xb7\x33\x06\xab\xe8\x74\xc6\x1a\x27\xb0\xc3\x7e\x79\x0f\xc4\x16\x2a\xb0\x39\x14\xd0\x51\x51\x60\x3a\x2a\x0a\x42\x47\x55\xef\x53\xb7\xda\x82\x1e\x0a\x5b\xac\x70\x89\x3b\xa2\x2e\x13\x8e\xe9\x88\x32\x28\x1d\x91\x64\x42\x47\x4d\x8b\x51\xb7\x42\xd3\xbe\xbc\x0d\x83\x47\x9f\xca\x10\x24\xa7\x2e\x95\x72\x3a\xe2\x42\x45\x5f\xa3\xfa\x1d\x55\xd3\xb1\x2c\x23\xf0\x3c\x1a\x78\xd8\x1a\x41\x14\x8c\x35\xcd\x68\x14\x68\x8b\x20\x35\x11\xcf\x44\x24\xe8\x12\x31\xc2\x84\x5d\x3c\x46\x66\xa2\x2e\x1e\x23\x4c\xdc\xc2\x18\xa8\xe8\xc1\xd6\xd8\x3c\xe9\x93\x30\x20\x61\xfd\xee\xd8\x13\x0e\x45\xc8\x80\x24\xeb\x08\xd6\x00\x90\xb7\x00\xd6\x00\x22\x59\x30\x34\x2e\xfa\x5a\xb1\xe6\x5d\x4e\x61\x62\x3a\xd2\x0b\x42\x5d\xd2\xf6\xfb\x24\x4c\xb6\x41\x7b\x7a\x37\xd9\x06\x1d\x17\x78\x44\x47\x0c\x35\xa6\xe3\x86\x4a\xe9\x88\x52\x12\xea\x50\x0a\xa3\x6e\x5f\x4a\xfb\x1c\xd8\x03\x89\xd3\x55\x72\x3a\x62\xc4\xbc\x2f\x53\x7b\x3c\xb1\x5a\x90\xfe\x02\x62\x78\x8a\x37\x70\x7b\x4c\x36\x70\x26\xec\x6f\xe0\xf8\x38\xd8\xc0\x9e\x71\xe8\x74\x7d\x1c\x8d\xb9\x24\x8e\x47\x82\xa1\x9e\x82\x9b\x31\x24\x63\xe1\x12\xb3\x31\xbf\xc7\xe9\x06\xd1\x12\x67\x63\x81\x0c\xe7\x1b\x04\x4b\xcc\x37\x08\x65\xb8\xe8\x6b\xc8\x68\x2e\x63\xa1\x02\xe3\x31\x0f\xc5\x64\x03\x07\xc1\xfe\x88\x97\xe1\x60\x93\xc0\x16\x6e\x10\x76\x70\xe4\x8c\x6e\x38\xde\x20\x2c\x61\xba\x81\x2f\xe2\x64\x03\xaf\xc7\x6c\x83\x68\x8a\xd3\xb1\x08\x86\x33\x57\x08\xc3\xf9\x58\x58\xe0\x1b\x84\x51\x5c\xf4\x22\xd4\x36\xa9\x0a\xf6\x02\x4b\x30\x32\xb3\x4c\x3a\x52\xc1\xd6\x14\x45\xe2\x36\x61\x0f\xb4\xe7\x9e\xe1\x79\xd8\x53\xce\x10\x22\xea\x08\xcd\x44\x23\xee\x40\x8c\x0f\xc7\xf6\xdc\xa4\xa5\x62\xcb\x4c\xea\x9e\xda\xb2\x92\x96\x8b\x21\x9f\x59\x4f\x9a\x43\x88\xbc\x23\x2d\x5b\x6a\x02\x18\x2c\x69\x89\x6a\x6b\x96\x80\xab\x7b\x98\x8e\xb1\x4f\xa8\xdd\x50\x7c\x3a\x66\x28\x01\x1d\x53\x74\x48\xdd\x9d\x8f\xa8\xdb\x94\x62\xed\xf9\xf0\x29\xa5\x76\xd1\x25\xd4\x25\x3a\x46\xc7\xcc\x2b\xa5\x6e\x27\xc8\xa8\xdb\x74\x72\x3a\x66\x18\x9c\x8e\x39\x41\x41\xc7\x4c\xbc\x93\x56\x58\x8c\x00\x8f\xb8\x2b\x26\x23\x16\x8a\xfd\xd1\x90\x81\x03\xa7\xa5\xe2\x70\xd4\xe1\x71\x34\x1a\x35\x70\xec\x8a\xc4\x74\xd4\x13\x71\x32\x1a\x32\x30\x73\x78\x23\x4e\x47\xc2\x05\xce\x46\xa3\x16\xd6\xc3\x81\x81\x04\x1f\x89\xbd\xb8\x18\x0d\x49\x2a\xb5\x70\x76\x13\x3b\xfd\x0a\x93\xf1\xd0\xe2\x3b\x22\x07\x0e\x46\xdc\x1a\x87\xa3\xb1\x05\x47\x4e\x07\xc6\xf1\x68\x6c\xc3\x74\x24\xf8\xe0\x64\xd4\x03\x31\x1b\x09\x03\x38\x1d\x8d\x81\x38\x1b\x0d\x05\x38\x1f\x8d\x47\x98\x3b\x82\x1d\x2e\xba\xd1\x68\x9b\xfc\x81\x7a\x92\xa4\x39\xb6\xd4\xd9\x27\xf6\x02\x4b\x2a\x51\x33\x6d\x78\xee\xb7\x18\x02\xb3\x21\x06\x76\x23\x0a\xbb\x12\x31\xe7\x10\x4d\x72\x6c\x22\x1f\x7b\x9d\xf4\xcf\x3e\x7e\xd6\x2b\x2a\xe6\x0c\xa2\xd5\xad\x39\x7f\x90\xcf\xcd\xb9\x43\x2b\x3e\xdb\x0a\x4a\x2b\x1e\x03\x8e\x5c\xf3\x52\x4b\xe6\x50\x9b\xb7\x39\x77\x68\x15\x6c\xe9\xbf\x53\xbf\x98\xda\xbb\x47\xe8\x18\xf3\x3e\x1d\x13\x40\x40\xdd\x2a\x0e\xe9\x58\x17\x22\x6a\xb5\x9f\x98\x8e\x19\x1f\xa5\x2e\xf9\x25\x5d\xe2\xb6\x24\xc2\x61\x1d\x29\x75\x69\x2f\xa3\x63\xd6\x97\x53\xb7\xfd\x72\xea\x76\xbf\x82\x8e\x79\x08\xf6\x46\x5c\x04\xe3\x11\x2f\xc4\x64\xd4\x0d\xb1\xef\x1a\x29\x9c\x16\x8e\xc3\x51\x17\xc1\x91\x37\xa6\x27\x1c\x8f\x46\x32\x4c\x47\xbd\x05\x27\xa3\xe1\x02\xb3\xd1\x80\x87\xd3\x91\x98\x89\xb3\xd1\xb8\x81\xf3\x91\xb0\x84\xb9\x23\x2e\xe1\xc2\x19\x36\x64\xf6\xe0\xee\x03\x1e\xf5\x4b\x4c\xec\x8e\x89\xfd\x11\xb7\xc7\xc1\x88\xe1\xe3\x70\xd4\x77\x70\x34\x1e\xdd\x62\x47\x78\xc3\x74\xdc\x79\x12\x67\xfc\xc0\x6c\x34\xfe\xe1\x74\x34\x88\xe2\xcc\x19\x44\x70\x3e\x1a\xa5\x30\x1f\x09\x53\xb8\xe8\xc6\x91\xed\x92\x07\x63\x4c\xa9\xf9\xb5\xad\x90\x34\xdc\x18\x53\x86\x7b\xda\x76\x0d\x63\xc6\xa0\x00\x60\x3e\xc5\x98\x37\x34\x39\x9f\xe1\x79\x54\x23\xb0\x01\xc4\x2d\x83\x86\xa7\xba\xce\x6d\x29\x43\xcb\x9f\x25\x67\x68\x7b\x68\xa0\x90\xb6\x0c\x9a\x59\xc8\x3a\x00\xa6\x81\xc3\xea\x7b\x5c\x57\x8e\x01\x75\xd1\x11\x8e\x79\xce\xc1\xd5\x1e\xd3\x11\xe1\x12\xea\xd9\x0c\xc7\xa7\x6e\xc3\x09\xa8\xcb\x70\x42\x3a\x62\x17\x11\x1d\x91\x5a\x4c\x47\x4c\x8f\xd2\x11\xd5\x26\xd4\x26\x77\x46\x47\x74\x9a\x52\xb7\xd5\x66\x74\xc4\x6a\x72\x3a\xa2\x39\x4e\xdd\x86\x5b\x50\x97\xd9\x63\xcf\xe9\xb6\x18\x7b\x56\xbd\x62\x32\xe6\xd3\xd8\x1f\xf3\x49\x1c\x8c\x78\x35\x0e\xc7\x9c\x02\x47\x63\x91\x03\xc7\x23\xbe\xdd\x8c\x7b\x56\x35\xe2\x64\xcc\x81\x30\x1b\x89\x8f\x38\x1d\x8b\x20\x38\x73\x46\x28\x9c\x8f\x45\x18\xcc\xed\x83\x73\x31\x12\x21\x20\x3f\x70\xeb\x0a\x8f\x58\x1a\x26\x23\x9e\x8e\xfd\x31\x67\xc6\xc1\x98\xb3\xe2\x70\x2c\x54\x45\xf6\x50\x84\xe3\xb1\x60\x81\xa9\xdb\x5d\x92\x31\x87\xc7\xcc\x1a\x2c\x70\x3a\xe6\xcb\x38\x1b\x09\x17\x38\x77\x06\x4b\xcc\xc7\x42\x19\x2e\x7a\x01\x67\x9b\xac\x40\xb1\x4d\x4d\x51\xa4\xc6\x69\xca\x0b\x64\x5b\x62\xee\xb3\xdf\x3e\x27\x26\xdc\x41\x2b\x11\x23\xfe\x50\xef\x8f\x29\x2b\x68\x9e\x0e\x71\xc7\x1d\x83\xb6\x8e\x8a\xc6\x6c\x40\x63\x6a\x88\x98\xd5\x64\x8d\x2c\xa7\xca\x40\x4d\x19\x80\x26\xab\xe1\xf3\x5c\x43\x3b\x7c\xca\x9b\xbe\x0e\x9f\x15\x1d\x29\x9b\x7a\xea\x54\x12\xa6\x6e\x25\x11\x6a\xe9\x91\x4f\x5d\xda\x09\xa8\xab\x3f\x21\x75\x5b\x5d\x44\xdd\x96\x11\x53\xbb\x3c\x28\x75\xd9\x45\x42\xed\xf6\xcc\xa8\x5b\xf5\x29\x75\xeb\x30\xa3\x16\x9b\xca\xa9\x5b\x45\x9c\xba\x6c\xaa\xa0\x6e\x53\xc6\xde\x88\x1f\x61\x3c\x62\x7c\x98\x8c\x78\x2a\xf6\x1d\x06\x88\x03\xa7\x9f\xe2\x70\xc4\x15\x71\xe4\x8d\xc4\xa0\xd8\xe9\x73\x4d\x06\x6b\xe1\x3d\xb1\x46\x6d\x66\xf3\x56\x9c\x8e\x84\x36\x9c\x39\xe2\x22\xce\x47\x62\x08\xe6\x23\x3e\x8b\x0b\x67\x70\x13\x23\xba\x85\x71\xec\x34\x25\x4c\x9c\x4e\x8b\xfd\x11\xbf\xc4\xc1\x88\x63\xe2\xd0\xe1\x99\x38\x1a\x89\x35\x38\x1e\x0d\x56\x23\x9e\x84\x93\x11\x1f\xc5\xcc\x11\x00\x70\xea\x8c\x5a\x38\x73\x86\x16\x9c\xdb\xfc\x1f\xf3\x31\x17\x2e\xba\xa1\x67\xfb\xa1\xdb\x60\x23\x35\xab\x81\x87\x0d\x43\xb7\x4a\x35\x0c\x83\xb6\x42\x6a\x6a\x16\x34\x49\x8e\xe9\x69\x68\xe9\x7e\x24\x51\x1a\xc6\xe8\x36\x65\x1a\x3e\xa5\x5a\x07\x4c\xc3\x74\xd3\xf7\x61\x53\xa6\x19\xf9\xf0\x69\xaa\x75\xc2\xf4\xaa\xae\xe5\x71\x86\x61\x5a\xca\x6d\x88\x95\xb7\x72\x33\xbd\xa4\x6b\x99\xef\xb0\xa7\x2e\x31\x60\x6a\x16\x2a\xa1\x2e\xfd\xfa\xd4\xd5\xc7\x80\x3a\x0c\x27\xa4\x2e\xe1\x45\xd4\xd5\x93\x98\xda\xc4\x43\xa9\xc3\xac\x12\xea\x52\x35\xa3\x2e\x8d\xa4\xd4\x61\x08\x19\xb5\x99\x79\x4e\x5d\x96\xcc\xa9\xd9\x62\x0b\xea\x50\x32\xf6\x9c\x5a\xc6\xd8\xe9\xae\xc4\xe9\xaf\xd8\x77\xfa\x0a\x0e\x5c\xee\x80\x43\xa7\x2b\xe1\xc8\xe9\x10\x38\x76\x45\x04\x35\xde\x18\x1f\x25\xce\x68\x81\x99\xcb\x63\x70\x6a\x09\x1a\x38\xb3\x05\xd9\xdc\xe9\xb9\x98\x3b\x83\x02\x2e\xac\x11\x11\x7b\x4e\xad\x63\xa7\x23\x62\xe2\xf6\x6e\xdf\x62\x69\x38\x70\x3a\x1a\x0e\x5d\x2e\x8c\x23\xab\x1f\xe2\xd8\x19\x19\x30\x75\x7a\x3f\x4e\x9c\xbe\x88\x99\x25\x58\xe1\xd4\xe9\x6e\x38\x73\x45\x07\x9c\x5b\xbd\x18\x73\x67\xe4\xc0\x85\x16\x1c\xb6\x19\x53\xa9\x18\xe0\x89\x01\x61\x23\x9c\x61\x3c\xbe\xd7\x2e\x6e\x0c\xc3\xb1\x6c\x37\x0c\xc4\x0a\x9f\xe1\x51\x28\xf1\x11\x23\x1f\x51\xf3\xd0\x14\x84\x15\x27\xe6\x71\x86\x7a\x66\xfe\x93\xa6\xdf\xa6\x10\x2c\xf9\x34\x3d\x4a\x1b\xa4\x06\x3e\xb3\x7b\xf2\xb0\xc7\x30\xfc\x9a\xed\x84\x37\x42\x34\xb4\x29\x14\x13\x86\x47\xf5\xa2\x92\xb5\xe7\xf2\x31\x76\xc9\x54\xc1\x10\x97\xfe\x15\x8c\xef\xd2\xb5\xfa\x3d\x70\x09\x5b\xc1\x84\x76\xb1\x2a\x88\x68\xb4\xcf\xb1\xc5\xb4\xd4\x63\xea\x92\xa8\x82\x49\x6c\x5a\x52\xcf\x99\xdd\x4a\x15\x44\xea\xb2\x47\x05\x93\x99\x55\xae\x9e\xe6\x2e\x33\x52\x30\xdc\x65\xa2\x0a\xa6\xb0\x7b\x68\x9d\x11\x1b\x1d\x1b\xbb\x7a\x80\x89\x45\xc8\xd8\xb7\x59\x1c\x0e\x5c\xcc\xe2\xd0\xa5\x16\x1c\xb9\x84\x81\x63\x47\x17\x6d\xf1\x37\xb1\xab\x10\x33\x97\xa5\xe2\xd4\x19\x0f\x33\x97\x47\xe1\xdc\x6e\xdf\x98\xdb\x8c\x0e\x17\xe3\xde\xd5\xbe\xdc\x58\x21\xb0\x3b\x16\x60\x32\x6e\x70\xd8\x1f\xf3\x3e\x1c\x38\xbd\x0f\x87\xe3\x41\xa0\x56\xb6\xb3\xbb\xf1\x78\x50\xc2\x74\x3c\xb8\xe1\x64\x3c\x1a\xd4\xe6\xe0\xf2\x32\x69\x14\xd6\xa7\xd9\x58\x58\x93\x86\xe1\xe0\x93\x8f\x45\x9c\xda\x48\x80\x8a\x36\xb2\xcb\x8f\x7a\x5d\x83\x67\x6c\xfd\x61\x8d\xaa\x19\xab\xd0\x9a\xcf\x79\x56\x41\x3d\xa2\x57\xdf\x3d\x7f\x83\xca\xc5\x59\x7d\x4d\x44\x53\xd1\xe0\xd9\xc3\x57\xbd\x8b\x8b\xdb\x83\x89\x53\xd4\x6e\xfc\x87\x0b\x14\xd5\x17\xf8\xac\xbe\x4c\xf5\x86\x9e\xfa\x55\x02\xc8\x2f\xf5\x67\xf1\x65\xaa\xf5\xa7\xcf\xb9\x56\x55\xe9\xfb\x47\xaf\x64\x61\x2c\x24\x0b\xbf\xb8\xef\xa8\x12\xd0\xcd\x05\x55\xf2\x8b\x56\x25\xe5\xba\x57\x54\xb9\x4b\xeb\x7d\xe0\x57\x4d\x09\xb0\x0f\xfc\xca\x50\xfa\xee\x03\xbf\xaa\xeb\xea\x7d\xe0\x57\xe6\xb2\x7a\x82\x86\x54\x51\x18\xa1\xb4\xac\xd6\x88\x65\xd9\x72\x95\x97\x8b\x13\x54\x2d\xd1\x8b\x23\x6c\xc4\xfb\x5d\x09\xa5\x80\xde\xf6\x6b\x20\x9b\xee\x0e\x09\x23\xfb\xdd\x21\x2d\xba\x17\x4b\x81\xf0\xc5\x11\x7e\x5b\xbe\x43\x7b\x08\x1b\x6a\x94\x2a\xba\xb2\x3c\xff\xa4\xee\xdd\xdb\xb6\xbd\x2a\xc7\x27\xfe\x33\xf1\x31\xda\xd3\x50\x43\x1d\xbe\x1d\x74\x7b\x80\xd8\x50\xb0\xf4\xe1\x7a\xcd\x4f\xd3\x39\x47\x38\x42\xeb\xf3\xf4\x03\xbf\x32\x88\x7f\x7d\x9e\xfe\xc8\xaf\xd6\x8d\x0a\xda\xef\x76\xa1\x2c\x5e\x01\x90\x14\x4d\xfd\xe5\x01\xc2\x51\xf3\xcd\x7e\xc5\xca\x11\x54\x9c\x52\xfc\x98\x05\xb9\xae\xb1\x2b\x5e\xde\x2a\xa4\xef\x14\x53\x46\xbc\xee\xab\x5b\xd2\xb2\x7a\x05\x55\x51\x0e\xb5\x22\x28\x0d\x5e\x1b\x4a\x69\x50\x01\x35\x1a\x14\x19\xb6\x31\x59\x0d\x09\xec\x56\xd3\xa5\x53\xac\x96\xa7\x10\x60\xe6\xbc\xa8\x10\xa1\xe0\x19\x82\xb2\xb9\xa1\x14\xce\xdb\x49\x89\x0e\xe4\xdd\x10\x1e\x14\x70\xac\x8d\x6b\x32\x79\x71\x44\x94\x0d\xee\xa0\xdd\x46\x02\x3b\xe8\x2f\x88\xd0\x77\x50\xe3\x11\x6c\xab\x44\x7f\x81\x3b\x2e\x36\x66\x6f\x55\x9e\xcc\x36\xe7\x2f\x80\xf2\x9d\x2d\x93\x3b\x1d\x2e\x09\x85\xc7\x92\x57\xb4\x8b\x48\x60\x61\x78\xc7\xc0\xf1\x80\xac\xa9\xb2\xbf\xe8\x40\xb9\xc8\x38\xe2\x2c\x9b\x29\xb3\x43\xe5\x1a\xb1\xb3\xb3\x79\xc9\x73\xa1\x4b\xb6\x40\xfc\xf2\x8c\x2d\x72\x9e\xd7\x75\x19\x21\xbc\x4f\x8d\xd8\x84\x08\x14\x9a\x8c\x2d\x50\xca\x51\xba\x5a\x7e\xe0\x0b\x54\x2e\xaa\x25\xa2\xb2\x28\xf0\x1a\xad\x33\x36\x97\xe8\x25\xca\xb5\x19\xdb\xc5\xac\xcc\x66\x88\xcd\xe7\xcb\x8b\x35\xa0\x16\x78\xab\xa5\x40\x7b\xbe\xe6\x39\xba\x28\xab\xd9\xf2\xbc\x92\x0c\xae\xcb\xe5\x62\x88\x45\x09\x1a\xca\x6b\x4e\xda\x2f\x0f\x1e\xa8\x6b\x65\xda\x9f\x44\x40\xf1\xb1\x49\x72\x1d\xcb\xc5\xd2\x72\x63\xb7\xe1\x2a\xb4\x10\xc4\xda\xcf\x10\xb3\x26\xa5\x54\xe2\x5d\x24\xb4\xef\x9b\x55\x65\xeb\x47\xac\xf7\x23\x7e\xa7\x0a\x7b\xfe\xa6\xff\x04\x97\x02\x0c\xae\xda\x31\x44\xc0\x23\x59\xf8\x12\x95\x8b\x8f\x7c\xb5\xe6\xf6\x28\x58\x2e\x3e\xbe\xea\x05\xc2\xce\x4f\x1b\x0d\x10\xd8\x31\x40\xb4\xd8\x74\x89\xad\xdf\xe2\x50\x18\x74\x1f\xfb\xa7\xce\x84\x43\xfb\x85\x2f\xb2\xd5\xd5\x59\xb5\xc5\x55\x80\xaa\x62\xed\xf2\xa8\x69\xd7\x02\x4f\xbb\x21\xdf\x5a\x42\x37\xe7\x5f\x82\x6a\x2b\x11\x57\xed\xde\x23\x37\xe5\x69\x2d\x48\x53\xd2\xf1\x1f\xbc\xd2\xf3\xb4\x2e\x73\x73\x40\xaa\x5d\x8d\xd5\xd7\x81\x04\x5b\xf5\xc1\xe0\xe6\x2c\x43\xf6\xf1\xc3\xa2\xac\x4a\x36\xd7\x4b\x5f\x75\x61\xf8\x65\x36\x63\x8b\x13\xfe\xf4\x65\x5b\x16\x55\x56\x1e\xf3\x2e\xbd\x42\xfe\xaf\x6f\xd2\xe6\x36\xf2\x7e\x6a\x78\x63\x2d\x0a\x6b\x9b\x97\x4f\xf5\x36\x04\xe8\xf8\xea\x6f\xb3\x36\x54\xf2\xe6\x15\x85\xf8\xff\x86\xbc\x41\x9b\x50\xfd\x19\x2b\xd3\xba\xae\x6a\x93\xe5\xc3\xc0\xa3\xe4\x47\xe9\x55\xf0\x79\xfc\xda\x36\xc3\x48\x64\xcc\x27\x00\x9d\xed\xda\x8b\xc6\x30\x74\x3b\xb1\xc0\xae\xba\xb0\x2b\x05\x6b\x64\xf2\x31\x2f\xd7\x15\x9f\x37\x56\x6c\xc6\x58\x40\xe7\x37\x4b\x2d\xa8\x3b\x40\x17\x62\xa0\x95\xa5\xd6\xde\x96\xef\xde\x4e\x26\x8a\xdb\xf7\x6d\xb8\x16\x89\x64\xf3\xea\x02\xdf\xa1\xac\xb6\x49\x34\x86\x80\xdd\x73\xa4\x95\x4d\x52\x3d\x4f\x9a\xd7\x6c\x14\xe3\x01\xfc\xe7\x45\xbe\x44\xeb\x0b\x76\x26\xd3\x8f\x39\x5b\x57\xd2\x18\x86\x21\xbc\x72\xab\xac\xc7\x6c\x57\x61\x2e\xc7\xaf\x0c\x36\x0c\x15\xc5\xb7\x75\xf5\x81\x6b\xdc\x98\x0b\x5e\xc7\xd5\xaf\x13\x52\x46\x42\x97\xe1\x8d\xac\x42\xcb\xf3\x6a\x10\x81\x9b\x90\xeb\x56\x59\x27\xe4\xda\x75\xd6\x19\x32\x3e\xf0\x2b\x59\x02\x3a\x0a\x0e\x7c\xa2\x3f\x29\x3f\x5a\x1e\x68\x75\xa3\x23\x63\xd5\xe8\x03\xf4\x4a\x58\xa0\x7a\x09\x58\x2d\xd7\xeb\x36\x4d\x87\x9a\x87\x90\x10\xc3\x6b\xa9\x6c\xd1\x0c\x54\xad\xe0\x26\xf5\x78\x75\xca\xd6\x1f\x3a\x2e\x5b\xdb\xee\x64\xd2\x31\x51\xe1\x88\xf5\xe8\xfa\xbe\xd3\x75\xe1\xb4\x02\x8b\x26\x82\x8e\xc9\xbe\x07\x9b\xfd\xc6\x68\xf8\xe2\x99\xc8\xa8\x24\x66\x05\x55\xfb\xdd\x80\xed\x97\x4f\x37\x67\x7b\x65\x67\x7b\xee\x66\x7b\xee\x60\x7b\xb5\x01\xdb\xce\x22\xd2\xeb\xba\x8a\xb4\x9c\xfe\xd8\xac\x8e\xf4\x58\x11\x66\x89\xab\xe2\x97\x95\x5e\x8a\xf9\xfb\x47\xaf\xf6\x55\x82\xd6\xa9\xc5\x3c\x45\x59\x71\x62\x28\xae\x7d\x36\x67\x82\x89\xcb\x0a\xf5\xb1\xa8\x84\x6b\xd2\xd2\x31\x21\x6a\x2a\x3b\x0f\x27\x6a\xba\x45\xb7\xbf\x7f\xf4\xca\x58\x71\xfb\x78\x55\x9e\xcd\xf9\xde\x76\x53\x44\xb2\x51\x67\xa2\x48\xff\xe9\x8f\x33\x5d\xa4\x26\x22\x04\xdb\x25\x54\x28\xcd\xfa\xd7\x03\xa9\x2c\x96\xaf\x31\x3a\x14\x70\xfb\x52\xaa\x8f\xa4\x8e\x97\xab\x49\x7b\xcf\xba\xba\x38\xbe\x26\xbd\xbf\x9e\x97\x19\x9f\x78\x53\x44\x76\x06\x77\x61\x34\x68\xc9\x35\xd1\x92\x29\x0a\x1c\x68\xfd\x6b\xa2\x0d\xa6\x28\xda\xb1\x5f\xa4\x71\xed\x77\x0f\xbe\xc6\xfb\x7a\x63\xad\x85\x55\x32\xfb\xfa\x3b\xc7\x06\x0d\xfc\x0d\x28\xdc\xcc\x3b\x8d\xa0\xb5\x25\x73\x64\xdb\xee\xe3\x0d\x28\x98\x47\x3d\x9c\x90\x1b\x1b\xf6\xfe\x49\xc2\x6a\x13\x5d\x6e\x20\xb8\xb6\xb8\xb6\x0c\xb1\xb6\x10\xd7\x0d\xb4\x0d\x94\xb3\x7e\x7e\x03\xd5\x2b\xa1\xaf\x15\x66\xbf\x17\x92\x69\xaf\xaa\xbe\x56\xdc\xfd\x5e\x18\x4c\xdb\xaa\xee\xf7\xc2\x68\xaa\x8a\xbd\xdf\x8b\xf0\xa7\x77\x53\x1a\x7c\x56\xc1\xfd\xdf\xb3\xd2\xfe\x17\xab\x87\xff\xdf\x53\xd9\x1e\x6e\x2a\x28\x17\x3c\xbf\xd9\x12\xf7\xdf\xb1\x35\x6f\xab\xd6\xb3\x35\xd7\x9e\xbd\xf1\x89\xb3\x02\xfe\xd0\x97\x2f\xa3\x00\x2d\xd8\x29\x5f\x9f\xe9\x5e\x7a\xa0\xb3\x21\x40\x04\x1b\xf2\xbf\x7f\xff\x64\x42\xf3\x10\x45\x41\x73\x85\x8d\x09\xcd\x9b\x28\x10\x7c\x00\x53\x97\x51\xb0\xaf\xbe\x08\xfe\x0d\x99\x41\x8b\x5a\xa2\x57\xd3\x29\xe5\xdf\xf8\x1a\x31\xb4\xe0\x17\xf3\x2b\x24\x7d\x2d\x37\x11\xd6\x03\x0a\xea\xdc\xe6\xb1\x38\x3f\x4d\xf9\xea\x13\x82\x5b\xa5\xe0\x56\x15\xf1\xc1\x27\x90\xce\xef\x3b\x9b\xcc\x97\x17\xd0\x42\xfc\xd7\xd4\xa0\xdb\xb8\x1b\xdd\x86\x00\xb5\x5c\x2e\x5b\xb9\xd4\x11\xa1\x16\x4f\x3d\x30\xcb\xd5\x3f\x8f\x78\x3e\xbc\x95\x05\x5e\xe8\x45\x5e\x77\xbe\xb3\x96\x34\x84\xf8\x45\xd9\xc9\xa8\x44\x0f\xa7\x82\x6b\xf3\x18\xa6\xee\xd7\x32\xdc\xea\x09\x8f\x45\x6f\x0f\x51\xf7\xf6\x6d\xfd\xcd\xbc\xaf\xa9\xef\xca\xea\xa2\x5c\x73\xf4\xd3\xf3\xe3\x35\x60\x18\x53\x4c\x7d\x51\x8a\x32\x90\x4f\xe8\xa1\xd0\xaf\x90\xcb\x1e\x08\x46\x8d\x24\xac\xa8\xf8\x0a\x2d\xf8\x09\xab\xca\xc5\xc9\x0d\x08\x1e\x50\x71\x21\x78\xa5\x82\xfd\xc5\xb2\x9a\x58\xa5\x7a\x70\x80\x16\xcb\xd1\x4c\x15\xee\x64\x91\x02\xfd\x47\x23\xdd\xfb\x46\x30\x29\xd8\x7f\xd4\x42\x36\xa4\xa4\x4a\x32\x4a\x30\xb5\x35\xb4\xea\xbc\xdf\xe1\xae\x93\x01\xd8\xb4\xf2\xf0\xa7\xef\x35\xad\xc0\x72\x02\x8c\xdb\x67\x6c\x0d\xcb\x0b\x1b\xf9\x50\xa3\x29\xc0\x21\x5c\xa2\x51\x56\xb5\x14\x24\x6a\xbc\x37\xac\xfc\x87\x3f\x7d\x7f\x33\xaa\x97\x6b\x3b\xad\xe2\xd9\x22\x9f\xb0\xc5\xb2\x9a\xf1\x95\x62\xc4\x65\x06\x6c\x91\xeb\x66\x20\x7a\x38\x62\x0a\xad\x9f\xdd\x96\x02\x19\xb3\x8a\xc6\xf3\x14\xfc\xef\x66\x1f\xcf\x5f\x7e\x69\xf3\x78\xfe\xf2\x0b\x59\xc7\xf3\x97\x37\x63\x1c\xcb\x55\xc7\x36\x96\xab\x2d\x4c\x63\xb9\xba\xb6\x65\xfc\xb6\xa5\x65\xfc\xf6\x3b\x5b\xc6\x9b\x2f\x6f\x1a\x6f\xbe\x98\x6d\xbc\xb9\x29\xe3\xb8\xec\x59\xc7\xe5\x56\xe6\x71\xf9\x19\xf6\xf1\x7e\x4b\xfb\x78\xff\x3b\xd9\x07\x2c\xca\xeb\x96\xb1\x90\x33\xa3\xea\x85\x70\xce\x8b\x6a\xf3\xac\x6c\x01\x36\x21\xbf\xa1\x65\xd1\x60\x82\x2b\x6c\x6e\xca\x18\x00\xd9\xcd\x98\x03\xa0\xea\x18\x04\xfc\xf2\x74\x42\x42\x97\x1d\x48\x20\xdd\x14\x16\x26\x3b\x10\xaf\x40\x0b\xf4\x00\xf9\xc4\xb6\xd2\xa5\x59\xca\xa4\x35\x95\x07\x0f\xd0\x02\x96\xc8\x1b\x63\x90\x5b\x87\x08\xda\x43\x0b\xe3\x65\xf5\x66\x13\x12\x78\x86\xb6\xf6\x09\xd5\x2f\x4f\x6e\x86\x74\x34\x93\x05\xda\x33\xdc\x18\x3a\x20\xdd\x5f\xea\x12\xe4\xfe\x3b\xad\x17\xa6\xf2\xff\xed\xcc\xf7\xe5\xc4\xfe\x72\x51\x5b\xef\xcb\x1b\xb2\x5e\xa9\xf7\xae\xa5\x6a\xc6\x5b\xdb\xf3\x06\xc6\x3b\x88\x98\x80\xea\x1a\xf6\xab\x79\x41\x83\x67\xdc\x80\x15\xf9\xdf\xdd\x82\x5f\x2e\x2b\x56\xf1\x2f\x1d\x80\x57\x40\xe5\xa6\x4c\x18\xb0\xdd\x8c\x09\x4b\xc6\x74\x13\x5e\x2d\x47\xe3\xaf\x00\x19\xb5\x5f\xd5\x23\xb0\x03\x15\xd5\x17\x3b\x22\x1d\x6c\x7f\x79\x39\x89\x82\x81\x59\x7e\xae\xc2\x6e\x28\xe6\xfc\xb1\x34\x36\x12\x72\x04\xc4\xf6\x0a\x7b\x39\x50\xd8\xd3\xeb\x28\xec\x61\x9e\x7f\xe9\xcc\x97\xe5\xf9\x17\xca\x7c\xe5\x95\xdf\x37\xf1\xce\x9c\xf7\xde\x99\xf3\xad\xde\x99\xf3\x8d\xdf\x99\xfb\x23\xc2\x6e\x93\xc8\xc2\x86\x51\x73\xf2\x9b\xb1\xd5\xea\x4a\x34\xab\xc7\x10\x79\x31\x7c\x67\x58\x69\xaf\x87\x37\xe3\x18\x26\x52\xbb\x6d\xce\x8d\x76\x25\x0d\xc5\xc3\xe7\x46\x74\xf9\xcd\xbc\xba\xf2\x70\xa1\xae\x00\x5f\x16\xfa\xdc\xe6\xda\x74\xc3\xf1\x6a\x79\xc6\x57\xd5\x15\xfa\xbb\xba\x62\x18\x00\xc1\xbc\x1a\x14\x83\x69\x45\x65\x20\xeb\x7d\x13\x9e\x3a\xac\x34\x77\xa2\x77\xa3\xcb\xba\x3c\x59\x94\x45\x99\xb1\x45\x85\x52\x78\x5e\x2e\x34\xdf\x00\xa2\x8e\xd9\xdf\x76\x5e\xba\x66\xa6\xfe\xe5\x06\xe6\x81\x87\x1c\xd8\xdd\xb1\x23\xae\xc9\xf3\x33\x61\x96\x6c\xbe\xd3\x91\xfd\xa8\xe0\x90\x31\x20\x37\x92\xd3\xd0\x6e\x24\x44\xde\x55\xf3\x67\xf8\xea\x85\x2e\xea\x7e\x2f\x3a\x6b\xbe\x5d\x9f\xfd\x4c\x64\x6f\x07\xed\xc5\xdf\xb6\xd3\xda\xd3\x6d\xb1\x60\x8a\x13\xcc\x70\x0a\x67\x6a\x32\x9c\x63\x8e\x8b\x9d\x01\x92\x77\xff\x46\x5d\x9d\x22\xec\x6d\xbc\x3c\x00\x46\x37\x6d\xcc\x76\x10\x96\x2f\xd4\xe6\x09\x08\x8b\xf5\x17\xf9\xdf\xdf\x7e\x33\x1c\xc0\x10\x79\x7f\xe3\x03\x7f\x3a\x44\xc3\x55\x30\xfd\x4f\x8e\xcd\x35\xf8\x61\xc3\x46\x7f\x2f\xa0\x35\x69\xef\x23\x90\x3e\x34\xe7\x8b\x93\x6a\x86\xee\x22\xba\xe1\x56\xea\x7e\xa0\x39\x5a\x2e\x3e\xf2\x55\xfd\x6a\xa8\x85\x61\x15\x1f\xc4\xa0\x5d\x9f\x0e\xd8\x28\xf0\xd4\xa3\x76\xa3\xdd\xce\xca\xdc\x27\x74\xdc\x0d\xa2\x77\xd6\x28\x67\x15\x43\x6c\xbd\x25\x9d\x8d\x67\xb2\xba\x2b\x85\x97\x5a\x80\xde\xaf\x96\x6f\x7c\x62\x5f\x0a\x81\xc7\x9f\xb1\x67\x47\xd1\xea\x1a\x95\x61\xe7\x4e\x0d\xf7\x54\x2a\xb3\x61\xb2\x56\xaf\x69\x17\x8f\x54\x9b\x01\x97\xec\xee\xc6\x9b\xf7\xbb\xb4\xdd\x27\xbd\xda\x25\xbc\xba\xd5\xdb\xc1\x16\x7e\xf1\x57\xf3\xb0\x7f\x76\xbe\x9e\x4d\xea\x44\x4a\xe4\x08\xa6\xf7\x4a\x33\x74\x2f\x97\x40\x86\x7d\xb2\x75\x2a\xa2\x29\xb8\x8e\x20\x35\xce\x69\xd7\x6d\xac\x1b\x49\x06\x5e\x01\x68\x84\x49\x66\xcb\x33\x18\x24\x2d\x63\x3f\x1a\x4d\x5b\x1b\xb3\xe7\x28\x9b\x2f\x17\xae\x37\x95\x4d\x4d\x1a\xf0\xf4\x6d\x19\x7e\xb4\xdb\x32\x3c\x76\xda\xb2\x8e\x19\xb2\x14\xc9\x6e\xb3\xf3\xd5\xb4\xd3\xf5\x08\xe0\xff\x0c\x86\xfd\x67\x29\x99\x21\xd2\x3a\x96\x4a\x7c\xc3\x30\x5b\xef\x1a\xb3\x13\x80\x33\x4c\xf5\xc2\xba\x4c\x4e\x2c\x64\x1a\x17\xba\xe8\xf8\xcf\xa8\x1b\x5c\x6c\xe2\x03\x17\xca\xe4\x6b\xf4\x6f\xcb\x77\x26\xb1\xdb\x4d\x15\x80\x3b\xeb\xcb\x4d\x7a\x6c\xdd\x37\xd3\xdb\x2d\xa3\xb6\xc6\x7c\x7a\x37\xa5\xe1\x26\xfb\x5d\x0e\xee\xfe\x09\xcd\xaa\xea\x6c\x7d\xef\xe0\xe0\xb4\x9a\xad\xf7\x53\x7e\x70\x5e\x15\xf4\xd7\x35\xfa\x48\xf6\xf1\x3e\x41\xe9\x15\xfa\x1f\xa7\xac\x9a\x95\x6c\x2d\x2c\xa6\xdd\x20\x03\xbb\x42\xe4\x66\x8f\x83\x03\xf4\x3d\xaf\xe4\x71\x38\xce\x85\xb8\x4b\x96\xce\xf9\x1a\xfd\x55\x51\xfa\xeb\xad\x6f\x60\x1b\xff\x8a\xf3\x47\xcd\xfe\x97\xc1\x4e\x1a\x74\x47\x2a\xef\x0e\xba\x7d\xbb\xfe\xf9\xbe\x1d\x3d\xfa\xab\xec\x8e\x86\xfc\x19\xfc\xd0\xe2\x3e\x55\xdf\xbb\xa8\xd5\xaf\xb7\x6f\x1b\xf6\xe7\x1c\x76\x98\x6c\x80\x9d\x6c\x9c\xc0\xce\x99\xbf\x4e\xe5\x6e\xfc\x9f\x96\x39\xdf\xff\x75\x8d\x96\x2b\xf4\x9d\xdc\x4a\x53\x16\x25\xcf\x51\xb6\xcc\xf9\x14\xb0\xb0\x45\x8e\xce\xd7\x1c\x95\x95\x18\xd7\xfe\x2a\xe4\xa8\xf5\x41\xed\xc3\x69\xfa\x70\xa2\xbe\x77\xfb\x20\x7f\xbd\x2f\xf7\x24\xb5\xcd\xf6\x1b\xe8\x43\x1d\xd9\x6f\xbf\x69\xdf\xf6\x2f\xca\x45\x2e\xde\x2e\x3b\x30\x72\xeb\x90\xe0\x05\xe9\x3f\xc3\x66\x9f\x5b\xdf\x1c\xdc\xdd\xbb\xb1\xbf\xbb\x07\xb7\x64\x6f\xd7\xd5\xaa\x5c\x9c\x3c\x5e\x2d\x4f\x8f\x66\x6c\x75\xb4\xcc\x85\xe6\x5e\xc1\x8f\xfb\x85\xf6\xab\x12\xfe\x31\xfb\xc0\x17\x52\xc6\x7d\x93\x3d\x3b\x5f\x5c\x09\xf9\xde\xfa\xa6\x89\x60\xe7\xd9\x9a\xe4\x5c\xfc\x38\x91\x74\x64\x07\x61\x69\x13\x36\xdf\xd7\x43\x20\xfc\x94\x2d\xcf\x17\x15\x5f\xa9\x99\x4b\xf8\x69\x5e\xc7\x0a\xd9\xbc\x0d\x16\xf0\x14\xce\x33\xd6\x5f\xf8\x65\xb5\x62\xe2\xcb\xc5\xac\x9c\x73\x34\xa9\xb1\x3d\x50\x48\x24\xe9\x6f\xa0\x4d\x8b\x30\x53\xdd\x7b\x58\xd5\x0d\x76\x77\x85\xab\x7f\x03\x3a\x95\xc0\xdf\x1e\x22\xef\xf2\x7b\xea\x79\x42\xe7\xf2\xa7\x07\xf0\xd3\x77\x8f\x1f\x8b\x9f\x2c\x94\x84\xb8\xe0\x75\x7d\x7d\xbe\x5a\x2d\x4f\x58\xc5\xa7\x60\x75\xd5\x8c\xaf\x38\x9c\xf3\x44\x0b\x7e\x59\x21\xc1\x02\xcb\x2a\xbe\x82\x46\xd0\x8d\x4d\xf8\x03\x06\x27\x12\xfc\x36\xf2\x2e\x1f\x1f\x79\xde\x8e\xb0\x50\xef\xf2\x7b\xf8\xf8\x77\x11\x9c\xe7\xcb\x8b\x96\x3e\x34\xfb\x46\x4a\x5e\x0e\xe5\x13\xd5\x45\x81\xc0\x7f\xfc\x78\x07\x8e\x66\x7a\x3b\x68\x17\x69\x98\xe1\xc1\x6e\x5d\x71\x48\x51\x6f\xb3\x60\xd5\xd5\xf3\xc5\x29\xab\xb2\x19\xcf\x5b\x7a\xf7\xd1\x72\x31\xbf\x42\xec\xec\x8c\x43\xbf\xcb\x35\x38\x20\x3a\x5f\x94\xd5\x54\xbc\x68\x66\x6c\xcd\xe1\x6d\x53\x08\xa2\xc1\xd4\xc0\x08\x21\x55\xf5\xbe\xa8\x06\xab\x18\xea\x99\xf6\xf5\x8c\x95\xab\x61\xcf\xa0\x5f\x8a\xd7\x6f\x94\xe8\xf6\xf6\x14\xef\xb7\xfa\x1d\xb0\xb4\x14\x80\xe2\xff\x2a\xde\x4b\xa8\xda\x1b\xaf\xe3\x0c\x7c\x01\xce\x00\xa3\x70\xeb\x0b\x8d\x95\xcb\xbc\xa5\x6b\xe4\xe5\x22\xe7\x97\xe8\x10\xed\x61\xa3\xd9\x37\x7e\x74\xe7\x8e\x66\xfc\xbb\xbb\xb2\x99\xc5\xf8\x81\xce\x5b\x00\x79\xd7\x37\x76\x61\x4a\x8f\x85\xc6\xa5\x64\xe4\xaf\x7b\x87\xb5\xfa\xef\x6b\xf2\x42\xbb\x87\x86\xf8\x51\x23\xfa\xf6\x5b\x84\xbd\xda\x80\xd0\x6f\xca\x87\x94\x4a\x6a\x4e\xa4\xb1\xa2\xdf\x50\xc7\x0e\x1b\xe1\x6f\x40\x08\x10\xda\x94\xd4\x08\x3f\x9b\xf1\xec\xc3\xab\x8c\xcd\xd9\xea\x7f\x89\x56\x13\xa1\x87\x17\xcb\x72\x21\x77\x53\x83\x00\x9a\x9f\xba\x1e\xdf\xfe\x2c\xbd\xbe\x15\x4e\x35\x5b\x2d\x2f\xd0\xa3\xd5\x6a\xb9\x9a\x40\xaf\xee\x3c\x15\xa9\x50\x6b\x9a\x3f\xef\xde\x41\xbb\x2d\x82\xfd\x6a\x29\x23\xeb\x04\x47\x3b\xfb\xd5\xf2\xe7\xb3\x33\xbe\x3a\x62\x6b\x3e\xd9\x41\xbb\x12\x81\x30\xf9\xc5\xb2\x12\x06\x0e\xcc\x4a\xb9\xdc\x11\x0f\xeb\x8e\x7e\xfa\x02\x23\x41\x2b\x27\xc8\xaa\x45\x26\xde\x8a\x63\x2a\x97\xd9\xd4\xe0\x24\xa5\x6c\xd0\xc6\x44\x17\xe0\xb7\x75\x1b\xa9\x51\x98\xaa\xbc\xa4\xde\x4e\x5f\x2f\xd2\x21\x8e\xea\x86\x26\xb5\x68\x68\x6f\x2b\xe3\x7c\xfc\x98\xaa\x58\xa7\xc2\x1c\xde\x4b\xaf\x2a\x8e\xd6\xfc\xbf\xce\xf9\x22\x83\x40\x67\x67\xb4\xa5\x51\x9b\x0e\x0c\x84\x57\xa7\xe9\x72\xde\x38\x92\x8d\x32\xf5\xba\x94\xc9\x90\x72\x83\x69\x5c\x48\x91\x14\x10\x56\x02\x3a\xf2\x1a\x96\x9a\x8d\xc7\x06\x26\x20\x0c\xeb\x4c\xf8\x43\x26\x1c\x06\x7f\x7f\x4b\x26\x31\x91\x5c\x7a\x8a\xcb\x47\x5e\x07\xc5\xee\xa1\xc5\x6a\xa2\x0d\x3a\xf3\xc8\x1b\x74\x26\xf8\x2c\x89\x62\xaa\x98\x8d\x25\xb3\x8f\x37\x64\x16\x93\x6d\x3b\xd5\x42\x9a\xb8\xea\x76\xb4\xeb\x01\x8d\x6d\x02\x86\xbe\x4b\x88\xd4\x5f\x8d\x13\xfd\xa4\xa9\x41\x2a\x52\xf7\x61\x72\x35\xc8\x9a\x5a\xf8\xd1\x41\xa5\x01\xad\x7f\x10\x4a\x90\xd1\x6a\xc3\xc1\xa5\xed\xb1\x4e\x58\x1f\x65\x34\x94\xbb\x87\x0e\xd7\xef\x45\xf4\xb6\xd9\x97\x4a\x84\x1b\xd9\xaf\x38\xcb\x8f\x96\x8b\xaa\x5c\x9c\xc3\xe1\x59\xd0\x7e\x1b\x8a\x04\x27\x3f\x40\xdf\xbf\x3d\x04\xb6\x8e\x44\x62\x61\x18\x0d\xee\xfc\xb0\xf8\xc8\xe6\x65\x0e\x40\x52\xda\x77\x54\xb7\x1a\x79\x77\xa9\x20\x89\x10\x26\x0a\xde\x36\x74\xde\x29\x37\x11\x4d\x9b\x1f\x77\x77\x45\x32\x5e\x47\xa8\x1e\x9a\xdb\x32\x8c\xc8\x44\x50\x44\xc9\xbf\x6b\xc1\xd0\x08\xed\x3f\x6e\x18\x3b\x38\x40\x3f\x14\xe8\x82\x23\x91\xaf\x9d\x9f\x21\x91\xa9\x4e\x51\x59\xfd\xdf\xff\xfd\x7f\xea\x61\x49\x47\x01\x1c\xdf\xb2\xf4\x7c\x00\x78\x67\x10\xfc\xa5\xf5\xbe\x02\x2f\x98\xb4\x56\x2e\x80\xb1\x6e\x86\x44\xff\xe2\xeb\x5f\x02\x83\xf9\x0e\x75\xf5\x19\xaa\xea\x62\x3a\x1c\x6a\x5d\x49\xb6\x60\x73\x38\xfc\xd0\xc8\xf1\x25\x67\x39\x2a\xca\xd5\xba\xaa\xa5\x04\xdd\xda\x5e\xcd\xc3\xd1\x0d\x4d\x16\xcb\xa1\x78\xd7\x3b\xb5\x4d\x48\x42\xb7\x95\xfe\x55\x64\xd5\x78\x6d\xe4\x5b\xf3\x3a\x1c\xc3\x7a\x78\x1e\xd5\x06\x75\x54\xa3\x02\xb5\xa0\x43\x8b\xc3\xdc\xef\xc7\x03\x1d\x19\x96\xaf\x19\x50\x73\xa7\xd1\xae\x29\x01\x6b\xac\xb7\x35\x5f\x2d\x46\x75\x13\xf8\x2d\x4c\xb0\x4e\xeb\x65\xdf\xfd\xbe\x6c\x4f\xd9\x15\x2a\x17\xd9\xfc\x1c\x5e\x42\xc4\xcb\x85\xfe\x4a\x63\x92\xf2\xe3\x5a\x3a\x8f\xb6\x90\x0e\x98\xf2\xf5\x04\xe8\xa9\xf7\x34\x02\x7b\x93\x24\x2d\x5d\xa0\xbe\x4d\xa0\x1e\x24\x2f\x52\x60\x63\xf9\xc1\x97\x94\xf9\x70\x84\xef\x4b\x94\x2a\x89\x3e\xbe\x59\x89\x42\xc8\xb8\xa6\xd0\x63\x10\xba\x77\xd9\x17\xbb\x77\xe9\x1d\xed\xa0\xdf\x40\x22\x13\xc9\x83\xfc\xb5\xd1\x47\x60\xd5\x07\xbc\x51\x19\xde\x31\xb0\xa7\xbf\x82\x99\x35\x51\xcb\xd3\xa8\x85\x9f\x8f\x1f\xef\x51\x94\xc3\x4c\x19\xcf\x9b\xc8\x5b\x87\x4d\x75\x02\xab\xf9\x0e\x01\x4d\xfb\x0e\xf1\xe7\x7e\x2f\x27\x51\xb9\x46\x3b\x1a\x4b\xfe\x1a\x7c\xdd\x94\x44\x03\xab\xa3\x1a\x50\xd1\x03\xa0\x96\x94\x68\x31\xb6\x9d\xfd\xe9\xa4\x3b\xed\x3c\x51\x75\x7a\xa6\x65\x23\x93\xea\xf4\x0c\x1d\xf6\xc6\x92\x1d\xf4\xa7\xc3\x43\x19\x94\xfb\xd9\x89\x5a\xc4\xa8\x4e\xcf\xfa\x79\x86\xf6\x82\xde\x42\xef\x7c\xc9\xc9\x37\x21\x56\x74\x08\x0c\xde\xf9\xc8\x57\xeb\x72\xb9\xb8\x73\x0f\xdd\x81\x49\xdf\x3b\x53\xf1\xab\xe4\xe7\xce\x3d\x2d\x2b\x84\xdf\x65\x77\xd5\xef\xf2\xcb\xad\x6f\x3e\xa9\x49\xba\x57\xcb\x53\x8e\x1e\x3e\xfb\x1e\xa5\xe7\xe5\x3c\x47\xcb\xb3\xaa\x3c\x2d\xff\xc6\x57\xeb\x29\x9a\x97\x1f\x38\x5a\xed\xff\xba\x9e\xca\x57\x62\x98\x69\x5f\x9f\xf1\xac\x2c\xca\x4c\x38\x6f\x5e\x82\xc2\xcf\x58\x55\xf1\xd5\x62\x0d\xf8\xa0\x51\x35\xe3\xa8\x58\xce\xe7\xcb\x8b\x72\x71\x72\x4f\xce\x79\x0a\xf3\xeb\x9d\x8b\x44\x77\x6a\xa3\xb9\x23\x27\x77\x3b\x00\xfb\xec\x34\xef\xcd\xa2\x36\x47\x24\xc5\xb3\x5b\xdf\x48\x75\xa9\x43\x93\xcd\x34\x77\x77\x00\x13\x7d\x06\xdd\x81\x72\xda\xb7\x8b\xde\xac\xf1\x9f\xb4\xef\xfb\x8b\x65\xce\x8f\xaf\xce\x78\x9b\xcc\xb5\x73\xd5\xea\xc5\xa3\x5c\xe8\xf3\xc6\x2f\xcb\xc5\xc9\xf2\x7f\xbe\x42\x1f\xbd\x7d\xba\xef\xc1\xeb\x79\xdb\x42\x3b\x4b\xda\x30\xa3\x42\x63\x8d\x89\xad\x2e\x66\x6c\xde\xc3\x14\xef\x7b\x7b\x72\x22\x66\x55\xef\x8d\x92\xa7\x18\xd5\x6f\x33\xb6\x7e\x7e\xb1\x78\x51\x6f\x81\x39\x54\x40\xfb\xdd\xdf\x01\xbc\x59\x22\x81\xaa\x71\x52\x28\x75\xc4\xe8\x82\xcb\xf5\x21\xf1\x1c\x0e\x12\xef\x08\xd9\xe8\xb2\x7a\xfb\x41\x16\x30\x14\x10\xf0\xb9\x33\xf9\xd5\xeb\xd7\xcb\x59\xb9\x58\x8a\x5e\x31\x74\xc1\x53\xa4\x0e\xaa\xaa\x59\xeb\x7d\x65\xd0\x4a\x26\x9f\x6e\xa9\x23\xaa\xb0\x6c\xf2\x69\xfa\xf7\x4f\xef\xa6\x34\xda\x64\x49\x64\x70\x62\xf7\xcd\xb3\xa7\x4f\xaa\xea\xec\xa5\x18\x32\xd6\x55\x83\xed\xcf\x69\x79\x22\x37\xb3\xec\xff\xba\xfe\xf3\x26\x98\xef\x9c\xaf\x39\xbc\xb0\x65\xd5\x9d\xfb\xb7\x86\x84\xbe\x2b\x4f\x7e\x02\x84\xf7\x45\x87\x7f\x5d\xcf\x44\x50\x2e\x4f\x16\xcb\x15\xbf\x37\x2f\x17\xfc\x56\x43\xfa\x82\xa7\xfe\x46\x24\x85\x92\x5e\xf3\x54\x8e\x4d\xf2\x98\xf1\x9d\xfd\x83\x79\x99\x1e\x08\x14\x22\x38\xdf\x3a\x38\x40\xf9\x72\x51\xa1\xe5\x47\xbe\x5a\x95\x39\xaf\x17\x1c\xea\xf5\x8d\x5b\xda\x11\x64\xb5\x72\x20\x02\xdc\x9d\x66\x43\x03\xac\x47\x74\x00\xf6\x25\xc9\x2e\x94\x30\x10\x58\x26\xd3\x41\x80\xb9\xfb\xb7\x3e\x19\xa4\x21\x9f\xa8\x85\xad\x9a\xe3\x3f\xdf\x23\xe4\xd3\x3b\x21\x85\xe9\x5b\x29\x85\x77\x3b\xb7\x0e\x0e\xfe\x3f\xb4\x5e\x9e\xaf\x32\xfe\x8c\x9d\x9d\x95\x8b\x93\x9f\x5f\x3e\x3d\x14\x0f\xf7\xe6\xb0\x89\xf4\xd7\xf5\xfe\x29\x3b\xbb\xf5\xff\x02\x00\x00\xff\xff\x64\xb1\xb4\x44\x52\x1f\x06\x00") +var _web3Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x79\x7b\x13\xb9\xb2\x38\x8e\xff\x9f\x57\xa1\xf8\x77\x7f\xd8\x26\xc6\xce\xc2\x30\x8c\x33\x19\x6e\x08\xcc\x90\x73\x81\xf0\x00\x99\x39\xe7\xe6\xe4\xf2\x74\xdc\xb2\xdd\x43\xbb\xdb\x9f\xee\x76\x96\x21\x7e\xef\xdf\x47\xa5\xad\xb4\xf4\xe2\x24\xcc\x76\x92\x3f\xc0\x2d\x95\xb6\x52\xa9\x54\x2a\x95\xaa\x32\xfa\xff\x16\x51\x46\xf7\x3a\xe3\x45\x32\x2a\xa2\x34\x21\xb4\x53\xf4\x92\x5e\xd6\xfd\xa2\x52\xf2\x4e\xda\x5b\x74\xbf\x44\xe3\xce\x7a\x72\x92\x9e\xf2\x5f\x05\xfc\x3a\x0f\x32\x12\xec\x15\x57\x73\x9a\x8e\x89\xac\x6b\xaf\x25\x8b\xb6\x1e\x3c\x10\x89\xbb\xac\xcc\xe2\xc1\x83\xa0\x9b\xd1\x62\x91\x25\x24\xe8\xa4\xbd\xf5\xcd\x2e\x4b\x8f\x64\x5a\x24\xd2\x58\xad\xe3\xbd\x84\x5e\x90\x97\x59\x96\x66\x9d\xd6\x41\x90\x24\x69\x41\xc6\x51\x12\x92\x59\x1a\x2e\x62\x4a\xda\xad\x8d\x74\xa3\xd5\x6e\x75\x77\x8b\x69\x96\x5e\x90\x71\x7f\x94\x86\x74\xaf\xf5\xe6\xe8\xc5\xf1\xeb\x97\x9f\xde\x1e\x7d\xfc\xf4\xe3\xd1\xf1\xdb\x17\xad\xde\x78\xc9\xea\x8b\xf7\x58\xdf\xf7\xbe\xd0\xcb\x79\x9a\x15\xf9\xf0\xcb\x72\xb9\xcb\xc6\x70\xb2\x79\xda\x1f\x05\x71\xdc\x89\xfb\x22\xab\x27\x7b\xdf\xa1\x7c\x80\xc9\x1e\x00\x6e\x9d\x9e\xd0\xd3\x5d\xd1\xd5\xbc\x93\x3c\x4b\x86\xb4\xbb\xec\xc5\x3d\x5d\x92\xf6\x38\xee\x96\x02\x8a\x35\x29\x33\xa1\x17\x51\x23\x5c\x8d\xd3\xac\xc3\xa0\xd3\xbd\xcd\xdd\xf4\xfb\xac\x1f\xd3\x64\x52\x4c\x77\xd3\x8d\x8d\x6e\xde\xc9\x18\xe2\x55\x37\x96\xdd\xce\x97\xad\xe1\x89\xea\xb2\xa8\xa2\xc7\xb1\xd4\x13\x6d\x77\xbf\xac\xf1\x04\xd9\x99\xbd\x93\x35\x42\xbe\xac\x11\x42\x48\x6b\x94\x26\x79\x11\x24\x45\x6b\x48\x8a\x6c\x41\x7b\x3c\x35\x4a\xe6\x8b\x22\x6f\x0d\xc9\x09\x7c\x4b\x68\xc8\x4b\x82\x19\x6d\x0d\x49\xeb\x53\x7a\x91\xd0\xac\xd5\xd3\x39\x6c\x74\x2c\x27\x08\xc3\x8c\xe6\x79\x4b\xe4\x2c\xe1\xff\x53\x51\xb5\x2c\x0e\xff\x8b\xb4\x74\x51\xd4\xb7\x97\x7e\x42\x45\x8c\xf6\xce\xae\x0a\x9a\xef\x6c\xfb\xdb\x93\x40\x0a\xd3\x6b\x84\x2c\x7b\x77\x82\x80\x1b\xf5\x47\x0d\x07\x61\xaf\x19\x02\x56\x46\xf5\x9f\x75\xe8\xa3\x34\x29\x68\x52\xdc\x7a\xf0\x7f\xc9\x79\x67\x33\xf6\xa7\x99\xf6\x71\x10\xe7\xbf\xdf\xd0\x33\x9a\xd3\xec\xdc\xb7\xea\xff\xec\x93\x96\x2f\xce\xde\xd3\x49\x94\x17\x59\xf0\x1f\x30\x79\xbd\xaa\x3a\xe8\xc5\xd1\xad\xf8\x7e\x91\x05\x49\x3e\xf6\xb2\xbe\xbf\x0a\x0e\x32\x8b\x14\x56\x47\x42\x4e\x8b\x0f\xd5\x24\x75\x67\xb8\xb0\x9b\xfe\x5d\x1a\xfd\xca\x13\x10\x34\x41\x7c\x55\x05\xf3\x2c\x9a\x05\xd9\x95\xb7\x1f\x69\x1a\xd7\x4e\xde\xbe\x68\xeb\xaf\x8b\x42\x73\x0f\xae\xac\xa6\x0c\x09\x07\xa5\xdb\xf8\x9f\x09\x09\xde\xde\x87\x51\x9e\x5e\x24\xb7\xe8\x79\x90\xa4\xc9\xd5\x2c\x5d\xe4\x2b\x74\x3d\x4a\x42\x7a\x49\x43\x63\xef\xba\xb3\x89\xd5\x95\xa3\xee\x98\xb5\x5f\x44\xc9\x6d\x18\xf7\xfe\x02\x30\xf1\x32\x09\x69\xd8\xb2\xd0\x44\xcf\x19\x21\xfc\x0d\x70\x74\x16\x85\x61\x33\x1c\xdd\xac\xfe\xf3\x20\x5e\x78\xbb\xbf\x88\x92\x62\xfb\x9b\x27\xd5\x53\xf0\x96\x5e\x3c\x8f\xfe\x40\xe4\xdf\x6a\xcd\x1d\x4c\x83\x64\xf2\x47\x92\xce\x9d\x50\x4e\x49\xdd\x48\xaa\xaf\xa4\x1a\x2f\x66\xde\xf1\xdd\xa8\x16\x41\x6b\xa7\x6b\x6b\xcb\xde\x97\xe5\x69\x6f\xfb\x0f\x3b\xf4\xff\x8d\xce\xbc\x7f\x90\xec\x38\x5e\x24\xe1\x8d\x49\xe5\xd6\x1b\xd7\xfd\xb1\xf7\xaf\x7d\xec\xbd\x3f\xf4\xfd\x99\xcf\x1c\xde\xc1\x8b\xf3\xc2\x9f\x4d\xda\xfc\xba\x9b\xb9\xde\xab\x76\xee\x6c\xaf\x5a\x75\xde\xc7\x59\x3a\xbb\xe5\xb4\x17\xe9\x2d\x8f\x9a\xb7\x13\xf8\xfe\xd8\x75\xf3\x67\xc0\x5f\x94\x84\x51\x46\x47\xc5\xa1\x77\xcf\x5c\xa1\x27\xb7\x9b\x88\x68\x14\xcc\x3f\xfe\xa1\x93\xe1\xc7\x64\xb3\xd3\x2e\x9d\xa7\x79\x54\x75\x50\x9f\x07\x57\xc1\x59\x4c\x4d\xa1\xe0\x0f\xe1\x4a\x65\x34\x77\x27\xc7\xaf\xdb\xd1\xc0\xbe\x1c\xef\x0b\x13\x9f\xbf\xff\x49\xe6\x4e\x90\x54\x52\x77\x33\x3a\xfb\x03\xd0\xff\xa7\xc5\xfa\x5d\x9c\x1f\x6f\xcc\x27\xbf\x36\xd6\x6d\xa6\x77\x8f\xf6\x86\x68\xbf\xf5\xc6\xf5\xb5\x67\xf6\xd0\xb3\xa5\x55\xc9\x71\x8f\x9b\xc8\x71\x60\xbc\x41\xf6\xa4\x85\x43\xa7\xdd\x1f\x8c\xd3\x6c\x16\x14\x05\xcd\xf2\x76\x77\x17\x00\x3e\xa4\x71\x14\x46\xc5\xd5\xc7\xab\x39\x35\x61\x59\xfb\x0c\x6a\x6d\xf0\xf0\xe1\x1a\x79\x68\x40\x0a\x9d\x3b\x89\x72\x12\x90\x79\x96\xa6\x0c\x98\x14\xd3\xa0\x20\x19\x9d\xb3\x43\x56\x52\xe4\x44\xcc\x1d\x61\x99\xac\x86\xc3\x82\xcc\x82\x62\x34\xa5\xf9\x90\x7d\x8a\x6c\xf4\xf3\xe4\x14\x7f\x3c\x36\xbe\x4e\xcd\xcc\x1d\xeb\xfb\xf4\xe4\xc9\xe9\xc9\x69\x8f\xf4\xfb\xfd\x35\xf2\x70\xe0\x8c\x4d\xf6\x78\x8f\x28\x6b\x9a\x4e\x57\x4c\x71\x31\x8d\xf2\xfe\x27\x58\x18\x3f\x4a\x04\x31\xc0\x3e\x47\xd7\x21\xcb\x38\x4c\x8a\x5d\x04\xcc\xf7\x6d\x1f\xf4\x11\xe4\x88\xe6\x76\xd7\x96\xbb\x6b\x6b\x9e\x7e\xf4\xe7\x59\x5a\x70\xac\xed\x91\x84\x5e\x18\x7d\xed\x7c\x59\x76\x77\xab\x4b\xf5\x41\x7a\xc9\x16\xa3\x22\x65\x8d\x7b\x60\xeb\xda\xed\x47\xb9\x98\x73\x8d\x10\x46\x8e\x12\x29\xc2\xae\x65\x7d\x9d\x25\xf6\x61\xde\x3a\x03\x81\xed\xce\xbf\x4f\x3a\x27\x9b\x8f\xbe\x3b\x7d\xd8\xfd\xf7\x69\xf7\xd9\xa0\xcb\xc7\x69\x1e\x1c\x4a\xbb\xb5\xec\x7d\x69\x61\x52\x6c\x0d\xbf\xeb\xb5\x38\xbd\xb5\x86\x5b\x8f\x97\xa7\xbd\x6f\xfe\x60\xf2\x7e\x9e\xa6\x71\x0d\x6d\x9f\x31\x90\x12\xc2\x66\x79\xf2\x7f\x4e\xa5\xf0\xeb\xb1\xfe\x79\x8a\x92\x77\xf0\x47\x1d\x19\x43\xcf\x6e\x4a\xc3\xac\xf0\x2a\x44\xcc\xe1\x6d\x0a\x66\xa9\x2b\x92\xaf\x59\xa4\x82\x76\x79\x8b\x55\x65\x6f\x42\xb5\xff\xc7\x50\x6b\xd2\xec\xc3\xff\x6a\x44\xb4\xa2\x3f\xf5\x14\xfb\xe4\x8f\xa6\x58\xb6\x87\x29\x92\x2d\xfc\x34\x5b\x4c\x29\x81\xcd\x0e\x08\xb7\xef\xa3\x5c\x96\xab\x7e\x08\xba\x84\x9f\x8f\xd1\xef\x53\x9c\xb1\x63\x7c\x99\xf4\x4b\xc4\xd6\xaa\x7e\x3e\x35\xea\x11\x45\x3d\x54\x0e\x9d\xbc\x31\x99\xb3\xd2\x2b\xd1\x39\x2f\xe0\x10\x3a\x4b\x5e\x95\xd2\xcd\x32\x55\xa4\xce\x1b\xad\x2c\x7d\x33\x62\x67\x95\x70\x52\xff\xb2\xd5\x5b\x76\x6f\x46\xf8\xa2\x77\xf5\x94\xff\x6d\x13\xca\x1f\x3c\x84\x0e\x7f\x9c\x46\x39\x19\x47\x31\x65\x94\x3a\x0f\xb2\x82\xa4\x63\x72\x41\xcf\x76\xfa\xbf\xe6\xfd\x35\x00\x11\x5f\x0c\x60\x9c\x51\x4a\xf2\x74\x5c\x5c\x04\x19\x1d\x92\xab\x74\x41\x46\x41\x42\x32\x1a\x46\x79\x91\x45\x67\x8b\x82\x92\xa8\x20\x41\x12\x0e\xd2\x8c\xcc\xd2\x30\x1a\x5f\x41\x1d\x51\x41\x16\x49\x48\x33\x20\xf8\x82\x66\xb3\x9c\xb5\xc3\x3e\x7e\x7a\x7b\x4c\x5e\xd3\x3c\xa7\x19\xf9\x89\x26\x34\x0b\x62\xf2\x6e\x71\x16\x47\x23\xf2\x3a\x1a\xd1\x24\xa7\x24\xc8\xc9\x9c\xa5\xe4\x53\x1a\x92\xb3\x2b\x41\x45\x94\xfc\xc8\x3a\xf3\x41\x74\x86\xfc\x98\x2e\x92\x30\x60\x63\xee\x11\x1a\x15\x53\x9a\x91\x73\x9a\xe5\x6c\x86\x76\x64\x5b\xa2\xc6\x1e\x49\x33\xa8\xa5\x13\x14\x6c\x0c\x19\x49\xe7\xac\x60\x97\x04\xc9\x15\x89\x83\x42\x97\x75\x51\xa0\x47\x1a\x92\x28\x81\x6a\xa7\xa9\x5c\xd9\x51\x41\x2e\xa2\x38\x26\x67\x94\x2c\x72\x3a\x5e\xc4\x5c\x70\x3c\x5b\x14\xe4\x97\xc3\x8f\xaf\x8e\x8e\x3f\x92\xfd\xb7\xff\x22\xbf\xec\xbf\x7f\xbf\xff\xf6\xe3\xbf\x76\xc9\x45\x54\x4c\xd3\x45\x41\x98\x44\x09\x75\x45\xb3\x79\x1c\xd1\x90\x5c\x04\x59\x16\x24\xc5\x15\x49\xc7\x50\xc5\x9b\x97\xef\x0f\x5e\xed\xbf\xfd\xb8\xff\xfc\xf0\xf5\xe1\xc7\x7f\x91\x34\x23\x3f\x1e\x7e\x7c\xfb\xf2\xc3\x07\xf2\xe3\xd1\x7b\xb2\x4f\xde\xed\xbf\xff\x78\x78\x70\xfc\x7a\xff\x3d\x79\x77\xfc\xfe\xdd\xd1\x87\x97\x7d\x42\x3e\x50\xd6\x31\x0a\x35\xd4\x23\x7a\x0c\x73\x96\x51\x12\xd2\x22\x88\x62\x39\xff\xff\x4a\x17\x24\x9f\xa6\x8b\x38\x24\xd3\xe0\x9c\x92\x8c\x8e\x68\x74\x4e\x43\x12\x90\x51\x3a\xbf\x6a\x3c\x91\x50\x59\x10\xa7\xc9\x04\x86\xad\xa8\x8c\x90\xc3\x31\x49\xd2\xa2\x47\x72\x4a\xc9\xf7\xd3\xa2\x98\x0f\x07\x83\x8b\x8b\x8b\xfe\x24\x59\xf4\xd3\x6c\x32\x88\x79\x05\xf9\xe0\x87\xfe\xda\xc3\x81\x64\xb6\xff\x0d\x64\x3b\x4a\x43\x9a\xf5\x7f\x05\x16\xf9\xdf\xc1\xa2\x98\xa6\x19\x79\x13\x64\xf4\x33\xf9\x9f\xb4\xa0\x17\xd1\xe8\x37\xf2\xfd\x8c\x7d\xff\x37\x2d\xa6\x21\x3d\xef\x8f\xd2\xd9\x0f\x00\x1c\x06\x05\x25\xdb\x9b\x5b\xdf\x00\xc3\xab\xdf\x0a\x2a\x04\x58\x54\x46\xc8\x63\xbe\xbd\x43\x48\x0a\x08\x98\xed\x82\x3e\xc8\xc3\xa4\x30\x01\xa3\xa4\xf0\xc1\x1d\x3b\x80\x8b\x12\xc8\x17\x57\x49\x30\x8b\x46\x92\x8d\xa3\x12\x21\xcf\x01\x1e\xe5\x2b\xf9\xa1\xc8\xa2\x64\x62\x96\xc9\x21\xcd\x07\xfd\x9e\x06\xd6\x18\x33\x1a\x78\xc7\x78\xec\x82\x2e\xca\x60\x3d\xdd\x56\xfd\x05\xe0\x28\x17\x03\x34\x38\x73\x8e\xaa\xe8\xc1\x0e\x2b\xf8\xb4\xb4\x10\x47\xf9\x7d\x55\x05\x6c\x23\x1c\xf8\xfa\x5a\x9d\x1e\x49\x09\xf4\x7e\x96\x05\x57\x1c\x9c\x33\x71\x4b\x14\x38\x60\xf4\x89\x24\x00\xb1\x92\x38\x87\x08\x49\x91\x12\x9a\x30\x1a\x1e\x84\x94\xfd\xa7\x5a\x61\xcc\x38\xe0\x6c\x92\x71\x25\x21\xd7\x9a\x1b\x33\xaf\x1b\x8f\x98\x81\xe5\xe6\xce\x0c\x49\x64\x0f\x6a\xc8\x8d\x2e\x02\xef\x9f\xd1\x62\x9a\x86\x9e\x6e\x71\xe5\x7a\x9a\xcd\x08\x97\x5c\x52\x63\x46\xd6\x08\x5f\x83\xa2\xf8\x27\x31\x33\x22\x8b\xfc\x37\xf4\x9e\x7c\xe1\xc4\xb3\x54\x62\xf9\x7f\x73\xcc\xe7\xe4\x0b\xae\x6c\x09\x59\xf0\x56\x21\x27\x5f\xe0\x5d\xc3\x92\x88\xcf\x88\xf1\x06\x2e\x11\x31\x32\x84\xbe\xb0\x9d\x88\xb1\x7b\x40\x88\x81\x0c\xb4\x53\xe3\x2e\x39\x38\x92\x28\x62\xd8\xcc\x4d\xf1\x0e\x61\xad\x3f\x8e\xe2\x82\x66\x1d\x54\xb6\x8b\x74\x10\x82\x8a\x0a\x21\x14\x48\x22\x00\x9d\x42\xf7\x64\xf3\x74\x97\xf3\xcf\x68\x4c\x3a\xeb\xb8\x11\x5c\x07\x7f\xa0\xc1\x9f\x72\xb4\xa3\xe4\x3c\x88\xa3\x50\xd3\x00\xab\x71\x7d\x48\xda\x64\x83\xe0\xca\xd7\xb0\xac\x81\x6b\x36\x29\xb0\x84\xd2\xc8\x3c\x0e\xa2\x84\xd3\x97\x35\x8d\x1c\xe0\x9d\xc8\x29\x9f\x45\x91\x7e\x74\xf6\x2b\x1d\x15\x4b\xab\x42\x39\xc9\xba\x1c\xaf\x36\xb4\xe0\xca\xa7\x0e\x75\xc3\x99\xb9\x1e\x2f\x6f\x09\x5c\x30\x69\xa8\x58\xde\x39\x61\xc0\xa7\x3d\x72\x02\xe0\xa7\xdd\x66\xa8\x89\xa3\x1c\x24\x20\xbe\xf8\xca\xb1\x93\x63\x34\x00\x0b\xe0\xd8\xf1\xa5\xcf\x75\x81\x32\xc4\x38\xcd\x36\xc2\x4d\xee\x2e\x7d\x81\x9d\xbc\x8c\xbe\x73\x49\xe0\x13\x5a\xe0\x15\x98\x0b\xce\x21\x48\x96\x15\x13\x7d\x63\x25\x8c\x1a\xfa\xb3\x60\xde\x29\xe3\xb1\xa0\x95\xf3\xac\x11\x83\x77\xf2\x9a\x3b\xbc\xa7\x27\x50\xe4\x94\xb3\x67\xf9\xa5\x56\x11\xea\x8f\xd8\xa7\x8e\xc6\xe3\x9c\x16\x4e\xa7\x32\x1a\x2e\x46\x14\xf5\x2b\x18\x8d\x7a\xa4\xa6\x73\x80\x9d\x22\x28\xa2\xd1\xbb\x20\x2b\x5e\xc3\x4b\x22\xab\xe6\xbe\x9d\xdf\xf1\xf4\x53\xd6\x95\x31\xa6\x44\xc3\x0f\x6e\x95\x6f\x82\x62\xda\x1f\xc7\x69\x9a\x75\x3a\x4e\x8b\x1b\x64\x67\xab\x4b\x06\x64\x67\xbb\x4b\x1e\x92\x9d\x6d\x31\x68\x84\xbe\x60\x34\x22\x1b\xa4\xa3\x36\x1d\x03\xeb\x25\x28\x24\xcf\xd0\xde\x45\xc8\xce\x36\x19\x1a\x09\x25\x9d\x95\xa8\xef\x91\x4d\x8c\xfd\x8c\xe6\x8b\xb8\x90\xd4\xc3\x67\xf0\xcd\x22\x2e\xa2\x5f\xa2\x62\xca\xe7\x44\x52\xa0\xd1\xb7\x9e\xa2\xa3\x9e\x39\x83\xb2\x72\x31\x42\x5e\xbf\x79\xe2\xf3\x93\xbe\xd5\xaa\x6f\x0d\x34\xec\x01\x5a\x23\x6a\x78\xad\xd6\xae\x5e\x38\x34\x1e\x8b\x11\x8b\xce\x8a\x5d\x21\xcd\x5e\x06\xa3\x69\xc7\x66\x4c\x11\xa6\x2d\xc6\xf5\x4b\xe7\x4b\xcf\xd5\x69\x17\x17\xe2\x08\x81\xae\x6c\xb8\xda\xce\x8e\xd9\x7d\xb9\x8e\x10\x11\xaa\xb5\xcb\xa8\x98\xc6\x63\x01\x62\xcf\x11\x74\xc0\xed\x92\xc4\x13\x7c\xd8\x93\x85\x9b\x30\x97\xe2\xc6\x1e\xa1\xe2\x19\x1e\x19\x90\x6d\x0d\xba\x24\x34\xce\xa9\x35\xbc\xc1\x80\x84\x69\xd2\x2e\x48\x10\x86\x44\x94\x2a\x52\xb3\xca\x3e\x89\x8a\x76\x4e\x82\x38\xa3\x41\x78\x45\x46\xe9\x22\x29\x68\x58\x82\xa5\xaf\x34\xce\xa5\x5e\x84\x83\x01\xf9\x78\xf4\xe2\x68\x48\xc6\xd1\x64\x91\x51\xc2\x0e\x6c\x09\xcd\xd9\x09\x90\x9d\xd2\xae\x72\x93\x59\xfd\x1e\x44\xf2\xe7\x99\x64\x73\x32\x28\x46\xa0\xc4\x4a\xc9\x32\x57\x68\xcd\xe8\x38\x00\x75\xcc\xc5\x34\x8d\x29\xef\x61\x94\x4c\xd6\x6b\x18\x41\x05\x0f\xb0\x39\xbf\x18\x74\x8f\xa4\xce\xca\x37\x16\xb9\x9c\x93\x5a\x51\xdf\xb3\xc5\x75\x5c\xd5\x18\x22\x20\xde\x30\xb9\x08\x34\x59\xe7\xb4\x70\xe6\x94\x93\xd5\xdb\x60\x46\xed\x7d\x48\xe7\x60\x39\xd3\x2d\xeb\xd9\x7c\xaa\xf7\x33\x5d\xb1\xa7\x4e\xc5\x17\x05\x06\xb5\x54\x2b\xff\x2a\x86\x2d\x2b\x99\x67\xf4\x3c\x4a\x17\xb9\xea\xd0\xf6\x2e\x43\x49\x94\x90\x28\x29\x9c\x12\x75\xf8\x47\xfd\xf5\x35\xc8\xfe\xc6\x69\x46\xe0\x91\x70\x44\xf6\xc8\xd6\x2e\x89\xc8\xf7\x72\x00\xf2\xbd\x30\x89\x36\x36\xca\x8a\xb3\x3f\xab\xcf\x1b\x7b\x64\xa3\x23\x71\x10\x91\x47\x64\xeb\x94\x49\xf8\xe4\xfa\x9a\x6c\xee\x96\x56\x52\xc1\xca\x05\x3d\x6c\x90\x88\x3c\x2c\x9b\xb9\x0d\xbb\x17\x4c\x38\x28\x63\xfb\xf2\x6f\xe9\xa4\x9a\x29\xcb\x6e\xa7\x6b\x4d\xe1\x60\x40\xc6\x51\x96\x17\x84\xc6\x74\x46\x93\x82\x9d\xaf\x38\x9a\x7a\x24\xff\x1c\xcd\x49\x54\xac\x32\xe5\x06\xf6\x37\x7d\xd8\x67\xf8\xab\x9c\x01\x78\x3a\x1f\x86\x11\x6b\x24\x88\xd5\x22\x17\xf8\x74\xf8\x8f\x8b\x6f\x3f\x5f\xd4\xa4\x53\xc2\x20\x4e\x22\xb2\x41\xb6\x4e\x25\x9f\x20\x1b\xc4\xe9\x86\x07\xed\xb5\x08\xb6\x98\x9f\x07\x52\x6c\x95\x1e\xda\xe7\x54\x71\x63\xd6\xf3\xa7\x66\x2a\x4c\xd8\x32\x31\x75\xcb\xc5\x5f\x43\x99\xa4\x8c\x21\x6d\x56\x31\x24\xd2\x88\xa6\x6b\x39\xca\x60\x40\x46\x41\x3c\x5a\xc4\x41\x41\xa5\xe0\xc3\x8e\x7c\xa2\x2f\x24\x2a\xe8\xec\x16\xec\x88\xb1\xa2\x93\xbf\x10\x53\xea\xda\xb0\xcb\x95\xf6\x95\x5b\x4e\xc8\x1f\xc7\x60\x30\x73\xf9\xea\xbc\x85\x38\xda\x22\xd1\x8f\x1a\x6d\x88\xd0\x45\x8a\x9b\xc9\xb4\x42\x63\xc4\x21\x1b\x6b\x8c\x64\xba\xba\xd5\x54\x2a\x11\xbf\x2e\xa9\x5c\x0f\x82\x1a\xf6\x88\x7f\x50\xbf\x4f\x47\x84\x8a\x69\x1d\x11\x87\x06\xd9\xa6\x09\x5a\x2a\x95\x44\x25\x08\x29\xd3\x11\x95\x23\x44\x94\x80\x13\x06\xb4\xa6\x11\x53\xad\x21\xc2\x43\xf4\x9d\x8e\x0d\xdc\xac\xae\x20\x92\xa5\x38\x15\x63\x78\x4e\xc4\xb9\xf7\x14\x6e\x1d\xf7\xef\x58\xa3\xc4\x87\xdc\x81\x91\xc9\xf5\xa5\xd5\x22\x86\x5e\x44\xd6\xa8\x35\x4c\x55\x2a\x07\x3d\xaa\x5a\x3d\x03\xc6\x28\xe7\x40\xac\xcc\x5d\x8f\xb4\x89\x3a\x4a\x9d\x44\x7d\x72\xb0\xe8\x5a\x29\x93\x1c\x0c\x48\xbe\x98\xf1\x1b\x3a\xcf\x2e\x25\x44\x44\x05\x2f\xaa\x3b\x89\x4e\x19\x57\x54\x5f\xb0\x25\xf9\xf8\x8f\x6c\xde\x44\x84\x94\x36\x1d\x14\x0c\x06\x24\xa3\xb3\xf4\x1c\xae\x31\xc9\x68\x91\x65\x4c\x3e\x55\xc2\x69\x0a\xc9\xa2\x9b\x51\x0e\x3d\xf7\xf4\x36\x5f\x45\xe3\x27\x91\xd9\x58\xf3\x67\x8c\x8c\x3c\x72\xea\x6f\x4c\x69\x1f\xac\x75\x58\x72\xad\xe3\x3d\xb5\x4a\x1e\xe7\xa1\xb2\xc2\xba\x72\x90\x64\xc5\x76\x30\x7c\x49\x62\xde\x5f\xf0\xde\xb2\xb6\x46\xe2\x96\x09\x9b\x5a\x40\xef\x3b\xdc\x5e\xd5\x36\xc1\x10\xd7\xa2\x9d\x6e\xcf\x9b\xfd\x3c\x4d\xe3\xb2\x3c\x26\x84\x94\x64\x1d\x57\xe4\xe1\xcb\xcd\xd2\x66\xab\x32\x39\x17\x2e\xcb\x7d\x4f\x83\xd2\x1e\x1f\xf3\xcc\x35\x46\x10\xae\xfd\x06\xa0\x4e\xd9\x6c\x48\xc3\xd9\xe1\xe3\x5e\x8b\xdf\xfd\xb6\x86\xdf\xc0\x4f\xd6\xb7\xd6\xf0\x09\xfb\x8d\xaf\x63\x5b\xc3\xa7\x3d\x9f\xad\x47\x94\x14\xad\xe1\xd6\x26\xfb\x99\xd1\x20\x6e\x0d\xb7\xb6\xd9\x6f\x7e\x2b\xdb\x1a\x6e\xed\xb0\xaf\x05\x87\x82\x06\x16\x02\xec\xc9\xf2\xb4\xf7\xf4\xf7\xb4\x8b\xaa\xb9\x86\xbe\x99\x35\x11\xae\x64\x15\xa3\x22\xb3\x9c\x6d\x5b\x84\x73\x57\x34\x31\xf2\x17\xad\xb0\x34\x32\x7b\xd2\xa4\xae\x5b\xd8\x1d\x95\x18\x1b\x35\x6a\x14\x5d\x89\x7b\xa7\x4b\xb2\x9d\x6c\x41\x1b\x98\x30\x59\xc3\xae\xb7\x64\xfa\xee\xde\x92\xe9\xde\x92\xe9\x3f\xc5\x92\x49\x2f\x84\xbb\x32\x67\x7a\x1e\x4d\xde\x2e\x66\x67\xc0\x0a\x15\x77\x3e\x8b\x26\x09\x24\xf6\x7f\x55\x9c\x7c\x51\x44\xb1\x69\x5f\xd3\x1f\x40\x1a\xff\x57\x82\x8d\xbc\x20\xa3\x34\x19\x47\x8e\x31\x90\x3c\x99\xa1\x5d\x01\xce\x2e\xb0\x2d\xc8\x81\x73\x5e\x9d\x13\xe0\xf7\x04\x1e\x6c\xb0\x73\x16\xe3\x5b\xda\x4a\x16\x96\x02\x9b\x1b\x50\xce\x3c\x64\x38\xe6\x90\x51\x4e\x12\x3a\x09\x8a\xe8\x9c\xf6\x24\x27\x82\x8b\xa3\xe2\x22\x6d\xe7\x64\x94\xce\xe6\x52\x5a\x85\x52\x6c\x6e\x55\xc9\x71\x9c\x06\x45\x94\x4c\xc8\x3c\x8d\x92\xa2\xc7\xaf\x43\x19\xd9\x87\xe9\x45\x62\x9d\xe9\x4c\x35\x89\x7b\x7c\xbb\xe6\x58\xbe\x56\xf8\x5e\xca\xb1\xb0\xa5\x94\x50\x1a\xc2\x29\xfa\x4c\xcf\x71\xe8\x37\x86\x01\xa4\x2d\x95\x9d\x8f\xd9\xae\xc1\x80\xa1\x7e\xc9\x85\x55\xbb\x7d\x3e\x17\x9d\x51\xff\xe5\xc7\x57\x9f\x9e\x1f\xfe\xf4\xf6\xf8\xcd\xf3\x97\xef\x3f\xbd\x3f\x3a\x7e\xfb\xe2\xf0\xed\x4f\x9f\xde\x1c\xbd\x78\x89\xce\x70\x4a\x13\x07\x33\xd9\x9f\x07\xe1\x6b\x3a\x2e\x3a\xfc\xab\x48\x3f\x5e\xa4\xf9\x81\xc2\xa2\x68\xb3\x5f\xa4\x42\x5c\xda\x7a\xd2\xed\x91\x27\x8f\xcd\x1b\x1e\xbc\x5b\xc2\x70\x3a\xbc\x11\xd3\x00\xc3\x9c\x78\x79\xf8\x2d\xc1\xf9\x73\x75\x36\x36\x0f\xcd\xab\xe2\xd0\x95\x3a\x0c\x2c\x7a\x10\x52\xa4\xaf\xe8\xa5\x1c\x77\xbe\x38\xcb\x8b\xac\xb3\x8d\xf0\x17\x5b\x57\xfb\xbc\xb8\xd4\x72\x6f\x90\x27\x3b\x5d\x32\xc0\x28\xb2\xd1\xfd\x3e\x9a\x4c\x0b\x51\xac\x47\x62\xf2\xf0\x2b\xe3\x53\xec\xc0\x77\x8a\xd6\x52\x99\xee\xd6\xd8\x95\xc7\x33\x13\xad\x4a\x3b\xf7\x87\xcd\x80\xa5\x36\xe5\x8d\x75\xfb\x7c\xcd\x6f\x90\xfa\x09\xaa\xe3\x74\x5c\x92\x2f\x5f\x11\x1f\x64\xfe\x6d\xe7\x4e\x19\x77\x36\x9f\xb5\x71\x96\xce\x8e\x8b\xf1\xd3\xfb\x89\xf3\x4c\x9c\x78\x67\x54\xc6\xc8\xc4\x2b\x24\x39\x69\xec\x9b\x06\xc9\xea\x8c\xcc\x7e\x72\x54\x3e\x67\xed\xcd\xdb\xfd\xb5\xc9\x86\xa8\x9e\x3c\x23\xa4\xbd\xd5\x26\x43\xd2\xde\x6c\xdf\x9e\x47\xd5\x61\x92\x9d\x58\x59\xa9\x9f\x19\x5c\x4e\x98\x60\x3c\x5b\xc4\x45\xc4\x85\xca\xb3\x2b\xb2\xfd\x7f\x33\x26\x9e\x2b\x1b\xba\x80\xd5\x5c\xd0\x09\xcd\x2a\xb6\x92\xf7\xa2\xd6\xba\xfd\x7b\xd5\x19\x11\xb6\xcc\x25\x33\x22\xd0\x64\x51\x1f\xc3\x9a\x6a\x51\x6d\xae\xd1\x8c\xe6\x56\xd6\x76\xb7\x3f\x4f\x2f\x3a\x5b\xdb\x4f\xbb\x5d\x13\xa5\x07\x53\x3a\xfa\x4c\xa2\xb1\x81\x53\x24\x16\x59\x88\xc8\xa3\x49\x42\xc3\xc3\xfc\xad\xce\x76\x14\xd1\xaa\x8e\x29\xbd\x14\x3d\x36\x91\x21\x89\x16\x0e\x7d\xd0\x76\x61\x4a\x62\x29\x3b\xb2\x5c\x44\x4c\x0c\x0f\xe2\x5c\x5b\x2d\xdb\xad\xd7\xe2\xcb\x87\x21\xc9\x6e\x36\x7b\x64\xab\xdb\x23\x5b\x4f\x90\x3c\xb2\xdd\x35\x72\xbb\x64\x6f\x6f\x8f\x91\xac\x97\x0a\x33\xc6\x3e\x1e\x05\x31\x74\x8a\x70\xd5\x81\xbe\xf0\xe0\xa2\xa6\x4b\x44\x5c\x91\x60\x0b\x81\x06\x79\x38\x76\xb0\x0c\x67\x5a\x30\xac\x68\x57\x09\x87\xb0\x2c\xa2\x09\xe1\x72\xba\x45\x6f\xaa\x0b\x06\xfe\x0c\xa3\x58\x06\xcc\xe7\x71\x8f\xf7\x06\xe9\x32\x3b\x5d\x72\x7d\x4d\x5a\x9b\x2d\xa1\x23\x1e\x0c\xc8\x48\x51\x11\x13\x9e\xe5\x44\xaa\xd6\x39\x10\xcc\xb2\x12\xb3\x5d\x09\x5b\x5e\xde\x5a\x93\x2c\x26\xd6\xa3\x7f\xf4\x4c\x2e\x9f\xcf\x59\x94\x2c\xec\x25\xd0\x1e\xdf\xf2\xaf\x0d\x75\xcb\xca\xb7\xd4\xdd\x58\x83\x0e\xdd\x80\x7c\x16\xd5\xf4\x73\x5c\x49\x40\x3e\xd2\xa1\x2b\xd1\x8e\x68\xde\xa5\x9a\xe3\xbb\x20\x9b\xaf\x83\x32\xc1\xef\xcb\x50\xe6\x30\xee\x5a\x94\x01\xc6\x90\x3c\x6c\xa2\x48\x34\xe7\xa2\xc8\xe1\xe4\x3e\x73\x73\x6b\x25\x0a\x98\x7e\x18\x9d\x47\x21\x0d\x9f\x5f\x55\x30\xf0\x9b\x50\x53\x0d\x6e\x8e\xef\x1a\x39\x8b\x52\xec\x1c\xaf\x8c\x9e\xe3\xdb\xe0\xc7\xbd\x82\xe5\x55\x2b\x14\x95\x89\x5b\xfa\xb5\x74\x63\xbc\xc8\x6d\xcd\x9c\x8b\x52\x1c\x89\xa6\x5d\x14\x39\xc2\x99\x0f\x43\x9e\xe5\x05\x9b\xd5\x2d\xa5\xb5\xad\x36\x79\xc6\xf7\x65\xe1\x16\x63\x35\x6c\x96\x1e\x1b\xd1\xa3\xdc\x8a\x8d\x2f\xa6\x63\x8d\x38\x26\x3e\x54\x1c\x6c\x1c\xb9\x23\x09\x66\x94\xbf\xee\x61\xbf\x2c\xf9\x4b\xc0\xb0\x3a\x55\x0d\x1e\xcc\x3b\x27\x50\x68\xa3\x47\xb0\xa6\x9c\x15\x12\xef\xab\xc9\x1e\x29\x7b\xa6\xfb\xb0\x3b\x40\xe7\x99\x3c\xfa\x4d\xf0\xc4\x1c\xae\xa8\x44\xf9\x93\xad\x53\x53\x0e\x6e\x6f\x5e\x32\x79\xd9\x9d\xdc\x7e\x1e\x47\x23\xca\xc4\x92\x6d\xf2\x10\xaa\x5b\x91\xce\x6b\x66\x06\x1f\xc1\xef\x6c\x82\x56\x45\x7f\xa9\x1e\xc0\xd9\x64\xd4\xf9\xd0\xe2\x03\x1c\x71\xe2\x06\xcc\xc6\xdc\x93\xc7\x5d\xb1\x87\x17\xa9\x80\xef\x92\x87\xf2\x48\xe9\x9b\x01\xab\x22\x2e\x1a\x3e\x79\xdc\x13\xed\xaf\x36\x05\x15\x47\x72\x3e\x7c\xcf\x99\xfc\x4e\xb1\x1f\xe4\xa3\x28\xaa\xc2\xbf\xe7\x2c\xff\x3b\x62\x5e\xaa\x74\x40\x35\xd0\x0c\xff\xab\x4d\x80\xf6\x4d\x53\x36\x03\xfb\xda\x7b\x4d\xc9\x14\x94\xf2\xf6\x12\x94\xab\x0a\x5d\x6c\xfb\xbc\xd7\xac\x20\x4d\x19\xb8\x6b\x6d\x5e\xb6\xc8\x06\x11\x07\x1c\x40\x3b\xff\xad\x6c\x0a\x1e\x6f\xf6\x08\x4e\x2a\x73\x18\xf0\x45\xda\x7d\xa0\x83\xe6\xd0\xfa\xee\xd9\x30\xb0\x62\x87\x4e\x8a\x03\x87\x17\xf8\xb0\x2c\xc3\x29\xc5\x91\x39\x74\x93\xdc\x7e\xa4\x69\x3c\xb4\x13\x1c\x28\x26\x81\x0c\xed\x04\x0c\xa5\xc4\xb2\xa1\x9d\xe0\x42\x1d\x3b\x60\xc7\x5e\x38\xdc\xa8\x4e\xf1\xd4\xe7\x02\x1e\xfb\x21\xf1\x60\x75\x8a\x07\x0e\x63\x1b\x25\xb9\x90\xbe\xe9\x71\x73\xdc\x72\xe6\x04\xe1\x34\x17\x56\x50\xfd\xd0\xbb\xee\x96\xf2\x4e\xd7\xbc\x19\x6a\x0d\xb7\x9e\xf6\x5a\xe6\x8d\x52\x6b\xb8\x0d\xe6\x0b\xb0\x30\x5a\xc3\xad\xad\x5e\x0b\xdf\x4b\xb5\x86\xe6\xe7\xf2\xb4\xb7\xb5\xf9\x07\xfb\x73\x39\xe4\x86\xf1\x15\x0e\x88\xa2\xa4\x28\xf3\x3f\x24\xae\xae\xa2\xa4\xe0\xae\x59\xd8\x8f\xc7\xea\xd7\xa9\x4e\xdc\x41\xbf\x2d\xcf\x2d\x51\x52\x70\xbf\x2d\x51\x52\x3c\x79\xac\xc0\x9e\xea\x8a\xb6\xbf\x79\x52\x52\x17\x83\xaf\xf1\x63\x64\x1f\x0d\xbf\xa2\x2b\x2e\x00\xb7\x6d\x10\x0e\x93\x62\x45\xb3\x0b\xa3\x44\x85\xb5\x05\x34\x57\x51\xf2\x46\xb6\x15\x51\x52\x48\x51\xf1\xd9\x8d\xfc\xb9\xf0\x5e\xd5\xdb\x40\x6c\x35\x0a\x61\x77\x6f\x04\x71\x6f\x04\xf1\xd7\x35\x82\x20\xda\x0a\x82\x8b\x4a\x77\x64\x00\xd1\xc0\xae\xc1\x66\xf5\xdc\x6e\x21\x05\x6b\x74\xed\xb6\xa3\xef\x91\x50\x2f\xa6\x34\x51\x8f\x15\x7b\xdc\xf0\x9b\x09\xe0\xca\x7b\x83\x94\x2c\x07\x5e\xc3\x08\x4b\xf7\x6d\xbf\x4d\x04\x4e\x2a\xe5\x47\xfe\xff\xf5\x35\x69\xb7\x11\x9f\x4d\xe5\xb3\x05\xfe\x63\x17\xbd\x33\x8c\x12\xd1\x7a\x63\x77\x1f\x13\x5a\x60\x7b\x5f\xb0\x1e\x6f\xe7\xf2\x15\x28\xf0\x12\x56\x89\x61\xea\xae\xe5\x7b\x6e\xe9\x6a\x4a\xd1\x52\xcd\xa4\x6b\xc5\x95\x91\x8e\xec\x63\xd7\xb0\x66\x07\xf4\x60\x6b\x76\xbb\x91\x4a\x3b\x34\x30\xf1\x37\x8e\x1d\xf8\xee\xb1\x31\x32\x46\x19\x65\xc4\x24\xd7\x83\xe9\x93\x85\x93\x7b\x18\x8d\xc7\x14\xac\x91\x39\xca\xad\x73\xc9\x85\x7a\x14\x82\x8f\x23\x12\x25\x62\x96\xa4\xe1\x72\xe2\x3d\x84\x98\x47\x17\xb6\x1d\xfa\xfa\x11\xcc\x39\x87\x51\xbd\x28\x47\xe5\x85\xff\xc1\xac\x49\x77\xa5\x57\x7a\x9a\x20\x15\xa9\xae\x82\xd1\x74\x76\x16\x25\xae\x7b\x9b\x22\x9d\x50\xc6\xdd\x59\x0d\x74\xd2\xe7\x8b\x2a\x98\xcf\x69\x02\x6b\x29\x48\xf8\x03\x08\x0b\xbb\xa2\xb6\xba\x4b\x18\xc1\x98\xa6\xd1\x88\xb1\x27\xd9\xab\xfa\xc2\xe2\xf6\x34\x1d\x0b\x58\xd8\x87\x2a\x51\x2b\x87\x57\xa7\xf7\xab\x42\xab\xd2\x5b\xf0\x2b\x93\x5d\x52\x8f\xdd\x51\x10\xc7\x02\xbf\xf2\x0e\x87\x8f\x68\x1a\xe8\xa5\x9b\x47\xbf\x09\xcf\x82\x70\x57\x37\x0d\xf2\x1e\xfb\x5f\x12\x1a\xf8\xfe\xf5\x5c\xda\x61\x7c\x2b\x43\x50\xbf\xce\xb4\x12\x35\x7e\xd7\x4c\xbe\x85\x2b\x56\xc5\xfa\xde\x1e\x48\x17\xe3\x28\xb1\x1e\x2a\xd5\x21\x41\xbb\x2c\x12\x55\x89\xeb\x65\x5b\x69\xc0\x73\xf7\xf3\xe7\xe5\x47\x7f\xae\xf1\x75\x35\x34\x0d\x96\x99\x51\x7b\xd5\xa0\xd7\x61\xd4\xfa\xfd\x7f\x97\x3c\x23\xed\x36\x19\x36\xb3\xc6\x42\x28\xf3\xda\x64\xad\x80\x37\xc6\xfb\xb9\x72\x42\xc9\x8c\xbe\xb7\x5e\x5a\x7f\xe1\xc7\x99\xdc\x7b\xe4\x95\x70\x80\x19\x7e\x30\xc3\x44\x06\x24\x5e\x89\x45\xdd\x98\x17\x85\xe0\x54\xc9\xc6\x9f\xcf\x39\x93\x5a\x5e\xbb\x84\x5f\xf9\x91\x12\xba\x13\x13\xd6\x59\x1d\x75\xc6\xb6\x56\x82\x3b\xb4\x29\xf9\x91\x27\x13\x02\x79\x03\xdf\x00\x8b\x74\x36\x2f\xae\xb0\x4a\xb0\xc1\x26\x5a\xbb\x0a\x4d\x7a\x44\xec\x69\x08\xd2\xc7\x0a\xb8\x91\xee\xa6\x4a\x1d\x4d\x79\x31\x51\x39\x10\x51\x65\xdd\x18\x8c\x8b\x95\x0d\x8f\x58\x70\x93\x71\xe8\x97\x78\xe5\xce\xa1\x5e\x47\x79\xe1\x3c\xfb\x3b\x31\x46\x73\xea\xf1\x08\x55\x39\x7a\x5d\xb3\xbb\xbd\xa8\x47\x41\xf2\x9a\x7e\x31\x0f\xb9\x59\xab\x78\x04\xa7\x54\x91\x45\x5a\xa0\x87\xae\xbc\xb0\x14\x8e\xb8\xd3\x21\x62\x3c\xec\x53\xef\x07\x05\xa8\xf9\xa6\xc8\xd8\xdb\xd4\x7a\xe4\xdb\x57\xc9\x82\xb4\x6f\xbf\x6c\x4f\x21\x66\xf3\x64\x0f\xf7\x58\xc3\xe2\x61\x6c\xec\xb9\x8a\x7e\xf1\x54\xcb\x7d\x9e\xc5\x21\xb5\x08\xd4\x49\xf1\x93\x5b\xf5\x64\x6e\x30\x90\xd3\x4d\xcf\x69\x76\x55\x4c\xc1\x11\x09\xaa\x07\x63\xc7\xf5\x3a\x25\xcd\xd1\x1c\xfc\x18\xcf\x74\xfd\x37\x14\xca\xf1\xd2\x9d\x36\xe1\x2a\x9d\x97\x3d\xd2\x6e\x4b\xe5\x7b\x85\x92\xe2\x1d\x9f\x25\x4b\xa7\xa7\xd4\x77\xcb\xd3\xde\x56\xa3\x40\x7b\x5f\x51\x27\x07\xb7\xd1\xd5\x4a\xb9\x8c\x81\x94\x68\xe5\xa4\x8d\x19\xfb\x9f\xab\xca\xe0\xd7\x63\xfd\xf3\x14\x25\xef\xe0\x0f\x4b\x37\xc7\xd2\xb8\x72\x8e\xfd\x92\xda\x39\xf6\xfb\x29\xaa\x0e\xe9\xe7\x9c\x1a\x1b\x68\xe8\x9c\xbb\xf7\x55\x54\x74\xac\xf0\x2a\x3a\x3a\x0e\x6f\x2b\xe9\x58\xea\x8a\x5a\x3a\xb3\x48\x85\x9a\x8e\xb7\x58\x55\xf6\x26\x8a\x3a\x86\xdb\x12\x45\x5d\x33\x2f\xf9\xa2\x5b\x0d\x14\x75\x8d\x42\x79\x7d\xad\x97\x75\x9e\xdb\xbf\x55\xc8\x83\x17\x5f\x85\x40\x64\x09\x9b\x44\x78\xfa\x8a\x44\x62\x17\xaa\x20\x13\xd9\x6e\x75\xf9\x1b\xe9\x74\xb9\x24\xd5\xe4\xc1\x9c\xa7\xbd\xbb\x7d\x2a\xa7\x46\xd9\x80\xee\xee\x3e\xf4\x48\xe5\xe3\x1d\x0f\x1f\x46\xfe\x6d\xa3\xbc\xb9\x63\xdb\x11\xcd\x8a\x20\x4a\xfc\xce\x6d\x1d\x44\xf2\xdb\xa4\x1a\xa2\xe6\x40\x7d\x33\xbd\x9a\xac\x45\x11\x2b\xa3\xd6\x15\x44\x41\xb3\x19\x3b\xf2\x47\x63\xa8\xd9\xec\x77\x28\x5c\xd6\x92\x49\x74\x4e\x13\x69\xd2\x62\x1e\xa9\xcb\x7c\xe5\x5a\xf6\x2f\xfc\x98\xad\xcd\x6d\x01\xcb\xbc\x72\xa7\x5d\xbf\xf1\x2d\x86\x68\xbe\x44\xb8\x67\xda\x56\xe1\x15\x8e\xd3\x73\x9a\x65\x17\x59\x54\x14\x14\xcc\xbd\x78\xaf\x5a\x64\x03\x7a\xdf\x18\x77\x17\xa0\x65\xcf\xf1\x2b\x7e\xb0\x82\xd0\x47\xd1\x28\x11\x28\x2c\x5c\xa7\xc3\xf6\x43\xfb\x46\xc8\x74\xb5\x92\x56\x73\x5a\x6b\x5b\x82\x37\x8f\xff\x00\x3f\x06\x07\x03\x50\x85\x07\x33\xb6\x2a\xc0\xe5\xa1\xd0\x66\xb1\xf1\x32\x4e\x40\xf9\x1d\x43\x1c\x7d\xa6\x24\x20\x79\x94\x4c\x62\xaa\x9c\x70\x01\x64\xdf\xb0\x87\x06\x0a\xe6\x3e\x66\xb8\x4f\x0e\xde\xda\xf5\x35\x39\x69\x9f\x6c\x9d\xb6\x4f\xbb\x4a\x18\xac\xf1\x01\x20\xba\x67\xe2\x9d\x7d\x61\xbf\x86\x25\xa2\x3b\xb7\x81\xe2\xa8\x00\x5b\x85\xad\x1e\x79\x04\xc6\xd8\x9b\xd0\x97\x2d\xec\x85\x46\x77\xc8\x11\x64\xa5\x97\x86\x9e\xf4\xeb\x50\x76\x5a\x90\xde\x1c\x1e\x4a\x40\xdd\xc0\x60\x40\x82\x38\x26\x67\x41\x1e\x8d\xb8\xf3\x03\x78\x29\xb0\xb3\x2d\x14\x38\x71\xca\x4e\xc6\xb2\x37\x3d\xb2\xb3\x5d\x67\x74\x62\x2e\x6c\xc1\xd1\xe4\x09\x5c\xea\x22\x09\x9d\x80\x00\x09\x11\xa1\x4e\x4e\x5b\x64\xef\x07\x58\x9f\x3a\xed\x31\x4f\xac\x54\xa6\xed\xcb\xda\x56\xe5\x00\x53\x5a\xda\xb3\x8a\xd5\x8e\x5b\x2d\xa5\x59\xed\xf3\xcb\xf0\x06\xe3\x10\xdd\xae\xb5\x8d\xa2\x22\x0f\x1e\x10\xfc\x7d\x82\x7e\x23\xff\x6f\xa7\x72\xd7\x55\x61\x31\x06\x93\x1b\xcd\x8d\x58\xbe\x55\x53\x23\x67\xc1\x9c\x1b\x31\x61\xe6\xd4\x20\x77\x6b\xb7\x9c\x19\xab\x5f\x15\x13\x83\xda\xfc\xda\xf3\x72\x97\x13\x63\xfa\x3d\xd1\x8c\x14\xcd\x04\x9c\x8d\x5a\x60\x8b\xb0\xcd\x91\xce\x0f\x49\x2d\x61\xac\xb0\x25\xa6\x62\xeb\xb1\x02\xdc\x3e\x3d\xd9\x11\xa0\x32\x8d\x83\x28\x88\xad\x53\x2b\x41\x7f\xbb\xbb\x03\x60\xf5\x06\xdb\x03\x1e\x8b\x18\x62\xfd\x9e\x80\x1a\xbb\xa3\x89\x8c\xc6\xa4\x83\xb2\x10\x87\xb4\xf9\xf1\x0d\x27\x16\x18\xb6\xef\x35\xc4\x56\xc5\x94\x8b\x4d\x42\x9e\xaa\x7d\xf3\x0c\xf3\xe6\x9b\xea\x96\x0a\xbe\xe7\x4c\xb8\xf8\x6c\x19\xf3\x6e\x54\x74\x62\x56\x8e\xa7\x5b\xbb\x5e\x6b\x34\xcf\x2a\x83\x0f\x45\xe4\x97\xce\xaf\xe1\x42\xb1\x74\xb7\x17\xae\x8a\xe2\x20\x2f\xc8\xc9\x29\x13\x26\x78\xbd\x37\x9a\xf6\x75\xff\xbc\xab\x39\x00\x39\x8b\x38\x0e\x96\xe0\x40\xa3\x9f\x41\xc1\xa7\xa2\x81\x26\x44\x52\x61\x1c\x8b\x8e\x30\x8a\x03\xdb\x37\x4d\xe4\xec\x8a\x84\x74\x1c\x2c\x62\x50\x84\xe6\x0b\x26\xa7\xaa\x8d\xb9\x25\x7c\xd4\xf4\x44\x8c\x47\x7b\x16\x8d\x63\xd4\x0d\x18\xb0\xde\x11\x57\x14\x85\x1b\x9e\xde\x4a\x8d\xea\xa5\xa3\x76\xa9\x23\x46\x4b\x24\xb7\xd7\x08\x50\xbc\x20\xe5\x93\x16\xa3\xf8\x1e\x69\xb1\x45\xc0\xfe\x3b\x6d\x9d\x6a\x6a\x17\x10\x28\x0d\x0a\x25\x8b\xd8\x7e\xf6\x80\x66\xb3\x11\xda\x6c\xef\x72\x56\x7f\x6b\x16\x82\xeb\xa1\xca\x59\x09\x7c\x6f\x10\x9e\xf2\xf8\xac\xe7\x70\xc3\xcb\x86\x63\x8c\x97\xfd\x0b\xab\xde\x22\x62\xc1\xad\x3a\xff\x3e\xe1\xa7\xf1\x7f\x9f\x76\xeb\x45\x04\xa1\xbc\x55\xae\x1e\xca\xef\x1d\xac\x18\x16\x12\xba\x39\xeb\x90\x0f\x4f\xdd\xbb\x2c\x0b\x67\x9e\x4b\x0b\x71\x8f\x6e\x6f\x0c\x5e\x67\xd4\xe6\xad\x8c\xf0\x83\x2a\x3d\xa0\xda\x6c\xa1\xc6\x15\xac\xb2\xff\xc6\xc6\xc4\xbb\xa4\xf4\xcf\xef\x15\xd5\x75\x2a\x4b\xe3\x31\x76\x26\x2b\x58\x99\x53\x48\x3d\x4b\x3e\x39\xf5\x79\x10\xef\xcf\x17\xf9\xb4\xe3\xb8\x25\x95\xcf\xb4\xa5\x8f\x51\xb7\x66\x36\x16\xd7\xe1\xfa\xb9\xcf\xfb\x27\x6e\x09\x39\xf1\xec\x9c\xf7\x08\x76\x2e\x6b\xf9\x26\xbd\x95\x47\x5f\x31\x81\xd8\x93\xef\xad\xe7\x0f\xba\xee\x48\x1d\x02\xf1\xbf\xff\xfc\xf9\xdc\xb1\xd6\xb8\x61\x2d\x9d\x08\x36\x9b\xe0\x27\xb5\x62\x3e\x56\x9e\x8d\x35\xe7\x8e\xd0\xd2\x1d\x19\x4b\x12\xb9\xb3\x6d\xe2\x10\x94\xdf\x8f\x8e\xb3\x74\xe6\x35\x37\xe0\x50\x3e\xde\x72\x66\x3f\xd8\xb1\x0c\x84\x0c\xcb\xa0\x15\x1e\x4c\x49\xa6\xc6\x5b\x6e\xc0\xa2\xc4\x40\x30\x8b\x32\x9c\x69\xd6\xb0\xaa\xaf\xc2\xab\x60\x6f\xc2\x37\x96\x5c\xd0\x15\x4f\x7c\xa0\x7b\x52\xd0\x11\xe8\x7a\x48\xb6\xc1\xf8\xa1\x2b\xdd\x39\x0b\xe4\x95\x2d\xa2\xca\x3a\x71\xf3\x4e\xc5\xbe\x15\x05\x05\x3e\x14\xfc\x8e\x1d\x97\xde\x20\x3b\xdc\xe3\x3d\xdf\x6d\x73\x06\x92\x93\x60\x5c\xd0\x4c\x2d\x12\xdc\xdf\x1b\xad\x55\x7f\x19\x9f\xe3\x6e\xcd\x39\x4a\x1c\x76\x93\x4a\xec\x89\xb8\x31\x6f\xcb\xea\xc7\x4e\x3d\x4a\x7d\x48\xdb\x01\x6f\x2a\x19\x4d\x43\x4e\x43\x1e\x56\xf7\x8d\xc1\x6e\xec\x55\xc3\x34\x62\x54\xa6\xb7\x59\x34\xed\x1b\x24\xba\x5b\xae\xf5\xa7\xd8\x43\xf0\x5f\x43\xea\x97\x06\xa9\x0d\xff\xfe\x54\xc4\x7f\x4f\xfb\xe8\xef\x0f\xa1\x7d\xe2\x25\x7d\x1c\x9d\xf1\xa6\xa4\x6f\xc7\x10\x5b\x71\x53\x71\x88\xd5\xae\xbf\xd9\xce\x62\xf6\x62\x95\xfa\xc5\xfc\x79\xe9\x2d\x76\xe8\xcb\xbf\xfe\xca\x97\xf0\x5c\xdc\xfa\xb9\x46\xaa\x75\xdd\xef\x90\x2d\xb2\x61\xf6\xae\xcb\x1d\x32\xf1\x30\x62\x9e\xa9\xe7\xee\x87\xad\x4b\x37\xe3\xc1\x76\x85\x33\x7b\x03\xd7\x96\xc5\x97\xc1\xc5\xd6\x56\x1c\x1b\x9e\x73\xb5\xb2\xb6\xbb\xa6\x5a\xd5\x7b\x91\x68\x75\xbd\xf6\x82\xb7\xfc\x6a\x57\xbd\x89\x5b\x9e\xf6\xb6\xfe\xe8\xb8\xfb\xc7\xf5\xcf\xde\x16\x15\xef\xde\x84\x27\x12\xf8\x9f\xdb\xba\x2c\xf4\xd3\xb7\x05\x7a\xfb\xb6\xc0\x0f\xd6\x16\x9e\xd7\x6f\x0b\xf5\xfc\x6d\x81\xde\xbf\x2d\xd0\x03\xb8\x85\xf9\x02\xce\xa9\xb1\x81\x85\x8d\xe3\x1f\xe5\x2b\x3e\x82\x3b\xf6\xbe\x82\x3b\x5e\xfd\x19\xdc\x71\xd3\x77\x70\xc7\xee\x43\xb8\xe3\x3b\x78\x09\xb7\xb8\xf5\x53\xb8\xe3\xc6\x6f\xe1\xfe\xe8\xa0\xfe\xc7\x0d\x2c\xce\x16\x55\x26\x67\xd2\xb5\x0a\xff\x21\x88\x13\x59\x9d\x2d\xb0\xd9\xd9\xc2\xb0\x12\x5b\xf8\x0c\xcf\x16\xda\xf2\x6c\x81\x4d\xcf\x16\xd8\xf6\x6c\x61\x19\x9f\x79\xea\x6d\xb2\x38\x7e\x57\xfb\xb3\x63\xbf\x01\xda\xf1\x0d\x2c\xd0\x8e\x1b\x9b\xa0\x1d\x7b\x6c\xd0\xec\xd2\x37\x5b\x23\x15\x66\x68\x4d\x17\x49\x73\x43\xb4\x6f\x9b\xac\x92\xf6\x22\xa7\xa0\x98\x1d\x15\x6d\x1e\x8d\x6f\x92\x12\x9a\x9c\x93\x30\xa5\x60\xad\x00\xaf\x03\x83\x24\x04\x07\xb6\xe4\x9f\x6f\x5e\xbf\x2a\x8a\xf9\x7b\xfa\xff\x16\x34\x2f\xd6\x40\x30\xbb\x9a\xd3\x74\x6c\xe5\x70\x3f\x36\xea\xfd\x46\x5b\xe2\x45\x34\xdc\xb7\xa1\xc9\x97\xe5\xee\x9a\x11\x29\xb2\x14\xd2\x4c\x00\x49\xfd\xd7\x7c\xca\x76\x9f\x68\x92\xa4\x19\x1d\xc6\x51\x42\xd7\x96\xdc\x62\x95\xe1\xa1\x91\xab\xfb\xfb\x97\xb3\xf7\x2f\x67\xff\xc2\x2f\x67\xf9\xab\x59\x61\xc3\x66\x3c\x9b\xe5\x1b\x0e\xb9\xd9\xeb\x59\xb1\xf7\x1d\x17\x51\x0c\x75\x72\x7d\x26\xac\x1d\xfe\x3c\xc9\x01\x8b\x8a\x2b\xc5\x12\x75\x91\x51\x1c\xe4\x39\x39\x81\x22\xa7\xa2\x9b\x3c\x43\x33\x61\x5e\xd5\xda\x00\xee\x8d\x60\x95\x0a\xe5\x2a\xe3\x20\xa4\xc2\x93\x75\x73\x27\xe7\x00\xc9\x6a\x3a\x7e\x7b\xf8\xf1\x03\x3b\x5b\xc3\x24\xb4\x2f\x68\xd4\xe6\xa4\xd9\xfe\x8c\x7e\xbf\x41\xbf\x7f\x42\xbf\xf3\xdf\x82\xb3\x54\x7e\x8c\xa3\x24\xa1\x57\xea\x8b\xce\x8a\x14\x9e\x32\xca\x94\x79\x34\x32\x13\x92\x20\x31\x13\x66\xd1\x28\xb3\x53\xe2\x38\x72\x0a\x19\xf0\x06\xa8\xfc\x30\x8a\x4c\xb2\x20\x09\xd5\x50\x8c\xac\x9f\x8c\xaf\x8f\xc6\xd7\x3b\xe3\xeb\xa5\xf1\xf5\xbf\xc6\xd7\xbf\x8c\xaf\xb7\xc6\xd7\x0b\xe3\xeb\x67\xe3\xeb\x98\x7f\xad\x9d\x96\xbb\xae\x61\x73\xf4\x6e\xff\x05\x9b\xe2\x21\xd9\xd9\xee\xa9\xc4\x0f\x87\x3f\xbd\xdd\xff\x78\xfc\xfe\xe5\xa7\xd7\x2f\xdf\xfe\xf4\xf1\xd5\x90\x3c\xd6\x99\x30\xab\x43\xfd\x53\xe7\x94\x50\xce\x90\x7c\x21\x56\x82\x76\xa2\x0e\x19\x9f\x5e\x1c\xfd\xf2\x96\x2c\x75\x4d\xef\x8e\x5e\xbf\x66\xd0\x1f\x0f\xdf\xbc\x3c\x3a\xfe\x38\x24\x5b\x9b\x9b\x9b\x03\xd1\x43\x71\xe3\xfd\x3c\x4e\x47\x9f\x87\xa4\xcd\x58\x67\x5e\xb4\x8d\xbc\xfd\x11\xc4\x31\x1e\xea\xb7\x8d\xfc\x01\x06\xdb\xcf\xeb\x7c\x9f\xdc\xc7\xc1\xb8\xdf\xc8\xfe\xee\x1b\xd9\x9a\x72\x01\x91\x4f\x83\x9d\xbb\xf2\x00\x71\x90\x5d\xcd\x8b\xf4\x1f\x1f\xf0\xe6\x30\x82\xb4\x47\x3a\xfc\x05\x6b\xd0\x0b\x30\x60\x39\x6d\x6f\x68\x27\xd7\x7d\x03\x50\x5c\x8e\x1f\xa8\x8a\x24\xf2\xe0\x81\xcc\xed\x4b\x7f\x11\x5c\x4c\x9e\xd2\xcb\xb6\xfd\x8a\xce\xf0\xfc\xf5\x03\xd9\x66\xa5\x6d\xd7\xc7\xdb\xd2\x5d\xa4\x59\x9c\xc8\xcb\x70\x75\xc1\x6f\x39\x67\x27\xd6\x6b\x3b\x0e\x2a\x71\xc4\x3a\xd7\x7f\x45\x2f\xfb\xa0\xbd\x14\x9e\x7b\x7d\x36\x46\x0c\x2b\x72\xd8\xba\x75\x7e\xa2\xe3\xea\xb7\x21\xd9\xfe\xe6\x09\x2f\x89\x1e\x27\xcb\x37\x67\x8c\xe5\x29\x1c\xb7\x86\xdf\x7c\xd7\x6b\x99\x28\x6f\x0d\x9f\x6e\x2e\x4f\x7b\xdb\x8d\x7c\x3e\xdd\xf3\xbd\x7b\xbe\xf7\xd7\xe5\x7b\x9a\xed\xf1\x77\xfe\x77\xc0\xf7\x2c\xd9\x7d\x75\xd1\xdd\x23\xb9\xcb\x82\x3e\xc1\x7d\xa5\x50\x43\x36\xaf\xed\x0f\x04\xbb\xd7\xb1\x88\xc6\x4f\x31\x00\xfb\x56\x22\xfc\x22\x89\x8a\x37\xc1\x5c\x89\x8b\x6d\x29\x51\x0f\x39\x0f\x6a\x6f\x4a\x59\x93\x49\xed\x43\xcd\x16\xdb\x5b\x86\x9c\x3f\x44\x19\x9b\x9b\xaa\xd0\xff\x54\xe4\x9d\x05\x67\x67\xc1\x84\xaa\x96\x70\x1e\x12\xfe\x87\x76\xde\xcc\x53\x27\xca\x7e\x53\x9d\x1d\xa7\xe7\x34\x0e\x46\xb2\x59\x3b\x5b\x9f\x31\x86\xbe\xec\x89\xbf\x72\x04\xf1\x53\x2d\x44\x3e\x0d\x92\x24\x4d\x8c\x71\x9b\x10\xfa\x5c\x33\xac\x80\xa8\x69\x05\x4e\x56\x43\x0f\x04\x46\xa5\x3e\x2f\x0d\xab\x81\xea\x6a\x12\x67\xb7\xa1\x17\xc8\xa8\x4c\x9d\xc7\xec\xb1\x79\x00\xfd\x43\x34\x01\x0d\x72\xf5\xc0\x21\xd0\xcf\x26\xac\x0f\x14\xcf\x35\x9c\xfa\x2a\x2b\xc6\xfd\x6d\x54\x37\xae\xbe\x69\x01\x54\xa6\x58\xa1\x0c\x2b\xe6\x37\xb6\xd2\x8e\x18\xe6\x41\x28\x4c\x49\xc1\xd4\xf3\x72\x4e\x47\x6c\xf3\x52\xe6\xf9\xd8\xe8\x4a\x78\x4f\xf1\x59\x4e\xe9\x2a\xce\x28\x83\x0b\x45\x38\x2e\xcb\x06\x6b\x34\x0d\xb2\x60\x54\xd0\x2c\x97\x2a\x7e\xb8\x97\x17\xa5\xd1\x3e\xe2\x6d\x23\x9a\x24\x3d\x64\x0b\x4d\x36\xd7\xfc\x6e\x3f\xa2\xc9\xb4\x20\xd2\x23\xad\xe5\xdd\x57\x8c\xc1\x90\x36\x39\x48\x0f\x7a\x97\xf7\xa0\x1d\x8f\x8f\x21\x6e\x21\x02\x30\x10\x91\x16\x5e\xab\xaa\x1b\xe2\xad\x6e\xff\xd7\x34\x4a\x20\x58\x03\x79\x06\x75\x90\x21\x69\x6d\xb6\xba\x64\x43\x00\x97\x18\xbe\xdd\x78\x2e\x20\x5a\xcf\x5f\x7d\x32\x60\x10\x2b\xce\x86\xe8\xe1\x06\xf7\xb8\x7c\xd3\x79\x29\x33\x44\x34\x1d\xd1\xc0\xd6\x09\x66\x88\x10\xc9\xc3\xf5\x31\x6d\xcd\x0b\xf7\xd6\x5c\x31\x2b\x51\xc2\x2a\xf1\x23\x0b\xfb\xa3\xf6\x38\x4a\x62\x8d\x6b\xb3\x43\xee\x81\xe4\x98\x6f\xed\x4a\xa4\x9f\xf2\x60\xcf\x83\x01\xf9\x31\x4a\x42\xc2\x1f\x77\x89\x8e\xaa\x60\xcd\x4c\xa2\x68\xb5\xf4\x4d\x3e\xd8\xbe\xf4\x20\x7e\xd4\x94\x5e\x4a\x13\x66\x75\xe6\x62\x69\xfc\xd4\xc3\x4e\x1c\xe5\x67\x25\x56\xcd\x36\x7e\xf7\x02\xc6\x35\xc2\xa6\x66\x97\x44\x1b\x7b\xdb\x18\x5c\x06\x42\xc6\xb6\x1d\xba\xa9\x4e\xc4\xda\x11\xa1\x2f\x54\x0b\x63\xd2\xe1\x45\xf6\xf6\xc8\x66\xd7\x38\xa5\x9d\x65\x34\xf8\xac\x41\xd9\x28\x37\xf6\x88\x78\x55\xce\x66\xf0\x60\x1a\x64\x07\x69\x48\xa1\x06\xef\x21\x8c\x4d\xb6\x34\xc7\xc9\x8b\xac\x19\x85\xf0\x49\x5b\x89\x44\xf6\x59\x91\xdf\x8f\x46\xa0\xb9\xff\x1c\x22\xb9\xc9\xcc\xe7\x45\xd9\xeb\x74\x73\xb2\x3d\x3e\xe6\x3b\xf3\x8c\x8e\xa3\x4b\x1e\x41\x6b\xf3\xb2\xcb\x66\x01\xb8\x86\xdf\xbd\xbd\x08\xf5\x56\x3e\xfb\x5e\xdb\x65\x38\x82\x06\x31\x70\xf3\xca\x60\x02\xbe\x10\x9f\x86\xaf\x7d\xe1\x76\x5d\x74\x03\x53\x05\xa3\x78\x81\x79\x3e\xfb\xb0\x1c\x84\xd9\x36\x5f\x0e\x72\x46\x58\x4b\x9a\x3a\xc6\x69\x66\x9b\xd0\xe5\x45\x56\x16\x0e\x1f\xcd\x28\x83\x1a\x89\xb9\xd9\x2f\x3a\xd1\xcd\x56\x3a\x58\x27\x8a\xc8\xe0\x86\xd7\x36\x0d\xc2\xfa\xbb\xb1\x47\x12\xb9\x2f\x7c\x4f\xb6\xc9\x33\x76\xb2\x21\x1b\x84\xed\x07\x89\x8f\x26\x84\x0b\xf9\x29\xbd\xbc\x4b\xd2\xb0\x62\x0e\xd8\xb4\x51\xc3\x1a\x7e\x37\xe2\x70\x78\x06\xa2\x8e\xdf\x87\x02\xfe\xb0\x69\xb5\x3c\x96\x8e\x17\x71\xac\xd0\x30\xa0\xe7\x34\x29\xf8\x43\x01\x60\xf9\xbf\xe6\x69\x42\x82\xb3\xc8\xe6\xf1\xd2\x6d\xe2\xc7\xf4\xc7\x45\x1c\xdb\x6f\x28\xe5\x63\x02\x56\xfa\x11\x2f\xed\x3e\x86\xe2\x0d\x3b\xed\x6a\xc6\xee\xb6\x61\x08\x52\xac\x72\xac\x3a\x65\xdf\x7d\x30\xa1\x88\x92\x90\x5e\x1e\x8d\x3b\xed\x4e\xbb\x0b\xbe\x21\x1f\x6d\x79\x9e\x43\x2a\x78\xc7\x4e\xb0\xb8\x9a\x53\xd1\x1c\x00\x01\x15\x99\xfe\xcc\x3a\x51\xf7\x8b\x8c\x1f\xdc\x67\xf0\xbb\x64\x29\x44\x31\xd3\xf2\x4f\xb5\x42\x36\x48\xbb\xc3\x66\x4e\xd5\xbe\x41\xda\xdd\x76\xa3\xb5\x17\x46\xf9\x3c\x0e\xae\xf8\xbc\x80\x8f\xd1\xa4\x60\xb2\xad\xc2\x86\xfd\x66\xed\x12\xb2\x5f\xf0\x62\x55\x2f\x5c\x59\x6d\xe6\xe4\xfb\x97\x97\xd1\x03\xb6\xa5\x59\x14\x43\x27\x7d\x19\x6c\xf1\xaa\x23\xcc\xea\xba\xe4\xd1\x0f\x2a\x51\x4d\xab\xdb\xb7\xca\x87\xcf\xca\x66\xd3\x99\x59\x03\xcd\x02\x8c\x4f\x36\x79\x66\xbf\x69\x15\xef\xc1\xd8\x9a\xd1\xce\x46\x06\x03\x3d\xd0\xf4\x9c\x66\x71\x1a\x84\x34\x54\x8a\x60\xcf\x9a\xc0\x03\xf8\xa8\x89\xa4\xec\x4d\xe3\x80\x7c\x3c\x7a\x71\x34\x24\xb3\xe0\x33\xa8\x86\xa3\xe4\x7c\x11\x27\x34\x0b\xce\x62\x7a\x97\x03\xd4\xa7\x01\xfb\xf5\xee\x16\x79\x44\x50\x76\xb7\xdb\xcf\xe8\x3c\x0e\x46\xb4\xd3\x26\x6d\x70\xea\xc6\x4e\x0b\x2d\x33\x42\x64\x9a\x9c\xd3\xac\xc8\x75\xbc\x4d\x90\xfb\x42\x3a\x8a\x66\x41\x6c\x33\xd9\x28\xf1\x33\xfb\x22\x7d\xc1\x0b\xb8\x94\x57\x19\x3b\xd3\x74\x6b\xc8\x05\x3c\x51\x53\x6d\xf4\xc7\x22\x75\x83\x63\xaa\xf0\x33\x4d\xc6\x58\x2b\xdb\x32\x9e\x78\x57\xe3\x42\x75\x55\x47\x66\x4d\xa4\x96\xd4\x1d\x9f\x27\x2e\xb7\x50\x9f\x9a\x3b\x8a\x71\xd8\xe7\x00\x31\xcd\xf3\x8f\xd3\x20\xe9\x6c\x82\x13\xd9\x47\xdc\xea\x5c\x58\xef\x0b\xc2\xda\xea\x42\xec\x56\x94\x63\x60\x71\x7f\x01\x6e\x9a\x05\x2a\x83\xe4\x4a\x38\xde\x11\xee\x48\x93\x72\xb4\xf6\x05\x5e\xf7\x93\x90\xab\xff\x39\x0d\x45\xe3\xab\x5c\x38\x52\xcf\xc9\x19\x1d\xa7\x19\xed\x3b\x74\xf5\x4a\x1c\x1d\xaa\x71\x7f\x2d\xf6\xa0\x1a\xd2\x7a\x05\xfb\xbc\x81\x7c\xb5\x7e\x1f\x0a\x53\xb1\x59\x70\xc9\xc3\x56\x5e\x46\xc5\xd5\x90\x3c\x05\x15\xb6\xdc\x75\xa2\x5c\xb8\x34\x86\xa2\x5d\x7b\x93\x41\x93\xdc\xd9\x60\x10\xbb\x46\x51\x3c\x9d\xd5\x85\xad\xb2\xc2\x90\xee\x9c\xd1\x0e\x3b\x85\x70\xa4\xb5\xbd\x55\x40\x7c\xa5\x7f\x7c\x38\x7a\xdb\x57\x58\xe6\xed\x69\x07\x96\xe0\x3a\x36\x27\x81\x1d\xca\xb3\x47\xe6\x41\x9e\x33\xde\x55\x4c\xb3\x74\x31\x99\x9a\x2b\x40\x0d\x44\xd0\x1a\xd4\xea\x5e\x4e\x6a\xae\xf6\x08\x4e\x4b\x1e\x99\xb7\x74\xc4\x12\x40\xbc\xed\x30\xab\xab\xa9\xed\x5c\xda\x8f\xa2\x0a\x48\x67\x3d\xca\x7f\x8c\x92\xa8\xa0\x16\xd2\xad\x6e\x80\x84\x88\x3a\x61\x4a\x59\x6e\x47\xd1\xba\x78\x2f\x36\x15\xbe\x0e\xd8\x79\x29\x01\xee\x4f\x7e\xa1\xb6\x20\x35\xa1\x05\x84\x2b\x3e\x1a\x1f\x27\x91\x57\xdb\x05\x65\x8b\x29\x15\x3f\xd4\x82\x23\x45\xda\x53\xda\x29\xe5\x10\xdd\x1b\xb5\x51\xf5\x43\x55\xd3\xe1\x9d\xe9\x42\x11\x70\xdb\x95\x13\x9a\x65\x69\x26\x5d\xd2\xf0\x1e\xe7\x24\x49\x0b\x32\x4a\xb3\x8c\x8e\x8a\xe1\x85\x5a\x37\x66\xaf\x8d\x05\xc4\x0a\x4a\x12\x58\xf0\x4c\xf8\xef\x19\xfc\xd7\x2f\xd2\xd7\xe9\x05\xcd\x0e\x82\x9c\x76\x80\xb9\x70\x7d\xaf\xe6\x63\x0c\xea\x67\x71\xcb\x2c\xae\x6e\x4e\xd8\xff\xa7\xfa\x28\x8e\x40\xb0\xdf\x6f\x4c\x78\xdc\x13\x59\x42\x2f\xc8\x4b\x36\xaa\x4e\x1b\xae\x7a\xa1\x23\x60\xab\xfa\xef\x76\x41\xe8\x65\x94\x17\x79\x8f\xcc\x63\x1a\xe4\x20\x16\xc3\xc8\xd3\x44\xa1\x6a\x9c\xc6\x71\x7a\x11\x25\x13\x28\x99\x33\x2e\x68\x2d\x23\xd1\xc3\x1e\xf8\x57\xe8\xe9\x67\x1f\x15\x51\x62\x55\xef\xc1\xfb\x95\xe9\x55\x38\xf8\x4c\x61\x11\x72\x86\x0f\x97\xd1\x11\xd8\xd3\x2a\x26\xcb\x49\x80\xb1\x5a\xf0\x55\xc1\x27\x9e\xa3\x56\x50\xd6\xbb\x34\xcf\xa3\xb3\x98\x4f\x21\xb8\xd0\x10\x46\x7d\x1f\x0e\x99\x7c\x99\x15\xfc\x27\x13\xa9\x25\xb6\x5e\x8e\xc7\xd1\xe4\x4a\x7c\x1c\x49\x52\x7a\x44\x3e\xb3\xe6\xf9\x9f\xbe\xae\x82\x4f\x71\xb3\xc5\xc1\x66\x1a\x4c\x5d\x2e\xf1\x4f\x79\x15\xc5\xe1\x26\x1a\x4e\xdd\xff\xf0\x4f\x71\x61\xa4\xf3\x78\x81\x47\x8f\xd4\xc2\xd4\xf7\x38\xbc\xc0\x6f\xc1\x59\x6a\xe4\x79\x4a\xc8\x7b\x18\x3e\x00\xb8\xbe\xc1\x79\xbc\x04\xea\x05\x2a\xcc\x3f\x05\x16\x10\x08\xb1\x20\xd0\x07\x5c\xa6\x08\x84\x50\x8d\xc3\x09\xfa\x5d\xc8\xdf\xb6\x48\xc1\xf9\x82\x75\xf2\xbd\x56\x72\x3a\x27\x87\x51\x90\xb0\x93\x41\xa0\x58\xb3\x48\x17\xba\xb2\x34\x23\x01\x79\xf5\xf2\x9f\x70\x08\x97\xd2\xda\x9d\x31\x14\xb5\xcf\xca\xa3\xdd\x2f\x53\x2a\xfd\xec\x05\xe8\x2a\x57\x44\x41\x41\xc1\x02\xd8\x7a\x0a\x72\x72\x41\xd9\x02\xd1\x0e\x56\xe4\x30\xd6\x90\x34\xf4\x0b\x35\x8e\xe4\x72\x9c\x98\xa5\x70\x51\x87\xd5\x2c\x99\x04\x16\x8a\x78\x09\x1c\x35\xd6\xe4\x54\x9c\x3b\x59\xf2\x10\xde\x86\x45\x05\xe4\x99\xd1\xc8\x10\x7f\x21\xc9\xaa\x76\xf9\x06\x1c\xc7\x9e\x15\x7c\x41\xa3\xfb\x05\xfb\x9f\xb2\xc4\x8b\xb4\x6a\x81\xa3\xf3\xc2\xef\xb6\xd4\xd9\x6a\xfb\x03\x17\x3b\x20\xe4\x6e\x96\x7a\x11\xcd\x68\xfe\x47\x2c\xf3\x44\x28\x17\xd9\xe2\x56\xaa\xaa\x9c\x1f\xf3\xd9\x16\x4d\x94\x29\x8b\x43\x0d\xaa\x23\x8d\x68\x42\x53\x81\xbc\x3a\x64\x53\xaf\x49\xc1\xac\x4d\x39\xb9\xd2\x15\x68\x00\x85\x7e\x6c\x7b\x63\x4d\x42\xcd\xf1\xe7\x1b\x26\x03\xc2\xaa\x97\xe5\xc5\x8f\xeb\x6b\xb2\xb9\xeb\x3d\xdb\x88\x7a\x9d\xb3\x09\x4f\x37\x0e\x44\x02\xe5\xb2\x27\x0f\x1e\x10\xf1\xdb\x27\xf3\xb3\x26\xed\x5c\x7c\xc0\xf0\xb9\x40\x33\x44\x31\x51\x58\xa9\x44\x36\x2f\xdb\xbd\x76\x1b\xdf\xb7\x58\x8e\xd2\x7c\xa5\x31\x9d\x94\x8a\x74\x89\x0c\x1d\xeb\xa1\x14\x45\x27\x1c\x4c\x06\xf1\x50\x27\x31\x61\x35\x09\xb0\xc5\x45\xda\xce\xc9\x48\x85\x74\x71\x48\xcb\x8c\xf8\xd2\x84\xbe\x4a\xa8\x06\x9d\x91\xcd\x3a\x4d\x7d\x97\x41\x32\x0c\xfc\x0c\x51\x96\x6f\xbd\xc2\x8b\xef\x0e\x72\x5a\xa7\x0a\x60\x8d\x44\xed\xd4\xb5\xc6\xb7\xfc\x6b\xc1\x2c\xf7\xe7\xf1\x22\xd7\x5d\x10\xdf\x5e\xef\x86\x0a\xc8\x54\x24\x4d\xe9\xe8\x73\x2e\x4f\x4d\x9c\x45\xca\x5b\xce\x5c\xbc\x95\x8b\xaf\xc0\x8d\xaf\x37\x18\x31\x27\xf9\x91\x37\x10\xb1\x19\x52\x18\x35\xc0\xd6\x7f\x80\x0a\x60\xc7\x76\x10\x5c\x49\x4c\x9d\x55\xb9\x31\x73\xa2\xbc\xa5\x41\x1b\xfc\xdf\xe6\xe5\xc9\xe6\xa3\xef\x82\x47\xe3\xd3\x2f\x8f\x37\x97\xff\x35\x88\xfa\x05\xcd\x0b\x05\xbe\xc2\xe0\x2b\xc6\xfc\x95\x46\xdb\x60\x9c\xa0\x00\x18\xfc\x5f\x67\xf3\xb2\xfb\xac\x72\xa0\x98\x02\x07\x03\x1d\x2c\x8b\x87\xc3\x82\xee\x71\x17\xc2\xc2\xea\x70\x06\x0f\x79\xd9\x86\x8c\x86\x6d\x52\xb0\xf0\x04\x48\x4c\x5f\x15\xde\xce\x98\x7d\x61\x8c\x0e\x81\xed\x3f\xfa\xd1\x0b\x66\x75\x19\x62\x77\xb5\x73\xf0\x76\x9c\xcf\xd8\xbf\xa3\x60\x9e\x83\xf0\x20\x7e\xf7\xb0\x7b\x46\xbb\xb7\xdc\xeb\x3c\xea\xac\x51\xf9\x91\xda\xdb\x39\x66\x68\x30\x9a\x92\x51\x90\x3b\xd5\x44\x39\xa7\x92\xc5\x4c\xcc\x0e\x22\x25\xbe\xc6\x9a\x13\x14\x6f\x2b\x5f\xcc\x66\x34\x2c\xa5\x2d\xab\xb9\xbb\xa6\x31\xab\xfa\x2a\x5a\x1b\x0c\xf8\x80\x2c\xe4\x04\xaa\xa4\xf8\xe5\x6c\x40\x5a\x1b\x22\x20\x5e\x05\x39\xb8\xa2\x99\x06\x3b\xb2\x11\x53\x93\x22\x65\x1d\x9f\xbb\x97\xc7\x9b\x70\x43\x49\x2c\xf2\x00\xd7\xdd\xc5\x94\xc4\x14\x1e\x53\xa3\xf8\x7b\xf3\x39\xcd\x58\x6f\xe5\x3c\x24\x10\xbb\x70\x12\xf1\xf0\x76\x41\x4e\x67\xc1\x9c\xcd\xc7\x96\xa1\xe7\xeb\x28\xfb\x05\xd4\x69\x70\xca\xb6\xf5\xa4\x4b\x7e\x20\xdf\xb2\xdd\x5c\x64\x9d\x44\xa7\xfd\x22\x3d\x66\x0d\x09\x4d\xd0\xfa\xde\x1e\xca\x04\x8a\xaf\xae\xf0\xfb\x3d\x4f\x8d\x58\xb7\x64\xd5\x58\xe2\x29\x1c\xad\x49\xcd\xf1\x0d\xbe\xaf\xa3\x2f\x28\x32\x7d\x23\x0e\x7a\x92\x1c\x4b\x68\xb1\x48\xef\x94\x16\xa5\xf2\x5a\xed\xcb\x2b\x90\x22\x52\x19\x2b\xf2\xb3\x1f\x5d\x8b\x76\xda\x6d\x41\x4b\x2e\x9d\x1a\x08\xbe\x11\xd5\x22\xa0\x91\xd3\x7b\x56\x51\x05\x1d\xcb\x5e\xa0\x5b\x77\x9b\xa6\x81\xe5\x4d\xb5\xe5\x1f\xa3\xd2\xef\xd8\xb9\x67\xcc\xfd\xe7\xcb\x8b\x38\x45\xe2\x06\x05\xd7\x11\xb0\x49\x42\x76\xff\x37\xf6\x4a\xa9\x1b\xd1\x97\xcd\x4a\x6b\x6b\xaa\xa4\x4d\xab\xa4\x29\x79\x6a\x49\xd3\x60\xa4\x45\xca\x24\xca\x28\x24\xdb\x9b\xdc\x65\xd0\x23\x71\x3f\xc8\xdb\xe4\xcf\x13\x36\x2f\x09\xb7\xed\x70\x6d\xbb\x6a\x49\xd9\x7f\xd9\x2f\x9c\x0f\x60\xbe\xad\xec\xb7\x9a\xd1\xaf\x25\xcd\x78\xb7\x3d\xe9\x53\x57\xe2\x03\xc9\xf0\x7c\xaf\xad\xda\x66\x3d\x15\x89\xbb\x2f\x5f\x7d\x26\x84\x8c\xbc\x08\x37\x4a\xaa\x46\xfd\x98\xaa\x47\x1e\x6f\xfa\x2f\x09\xa4\x1f\x62\x79\x98\xce\xb5\x94\x5b\x1f\x63\xd3\x7b\x92\xf4\xdd\x7c\x19\x71\x37\xf9\x4e\xe6\x3b\x03\x92\x0e\xef\x86\x25\x16\xca\xbe\x25\x79\x11\x24\x23\xc6\x45\x74\xe1\xeb\x6b\x85\x34\x51\x18\x1e\xaf\xc1\x2f\xc3\x6f\x86\x37\x95\x9b\x46\x00\x2f\x52\x55\xb6\x9b\x22\x4a\x9e\x87\xeb\xb0\xf4\xc1\xb1\x2d\x6a\x88\x22\x4f\x84\x24\x2f\x7e\x04\x6b\x15\x3d\x83\xd1\xf0\xbe\xb5\xef\x0e\x3d\xbc\x2f\x8d\x71\x23\x7b\x5c\x8f\x9d\x1f\xb5\x0d\xc9\xaa\xf8\x91\x45\x6f\x84\x21\x59\xa2\xdd\x70\x44\xac\x4f\x45\xfd\x70\x78\xd7\x6f\x30\x98\x23\xd1\xb7\x86\x8b\x81\xc9\x17\xc9\x22\x8e\x21\x48\x42\xc7\x5d\x21\x60\xb7\x0d\x2a\x0c\xcf\xd8\xc5\x75\x6d\xc3\x91\x9f\xf1\xce\x36\x60\x07\x1c\xf0\x26\xcc\x80\x27\xdd\x68\x22\x45\xf7\x9a\x8e\x06\x3c\x00\xd6\x8f\xc5\x09\xa8\xd1\x70\x24\x6e\x50\x8c\x86\x2c\x0d\x0a\x56\x8e\xc1\x3e\x90\xf0\x7d\x14\x4c\xe4\x52\x49\x75\xe6\x20\xfe\x91\x9b\xeb\x4a\x1b\x20\x54\x8e\x81\x15\xb3\x1f\x0d\x28\xcf\x49\xd9\x95\xbb\x4f\xad\xaf\xc3\xc5\x24\x7f\x85\xab\x6d\x59\x97\x64\x04\x51\x9f\x3a\xd4\xb3\xb7\xe1\xe3\xe8\x2a\xa3\x0e\xc4\xb8\x5f\xb2\x09\xa4\x8b\x19\x39\x8b\xd3\xd1\x67\x32\xa5\x41\x48\x33\xf6\x91\xce\x6c\xa3\x8d\x28\x7f\xce\x92\x7d\x42\xc3\x94\x5e\x2a\xb7\xe8\x50\x96\x8c\xa3\xb8\xb0\x95\x99\x1e\x82\x05\x58\xc3\xfb\x30\x4b\xa9\x3c\xe7\x7f\xb3\xb5\xad\x0f\xfa\x1c\xbc\x06\x2f\xe5\xc7\x74\x5e\x17\xae\xca\x77\x4a\x77\xa1\x7c\x01\x87\xf5\x49\x7b\xcd\xed\xc7\x0d\x66\x26\x4e\x99\x98\x37\x8f\x46\xee\x3c\x7c\x64\xc9\x75\xf3\x50\x28\xa0\x8a\x09\x80\x9a\x8c\x09\x80\x62\x95\x13\xf0\xe4\xb1\xc6\x3f\x87\xbe\x31\xfe\xa1\x2a\x5c\x93\x0f\xfd\x0e\xd0\x8d\xb0\x5f\xe2\x77\x44\x88\x7c\x43\xf9\xa3\x27\x53\xe1\xcd\xcf\x50\xfd\xe2\xe9\x20\x18\x0e\xf9\x7f\x32\x45\x18\x90\x0c\xf5\x4f\x9e\x83\x8c\x4b\x86\xf8\x43\x96\x3b\x2e\xc6\x4f\x87\xe2\x7f\x99\x06\xe6\x2a\x43\xf9\x43\xd7\xc3\x61\xe5\x2f\x9d\x2e\xe0\xd5\x4f\x51\x8f\x6b\x73\x3b\xf4\x25\x72\x68\xd7\x94\x73\xe8\x49\x33\x60\xa5\xd5\xe4\xd0\x4e\x90\xe3\xf8\x85\xc2\x28\x7e\xa1\x68\x0c\x90\x26\x7e\x48\x38\x25\x2d\x0e\xf1\x87\xcc\x35\x55\xd6\x43\x27\x45\x61\x8d\x0b\xea\x43\xfd\x93\xe7\x20\xe9\x78\x88\x3f\x64\xae\x71\x12\x19\xda\x09\x12\x0a\xe5\x5b\x39\xd6\xd1\x7d\xe8\x26\xc9\x1e\x3a\x90\x4e\x92\xac\x53\x0a\x63\x43\xf4\x1b\xf7\x37\x99\x0c\xd5\x2f\x99\xce\xf7\xd4\xa1\xfa\xa5\x46\xcf\xd7\xfb\x50\xff\x54\x63\x62\xbb\xe4\x50\xfe\x90\xa9\x6c\xc3\x1a\x8a\xff\x55\x1d\x8c\xdf\x0d\xe5\x0f\x99\x0a\x6c\x63\x28\x7f\xf4\x60\x81\x71\xff\x74\xe2\x51\x77\x6b\xb8\xf5\x5d\xaf\xd2\xbd\x4d\xaf\xb5\x28\xc6\x4f\x5b\xc3\xa7\xdf\x2c\x4f\x7b\xdb\x5b\x4d\x1c\x3e\x98\x4b\x78\x8f\x2f\xe0\x96\xf0\x73\xd0\x1a\x92\xd6\x66\x7f\x7b\xb3\xbf\xd5\x5a\x5b\x4a\x4f\x70\xdb\x8d\x02\x15\xdf\x3b\x92\xb8\x77\x24\xf1\x77\x70\x24\x21\x6a\x59\x73\x5d\xc1\xfd\x83\x8e\xc7\x19\xbd\x22\xbf\x44\xf1\xe8\x33\x25\xdf\xff\x4a\xc7\x63\xdb\x9b\x44\x43\x87\x71\x00\x16\x05\x09\x39\x62\x12\x77\x00\x50\x51\x90\xb8\x60\x3f\x06\x67\x0c\xec\xe7\x74\x42\xe3\xbc\xa0\x71\x4c\x33\xf2\xfd\x18\x12\x5d\xe0\x9f\x82\x73\xf2\x4b\x9a\x86\xe4\xfb\x49\xa9\x97\x8b\xc7\xda\xbb\x8f\x70\x05\xf9\x26\x48\x82\x89\xe9\x7a\xa2\x3f\x60\x58\x18\x64\x1c\x60\xc6\x01\xa4\x8b\x89\xc3\x33\x38\x1c\xd9\xc0\xd1\x59\x90\x48\x90\x97\x60\xc5\x6f\x43\x70\xc9\x2b\x1f\xd0\x62\x2a\x01\x5f\x3c\xaf\x80\x0b\xcf\x94\xbb\xd9\x69\x55\x7d\xf9\x54\xd5\xf7\x16\x1c\x93\x97\x01\x26\xb4\x90\x80\xef\x68\x96\xc3\x4b\xaa\x72\xe8\xb9\x00\x51\x9d\xb8\x08\xb2\x59\x55\x37\x58\xbe\x02\xa6\x45\x01\x41\x9b\x5c\xf8\x5c\x64\x49\x50\xc9\x55\x0c\x48\xc9\x2e\xd8\x89\x4a\xfb\xf6\x88\x62\xab\x42\x14\x55\xbe\xdc\x45\x08\x07\x92\xce\x98\xc4\xbb\x0d\x9a\x84\x9e\xbe\xf1\x0c\x09\xf6\x1c\x4e\x4c\x2e\xd4\x19\x4b\x57\x98\xcc\xd2\x39\xcd\x8a\x2b\x0f\xdc\x5c\x64\x49\xd0\x57\x45\x31\x7f\x97\xa5\xe7\x51\xe8\x25\x37\xb6\x50\xe7\x22\x5b\x11\xdb\x7c\x54\x51\x22\x9a\x8f\xec\x02\xcd\x1c\x1a\xae\xad\x29\x59\xfd\x17\x7a\xb6\x43\x3a\xb2\x1a\xd3\x29\x6f\x66\xaf\x90\x84\x5e\x58\xcb\x46\x97\x44\xfe\x79\x45\xa4\x55\xd4\x73\x09\x85\x80\x28\x7f\xea\x42\x2f\xd8\x72\x01\x3f\xfd\xb8\x8a\xf0\x4c\x64\xbe\x78\xee\xe4\xe5\x53\x59\xf2\xc3\xd4\x2d\x99\xc0\x1a\x60\xb9\x6f\x69\xe1\xe4\xce\x35\xe1\x33\x10\xb9\x0e\x1c\xb8\xb3\xdf\x7e\x93\x6d\x30\xba\x76\xfb\xa0\x09\x1c\x80\xc4\x67\x07\xc3\x68\xca\xd6\x47\x8d\x60\x1e\x0d\xd5\x66\x28\xfe\xe7\x47\x0e\xdc\x49\x81\xad\xdc\x28\x8a\xc9\x67\x68\x7c\xf5\x14\x0c\xa2\x97\x21\xfe\x70\x9a\xf8\xa4\xd6\x00\xff\xe1\x0c\x50\x00\x74\x74\xfb\x82\x9c\x23\x9a\x0f\xd1\xef\x0e\x37\xe6\x59\x76\x77\x99\xc4\x34\x18\x80\x07\xde\x9c\x12\x3d\x86\x94\xef\xc4\xe0\x12\x68\x8d\x91\x9b\x67\x7c\x75\x63\x2b\x1d\x17\x13\x1a\x65\x9d\x32\x9c\x26\xc5\x94\x87\x43\x06\xd7\xd3\x38\x2e\xbc\x32\x69\x7b\xfa\x92\x51\x1e\x2b\x42\xf7\xe2\x33\xa5\xf3\xc3\xfc\xc3\x55\x32\x8a\x92\x49\x65\x57\xa0\xac\x05\xdf\x8c\x02\x3d\x1d\xc1\x7c\xe1\xb9\xb6\x5f\xb1\xa0\xe4\x2b\x18\xee\x4d\x0a\xbe\x3c\x30\xf2\xc5\xac\x84\x82\x6f\x0f\x9c\x78\x76\x2d\xc1\xd8\xa7\x03\x85\x5f\xe0\x72\x40\x95\xe2\x85\x35\xea\x94\x09\x9e\xb6\xf5\x73\x2a\xd9\xbc\x48\xf1\xd6\x6a\x43\xa3\x34\x4f\xdd\x18\x97\xb2\xf6\x2a\x9c\x72\x0b\x47\x09\xf9\x0b\xf5\x8f\x0c\x43\x89\x6f\x07\x0e\x1b\xb6\x70\x48\x95\xe2\x81\x75\x6f\x85\x65\x99\x03\xfb\xb6\xd0\xe9\x73\x59\x59\x27\xc7\xd3\xee\xe1\xf3\xfd\xb7\xa8\x31\xf6\xe9\x40\x69\xef\x34\x1c\x4c\x7c\xfb\xe0\xa4\xe3\x14\x05\x08\x09\x6c\x17\xb3\x17\x3e\xdf\xfa\xf1\x43\x6e\x7e\x29\x64\x3a\x57\x34\xaf\xeb\xe0\x4e\xda\x86\x2c\xbb\x3e\x0d\xa3\x0c\x54\xc5\xa3\x60\x0e\x8f\x2f\xd0\x05\xa6\x67\x46\x0f\x0f\xf6\xdf\x19\x6b\x9f\x95\xc3\x16\x72\x11\x17\x25\xd9\xf2\x65\x52\x25\xcf\x37\xde\x7a\x32\x88\xbe\x68\x46\xae\x6c\xf0\x27\xa3\xf8\x6f\x55\xc0\xd1\x13\xc5\xbb\x61\xaf\x13\xe2\x48\xc7\xbc\x73\x4e\x40\x07\xd3\x96\x7b\x52\x92\x86\xb4\xdd\x33\x20\x26\x60\x17\x32\x24\x6d\x26\x74\x7c\x1a\xc5\x11\x4d\x8a\x9f\x39\x78\x5b\xdf\x49\x77\x7b\x37\x69\x8d\x16\x17\x69\xf6\xb9\xac\xc1\x84\x16\x9f\x04\xa8\x05\x62\xc6\x0b\x18\xda\xab\xfc\x96\xdd\xa2\x42\xa1\x5d\xd6\x2f\x5a\x4c\x3f\xc1\x5c\x8f\xd2\xf8\xe7\x3f\xa0\x7f\x17\xd3\x28\x9f\x2b\xd7\xc8\x4e\xf7\xf2\xe9\xf4\xd6\x68\x83\x9f\xa7\xde\xbd\x24\xca\x0f\xd2\x24\xe1\x2e\x9b\xd0\x72\xeb\x1a\xb4\xd7\xf1\x6e\x97\x0f\x1e\x78\xb7\x51\x5c\x65\xa7\xeb\xdf\xc1\xb8\x93\x02\x29\x93\x97\xd2\x3c\x18\x87\x42\xe0\x04\x21\xd1\x78\xf5\xb6\xac\x6e\xe9\x4c\x14\x9f\x10\xb8\xca\xc9\x38\x58\xb4\x86\xdb\x9b\x2c\x09\x1f\x49\x5a\xc3\xed\x2d\x96\xa6\x8f\x03\xad\xe1\xf6\x63\x95\xc2\x45\xa7\xd6\x70\xfb\xa9\x4a\xc2\xc2\x7d\x6b\xb8\xb3\xad\x32\xd8\x0a\x6f\x0d\x77\x76\x74\x82\x16\xea\x5b\xc3\x1d\x5d\xa9\x3e\x16\xb6\x86\x3b\xdf\x3a\xc9\xb4\x98\xb6\x86\x3b\x4f\x9d\xf4\x84\x16\xad\xe1\xce\x77\x4e\xba\x14\x84\x5b\xc3\xc7\x9b\x4e\x66\x3e\x9d\xb6\x86\x8f\xb7\xdc\x74\x26\x0b\xb7\x86\x8f\x75\xf7\xe5\x19\xa7\x35\x7c\xfc\x8d\x4a\x34\x0f\xce\xad\xe1\xe3\x27\x2a\x4b\x4a\x2d\xad\xe1\xe3\x6f\xab\x75\x7b\xcb\xd3\xde\xf6\xce\xbd\xe6\xed\x5e\xf3\xf6\x9f\xa2\x79\x0b\xe2\x18\xfc\x4b\xdc\xce\x8d\x2b\x52\x70\x39\xaa\x10\x9f\x2e\x44\x46\x89\x79\x79\xce\x2d\xfa\x91\x8e\x01\x7a\x23\xe1\x74\xcc\x98\xba\xe0\x48\xae\x9e\xc6\xab\xa8\xf9\x11\x2e\x77\xad\xca\x20\x4d\x42\x5c\xf0\xd0\x47\x26\x88\x64\x45\x22\x53\x39\x77\xdd\x8f\x63\x63\x28\xa6\x60\x64\x1e\xad\x7a\x70\x53\xdf\x23\x96\x69\x59\x89\xd2\xc3\x4c\xc0\x47\xe4\x5f\xf9\xe5\x3c\xfb\x0f\x27\x3b\xe6\x92\x7c\x13\x72\x7a\x58\x1d\xe5\xdb\x92\x5a\xa5\x3b\xf0\x3d\xf5\xeb\xfa\x1a\xc2\xdf\x10\xdb\xed\x03\x4b\x84\xd4\x93\x36\x93\x42\x21\xac\x40\xbb\x47\xda\x45\xca\x7f\x9e\xf6\x39\x9a\x51\xb8\xc3\xb1\xe7\x36\x54\x34\x73\x32\x3e\x05\x03\x17\x65\x1f\x2a\x6e\x48\xbb\x9e\x98\xd9\x56\x35\xac\x3f\xac\xf8\x1e\x22\x1e\xee\x41\x07\x3a\xc2\xcf\x4b\x3a\x06\x9e\x6e\x50\xda\x2c\xe8\x77\x5b\xe0\x8a\x42\xe3\xd5\xc0\xb3\xf9\xb8\x0b\x3b\xa7\xa8\xc2\xb8\x27\x68\x71\x18\x14\x81\x1c\x01\xfb\xdd\x67\xff\x90\x3d\xf4\xfb\xfa\x1a\x8c\x62\x15\x00\x5c\x25\xe7\x12\x44\x7c\x5d\x5f\xeb\xe0\x9b\xa0\x6d\x64\x4d\xcb\x3b\x72\x04\x78\xb2\x79\xda\xcf\x19\x43\x50\x1e\xd6\x19\xf4\x4c\x08\x38\x9a\xc2\xdc\xe9\xfa\xd5\x33\x5d\xb8\x95\x3d\x61\x6a\x2b\xa4\x3b\xf7\xd2\xb6\xf3\xab\x7a\x9e\xde\x3d\xd9\x3c\x45\x0f\xaf\xd6\xa1\xfd\x2e\xf9\x02\x4f\x1d\x82\x24\x49\x0b\x32\x8e\x92\x90\xf7\x2b\x4a\x26\xbc\xa1\x67\xaa\xf9\x51\x9a\xe4\x69\x4c\xfb\x17\x41\x96\x74\xda\xb8\x04\x77\x96\xc3\x58\x71\x9c\x4e\xda\xc8\xf4\x55\xf4\x98\xa1\xc2\x71\xb8\x44\x05\x1b\xc2\x81\xb9\x60\xee\x3a\xbe\xd5\xd9\xe3\xdd\xea\x99\x04\x61\x1e\xa1\xa0\x46\xe9\xeb\x10\xa6\xb8\xc1\x72\xbc\xa4\x23\x26\x01\x78\xd6\x63\x0f\x1c\x32\x9d\x05\xa3\xcf\x2a\x84\x28\x78\x22\x10\x87\x5d\x79\xdd\xda\x09\xb2\xc9\x02\x5e\x82\x9c\xa8\x5f\xc8\x19\x8f\x69\x85\x2e\x6b\x84\xd0\xcf\x95\xc5\xb0\xdb\xb8\x8e\x03\xc1\x26\x7e\xcb\x74\x63\xa1\xd9\x46\xb2\x88\x63\x07\xdd\xa9\xa4\x34\xe1\xfc\x4e\x1f\x80\x25\xc4\x18\x05\x59\xe3\x9a\x59\xc0\x64\xff\x2c\x32\x95\x86\x48\xfc\xe6\x9c\xbd\x93\xf6\xe0\xa0\xd4\xee\x79\x19\x6b\x4f\xb2\x77\x76\xd8\xea\x74\x7b\xba\x21\x84\xe1\xfa\x99\x0a\x8a\x22\x18\x4d\x3f\xa6\x07\xd2\x0f\x16\x9e\x32\xe9\x1c\x0b\x9f\xb9\xf5\xd4\xf2\x71\xf3\x4f\x67\x38\xb2\x68\x3f\x88\x63\xb5\x9f\x08\xe0\x92\x33\x85\xd3\x4d\x75\xc0\xf0\x9c\x30\xbc\x47\x0c\x20\xd5\xd6\x70\x1b\xa4\x7b\xbe\xea\x5b\xc3\x6d\x90\xdd\x71\xc8\xb6\x1d\x00\xb6\x36\xc2\xd6\xf0\xf1\x0e\x13\x99\x1f\xdf\x8b\xcc\xf7\x22\xf3\xdf\x5b\x64\x46\xd1\x5e\xe0\xec\x7d\x57\xe1\x5e\xfe\x91\xa7\x49\x36\x1f\x99\xf2\xe6\xaf\x3c\x51\x5d\x1d\x66\x59\x6a\x8b\xc0\x3c\x4d\x49\xa2\xae\x8a\x82\x0d\xd6\x10\x32\x1d\x19\x13\xd0\xf1\xa9\x54\xd2\x14\x19\xb9\x88\xeb\x5d\xe3\x27\x30\x08\x43\xe9\xd2\x91\xb1\x63\x51\x18\xbc\x64\x43\xd7\x44\x82\x65\x11\x18\x84\xa1\xc7\xc6\x96\x88\xf1\xf3\x42\x85\xb6\x6e\x1d\xac\xc1\x38\x31\x2b\x0e\x43\x9f\xcc\xed\x1b\x78\xce\x83\x82\x4b\x88\xda\x11\x49\xa6\x5d\xd5\x7f\x01\xe3\xed\x9a\x6f\x3f\x37\x9d\x0b\x28\xfc\x1a\xdd\x74\xa7\x40\xdf\x13\x25\x21\x57\x33\x49\xd8\x1e\xaa\x9b\x66\x59\x4f\x48\xa2\xb9\x2b\x13\x73\xf2\xe1\xbf\x84\xb0\xa8\x01\x04\x7e\xb0\x87\x49\x85\xca\x1e\x81\xd7\xed\x25\x0f\xd8\x44\x95\x27\x00\x73\x8a\x8f\x07\xa5\x02\x3b\x2f\x52\x52\x2d\x13\x6b\x64\x7f\x44\xa5\x7d\x47\xf6\xb1\x0b\xac\x8b\x45\xd4\x8f\xf2\x9f\x83\x38\x0a\xdf\xd3\x7c\x9e\x26\x39\x15\x4d\x39\x8f\xef\x9c\x31\xf8\xdb\xeb\xf0\x35\xd6\x3f\x4c\xce\xbd\xb5\xee\x3a\x95\x2e\xdd\xfe\x95\x56\xce\x5d\x36\x39\x83\xe5\x7b\x2e\xb8\x86\xf0\x65\x88\xc6\xfb\xa2\x0f\xe0\x34\x02\x27\x38\x41\xec\xf5\x54\xa8\xf3\x0d\xf1\x8b\x12\x40\x59\x5a\x3f\xc9\x07\xdf\x1a\x6e\x83\x1e\x4d\xac\xc8\xd6\x70\x07\xac\xde\x1a\x05\xf9\xbe\xdf\xf0\xef\x37\xfc\xbf\xee\x86\xaf\xf7\x7b\x25\x96\xdf\x91\x8a\xac\xa1\xae\x8a\x9d\x78\x32\x0b\x2c\x17\xb2\xfe\x00\x32\x57\x55\xa7\x49\x38\xf4\x6e\x0a\xeb\xc1\xe4\x83\x28\x01\xbd\x8f\x0e\x21\x08\x4c\x69\x0c\x8d\x88\xe3\xbe\xfd\x93\xab\x97\xf0\x23\x33\xd8\xe6\xed\x77\xca\x1c\xee\x40\x83\xbd\x93\x50\x4a\x2e\x00\x63\xdf\x25\x91\xae\x9c\xcd\x54\x6f\x03\xc2\xd9\xaf\xbf\x6a\xf3\xa9\xe7\x59\xd4\x13\xe5\xac\x5b\x9d\xe0\x2c\xf2\xa8\x41\x90\xdb\x67\x62\xf9\x59\xe6\xf1\xbd\xf7\xf6\x48\x1b\xf5\xa9\x4d\x1e\x3c\x30\xfc\x38\xa3\x73\x33\x6f\xd6\x70\xf6\xbf\xec\x5a\xdb\x70\x55\x83\x1e\xcf\xd0\xa4\x03\x89\x25\xdb\x35\xe4\x71\x87\xd1\x9e\x9d\xc1\xaa\x88\x81\xe5\x9e\xa6\x81\xf6\xc4\xe1\x9d\x23\x94\x83\x2a\x34\x22\x2d\x8f\xd4\x5e\x35\x90\x1e\x55\x3c\x2f\xe1\x29\x8a\x1f\xad\xbd\x2f\x9b\x82\x30\x94\x34\x9c\xeb\x63\x38\xa6\x0d\x99\xb6\x54\x35\x95\xd2\x13\x27\x15\x7f\x95\x95\x27\x7b\x7d\x5c\xbf\x39\xa1\xa0\x57\x88\xab\xcc\x3e\xd6\x54\x29\xed\x8f\xea\xcf\x27\x5a\x4c\xa5\xba\x59\x77\xd2\xf4\x7b\x51\xab\x4a\x1d\x3b\x6a\x0e\x8d\x00\xad\x2a\x6d\x30\xaf\x9c\x5b\x34\x9a\x54\xce\x6f\xee\x6e\x46\xed\xfa\xea\x15\x35\x92\xe1\xdd\xc5\xdc\x72\xde\x6b\xa9\x95\x05\x67\x15\xda\x46\xc5\x63\xcd\xc9\x73\xf5\x56\xbc\x63\xa5\xd3\xb9\x1f\xc7\x95\xd3\x05\x40\xe2\xa2\x67\x65\x02\xe3\xaa\xd0\x9a\x0e\xae\x4e\x6d\xc6\xa3\x40\x57\xa9\x56\x46\x6d\x55\xe4\xa6\xdc\xe4\x80\xed\x9f\x9c\xf4\x09\x2d\x72\x61\xbc\x12\x5f\x91\x90\xce\xe3\xf4\x8a\x86\xd2\x44\x10\x9e\x0f\x8e\xa6\x41\x94\xd8\xcf\xd5\xa0\xb6\x1f\xd3\x4c\xf6\xc8\xe3\x7b\x40\x1e\x58\x7d\x24\x29\xd7\xe5\x52\xa9\x16\xd7\x0c\x0f\xb9\xc7\xf2\x72\x43\x3f\x6b\x2b\x69\x11\x1b\x3c\xc8\x96\x90\xc2\x52\x93\x2f\xc4\x6b\x86\x40\x32\x8e\x9a\xf7\x47\x08\x52\xbe\x27\x1f\x96\x41\xfe\x60\x40\x2e\x82\x88\xab\xcb\x41\xe4\x9a\x17\x5a\x05\x2b\x6f\xca\xcc\x79\x17\x4b\x41\xc5\x8b\xd6\x1d\xa3\x5d\xd3\xf1\xf2\x3a\x85\xa7\xc9\x46\xfb\xf6\xae\x04\xfd\xdd\xd8\xd8\x35\x8f\x4d\x83\x01\xc9\x8b\x74\xce\x75\xb5\x51\x32\x21\xc1\x98\x75\xe5\x9b\x4d\x3e\x57\x39\xe9\x14\xd1\x8c\xa6\x8b\xa2\xeb\x1c\x1d\x39\x02\x7e\x20\xdf\x6c\x7a\x0f\x8b\xbc\xf7\x7d\x56\xfb\x2f\xa2\x72\x1d\x52\xa1\x4b\xbe\x2c\x3d\x67\x3a\x1b\x81\xfc\xc1\x9e\xf7\x1c\xaa\x66\xc4\x7b\xda\xd4\x27\x3f\xed\x17\x58\x31\x26\xb8\x2f\x09\xf8\xca\x18\x31\xc2\x06\x1f\xc1\x67\x4c\x62\x5e\x24\xa1\x8d\x81\xb6\xef\xf0\x49\x63\xe4\x50\x04\xff\x39\xde\x88\x6f\xdc\x2a\x5b\x7e\xb8\x66\xe5\x4f\xc4\xc5\x9a\x41\x35\x13\x5a\x7c\xd4\x4d\xbd\xe7\xa4\xa6\x39\x0a\xea\xc6\xab\x20\x9f\x62\xa2\xea\x49\xc2\xec\xfa\x8f\xf0\xd1\xb8\x23\x00\xfc\xd4\xe6\x2d\xe4\xed\x20\x44\x30\x12\x75\xf5\x47\xe6\x02\x34\x7b\x04\x61\x8e\xfc\xdd\x91\x7f\x65\xce\xdb\x9f\x28\xe7\xed\x65\x7f\xd1\xb8\x63\x52\xdc\xf5\x35\x59\x87\x16\x2b\x8b\x11\xc5\xba\x3d\xb4\x89\xff\x6e\xb2\x04\xf0\x5f\xc3\xe5\x60\x0f\x29\x0d\x51\x84\xe8\x9d\xca\x99\x91\x7f\x83\x81\xba\xe7\x8b\xd3\x09\xa2\x5a\x38\x56\x48\x36\xbe\xde\xee\xd6\x34\x4f\x0c\x51\x4d\x71\xd4\x92\xa9\x6e\x50\xd9\x60\x40\xf8\x66\x25\xc5\x85\x20\x09\x89\xb8\x19\x21\xc1\x24\x88\x12\xb1\x72\x2e\xa8\x08\xf0\x57\xf3\xe7\x97\x3d\xed\x0d\xb0\xa6\x06\x5b\xd6\x71\xb6\xff\x9a\x21\x8d\xb8\x5b\x36\x71\x29\xc8\xb6\x04\xb6\x3b\xe6\x74\x94\x26\x21\x61\x0c\xb7\xb6\x12\x44\xba\xf5\xc4\x4a\x0c\x8e\x08\xba\xb0\xa6\x1d\xf6\x7a\x31\xba\xe3\x0e\x61\xd7\xed\x48\x94\x10\x27\x5a\xc4\x29\xf3\x22\xcd\x68\xa8\xdc\xb8\x73\x09\x04\x34\x3e\x93\x20\x27\xc1\x8c\x6d\x48\x7d\x2f\xbf\xb6\xff\x4a\xf9\xb7\xfd\xe7\xf1\x2e\x7f\x17\x5d\xac\xee\xe1\xb2\x34\xb7\x8c\x63\xb8\x25\x6c\x48\xa4\x9d\x6c\x7a\xa0\x40\x57\x0c\x92\xd0\x7f\x0c\xd8\x31\xfb\x4a\xf9\xd2\xb0\xa4\x38\x0b\xac\xe6\xd0\x60\x57\x8a\x0f\x0c\x70\xaa\x0a\xce\x22\xe3\x72\x81\xbf\x28\xa2\xf2\xf8\x0e\x69\xc1\x59\x44\xf6\x18\xa4\x94\xb3\x1e\x72\x4d\x68\xfd\x98\xf4\x09\x29\x21\x01\x12\x4d\x45\x71\x59\x8b\x1c\x5b\x42\x2f\x54\x92\x1c\x53\x72\xb5\xc4\xc4\x60\xe9\x46\xb6\xa4\x4d\x41\x10\x77\x57\x2c\xba\x5d\x51\xd4\x96\x83\x0d\xc9\x42\xf8\x3a\x91\x8a\xe2\xd0\x29\xed\x93\x94\x05\x84\x92\x96\xf5\xf1\x4f\x26\xa9\xb6\xf4\xc4\x43\xa1\x81\x9e\x08\x86\x52\xdf\xf5\x0b\xa9\xd8\xa2\xbf\x95\x35\xb0\x3f\xf5\x83\x4b\xd7\xea\x14\x89\xe9\xaf\x23\xe9\xa0\xa7\x66\x1f\x73\xb0\xc1\x80\x87\x56\xd4\x56\x16\x46\xa5\xda\x56\xe2\xcb\x72\x97\x01\x4b\x2c\xad\x9b\x6d\x0b\xc4\xa0\x8a\xe1\x8c\x9b\xc1\x5b\x1c\x20\x64\xfc\x28\x21\x8e\x46\x14\xae\x1a\xb4\xbd\x86\x15\xfd\xcf\x67\x3b\x02\xf6\x1f\xe5\x16\x23\xc4\xb1\x1a\xc9\xfb\xf3\x74\x6e\x38\x98\x33\xbb\x17\x07\x79\x21\x20\x9d\xaa\xfd\xdd\xe1\x84\xd4\x61\x05\xc1\x79\xd1\xba\x7a\x71\x02\x71\x68\x21\xdd\xee\x93\x46\x61\x4d\x97\x58\x43\x02\xb8\xcf\x83\x92\xfc\x40\x36\xed\xda\xc4\x4c\x4b\xda\xdf\x97\x6b\xb9\x5e\x0b\x20\xff\x6e\xa5\x12\x44\x68\xb2\x98\xa5\x54\xa7\x29\x53\x3b\x3c\xac\x75\xb3\xcb\xfd\x79\x70\x15\x9c\xc5\xd4\xd7\x3d\xf7\x38\xc0\xed\xa7\x72\x9a\x84\x3a\x20\x55\x92\x26\x8f\x44\x25\x18\x1d\xf6\x36\xb1\x2c\x9b\x7a\xf0\xed\xc7\x38\xa3\x5f\x05\xdb\x91\x4b\xa5\x07\x23\x46\xb5\xca\x09\x02\xdb\xb7\x8d\x3d\x5e\xd1\xae\x39\x89\xa5\x37\x82\xf8\x44\x6b\xe8\x00\xa4\xdc\x07\xb1\x10\x4c\x2d\x41\x48\xc9\x45\x90\x2b\x81\x72\xcd\xc4\x15\x5f\xda\x70\xf5\x8a\x8e\x30\xda\x30\xcb\xba\x7f\x9d\x06\xf9\xd4\x87\x74\xd6\x6b\x9a\x65\x65\x37\x91\xf8\xca\xd1\x77\xaf\x58\x25\xf1\x30\x71\x34\x0c\xf9\xb5\x17\xe2\xba\xac\x27\xfe\xb6\x4a\x8e\x5d\x64\x0f\xca\x94\x08\x5f\xa5\x12\xe2\x38\xca\xf2\xa2\x5c\x40\x5c\x51\xc6\x2b\xd1\x80\xf8\xd4\x1e\xbe\xeb\x57\xe3\xab\xce\xf1\x25\x04\xda\xe4\x03\xaf\x9b\x67\xab\xb1\xa6\x28\xaf\x45\xf5\x2a\x43\xf7\xf3\x34\xa5\x93\xe7\x40\x42\x57\x26\xb0\x2b\x37\x41\x76\xbe\x7d\xc1\xed\x4a\x21\x49\x7c\x1a\x06\x68\x37\x16\xbc\x6c\xad\x59\x9d\x76\xd6\xb3\xa9\x8b\x9a\x96\xa6\x0c\x34\x56\xf5\x0f\xd6\x06\x03\x6b\x07\x36\x2e\x70\xb4\xcb\x63\xa4\xbe\xb4\x2a\xef\xf0\x7d\x79\x30\x30\x7c\xe9\x96\x86\x9d\x1e\x8d\xc0\x2d\x6e\xca\xe3\x34\x45\xc9\xa4\x42\x36\x33\xd5\xd8\xe6\xc8\xf9\x24\x2e\x5d\x4e\x84\xc5\xa1\x2a\x51\x88\x7c\x41\x52\x57\x53\x89\x68\x4c\x92\x54\xd7\xc0\xd8\xdb\x3c\xc8\x73\x1a\xf6\x58\x15\xda\xf5\x1d\x83\xc8\xd1\x92\x36\x79\x99\x22\x3c\x98\x01\x0b\x9d\x86\x39\xa4\xcf\x77\xaa\x69\xb3\x4a\x56\x96\xa1\xb4\xa5\xbc\xd6\x56\x16\x53\xe4\x5a\x12\x62\xd5\x40\x84\x30\x69\x54\xa0\xba\xd4\x93\x05\xce\xe8\x28\x58\xe4\x94\x9d\xc4\xc3\x34\x29\xc8\x45\x90\x80\x4d\x52\x3e\x4f\xa3\x98\xdf\x86\x27\x05\xcd\xc6\xc1\x48\x39\xc7\x6e\x70\x12\x6f\x72\xda\xb6\xb7\xa9\x7a\x7e\x48\x1c\xf7\xba\x6a\x4d\xa3\xb5\xf9\x13\x2d\xb8\xb7\x66\xb6\x3f\xf6\xc8\xc5\x34\x1a\x4d\xc1\x68\x80\x2d\xef\x22\x15\xdb\x18\x99\xc7\x8b\xbc\xfe\xea\x55\xf0\x81\x9a\xf9\xd5\xcc\xc3\x6f\xc8\x54\x23\xc2\xae\x2e\xa7\xaa\x62\xf5\xf2\xe3\x6d\x64\xc7\x72\xb9\x11\x19\x2b\xdf\x48\x8e\xa9\x92\x61\xcc\x97\x0e\x7d\x6e\x90\xde\x9c\xf9\x7a\x4e\x3d\xde\xe3\x6e\x83\xeb\xf3\x32\xd6\xe4\x1c\x86\xbd\xa7\xe0\x92\x97\x2c\xbe\xf3\xb0\xbb\xfb\x69\xbb\x70\x8e\x3f\xf7\xf1\x0a\xf1\x1c\xa6\xbd\x66\x4b\x16\xdd\xee\x2a\xf3\x67\xd3\x56\xa2\x35\xfc\xb6\xcc\x02\x5a\x59\x34\xb4\x86\xdb\x3b\xae\x49\xb4\x18\x79\x6b\xb8\xb3\xb5\x3c\xed\x6d\x3f\xb9\x37\x7d\xba\x37\x7d\xfa\x7b\x9b\x3e\x21\x5b\x67\x61\x02\x79\x07\xc6\xce\x25\x6e\x2c\x85\x71\x25\x7f\x97\x75\x34\x96\x77\xce\xfb\xd9\x24\x1f\x96\x68\x6e\x90\x8c\x27\x4e\xb0\xa2\x12\x1c\xfa\x4e\x6e\x27\x8c\x7d\xca\x4a\x09\x36\x71\x02\x3e\xdf\xf3\xf5\xe1\xfd\xbb\x03\xce\xdc\x6f\xd3\x01\x1e\x6f\x09\x58\x2d\x85\x07\x8c\x45\x4a\xde\xbf\x3b\x10\xf7\x04\xfe\x0e\x88\xe7\xe8\xe0\x44\x51\xb7\x3c\x4d\x73\x7c\xfb\xe5\x36\x7e\x70\xf4\xf6\xed\xcb\x83\x8f\x87\x47\x6f\xc9\xcb\xf7\xef\x8f\xde\x0f\xc9\x81\x52\xff\x8e\x78\x95\xfc\x44\x1f\x52\xd2\xde\x20\xac\x3e\xb2\xd1\xee\xfb\xfb\xa0\x3d\xde\x34\x1d\xbb\x7a\x67\xcf\x95\x08\x05\x5b\x3d\x11\xaf\xcc\xdf\x84\x34\xa4\x1d\x12\xdb\x28\x18\x0d\x13\x9e\xa5\xd1\x3c\x0f\x26\x94\xec\x91\xf5\x75\xf1\xd2\x90\x6d\xeb\xe2\x77\x9f\x47\x8c\x75\x52\xfa\xb2\xd8\x33\xe2\x4d\x1e\x12\x35\x5d\xff\xf8\x70\xf4\x16\x66\x25\x53\x5d\xf2\x44\x59\x15\x7d\x73\xde\x92\x69\x1c\x88\xaa\xcd\xd1\xea\xd9\xfc\xc8\xaf\xab\xf1\x78\x67\x79\xd3\x29\xfd\x78\xf8\xe6\xe5\xd1\xf1\xc7\x21\x11\x97\xde\x8c\xb8\x58\x27\x67\x39\xd9\x20\x6d\xf6\x5f\x30\x9a\x32\x8e\xd1\x36\x42\xda\x08\x37\x92\xdf\xde\xef\x56\xf7\xbb\xd5\xdf\x7b\xb7\x42\x9b\x15\xbc\xba\xfc\xb3\x5a\xe9\x36\x7f\xcc\xde\xe8\x0d\xfd\x1d\x3e\x65\x97\x3e\x87\xd8\xfa\x57\x87\x33\x1c\x92\x29\x37\x8e\x21\xe2\x8d\x2d\xb4\xa5\x0f\x0b\xb6\x11\xf2\xd7\x7e\x07\x3f\x97\xa6\xbc\x48\x91\x8e\xf3\x79\xe8\x0a\x52\xf1\x1c\x39\x4f\x93\x6e\xcd\x13\x7a\x94\x99\xa4\xc9\xd5\x2c\x5d\xa8\x16\x55\x42\xc9\xe9\x4d\x22\x6d\x42\x25\xae\x68\xc8\xe5\x01\x08\x62\xe0\x44\x6b\x12\x69\xea\x78\xf6\x3c\x4d\xe3\x25\x44\x57\x0d\xc1\x05\x39\xdf\x24\x28\x87\x0c\xd1\xec\xc0\xfb\x10\x1a\x1a\x0e\xd3\xe5\x89\x0f\x82\x11\xb0\x45\x29\x6a\x1f\xac\x19\xd3\x84\xbd\x6f\x31\x08\xd3\x71\x14\xaf\xd7\x0e\xc0\x80\x90\xef\x5e\x89\x44\x1e\x51\x21\xea\x8b\x9a\xe0\x7e\x43\xfc\x2e\x31\x77\xf5\x97\xd7\xf6\xca\xa5\x37\xc4\x18\xdb\x9c\x3e\x43\xee\x02\x1c\xbc\x18\x59\xb8\x0e\xb5\x77\x70\x6f\xb4\x20\x6f\x05\xe5\xa8\x43\xd5\x55\x39\x09\xe2\x94\xe8\x3a\x28\xef\x68\x7a\x6d\x3e\x3a\x58\xa1\x9e\xa1\x15\xc2\x9f\x79\xc5\xb8\x70\xd1\x6a\x7a\x58\x69\x44\xd2\x93\xfa\x8d\x86\x93\x47\x93\x24\x28\x16\x99\x3d\x1c\x9c\x5e\x36\x1e\x0c\x53\x3e\x1e\x05\x55\x35\x20\x70\x60\xd0\xbc\xff\xe2\x85\x83\x24\x6f\xc1\x91\x82\x24\x54\xaa\xa5\x22\x85\x98\xc4\xe3\x28\x09\x62\xbf\xd5\x33\xaf\xc3\x67\x53\x8a\xd7\xb5\x95\x25\xaa\x37\x90\x22\xf3\xe8\x39\xcd\xae\x8a\x29\xd7\x58\xcf\xce\x22\x60\x19\x29\x0f\x12\x0d\x7d\x13\x61\x16\x2a\xb1\xe5\x71\x0d\x22\xba\xe3\x78\xb6\x53\x8b\x5b\xfd\x42\x8f\x00\xef\x1d\x88\x68\x77\x1d\xca\x3f\x47\x9d\x67\x11\xa9\xd7\x5c\xb7\x76\x1e\xb7\x9f\xa2\x72\xfe\xb0\x55\xf8\x16\xe4\x7e\x3a\x25\xb5\x77\xba\xae\x4a\x53\xcc\xd3\x47\xd9\xb1\xdb\xb2\x74\x14\xc2\xa2\x92\x9f\x83\xe3\x65\x11\x4b\x5b\x94\x3f\x89\x20\xc4\x94\x65\x0c\x20\x80\xf0\xfc\x31\xba\xd1\xc9\xc9\x22\x8e\x4b\x5e\xb8\x68\xcd\x22\x71\x2f\xff\x4d\x85\x30\xd4\x57\x16\x99\x11\x32\xad\xd1\x9c\x57\xdc\xf6\x0b\xec\x3b\x6f\x63\x3a\x7c\xfb\xea\x91\x73\xfb\xe6\xbc\x6b\xc7\xd6\x5b\xa9\x36\xe8\x7b\x0d\xc5\x99\x44\x32\x4a\x93\x51\x50\x74\x8c\xd9\xef\x96\xfb\xb1\x29\xe5\x7a\xc2\x89\x4d\x39\xd7\xb3\x77\x5b\x5a\xc6\xe1\x42\x7e\xf7\xe0\xf2\x30\xc1\x15\x84\xe1\x10\x9c\x10\x78\x2d\xa1\x6a\xf6\xc1\x03\xd0\x37\x98\xbd\xa8\xde\xa6\xcb\x9d\xef\x00\x0e\xee\xd0\xfb\x4e\x90\x4d\xac\xd5\xa5\xc5\xc7\x67\x46\xc9\x21\xfe\x12\x9e\x79\xb6\x90\x27\x14\x31\x3e\x71\xff\xa2\xea\xb5\x5f\x6a\xf1\xc9\x24\x5f\x94\x94\x86\xeb\xdb\xee\xee\xb2\x95\xf9\x6b\x1a\x25\x9d\x56\xcb\xad\x5c\x3d\x8a\xe3\xe4\xc6\xf1\x84\xaf\x37\x40\x36\xec\xb0\x65\xde\xed\xe1\x1e\xe1\xab\x9a\x24\x2d\x0e\x8d\xbe\x2a\x14\x7a\xfc\x0d\x69\xe0\x86\x6d\xc3\xab\x85\x6e\xcf\x6a\x05\xb7\xaf\x36\x12\xc4\xb5\xd3\x45\x31\x5f\x14\xaf\xd3\x89\x66\xd7\xc2\x17\x0f\x5a\x2d\xd2\xf9\x0f\xf7\x33\x83\xc4\x32\x13\x4c\x73\x6b\x18\x93\xed\x06\x8a\xc3\xf0\x5b\x2e\x83\x9f\x66\x34\x5c\x8c\x28\x9a\xab\x60\x34\xea\x11\xe1\x8a\x12\xf3\x93\x60\x34\x3a\x11\xc9\x9c\x27\x32\xa4\x88\x6f\x49\xe5\xcf\xcc\x29\xeb\xe7\xd3\x68\x5c\x74\xba\x64\xe8\x60\x54\x66\x39\x4a\xab\x60\x34\x92\x5a\x2a\x6e\xec\xcd\x49\x9b\xc6\xb4\xa0\x72\x1c\xda\x49\x92\x99\xce\xa9\xea\x06\x2c\x03\xdd\x5f\x89\x77\x25\x62\x69\xb3\xad\x9e\x8b\x71\xa5\x8e\x15\xee\x4a\x2e\x32\x1a\xae\x16\x7e\x3c\x8e\x1b\x6c\xe9\xe7\xcf\xee\x91\x69\xbb\xde\x23\x53\x55\xf1\xad\x72\x1b\x3b\xb3\x02\x62\x48\x80\x86\xef\x07\x5b\xec\xb0\xdd\x3e\x39\x02\xe5\x9f\xca\xff\x53\x29\x2d\x63\xd3\xff\x06\x8f\x1a\xad\x57\x6d\xde\x17\x8d\x95\xd4\xf8\xb5\x9c\x4d\x31\x50\xf3\xe4\x5a\xc6\x01\xa5\x7d\x21\xb4\x74\x82\x00\x4e\x0d\xea\xf5\x01\x60\xff\x55\x9a\x28\xbc\xa0\x27\x8a\xdd\xf3\xb6\x4f\x4b\x07\x60\x58\x4d\x78\xef\x84\x0d\x5c\x22\x8f\x58\x55\x57\xc2\x75\x7e\xb2\x6e\xe8\x1a\xeb\x69\x13\x05\xfc\x6d\x7d\x5d\x0e\xfc\xba\xc9\x37\x9c\x06\x3d\xfa\xbf\xea\x40\x22\x38\x86\xc8\xda\x60\x40\x3e\x1e\xbd\x38\x1a\x92\x8c\x72\x83\xac\x1e\xc9\x53\x61\x3a\xa3\xae\xb8\xb4\x2d\x4e\xc0\x35\x5d\x7d\x56\x0e\xe2\xff\x27\x74\x44\xf3\x3c\xc8\xae\xd8\x62\x81\x08\xd8\x39\x23\xb7\x36\xf8\x2b\x06\x6f\xd1\xe4\x22\xcd\x3e\x73\x29\x6f\xb6\x88\x8b\x68\x1e\xa3\x48\x0e\x66\xec\x14\xbf\x7b\xa3\xc1\x43\xe2\xb5\xe5\xfe\x46\x9a\x72\xf3\x3a\x4c\x33\x06\xd9\xbc\x61\x43\xaa\x1b\xa3\x21\xdf\x38\xcc\x93\x89\x2a\xd5\x97\x38\xf2\x39\xb0\x59\x67\x9d\x3b\x71\x61\x4f\x7d\xe7\x87\x32\x58\x8b\x9d\x12\xc7\xbe\xd1\xec\xa7\xf0\xe7\xe4\xab\xa9\xc6\x0c\xd2\x5b\x4f\xe9\x11\x4a\xd7\x2f\x08\xde\x1e\x93\x03\xe0\x39\x72\xf3\x1c\x1f\x36\x78\x8e\x62\x7a\xc2\xa4\xc7\xec\xa2\xc7\xf2\x53\x14\xcb\x69\x61\x45\x8a\xf1\xf9\xb8\xaa\x3c\x88\x55\x4f\x77\x44\x2b\xc6\xab\x61\x3c\x43\x2e\xa3\x17\xa2\x83\x9c\x5c\xad\x3c\x6c\x55\xf0\x0e\x06\x4e\x90\xdd\x28\xbd\xec\x1b\xec\x48\x7f\xec\x12\x09\x20\xb9\x10\xfc\xbf\x2b\x53\x15\xcb\xe1\x3f\x54\x3a\x62\x34\xf2\xa7\x29\x47\xd2\x4b\xf1\xbc\xdb\xe5\xe6\x1c\x0d\xda\x33\x51\x09\x7f\x2e\xe1\xc8\xad\xe1\x0e\x78\x30\xc2\x4e\xc3\x19\x63\xfe\xee\xfe\x66\xf4\xfe\x66\xf4\xef\x7d\x33\x2a\xae\x45\xc5\x93\xdf\xff\x88\xf8\x7a\x77\xea\x31\x1c\x0e\x01\x0f\xc9\x41\x9a\x9c\x53\xc6\x8a\x02\x11\xf2\x18\xce\xc1\x70\x16\x80\xb8\xc5\x32\x90\x0b\x23\xe0\x20\xce\x53\x12\xc4\x71\x7a\x91\xf3\xf0\xec\xa0\xa8\xcb\xfb\x6b\xac\x22\x29\xf8\xbf\x89\x2e\x69\xb8\xe4\x59\x6b\xee\xbd\xc6\x9a\xb8\x51\x2d\x52\x3b\xc8\xb1\x50\x59\xaa\x03\x67\xc7\x54\x89\x92\xeb\x6b\x19\x20\x5d\x67\xb4\x95\x0e\xb5\xdd\xb5\x95\x01\xfc\x2c\x27\x44\x24\xae\x98\xe5\x7d\xe8\x48\xfd\xa2\xd1\x10\xd7\x43\x1c\x8d\x41\xd5\xdc\x85\xda\x37\x9d\x3a\x01\x52\xf0\x7d\xfc\xa2\xd5\xb8\x33\x92\x41\x94\x54\x3b\x70\xe4\x62\xa2\x26\xe3\xb4\xf2\xf2\xc7\xb6\x84\x4d\x95\x7e\x5f\x1c\xb6\x7a\x6c\x12\xce\x69\x16\x8d\xc1\xaf\x47\x46\x47\x01\xe3\x38\x28\x50\xcd\x83\x07\x24\x0e\x7e\xbb\x22\x71\x1a\x84\x24\xbc\x4a\x82\x59\x34\x22\x69\x42\x73\x68\x4d\x4c\x88\x6e\x48\x04\xb3\x4e\x95\x9e\x00\xa0\xa4\x7d\xbd\x6c\xdc\x81\x62\xb3\x35\xa1\xc5\x91\x3a\x24\x7b\x3c\x38\xb3\x89\xd1\x02\x6b\x9d\x7b\x00\xac\x4c\x10\x53\x22\x8f\xc9\xe5\xb7\x1e\x86\xa6\xbf\xf4\xea\x85\x67\xe7\x17\x11\xc4\x2b\x41\xbd\x22\xa0\x83\xc8\x29\x3f\x41\x0f\x9d\x97\x55\x5c\x78\x5f\x64\x54\xa8\x17\x7b\x70\x81\x37\xe2\xab\x83\x1f\x8e\xa7\xf4\xd2\xa7\x36\xd0\x5a\x53\x2b\xc1\xf2\x44\xd9\xa0\x88\xa1\xf9\x14\x61\xb5\x4b\x95\xf2\x96\xc2\x5f\x06\xe1\x7e\x26\xc2\x93\xb3\xaa\xc4\x22\xeb\x92\xa1\x5c\x6f\x02\xcc\x95\x95\x7c\xd7\x04\x9e\xe7\x75\xd0\xcd\xa1\xd5\xed\x9e\x03\xc7\x96\x80\x86\x62\x5f\x2e\x4c\x91\xe2\x7a\xdc\xfc\x40\x46\x65\x96\x40\x01\x8e\xc9\x6c\xb7\x06\xf7\x57\xc3\x95\xae\xb5\xfa\xaa\x5c\xd7\xd7\xbb\x9b\xd4\x28\x4a\x99\xfa\x29\x74\xd0\xe1\x14\x98\x4f\x19\x05\x7a\x10\x6e\x91\xba\x54\xd5\xec\x87\x21\x7f\x16\xa1\x94\x68\x41\x12\x92\x9c\x16\x39\x59\xcc\x21\x43\x9c\x46\x80\x65\x44\x05\xcd\xd8\xde\x91\x9e\x0b\x61\x4b\xb8\x31\xed\xaf\xad\xa1\xa7\x11\xaf\xd3\x49\xbe\x5f\x7c\x28\x82\xac\x58\xb3\x35\x8d\x39\x8d\xc7\x2a\x71\xec\xbe\x5f\x16\x2c\xdc\xac\xc5\x88\x13\x46\xe3\xb1\xe3\xc3\x47\x3e\xb2\x9b\xd0\x82\xeb\xb3\x58\x61\xeb\xa5\x1d\xe8\x17\xf4\x30\x73\xe8\x1e\x91\x27\x4f\x8b\x67\xb0\x56\xfa\x3e\xc6\x01\x19\x13\x5a\x74\xac\x37\x3f\xc2\x92\xd1\x39\xe5\x0c\x06\x24\x4c\x93\xb6\x78\x25\xca\xfa\x28\xd0\x06\x66\x93\x70\xd1\x2d\x13\xa5\xd9\x11\x78\xc2\xe8\xf7\xfb\xe4\xd7\x05\x77\x04\xcc\xda\x64\xbc\xd7\x39\x2f\x97\x3c\x8c\xac\x78\x14\xb9\xb4\x5f\xc0\x5a\x2b\x5d\x0d\xc3\x7f\xc6\xe4\x99\xde\x83\x29\x37\xe4\xac\x7b\xa6\xc9\x1f\xef\x98\x66\x9f\x46\xff\xea\xfd\xb0\x7e\x3d\xd2\x9d\xa7\x71\xcc\xc9\xc7\x4f\xb6\x82\x36\x35\x98\x4d\x97\x4a\x25\x02\x6a\xdb\xe4\x8d\x32\xc3\x35\x88\x25\x2d\x21\x17\x31\xa3\xa9\x33\xa7\xd2\xc8\x82\x91\x9e\x1c\xab\x6f\x12\x7c\xcf\xa6\x7c\x34\x91\x36\x3e\xc9\x37\xa5\x8e\x9b\x51\x86\x36\x53\x86\xa1\x69\xe5\xf5\x33\x2b\x41\x57\x32\x94\x85\x5c\xd2\xb9\x15\x7a\x6e\x47\xa4\xa5\xfa\x00\xe8\x93\xed\x8c\x9a\x31\x9e\x77\x69\x1c\x33\x3e\xa3\x7b\xc2\x69\x70\xc8\x8b\xb0\x73\x1a\x9d\xd1\xa4\x80\x23\x67\x9f\x51\x1c\x0c\x4d\xef\x25\x73\x61\x68\x7f\xc2\x31\x05\xe4\x78\x18\x9e\xf6\xe4\x15\x95\x91\xdc\xd3\xc4\x28\x72\xb0\x1b\x23\xae\x20\x06\xfa\x65\x9b\xb5\x8c\x5a\xe8\x90\xb8\x25\x93\xf5\x88\x13\xde\x43\x2e\x37\xcf\xed\x40\x4f\x9c\xa6\x0e\x32\x0a\x63\x02\x7b\xed\x03\xcf\x43\x47\x60\x76\x5c\x83\x8d\x2e\x5c\x0d\x7c\x20\x0d\xdf\x2a\xaa\xb2\x52\x5d\x57\xa9\xb2\xc7\xaf\x54\x33\x3b\x83\x6c\x09\x48\xa9\xc7\xf8\x52\x6b\x4c\x2d\x6c\x6a\x31\xd8\x12\x7d\x11\xb4\x83\x06\x33\x01\x41\xca\x99\x77\x9f\x8c\xa9\x15\x22\x2c\x6b\x54\x86\xd8\x72\x0f\xca\xf2\x35\xdb\x73\xb2\xf0\xb5\x93\xfa\x5d\xda\xef\x7e\x42\x2f\xc4\xad\x13\xc6\x01\xf6\x15\xc6\x99\x64\x14\x1a\xae\xf1\xfc\xcc\xb1\x66\xd9\x77\x46\x67\x1e\x31\x77\x74\x56\xcb\x07\x89\xe0\xc8\xe2\x5c\x58\x41\xbd\x96\x43\x52\x97\xbd\x54\x94\xf5\x77\xa3\x5a\xef\x6c\x2c\x6d\x46\x04\xa1\xeb\x07\x10\xbb\x6a\xc8\x28\x5c\x32\xb0\x33\xc7\x9c\x26\x21\x18\xb8\xa9\x49\x0e\x72\x50\xb4\x24\x39\xa3\x50\xe5\x0b\x46\x57\x94\x8e\x01\x98\x15\x62\x52\x4f\x97\x2b\x57\x54\xeb\x8b\x24\xc8\xf3\x68\x92\xd0\xb0\xef\xf6\xd1\xa6\x28\x1f\x4f\xf6\xcd\x8e\x92\xb1\x46\x67\x35\x13\xe4\x6d\x06\x9b\x8c\xa1\x91\x68\x7b\x62\x12\x63\xe9\x30\x88\x33\x1a\x84\x57\xfa\xbd\xba\x16\x14\xf3\xdb\x53\x9a\x29\xc8\x4a\xe9\xb5\x6e\x5c\xd1\xb8\x63\xb5\xa6\x7c\xc0\x6d\xba\x1e\xb9\xf4\xca\xe4\x5c\xdc\xe7\x16\x92\x49\xd1\x45\x2a\xc6\x16\xcd\x66\x34\x8c\x82\x82\xc6\x57\x76\xb3\x82\xdc\x47\x4d\x69\xdb\x94\x4e\xa0\xfa\x4e\x89\xa7\x09\x9f\xd7\x2a\xac\xc9\xe6\x2c\x9f\x6d\x3f\x7c\x30\xe8\x2e\xf7\xc2\x89\xd2\x61\x6f\xe6\x26\x6f\xe3\x86\x7d\xa8\x1f\x52\x1d\x63\x30\x47\x3c\x1a\x6b\x9e\xc4\x75\xa9\x3b\x10\x84\x6b\x74\x27\xbc\x6c\x3a\x10\xbc\xef\xd6\x8f\xc7\x91\x1c\xd2\xb9\x14\x1c\xcc\x81\xd4\xf0\x77\x78\x5a\x3e\x4b\xcf\xa5\x4a\x93\x04\xf9\x55\x32\x52\x87\x1f\x9f\x60\xe4\xe3\xdb\x8b\x04\xde\x4e\x1b\x08\x40\x32\x86\x85\x2d\x87\x77\x61\x43\xf8\x55\x6a\x36\x04\x7f\x07\xa3\x13\x2b\x64\xbb\xcf\x79\x82\x23\x53\x78\x4d\x4e\x54\x49\x5b\x28\xb7\x76\xd4\x12\x3b\xca\xc1\x80\x1c\x8e\x35\x67\x8c\x72\xf5\xae\xef\x8a\x0a\xf7\x2b\x24\x2a\x88\xf6\xd2\xa5\xcb\x5d\x4c\x29\x18\x63\x88\xd1\x77\x09\x67\xaa\x39\x89\x0a\x93\xad\x7a\x37\x6a\x87\xd8\xd5\x32\xf3\xed\x1e\x3e\xf4\x8b\x1a\xed\x09\xc5\xfb\x31\x44\x48\xf1\xf0\xb7\xaf\xe8\x9f\xc7\x92\xc7\x33\x6a\x5b\xef\xc5\xe9\xa4\xac\x5d\x62\x31\xa6\x8a\xb3\x05\xd4\x32\x64\x7b\x42\x89\x3b\x3e\x7f\xc0\x12\x13\xc4\x39\x00\xd8\x03\x6b\x4e\x47\x8e\x9b\x29\x21\x88\x1f\xbe\xe0\x09\x43\x41\x63\x9d\x6e\x9f\xef\xc8\xa3\x40\x3a\x2c\x04\xb7\x2a\x34\x24\x6c\x75\x4f\xb3\x34\x49\x17\xb9\xf2\x5e\x28\x0c\x03\xd8\x6e\x6f\x7b\x22\xe2\xd5\x08\x61\xb7\xed\x35\xaf\x05\xa7\x12\xa9\xb6\xd2\x6b\x42\x40\xae\x0d\x1d\xab\xa1\x7e\x0e\x6f\x31\x6f\xcb\x1a\x7e\xec\x5c\x91\x72\xdc\x3a\xb1\xdf\x2a\x2e\x48\x97\xa7\xbd\x9d\xcd\x26\x57\xa0\xed\x45\xce\xf5\xe2\xa3\xa2\xbd\x76\x7f\x21\x7a\x7f\x21\xfa\x17\xbe\x10\xd5\x4f\x45\x91\xca\xfa\x26\xef\x45\x05\xf0\x0a\x37\x99\xbe\xd8\x6f\x8d\x9f\x98\x26\xe3\x68\xe2\x85\xe3\x59\x12\xf0\xf0\x2c\xb0\x62\xba\x44\x67\x41\xe2\x89\xd3\x02\xda\x64\x1e\x68\x8a\xdb\x48\xf3\xcb\xcc\xb3\x68\x22\x3c\x18\x58\x56\x8c\x1c\xe8\x79\x34\xb1\x94\xfa\xd8\x9a\x91\x6b\x9c\xaf\x39\xc4\xb5\x82\x5d\x9a\x4e\xab\x74\x3a\xb6\xc4\x05\x3d\x63\x49\x1b\x86\x54\xc4\x7b\xe7\x7d\x86\x56\xa4\xaa\xac\x04\xdb\x55\x4a\xa0\x28\x7f\x97\x51\x71\x0d\x8a\x6e\x27\x8c\xba\xcf\x74\xba\xd5\xc0\x19\x2e\xc1\x0e\x12\xc2\xfb\x3d\xb9\xbe\x76\xf3\xc4\xd9\xd4\x9f\x49\x83\x2c\x8e\x58\x51\xd4\xb5\x64\xbe\x28\x5e\xd0\x71\xb0\x88\xbd\x17\x27\x75\x7d\x64\x3b\xb2\xdd\x8e\xba\xf2\xf5\x46\x6f\x61\x24\xd3\x0f\x51\x8b\x1e\xdf\x53\xe5\xf7\x38\xb8\x0b\xd6\x28\x7e\x8f\xee\xdb\x2f\xba\xb8\x80\xc2\x6a\x29\x99\x63\xa3\x51\x4f\x85\x28\xdb\x83\x07\x49\x5b\xaf\xe8\xa5\x67\xe4\x62\x55\xf1\xc1\xe6\xc8\x28\x32\x1d\x93\xc0\x70\x0d\x08\x7e\x27\x95\x1d\x81\xb2\x0b\x60\xeb\xee\xd5\xcb\x7f\x5a\xcb\x0d\xea\x60\x72\xb1\x77\xa1\x49\x5d\xbe\xe1\x62\xd7\x31\x7c\x97\x57\xe4\x52\xdb\xef\xd6\xe9\x0d\xfc\xfd\xc5\xb8\x3c\x86\xeb\x3f\x74\x05\x0b\x9f\xd7\xd7\x16\x0d\xed\x8f\x20\xec\x02\x72\x7c\x86\xe1\x3d\x1e\xb7\x64\xb5\xd0\x27\xe1\x86\xca\x7f\xf5\x68\xca\x41\xb8\xea\x22\x15\xf1\xa2\xa3\x82\xcc\xa2\xc9\x94\x0b\x8e\xca\x79\xb1\x50\x52\x39\x2d\x17\x69\x6d\xbb\x45\x6a\xb6\x7a\xd2\x9e\x04\xf9\xbb\x2c\x1a\xd1\x76\x8f\xb0\xdf\xec\x3f\x98\x3e\xf6\x23\x49\x93\x11\xf5\xbd\x4e\xfc\x4c\xaf\x2a\xde\x27\x7e\xa6\x57\x4d\x5f\x28\x42\x4d\x0e\x0e\x79\x0d\x7b\xc8\x9e\xe2\x05\x1d\x45\xb3\x20\xee\x60\x00\xf7\x85\x98\x79\x89\xfa\xb5\x89\x18\xb9\xd2\xbc\x6b\x5a\xf6\x55\x7d\xf7\x24\x7d\x53\xaa\xbd\xa7\xd7\xdf\x93\x5e\x85\x10\xe3\x10\x2c\xdc\x97\xca\xd8\x3f\x82\x5a\xbd\xa2\x4d\x63\x3a\xbd\x34\xc5\x19\x91\xbe\x66\xc8\x30\xb5\x94\x59\x5c\x76\xbf\x28\x4d\xde\x65\x1f\x6f\x7f\xeb\xf2\x34\xad\x35\x58\x26\x80\xf2\x68\x91\x4a\xfc\x99\x00\xea\xcd\x06\x4b\x47\xb8\x80\xd7\x61\xfe\xea\x1d\x28\x6f\x1b\x36\x94\x54\xd6\x5d\xf6\x81\xa4\xfc\x85\x20\x4b\x43\x4e\x82\xdc\x0f\x37\x09\x72\x03\x0a\xc8\x17\x81\x6a\xd1\x0e\xe5\xeb\x12\xd2\x78\xcd\x0b\x8e\x9f\xca\xca\x93\xf4\xe5\xca\xa4\x24\xa3\xcc\xdc\x84\xa4\x44\xc0\x9b\x4a\xca\x52\xf1\x97\x56\x21\x2f\xbb\x62\xcb\xed\x0a\x0e\x9c\xa3\x03\xe5\xd4\xd0\x9b\x0f\xca\x9d\x33\x0f\x94\xa6\x3c\x99\xd9\x80\xfc\x4a\x41\xcb\x9b\x2c\x21\x44\x15\xcf\x65\x31\x5b\xc4\x41\x11\x9d\xd3\x9f\x82\xfc\x38\x87\x77\x69\x65\x55\x39\xb0\x56\x5d\x93\xda\x1a\x26\xaa\x9c\x1c\xbc\x69\x6a\x20\xe1\xe2\x74\x62\x5b\xee\xe9\x0c\x14\x8d\xc6\x51\x2d\x81\x7e\xc8\xab\x58\xf2\xbc\x6e\x65\xb0\x75\x5a\x24\xd1\xd2\xca\x0b\x20\xcd\xa2\x09\xb8\xb1\x80\x67\xd1\x4c\x14\xb8\xcd\x92\x78\x11\x14\xc1\x7e\x12\x36\x59\x19\xa1\x01\xea\x5f\x20\xa4\x6c\x85\x94\xb4\xe3\xbc\x02\xd7\x30\x80\xec\x68\x6c\xa5\xf6\xeb\x17\x4f\x83\x02\x2e\x1d\xd5\x17\x82\x49\x2c\xef\x4f\xcd\x1a\x6b\x5a\xaa\x71\xcf\xbc\xab\xaf\x04\xb6\xc9\x52\x6c\x5a\xb4\xaa\x9d\xf2\x65\x5a\x5d\x80\xaf\x5a\x67\xcd\x96\x14\x32\x96\x70\x05\x8c\x78\x22\x5e\x92\x5b\xbe\xb8\x9b\x2c\x6b\xbe\xa4\x97\x6b\x5e\x92\x28\x2e\xb9\x53\xf7\xa6\x14\xea\x81\xaf\xc5\xa0\x5b\xa6\x84\x3e\x05\xe0\x6a\xe4\x59\x56\xa8\x69\xb7\x9a\x10\xa7\x00\x2d\x13\x5a\x2a\xa0\x2b\x6a\xf3\x0b\x36\xa5\xb0\xd5\x35\x95\x0b\x3f\xd5\x45\x2a\x6a\x2d\x17\x90\x2a\xe0\xf9\xf2\x10\x64\x69\xc2\x35\xda\x3d\x80\x48\x9a\xef\x0e\xa0\xb3\xa9\xdc\x09\xa0\xc2\x06\x12\x92\x59\x13\xb6\x6e\x84\x1a\x94\x79\xe3\x60\x40\x94\x63\x38\xf0\x90\x2a\x74\x9f\x84\xf0\xa6\x18\x66\x5f\x47\xb3\xa8\xf0\xcc\xad\x09\x20\x96\xa7\x4a\x2c\x61\x47\x46\xbe\x51\x26\x8f\x7e\xf3\x51\xa3\xce\x34\xa0\x8b\x68\x46\xf3\x22\x98\xcd\x4b\x8b\x28\x08\x2d\x95\xf1\x8c\xa4\x4c\xee\x33\xb2\xcb\xaa\x55\x8a\x55\xd4\x99\x30\x1a\x8f\xa3\xd1\x22\x86\xc7\x7d\x2e\x81\xd9\x40\xe6\x40\xd2\x22\x88\x5f\x34\xa9\xc0\x82\xc4\x47\x6c\x93\x7b\x0b\x70\xcd\x09\x4c\xb9\xcb\xcd\x76\x0f\xb0\x51\x41\x67\x5d\xfb\x59\xaf\x63\x5b\x0d\x50\xae\x15\x8b\xc1\xc6\x7d\x47\x41\x5e\xb0\x4e\x4c\x3b\xe3\x8a\xd9\x06\xcb\x2c\x4e\x27\xde\xf5\x84\xb7\x10\xdf\x6a\x8a\xd3\x89\xd6\xc1\xbb\x4b\x0a\xea\x35\x96\x15\xae\x10\x2f\x2a\x74\xf7\x19\x8d\xd9\x97\xb1\x3d\xa8\x71\x5a\x19\x1e\x1a\xb3\x8b\xee\xe2\x3a\x1d\xde\x6e\x54\xdc\x60\xcb\xf0\x56\x62\x34\x11\xa7\x13\x4f\xd5\x32\xb5\xa4\x4a\x55\xc8\x54\x59\xc0\x7d\x6e\xbd\x7a\xed\x62\x1a\xe5\x8c\x2f\xce\xd3\xbc\xb8\x81\x7e\xed\x5d\x9a\x57\x0b\xcf\x6e\x1c\xb6\x4a\xfe\xe9\x56\x8a\x27\x9a\x75\x12\x33\x4f\xf6\xdd\x9f\x07\x57\xf0\xb8\x6a\xcf\xd0\x95\xe3\x2c\x81\x64\x48\x2a\x8a\xd8\xab\x04\x92\x99\x18\xf6\x22\xcd\x3e\x7f\x4c\xdf\x65\xe9\x39\x2d\x2f\x83\x80\x70\xd9\x79\x16\xa5\x59\x84\x38\x8a\x53\x50\x42\xa0\xf0\x22\x63\x1c\x7d\xce\x78\x4e\xc1\x59\x0b\xef\x24\xf7\xb5\x84\x79\x0a\x4a\x27\x7b\xc6\xd7\x33\x72\x82\x3e\x4f\xc9\x50\xd9\x32\x2d\x75\xab\xfc\x22\x8e\xdf\xc9\xc5\x71\x7a\x01\x6f\xcb\xa4\x12\xb4\xaa\xfa\xea\xb7\x50\x3c\x7e\x2a\x23\x26\x92\x26\xf1\x15\x0f\x0a\x53\x18\x4f\xb4\xe4\x33\x29\xfe\x1c\xca\xf7\xba\x4f\xbe\x95\x22\x43\xfb\xe5\x1e\x7e\x25\x65\xeb\xeb\x58\x1f\x1b\xf1\x2e\x75\x29\x0c\xf4\x2f\x4c\xd5\xbd\xdc\xac\x8e\xd2\x9b\x9c\x0b\xab\x09\x5b\xd0\x35\xe0\x97\x5e\xce\xa3\xec\xca\xb3\xe2\x51\x2e\x26\xb7\x9c\xfb\x90\xf2\x42\xb3\xbc\xb2\x25\x60\x81\x7a\x16\x00\x50\xb6\x4f\x96\xb0\x20\xba\xbb\xbe\x55\xf9\x3e\xb8\x90\x24\x23\x52\xbc\x60\xa8\xfa\xfd\x7c\x14\x45\xf6\xf2\x95\x65\xf0\x6e\xfb\x8f\x5c\x20\x4e\xc1\xe9\x28\x4c\x7a\x55\xe8\x06\xc0\xa9\x3a\x44\x42\xf4\x31\x87\xc1\x60\x95\x15\x01\x6b\x13\xaf\xc6\xd2\xc5\xa8\x97\xdb\x2d\x56\x92\x75\x17\xc8\x51\xd4\x8c\xfe\x15\x53\xb5\xd5\xf7\xbe\x90\x49\xd8\xd6\x2f\xe2\x77\xf9\x09\xbd\x80\x6b\xfd\x8e\x19\x50\x1f\xee\x3b\xcf\x82\xa4\x1f\xe5\x3f\x07\x71\x14\x76\x20\xe0\x8d\x48\x79\x11\x65\x74\x54\x74\x7c\x97\x9d\xc2\xaf\x20\x00\x8a\x1a\x3b\x5d\xe7\x26\x15\x0b\x3a\x3a\x0e\x99\xec\x81\xa7\x5a\xc3\x75\xa5\xa7\xa2\x06\x55\x88\x9e\x99\x35\x71\xfd\xae\x6d\x48\x26\x82\x0b\x48\xd8\xb6\xb8\x8c\x45\x0b\xfd\xc3\x55\x32\x8a\x12\xbf\xb4\x22\xbc\xf9\xa3\xeb\xe7\x75\x33\x89\xb8\xce\xcd\x0c\xf1\x0c\x5c\xa1\x81\x25\x72\x94\x4c\xe0\xa8\xe1\xd5\x0f\xba\x60\xa6\x43\x39\xe1\xdb\xad\xa6\x02\x0c\x65\x96\x9f\x46\x93\x29\xcd\xeb\xca\x63\x28\x44\x3b\x22\xf7\x73\x92\x5e\x24\x1f\x8a\xa0\xa0\x3e\xe7\xa2\x28\xb7\xbc\x01\x5c\xc5\xae\x5d\xc3\x7c\x11\xc7\x34\xac\xab\x02\x43\x95\xa8\x2c\xb5\x8f\xb9\x92\x30\x22\x75\x56\x14\xc3\x5a\x88\x9e\xae\xa7\xa2\x82\x9a\x92\xc6\x05\xfb\xd0\x93\x86\x60\x7d\x67\x83\x61\x79\x16\x2a\x69\xf3\x92\xa1\x3f\x19\x95\x30\x76\xbe\xa1\x27\x8d\xc3\x96\xd9\xe0\x0c\x4b\x73\x70\x39\xff\x80\xca\xf3\x4a\xca\xda\xba\x5a\x4f\x15\x36\x48\x49\x4d\x25\xca\x5f\x4f\x85\x25\x90\x06\x56\x0c\xa5\xc2\xd0\x9b\x8a\xe1\xf1\x69\x69\xe8\x49\xc3\xb0\xd6\xf4\x78\x12\x31\xb4\xcd\xdd\x86\x25\xe9\x9c\x2b\x1a\x06\xa1\xfc\x96\xbb\x35\xdc\x7a\x5a\xe6\xe6\x8c\x6d\x0d\xad\xe1\xce\xce\xf2\xb4\xb7\xb3\x75\xef\x22\xe7\xde\x22\xf4\x3f\xc6\x22\x54\x50\xfa\x5d\xc4\xba\x5a\x2d\x30\x48\x43\x33\x50\x1e\x8a\xcb\xb4\xef\xe4\x69\x5f\x21\xc2\x48\xf3\x98\x20\x41\x1c\x0f\xac\xa8\xb9\xf0\xd8\xdf\x8e\xb9\xe5\x46\x0a\x91\x2f\x56\xdc\xf0\x82\x15\x11\x42\x7c\xf1\x05\x3f\xf1\x4d\x53\x44\xb0\xc0\x81\xb5\x57\x8f\x2e\xa1\x2b\x15\x9b\x04\xae\x95\x27\xdd\xae\x5a\x08\xca\x19\xc0\x71\x11\xea\x94\xdf\x18\x46\x06\xde\x16\x20\xe2\x13\x43\xdc\x49\x74\x13\xb6\x3f\xd8\x93\x61\xf8\xc1\x05\xe3\x24\xfd\x3e\x14\x9f\x58\xb2\x49\x8e\x65\xe8\x1b\x84\x93\x97\x67\x07\x1d\x7b\x13\x9c\xcc\x00\xaf\xe7\x2f\x1a\xb3\x49\xce\x43\x98\xac\x0b\xa1\xb0\x59\x87\xb1\x90\x57\xd9\x69\xdc\xbd\x1f\x1c\x52\x92\x39\x38\x92\xa8\x78\x3a\xed\x0e\xce\x3f\x36\xdb\x31\x4a\x85\xf8\xd9\xd1\x78\x68\x88\x88\xaa\x78\xa1\x38\xc2\xb9\x2f\x28\x5e\x94\x93\x51\x9a\x65\xae\xbf\x5a\x38\x59\x05\x05\xdd\xcf\x26\xb9\x2f\x84\xa8\xac\x01\xf2\xe0\x64\x96\x93\x2f\x70\x2e\x5b\xb2\xf6\xa2\x42\x3c\x18\x33\x5c\xda\x7a\xa6\x0a\xb7\x53\x3a\x47\xfa\xf0\xcc\xa1\x00\x45\x8e\xe1\x5a\xa0\x11\x3f\x18\xc8\x97\x81\xa0\x68\x32\x7c\x45\xc1\xe6\x09\x1e\x4a\x75\x68\x40\xb6\xd5\x06\xf0\xae\x38\x0b\xae\x72\xf3\x1e\x76\xbd\xe3\x44\x96\x0d\xba\x2a\xde\x01\x3b\x6f\x3b\xaa\x7f\xeb\x26\x42\x80\x73\xdf\xe5\x95\xf0\xfa\xb2\xc3\x28\x63\x15\xb0\x9e\xe8\x83\x0e\x40\x62\x47\x12\xe2\xfa\xde\x5e\x19\x21\x9b\xcf\x22\xd9\x99\x5a\x04\x77\xac\x08\xc1\xd8\x71\xbc\x95\x54\xf9\xf7\x96\xca\x1e\x30\x94\xc4\xa4\x62\x44\xa8\x49\xdf\x71\x30\x0f\x79\x39\x9b\x86\xf6\xeb\x5f\xe2\xeb\x3b\x88\x55\xab\xda\x6e\xb4\x92\xf2\x54\xfb\x95\x64\x67\xc4\x34\x5e\x9d\x61\xac\xca\x2f\xcc\x50\xc4\x25\xb1\x8e\x97\x9a\x9b\xe3\xe5\xd3\xf1\x04\x1e\x2e\x52\x7f\x58\x11\x23\x30\xf1\x1e\x29\x09\x19\xe2\x8b\x3c\x21\x1e\xc5\xa1\xe1\x1a\x11\x8f\x2b\x0c\x35\x4b\x42\x62\x49\xd4\xdf\x2c\xf4\x8f\xb7\x78\xe5\xbc\xdf\x28\x00\x90\x88\x5d\xb0\xd9\x23\x4f\xa5\x96\xa9\xa2\x89\x45\x32\x0f\x46\x9f\x8f\xb8\x7e\xdb\x30\x45\x86\x24\x43\xe7\x64\x26\xe9\x2e\x18\xfa\x8f\x54\x56\xc5\x7f\x28\xd2\xdb\x23\xdb\xe4\x99\x4c\x94\xe1\x15\x88\x3c\x07\x6a\x7f\x23\x2a\x28\x42\x59\x74\x05\x2c\xe4\xf4\x44\x71\x73\x46\x85\x8e\x06\xfb\x86\x57\x81\x35\x4f\x36\x4f\xc9\xd0\x17\x01\xe0\x00\xe2\xca\x07\x28\x94\xbf\x44\x96\x35\xc9\x6c\xcb\xc2\x8b\xbb\xdf\xef\xcb\xf5\x7d\x60\x97\xb5\x36\x1f\xc7\xf7\xd6\x21\xdf\xee\x20\x66\xb8\x04\x65\xbb\x51\xa0\x6a\xe8\x71\x37\x4b\x76\xc5\xdc\xd1\x24\x3c\x6c\x96\x87\xae\xc0\x78\x7a\x1a\x24\xa1\xe9\xa0\x49\x82\xf1\xa0\xfa\xfc\x64\xc4\xea\xe0\x11\x49\xb9\x6d\x1c\xa0\xcd\x4b\xbb\x62\x56\x21\x28\x78\x1d\xd5\x42\xaf\xca\x02\xaf\xaf\x12\x55\xdd\xbf\x6f\x4a\x19\xcc\x32\xed\x56\x7b\x0c\x1c\x64\xb4\xfc\x27\xfc\xb1\x1b\x62\x21\x66\x3f\xe0\x53\xde\x94\xbe\x70\x11\x2c\xfe\xd8\xc5\xf4\x45\x01\xf7\x03\x2f\xb9\xb4\x84\xd3\xd7\xfd\xeb\xbe\x77\xfe\x5a\xf7\xab\x18\x1f\x2d\xa6\x1c\x09\xa2\xea\x9e\xd1\x35\xf7\x55\x2f\x94\xc2\x4b\xb8\x63\xac\x07\x14\xc9\xc0\x79\x87\xdf\xa4\xc1\x9e\xeb\x3d\xcb\xe5\x01\xc8\x77\x96\x7c\xae\x65\x78\x58\xe9\x71\xa3\x8d\x5d\xd3\x63\x39\xef\x34\x0d\x9d\xe8\x0c\x45\x76\x65\x3d\x4a\x46\xa0\xf0\x0e\xb9\x7c\xbc\xc4\x78\x38\x3d\x02\xcf\x15\x1d\xc7\xff\x15\xa7\xf8\x3d\x42\x71\x21\x54\xca\xec\xbc\x6c\x1d\x49\x32\x95\x1b\x45\x93\x73\xa5\xbd\x6d\x98\x45\x6a\x77\x05\xab\x85\xbf\xd4\x52\xab\x5d\x33\x92\xa4\x04\xa0\x30\x03\xfb\x81\x6c\xc2\xa1\xc6\x38\x6b\xba\xd2\x21\x0e\x47\x1c\x24\xdc\x09\x44\x12\x0a\x47\xb1\x10\x4f\x3a\x79\x24\x0f\xaa\x4e\x60\xed\x9a\xe5\x6a\x04\x93\x64\xeb\xc6\x9a\x87\x8e\x79\x3b\x28\xaa\xab\x05\x6f\x1e\xc5\x83\xe6\x45\x34\x0b\x0a\xfa\x53\x00\x0a\xc4\x3a\xaa\x42\xe0\x75\x14\x85\x6b\xbe\x0b\x6a\xfa\xfa\xd4\xd1\x6c\x86\xd0\xb8\xea\x66\xc7\x03\x5a\x36\x33\xef\x65\x33\x54\xc6\x25\xe4\xf6\xe5\x42\x17\x28\xe4\x03\x3c\x15\x13\x5a\xbc\xb0\xe3\x86\xc9\x9d\xd5\xae\xa6\x6e\xae\x44\x5d\x77\x3c\x4f\x8d\x10\x2f\x6f\x8a\xc5\xca\xe4\x21\x97\x9a\x4b\xcd\xb7\x88\x6e\x8a\x8b\x4a\x3c\x23\xb2\xaf\x44\xd8\xef\x1b\xea\x54\xd5\x7f\xa3\x68\xa7\xaa\xd0\xaa\x83\xfc\x9a\xa1\x4f\xb5\x8e\x86\x0d\x30\x9b\x8f\xa4\x4f\xbd\x9c\x9f\x9a\xeb\x18\x91\x80\x2e\xb7\x76\xa9\x18\x97\x28\xfb\xe7\xe6\x4a\xc4\x08\x01\x25\xc1\xb0\x98\x62\x44\x32\xc2\x73\xe2\x3a\xa1\xb4\x34\xae\xcf\xc0\xb3\xf5\x27\xd6\xe3\x36\x19\xf2\x0f\x6b\x27\x69\xf7\x1c\xe1\x65\xa8\x9d\x3f\xaa\x3c\xe5\xb6\x52\x0c\xe7\x54\x67\xf1\x8e\x4b\xa7\xc8\x9c\x41\xd6\x12\x83\x8c\xd9\x54\xb6\xfd\xa8\x68\x68\xd5\x5b\x8f\x27\x70\x19\x9e\xe0\xc2\x10\x74\xd6\x4d\xec\x68\x2b\x1f\xd8\xe6\x0b\x2c\x43\x49\xc7\x3f\x3a\xad\x6c\xab\xb0\xd0\xd9\x0f\xe6\xf3\xf8\x4a\xb8\x21\x6b\x44\x58\x5d\xdb\x3c\x8e\x6f\x01\x56\x33\x2c\xf1\x46\x75\xd7\xcc\x83\x08\xee\xa5\x19\x8f\x8e\xef\x75\xeb\xc0\x5e\x9e\x09\xfb\x5a\xb1\xbd\x64\xba\x5e\xf1\xd8\x0f\x5b\x29\xb8\x38\x6c\x6a\x0c\x97\x01\xba\x52\xb3\x77\xf2\xcb\x8a\x9b\x22\x12\x1f\x89\x4e\x2a\x2d\xa6\x77\x6b\xe9\x3f\x8c\xbf\x45\xf9\x0b\x06\x36\x93\x65\x81\xc0\xa3\x6c\xb4\x88\x83\x6c\x7d\x7d\x7d\xbd\x3a\x9c\x99\xa4\xa0\xdd\x3b\x09\x68\xc6\xb5\xbf\xad\xe1\xf6\x13\xbf\x77\xa8\xed\xfb\xdb\xff\xfb\xdb\xff\xbf\xf7\xed\xbf\xb8\xfa\x67\xb0\x32\xe0\x9c\x3f\x4c\xce\x1f\x16\x00\xc7\x67\x59\x50\x6d\x08\xb0\x36\x18\x40\x40\xbd\x20\x63\xa4\xcc\x76\xb0\x45\x6e\x0e\x91\x11\x5c\x18\x8d\xc7\x34\xa3\x49\x41\x68\x72\x9e\x43\xa1\xb3\x2c\xbd\xc8\x69\xb6\x86\xbc\x05\x5f\x44\x49\x98\x5e\x80\xc6\x02\x85\x91\x21\x0f\x1e\x88\x9c\xfe\x3f\xdf\xbc\x7e\x55\x14\x73\xe1\x88\x9a\x73\x4d\x33\x8d\xec\xf9\x61\x81\xf5\x89\x28\x28\xd1\x24\x49\x19\x23\x88\xa3\x84\xb2\x9e\x24\x69\x48\xd7\x90\xeb\x41\xa7\x46\x35\xf0\xcb\x59\xcc\x46\x26\x36\xb6\x76\xb7\x69\x23\x4b\x8e\xc9\x7f\xbe\x7a\xbf\x6d\x54\x37\xcd\xb6\xdb\xdd\xd2\x52\x52\x72\x60\x2d\xbc\x93\xc8\x74\x4d\x22\x40\x7e\x62\xa2\x3d\xf8\xde\xe5\x9e\xfa\x59\x2f\x95\x01\x84\x51\x1e\x6f\xf9\xd3\x34\x2f\x7a\xa4\x88\x66\x34\x5d\x14\x3d\x56\x61\xd6\x03\x25\xf3\x45\x9a\x09\x67\x48\xb0\x99\x30\x38\xb2\x47\xe0\xbf\xeb\x6b\xd2\x16\xc4\x1e\xa7\xa3\x20\x66\x89\xc3\xa7\xdf\x3c\xfe\x06\xa2\x56\xf3\xbd\x87\x57\xc8\x76\x42\xf1\xeb\xfa\x9a\x6c\xaa\x6c\xd6\x0c\xd9\x83\xd6\x54\x9a\x6c\x94\xec\xa9\xf6\x6b\x85\xa7\x79\x46\xe7\x10\x06\x92\x5e\x58\x53\x66\xc9\x4e\x02\xf0\x3d\x3a\xcb\x08\xc9\xe9\x79\x9a\xc6\x34\x48\x96\x70\xc7\xca\xf6\x67\x29\xc1\x68\x2c\x0b\x9f\xaf\xe8\xc0\x67\xb6\x65\x38\x16\xc3\x98\x46\x72\x97\xd9\x01\xf3\x22\x90\x55\xcf\x51\xcd\x6f\x50\x38\x21\xf1\x17\xb7\x46\x36\x21\x5a\xbc\x82\x21\xbf\x7a\xbf\xad\x83\x46\x73\x49\x0b\x61\x1e\x4d\x04\xbc\xe1\xc5\x9e\x35\xad\x8a\x8c\xf1\x74\xf4\x93\x5f\x59\x6b\x3a\xa7\x49\xa7\xfd\xee\xe8\xc3\x47\x19\xe7\x96\x13\x0e\xef\xdc\xee\x1a\x72\xd3\x09\x73\xfb\xe0\x81\x39\xa9\xc6\xa1\x6f\x01\x06\x35\xed\xe7\x41\x1e\x8d\x48\x9b\x6c\x40\x17\x9e\x2f\x18\x7b\x40\x55\x6c\x90\xf6\x50\x5d\x15\xaa\x7a\xfa\x45\x2a\x1e\xc3\xb5\xcf\x82\x9c\x3e\x79\xdc\xb6\xc6\xaf\x9d\xd4\xbf\xa2\x41\x48\xb3\x4e\x7b\x1f\xf8\x6a\xf4\x5b\xc0\x4f\x5b\xd0\x3e\x1f\x61\x45\x21\x26\x1f\xd3\xa4\x78\xc4\x0e\xda\xed\x1e\x69\x33\xc9\x3f\x1a\x41\x15\x83\x5f\x73\xa9\x76\x54\x37\x56\x62\xca\x6a\xc8\x95\x87\x33\xba\x4a\x46\xe8\x50\x6d\x6b\x92\x7d\x17\xcf\x73\x74\x7d\xed\x0f\x5c\x5f\x45\x7a\xb9\x1d\xc8\x54\xea\xd2\x6c\x92\x93\x34\x63\xd2\xaa\x88\x84\x0e\xf4\xa8\xb5\xfb\x1a\x73\x49\xd8\x81\x87\x16\x3c\x44\x55\x34\xbe\x52\xf5\x0b\x24\x4b\x45\x3e\xf6\x41\xef\xb3\x06\x38\x48\x93\x84\x8a\xe7\x10\x92\xc2\x34\x25\x1a\x97\x8b\xb2\x75\x19\x0d\xe6\x23\xbd\x2c\x9c\x0e\x0a\x58\xf4\x0a\x44\x58\xdd\x9b\xdd\xaa\xea\xd2\x7b\x51\x7f\xc7\xd7\x20\x5e\x25\xcd\x03\x93\x03\x0d\x04\x35\x44\xb0\xaf\x38\x4e\x05\x25\x88\xac\x1f\x9d\x50\x40\xa4\xc8\xa2\xc9\x84\x66\x3c\x7e\x19\x9b\x7d\x10\x5b\x94\x33\x62\x86\x83\x3a\x82\x81\x1e\xf8\xa8\xc6\x0c\x43\xde\x84\x7e\xc0\x78\x65\xd7\xe0\x26\x09\x38\x8e\xcf\x8b\xa0\xa0\xa3\x69\x90\x4c\xfc\x0a\x04\xfe\x6c\x40\x22\x3e\x08\xaf\xc0\x60\x1f\x6e\x84\x1f\x33\x0e\x63\xb3\xbc\x75\x33\x8c\x78\x03\x8a\xd1\x80\xf2\x56\x09\xc5\xa7\xb3\x2f\xb3\x6a\x28\x0a\xce\x64\xde\x5b\x2b\x75\x63\xb5\x22\x6d\x11\x7c\xb5\x65\x5f\x6c\x19\x2d\xb3\xb3\xe0\xd2\x42\xb1\xde\x08\x5c\xcc\x9a\x95\xe5\x7d\xbd\xf4\x3e\xf2\x52\x1d\xbc\x79\x88\x85\x7c\xb7\x1c\xc0\xee\x42\x15\x13\x10\x2b\x0d\xaf\x2b\x7d\x59\x1e\x5f\x31\x7a\xe7\x6f\x56\x61\x71\x31\xaa\x2e\x59\x5b\x51\x2e\xea\xa7\x26\x33\x55\x42\x80\x54\x70\xda\xc2\x00\x3b\x3f\x24\xed\x82\x8c\x83\x28\xa6\x61\x9f\x1c\xb1\x73\xda\x45\xc4\xce\x1e\x01\x84\x1c\x2c\x5f\x4d\xa8\x4d\xcf\x5c\x68\x7c\x2a\x7d\x86\x0a\x6d\x13\x85\x43\xf2\x9d\xfa\x93\xfa\x3e\xb6\xfb\x64\xf3\xd1\x90\xb4\xb7\xfb\x9b\x4a\x79\x28\xf5\x8f\xed\x84\x16\x9f\xe2\x28\x2f\x68\x12\x25\x13\x95\xad\xb4\x87\xa7\x86\x41\x97\x54\x70\x65\x3c\x7e\xa2\x4b\xbe\xd2\xaa\x90\x0d\x52\x4f\x82\xa3\x2e\xc0\x43\x97\xaa\x02\xe3\xb4\xcf\xc4\xdc\xd6\xf0\x29\xfb\x65\xc8\xcf\xad\xe1\xd6\xb7\xec\xe4\xbf\x73\x7f\xf2\xbf\x3f\xf9\xff\xcd\x4f\xfe\xda\xf0\x1f\x1e\x43\xde\x91\xd1\xbf\x32\xe4\xc4\xa7\xca\xb3\x68\xc2\x6d\x70\xfb\xbf\xf2\x13\x3a\xbf\x07\x09\x5f\xd3\xb1\xb9\x21\xa8\x40\xb2\x57\xe8\x41\x9e\xb1\x71\x72\x08\xce\x2e\x2e\xa6\xac\xf7\x1d\xd3\x40\xeb\x7b\x5e\x98\x3c\x24\xdb\xee\x8b\x3e\xb0\xf8\x63\x52\xbc\xf9\xae\x91\xf8\x5f\xda\x09\xe6\xfe\x4e\x9c\xea\x82\x84\x1c\x3e\xdf\x7f\x2b\x26\x39\x24\xdf\x7d\x4b\x46\xe9\x6c\xbe\x10\x41\x9c\xce\xae\xc8\x2c\x3d\x8f\x92\x09\x0a\x55\xf8\x98\x8c\xa6\x41\x06\x7b\x01\xbf\x99\x0d\xb9\x29\x95\x34\x57\x97\xd0\x31\xe5\x8f\x16\x8a\x94\x35\xc8\x71\x95\x93\xce\x3e\xd9\x23\x5b\x9b\x3d\xf2\x9c\xfd\xbf\xd5\x23\xfd\x7e\xbf\x47\xfe\x97\xec\x91\x9d\x6f\xba\xec\xb0\x43\xf2\x39\x1d\x45\xe3\x88\x2f\xa4\xc3\x0f\x47\x5b\x3b\x4f\xb6\x9e\xd8\x26\x66\x51\x9e\x42\xba\x18\x87\xeb\xb2\x7a\xc9\xdf\xda\xb2\x8e\xb0\x01\x9a\x57\x6b\xf8\x66\x59\x48\x52\xa1\x04\x13\x2e\x13\xcc\xfa\x8d\x09\x65\x15\xe3\x79\x64\x23\x6a\xef\xb7\xfb\x0c\x2d\x07\x69\x48\xf7\x8b\xce\x26\xd2\x5a\xb3\xb1\xb5\xff\xd7\xc9\xe6\x0c\x90\xbf\x07\x06\x62\x2d\xd2\xe3\xf9\x9c\x66\x07\x41\xae\x55\xd9\x28\x3b\x5f\x9c\xe5\x45\xd6\x79\xdc\x95\x2f\x7d\x45\xc2\x66\xef\xb1\x75\x63\xc6\x73\xe7\x71\x54\x74\xda\xed\xae\xf9\x08\x3a\xe9\x9a\xd6\x55\xa3\x34\x64\x83\x4b\x7c\x9d\x97\xf2\x21\xc0\xfc\xb0\x47\xf6\x99\x40\x08\x1f\xdf\xef\x91\xff\xed\x3a\x01\x46\x3c\x33\x2b\x26\xd6\x80\x54\x1e\xab\x43\x4a\x1e\x91\x7d\xb2\x41\xb6\x36\x91\x9d\x91\x2f\xe8\x86\x0c\x6c\x6c\xdb\x30\x2d\xbb\xfd\x5f\xd3\x28\x61\xc3\xb4\x2d\x15\x47\x0b\x70\xe7\x0d\x53\xfc\xe6\xe8\x05\x23\xec\xad\x4d\xc9\x94\x84\x85\x1f\x50\xbe\x87\xe2\xbe\xdd\x7c\xf2\xd8\x26\xb8\x59\x1a\x7e\xf7\xed\xd6\x66\x19\xa1\x99\xf4\xa5\x9d\xa4\x73\x6a\x12\x85\x2b\xa9\x28\xa3\xb3\x20\x4a\xb8\xee\x88\xe5\xe9\xbb\x47\xe1\x34\xc6\x64\x0f\x02\x58\xdb\x2d\x6f\x77\x2d\x77\x38\xc0\xac\x24\x98\xb2\x78\xfd\xce\x30\x91\xd3\x4d\x82\xac\x7d\x98\x14\xdc\xd3\x4e\x8f\x6c\x6d\x76\xc9\xff\x9f\x61\x6d\xc3\xa9\x85\x3b\xdb\x11\xe6\xe7\xbe\x97\xbd\xaa\x2e\x55\x52\xd7\x67\xcc\x53\xfd\x3b\x24\x6e\x82\x0e\xeb\x40\x18\xfc\xc3\x85\x3a\x24\x88\xb7\x0e\x82\x7d\xca\xf9\xf2\x4f\xce\x00\xbb\xd2\xf7\x4f\x82\xb0\x84\xd6\x4b\xce\xed\xaa\x13\xc2\xba\xae\x9f\x14\x22\x9c\x2d\x66\xf2\x75\x8e\x45\x54\x0c\x66\x5f\xe5\x38\x7d\x0f\x50\x96\x14\xa3\xd9\x10\x96\x8a\xad\x61\xad\x18\xcb\xe9\xa3\x1a\xeb\x7c\x11\x04\xf9\x73\xe9\x8b\x00\xbd\x54\x10\xa1\x86\xc9\xd6\x13\xc4\xc2\xce\x82\x9c\xee\x3c\x21\x7b\x50\x46\xab\x87\x76\x9e\x18\x26\x00\x61\x48\xb9\x66\x11\xf6\xc0\x0e\x2f\xd4\x23\x5b\xdf\x98\x92\xb0\xea\xe7\xf3\xb3\x20\xe9\xf0\x62\x26\xf3\xb3\x16\xb3\x70\x77\x82\x16\xee\x73\x36\xf4\x22\x35\x76\x2f\x36\x7d\x04\xfc\x3b\x67\x57\x72\x45\x73\x65\x12\xd8\xeb\xbe\xe3\x81\x66\x92\xb4\x10\x42\xd9\xf7\xd1\x0f\xad\x09\x48\x24\xdc\x8d\xce\x58\x23\x35\x9f\x06\x5c\x5a\x83\xfd\xed\x72\x14\x2f\xf2\xe8\x5c\xc5\xc5\x8d\xce\xa2\x38\x2a\x94\x80\x73\x16\x24\x9f\x07\x67\x59\x90\x8c\xa6\x24\xa7\xd9\x79\x34\x92\x1b\x60\xc0\xdd\x4d\xb7\xbe\x1f\x44\x3f\xf4\x6d\x1a\x52\x31\x6a\x72\xb9\x0b\x8d\x69\xc6\xb6\xa1\x20\x9e\xa4\x59\x54\x4c\x67\x24\xa4\xf9\x28\x8b\xce\x38\x5b\x12\xf2\x0f\x4d\xfa\x17\xd1\xe7\x68\x4e\xc3\x28\x00\x21\x88\x7d\x0d\x0e\x93\x82\x66\x49\xc0\x9f\x4e\x7c\x7a\x1e\x24\x9f\x3f\x09\x5f\xd7\x9f\xf8\xbc\xfe\xff\x7e\x12\x23\x4d\x26\x9f\xd8\x10\x3f\xc1\x5b\xa2\x4f\x61\x34\x89\x9c\xa7\x1c\x72\x6a\x7c\x14\x79\x26\xf7\x54\x39\x03\xd2\x17\x4d\x91\x7a\xb6\xd9\x06\xb4\xfa\xdc\x5e\x91\x67\x16\x5b\x14\x33\x7a\xc0\xf7\xa9\xf6\x3f\x5f\xb6\x77\xd7\xbc\x3c\x53\xf0\xd8\x8e\xb5\x73\x77\x70\x05\x1b\xa4\xbd\x09\xa2\x12\xb4\x82\xcd\x5d\x18\x3a\x5e\x30\x6c\x90\x3d\xd2\xe1\xe2\x54\xe7\xbb\xa7\xe4\x91\x6e\xa2\x2b\x9f\x0d\x3c\xda\xb6\xf6\x5b\xe5\xcd\xc3\x6c\x0a\xd5\x29\x1a\xac\x51\x5b\x09\x26\x82\x70\x05\x84\x3d\x89\xd8\x29\x20\x4a\xf2\x22\x2a\x16\x85\xf4\xd8\x1e\x85\x34\x29\xd8\xa6\x65\x47\xf5\xe0\xb5\x1c\x26\x61\x94\x51\xd3\x80\xc1\x7c\x63\x93\xf7\xa4\x2c\xab\x1e\xd9\xc0\xab\xa9\x16\x6a\xa9\x05\x4d\xb5\x74\x5b\xad\x55\x78\x91\xd9\x13\xaf\x17\x77\xf3\x08\x6c\x72\x86\xf6\xcb\x8f\xaf\xd8\x3c\xc8\xd7\x2d\x18\x03\x28\x55\xf5\xad\x6b\xf1\xeb\xb4\x8a\x5f\xcb\xa7\x74\x1c\xb9\x22\xf4\x7f\x94\xf3\x97\x72\x98\x8f\x3b\x72\x27\x78\x66\x29\x95\x37\xd5\x5e\xe4\x51\x7c\x48\x85\x07\x7f\x4e\xc7\x5b\x52\x42\xe7\x21\xf2\xfb\x52\x29\x27\x44\xd8\x7f\x4c\xc4\xc9\x0a\x0b\x7f\xda\x79\x4c\xad\xae\x5c\x61\x01\xba\x5e\xfa\x7a\x10\x8f\x59\x87\x7c\xf1\x8e\xaa\x47\x52\x8f\xd6\x06\xc6\x86\xb5\x35\xee\x28\x2d\x4a\x18\xfc\xdf\x3f\x5f\x9e\x6c\x3e\xfa\xee\xf4\xcb\xf6\xb2\xf3\xf2\xe3\x2b\xf6\x7b\xff\xd1\xff\x9e\x7e\xd9\xda\x59\x5e\xab\x8f\x9d\xcd\xde\xce\xd6\xb2\xfb\x5f\x83\x7e\x01\x4a\x50\xb5\x81\x1b\xef\xf2\xca\x18\x03\x02\xe7\xcf\xf3\xb6\x56\x44\x98\x78\x82\x09\xa7\x7f\x2f\xda\x5e\xe8\x25\x78\x37\x78\x7b\xe1\xae\x24\x0b\x71\x7a\x50\xf8\x71\xcf\xce\x63\x72\x7d\x5d\x96\xf7\xcd\x0d\x87\x3d\x26\x51\x52\x32\x70\x83\xfb\xdc\xcd\xd0\xbd\x6c\xa4\xd1\xe0\xb7\x37\x1b\x59\x6d\x72\x91\x92\x8d\x34\x5f\xcc\x18\xe0\x71\x2e\x8e\x0f\xb3\x34\x7c\xf4\xdd\xb7\x8f\xb6\x36\x55\x36\x9c\x71\xa1\x77\xa3\x34\x26\x9d\xc3\x0f\x47\x83\xc3\x97\x07\x84\x9d\x1b\x86\xdb\x9b\x9b\x3b\x5d\x9b\x27\xa3\x6a\xdd\x53\x28\xca\x75\x06\x2e\xf3\x1a\x0e\x5b\x9c\x09\xb7\x7b\x64\xbb\x99\xad\x2a\x66\xaa\xc6\x96\x42\xe8\xa4\x4f\xfe\xf9\xfe\xe5\x4f\x8e\x83\x42\x55\xc0\x3f\x9a\xd2\x1a\xdd\x49\x45\x90\x75\xc3\xd3\x04\xd0\x01\xef\x75\xce\x90\xbf\xed\x91\xc7\x5d\x32\x24\xed\x76\xa3\x71\x8f\xe2\x08\x1e\x92\xa9\x0e\x82\xf2\x29\x4a\xec\xf1\x31\x2c\xfc\xb4\xff\xf3\xd1\x8f\xff\x3a\x7a\xff\x3f\xf6\xac\x42\x1d\x25\x73\x6a\xd7\xef\x9d\x5c\x0e\x74\xeb\xb1\x6f\x6d\xad\x3e\x72\xb1\x9a\xfc\xe7\x12\xf7\xe0\xe1\x0e\xcd\xa9\xc0\x19\x5e\xe0\x39\x87\xe0\x7b\x27\x31\x38\x9f\x63\x33\xe3\xd0\xe1\x0e\xf8\x31\x3a\xc4\x96\x1e\x65\xe4\xf9\x43\x9d\x52\x8c\x13\x2a\x3f\xa3\x98\xe7\x99\xad\x27\xdd\x1e\xd9\xde\x54\xae\xd3\x0c\x29\x4f\xa2\xd7\x1a\xa4\x2c\xdc\x6c\x81\x96\x78\xbb\x3a\x84\x2c\xae\xd4\xc7\x7a\xc5\xd6\xd0\xfc\x5c\x9e\xf6\x76\x1e\xdf\xab\xf1\xef\xd5\xf8\x7f\x73\x35\xbe\x50\xe1\xcf\x47\xd5\xf6\x7b\xb7\xb0\xb8\x6b\xe9\xf8\xa7\xad\xdd\x95\xe2\x36\xd6\xd8\xe9\x71\x3d\xd3\x7c\xe4\xb5\x04\x9b\x07\xc5\xb4\x47\x12\x6a\x58\x7f\x7f\x02\xcd\x85\xf3\xf0\x54\x5e\x55\xe3\xc8\xf1\xd2\x6b\x81\xb0\xd7\x01\x1b\x1f\xf6\x1f\x4f\xd5\x59\x23\x75\xc3\x0b\x5c\xb1\x90\x09\x9d\x2f\x0c\x7a\xa8\xcb\x2b\x17\x97\x56\xb1\x7e\x9a\x74\xda\x30\xaa\x36\x8e\xb4\xdc\x35\xec\xa7\xf3\x94\x31\x31\xfe\x96\xf0\xf0\xdd\x01\xd1\xf7\xca\xfc\x85\x61\xbb\x47\x28\x62\xbd\x9f\x38\x1b\x14\x17\xde\x1d\xdb\xc9\xa6\xb7\x07\x49\x88\xdb\x47\xcd\x97\x56\x46\xd6\xd4\x1b\x83\xd7\x87\x1f\x3e\xbe\x7c\x0b\x2b\xe8\xe0\xe8\xed\xdb\x97\x07\x1f\x0f\x8f\xde\x92\xf7\x2f\x3f\xbc\x3b\x7a\xfb\xe1\xe5\x87\xd2\x56\xc3\xa0\x08\x70\xb3\xec\x1b\x6f\x4e\x83\x87\xc2\x8c\x70\x16\x5c\x8e\xd2\xd9\x3c\xa6\x97\x51\x71\x35\x24\x4f\x80\xb2\xac\x1e\x82\x2e\x54\xd9\x21\x84\x10\xcf\x40\xee\x37\x5d\x4f\x98\x2d\x61\x73\xf0\xc5\x8c\x92\x0f\x07\xbf\xd0\xb6\x9d\x10\xdd\x19\xc0\xbe\x0e\xfc\x25\x24\x17\xd3\x68\x34\x25\xb3\xa0\x18\x4d\x85\xf8\xca\x37\x21\xc6\xd0\x42\xa3\x9c\x27\xaa\x0d\x34\xed\x0f\xa3\x0f\xd7\x51\x4e\x6f\xc1\x02\xc1\x1f\xe4\x3a\x1a\x77\x3e\xf9\x09\xf9\x04\xde\xc6\x45\xe1\xa9\xeb\x66\x5d\x15\x66\x63\x15\x60\xbb\x0e\xd4\xd2\x8a\x79\x5d\x1a\xa8\x1b\xaa\x11\x7d\xb7\x2b\x5a\x3a\x58\x1c\x47\x19\x35\x3c\x02\xd8\xe8\x2a\x1b\x0f\x1b\x8a\xa7\xf5\x0a\x70\x1d\x35\x1c\x9b\xb6\xe8\xbf\x90\xc6\xb4\xa0\x55\x35\xd8\x83\xb1\x71\x83\x5f\x61\xff\xc2\x76\x2d\x20\x44\x41\x10\xbc\x3e\x50\xee\x70\x5b\xa9\x84\x3b\xcb\x21\x29\x77\xe1\x1c\x15\xfd\xb5\x35\x29\x0c\x9a\x24\xbc\x66\xab\x3d\xe0\x45\x26\x13\xfe\x34\xcf\x43\xe2\x91\x59\x18\x7b\x6c\xc5\xab\xca\x66\x83\x3d\x4b\x5e\xfb\x99\x7b\x4c\xd7\x8e\x7f\xe5\x12\x7f\xf1\xf2\xd1\xc1\xab\xe3\xb7\xff\xf3\xf2\xbd\xaa\x27\xa4\xa3\xe9\x22\xf9\x4c\x43\xf1\xaa\x84\xbf\x18\x15\x7f\xfd\x8c\xce\xe3\x60\x44\x3b\x83\x7f\x2f\x4f\xfe\x9d\xfc\x3b\x3b\x7d\xf6\xef\x2f\x83\x49\xaf\xbd\xbc\x7e\xf4\xe8\xfa\x4b\xbb\x0b\x2e\x8b\xbf\x78\xe1\xff\x7d\x2a\x4b\x9c\x88\x32\xa7\xac\xd0\x89\x2c\x75\x7a\xe2\x2f\x67\x97\x32\x0a\x95\x94\xd1\x6d\xa1\x96\x54\x43\xa8\x8c\xb8\xe6\x63\xd9\x6d\xc9\x49\x0d\x0c\xb8\x6b\x16\x10\x8f\xf8\xcb\x60\x00\x77\xa0\x54\xb8\xc3\x00\x4f\x1b\x50\xc1\x9a\x43\xfa\x2c\xef\x80\x65\x99\x2b\x57\xf8\x9d\xb1\x60\xc8\x06\xe1\xef\x5f\x0d\x51\x5d\xdd\x59\x5b\x9c\xcc\x75\x6a\xe0\xb3\x05\x83\xbe\xa3\x52\xc2\x9a\x86\x1b\xd3\xac\xb9\x8b\x4f\x77\x66\xcf\xee\x8c\x18\x3a\xf8\xf2\x55\x16\xd4\xe0\xfa\x2e\x19\xd1\x18\x1c\xf5\xcb\x47\x9c\x46\x99\x51\x4c\x83\x4c\x9a\x70\x59\xad\x88\x64\x6b\x41\xfb\x81\xc0\x57\x43\x21\x2b\xf2\xed\x71\x66\x79\x7b\xaf\xc3\x7f\x95\x76\x95\x02\x67\x18\x7e\xd9\x23\x5b\x9b\x9b\x9b\xe4\x21\xbf\x9c\xf1\xdc\xb5\x7a\x1d\x3f\xc0\xbb\x3d\xc0\x8e\xc4\x17\xe3\x20\x39\x15\xf4\xc2\x83\xad\x88\x77\x7d\xab\xa3\xca\x9d\x31\x8b\x44\x20\x06\x9d\xb0\xac\x74\x3a\xcc\x59\x44\x7f\xbe\xc8\xa7\xa6\xc5\xa0\xed\xc5\x1b\x83\x0b\xe7\x3f\x8c\x47\xfe\x24\xb6\xd0\x20\x0c\xc1\xc7\x8d\xb2\xf3\x4c\x0d\x9e\xa9\xa5\x31\xae\x1e\xee\xad\xf1\x0d\x57\x1e\x0c\xc4\x59\x3b\xe2\x6e\xf0\x05\xd7\x83\xdd\x58\xde\x0a\xa9\xd4\xc3\x90\x97\x0a\xb2\x2c\x3a\xa7\x98\xe1\x06\xa1\x9a\x3d\xd9\x5e\x05\x87\xf5\x40\x1b\x5e\xf0\xfd\x36\xa5\x48\xa6\x90\xaf\xd5\xa3\x90\x5c\x5f\xcb\xaf\x93\xcd\x53\xb5\x65\xc2\x15\x36\xef\x9b\x86\x16\x09\x66\x09\x9e\x88\x25\x3a\xef\xe6\x45\xf6\x54\x6f\xaa\x24\x5e\x06\xda\x57\x0d\xcb\xba\xe5\xae\x26\xd7\x11\x5e\xa9\xe4\x62\x4a\xa5\xdf\x81\x90\x8b\xe5\x70\xfa\x02\x8d\x3b\xdb\xdf\x43\x84\x66\x41\xc4\x15\xa8\x75\xed\x3b\xd5\xd1\x7e\x9c\x66\x1d\x86\x97\xcf\xf4\x8a\x9f\x14\x7d\x03\x30\x9d\xc0\x74\xfc\x40\xfd\x69\x90\x1f\x5d\x24\xef\x20\x94\x52\x71\x05\x81\x56\x2d\x2e\x50\x82\x9e\xcf\xf4\xea\xb4\xdc\xb6\xb3\x9d\x26\xe4\xf0\xdd\x41\xbb\x6b\x2d\x7e\x21\x5b\x54\xd4\xe9\x98\x59\xe8\x65\x72\x80\x7d\x10\x0a\x37\xe6\x04\x1d\x37\xa2\x9c\xe4\x45\xc4\x83\x9c\x44\x21\x22\x6a\x6c\x16\x5a\x8a\x70\xbf\x1d\x67\xa7\xfc\xb4\x24\xe5\x00\xb6\x7b\x64\x54\xf4\xa3\xc7\xa9\xc0\xec\xd5\x24\x4d\xa8\xd0\x3c\x75\xd6\x3f\xd9\x62\xff\x45\x16\x15\xe0\x2f\xc5\xe2\x46\x08\xc4\x3a\x42\x7d\x72\xcf\x50\xd2\xc5\xe0\x7a\x59\xed\x42\x81\xe4\x1d\x7a\xd5\x0b\x82\x35\x4c\x3f\x56\xbd\xf4\x03\x7a\xba\x42\x8c\x4d\x76\xd7\xe0\xdc\x2b\xa0\x48\xa2\xa9\x1e\x4b\xc4\x73\x84\xaa\x3d\x6b\xca\x5e\x86\xe8\xd9\xaf\x6f\x54\x15\x16\xcf\x37\x13\x1b\x14\x55\x63\xa9\xc1\x1c\x4a\xed\x3e\x4a\xac\x3f\xdf\x3e\x69\x99\xdd\x09\x6d\xa2\x75\x46\x71\xdc\xf1\xfc\x2b\x5d\x80\x95\xb5\x7e\x6d\xd6\x6a\x6f\xd8\xec\x76\xa3\xdd\x22\x39\x36\xcc\xee\x63\x3b\x6d\xcd\x07\xe1\xc5\x56\x5a\x90\x7c\x31\x9f\xa7\x59\x01\xba\x35\x7e\x53\xfb\xee\x80\x28\xad\x4a\xdb\x70\x04\x59\x4e\x98\x8d\x5f\x2a\xdc\x64\x31\xd6\x53\xd9\x4a\x14\xe6\x3d\xd6\x03\x4d\x55\x5a\xd0\x23\x87\xba\xf6\x6e\x5a\xea\xed\xc6\xd5\xe3\x6a\x0c\x3a\x4e\xda\x4b\x5e\x69\x2f\x4f\x7b\x3b\xdf\xdc\xab\x74\xef\x55\xba\xff\x11\x2a\x5d\xf1\xb0\xe2\x56\xcf\xb1\xf7\x83\x2c\x4d\xc8\xff\x2c\x66\xc1\x79\x94\x93\xef\x03\xf6\xf9\xdf\x9f\xf9\x67\x7f\x46\xbd\xea\xde\xc1\x80\x1c\x26\x51\x11\x05\x71\xf4\x1b\x25\xff\xe0\xbd\x60\x84\x1a\x90\x1c\x2c\xb1\xa4\xc1\x0d\x0c\x94\x2d\x55\xc3\xc9\x79\x1f\xb4\xba\xb2\x98\x8c\x4e\x22\x02\x5b\x1d\x86\x43\xb2\x59\x77\xf3\xc6\xad\x3d\xd8\xf0\x6d\xb7\xba\x5e\x33\x13\xaf\x3b\x5d\xfd\x0a\x4d\xc6\xd0\x1a\x4b\x84\x42\x4b\xda\xa0\xc7\xe3\x84\x97\xbf\x4e\xe9\x21\x55\xcf\x58\x56\x23\xb3\xa4\xef\x5d\xaf\x1b\x22\x34\x02\xd6\x9e\xd3\xfb\xc1\x9a\x40\x4f\x89\x2b\x5e\xde\x56\x4f\x34\x66\x38\x4d\xe5\x59\xdd\x32\xd5\xb2\x6c\xd2\x31\xe6\x51\x66\xbb\xeb\x6d\x14\xcd\x2a\x08\xcf\xd9\x19\x55\xce\x0e\x39\x7c\x01\x39\xb2\x77\x6a\xd2\x36\x36\xca\xfc\x0c\xf9\x5f\xff\xf0\xb7\x42\x4e\x35\x3a\x5b\x3e\x0f\x12\x23\x55\xe9\xf2\x5d\x10\xff\x9f\x1d\x98\xe4\x0b\xa1\xe6\x86\x17\x12\x07\xea\xf0\x28\x0d\x88\xfc\xa6\x3a\x4a\x59\x57\x17\x51\xcd\xf3\x32\xdb\x6a\xc0\x6f\x9e\x21\xd1\x60\xb5\x67\x45\xaa\xe7\x89\xd6\x65\x28\xf7\xe9\x83\x74\xce\x02\xe8\x99\x6a\xbb\x4f\xcf\x69\x76\xd5\x91\xde\x90\x3f\x44\xc9\x24\xa6\x6f\x38\xc2\xbb\x64\x48\xbc\x19\xba\x26\x31\xad\xaa\x23\x7e\x70\x31\x81\x76\x9c\xe6\xf5\x75\x49\x37\xc8\x82\x48\xa6\x71\x8a\x34\x6c\x8b\x44\x86\x9c\x9f\xbd\xbd\x3d\x4e\x35\x18\x48\xb8\x5d\x90\xb0\xec\xcc\xcd\xc0\xf8\xb5\x6e\xdb\x57\x9d\x90\x61\x2d\x9f\x92\x83\x01\x0f\xf9\xa7\x92\x84\x57\x76\xcc\x5c\xe4\x7a\x6c\xe4\x4f\x9e\x33\xa2\x33\x78\x8f\x56\xc3\x8e\x9e\x33\xa0\x72\x17\xdf\xa2\xe3\x16\x7f\xe1\x75\xe5\x9c\xa9\x8a\xaa\xa4\x80\x13\x76\x41\x79\x24\x16\x45\x47\xf2\x9e\x2e\x19\x47\x34\x0e\x2d\xd3\x03\xd1\x8a\xd1\x53\x8b\xe7\xe0\x0e\x5a\x8c\x87\x77\xcd\x22\x43\x99\x6c\x45\x7d\x90\x64\xe1\x3a\xc2\x72\xd8\x9b\x84\xed\x4b\xd6\x26\xbf\x05\x8b\x33\xf5\xf0\x8e\xac\x28\xea\x13\x72\x22\x13\x03\x9f\xdc\x8b\x81\xf7\x62\xe0\xdf\x5b\x0c\xd4\xef\xf3\xf8\xa2\xb9\xab\x17\x7a\x77\x73\x77\xcf\x40\xde\x48\x75\x63\xa9\xb1\x32\x9c\x13\x45\xa4\x16\x69\x85\xcc\x3e\xd1\x29\x52\xb8\x5c\x93\xb9\xec\xd3\xb8\xb8\x07\x9e\xa7\xf3\xb5\x64\xb0\x89\xc0\xc0\x27\x3f\x0e\x76\xa8\x0d\xa1\x71\x06\x2a\xc1\x3d\x3d\xfb\x8a\x58\x39\x86\xd2\x15\x34\x06\x6f\x82\x24\x98\x50\xfd\x3a\x9f\xb1\x2c\x8e\x0a\x43\x15\x20\x5d\x78\x68\x70\xb4\xdf\xcf\x0c\x0c\x39\x15\x67\xb3\x1a\xfb\xf7\x90\x32\x0e\x13\x25\xa6\x7f\x4f\x4b\xfc\x3b\x0b\x72\xee\x73\xa1\x2c\x12\xc5\x84\x82\x97\x4a\xcf\x26\x65\x7a\x9a\xb7\x1d\x8b\xca\x36\xcd\xf6\x80\xc4\x1c\x44\x88\x36\x4a\x63\x4d\x18\xee\x44\x51\xf8\x1c\x45\x1c\xca\x8e\x4f\xfa\x32\xcc\x99\x60\xa3\x52\xea\xdc\x1c\x73\x67\x9c\xfa\x92\x42\x84\xe6\x10\xdb\xae\x1a\x67\x9f\xbc\x61\xac\x3c\xa2\xb9\x08\x4e\x0d\xf8\x70\xbc\x50\x1a\x9e\x3d\x1b\xe3\x4d\x0e\xea\xfa\xed\x22\x8e\xb5\x63\x8c\x1e\x93\x22\xe9\x65\x04\xd7\x66\x3e\xdc\xfd\x39\xe3\x0f\xdd\x59\xd8\x1d\xb2\xf6\xb5\xe2\xee\x38\x98\x6c\x14\x6d\xc7\x0e\x70\xa2\x42\xc9\x98\x07\x31\x52\x13\x3e\xe6\xfd\xbb\x03\x11\x61\xa2\x3a\x76\x8c\x46\x9b\x70\xf5\xca\x09\x0f\x90\xae\x4e\x9c\x36\x9a\x38\xe8\x21\x83\x74\xb1\x64\x10\x9d\x4a\xf2\xa0\x03\xd5\x52\x89\x8d\x75\x0f\x77\x2d\xa1\x20\xdf\xe3\x46\x4f\x69\x4b\x86\x54\x4e\x17\x7b\x04\x82\x6f\x57\x85\x90\x22\xcf\xf4\x6f\x4e\xdd\x50\xe4\x94\xb1\x03\xf4\x59\xe3\x59\xdf\xc1\x3a\xe7\xf7\x2a\x2a\x2e\xc6\xbc\x8b\x78\xee\x80\xb7\xfa\xac\x68\xba\x23\x2e\xc1\xbd\x27\x46\x8a\x19\x84\x17\xa3\xd0\xde\xac\xc0\xd9\x0c\x1c\x7b\x9e\x79\x01\x54\x55\xde\xd8\x24\x02\x17\xbe\x90\x45\xf2\xfd\x94\xa4\xc3\x15\x22\x17\x05\x72\xdd\x36\x42\x42\xb3\x18\x44\xd8\x1d\xab\xd8\x47\x6c\x2f\xc9\x2b\x3b\x5f\x16\xf2\x04\x00\xa3\x65\x80\x01\x21\xcf\x08\x30\xa4\x8e\x29\x7e\x2d\x88\x54\x67\x80\x66\xa9\x44\x99\x51\xe5\x56\x19\xab\x38\x1c\x54\x49\x17\xb9\x1c\x9f\xa6\xb4\x75\xf6\x2b\x46\x17\xcb\x90\x43\x3b\x5b\x44\x71\x08\x08\x13\x83\x62\x99\x8e\x7f\x5b\x60\xf8\x1f\x8f\x5e\x1c\xad\xaf\xaf\x83\x78\xdf\xce\xc9\x62\x12\x5f\xf5\x45\x14\x31\x76\x20\x58\xe4\x6c\x4f\x2c\x54\x2b\x09\x72\x29\xcb\x7e\x4b\xbb\x1a\x75\x43\xc2\x18\x07\x64\xa8\xf7\xd6\x5b\x46\xa4\xa7\xb3\x5f\x4f\x58\xf6\xc9\xe6\xe9\x29\x13\xbb\xf0\xe7\xf5\xb5\xb2\xdb\xb4\x41\xf9\x8f\x2d\x28\xc3\xc6\xb2\xeb\xbf\x2a\xb2\x6a\x07\x48\x82\xb8\xb0\x83\x5e\x85\xa8\xb2\x5b\x54\x75\xa9\xae\x8d\x4e\x79\x08\x94\xc4\xff\x2c\x8b\x38\x7e\xbe\x85\xfc\xae\x4f\xc3\xab\xf8\x81\x26\x56\x04\x0b\x5f\xa8\x02\xe3\xac\x0e\x6d\x99\x12\xa5\xbe\x98\xd2\xf7\x33\x46\x2c\x16\x65\x5e\xe7\x31\xcd\xb3\x1b\xe6\xf0\xa2\x1d\xcc\xcc\x94\x51\xa4\x65\x40\xe3\x0d\xa7\x62\x76\xd7\xa8\xa6\x7c\x08\xf6\x35\x94\x20\x15\x96\xd5\xd4\xd3\xb3\x0c\x73\x45\x93\x7a\x77\x8e\x92\x43\x2e\x32\x0a\x37\xa4\xef\xdf\x1d\x28\x0f\x4c\xdc\x94\x65\x14\x24\x4a\xd8\x8c\x12\xa1\x74\xf1\xfb\x7a\xca\x5c\x5f\x8f\xfd\x7e\x7f\x89\xe3\xbb\xd9\xbe\xf4\xb4\x26\x53\x16\xf5\x70\xd2\x3a\x9f\xf6\xa5\xee\xe6\x57\x21\x42\x49\x03\xa6\x4f\x7a\x3c\x6b\x65\x88\x16\x25\x4b\x14\x3b\x6f\xa4\x0d\x4c\xd3\xeb\xbf\x6f\xef\xf5\x3e\xf7\x7a\x9f\xbf\xb7\xde\x47\x28\x7d\xc2\xb3\x5b\xdc\xfc\xf9\xf4\x3e\x4a\x5b\x83\x15\x3f\x9c\x39\x29\x8d\xce\x8b\xe7\x06\x1f\x61\xc3\x30\x5d\x7e\x38\x9a\x0a\x18\xa9\x95\xbc\x5b\x11\x28\x6c\x4d\xcb\x4b\x79\xc7\x63\xd3\x2f\x2e\xb8\xc8\x17\x62\x49\x57\x96\x1c\xd4\x61\x35\xa3\x9d\x45\x00\x39\x6a\x97\x8e\xaf\x83\x96\xbe\x59\xef\xf2\xe5\x01\x8b\xe6\x8b\x42\x3d\x5e\x4b\xe8\x85\xc0\x66\x47\x6f\x97\x4c\xe8\x18\x92\xb6\x82\xb3\xe2\x68\x0c\x49\x3b\x3c\xfb\xe4\xcb\x95\x62\xe2\x8e\xea\x93\x6a\x74\x42\x9b\x35\xaa\xe0\xbc\x8d\xfa\x72\x65\xa3\xdb\x6e\xa3\xf3\x45\xf1\x8a\x5e\xd6\x0f\xf3\x15\xbd\x2c\x1b\xa3\x99\x55\x3d\xc0\xfa\xb6\x38\x50\xd9\xd0\xfc\x6d\x59\xe3\x12\x9b\xd1\x89\x86\x93\x13\xd1\xd3\x48\xee\x89\xa1\xf7\x44\xb7\x00\xf8\xb4\x64\xe7\x7a\xf1\x5c\xef\x5a\x9c\x76\x5a\xc3\x1d\xd8\xa2\x9e\xde\x6f\x51\xf7\x5b\xd4\xdf\x7b\x8b\xd2\x57\x13\xb4\x98\xde\xe8\x5e\x42\x00\xdf\xed\xab\xc4\x92\xe8\xff\xbe\xf0\xff\xbe\x4b\x10\xff\x3d\x48\xcd\xb6\xc9\x40\xa4\x39\xb2\x05\x34\x17\xc9\x12\x6c\x54\xd6\xde\x28\x4d\xc6\xd1\x44\x82\xa1\x50\x38\x18\x5a\x46\x56\x91\x60\x17\xe2\xd9\x9a\x71\x41\x23\x12\x25\xcc\x8f\x3c\x14\xb8\x85\x0c\x48\x94\x20\x87\xf9\x87\xab\x64\xc4\xb7\x18\x0c\x95\xf3\x54\x09\xc6\x58\x71\x46\x6d\x20\x91\xaa\xea\xe2\x0e\x8a\x30\x44\x74\x16\x24\x32\x9b\x7b\x3d\x74\xfa\x23\x93\x95\x10\x02\x3e\xd3\x9a\xdc\x19\x28\x9d\xb7\x78\x23\x08\x4a\xc0\xcd\xd3\x2e\x79\xf0\x80\x88\xdf\x7d\xd0\x09\x1e\x8d\x3b\xed\xcd\xcb\x36\x77\x5d\xb2\xd9\x25\xcf\x48\x8b\x16\x53\xb6\x7b\x40\x60\xd2\xe7\x57\xaf\x82\x7c\xda\x22\x43\x3b\x99\x6b\x74\x5b\x5a\x4a\x40\xf1\x9f\x7e\xcc\xd2\xd9\xf3\xdf\xa1\xa7\x6d\xd1\x25\x14\x56\xe8\xf9\x15\x34\xcc\x3a\xbd\x9f\x84\x87\xac\x9c\x8a\xe6\xe5\x85\xe4\xe3\x50\xb0\x7a\x3c\x8b\x64\x14\xd3\xdf\x69\x00\xc7\xac\xad\x9a\xae\x63\x98\xd2\x4e\xcb\xf9\x41\xe3\x3c\x48\x17\x49\xa3\x6b\xa6\x3b\x18\x87\xb7\x6d\x4e\x42\x78\x28\x25\x60\x7c\x54\xce\x14\xfc\x8e\xfd\x3f\x56\x0d\xa2\xc9\x70\x26\x01\x03\x18\x7d\x56\xdd\x7b\x59\x4c\xef\xfa\x80\xd0\xf8\x70\x70\x47\x67\x03\x08\x00\x5c\x7e\x36\xe0\xaa\x0f\xce\xc5\x23\xea\xed\xd1\x1c\x77\x66\x5e\xd3\x8f\xf9\x0d\xba\x80\xee\xb8\x39\x77\xe5\xfe\x2f\x08\xf6\xd0\x7d\xf8\x7c\xff\xad\x15\x8c\x4c\xf0\x54\xae\x95\xe1\x0f\x68\x85\x6e\x66\xb9\xb6\xc6\x7b\xd7\xe7\x96\x51\xea\x2d\xcd\xcb\x62\xaa\xb5\x41\x3d\xd2\xc6\xa1\x9b\xdb\x3d\x31\xcc\x09\x2d\x86\x25\x3a\x4f\xe9\xab\xb4\x8f\x0b\x8a\x91\xf4\x84\x9e\xce\x28\x7c\x1e\xc4\x46\x94\xb1\xbe\x15\x38\xfb\x3c\x88\x1d\x67\x24\x2a\x6d\xb9\x06\xe8\x59\x69\x28\xc2\xcf\xdf\x4d\x06\x23\x8a\xde\x64\x38\xa2\x68\xc3\x01\x35\x39\x8b\x32\xee\x12\xc4\x60\xb9\x59\x7b\x72\x12\x80\xee\xe9\x49\xb2\x29\x27\x5f\x1d\xa1\x90\x35\xa7\x71\x85\x37\x24\x27\x5a\xa0\xe2\xd7\x7b\xc2\x8d\xe6\x8f\xfa\x36\xcf\x86\xc0\x91\xcf\x39\x3f\x51\xc0\x28\x74\xa4\x75\x8f\x35\xc4\xd5\xf0\x3c\xe5\xb3\x46\x01\x95\x1c\x9b\xd3\x2c\x98\xd0\xfd\xa2\xc9\xc9\x59\x80\x96\xe2\xc8\x07\xa1\x0e\xb5\x15\x58\xe2\xeb\x8e\x73\xec\x22\x85\x93\xe5\x2a\x68\xf1\x0e\x4c\x38\x77\xac\x19\x13\x83\x2a\x1d\x8e\x95\xf9\xfb\xcf\xb7\x77\x60\x72\xd5\xd7\xd1\x33\x67\x47\xd6\xd0\x94\xc8\x78\xbb\x61\xf9\x7a\xdb\x73\x96\xb8\xb6\x7f\x65\x8b\x97\x2c\x57\xa3\x5f\xd6\x44\x35\xed\xc2\xfe\x5b\x8f\x09\x00\x73\x30\xa1\x24\xba\xaf\x81\x09\x44\xca\xb7\x18\x74\x6f\xad\x84\xb2\x67\xf3\x28\xe6\x87\xb7\x5a\xf2\x16\xa0\x15\x34\xee\x42\x48\x3c\x6c\x96\xd3\x9f\x2d\xaf\x35\xa4\x47\xbb\x98\xd3\xad\x2a\x91\xd5\xed\xe0\xd6\x2d\x27\xaa\x6a\x6e\xe4\x14\xbe\xa0\xa3\x68\x16\xc4\xe5\xa8\xd0\x52\x60\x43\x24\xe8\x02\x25\x44\xf9\xe7\x1d\xb0\x29\x3c\xd5\x0c\xb6\x3c\x56\x72\xc9\x11\x0c\xe4\xeb\xca\x41\xd7\xaf\x20\x54\x61\x35\xf3\xf8\xe8\x39\xa1\xae\x34\x26\x55\xca\x19\x5c\xd9\xe1\xf7\xcf\xc4\x69\x6e\x82\xa7\x17\x41\x11\xec\x27\xe1\x7b\x3a\xa2\xd1\xbc\x84\xda\xbd\xa8\x32\x0b\x2a\x7c\x95\x92\x42\x09\xbc\x43\x10\x2b\x0d\xd3\xac\xb4\xf1\xa0\x73\xe3\x6c\xb7\xc2\xa0\xcd\x82\xf5\x83\x2e\x81\xbf\xdd\xa0\x1b\x0f\x53\xa0\xe5\xc6\xa3\xf5\x96\xaf\x1f\x74\x75\xb1\xdb\x8d\x7d\xd5\x99\xae\xa4\xeb\xea\x61\x37\xe1\x6f\x2e\xe8\x6d\x19\xdc\xaa\x03\x6c\xb8\x49\xd5\x6e\xd2\x9e\xc1\xd9\x80\x4d\x18\x1c\x97\xfa\xef\xe8\xfc\x53\xbb\x7b\xb1\xf3\xff\xfb\xe0\xa2\xf9\x0e\xe6\x16\xf0\x23\xa2\x12\xae\xc9\xc6\xcd\xf0\xe0\x11\xf5\xdd\xc8\xe9\x75\xbd\x6d\xd4\xd5\x9b\xf7\xd3\x9e\x29\x1f\x9b\xf1\x8d\x23\x9a\x24\x2b\x8c\xc3\x84\x2e\x19\x47\x29\xd0\x57\x1e\x47\x83\xce\x97\xf7\xf8\xce\x8f\x92\x25\x84\x23\x6c\x17\xab\x3a\xca\x40\xfc\x1d\xb5\x72\x6e\xd2\x51\x26\xea\xdc\xd9\x81\x17\x45\xfb\xaf\x19\x13\x82\xf4\x0f\xcd\x0f\x70\x13\x8a\x31\x46\x78\x2b\xae\x34\xe2\xc7\x2f\x19\xb6\xbf\x6e\xda\x38\x74\x5f\xc6\xf2\x2f\x99\x42\xb3\x4e\xdf\x58\x4b\x3b\xf2\xfa\xf5\xeb\x86\x7d\x88\x4b\x29\x48\xd5\xb4\x52\xcb\x1f\x68\x36\xa7\xb5\xdb\x93\xc2\x00\x87\xae\x46\x80\x03\x53\xd1\x8b\x7c\x71\x36\x8b\x8a\x5f\xd2\xac\xee\x10\xa0\x01\x4b\x56\xba\x2f\xbf\xda\xb2\xa3\x41\xab\x02\xaa\x74\x2b\x2e\x69\xcf\x3a\xc1\x3b\xd6\x1d\x5a\xaf\xd9\xc3\x69\x4a\x8f\x67\xa4\x1e\xa4\xa1\x09\x06\x4b\xd8\x48\x81\xa3\xad\x55\x48\xe8\x17\xdc\x92\xb6\xf8\xe0\x42\xe8\x93\xb2\x91\x87\x0a\x96\xa5\xab\x73\x57\x19\x80\x29\x71\x96\x41\x79\xc5\xd3\x32\x60\xf3\x80\x51\x53\x65\x59\xb6\x35\x5a\xd3\x50\x1e\x71\x30\x9d\xe8\xca\x1f\x28\xcf\xdc\x28\xcd\x42\xa5\x25\x50\xf3\x26\x2b\x71\x32\x5e\xbf\x7e\xed\x02\xf3\x65\x87\xaa\x54\x2b\xc2\x18\x34\x4b\x80\x6f\x61\x39\xc4\x63\x1d\xaa\x4b\xa4\x2a\xdf\xe7\x9a\x80\xd9\x9a\x51\xb7\x19\xa6\x49\xb6\xe2\x18\x51\x72\x16\xe4\x58\x01\x28\x3a\x00\x1c\x5a\x30\x0c\x01\xa3\x40\x96\xdd\xde\x0a\x6d\xcc\xa2\xc4\xb4\x1a\x73\x5a\x10\x10\x37\xac\x7f\x1a\xe4\xd3\x2c\x28\x2a\xc7\x50\x02\xd3\x68\x4b\x5a\xbd\x47\xd2\xea\xa1\xa2\x43\x7e\x90\xfa\x03\x8e\x30\xb3\x30\x4f\x35\xab\xf7\x70\x12\xe4\xef\xb2\x68\x54\x89\xb3\x12\x98\x1b\x5f\xae\xac\xde\x4b\x11\xce\x2b\xaf\xea\xa5\x82\xb9\x61\x1b\x67\x9e\x93\xb5\xa7\x99\x72\xb0\xaf\x44\x43\x32\xd6\xc9\xcf\xdc\x86\xad\xaa\x6f\x36\x28\x6a\x11\xb3\x10\xe3\x3a\xb3\x3f\xd2\xf6\x41\xc8\x54\xe0\x2c\x32\x5e\x02\x05\xa3\x22\xcd\xa4\xdc\x25\x2d\x8a\xc0\x3c\xbf\x47\x18\xac\x61\xa3\x2f\xa0\x7d\x8d\x8d\xa5\x05\x91\xf3\xc4\xbb\x87\x9e\xb1\x72\xa8\x83\x8c\x82\x05\x20\x3c\xca\x3c\xb0\x9e\xa9\xa0\xf8\x5f\xdc\x2a\x49\xd7\xc3\x50\xd1\xee\x79\xed\x07\x7a\xd2\xcc\xa9\x4f\x8b\x69\xa7\xdb\x73\x49\xf6\x75\x3a\xf9\xff\xd8\x7b\xf7\xfd\xb6\x6d\x66\x51\xf4\xef\xe4\x29\xd0\xec\xf3\x35\x52\xcd\xc8\xba\xdb\x51\xe2\xae\xe5\xc8\x76\xec\x95\x38\xf6\xb6\x9d\xb6\xdf\xf6\xcf\xcd\x8f\x12\x21\x8b\x89\x44\x6a\x91\x94\x2f\x6d\xbc\xdf\xe7\x3c\xc7\x79\xb1\xf3\xc3\xe0\x42\x5c\x29\xca\x97\x34\xed\xb2\xbf\xb5\x1a\x91\x04\x06\x03\x60\x30\x18\x0c\xe6\x22\x09\xe5\xe5\x50\xb2\x75\x34\x37\x70\x2a\x4e\x4d\xc1\x47\xbf\xc2\x2a\xd4\xce\x27\xf1\xc0\x9f\xd4\xc8\xa0\xd6\x7c\xf3\x35\xcb\x25\x68\x6b\x32\x1c\xfa\xb3\x0f\xb7\x6d\x96\x54\x36\x1a\xa5\x2f\x8b\x9a\x94\xac\xbd\xf2\x06\x75\x97\x22\x39\x57\x1b\xaf\x50\xb1\x4f\xcf\xa2\x28\x6f\xdb\xd9\x38\xb7\x93\xd5\x0c\xde\x9e\xf5\x1a\xeb\xde\x33\xc3\xf0\x8e\x39\x7e\xe4\x16\x6f\xcf\x7a\xcd\x0e\xbc\xa0\x73\xfa\xac\xd7\x7c\x49\x1f\x05\x2d\x3c\xeb\xb5\x68\x95\x70\xe0\x47\xcf\x7a\xad\x96\xa7\x9a\xe5\xc2\x23\x1b\xa4\x67\xbd\x76\x1b\x9e\xb9\x79\xde\xb3\x5e\x9b\x82\x67\x9c\xfd\x59\xaf\x4d\xd1\xe2\x46\x14\xcf\x7a\x6d\xd2\x20\x37\xae\x7b\xd6\x6b\xb7\x6e\xce\xbc\xd6\xcb\x47\x3b\xdf\x47\x3b\xdf\x7f\xb6\x9d\xaf\xcb\xc8\xf7\xce\xbe\x28\xe5\xcd\x6f\x4b\xd8\xd6\x42\xb9\x0f\x38\x7b\x48\xd7\x15\x78\xbb\xd8\x14\x2c\x77\x5a\xb9\x8d\x2d\x58\x09\x57\x95\xd5\xd5\xd5\x3c\xd6\x93\x2d\x7e\x14\x4b\x84\x4a\x58\x3c\x80\xc3\xd9\x18\xf9\xb3\x50\xc2\xfd\x81\x0e\x24\x93\x30\xcd\x70\xd1\x79\x21\xc2\xd9\xa7\xbc\xd0\x6d\x85\x2b\x8c\x13\x5d\x29\x6f\xb4\xe2\x2a\xb4\x84\xc0\x27\x8b\x5f\xc6\xa6\xf6\x01\x67\x96\x4d\x4d\xdd\xbc\xe4\xdd\xe5\xe6\xcc\x6b\xd7\x1f\x77\x8b\xc7\xdd\xe2\x9f\xbd\x5b\x7c\xa7\x5e\x21\xf7\xe7\xc0\x51\xd2\xbf\x24\x37\x91\x3e\xc4\x49\x1a\x47\xfe\xe4\xd1\x4e\xfa\xa1\xed\xa4\x6f\xca\x59\xce\x46\xf8\x32\x37\xc7\x2d\x52\x4c\xe7\x05\x4d\xdd\xf4\x8c\xcd\xea\x27\x6b\xa1\x3b\x5c\x8d\x86\x53\xb2\x11\x1c\xf9\x97\xef\xf0\xa2\x2b\x13\xb9\xe8\x73\xef\xe9\x93\x27\x3a\x6e\x46\x81\x02\x8f\xcf\xf2\x57\x80\x66\x3b\xe2\x83\x64\x10\xfb\xe4\x49\xc9\x4b\xf1\xd2\x77\x7f\x78\x78\x84\x87\xf1\x85\xcb\x74\x23\xbf\x2c\xe3\xe5\xac\xb8\xaa\x5f\x0b\x06\x64\x1e\x4d\xe2\xe1\x97\x72\x94\xa2\x94\x2d\x20\x16\x57\xb9\x32\x86\xc4\xe5\xc6\xcd\x39\x7a\xf7\x7c\xe5\x9e\xcf\xfd\xc2\x7b\xf7\x65\xee\x57\x6d\xf7\xd5\xce\x2e\x95\x9f\x9f\x72\xb3\x53\x3c\x37\xcb\x5c\xa2\xea\x73\xa3\x21\x6f\x93\xac\x59\xc3\x52\x23\xd2\xe2\xcd\xdf\x2a\x14\x24\xdd\x9e\x70\xaa\x76\xdd\x76\x38\x2f\x45\x24\x70\xb2\xbc\xfb\x70\xe7\x83\xcd\x05\x6a\xe1\x7c\x3a\xe4\xc2\x0e\xb1\xdc\x94\xcb\xf9\x76\x9b\x0b\xe7\x16\x15\x91\xa6\x15\xd2\xe5\xf4\xc6\xa3\x9c\xfe\x28\xa7\xff\xb3\xe5\x74\x26\xa4\xa7\x63\x87\x56\x67\x81\xf8\x8d\x13\x3c\x9f\x12\xd0\x3f\x2f\x50\x02\x0d\xe3\x04\xd7\xc2\x58\x95\xd3\xd7\x4a\x07\x24\x29\xe9\xc0\xbc\xc8\x0f\x1a\x0a\x1d\x8f\xc7\x0f\xae\x1d\xfa\x7e\xe4\x71\xc2\x1d\x8f\xc7\xca\xed\x06\xbe\x64\xc1\xdc\x77\xbe\xc5\x85\x4e\x3a\x5e\x7c\xa1\x93\x8e\xe1\x42\x87\x0a\x2e\xcb\xdc\xdb\x14\xc9\xf9\xee\xcd\xc9\x10\x0f\xa4\xad\xe9\xc2\x7a\x53\xc7\x44\x84\x74\x3c\xfe\x64\x2f\xa0\x5a\xa3\x20\x8b\x2e\xab\xa8\xd1\x30\x1a\xc5\xee\x16\x2d\x5f\xef\xd6\x5c\x8a\xb3\x7d\xff\x8a\x11\xc1\x71\xf8\x87\x7e\x39\x2c\xb5\xbd\xa8\xa8\x6a\x6e\x74\x1b\x44\xc2\xe8\x30\xfe\xb5\x18\x01\x5b\x91\xbb\x35\x3c\xf5\x93\x2f\x27\xc9\x3c\xcd\x70\x70\x88\x8d\xcb\x60\xa9\xf9\xe2\x82\x77\x43\x22\xc2\x44\xa6\x3b\xf4\xc3\x82\xf6\x9d\x65\xee\x46\x01\x7e\x10\x1c\x26\xe1\x85\x9f\x61\x7a\x24\x74\xb4\x5e\x54\xec\x6e\x7d\xa7\xc9\xf4\x16\x76\xbf\xa8\xd8\xdd\x10\x18\xfb\xe9\xc2\xd6\x9d\x65\xee\xd6\xf4\x39\xce\xe8\x86\x5e\x38\xf6\x05\xa5\xee\xde\x7c\x89\xb9\x2f\x2a\x76\x67\xba\x3f\xbe\x9e\x16\x36\xee\x2a\x72\x67\xaa\x5f\xd4\xb0\xab\xc8\x5d\x87\x9c\xc8\x71\x19\xa6\xa0\x77\x92\x78\x7a\xe8\xa7\xe9\x65\x9c\x04\x45\xe3\x5f\xb2\xce\x9d\xd7\xc1\xa2\x31\x71\x15\xb9\x33\x19\x2e\x6a\xd8\x55\xe4\x3e\x58\xcf\xa2\xb6\x0b\x4a\xd9\x9b\x17\x0f\xab\xab\x28\x9d\x0f\xe0\xe6\x8d\xa6\x0a\x9f\x47\xf9\xf3\x34\x4c\xd3\x30\x3a\x7f\x5a\x1a\xdb\x59\x9c\xea\x57\x57\x12\x96\x96\xaf\x16\x3d\x05\x2a\xd6\x3b\xa2\xc5\xb7\x5c\xc7\xe3\xb1\x94\x98\x4f\xb3\xbd\x50\x4e\xd1\x9a\x65\x44\xbb\xf9\x78\x86\x7e\x3c\x43\xff\xb3\xcf\xd0\xf9\x5d\xd7\xe0\x8f\x3f\xb4\xbb\xae\xcd\x09\xbe\x42\x6f\x70\x82\xcf\xd3\x3f\xfc\xf4\x8f\x10\xbd\xf6\x27\xf8\xea\x3f\x93\x6c\x94\xd6\xc6\x73\xf5\x38\xdc\x65\x51\x82\x8f\xf0\x08\x27\x38\x1a\xe2\x1e\x22\xed\xa7\xbd\xd5\xd5\xf3\x30\x1b\xcf\x07\xb5\x61\x3c\x5d\xe5\xa7\xee\xd5\xf3\xf8\x85\xf8\x3d\x98\xc4\x83\xd5\xf4\xd2\x4f\xa6\xab\x61\x94\xe1\x24\xf2\x27\xab\xa4\x4b\xf8\x2a\xe3\xff\xd6\xce\xe3\xff\xf5\xbe\xd5\x7a\xe0\xab\xb1\xfc\xbe\xeb\x98\x60\xf3\x0f\x3f\x5c\xc3\x8f\xbf\xc5\x65\x17\xb5\x7c\xc5\xd9\x65\x9c\x7c\x39\xc2\x10\x02\xba\x48\x51\xae\x17\x37\xb5\xe5\x83\x3f\xfe\xf8\x54\x50\xea\x2e\x4e\x81\xd7\xd1\x70\x3b\xf2\x07\x13\xbc\x08\x4b\xa9\xa4\x1d\x41\x7b\x81\xbb\xe0\x76\xe9\xcf\x4a\xe2\x96\x97\x74\xe0\x66\x2d\x70\x07\xdc\x82\xf8\x32\x62\xd1\xbd\x8b\x10\xe3\xc5\xec\x58\x59\xbe\x96\xf7\x73\x75\x20\x36\x9f\x95\x40\x8b\x16\xb2\x23\x65\x7c\xbb\x33\x4a\x09\xce\x92\x10\x5f\x2c\x8a\xac\xc2\x8b\xd9\xd1\xb2\x7c\xbd\x0b\x69\x65\x64\xb7\x5b\x40\x54\xa4\x8c\x83\x9c\xb4\x4f\x77\x1e\xa2\x73\x5c\xc2\x8f\xda\x8e\x8b\xfa\xe1\x0e\x63\x42\xb3\xa2\x2c\x88\x3d\x6c\xc7\x41\xfd\x70\xe7\xd1\x60\x89\x90\x8a\x91\xa1\x85\xec\xf8\x18\xdf\x38\x4a\xed\x52\x28\x15\xdc\xea\x1a\x2a\x4e\x9d\x2d\x4b\xb7\x7f\x39\x3f\x94\x5e\xe6\x8c\x28\x7f\xc9\xf9\x80\x74\xe3\x38\x53\x9f\x39\xf5\x4b\x80\x08\x09\xe6\x8f\xe7\x58\xba\x98\x9c\xcd\xa5\x07\x49\x16\x7f\xd0\x6b\xc6\x71\x78\xe1\xf4\x8d\x21\x73\x02\xdf\x9d\x67\xc8\x62\xd8\x16\xa5\xac\x02\x1b\xbe\x3b\x8e\x57\x96\xf3\x15\x11\x96\x6c\x41\xa4\xad\xf7\x92\xad\xc7\x33\xd5\xe3\x99\xea\x9f\x7d\xa6\x62\x07\x2a\x7e\x41\xf4\x6d\xb3\x1f\xdc\xc6\xb0\x9a\x7b\x47\xf9\xb3\x90\x0b\xe3\x34\x75\x66\x36\x2e\xb2\x40\xa3\xd7\x65\x85\xd1\x5e\x79\xe9\xec\x7a\x46\xe4\x03\x16\xd9\xf5\xd5\x53\x89\x81\x87\xd9\x70\x5c\x21\xdf\xf5\x9c\x3d\x43\x3f\xc5\xe8\x39\xa1\xf8\x34\x7b\xde\x53\x3e\xc1\x64\x25\xe7\x69\x2d\x1d\x87\xa3\xac\xa2\x25\xea\x41\x46\xd2\xcd\xba\x59\x80\xb1\x64\x70\x5f\x8b\xf0\x25\x8d\xec\x46\x2f\x64\x5f\x59\xd0\x98\xe1\x28\x08\xa3\xf3\x07\xc7\xe3\x90\xb6\x23\xdb\x10\xd9\x90\x62\x21\x39\x4d\x6c\x34\x70\x46\x65\x9a\xb8\xe8\x46\x92\x0e\x44\xa9\xc5\x96\x84\x0c\x9a\x2e\x23\x28\xa4\x60\x91\x9d\x2c\x52\x75\x14\x46\x69\xe6\x4f\x26\xa5\x5a\xd6\x4a\xdb\x9d\xec\xdd\x85\x0a\xf0\x38\xc7\xd9\xfb\xf8\xbc\x44\xa0\x3e\x52\xca\xe9\xdc\x4f\x5b\xd4\x8a\x14\xb4\x3a\x8b\x17\x06\x00\x21\x45\x16\xb4\xd7\x1f\xfb\xd1\x39\x2e\xd1\xa4\x4d\xf8\xa0\x20\x64\x93\x2c\x65\xf4\x14\x41\x88\x74\x4c\x6a\x24\x9e\x4c\x64\x79\x60\x69\x7e\x93\x8e\xc7\x35\x60\x8d\x06\xbb\x49\xc7\x26\xbb\x71\x8b\x4f\x0b\x6e\x69\x0c\x32\x40\xc6\x2d\x8d\x62\x49\x70\xaf\x6a\x7a\x37\x31\x22\x9b\xa6\xfe\xe1\x10\x31\x49\x17\x19\xd7\x14\xb4\x59\x86\x83\x5e\xf4\x6e\xcd\x6b\x64\x7c\x0f\x6d\xcb\xa4\x67\x48\xa2\x14\x07\x9c\x8d\x7b\xe4\x3f\x14\x58\x3a\x1e\xf7\xc8\x7f\xa8\xf0\x6a\x4b\x74\xd2\x6e\x3f\x8a\xa4\x8f\x22\xe9\x3f\x5c\x24\xcd\xf5\xfc\xdc\xc7\xfa\x9e\xb2\xb0\x53\xff\xf0\x23\x7c\x4e\xe6\xd9\x4f\x36\x07\xa1\x23\xdf\x47\xba\xfa\x56\x2d\x5a\xfb\x9c\xc6\x22\xa7\x46\x38\xf4\x67\x32\x10\x17\x8c\xbd\xfe\xe6\xa1\x09\x41\xc2\x84\x39\xa2\x33\xeb\x65\xb4\x81\x9e\xd7\xaf\x86\xdd\xe0\x65\xd0\x1c\x06\xed\xf6\x4b\x7f\xad\xd3\x1e\xb6\x5f\xb6\x9b\xdd\x36\x6e\xac\xd7\x5f\x0e\x3b\x75\xdc\x6a\x07\xdd\x76\xa7\xdb\x1c\x3c\xcf\x71\xb1\x81\xf1\x1b\x7e\xa3\xd1\x18\x0c\xeb\x6b\xed\xe1\xcb\xe1\xc8\x5f\x5b\x6f\x8c\xea\xc3\xd6\x3a\xee\xb6\x06\x41\xa7\x31\x7c\xd9\x18\xac\xfb\xa3\x7a\xfd\xb9\x9b\x37\x51\x1c\x7b\x92\xa4\xeb\x0f\xc2\x9e\x65\x10\x73\x4e\xc8\xdc\xe0\x7b\xd6\xfe\xd1\x9d\x9e\x16\x26\x68\x1b\x90\xf5\x71\xb5\xc0\x35\xbb\x4b\xa1\x2a\x1c\xb3\x78\x16\x9f\xf5\x1a\xde\xb3\x05\xf3\xf4\xac\xd7\x24\xcc\xb6\xf3\xc8\x6c\x1f\x99\xed\x3f\x9b\xd9\xe6\xbc\x96\x2b\xbf\x34\x66\x5b\x64\x98\x3c\x4a\xe2\x3f\xf0\xd4\x8f\x6a\x01\xfe\xf9\x5e\x18\xb4\xcd\x45\x5d\xf3\x4f\xd7\x2f\x48\x0d\x93\x5a\xe5\x16\x94\xe5\x4d\x66\x9f\xe0\x51\xca\xe3\x41\x15\x89\xd2\x77\xfa\x42\xc9\xf4\xa1\x95\x48\xf5\x12\x7a\x9a\xf0\xbc\xa8\xf6\x45\xaa\xa3\xea\x9f\xa5\x2a\xea\x07\xa9\x86\x71\x99\x1b\xcd\x27\x13\x2a\x59\xf2\xb1\x90\xb3\xca\xea\x97\x9b\x6a\xca\xf3\xa9\x32\x44\x06\xe8\x64\x5a\x36\x8b\xbb\x23\x77\xfe\x9d\x53\xe7\x5b\xba\x54\x90\x3c\xdf\x16\xba\x45\x1b\xe1\xff\xb0\xbd\xa5\x75\x21\x8d\xfd\x77\x92\xb6\xde\xd9\xef\x7b\x4a\x5c\xff\xc3\x06\x25\x1c\xed\x15\xd9\x50\x46\x61\x84\x83\xbb\x64\xb6\xe7\x19\x99\xb3\x18\xb1\x74\xf0\x79\x9a\x78\x48\x73\x2f\x0e\xdb\x22\xd1\x71\x0d\xed\x93\x8d\x2d\xc4\x29\xa3\x24\x18\x26\x6d\x2c\xb5\xdc\xf2\xf6\x24\xf8\x14\x9e\x32\xae\x3b\x6c\xa4\xbe\x7e\x98\x4f\x26\x37\x92\xb1\x7b\x38\x42\xf8\x2a\x4c\xa1\xb8\x75\xc8\xb5\x16\x9d\xfa\xc2\x70\x94\x67\x86\xe2\xad\xd1\xdc\x50\xa0\x66\x63\x89\xd8\x5f\xa0\xc6\x59\xd5\x92\xe5\x06\xca\xcc\xe2\x59\xa5\x0a\xf9\xe0\xd9\xbd\x17\xe1\xff\xb0\x9e\x60\xb4\x7e\x90\x85\x1b\x75\xb8\xa9\x7d\x43\x8e\x59\x16\xdb\x49\x51\xb5\x83\x70\x11\x23\x7b\xc5\x7b\xe1\xa4\xc6\xf2\x69\xf1\xa1\x8e\x10\x25\x11\x4f\xfc\x93\xa7\xc9\x7f\x8b\xb3\x8a\x74\x3a\xc7\xd1\x7c\x8a\x13\x7f\x30\xc1\x3d\x94\x25\x73\x6c\xaa\xfe\xfc\x29\x5c\x58\xb9\x53\xe0\x4b\x79\xf2\xa1\x30\x28\x6f\x91\x94\x1b\x3f\x5d\x90\x1c\x3f\xd5\xb2\xe3\xa7\x8e\xf4\xf8\x7a\x91\x57\x8a\x46\x4c\x34\xdf\x38\xe3\x49\x86\xe0\x1f\x7b\xd6\xa4\x78\xf0\xd9\x83\xf2\x1e\x1d\x32\xd6\x17\x02\xdf\x4f\xaf\xa3\xe1\x5b\xd8\x6f\x88\xc8\x0b\x5d\xa8\x9e\xf1\x21\x80\x41\xdc\x64\x45\x2a\x92\x9b\x86\x56\x4d\x99\x24\x00\xa1\xb2\x0c\xb8\x5d\x46\x2b\x80\x43\x6d\x38\xf6\x93\xcd\xac\x52\xaf\xd6\xb2\xf8\xe3\x6c\x86\x93\xbe\x9f\xe2\x4a\x95\x7f\x86\x6c\xe5\x95\x46\xd5\xb9\xf1\xf0\x99\x75\x67\xf4\xcd\x37\xee\x3c\x3d\x31\x8f\x88\xc6\x6b\x9c\x93\x0e\x99\x2b\x46\x08\x28\x4a\xe2\x7a\xf1\xd6\x96\xba\x5e\x55\xf4\xd0\x25\xd1\xcb\x01\xd1\xed\x5e\xd2\xd8\xe4\x29\xee\x8b\x3a\xc8\x47\x7d\xb9\x5e\xe6\x77\xfd\xee\x20\x60\x28\x37\x73\xb2\x76\x08\x5a\x5e\xb6\x57\x72\x32\x1d\x9c\x24\x1e\x52\xb7\x0e\xfe\xc7\x71\xa1\x65\xec\x83\xcd\x6a\x4a\x77\x07\x37\xf9\x90\xb1\x45\x2e\x25\xc7\x97\xe5\x0b\x57\xae\xfa\x73\xec\xda\x4e\xf2\xdd\x77\x98\x60\x22\x2b\xce\xe6\x09\x46\xff\x75\x7c\xf0\xe1\xe8\xb0\xcf\xf3\xf3\xa3\xcb\x71\x38\x1c\xc3\xe1\x89\xef\x40\x61\x84\x06\xa0\xb3\xcd\x53\xf8\xcb\x1c\x31\x7f\x2b\xf8\x5e\xad\x56\xbb\x61\x1a\x3c\xdb\xde\x8c\xc8\x91\x30\x99\x0d\xa5\xaa\x56\xee\x98\x77\xdc\x41\x16\x34\x2d\xbf\xc2\x15\xf9\xec\x49\xf2\xa8\xa9\x24\x3f\x3d\x53\xd5\xeb\x64\x9a\x58\x15\x6d\xb3\xaa\xc0\x9e\x28\x8b\x82\x64\xc9\xd6\x48\xa5\x8a\xd8\x27\xab\x55\x79\xca\x18\x56\x6c\xa2\xf9\xac\xc9\xd3\xee\x9a\x3a\x56\xd3\xa1\xe0\xe4\x03\x24\x1d\xcc\xb5\x98\x3d\xe4\x88\xdd\x7d\x3c\x62\x3f\x1e\xb1\xff\xd9\x47\x6c\x49\x9f\xc9\x38\xc4\x94\xb1\x74\xf5\xa4\xfd\x5f\x78\x34\x4a\xf0\x35\xfa\x35\x9c\x0c\xbf\x60\xf4\xfa\x33\x1e\x8d\x5c\xd1\x7a\x96\x0a\xed\xb3\xef\x27\xe4\x08\x7f\xe0\x47\x43\xec\x43\x59\x5b\x50\x9f\x5b\xc4\x01\x62\x55\xde\xfa\x17\xe8\xd7\x38\x0e\xd0\xeb\x73\xe7\x21\xbf\x9d\x1f\xf2\xff\x8b\x71\x53\xc5\x79\x98\xb1\xd8\xa2\x54\xd1\x96\x40\x75\x7a\x76\x67\x5b\x6a\x67\x9c\x24\xb1\x16\x3c\x68\x95\xbe\xa3\x36\x08\x74\xdb\xd9\xcb\x9e\xa7\x64\x63\x9c\xc5\x51\x1a\x0e\x26\x94\xc0\x66\x3e\x38\x91\xa0\x29\xbb\xf3\x21\x7b\xd1\x2c\x89\x2f\xc2\x00\x27\xa9\xa8\xe5\x4f\xd2\xd8\xac\x1a\x4f\x26\xa4\x2a\xa1\x36\x6e\x3d\x8e\xa2\x38\xa0\x5f\xc3\x68\x18\x4f\x65\xc8\x04\x18\x4b\x66\x40\xaf\x5c\xb3\x70\x8a\xc9\x62\x0b\x53\xd4\x40\x29\x1e\xc6\x51\x00\xbb\x63\x18\x9d\x4f\x70\x16\x47\x30\x9c\xa4\x7b\x05\x07\x7d\x8e\xaa\x72\xdc\xe7\x2f\xd1\x86\xe8\x8a\xa4\x67\x20\x6d\x83\x06\xf8\x46\x7a\xc9\x71\x91\xb5\x0e\xce\xc3\x1f\x91\x50\xc6\x49\x1c\xc5\xf3\x74\x72\x0d\x61\x30\x1c\xfb\x30\xf9\x64\x39\x8f\xa0\xc0\xcf\x7c\xe7\x09\x59\xed\xad\xa2\xf2\x88\x02\xa5\xf3\x04\x8c\x7c\x52\xfb\x41\xe9\xbd\x92\x34\x34\x8e\xd2\x98\x6c\x5d\x84\x28\x2a\x94\x34\x6a\x7b\xd1\x85\x3f\x09\x83\x43\x56\xbe\x22\xcb\x3c\xdc\x0b\x1b\x06\x43\x92\xf0\xd5\x3d\x9e\x91\x79\x2d\x8b\x0f\xe9\x3b\x40\xa9\x46\x7b\xef\x41\x37\x99\xb1\x85\x74\x7e\x61\xa7\xf2\x0d\x75\xae\xa8\x30\xcb\x40\xf3\xab\x72\xe8\x14\x6f\x24\x4c\x7f\x21\xe8\x1e\x51\x2a\xc4\x42\x50\x93\xba\x99\x8d\x93\xf8\x12\xa9\xdd\xd3\xcb\x2b\xdd\x61\xdd\xa4\x9f\x6a\xa5\x4e\xfe\xfe\x52\xb3\x0f\xd2\x6c\x21\x09\xe8\xe7\x52\x21\xfd\x2c\x26\x06\x00\x6e\x50\x84\x14\x3c\xb7\x14\x6d\xf0\x94\xb4\x92\x6c\x5c\x44\x1d\xf7\x43\x08\xe6\xdc\x53\xb9\x9f\x81\x2c\x21\xcf\x93\x4e\xe1\x24\xd1\x45\x7c\x4b\x6f\xaa\xba\xb9\x0d\xf9\x53\xe0\x2c\x43\x63\x8b\x87\xcc\xa8\x2d\xb7\x6f\x08\xb9\x2c\x8b\xb2\x42\x82\x7a\x70\x4e\xf7\xb1\xc1\x46\x8d\x45\x27\x03\x52\xe0\x0d\xf9\x6e\x51\x32\xd1\x7a\xf7\x41\x98\xd0\xc2\x77\x46\x98\x80\x93\x4c\x9d\x9c\xc9\xdc\x8e\x14\xd3\x7b\xa0\x45\x95\x06\xb9\x9e\x0d\x66\xa3\xc2\x5b\xb9\x13\xe9\xa5\x8b\x68\x4f\xe9\x90\x20\x3a\xb4\x60\xfb\xc3\x99\xd8\x57\x89\xb4\xc9\xcf\x84\x4c\xe4\x33\x28\x2e\xe3\x53\x65\x57\xcd\x15\xd2\x92\xa8\xab\xee\xfa\xce\xed\x7e\xd1\xce\x9d\x91\x23\x15\x13\x5c\x74\x44\xc9\xb7\x43\xf1\x69\x21\xc7\xa6\xb1\xff\x6f\x00\xda\x5e\xb0\x70\xc9\x58\xbe\x0a\xb3\x24\x8e\x49\x16\x07\x31\x1a\x4e\xb0\x1f\xcd\x67\x28\xa2\x39\x05\xe3\x51\x7e\x6c\x2f\x1a\x2a\x09\x7b\xcb\xca\xa3\x48\xca\x01\x51\x44\xe3\xea\x58\x12\xe1\xe8\x94\x96\x3e\x23\x42\x12\xa9\xde\x43\x14\x48\x18\xf4\x0c\x40\x3d\x1b\xc8\x5e\xfe\xf3\x86\xe7\x9a\x5f\x5d\xd5\x47\x5f\x61\x00\x4c\x00\x53\x77\x73\x86\x50\x45\xac\xf0\x05\x93\x1b\xcf\x84\x50\x4a\x44\x50\x66\x46\x0b\xa7\x9b\xf3\x90\x1c\xe9\x42\x5d\x77\x4c\xea\x58\xe6\xdc\x98\xdb\xc2\x91\x17\x20\x54\x22\x85\xba\xbc\x43\xd4\xb2\xcc\x32\xc8\xaf\xa4\xe1\xc9\xf1\x67\xa3\x53\x61\x1a\xd5\x2f\xf8\x3a\xad\xe4\x75\xab\x5c\xcb\xbb\xb1\xb1\x81\xea\xe8\xc7\x1f\x91\x6b\x0c\x09\x31\x25\x27\xf4\x7d\x45\x29\xf4\x4a\x1d\x67\x5d\x00\x2e\x18\xef\x7c\xf7\x49\x30\xe1\x05\x44\xfe\xe7\xc3\x3e\xc5\xc3\xb1\x1f\x85\xe9\x94\x1f\x43\x8b\x99\x03\x00\x28\x1e\x5e\xda\x86\x3c\xb0\x5f\x30\x9e\x89\xfc\x01\xbc\xb3\xab\x3f\x7d\x4e\xc7\x61\x44\x1a\xba\x1a\xc6\xd3\xd9\x04\x5f\x85\xd9\x75\xaf\x03\x47\x32\x52\x80\x10\x44\x85\x6c\x0e\x5f\xf0\x35\xd5\x14\x88\xd1\x94\xc6\x6b\x75\x15\x25\x78\x1a\x5f\x60\xe4\x4f\x26\xd0\xab\xd4\x43\xf8\x6a\x88\x67\x19\x88\xfd\xec\x95\x5c\x3e\x1b\xe3\x6b\x14\x61\x3a\x22\x03\xcc\xea\x07\xa4\xc7\x73\x7f\x32\xb9\x46\x83\x6b\x18\x32\x32\x3c\x2c\x15\x00\xd0\xcc\xaf\x64\x43\x0a\xa3\xf3\x4a\x55\xda\x07\x2a\x3f\x28\xbd\x43\x5f\xbf\x12\x7c\x6b\x61\x14\xe0\xab\x83\x51\x05\xdc\x14\x09\xb1\x7d\x7a\x5e\x85\xc9\x7f\xd1\xd0\x37\x08\x89\xc2\xbe\xe0\xeb\xb3\x9a\x58\x89\xba\x39\xb4\x49\x91\xa4\xbc\x61\x9a\xfc\x37\x26\x4f\x38\x65\x92\x79\x1f\x52\xdb\x5c\x14\x47\x65\x78\x02\x35\xa9\x2d\xa2\x49\x66\x31\x6c\xaa\x40\x1d\x54\x88\xba\x04\x9c\xa5\x33\x29\xce\x94\xde\x13\xc0\x92\x2a\xd2\x43\xc3\xda\xf6\xc9\xee\xa7\xc3\x83\xf7\xef\xf7\x3e\xbc\xfd\x74\xb2\xb7\xbf\x7d\xf0\xf1\x44\x3e\x1e\x95\x99\x01\x53\xa8\x52\x24\xa6\x07\x39\x3a\x9a\x32\x19\xc1\x6b\xcb\xcf\x7c\xb4\x81\x4e\xcf\x5e\xa9\xef\xf7\xc0\xdd\x98\xbf\x2e\xb7\x54\x05\xc0\xda\x6c\x9e\x8e\x2b\x3a\xdd\x33\x11\x4f\x29\xbd\x17\xa4\xb4\xf0\x17\x7c\x5d\x35\xc6\x20\x07\xb8\xc4\xe0\x95\x12\x37\x05\x64\xd6\x28\x5f\x52\x53\x7f\xa6\x30\xc9\x10\xc8\x16\x18\x0a\x90\x18\x21\x4d\x75\x98\xf6\xfd\x99\xa4\xba\x90\xf4\xda\xaa\xa7\x38\x15\x5c\x81\x6b\x54\xff\xd4\xc7\x60\xdf\x9f\x9d\x42\xb5\x10\xb6\x78\x3e\x32\xa7\x50\xfc\x4c\xf2\x48\x17\x8d\x2b\x7e\xf3\x68\x69\x99\x39\x56\xa5\x66\x25\xbc\xc9\xc9\xc1\xd6\x41\x8f\x13\x19\x9a\xc4\xe7\xff\xa1\x4b\xd5\xb1\x43\xae\xbe\xab\x24\x5d\x42\x59\x90\x5a\x8f\x8e\xec\x5b\x6d\xea\xcf\x2a\x2e\x63\x05\xfe\x07\xf6\x8b\x41\x3e\xca\x64\xec\xd9\x51\x2f\x0c\x64\xc7\x1b\x41\x11\x5f\x30\x4a\xe7\x09\xe8\x89\x39\xb3\x0a\x53\x94\x66\x21\xa1\x07\xca\xc9\x71\x80\xfc\x11\x38\x08\x25\x49\x78\xe1\x4f\xb4\xbd\x56\x81\x49\x06\x04\xdc\xfe\xe9\xd2\x08\x83\x33\x1d\xc5\xbc\x4b\xb5\x61\x6e\x0f\xa0\xd6\x11\x5f\x9c\x0e\x33\x5c\x77\x22\x7f\xba\x41\x78\xc2\xf4\xcc\x96\x1a\x23\x7f\x92\x62\xf9\x96\x8d\xb9\x3d\x2d\x1c\x53\x56\xff\x87\x1f\x58\x9b\xe8\x16\x30\xc8\xbc\xc0\x8c\x4b\x8b\xd6\x71\xf8\x7f\x65\x8c\xe7\x0f\x50\xb3\xc4\x38\x96\x57\x0c\x20\x85\xc2\xa4\x5e\x42\x45\x75\x94\xb4\xc5\xee\x1e\x26\x15\x17\xb7\x9e\x01\xc9\x97\x9c\xae\x8c\x4b\x47\x7a\x50\x0d\xf5\xc6\x4b\x4b\xbd\x64\xa6\xae\x60\x0a\xe9\x67\xbd\x26\x84\xf6\x61\xca\xf0\x67\xbd\x16\xb8\xa1\xae\x95\xb9\x23\x63\x31\x37\x71\x96\x85\xd1\xb9\xdd\xb3\x17\x18\x53\x20\xa5\xcc\x45\x1b\xc2\x67\xed\x95\x51\x22\x8f\xf4\x2c\xec\x83\x5c\x41\x8b\x58\xa3\xac\xdf\x04\xe5\xf5\xc7\x6b\xbd\xc7\x6b\xbd\x7f\xf8\xb5\x1e\x8b\xe8\xcb\x4e\x2d\xb7\x89\xea\xbb\xc8\x1c\xd6\x91\xfb\x42\x4b\x7d\xb1\x8c\xe1\x2c\x5f\xd2\x0d\x76\x38\xd8\x0c\x82\x14\x86\x4e\xec\x6e\x7e\x04\x6a\xa9\x14\xcd\xa9\xf8\xc5\x9c\xde\x3c\x22\x7c\x85\x19\x44\xca\x43\x90\x14\x80\x6e\xaa\x74\xb7\x7f\xfa\x54\x3e\x1f\xb0\xf3\xd9\x53\x5d\x49\x44\xb6\xcd\xa7\xec\xda\x4a\x2a\x27\xf1\x2a\x1a\xa7\x87\xbb\xd2\x91\x72\x71\xc4\x1c\xae\x14\x8e\xc6\xe4\x26\x32\xf6\x16\x55\xa3\x4b\x28\xa2\xfb\x36\xef\x69\x6a\xd9\x2c\x6c\xf6\x38\xfc\x4f\xdd\xb7\xf4\xed\xc9\xa5\xbb\x14\x16\x82\x3c\x10\x11\xa0\xfc\xe3\x8f\x80\x3b\x55\x4c\x85\xd1\x39\x70\xe3\xaa\x02\x91\x5f\x5f\x2c\x4a\x69\x4a\x21\xca\x5e\xca\xb7\xed\xa4\x90\x86\x26\x7e\x0a\xcd\x1c\x67\x64\xb2\x7f\xd8\xd8\x30\x06\x9a\xff\x19\x2f\x56\x57\x69\xca\x78\x85\xa4\x60\xa9\x65\xc9\x9c\xc8\x6c\x49\x9a\xa1\x34\xa6\x76\x8e\xb3\x19\xb0\x6e\x38\x3b\xfb\xd1\x75\x46\x0e\xfc\x1e\x1a\xe0\x11\x61\x00\x74\x89\xf3\x2b\x54\x18\x0d\xaa\x64\xd4\xfe\xc2\x51\xe5\x07\x0b\xd6\x3f\xfe\x88\x6c\x23\x5f\x35\xea\x23\xf3\xba\x81\xa0\x6a\x71\x8f\x76\x76\x36\xa6\x7c\x33\xc2\x57\x19\xea\x1f\x7e\x44\xc3\xeb\xe1\x04\x7b\xa2\x9b\x34\x47\x34\xe7\x51\xd0\x13\xe8\x32\xb3\x59\x9a\x25\xf1\x90\xf0\xac\x94\x8e\x8e\xd1\x8a\x74\x0c\x16\xcb\xc4\x36\x17\x96\x8e\x30\xd2\xd0\x4b\xdd\x78\xa8\x5e\xa6\x7f\x96\x61\xa5\xa4\xe0\x12\xcd\x24\x63\xb0\xa7\x02\x80\x6e\xc6\x26\xe9\x62\x2b\xa6\x1d\x94\x23\xdd\xaf\x6e\x09\x75\xe3\xe5\x42\xf8\x5e\xe0\xe5\x6c\x82\xbd\x97\x75\x48\x54\x67\x00\x9c\x85\xac\x13\x6e\x27\xb9\x67\x4d\xcb\xe9\xcc\xb5\x59\x6c\x32\xaf\xc9\x7f\x48\xd6\x35\xed\x11\x39\x5a\x52\x4e\xad\x50\x2e\xbc\xb2\x22\x95\x13\xeb\x55\x3a\xe9\xc3\x07\x3f\x08\x84\x6d\x97\x94\xf7\x53\x7c\xd7\xa7\x47\x3a\x38\x48\x2c\x96\x1b\x6f\xc1\x7b\xc9\x56\x9c\x0a\x74\x62\x24\x64\x4b\xdf\xbc\xdd\x42\x8b\xc5\x70\x94\xbf\x52\xb5\x52\x39\x0b\x02\xad\x82\x86\x7c\x29\x24\xe4\x59\x74\x4b\xb4\x06\x81\x09\x95\x73\x45\x9a\x83\x6a\xc1\x68\x5b\xa5\x5a\x81\x90\xdb\x80\x8d\xc8\xea\x6a\xb6\x0b\x22\xfb\x3e\xe6\x28\x7d\x94\x7d\xff\xe9\xb2\x6f\x6e\xd2\xc6\x13\xf6\xde\x97\x8f\xee\xde\xc0\x8f\x54\x69\x37\x1c\xf8\xc2\xf5\x16\x5f\x51\x75\x75\x91\xeb\xee\xf1\xd4\x4f\xb2\x6d\x56\x30\x77\xbb\x75\x5e\x8d\x81\x5a\x09\x9a\xe5\x7d\xd1\x74\xde\xd2\x6b\x71\x09\x76\x9c\x25\x61\x74\x7e\x03\xae\x2d\xb6\xf7\x44\x5a\x1e\xf8\x91\xfc\xe9\x17\x7f\x32\xc7\x37\xe8\x82\xfc\xc3\xae\x43\x08\xe4\x11\x4e\xf0\x82\x1b\x52\x4f\x35\x2f\x80\x20\x35\x0c\x27\x55\x2c\xce\xc6\x1e\x60\x44\xa4\x75\x8f\xb6\x64\x6e\x61\xa0\x76\xa3\xa3\x0c\xd9\xa6\x07\x7e\x54\xc9\xe2\x2a\x53\x15\x81\x0e\x87\x7c\xe6\x2a\x9f\x8a\xc5\x8a\x88\xd4\x83\x34\x11\x95\xe7\x21\x55\xdf\x50\x88\xcc\x4f\xf7\xb9\xa9\x3f\x66\x10\xb7\xc2\x84\xc8\x62\x36\x87\x18\xde\xa3\x93\x98\x79\xf6\xca\xdd\x81\xea\x0c\x7a\xa5\x6a\x76\x8d\xb7\x27\xe4\x18\xe8\x86\x4d\xd2\x05\x17\x09\xe1\x29\x8d\xb3\xb1\x9c\x12\xbc\x52\x85\x46\x18\xb6\x51\x9a\x85\xd9\x9c\x0a\x5c\xa6\xf9\x57\x80\x67\x71\x1a\x66\x32\x96\x0c\xae\x40\x0f\xc0\x0c\x27\x21\x8e\x32\xdd\x12\xa3\x74\xc3\x86\x89\x05\x4f\x35\x6e\x8e\xe0\xb2\x18\x99\xe3\xc7\x55\xf0\x85\x57\xc9\x82\xf4\x46\xf3\x28\x00\x9b\xc8\x21\x4e\x32\x3f\x14\xd3\xef\x58\x3e\x62\x62\x97\x5b\x47\x0f\xbe\x84\x04\x5e\xb7\x58\x4b\x6c\xe4\xc9\x6c\x6a\x19\xbf\x24\xd9\x56\x78\xaf\x67\x71\x2e\xd1\x12\xd0\x3d\xda\x80\x44\x9b\x93\x39\xee\xd1\x7f\xb8\x98\xab\x25\x7b\x77\xce\x0a\x9b\xfc\x7c\x52\x20\xae\x7d\x38\x44\x9c\x13\x22\xce\x21\x51\x65\x3a\x4f\x33\xd8\xea\xf0\x14\x47\x99\xa0\x9b\xc1\x75\x86\xd3\x56\xb3\xca\x84\xf1\x1f\xaa\xda\x44\xb2\x72\xf7\x3e\x7d\x64\x12\xb4\x09\xe4\xf5\x29\xa9\xa2\x79\x14\xfe\xf7\x1c\xa3\x30\xc0\x51\x16\x8e\x42\x95\x15\x97\x9a\x6c\x3e\x3c\x25\xa6\x18\x9a\xb4\xb3\x4d\x1f\xb6\x1d\x69\x13\x7a\xa5\x53\x01\x1f\xe4\x8a\x3f\x08\xab\x35\x3f\x23\x9c\xb5\xc6\x07\x98\x83\xfe\xf3\xae\x54\x60\x08\xab\x7c\x18\xad\x51\x10\xcc\x0d\xf1\x59\xaf\x45\x64\x57\x9e\xb9\xff\xe6\xcc\xeb\x94\xca\x95\xcc\xd4\xbb\x9d\x52\x09\xdb\x5e\xc9\x5a\xf8\x98\x08\x18\x23\x7f\x98\xc5\xc9\xb5\x47\x35\xca\x64\x60\x9f\x10\x3e\x4d\x64\xfd\x78\x84\x44\x6f\x36\x36\xd0\x33\x1a\x91\xe9\x19\x94\x79\xb2\xba\x8a\xfa\xf1\x74\x1a\x47\xff\x75\xfc\xf4\xc9\x13\xa3\xf3\xf9\x2f\xd6\x00\xc7\xa9\xf2\x8c\x0c\x43\x82\x9f\x55\x3d\x24\xbd\xc2\xd1\xf0\xc5\xc0\x4f\x71\xb7\xad\x7d\x98\x06\x1d\xbd\xe8\xc5\xec\x4b\x30\xd2\x5e\x0e\xc3\xd9\x18\x27\x2f\x28\xe4\xea\xab\xa7\x4f\x6e\x9e\x3e\xc1\x93\x14\x23\xa9\x33\x54\x63\x4e\xfb\xc2\x87\xe1\x19\xfa\xf1\x47\xf6\xa1\xe6\x4f\x03\xd1\xb7\xcd\xfd\xad\xa7\x4f\x9e\xd0\x0f\x95\x53\x8e\xb3\x87\x54\x54\xe1\x99\x60\x48\x3f\x50\xc4\xe0\xb7\x8c\xcf\x99\x18\x65\x19\x31\xd6\x10\x0d\x87\x81\x2a\x83\x24\xbe\x4c\x71\x52\x7d\xfa\xe4\x89\x18\xb1\x38\xce\x6a\xfd\xe4\x7a\x96\xc5\xff\x75\x4c\xab\xde\xc0\xf1\x49\xde\x7f\xc4\x77\xf4\xe7\xd3\xa7\x4f\x2a\xea\x79\xec\x09\xa2\x2a\x91\xe3\x71\x9c\x64\xc3\x79\x96\xd2\x37\x64\xd9\xf4\xd1\x06\xe2\x75\x5f\x49\xaf\x3f\x4d\xc2\x01\xf9\x54\x9b\x84\x03\xe9\x3d\x68\xc3\xfa\xd0\x29\xf2\x95\x94\xaa\x49\xef\x14\x08\xfe\xe4\x3c\x06\x10\xe4\xc7\xab\xa7\x02\x8b\xf7\x71\xfc\x65\x3e\x43\x99\x3f\x98\x60\x09\x93\xe3\x37\x07\xbf\xb1\x43\x9f\x78\xb7\xf7\xe1\x97\x4f\xb6\xf7\xc7\x1f\xdf\x7c\xda\xdf\xfb\xed\x53\xdd\xf5\xa1\xe1\xfa\xd0\x74\x7d\x68\x59\xdb\x76\xb5\x23\x7f\x34\xda\x92\x3f\x1a\xed\xc9\x1f\x79\x9b\x62\x68\xfa\xf1\x74\x46\x4e\x8a\x13\x73\x88\x6c\x53\xaa\xd5\x0a\xe2\xf9\x80\x88\xfd\xa4\x56\x5e\x00\x58\xac\x8c\x05\x92\x4d\x15\x42\x08\x27\x88\x42\xf4\x1a\x35\x3b\xdd\x57\x28\x5c\x59\x51\xc0\x0b\x21\x11\xbd\x46\x8d\xe6\xba\xf1\x8d\xfc\x05\xa7\xe1\x19\xda\x20\x30\x5e\xa3\xc6\x2b\xf5\x3b\xbd\x4b\x2d\xa8\x55\xa1\xd5\xaa\xe8\x77\x54\xbf\x6a\x34\x06\x7a\xfd\xfc\xf1\xe6\xa9\xd2\xeb\x5f\xfd\xc9\x17\xf4\x76\xa7\xd2\xfc\x7d\xbd\xaa\xf6\xf6\x8a\x86\x48\x54\xdf\x85\xda\xcb\xa5\x46\x40\x1a\xe4\x74\x10\x5f\xa9\x1f\xc1\xd2\x80\xb4\x79\x15\xa2\xdf\x51\xe5\x2a\xef\x10\xfb\xdd\x94\x7e\xb7\xa4\xdf\xed\xaa\xd6\x59\x80\x52\x49\xaf\xd0\xcf\x3f\xff\x8c\xd6\xa1\x64\x7a\x85\x7e\x44\xf5\xab\xd1\x88\x0e\x50\xb7\xa5\x55\x21\xab\xe3\xf4\x8a\x0c\x64\x7a\xa5\x7d\xe2\x8b\xe7\x34\x85\xef\x57\xaf\x9e\x3a\x3b\x35\x9d\x4f\xb2\x70\x36\x09\x87\xa0\x26\x30\xbb\x77\x45\xc8\x38\x38\xbd\x3a\x7b\x65\xf9\xd6\xa6\xdf\x9a\xd6\x8f\xeb\xf4\x63\xfb\xac\xa0\xf5\x74\x3e\x40\x20\xe0\x78\x68\x1a\x5e\xa1\x61\x3c\x99\x4f\xa3\x54\xa1\x7e\x19\x26\x91\x14\x2a\x01\xf4\xea\x27\x42\x33\xf5\x06\x1f\x29\xf6\x58\x6f\xd4\xeb\xfa\xd0\x8a\x95\x4c\x07\xab\x92\xc1\xc4\xb4\xab\xe8\x2b\xf9\x4d\xc7\xdb\x51\xa5\x21\x57\x69\x74\xa5\x2a\x8d\xae\xab\x4e\x53\xae\xb3\x5e\x45\x79\x9d\xa6\x31\xeb\x82\x1b\xd0\x3a\x59\xc1\x48\x85\xd1\x85\x3c\x5a\xe4\xb1\xf4\x88\x5d\xad\x4b\xe3\xc3\xc8\xb3\xcd\x5e\xd5\xf9\x8b\xa6\x32\xa4\x85\x23\xaa\xf0\x47\x46\x63\x65\x86\x55\x61\x9d\x4a\xbd\x05\x63\xab\xb0\x55\xa5\xe2\x82\x01\x56\x58\x2e\xab\x58\x34\xca\x70\x5b\x00\x8a\x60\x9c\x98\x9c\xf0\x87\x2b\x2b\x13\x64\x0c\x60\x63\x09\x0e\x08\x55\x9a\xe8\x77\x14\x9c\x92\xff\x5d\xad\xa3\xdf\xd1\x55\xf3\xec\x4c\x5f\x48\x50\x36\x44\xbf\x6f\x40\xc1\xab\xd0\x28\xa0\x30\x49\xf8\x79\x03\x87\x5a\xb1\xaf\x1c\x26\x78\x48\x3b\x17\xa0\xa3\x61\x1c\xb1\x0d\x26\xdf\x95\x8e\xfa\x07\x1f\xc8\x1e\x51\xbf\xaa\xd7\x3d\x54\xbf\xaa\x37\xe0\xbf\x4d\xf8\x6f\x1b\xfe\xbb\xee\x01\x2d\x90\xff\x36\xe1\xbf\x6d\xf8\xef\x3a\xfc\xb7\x31\x20\xff\x6d\x75\xf3\xcd\xec\xa7\x9f\x18\x52\x3f\xa1\xcd\xed\x63\x1a\x90\x1d\x51\x71\x08\x11\x81\x20\x09\xb3\xf1\xb4\xc6\xcb\xac\xe6\xa8\x90\xd2\x1b\x4c\x7c\xa8\xd1\x07\x49\xc2\xa8\xe1\xab\x8c\x86\x0f\x10\x5d\xfe\x14\xc4\x47\x38\xc5\x59\x0f\x39\xb6\x48\x36\x08\xc7\x5f\xc2\x19\x33\xfd\x8d\x47\x28\x3a\x8a\xe1\x38\x36\xf6\x53\x34\xc0\x38\x02\xf7\x00\x76\xc1\xe5\x47\x01\xd8\xf0\x05\x61\x80\xa2\x38\x63\x76\x98\x26\x29\xd0\x6c\x2e\x1c\x12\xb7\x17\xfd\xf4\x05\x5f\x1f\x26\x61\x9c\x1c\x51\x13\xe0\x8d\x8d\xfc\xbd\x95\x74\xb8\x5d\x98\x36\xa7\x66\x07\x54\xf1\x8d\xff\x71\x8b\xc3\x0d\x7b\xf3\xf9\x5b\x0b\x7f\xfe\x82\xaf\x7f\x8d\x13\xb0\x62\xfc\x82\xaf\x6b\x97\xe4\xb7\xbd\xd8\x71\xf8\x07\x66\xa5\xd2\xf0\xfc\x0d\x61\x40\x68\x15\xb5\x8b\x96\x91\x70\x04\x48\x60\x80\x4c\xb0\x7c\xe4\x38\x8e\xf9\x33\x6f\x70\x05\x75\x4b\xb5\x40\xfa\x9f\x0e\xc7\x98\x1c\x3f\x10\x11\xa1\x2d\x7d\x48\x8f\xe2\x4b\x02\xbb\xc2\x9b\x59\x21\xbb\xf4\x4f\x85\x7d\x90\xe1\xda\x87\x85\x37\x2a\x8d\xb3\xf4\xee\x54\x5f\xaa\xb9\x8d\x28\x41\x87\x8a\x1e\xf4\xe7\x6b\x86\x21\x7b\xb6\x48\x21\x88\x91\x9d\x28\x4f\x07\xc9\x5a\x8e\xfc\x49\xa8\x9c\x42\x9d\x33\x3a\xb2\x30\xe3\xec\x8d\x85\xd5\xb8\x19\x16\x92\xf6\x13\x03\x38\x84\xd3\xd1\x87\x52\x46\xfb\x07\x86\xf8\xbf\x04\xe2\x4e\xcc\xd9\x2c\x1c\xc5\x19\x22\x24\xe9\x2e\x94\xc9\x7b\x80\xba\x05\x14\x42\x3e\x9e\x0f\xca\x40\x06\xf1\x89\xc3\x3c\x93\xf6\x36\xf8\x90\xef\x54\x4c\x46\x3b\x93\x76\x31\xb9\xc4\xba\x52\x00\x30\x65\x90\xd9\xeb\x05\xd8\xee\x87\x57\xc0\xb6\x8b\xb0\xfd\x7d\x03\x98\xf8\x29\x1b\xe4\xd5\x9c\x3a\xbe\xa2\x3a\x43\xdd\x32\xd9\x28\x9f\x70\x20\x2d\xb6\xee\x7e\x46\x5d\xc2\xcf\xb4\x09\x43\x1b\x1b\xa8\xbd\x68\xd2\xbe\xbb\xa1\xb5\xf7\xd9\x31\xe2\xae\x35\x63\xd0\x3a\x1b\x92\x33\xf4\x3b\x91\x25\xcc\x45\xb4\x90\x9b\xcb\x32\x5d\x31\x9b\x09\xa3\x8b\x77\x16\x4e\x63\xbc\x76\x33\x1b\x52\x34\xe7\x37\xe2\x29\x67\x39\xfc\x95\x83\xeb\xc8\x0c\x8b\xf1\xd1\x17\xa2\x8e\x8d\x78\xe1\xc8\xc8\x9b\xf9\x57\x01\xd1\x38\xd9\xc9\xfd\x72\xa6\xb6\x15\xdc\x22\xc4\x5f\xa3\x36\x78\xb2\xd0\x87\x22\xda\x57\xe7\xe2\x94\x43\x60\x92\xe6\x92\x1d\x29\x00\xa6\x0a\xdd\xea\x1a\x22\xa4\xa8\x0a\xd7\x8e\xa5\x74\x86\x7e\x77\x2f\x4e\xc7\x9f\x2a\x7c\xdb\x57\xa0\x8e\x40\xeb\x54\x5d\x8a\xf6\x39\x70\x4a\xb2\x9e\x34\x3d\x38\x1a\x26\xd7\x33\x6a\x1a\x2b\xcb\x79\xfb\x1e\x8a\x47\xa3\x14\x67\xc6\xcc\xd0\x35\x12\xc4\x7d\x51\x2f\x2f\xec\x99\x7b\xb5\x97\x9f\x10\xf3\x9f\x8d\xfc\x67\x33\xff\xd9\xf2\x80\xc5\xc8\xa7\x0c\x05\xd7\x00\x2f\x8b\x2b\xe1\x9a\x97\xfe\x0c\x35\xa3\x00\x64\xcf\x76\x36\x76\x08\x31\x84\xbe\xf7\x4f\x29\x18\x22\xbf\xe8\x43\xaa\x7c\x53\xcb\xb6\x0a\xca\xb6\xac\x47\xa2\x32\x43\xa8\xd2\xaa\xa7\x12\xa8\xfa\xd8\x50\x1f\x9b\xea\x63\xcb\x13\x0a\x0b\x63\xf3\x5e\x5d\x45\x7b\xe4\xe4\xfb\x5d\x8c\x91\x7d\xd2\x95\x61\xb2\xce\xba\x87\xee\x46\x6e\x36\xa2\x61\x07\x82\xd2\x92\xb5\x65\x60\xdf\x62\x16\x2c\x14\x6e\x24\xa9\xa8\x4e\x30\xb5\xe8\xb8\xea\xd2\x60\x9d\xc1\xeb\xdf\x15\x66\x5b\xb7\x69\x80\xd2\x86\x3e\x1d\x5a\x2d\x63\x7e\xa0\x56\x53\xad\xd5\xd4\x6b\x59\xb5\x4d\x69\x4b\x9f\x4e\xad\x56\xcb\xa6\x86\x7a\xa7\x9d\x1d\xec\x47\x7f\x79\x0b\xb4\x9d\x18\x8e\x2c\x67\x1c\xb1\xff\xd2\x51\xdd\x40\x8d\x57\xec\xe7\x6b\x3e\x43\xec\x85\x63\xdf\x85\x39\x0e\x47\x19\x50\xba\xe7\x50\x94\x15\x4e\x1c\x47\x3d\x23\x93\x27\xa9\x6b\xea\x42\xf2\xfa\x5d\x52\x74\x55\xd2\x86\x21\x77\xfd\x2e\x29\xb5\x2a\x69\x53\x97\xba\x7e\x97\xf4\x57\x69\x4b\x7a\x6d\x6c\xc3\x2b\x2b\xb6\x0d\x00\x90\x6b\xa8\xc8\x35\x1c\xc8\x35\x17\x20\xd7\x2a\x44\xae\x7e\x4b\xe4\x9a\x2a\x72\x4d\x07\x72\xad\x05\xc8\xd5\x0b\x91\x6b\xdc\x12\xb9\x96\x8a\x5c\xcb\x81\x5c\x7d\x01\x72\x8d\x42\xe4\x9a\x0b\x91\xb3\x92\xee\xc7\x19\x18\x11\xa5\x99\x9f\x61\xb3\x00\xb0\x93\xac\x6e\xe9\x18\xb0\x8c\x4c\xd7\xa3\xc1\x17\x32\x17\x59\xd3\xf6\x85\x0c\x44\xa6\x6b\xc7\xad\x4a\x14\xeb\x7a\x5a\xc0\xfb\x60\xf9\x54\xe8\xc9\x43\x5a\x3b\xfa\xa9\xc5\xb2\x7c\xf4\x63\x8b\xb9\x82\x94\x73\x4b\xbe\x84\xaa\xe5\x28\x41\xac\x1f\x8e\x5d\xc3\x8d\x9d\xb9\x7e\x0c\xec\x8c\x25\xa4\x62\x57\xbf\x0d\x76\x4d\x09\xbb\xa6\x1b\x3b\x73\x01\x19\xd8\x19\x6b\x48\xc5\xae\x71\x1b\xec\x5a\x12\x76\x2d\x37\x76\xe6\x0a\x32\xb0\x33\x16\x91\x8a\x5d\x73\x31\x76\x26\xb5\x62\x1e\xd9\xda\x2e\x97\xd0\x6d\xd8\xb2\x8e\x74\x21\xc7\x58\x4e\xea\xe6\x6a\x59\x55\x86\xe8\xd3\x72\xc9\x3e\xec\x28\xdc\x43\xcd\x4e\x77\xb5\xd5\x64\x1a\xe8\xaa\x4d\x15\xcc\x25\x16\x21\x20\xa5\xcc\x73\x98\xa9\x86\x9f\xa7\x2c\xe1\x13\x82\x1c\xde\x23\x7f\x88\x85\x8e\x58\x00\xf9\x4f\x7c\xe5\x4f\x67\xe2\xa4\x9c\x7f\xe0\x73\x4a\x61\x65\xf8\x2a\x93\x6e\xb7\x6b\x9b\xdb\xc7\x35\x76\x8e\xa8\x4c\xb9\x49\xfa\x17\x7c\xed\xa1\xe1\xe8\x5c\x48\xf3\x39\x94\xd9\xc4\x27\x48\x5c\x65\x48\x87\xc2\x24\xfc\x4a\xde\x8e\x0d\x10\xd3\x69\xf7\x2d\x4a\xec\x4f\x34\x6c\xea\x2e\x9e\xcc\x70\x52\xd9\xdc\xa6\xd7\xfa\x54\x67\xff\xf4\x09\xb3\x59\x91\x9b\x7c\xf5\xf4\x29\x84\xc0\x05\x03\x12\xc5\xaa\xa0\xd7\x69\x7a\xdc\x2e\xa1\xd7\x01\xdb\x11\xc9\x32\xa1\xd7\x69\x7b\xb9\x49\x42\xaf\x03\x3e\x8c\xd3\xa0\xf3\xac\xd7\x6d\xdc\x9c\x79\x9d\xe6\x9d\xac\x45\xbe\xa5\x99\xc8\x83\x19\x73\x7c\x43\xb3\x0c\xba\x12\x7e\x42\xcc\x80\x82\x34\x8f\x86\xf1\x74\x16\x47\x10\x73\x9d\x7c\x5b\x7d\xfa\x44\xcc\xfb\x24\x1c\xd4\x58\xd1\xaf\x5f\x65\x03\x00\xe1\xf5\x79\xcf\xc6\x1d\x7e\x8a\x73\xab\x0e\x3f\xc5\xd2\xb7\x5f\xe3\x24\x00\xbf\x74\x51\x40\xbc\x91\x21\xcc\x47\x60\xf0\x07\xb4\xbe\xc9\x6f\x79\x72\x98\xd6\xcf\x0a\x66\x18\x5c\xab\xfa\x64\xa1\x4a\xef\x3f\x66\xa3\x75\x80\x82\xa3\x61\x8d\x3c\x68\x58\x77\xdb\xe2\x2b\x7d\x2c\x32\x44\x11\x5f\xb6\x2f\x66\xef\xb6\x76\xf2\xcb\x26\xfa\x6c\xbd\xc1\x1a\xa4\xd4\x3e\x8f\x2c\x2b\x7e\x8b\x95\xe1\xe9\x6c\xe2\x67\x36\x06\x25\xa2\x4c\xff\x19\xb1\x88\x3c\x5c\x83\x0a\x5e\x05\x82\xd7\x81\xde\x2f\xfc\x03\xd7\x78\x84\xc9\x1e\x6a\xa3\x4a\xa3\xb9\x8e\x06\x61\x96\x56\x8b\x00\x86\x17\x16\x78\x7b\xbf\xdc\x16\xdc\xa7\xed\x0f\xfd\x4f\xbf\xed\x1c\x1c\xed\x7f\xda\x3f\xd8\xda\x46\x9b\x10\xdb\x20\xf3\xa3\x0c\x25\x78\x96\xe0\x14\x47\x59\x18\x9d\x73\x45\x0c\x21\xc3\x69\x1c\xe4\x7d\xb7\xc2\xdc\xda\x2e\x05\x93\xb1\x53\x03\xa6\x74\x29\xa8\x99\x1c\x89\x47\x3b\x45\x59\x2e\x09\xf3\xd9\xa4\xe8\xf6\xc1\xef\x7b\x9e\x80\xc1\x83\x48\xf2\x21\x17\x51\x8a\x4b\xbd\x13\x74\x4f\xe6\x00\x9d\x8c\x31\x19\xf5\x2c\x46\x73\xe6\x27\x40\x58\x00\x22\x85\x01\xb4\x02\x72\x35\x7f\x18\x8e\xce\x7b\x40\xba\x1c\xd7\xaa\xbc\xa3\x1a\xd8\xc2\x76\x91\x52\xd8\x8c\xfc\xc2\xc8\x35\x19\x36\xf4\xa9\x3d\xa6\x84\x3b\x21\x3d\x82\xfc\x17\x7c\x5d\xb3\x96\xe5\xae\xa1\xc3\xd1\x39\xaa\x1c\x40\x2b\xfe\xa4\x0a\x75\x86\xb6\xc1\x2b\x39\x06\x6a\x5b\x3c\x90\x28\x9d\xd0\x1b\x42\x22\xbc\x77\x84\x50\x86\x45\x7d\x22\xe7\x8a\x70\xe8\xfe\xae\x4a\x09\x66\x01\xa4\x48\x0b\xf2\x1e\xcf\xaf\x9e\x6b\x74\x9b\xde\xa6\xc3\x1c\x27\x15\x76\x79\x06\x43\xe8\xa1\x3f\x51\x78\xd1\x43\xe1\x45\xce\x1b\x6f\x14\xd3\x03\x65\xbe\x55\x48\x3d\x25\x2e\x14\x93\x1c\x74\x0d\x80\x9c\x39\x84\xd6\x67\x37\xce\xea\x5a\xb5\xc8\x1e\xba\x84\x56\x92\x9e\x1c\x0b\xf1\x91\x9e\xee\x97\x9e\xb6\xf0\x7d\xd1\x93\x80\x74\x37\x7a\x52\xf9\xf4\x2d\xe8\x69\x2f\x0a\xb3\xd0\x9f\x84\x7f\xe0\x14\xf9\x28\xc2\x97\x93\x6b\x86\x61\xc0\x86\x63\x31\x2d\xf1\x5d\xe3\x6a\x14\x27\xd3\xfd\x38\xc0\x68\x9b\x3a\xab\x41\x9c\xe6\x9c\xd3\xc5\x89\x4c\xa7\x60\x5d\x0d\x7e\x7e\x9c\x6a\xc5\x26\x63\x27\xc3\xef\x8e\x64\xef\x8d\xac\x2a\xe6\x07\x1b\xa7\xb8\x25\xc1\x85\x51\xa8\x58\xd8\x88\x69\x92\xc8\xc5\xa2\xa2\xde\x9c\xcd\x08\x2d\xc0\x68\xf1\x74\xd3\xa9\xe5\x9a\x81\x0c\xf1\x86\xf8\xc9\x37\x45\x4a\x83\xe6\xa9\x38\x23\x92\x33\x35\xac\x8f\x93\x29\x9d\x76\xdf\xa6\xbb\xa1\xf4\x9d\x93\xd4\x46\x4e\x5e\xaf\x6c\x25\xa9\x1d\x0d\xd8\xca\x58\xcf\xe2\x21\x25\x74\xea\x01\x60\xeb\x07\xd8\x17\x55\x4a\x2f\x1c\xb0\xd1\x51\xf9\x30\x04\x73\x48\x45\x4b\xa0\x3d\xbb\x23\xf9\xb0\x25\x68\xe2\xa6\xcc\x70\x52\xc6\x88\x8a\x1a\x15\x05\x7e\xe6\xa3\x01\xc8\x5e\x6a\x09\x87\x3c\x06\xa0\x69\xaa\x0b\xee\xee\xac\x03\x3e\xc4\x09\xcc\xe5\x30\x8e\x86\x09\xce\xf0\x0b\x36\x1c\x93\xf8\x5c\x61\xca\xd2\xbd\xd4\xd1\x72\x63\x0d\x01\x35\x00\x73\xea\xdf\xc2\x78\x0a\x0e\x24\x96\x82\x83\x25\x36\xbd\xaf\x29\x73\x85\x21\x40\x99\xb2\x93\xf0\x06\xde\x06\x6b\x40\x02\x5f\x62\xe7\x92\xf8\x93\x80\x45\xa3\x66\xb1\x68\x04\x61\x74\x7e\x0f\xdc\x24\xef\xfc\x06\x27\x0f\x06\xbf\xf2\x9c\xb4\xf9\x5c\x25\x93\x32\xf5\x2e\x39\xe6\x4e\x0a\x63\x25\x7b\x5a\x98\x57\x3a\x74\x0e\xee\x81\xa3\xc0\x36\xfb\x3e\x7c\x91\xab\xdb\x68\x8a\xb6\x87\xfc\x0b\x3f\x9c\xf8\x83\x09\xa6\x66\x88\xa9\x7b\x5b\xfc\xc4\x3b\x53\x9a\xaa\x76\xc2\x88\x6d\x7c\x85\xfb\x14\x83\xab\xee\x33\x1f\xe2\x8c\xb9\x47\xd3\xa8\x69\x14\x52\xbe\x6b\xa0\x30\x45\x78\x34\xc2\xc3\x2c\xbc\xc0\x93\x6b\xe4\xa3\x00\xa7\x59\x32\x87\x67\x0f\x25\xd8\x0f\x5e\xc4\xd1\x10\x97\xda\x67\xca\x52\x2f\xa0\xf1\x50\x34\x4c\x81\x3f\x34\x25\xf3\x91\xac\x94\x27\x62\x51\x65\x59\xea\x17\x15\x17\x93\x3f\x2f\x5a\x9e\xfe\x77\xf2\xb9\x98\x43\x21\xb5\x44\x38\x2a\x04\x80\x0a\x57\x8b\x52\xd4\x72\x51\xb2\x04\x43\x86\x80\x48\x04\x55\xb6\xe0\x70\xc0\x02\x66\x72\x4e\xbd\x23\x4d\x88\x75\xf1\x99\xb5\x17\x2a\x9b\x1b\xcd\xf5\xd5\x56\x53\xfe\x44\x55\x22\xb6\x2f\x9a\x1c\xd4\x43\x0d\xe5\xab\x2a\xff\xf6\x50\xb3\xcc\xd9\x29\xb5\xaa\xb2\xfd\xc5\x8a\x6c\xe4\x5c\x9b\xfc\xd4\xc2\x46\xfa\x64\x8c\x25\xa1\x80\x65\xda\xf2\xd1\x18\xb4\xc6\x44\xc8\x2c\xb1\x14\xb9\x08\xbb\x19\x71\x7c\x20\xc2\x00\x5f\xd6\x44\x68\x62\xeb\xda\xd2\xa1\x6f\x70\x58\x62\xd6\xde\xa6\xca\x53\xd3\x91\x1b\xb2\xad\x73\x95\x29\xf5\x7a\x4e\xbf\x29\xf2\x27\x3e\xa5\x78\x82\x87\x19\x6d\xf8\x38\x4b\xfc\x0c\x9f\x5f\x57\x5c\xe6\xda\x92\xf6\x19\xc4\xc5\x0d\xf4\x9c\xb2\xd2\xe7\x4e\xf3\x30\x36\x1b\x87\x7e\x9a\x12\x36\xf1\xc6\x4f\x71\xa0\x78\xcc\xc9\x7f\xc5\xc6\x61\x0c\xd4\x31\x4e\xe0\xc0\x45\x76\x35\x37\xa4\xe2\x45\xae\x27\xf7\x63\xf7\x19\x05\x36\xea\x2e\xa4\x18\x39\xc9\x8c\xcd\xbc\x61\x29\xb2\x1b\xcd\xa3\x80\xd9\xe7\x41\x5c\xdc\x50\x14\x3d\xe4\xbe\xc0\xd1\xc7\xc0\x73\x58\x7a\x32\xb2\xef\x19\xfd\xd7\xee\x73\xee\x84\xb6\x7a\x53\xe4\xa1\xc2\x1b\x23\x1d\x73\xcb\x84\xea\x6c\x5b\xe6\x92\x95\x2a\xd3\xf0\xda\xaf\xde\x54\x1d\x76\x9a\x25\xd8\x9f\xde\x4a\x95\x0d\x32\x14\x53\x3e\xcb\x36\xf8\xad\xe6\x8b\x41\x48\x0d\xb6\xd5\x13\x0d\x95\x4e\x20\x8e\xb5\xa4\x99\x6e\xa0\x4a\xab\xa9\x2a\xa6\x25\x85\xef\x31\xe0\xa7\xa9\x7d\xf5\x97\x05\x1e\x21\x3b\x96\xbd\xd6\xb6\xc3\x72\x11\x71\xe6\x27\x70\xdc\xb2\x09\x88\xe6\xf6\x06\xc7\x9b\xdc\xba\x8a\x0b\x8d\x3f\xfc\xf0\x7c\x34\x99\xa7\xe3\xe7\xe5\xb6\x39\x0a\xc5\xb5\xd1\x89\x61\xee\xa1\x46\xd1\xbc\xc2\xb9\x16\xd2\x9a\xce\xe4\xdb\x52\x59\x79\xfe\x69\x4a\xcf\xbe\xfd\x1a\xfb\xf1\xe7\xcd\x62\x0a\x51\x3c\x76\xa0\x9e\x41\x25\x52\x1b\xd2\xed\x26\x3b\x68\x1b\xce\xc1\xec\xbd\xac\xf4\x2e\x52\xd0\xcb\x2a\xca\x29\xcf\xce\x95\xcb\xd7\x4b\xef\xa6\x9b\x6a\x8f\xac\x0a\x41\x3d\xb5\x4c\xae\xe0\x07\xaa\xfe\x06\xfb\x21\x9f\x29\xbe\xdd\x81\x1e\xb6\xff\xa6\x6f\xa8\xa2\x39\x47\x09\x2f\xa8\xd7\xce\x6d\x34\xcf\x39\x8c\x42\x5d\xa1\xa8\xcb\x15\x4d\x52\xbd\x5b\x69\x9c\xc5\x74\xe6\x07\xa4\xff\x99\xd3\x99\x6b\x82\x97\x9c\x4e\xab\xe2\xb7\xe4\x74\x8a\xba\x77\x98\xce\x22\x85\x6f\xb9\xab\x83\x6f\x3a\x9d\x77\x9e\xae\x82\x25\xb0\x60\xbe\x74\xbd\x69\xc1\x24\xd1\xcd\x44\xe8\x79\x87\x36\xb1\x8e\x59\x5d\x5f\xa0\x0d\x14\x5e\xc8\xb3\x55\xb4\x45\xb0\x1d\x93\x06\x96\xee\x8f\xfd\x30\x82\x9c\x27\xae\xbb\xd6\x37\x60\x37\xf0\x89\x77\x1e\x6d\xb8\x83\x0f\xe8\x2a\x36\x65\x07\x21\x75\x0d\x62\x90\x86\x26\x6f\x4c\xdb\x25\xc4\x9d\xe8\xab\x22\x8e\xf2\xa6\xcf\xb7\x03\xed\x24\x24\x35\xa1\xcc\x1d\xe9\xd5\x9b\xbe\x65\xef\x31\xc1\xd3\x26\x0e\x45\xfc\xcf\x8c\xab\x31\x28\x95\xfa\x19\x33\xea\xae\xe9\x75\x0c\x18\x1a\xcd\x52\xe9\x48\x68\x45\x98\xb0\x14\x73\x19\x09\xa9\x9c\x10\x59\x6f\x48\x98\x5d\x16\x01\xc2\x7e\x5e\x8e\x31\x0b\xbd\x4f\xf1\x83\x48\x9e\x69\x09\xe4\xcc\x85\x61\x2f\x48\xfe\x60\x2a\x99\xa8\x43\xbd\x01\x20\x3f\x1e\x74\x41\xb8\x36\xe8\xb2\xac\x3c\x19\x28\x57\x01\x1a\x66\xf2\x2a\x14\xa7\x2d\xb4\xd5\x01\x16\xe9\x37\x24\xf2\x42\x72\x18\xce\xe6\x42\xac\xd0\xe4\x88\x57\x0e\x73\xd6\xdf\x0e\x8e\xe0\xbc\xcc\x88\xce\x2c\x73\x15\x27\xd0\xaf\x5c\xd1\xed\x21\xa5\x5f\x5e\xde\xac\x4d\xe8\x67\x78\xc8\xbe\x2e\x15\x7d\x74\xad\x98\x1d\xe1\x29\x06\x29\x1c\x76\x57\x4a\x02\xec\x2a\x0a\x4e\xfb\xe0\xd0\x0e\xaf\xcd\xea\x5c\x82\xc5\x17\x3c\xee\x3c\x65\xa6\x34\xa1\x3c\xc7\x5b\x98\x02\x3a\x3b\x20\x7b\xee\x2c\x5c\xb7\x01\x2e\xb1\x6e\xc5\x3e\xf5\xb8\x6e\x1f\xd7\x2d\xba\xfd\xba\xbd\xcb\xea\x00\x0b\xe1\x71\x98\x2e\xbd\x36\xac\x98\x30\x8a\x06\x2e\xf2\xdb\xc1\x91\x93\x03\xc8\x1e\x64\x06\x07\xb8\x2b\xdb\xb1\x62\x76\x92\x0f\xcd\x00\x0f\xe3\x29\x5b\x3a\x84\x2d\x84\xf1\x3c\x2d\xcf\x3c\xc4\x60\x95\x65\x0f\x82\x94\x78\x37\x2a\x4e\xdc\x97\xf2\x80\x02\x11\x89\x4b\x4b\x36\x0f\xff\x71\x1c\xa7\x18\x4d\xc3\x2b\x22\x0b\x59\xfa\x07\x9e\xa0\xa6\x90\x86\x64\x42\x64\x52\x98\x8b\xec\xe2\x0b\x90\x4e\xc9\x49\x27\x9d\x0f\x52\xfc\xdf\x73\x1c\x65\x56\x15\x03\x52\x45\x3b\x29\xad\x87\x3a\x8a\x4e\xd5\xa0\x8c\x92\x36\x2b\x8b\x55\xfd\x64\x67\xb3\x61\x65\x8b\x91\x94\xaf\x36\x6b\xa4\x24\xf2\x07\x13\x98\x5b\x8f\x87\x67\xe8\xf7\x0d\x5a\xef\x34\x2c\x0c\x5d\x92\xff\xe6\x26\xd0\x6f\xfa\xac\xbc\x12\xd0\x44\x12\x6d\x0f\xfd\x20\x20\x13\xb8\x40\x01\x32\x83\x34\x57\xfd\x1a\xfd\xd7\xae\xfe\x38\x7c\xd7\x3f\x46\xff\xab\xb3\xba\x86\x66\x0c\x68\xca\x74\x79\x36\x98\x87\x5f\x86\xe9\x1a\xc8\xc9\x33\x3f\xa8\xf1\xa7\x02\xd9\xf8\xd0\xe7\xd7\xcf\xf3\x94\xc7\xce\x17\x81\x50\x98\xb9\x32\x04\x4e\x16\x78\x2c\x65\x7f\x05\x90\xe5\xdb\x67\x82\x96\xb5\x92\x5d\x8f\xc7\x42\x40\x49\xf7\x91\x00\x28\x15\xd1\x2c\xc9\xa0\x40\x3c\xcb\x07\x3e\x36\x8b\xc3\x97\x18\x57\xf2\x2b\xbf\x5e\xf3\xb4\xb8\x59\xca\x05\xb3\x1f\xe8\x97\x6b\xb7\x66\x20\xa2\x1a\x8d\x75\xb2\x21\x8d\x97\x2b\x66\xc8\x3c\xca\x04\xed\x80\x5f\x91\x09\x35\x62\x04\x6b\x00\xa5\x2f\x5e\xd0\x9c\xd3\x22\xc2\xca\xbf\xb4\x02\xb6\x66\xe9\xbd\x10\x6f\xd7\x0c\xbd\x40\x53\xbd\xc1\x57\x42\x2f\x10\x01\x45\xc1\x22\xf7\x75\x31\xde\x33\x07\x17\xe3\x3d\xb8\xb5\x28\x6f\x17\x62\x56\x88\x54\x5a\x1c\xbe\x20\x67\x3f\x6a\x9b\x28\x44\x2b\x2e\xb7\x7c\x19\x3a\x8d\x73\x2f\xbd\x29\x90\x5e\x35\xec\xd0\x46\x6e\xfb\xce\x0f\xff\x32\x68\x4f\x45\xc9\x66\x86\xb0\x19\x04\xf6\x41\x80\xb9\x1e\xc6\xd1\xd0\xcf\x38\xcc\xd2\x1a\x98\x8f\xd1\x4c\x30\x14\x58\xb2\x63\x3f\xa0\x81\x8c\xd8\x42\xfd\x36\x5c\x66\x1e\xe9\x7c\xe6\x9b\x70\x04\x68\xb6\xc4\x95\x3b\x94\xd3\x59\x82\x8d\x0f\xbc\xc5\x99\x92\xb9\x58\x5a\xc4\x10\x03\x16\x4d\xfc\x34\x83\xe7\xc5\x6b\x3a\x17\xaf\x4f\x2b\xea\x72\x7e\x81\x1a\x55\xea\x62\x76\xc6\x9c\xc1\x6c\x9e\xc4\x54\x70\x70\x53\x4c\x0e\x6e\x43\x5f\x83\xd2\x66\x4a\xb7\xcd\x25\xf5\xfc\x7f\xc5\x45\x90\xcd\x45\xc1\x7e\xb3\x60\xbb\x55\x28\xba\x07\xba\x3f\xa3\xff\xfd\x38\xc0\x37\x54\x3d\x78\x22\x4e\x6b\xf4\x52\x04\x4e\x12\x52\x77\xfa\x6f\xfa\x2e\x28\x6c\xae\x6e\x04\x7d\x11\x58\xba\xb0\x61\x42\x04\x92\x77\x10\x38\xf8\x11\xb0\x01\x90\x0c\x27\x35\x02\x27\x98\x02\x66\x9e\x76\xaa\xa3\x6d\x1b\x4d\xdc\x28\xde\x08\x4b\x18\x06\xd2\x89\x56\x3f\xf6\x25\xeb\xc3\x62\x1b\xc0\x82\x00\x67\xaa\x7d\xa8\xc5\x8f\x13\xe4\x66\x32\x02\x8a\x5a\x14\xa9\x8a\x5d\xf2\x7d\x0a\xb6\x9f\x0e\xfc\xf3\x89\x35\x0f\x03\x86\x2d\x29\x97\xb4\x55\xe3\x12\xe7\x89\x81\x40\x85\x2d\x11\x34\x1a\x70\x2a\xd7\xee\x66\xec\xd2\xfe\xea\x4f\xc5\xcd\xab\xd6\x2b\x55\xf4\xd3\xea\xd2\x18\x08\x55\x8b\xe3\x2c\xf3\x0e\xe3\x19\xf2\x33\x34\xc1\x84\x0b\xc6\x11\x5f\x01\x2c\xcd\x07\xb5\x04\x85\xfd\x1a\x18\xae\xc9\xb7\x90\x38\xdf\x4c\xc3\x88\x1a\x89\xb2\x43\xbc\x11\x2e\x51\x7d\x64\x95\xe8\xf4\x49\xf8\x53\x42\x9a\x82\xfd\x31\x3d\xf2\x86\x17\xe8\xc7\x1f\xad\xfa\x78\x3d\x50\xc7\xe1\xad\x74\x19\x39\x26\xaa\x32\xc5\x79\x3e\xd7\x9b\x2d\x7b\x25\xed\x16\x49\x73\x91\x44\x18\x4a\xb3\x57\x16\x82\xe6\xcd\xdd\x2f\x21\xaf\xae\x92\x83\x0c\xcd\xf7\xe5\x12\xb9\x40\x5e\x67\xa6\x5f\x20\x81\xc3\xef\x85\x3a\x08\x7e\x15\x4f\x6d\x04\x5d\xa7\xe4\x5b\x5d\xc6\x3f\xdc\xb2\x7a\x58\xbc\xad\xed\x81\xe4\xb7\x60\x06\xa8\x7c\x64\x6b\x6f\x91\xe5\xdf\x1d\x2d\x15\xc0\xf4\x8e\xc9\x1e\x76\x33\x14\x34\x8c\x27\x13\x4c\xe9\x3f\x1e\x71\xd1\x00\x44\x4d\x0c\xc9\xf4\x8a\x44\x0f\x49\x14\x95\x9c\xbc\xc9\x36\x9a\xf8\x97\xd2\x2b\xab\x5f\xa2\xdd\xf5\x83\x3a\xa0\x0b\x21\xa5\x4c\xed\xfc\xe2\x11\x52\x3c\x30\x2e\x48\xeb\x93\xf5\x69\x98\xe3\xba\x00\xa5\xfe\x84\x62\x0f\x3f\x00\x18\xa8\x24\x7d\x1a\x7e\x14\x27\xe1\x05\x95\x55\x38\xc7\xb0\x02\xe4\x57\xa9\xb9\x9c\x2f\x59\x0e\x9a\xb1\x56\xcb\xc9\x35\xb7\xe9\x59\xb1\x7c\x33\x1c\xe3\xe9\xed\xe0\xda\x05\x4e\xa6\x32\x07\x8b\xe9\x91\x04\xcf\x0a\x82\x26\x65\xbc\xc9\x93\x36\xd2\x53\x0c\x15\xb1\xf8\x5b\x5d\x0c\x1b\xc6\xd1\x05\x4e\x32\x45\x86\xa5\xe9\xee\xb8\x31\x25\x58\x7c\x52\xeb\x3f\xb7\xdb\xea\x21\xad\xa2\x3a\xaf\x8a\x97\x25\xed\x61\x16\xbb\x58\xa9\xa8\x2d\x3e\xd6\x09\xef\x26\x19\x1f\xcd\x4e\xd4\x8f\x44\x16\xab\x59\x9c\xa6\xe1\x60\x82\xdd\x2b\xd6\xd2\xd4\x72\xce\x4d\xf9\x40\x99\xf6\xa0\xf4\x1b\x3f\x81\xff\x69\x40\x41\x42\x7d\x4e\x56\x70\x4f\xfa\x9d\x3b\x3c\x59\x2b\x7d\xc1\xd7\x3d\xd5\x2f\xca\x5a\x4c\xf3\x94\xb2\x17\x22\xcb\xb8\x07\xff\x5d\x50\x50\xac\xca\x9e\xe9\xce\x65\xaf\xc1\x44\x78\xdd\x32\xc1\x5e\x58\xc8\xf5\xea\xd1\xf9\x5d\xff\x78\xcd\x5e\x41\x62\xe1\x6d\x7b\x09\xb1\x70\x24\xa0\xf4\x5d\xed\x60\x86\xa3\xe3\xe3\xf7\x46\xb5\xf2\xce\x64\xf2\xf4\xdb\x05\xaf\x69\x78\xb5\x17\xa9\xe5\x4a\x9b\x1e\xd1\x55\x9c\x2e\xb7\x8c\x91\x73\xdd\x98\xac\x44\xf3\x0d\x74\x70\x13\x72\xa8\x73\x03\xe7\x06\xb6\xdc\x2b\x03\x76\x05\xf8\x1d\x8e\x42\x7d\x8d\x17\xc0\x81\x2c\x60\x29\x4d\x01\x06\xe9\xe3\x70\xee\x45\x99\x63\x1c\xc5\xf4\x8d\xc6\x00\x59\xd2\x7e\x5c\xc4\x3d\xca\x2e\x69\x8a\xbc\xb8\xa6\x63\x6b\x7b\x05\x3d\x7f\x6e\xf7\xad\xb0\x96\xaf\x65\x31\xcd\x37\xe4\x72\xe5\x58\x50\xcb\x41\xaa\x4e\xc2\xe4\x15\x65\xe2\x14\x63\xe3\xb2\xaa\xca\x4b\xa0\xaf\x5f\x29\xb9\xe6\x75\x6a\x7c\x12\xaf\xf9\xb1\xd7\xd0\xd1\x58\xe5\x24\x4a\x65\x8b\xee\x35\x68\x3b\x70\xb5\x21\x7e\xda\x6f\x37\x58\xcf\x6d\xc4\x69\x03\xcd\x8a\x8b\x5c\xc6\xb0\x7b\xa9\x83\x58\x7c\xdd\x21\x56\x9d\xef\x5e\x72\x11\x6f\xe6\xc5\x30\x9e\xce\xfc\x0c\xb6\x97\xb2\xcb\x50\xde\x16\xb4\x4d\x4c\x12\x7f\xca\xee\x89\xb6\xe5\x77\x1b\xe4\xee\xcb\x70\x30\xa6\x6d\x1f\x73\xf2\x76\x10\xb2\x44\x5d\x2e\xde\xa8\xd0\xb7\x28\x5e\x9a\xfb\x2e\x50\xcb\xc8\x91\x96\x94\x25\x98\x7f\xb1\x05\x6a\x24\xe2\xae\x56\x81\xbc\xb3\x1d\x63\xa1\xbf\xe6\x21\x96\x14\x77\xaa\x5a\x2e\xa5\x68\x35\x86\xf6\xfe\xb4\x7e\xd5\x69\x75\x1b\xdd\xe1\x1a\x24\x36\xe8\x76\xba\xed\xce\xa8\x33\x3a\xab\x72\x55\x3c\x80\xe6\x0f\x79\x3f\x1c\xe7\xc8\x12\x28\x38\xc7\xc2\x71\xf8\x12\x75\x73\x46\x46\xc3\xda\x2c\xbf\xe7\x15\xad\x31\xd9\x5f\x69\x59\xe1\x91\xaf\x93\x9c\x4e\x6f\xbd\x64\xd4\x98\x0d\x7c\x41\xdf\x62\x0d\xdf\x6f\x00\x07\x53\x18\xd5\x96\xde\xcc\x4f\x52\x5c\x51\x16\x6a\xc1\xc5\x64\x92\x2a\x8a\x9f\xbc\x9a\xd5\x2b\x81\x14\x47\x34\x86\xd7\x82\x45\x47\x09\xc3\x40\xa6\x48\xbd\x5a\x04\x91\x5f\xc6\x49\x87\x61\x96\x14\xc2\x00\x77\x82\xd3\x8c\xda\x36\xf8\x13\xcb\x02\xd5\x60\x9e\xd6\xcf\xd0\xc6\x06\xca\xd7\x1e\xfa\xf1\x47\xbd\xdd\xd3\x06\x2b\xc3\xd7\xa4\x4b\x05\xb5\x7d\x45\x2f\x30\xcc\x96\x91\xca\x61\x8c\xc5\xaf\xb5\xc8\x4c\x79\x9a\x1e\x6a\x57\x0b\xac\xeb\xe2\x0b\x76\x44\x87\xab\xa0\x1c\x86\x59\xde\x80\x3f\x83\x06\xea\xfa\xad\xb5\x51\x5c\xb9\xd5\x69\x74\xcb\x31\x0a\xeb\xd1\xc8\x71\x0c\xf2\xa4\xd3\x89\x2a\x9a\x17\xde\x15\xf1\x45\x78\x99\xf8\xb3\x19\xc8\x91\x7e\xc6\x9a\x97\x55\x26\xc8\x27\x3b\x7d\x2a\x79\xa5\x15\xae\x5e\xc5\xd5\xc7\x70\x65\xcb\x1d\x7e\x6c\x9f\xca\x3a\x90\xdc\xfa\xb2\x47\x08\x3d\x5c\xc6\x2f\x92\xea\xb9\x8e\x40\xee\x2d\xeb\x2c\x75\x08\x8d\x02\x4a\x35\xe2\x80\x91\x5f\xec\x58\x0e\x4e\x45\x21\xa2\x74\xef\x45\x40\xa8\x67\x88\x6a\xd2\xc4\x16\x06\x95\x62\xd7\x0e\x64\xde\x98\x37\xdd\x5d\x3c\x54\x73\xe5\x93\xe5\xa8\x53\xe0\x7d\xce\x9a\xa6\x36\x28\xec\x77\xee\x77\xfe\x37\x89\xe1\x62\xdf\xc2\x36\xff\xda\x0d\x8c\x2c\x4b\xbb\x46\xc5\x5c\x56\xc2\xbf\xd2\xd4\x46\x28\xae\x96\x8e\x53\xd8\xc3\x35\x98\x07\xa9\xd1\xd5\x09\xdf\xb4\x71\x4f\xac\x36\x87\x34\x50\xa0\xec\xb0\x38\xc7\xba\xbd\x58\x6f\x17\x42\x67\xa9\xe8\x39\xdb\x36\xfb\x75\x29\xba\x41\x9c\x3b\x9f\xd8\x02\xa0\x59\x7d\x56\x0d\xb1\x24\xf7\xcc\x10\x01\x12\x58\x67\x6f\x23\x99\xf4\xa1\x7f\x39\x4c\xb8\x02\x36\xa0\x30\x7b\x23\xc2\x71\x85\x63\xae\x6b\x3f\x2a\xbf\x9d\x16\x6d\xda\xca\xfe\x6a\x16\xe4\xaa\x45\xcb\x27\x42\x56\xa2\x6f\xb5\xf0\xc2\x52\x44\xd2\x11\x32\x7a\x31\xcb\x50\xad\x60\x0e\x08\x2e\x44\xcd\x62\x42\x1f\x98\x97\x64\xaf\x2c\x85\x25\x5d\xa0\x6e\x61\x6d\x29\x2d\xe9\x05\x09\xe9\x8d\x2c\xc7\xb5\x9b\xd2\xc7\x16\x76\x0f\x9d\x8a\x89\x13\x8a\x2f\xf9\x5a\x06\x3d\xd8\xf6\x24\x13\x80\xd8\xa1\xb4\x8b\x26\xe9\x11\x72\x7b\xff\x1d\xf7\x29\x2d\x40\x8b\x88\x74\xfc\x0d\xf6\xa6\x3c\xaa\xf2\x62\x36\xcd\xbd\xe7\x2d\x6c\x9a\x93\x1d\x0b\xa3\x20\x79\xd4\xdf\x9a\x65\xdf\x37\x8a\xfa\xbe\x74\x8f\x5b\x8a\x33\x76\x81\x23\xc2\xc0\x37\xd8\x55\x98\xc6\x41\x52\x2d\xc8\x8b\x49\x03\x2c\xef\x14\xec\xf6\x1b\xce\xaf\x32\xf2\x39\x37\xb1\x35\xc7\x38\x85\xb9\x61\xc8\x93\xa7\x6c\x62\x4a\xd4\x45\x3a\x2c\xf9\xde\x24\x31\x19\x45\xe1\x63\xdd\x26\x44\x13\x4b\x6b\x63\xac\x6c\x4d\x1f\x2b\xf5\xfe\x05\x74\x4c\x7e\x9a\xce\xa7\x38\x50\xef\x13\xfd\x49\x82\xfd\xe0\x5a\xda\xef\x94\x03\xd9\x3c\xa2\x69\x2b\x4b\x44\x34\x5b\x8e\xed\xd9\xf9\xd7\x52\x87\x26\xc2\xb8\xc0\x44\x3d\x49\xf1\xd2\xbc\xde\xad\x2f\x9a\x47\xcb\xc2\xfa\x0b\x25\x6e\x83\xe4\xa9\x0a\xe9\x80\x53\x01\x12\xc4\x6f\xe7\x01\x9f\x0c\x9d\x92\xbc\x7a\x58\x65\x5b\x2a\x6f\x16\xbb\x46\x5e\x84\x0b\x42\xd8\x70\x9b\x10\xca\x9e\xcc\xa5\xaa\x5f\x6c\xa0\x42\xed\x28\x83\x56\xa0\x14\x35\x34\x13\xd6\x1b\x92\x77\x76\x13\x89\x45\x57\x26\x5f\x82\x11\xdc\x97\xd0\x7f\x8b\x2f\x4b\x16\x59\x61\x98\x17\x26\xef\x28\x74\xd2\x4a\xb9\x7b\x92\x2d\x02\x1e\xee\xf4\x49\x63\x64\x2d\xef\xfd\xc2\x15\x06\x33\x16\x2f\xa8\xbc\x3a\x96\xd7\x60\x96\x17\xec\x01\xe4\x14\xd2\x0c\x00\x2e\xf6\x0a\xc9\x03\x95\x63\x6a\x5b\x11\x46\xcc\x92\x97\xd9\x01\x30\x93\x99\x73\x1c\x81\x31\x6f\x31\x34\x11\xa5\xdc\x01\x8c\x86\xce\x2e\x86\x65\xea\x0c\x40\x85\x25\x09\x49\x9b\xa8\xdb\x06\x93\x63\xf8\xc0\xed\x67\xf7\x46\x28\x9e\x86\x44\x46\xf0\x90\x4f\x3f\x5d\x86\x93\x09\x1a\x60\xd1\x60\x80\x12\x3f\x0a\xe2\xe9\xe4\xfa\x9e\x0e\xf7\xd4\x6a\x82\x0d\x93\x87\xf6\x7e\xf1\x60\x4a\x49\xe3\xdf\x80\x0b\xd1\x49\x0e\x4c\x16\x24\x51\x63\x0d\x5f\xe1\xe1\x3c\xc3\x95\xe7\x3c\x1a\xd5\x73\x8f\x25\xee\xf0\x98\xf9\x96\x43\x2c\xba\x27\xe8\x1e\x7a\x4e\x86\x83\xfc\xff\x73\xf7\x99\x99\x82\x91\xb9\x1b\xa7\x66\x8f\x93\xa8\xc7\xa8\x8b\x2a\x36\xed\x46\xfd\x74\x9a\xd9\x2c\x3b\x14\xd5\x3f\x38\xaf\x92\x0c\x25\x32\x85\x53\xe9\xb6\x57\x8d\xb4\xe6\x16\xb7\x3a\xba\xb4\xa5\x75\x6d\x4a\x2b\x34\xde\x2c\x4d\x3c\x90\x2b\x70\x45\x8c\xbb\x3c\x0d\x32\x5b\x48\x37\xd5\x1a\x4b\xe4\x2d\x8d\x07\xe0\x6f\x0d\x58\x4b\x68\x33\x2b\xc6\x00\xec\xa6\x0d\x35\xb9\x48\x06\xcd\x14\xe4\x3c\x99\x2c\x1f\x73\xf4\x93\xa9\xcf\x56\x52\x43\xe7\x29\x9c\xed\xce\x52\x47\x4c\x94\x5a\xf2\x30\x9e\x1f\xa9\x85\x14\x7d\x3b\xad\xb6\x4d\x33\xa0\xa8\xb8\x03\xc6\x97\x39\xcb\xd3\x58\xb2\x27\x60\x39\xc4\xaf\xdb\xeb\xc3\x2d\x51\xe2\x84\x42\xdc\xfe\xcd\xa6\xe1\x7a\x40\xfd\xf8\xbb\xad\x9d\x1b\x44\xb6\x4f\x6e\x41\x69\xdb\x85\x73\x29\x8f\x33\xdb\xe2\x2d\x6e\x29\xad\xb8\xa5\xc3\x6e\xe7\x87\x2f\xc1\xa8\x27\x6d\xcf\x12\x85\x2c\xa9\x1e\x67\x2e\x55\xcb\xec\xcb\xdf\x87\xbe\xbc\x50\x3a\xf8\x0e\xd4\x11\x7f\x13\xb5\xb9\x65\xf1\x95\xd2\x24\x3f\xe7\x43\xed\x0a\x2b\xfb\xf0\x0d\x7b\xe8\xcf\x07\xd6\x60\xe7\xdb\xd1\x37\x52\x38\x68\xbb\x6b\x9c\xb9\x94\xbb\x36\xd9\x85\x80\x27\x62\x0b\x17\x57\x24\xec\xe9\xf0\x0a\x19\x83\x3d\xd3\x6d\xcf\xe5\xdd\x49\xc5\x58\xda\x37\xa3\x4b\x35\xd8\x62\x15\x0c\x6a\xd6\x90\x04\x4e\xc5\xbc\xa2\x2f\x71\x5f\x67\xc8\x01\x20\x8c\xf9\x51\xdb\x97\xf4\xf8\x06\x1a\xfb\xe1\x15\x4d\x06\x02\x15\xac\x43\x2a\x9d\xad\xa9\x61\xa6\x02\xdd\xa5\x37\xb1\x9e\xf8\xee\xa0\x0f\xfe\x0b\xf8\xf1\x3d\x2b\x88\xbf\x77\xc6\xfc\x3d\xea\x89\x6d\xcc\x70\x59\x45\xf1\x9d\x18\xe3\xbd\xa3\x68\x2a\x8a\xef\x8b\x71\x97\xd4\x13\x7f\x73\xde\xfd\xcd\x95\xc5\xdf\x7e\xab\xf0\x14\xdb\x1e\xc7\x09\xed\xfe\xf6\x8e\x52\xfa\x70\xf7\xfd\x85\x6d\xeb\x90\xc7\xb7\xe4\xee\x51\xa4\x20\xcf\x55\x79\x22\xd3\xa5\x9c\xd2\x92\xe5\xaf\xbc\x39\xf3\x3a\xad\xef\x35\x29\xe5\xbd\xe7\xa0\x5c\x36\xf7\xa4\x92\x73\xd2\x40\xcc\x4c\x3f\xa9\xa5\x9d\xe4\x15\x1d\x89\x27\x41\x3f\x9a\x03\x17\x3f\xd5\xe4\x93\xfb\x7e\x36\xf6\x90\x25\x05\x65\x7e\xbc\x7e\x1f\x0f\xfd\x09\x9a\xc5\x93\xeb\x51\x38\x41\xf1\x08\xd1\x4d\x8b\x9d\xe2\x2d\x47\x5e\x16\xdb\x7e\x43\x2d\xa8\x35\xac\x30\x26\xf1\x7a\x87\xbc\xbf\x79\x65\xc6\x0e\x92\x6c\x2d\x07\x9f\x0d\xa6\x06\x36\x82\xf3\x01\x99\x41\x9d\x88\x77\x6a\xb3\x24\xce\x62\xf2\x09\x6d\x90\xd3\x87\x5e\x80\xd5\x43\x1b\x28\xc2\x97\x04\x81\x62\x08\xd1\x7c\x32\x71\x2c\x14\x81\x41\xbe\x4c\xa4\x78\x47\xb6\x48\x9e\x7c\x4e\x8a\x95\xdc\x4e\xc5\xf6\xfb\x70\x90\xf8\xc9\xf5\x22\x1d\xb9\x94\x1f\xd4\x09\x0a\xb2\x85\x32\xad\x27\x11\x2e\x78\x97\xfd\x09\x0a\xa3\x31\x4e\x42\x25\x80\xab\x12\xd1\x41\xcf\x33\x6a\x46\x18\x35\xa7\xb3\x44\xd8\x3f\x1e\x63\x18\xdc\xe3\x84\x9f\xc1\xd8\xcf\x38\x42\x2c\x94\x07\x15\x83\x8c\x53\x25\x42\x45\x71\x00\xb9\xdc\x15\x5f\xe0\x24\x09\x03\x9c\xa2\x43\xaa\x10\x09\x71\x4a\x19\xf8\xec\x1a\x85\x11\xcb\x66\x9c\x23\x50\xa2\x05\x3d\x57\xc3\xc9\xb2\x00\x0c\x99\xcb\x51\x6e\x99\xa8\x81\x64\xa2\xf6\xaf\x4f\x28\x09\x2b\xd2\x4d\x81\x49\xa2\xec\x2f\x16\xe2\x49\xd0\x43\xcf\x21\x53\xd6\x73\xdd\x70\xc4\xde\x26\xf9\x9b\xe2\x6c\x1c\x07\x85\x3e\xf2\x52\x69\x3d\x46\xbe\xcd\xf1\x0c\x21\x33\x9c\x21\x45\x5f\x31\xc8\xe6\xf3\xea\x0c\x62\x38\xf3\x2f\x23\xf3\x8b\xc4\x48\x88\xb0\x90\xa7\xd5\x73\x99\x13\x6f\xce\xcf\xa7\x38\xb2\x98\x0e\x93\x1d\xa5\x18\x0b\x94\x33\x1f\x76\xee\xca\xcb\x5b\xd3\x3f\x58\x11\x60\x66\x52\xdc\xf5\x2b\x14\x8e\xa5\x89\x1d\xa7\x1f\x78\x93\x63\x3f\x3d\xb8\x8c\x18\xd9\x5f\x57\x9e\x93\x9a\xcf\xab\xc2\xe7\x89\x3c\xc2\x26\xc8\xcb\x93\x17\x0b\xfb\x41\x6b\x15\x4e\xb7\xa5\xd6\xff\x93\xce\x67\x44\xd4\x8a\xc2\xac\xe6\x13\xe1\x94\x6d\x7d\x7e\x72\x3e\x27\xa3\x6b\x1d\x0f\x64\xc9\xa0\x50\x30\x4e\xb9\xc7\x6d\xf2\x3c\x45\x39\x47\x0f\xa9\x52\x98\x4f\x3a\x5d\xa5\x26\x04\xb9\x83\xca\x7e\xe0\xd8\x76\x10\x57\x8c\x8f\x70\x82\xa3\x21\x69\x00\xc6\x79\xa6\xaf\x57\x63\x18\x98\x5c\x6c\x03\xe8\xdc\x67\x90\x2d\x35\x86\x8d\xa9\x6e\xc3\x4a\x49\x65\xa6\x49\x55\xde\xf3\x88\x8e\x03\x4c\x20\x5d\xb5\x66\x08\xd4\x4d\x3e\x1f\x79\x06\x9b\x4a\x55\x5c\xc3\x11\x51\x1a\x42\xca\x01\x90\x4a\xf5\xef\xcc\x2b\x79\xc4\x72\xb4\xc1\xd8\x26\xbf\xb3\x58\xc8\x8b\x68\xb9\x62\x8e\x67\x36\x02\x4b\x2e\x8f\x93\x6d\xae\x5c\x1e\x41\x5d\x5a\x23\xfc\x9d\xba\x4e\x9c\x54\xc3\x8b\xdf\x86\x6c\x8a\xdc\xd5\x1d\x73\x85\x0e\x18\x33\x63\x49\x02\x80\xa4\xc0\x84\x3e\x08\x50\x1a\x4f\x31\x4d\x3d\x85\x2e\xc7\x38\x42\xd7\xf1\x3c\x11\x66\xf6\x3e\x11\x67\x29\xf0\x7b\x8e\x9d\x7b\xd7\x5d\x50\x77\x74\x2e\xda\xcb\x10\x65\x00\xb5\x9a\x39\x32\x62\xe8\x6f\xb9\xdd\x2d\x44\xa3\xd4\x9c\xf6\xe3\x19\x11\x76\x66\xb9\xdc\xc3\xe4\x9d\x3b\x88\x53\x12\x30\xd0\x30\x29\x32\xd5\x14\x34\x91\xf7\x3c\xa5\x6c\x75\xd2\xfd\xb3\xac\xfc\x72\xcb\x71\x87\x46\x94\x4b\x6c\xd1\x3f\xeb\x1a\x17\x11\x0f\xf9\x65\xdb\x07\x7f\x0a\x46\x13\x0b\xea\x21\xb6\x55\xe7\xc5\xf4\xcd\x5a\x06\x58\x2d\xdc\x62\xc9\x74\x9e\xca\xc5\xcf\xd0\x86\xd4\xbe\xfa\x69\x89\xd4\x45\x8e\x4d\x76\x1b\x5d\xc6\xd1\xf3\x8c\xca\xcf\xdc\xdd\x51\x0a\x5e\x38\x89\xe3\x19\xf2\x07\xf1\x85\x65\x1b\x2c\xee\xf2\x73\x0e\xed\xb9\xbb\xc3\xc0\x45\x45\xab\x72\x3f\xc5\xdb\x12\x79\xb5\x4a\x2d\x1e\x71\x38\x81\x9e\x82\xfd\xcb\x32\xeb\xc6\xb6\xf1\x0d\x27\x71\x84\x1f\x80\xe3\x01\x5c\xb4\x91\xef\x21\xf0\xa2\xc4\x4e\x46\x8a\x2d\xdc\xc8\xe4\x5c\x24\xaa\x70\xc4\xf9\xa9\xd5\x9e\xcc\x7e\x46\xb6\xde\xee\x47\xc8\x07\xcf\x5b\x2d\x16\x61\x61\x64\x21\x23\xce\x7b\x31\x08\x5b\x78\x1a\x61\xfc\xa0\x86\x43\x4c\xc3\xf3\x28\x1c\x85\x43\x3f\xca\x58\x40\xc9\x90\xf6\x1e\x40\xd2\x76\x6c\xc7\xe4\x5f\x25\x0f\x62\x7a\x56\x96\xdf\xdc\x43\xd8\x18\xb3\x79\x9d\x2c\x1c\x61\xf0\x65\xd3\xab\x05\x63\x8d\xac\x66\x61\x62\xa4\xb4\x1b\x8c\x85\x83\x86\xef\x2d\xd5\x8b\xec\x9f\xad\x6c\xec\x86\x2d\x8c\x43\xfb\x5f\x1e\xc0\x69\xfd\xaa\x5e\xaf\x37\xea\xcd\x7a\xcb\x43\xf5\xab\x7a\xbb\xde\xa9\x77\xeb\x6b\x67\x0f\x06\xd8\x43\xdd\xd2\xa1\x57\x58\xf8\x3a\x3e\x23\xc6\x8a\xbd\x64\x0e\xc1\xb0\x5c\xf9\x03\xfd\xf7\xeb\x57\x88\xd9\xab\x89\x1a\x23\x54\x11\xd3\xfb\xc3\x86\x45\x51\x28\xff\x01\x54\xc9\x68\x88\xff\x2c\x6d\x4c\xaa\x03\xa0\xe4\x31\xc1\xd1\x79\x36\xa6\xa6\x47\x4e\x2e\x52\x3e\x66\x4c\xbe\x50\x96\x8b\x14\xb3\x1d\x0d\xe3\x80\xd0\x3b\xa6\x3f\x74\x72\x87\xd7\xc5\xb1\x3f\x05\x01\xe0\x68\x58\xdb\xc5\x57\xee\x36\x17\x05\x90\x29\xb5\xda\x97\x0e\xee\x92\x13\x6b\x89\xc8\x2e\x96\xb8\x06\x8b\xc2\xba\x58\xaa\x28\x43\xf2\x31\x1b\xad\x2f\x15\xcd\x85\x4d\x85\x33\x96\x0b\x9f\xaa\xaf\x5f\xd1\x2e\xbe\x2a\x0c\xdf\xb2\x80\x80\x86\x7e\x86\x23\xb6\xe7\xab\x14\xe4\x60\xfe\x6e\x42\x92\xee\x61\xf3\x01\x3f\x61\xdc\x50\xa2\x4c\x48\xf3\xbb\xec\xbd\x6e\x59\x5c\xca\xd0\x86\xc0\xae\xc1\xe3\x67\x88\x37\x4d\x77\x4a\x33\x28\xa9\x33\x25\x1a\xd8\x79\xb9\x70\x24\x64\x60\x7f\x35\x18\x96\xc5\x57\x31\x1b\xfb\x22\xd4\x41\x4e\x62\xee\xd2\x61\x7a\x9c\xf3\x18\x85\xe7\x38\x80\x1f\xab\x2c\x89\xc2\xcf\xeb\x18\x9d\xea\x4f\xfc\xe9\x0c\xe1\x2b\x88\x24\x39\x08\xf5\xce\xd1\x7b\x55\x52\xc6\xbc\x6d\xa0\xf7\xa9\x43\x5b\x90\x14\x05\xf1\x7f\x39\x02\xa5\x43\x7d\x22\x92\x46\x18\xb6\x5a\xe4\x67\xc8\x47\x59\x38\xb5\x48\xdc\xb6\x90\xec\x72\x77\xdd\x49\x21\xe4\xc1\x21\x45\xd1\x06\x41\x8f\xcd\xc2\x69\xc8\xa3\x62\x93\x7f\x2a\xcd\x36\x7a\x81\x2a\x21\xc5\xf8\x27\xb4\x5e\xad\x8a\x68\xd9\x4e\x29\x9e\xc2\x51\x7b\xbc\x82\x42\x11\x6e\xfb\xeb\x46\xde\xf4\xeb\xd7\xbc\x0d\x4b\x79\xd1\x68\x09\xc1\xdf\xb9\x2d\xc9\x63\x4a\x17\xd7\x9d\xc6\xd4\x1d\xe5\xbe\x6c\xf7\x37\x90\x39\xd8\x65\x32\x06\x9b\x54\x28\x36\xdb\x95\x0d\x15\x4d\x5b\x8e\x15\x3f\x8c\xfc\x81\x7e\xf2\x90\x0e\x00\x65\xd9\x29\x8d\xc1\x41\x84\x40\x45\x30\x0c\xb3\xbb\x8a\x82\xf9\xe2\x14\xab\xcb\xc1\xa4\xc8\xe7\xb2\xa1\x7b\x2d\xac\xc9\x94\xa3\x6c\x71\x91\x9c\x4c\xc6\xce\x30\x2c\xa2\xda\xa9\x80\xc1\xe3\xcc\x6f\xc0\xd2\xa1\x7f\x40\xfa\xad\x26\x21\xfd\x54\xe1\x0b\x16\x82\x57\x44\xa9\x0d\xb4\xef\x67\xe3\xda\x10\x87\x93\xbc\xe6\x2a\x5a\x22\x22\x91\xfd\xfc\x5b\x6a\xe7\x71\x98\x23\x19\xc7\xdf\xdb\xda\x7d\xb2\xe3\xae\x4c\x0b\xc6\x79\x57\xa5\x85\x45\xe7\x5c\x19\x2c\x9c\xd4\x28\xae\x72\xf4\x73\xf3\xe4\x5c\x33\x69\x84\x99\xdf\xd7\x9d\x26\x75\xa4\xde\xf2\x53\x20\x89\x0d\xa3\x70\x32\xe1\x61\x67\x99\x9b\x04\x9c\xb7\x16\x0b\x25\xfc\x30\x17\xd9\x0e\xbd\x32\x28\xa7\x8b\x4f\xa9\x59\x66\x90\x4a\x11\xca\x7d\x19\x9f\x95\x38\x82\x31\x57\x90\x86\xfb\xa4\x45\x4b\xc8\x64\x12\xd9\x8f\x58\x32\x7b\x30\x0f\x54\xe4\x6b\xa2\xde\x90\x4f\x3f\x5d\xba\xa3\xcc\x7f\xba\x44\x1b\xe4\xbf\x8e\x04\x6a\xd3\x4f\x7f\x90\x6d\xe6\xaa\xe5\x07\xb8\xbb\x3e\xd0\xc3\xaf\x8b\x62\x7e\xfa\x05\xc9\x9c\xa3\xe0\x9e\xa0\xc4\xdd\x1d\x6d\xb5\x52\xbf\x7a\x59\xef\xbe\x44\x3f\x91\x2e\xfc\x01\x7b\xfa\xce\xce\xce\x4e\x15\xad\xd0\x17\x3f\xff\x8c\xea\x57\x8d\x3a\x6c\xf7\x04\x01\xc7\x76\x4f\xbb\x58\xa9\x5f\xb5\xbb\x9d\x3a\x05\x76\xa9\x03\xbb\x2c\x0b\x0c\x86\x17\xa7\x73\xf0\xf4\xa9\x00\x1a\xaf\x5f\xd3\x9a\x68\x05\xc1\x48\x17\xd6\x67\x75\x57\x37\xa0\x0e\xfb\x2b\x2e\xbb\xb2\x81\xea\xb5\x8e\xb3\x0c\x8c\x29\x2b\xfa\x13\xb5\xb7\xe1\xd4\x56\x45\x3f\xa3\x5a\x07\xfd\x07\x6a\xa0\x1e\x7a\xd1\x28\x23\xa2\x18\x9c\x43\x15\x37\x3c\x94\x0c\xfd\xe1\x18\xb3\xec\x3a\x8b\x05\x0e\x52\xf3\x13\xa1\xc7\xa4\x52\xa1\x55\xc9\x51\x49\x41\x92\xec\x26\xd2\x60\xd8\xaf\x98\x68\xd5\x0d\xf4\x29\xa9\xd0\xf2\x40\x90\x6b\x83\x35\x4b\x9f\x2e\xf3\x1c\x3e\x15\x51\x3e\x87\x8f\xbe\xa2\x7a\xc9\xb0\xe6\x11\xbe\x94\x9c\x9d\xe0\xd6\x91\x29\x40\x22\x9e\xbe\xe7\x89\x36\x92\x76\xe7\x53\x76\xb4\x5f\x64\x48\x83\xa3\x21\x18\xd2\xd0\x7f\xed\x86\x34\xbb\xf8\xca\xd4\x04\xd8\xc0\x91\x82\x1b\x14\x68\x8d\xfe\x2e\x17\x7f\x53\x57\x5f\x8c\xf1\x55\x69\x15\x46\x89\x93\xe7\x92\x51\x35\x4b\xb5\x7e\x5f\x8c\x7c\x8c\xaf\xcc\x10\x9a\x6c\xfc\xa4\xa3\xfd\xe2\x44\x42\xd6\xc0\x99\xb7\x3d\xa6\x5e\x96\x3e\x79\xa6\xcb\x1e\x23\xe9\xac\x9b\x80\xc6\xf8\xaa\x3f\xf6\x93\xd2\x79\xb6\xd2\x85\x07\x3a\xc8\x91\x16\xd2\x83\xdc\xe5\x1d\x0f\x71\x1c\x3b\xb6\xc6\x01\x2c\x01\xd2\xae\xe6\x6a\x9f\x46\xb7\x6a\xe3\x77\xb6\xaa\xa4\x9d\xfa\xa8\xb8\xae\x83\x41\x08\x70\x9f\xe3\x30\xaa\x3c\x7f\x7e\x8b\x88\x9b\x12\x85\xd3\xf5\xb6\x8c\xa6\x87\xaf\x14\x4a\xb8\xe5\x17\x8c\x43\x78\xfa\xeb\xa5\x26\xbe\xd8\xa8\xcd\xb6\x58\x8f\xe5\x23\x65\xd2\x2a\xcb\x25\x4a\xa1\x75\xde\xf3\xa3\x0b\x7d\x64\x47\x99\x65\x56\xcd\xe5\x32\xa9\xe9\xe4\x46\xd9\x16\xda\x2c\xc8\x8f\x49\x57\x4b\x0b\x34\x13\xd0\xe9\xbd\x28\x63\x9d\xad\xa5\xf3\x41\x9a\x25\x95\xd0\x43\xcd\xaa\x07\x49\xf8\x72\x95\x05\x59\x51\xeb\x55\x9b\x03\xee\xd2\x7b\x9e\x32\x4c\xab\xa8\x59\xd6\x7d\xf6\xbd\x9f\x85\x51\xa3\xdc\xa6\xc5\xca\xf2\x7d\x4b\x3c\xde\x6e\xeb\x62\xd5\xff\xba\xdd\xab\x2c\x02\xf7\xb5\xa6\x26\xd0\x9e\x7d\x0f\xa3\xb8\xfc\x8f\xda\xc6\xe8\x70\x7c\xc7\x3b\x99\x84\x20\xdd\x91\xe8\xd4\xd5\x46\x49\x3c\x25\x6f\xfb\x71\x80\x61\x93\x2a\xbb\x21\xc9\x00\xef\xb0\x27\x29\x74\x7b\xfb\x6d\x49\x90\xe3\x52\x8b\xe1\xbb\xde\x9c\xd8\x2a\xa2\xfb\x93\xbc\xdc\xca\x6f\x51\xa2\xd6\x72\xbb\x94\xa8\x26\x36\x2a\xf1\xe6\xa1\xf7\x2a\xad\xe9\x45\xb9\x9c\x43\x49\x8b\x9e\xf7\xb6\x36\x64\x04\xbd\x99\x55\x42\xbe\x26\xf4\xad\xca\xae\x5b\x5c\x7a\xab\xd2\x10\x2e\xbb\x53\x7d\x3c\xd9\x79\xb1\x5e\x6e\xa3\xfa\x98\x8d\xd6\xc5\x36\xc5\x1e\x6e\xb7\x49\xd1\x46\xff\xba\x3d\xaa\x64\xfb\xf7\xb5\xb2\xe6\xd9\x68\xdd\xbe\x41\x91\x51\x7c\xc8\xed\x29\x4b\xae\x0b\x0c\x8c\x02\x4c\x8e\xe8\x1f\x8f\xf6\xfa\xdc\xd3\xa9\x82\xd3\xa1\x3f\xc3\x95\x82\x8d\xd3\x64\xcb\x68\xe8\x67\xc3\x31\xaa\x98\xe9\xa3\x01\x85\x71\x12\x5f\x02\xdd\x42\xc6\x95\xca\xf3\x7d\x7f\x32\x8a\x93\x29\x0e\xd8\x34\x04\x7e\xe6\x9b\x29\xe8\x96\x67\xe0\xf2\xa4\xde\x9e\x7f\xb3\xb9\x5a\x86\x4c\xbe\x6b\xe6\x0d\x14\x46\x59\x77\x4e\x86\xe5\x19\x37\xab\xe3\x32\x06\x50\xb6\x86\x79\xc4\xa8\x87\x5a\x08\x28\x74\xc5\xe1\x54\x4b\x07\xa0\x11\x29\x78\x21\x17\x26\x0e\x58\x36\x33\xc9\x0b\xdd\x99\x89\x57\xb2\x93\xbd\x96\x52\xa2\x4d\xe7\x69\x86\x06\x18\x85\x64\x44\xa7\x38\xca\x68\x9e\x35\x1f\xae\xd7\x13\x9c\x09\x8f\x85\x52\xb9\x7d\xb5\x3c\x9d\xaa\x72\x9f\xe6\x38\xa4\xae\x55\x79\x82\xf8\x2f\x78\x96\xa1\x79\x34\xe3\x49\x03\xd5\xec\xa0\x92\x4d\x4b\xdd\xc2\x7d\xdf\xb0\x71\x80\x4c\x83\x9b\x62\x14\x84\x97\x98\xeb\x73\x49\x33\x38\xc8\xee\xca\xac\x79\xb4\x91\x7e\xce\x92\x68\xb3\x24\xa6\x59\x8c\xc2\x2c\xe5\x5e\x31\x88\x50\xf0\x5d\xef\x98\x06\x56\xe4\x69\x42\x5c\xf7\x25\x53\xa9\xac\xbb\xcc\xbc\x0f\x81\x95\xb2\xcd\x66\x00\x32\x70\x32\x4f\x45\x6d\x67\xd5\x99\x12\x2d\x1f\x6d\xf9\x99\xcf\x85\xf5\x7a\x59\x49\x73\x33\x08\x52\x68\x83\xe7\x05\x77\x8c\x34\xa3\x85\xf2\x9b\xa2\x08\xb2\x60\x64\x1e\x67\xc6\x2e\x88\xae\x79\xe6\x04\x40\xf9\x25\xf5\x29\xf1\x25\x0b\x4a\x6a\x4f\x0c\x1c\xef\x61\x26\xf3\x13\x45\xa7\xf2\xdc\xe4\xf7\xa5\xea\x2d\xde\x1b\x59\xc9\x32\xc9\xcc\x4d\xf7\xfa\x3c\x1d\x9d\x1c\x50\x54\x1a\x20\x16\x4c\x54\x05\x25\xfb\x38\x03\x19\x2d\x88\x13\xc9\x68\x4d\x62\xca\x80\xe1\xe2\x48\x69\x9b\xd0\x35\x17\xf9\x72\x53\x22\x1b\x30\x83\x68\x57\x36\xd4\x24\xe9\x65\x29\x98\xe7\x3a\x4d\x91\x7f\xe1\x87\x13\x88\xd8\x45\xf9\x02\x30\x3b\x37\xd5\x9c\x48\xce\x2a\x61\x74\x11\x7f\xc1\xa9\x9e\x64\xb8\xc2\x92\x03\x7b\xe8\x72\x1c\x0e\xc7\x56\x56\x3d\xb8\x2e\x60\xd5\x66\xab\x7c\xa1\x0c\xe2\x78\x82\xfd\xe8\x06\x05\xf1\xce\x64\x9e\x8e\xd1\xaf\x63\x9c\xd1\x78\x26\x3c\x17\x2d\xb8\x6b\xcd\xfc\x04\x18\x05\x7b\x95\x73\x6d\xc1\xae\x6f\x11\x0e\x44\x70\x7a\x18\xf1\xbb\x6f\xf3\x02\xe0\x16\x25\x24\xd7\x9a\xe1\xa9\x72\x5d\x71\x39\x96\x04\x63\xcf\x14\xac\xc6\x5a\xa5\x45\x95\xc5\x47\x07\x7c\x49\x9d\x09\x5b\x22\x39\x71\x5b\xb4\x25\xe4\x35\x37\x4e\x83\x91\x75\xa9\x55\xc8\x47\xc9\xd0\xcc\x45\xf7\xbc\x78\x2e\x2b\x6c\x68\x29\x99\x8b\x0a\x73\xe8\x79\x6d\x7b\x44\xbf\x7e\x3c\x8f\x32\x4e\x5f\x16\x66\x42\x80\x46\x34\x91\xf0\x11\xc4\x2d\xde\x50\xf1\x5f\xd5\x9a\x7c\x65\xf2\x22\xd7\x90\x33\x0c\x8e\xe2\x79\x14\xa0\xf9\x8c\x3a\x14\x0e\x27\xf3\x00\x6b\x74\x6f\x56\xd3\x30\xca\x8d\x5c\xe4\x0f\xe5\x63\xdb\x0a\x2c\x82\xf8\x32\x92\xf1\x88\xa3\xc9\x35\x1a\xcd\xc5\xa2\xb4\x44\xd2\x5f\x5d\x45\x13\x9c\x52\xa7\x4a\xbb\xac\x05\x7c\x23\xc1\x53\x3f\x8c\x54\xe1\xaa\x5c\xbf\xa6\xfe\x55\x45\xe9\x17\x5c\x9c\xa2\x17\xb6\xcc\xec\xde\xe2\x2b\x55\x31\xe7\x54\xf3\xe0\x9a\x72\xa0\x64\x8e\x87\xd2\xfa\x4f\x48\x22\x40\x17\x3d\x01\x6d\x38\xc9\x89\x7c\x55\xfb\x18\x46\x15\xb9\xc9\x9f\x50\xdb\x53\xe8\xcc\x66\x3e\xc9\x33\x78\xdb\x88\x84\xd0\x9d\x04\xb0\xd8\x6d\x8b\xf2\x79\xaa\x66\x61\xbf\x5f\xcb\x23\x20\xde\xae\x48\xeb\xc9\x69\x34\x41\x30\xc3\x09\x39\x4d\x8a\x8d\xe1\x45\x7e\x40\x00\x67\x48\x7b\x45\xc6\x5d\xd4\x3d\x48\x70\x15\x5b\xae\x7a\xd7\x1c\x23\x25\x05\x56\xce\xf0\x61\xca\xcd\xa2\x0a\xf7\x95\x59\x98\x9e\x0c\x4b\x1e\x51\x0b\x1a\x0a\x27\x43\x2f\x36\xe4\x99\x5e\x4c\x95\x3c\xb6\x68\x11\xb6\x6e\x85\x93\x8a\xbf\x27\x37\x7d\x57\x63\xb7\xd2\x59\x28\x0b\x9d\xbc\xee\x68\xe5\xe6\xd8\x0d\xff\x22\x93\xb7\x4f\xc6\x86\x98\x63\x62\x9d\xb1\x42\x8b\x37\x95\x87\x89\x93\xa6\x23\x13\x3d\x3f\x83\x8f\xfd\x14\x32\xe4\x3a\x4f\xdc\x0b\x53\x91\xe7\xec\x5a\xf6\x81\xa2\x93\xce\xa0\xd3\xb0\x6b\x38\x45\x71\x24\x1d\x85\x1b\x5d\x54\xe9\x34\x9a\x60\xc9\x5a\xb5\x1c\x8b\x77\x69\x65\x7e\x0c\x16\x8f\xf6\xf3\xf0\xbd\x44\x7d\x2d\xca\x40\x56\x18\x30\xb5\xc8\xd5\x8c\x0e\xc2\x12\x39\xc9\x6f\x1b\xdd\x8e\x34\x84\x68\x88\xe4\x45\x41\xee\x4a\xdb\x90\x88\x39\x50\x42\xb7\x1d\xef\x6e\x36\x3b\x5d\xbb\x93\x58\x51\xaa\xeb\x5b\x47\x58\xe3\xb1\xd5\xca\x87\x59\x3b\xc6\x22\xbc\x87\x5b\x43\x60\xaa\x21\x16\x58\x62\xe7\x9a\x14\xbe\x70\xee\x5f\x65\xc2\xe8\xe5\x3e\x54\x24\x80\xb0\xac\xe2\x51\x4b\x38\x56\x12\x80\x56\x98\x97\x29\x35\xe8\x7b\x33\x1b\x0e\xcb\xc6\xcc\x37\xe4\xa3\xe5\xc6\xfa\xe3\x2c\x00\x96\x21\x0f\x36\x4d\xcb\x5f\x3e\x63\x9f\x33\x82\x30\x05\xae\xc7\x11\x2e\xed\x42\x44\x59\x11\xf3\x1f\x5a\xb8\xbc\x97\x98\xf3\x39\xe0\x55\x79\xce\x90\xb2\xe9\x52\xd4\x92\x8b\x55\x27\xb4\xa0\x4c\x28\xca\x18\x38\xd6\xa3\x43\x23\xc1\x14\x36\x2a\x04\x0b\x79\xb0\xf1\x25\x42\x3a\xc1\xd7\x06\x4a\x3a\xc7\x9a\xe2\xef\xbd\xf9\x4e\xec\xb0\x24\x37\xa9\xc0\xc5\xc9\x20\xd1\x87\x18\x50\xf6\x33\x9a\x2f\x9e\xd5\xcc\x63\x86\xa2\x30\x45\x78\x34\xc2\xc3\x2c\xbc\xc0\x93\x6b\xe4\xa3\x00\xa7\x59\x32\x87\x67\x0f\xe4\xf4\x17\x71\x34\xc4\xa5\xa2\x8c\x96\xa4\x50\x25\xd1\x03\xa0\x94\x07\xe4\x86\x12\xcb\x6b\x2e\xc8\x20\xdc\xd3\xce\x80\x36\x38\x39\x8a\x64\x42\x0e\xb5\x84\xa3\x74\x11\xa1\x17\x54\x5b\x4c\xf5\xbc\xe8\x52\x74\xbf\x63\x19\x5f\xf3\x40\x54\x0c\x06\x2d\x5a\x2b\x8b\x04\xf8\x25\x38\xab\x34\x42\x9c\xc9\xee\x48\xf3\x60\x5d\x3c\xa4\xbc\x6b\xf1\x48\xc9\xef\x3a\x8d\xe6\x6a\xab\x59\x4e\xcc\x4f\x99\xc6\x47\x89\x7f\xef\xb3\x49\x7b\x2e\x02\x27\x85\x51\x86\x93\x91\x64\x2d\x8c\x9c\xab\x82\xf3\x57\xd6\x75\x4e\xb5\x74\xbb\x65\xf1\x11\x7d\x34\xc6\x93\x19\x4e\x88\xf8\x53\x62\x11\xec\x30\xdc\x98\x6f\xb0\x8e\xf2\x37\xb8\xc7\xa3\x32\x93\xee\x54\x41\xbb\x5a\xfb\x44\x7b\xb5\x0b\x5d\xaa\xd8\x84\x2d\xb7\x7e\x4e\xae\xaa\x18\x0f\x02\x68\xd7\xfd\x9e\xb1\x2e\xec\x01\x70\x91\x7a\x5e\x64\x2b\x11\x0e\x8b\x6a\x16\xb1\x3c\xc3\xa5\x4a\xe1\xcb\x1f\x1b\xad\xf4\x44\x58\xf2\xee\xfe\x66\xff\xfe\xe9\x89\x88\xd0\x3c\x28\x05\x69\x81\xd1\xd5\xdf\x82\xa6\x76\xa7\xfe\xb0\x14\x5d\x4d\xfd\xe1\x5d\x68\x4b\x54\xbf\x13\x7d\x7d\xc1\x76\x15\x92\x44\x5f\xfd\x4f\x80\x16\x99\x07\x4a\x64\xb4\x11\x5a\x77\x39\x62\x2b\x3c\xfe\x0a\x4d\xd2\x02\x1f\x06\x82\x0d\x38\x31\xb0\x1f\xb9\x17\x03\xcf\xd4\x02\x21\x7d\xf7\xfd\x6c\x4c\xc3\xfa\x3e\xe1\xef\xd9\x30\xbf\xca\x23\xfd\xde\x9c\x79\x9d\xf6\xf7\x1a\xde\x97\x21\x53\xe1\xe1\x88\xab\xf7\x1e\xef\x97\x43\x5e\x36\xee\xaf\xc0\x50\x8e\xff\xeb\x0a\xfa\x2b\xbe\x43\xf0\x5f\x5b\x00\x5d\xf3\x8a\x82\x47\x8d\xcd\xa7\x4c\x22\x00\x29\x1a\xac\xf4\xbe\x20\x3c\x8d\x52\x5b\x72\x81\x71\x85\x91\xed\xb6\xcb\x99\x68\xb1\xb2\xdc\x48\x4b\x3c\xde\xce\x4c\x8b\x55\xff\xeb\xec\xb4\xca\x22\x70\x5f\x9c\x72\x00\xed\xd9\x4d\xb5\x28\x2e\xff\x00\x5b\x62\xa3\xfc\xd4\x9f\x09\xe1\x70\xea\xcf\x96\x8f\xbd\x60\x71\x11\x37\x41\xb8\xac\x32\xe9\x98\xdf\xd6\x60\x19\xad\x6c\xa0\x96\xdb\x66\xf9\x3a\xc3\x0d\x8b\xd1\x32\xfd\x73\x99\x2e\xd3\x3f\xa7\x01\x33\x07\xdc\xcc\x01\x57\x42\xb4\x82\x1a\x55\x8b\x4d\x34\xff\x52\xc6\x32\x9a\x03\x6e\x69\x80\x9b\x4e\xc0\x4d\x2b\x60\x3b\xe4\x2c\x09\x67\x13\xb8\x7a\xa9\xd0\x61\x79\xfd\x1a\xfc\x26\xbe\xd2\xe7\x26\x79\x5e\x27\x8f\x80\x82\x0d\x8a\x98\x8a\xcf\x74\x2a\x2a\x9f\xd1\x6b\xd2\xfa\x8f\x3f\x22\xc0\xe6\x33\xfa\x09\xd5\x6b\x6b\x1d\x69\x86\xaa\xaf\xd0\xe7\x82\x70\x17\xd2\xdc\x53\x5b\xf0\xa9\x3f\x03\x9b\xd9\xcd\xac\x52\xe1\x08\x43\xa7\xbb\xe8\x27\x54\x69\xa1\x17\xe8\x73\x95\xf5\xb4\x35\xb2\x7a\x3b\x19\xf1\x19\x4c\xc5\x45\x10\xf0\x74\xdf\x26\x35\xb2\x0f\x04\x25\xb4\x81\x24\x74\xba\x86\x33\x09\xc4\xd6\xcb\x8b\xdb\x8d\x83\xc7\xe1\x04\xa3\x8a\xdc\x4f\x16\x2e\xc0\x15\x6b\xc4\x3a\x2c\x72\x33\xcb\xf7\x99\x71\x56\x19\xea\x1d\xec\xe4\x15\x9e\x7c\x7b\x3b\x4b\xc1\x6a\x97\x62\xf4\xdf\xb5\xa9\x25\xdb\x21\xa8\x5d\x8f\xbc\x95\x94\x37\xb7\x14\xb5\x96\xdc\x1c\x44\x3d\x61\x28\x2f\xde\x08\x43\xf9\xc5\x7c\xdf\x28\x91\xe0\x0b\x9c\xa4\x78\x5f\x2a\x98\xbf\xb2\xc5\x35\xfb\x21\xff\xec\xa4\xee\x42\xa0\xb6\x2d\x80\xff\xe9\xfc\x87\xb0\x1f\xb2\x42\x59\x07\x0b\x39\x8d\xda\xf0\x29\x5f\xd8\xcc\x36\xff\x73\xf5\x0c\x6d\xa0\xcf\xe5\x62\x75\x5a\x58\xca\xde\x79\x14\x27\xf8\x9b\x71\x15\x09\xe4\x5e\x14\x80\x9f\x73\x3e\xdd\x21\x79\x73\x30\x5a\xc4\x33\xa4\x76\x28\x8c\x1f\x36\x36\xd0\x8b\xc6\x02\x9e\x24\x53\x98\x5c\xfb\x56\x8c\xd8\x2a\x12\x24\x22\xed\x65\x8a\xdf\xc7\xf1\x2c\x5f\x12\x9e\x8e\x83\x27\xcd\xa8\x22\x72\x68\x37\x9e\xfe\xac\x87\x9e\x6f\xbe\xe9\x6f\x6d\xef\xbc\xdd\xdd\xfb\xaf\x77\xef\xf7\x3f\x1c\x1c\xfe\xef\xa3\xe3\x93\x8f\xbf\xfc\xfa\xdb\xbf\xff\x8f\x3f\x18\x06\x78\x74\x3e\x0e\x3f\x7f\x99\x4c\xa3\x78\xf6\xdf\x49\x9a\xcd\x2f\x2e\xaf\xae\xff\xa8\x37\x9a\xad\x76\xa7\xbb\xb6\xfe\x72\x65\x75\x83\x45\xb8\x15\x47\x3b\xb1\x68\x97\x46\x35\x1f\x62\x87\x57\x4a\x6e\xb9\xa1\x58\x98\xda\x44\x21\xad\x1d\x9b\x9b\x0a\x99\xe9\xd0\xb1\xdf\x30\xc7\xae\x94\x08\x49\xd2\xf2\xc8\xa9\x49\x76\x60\x41\x2f\x50\xa3\x7a\x06\xde\x2b\xb9\xc0\xd4\x34\x89\x8b\x03\x6d\x96\x01\x5a\x3d\xe3\x1b\xbc\x2c\x86\x59\xa0\x52\x81\x28\x52\x22\xf7\x7c\x25\xc2\x0c\xa0\xff\x95\xb6\x28\xfb\xd6\x44\xc5\xc1\x7b\x10\x1b\xe2\x95\x15\xe5\x83\x20\x5b\xf1\x83\x51\xa4\x11\x5b\xd2\x1a\x16\xe1\x26\xcf\xdd\xa3\x1f\xf2\xa5\x3d\xe2\x95\x33\xb3\x4f\xe7\xf1\xe8\xff\x78\xf4\x17\x47\xff\x8f\x27\x3b\x2f\x1a\x5d\xf4\x66\xbb\xb4\x83\x56\xa3\xfb\x66\x5b\xf6\xd1\x6a\x74\xd5\x27\xf8\x7a\x7b\xa7\x2d\x8a\xcc\x5f\xeb\xb8\x55\x12\x87\x7b\x74\xde\x6a\x74\x9d\xde\x5b\x8d\xee\x3f\x40\x23\x50\xfe\xb0\x0e\x83\x71\x97\xb3\xba\xdd\xdf\x1f\x2c\xa3\xe2\x00\x1f\xc6\x61\x94\xb9\x9c\x8c\x1b\x5d\x87\x93\xb1\xf5\x30\x9d\x63\xea\xf6\x32\x16\x4d\x96\x75\x35\x96\x80\xde\xe1\x04\xa5\x13\xf1\x9d\x9c\xd5\x80\x36\x97\x5d\x1b\xdf\xf5\x31\x8a\xae\x2a\xe1\xb2\xc6\x17\xdf\x52\x3e\x6b\x50\x69\x39\x5f\x63\x5e\x4b\xc8\xb7\xfc\xc5\x43\x7b\x1a\xab\x0d\x97\x73\x34\x6e\x80\xec\x23\x30\x54\xdd\x8c\x89\x08\x94\x2f\x96\x26\x59\x2c\x5a\x10\x36\x37\x85\xbb\xa4\x1c\x6d\x74\x7e\x2a\x1f\x0a\x83\x91\xe5\xfb\x12\x7b\x98\xb4\x4f\xbd\xbf\xf3\x3e\xf5\xfe\x3b\xd8\xa7\xca\xe0\x70\xdf\xfb\x94\x75\x39\xbd\xdf\x7e\xdc\xa6\xc4\xdf\xbd\x6d\x53\xe9\xa5\x3f\xdb\x8e\x82\xd0\x8f\x2a\xcb\xee\x58\xb6\x23\xf9\xf7\xbf\x65\xbd\x7f\x98\x2d\xab\xcc\x32\xf9\xfe\xb7\xac\xf7\xdb\xda\xa6\xf5\xb8\x63\x19\x3b\x96\xb4\x62\x96\xda\xbc\xbe\xe9\xee\x25\xe6\x45\xc2\x96\x00\x52\xfa\xc8\xa3\xe1\xc3\x17\x76\x77\x42\x17\x77\xbd\x4e\xfe\x1f\x2e\x56\xe8\x47\xd2\x7d\xf6\x95\x7e\xcb\x97\xff\x22\x75\x01\x10\x96\x5b\x5b\xd0\xbd\x93\xb6\x80\xe5\xa8\xfd\x96\x4a\x03\x0f\x49\xaf\xd2\xb1\xdf\xd0\x5e\x8d\xa7\xfe\xf0\x01\x55\x0b\x1e\xe2\xcd\xc2\x2f\x68\xed\x9f\xa0\x6e\x30\xf2\xc5\xde\x42\x15\xa1\x18\xb1\x48\x5f\xf6\xb7\x3a\x50\x13\x4c\x6e\xf6\xb7\x3a\x36\x19\x0f\x4c\x9c\xbf\xe0\x6b\x9a\x05\x9b\xda\xc1\x8a\xbe\x82\xf3\xaf\x1f\x65\x3c\x89\x77\x9c\x4c\xa9\x8d\xf6\xf6\x2f\x87\x9f\x60\xd3\x3d\x89\xdf\xe1\x5c\x18\x44\x97\x97\x97\xb5\x78\x86\xa3\x34\x9d\xd4\xe2\xe4\x7c\x35\x88\x87\xe9\x2a\x24\xe1\x8e\x57\xb5\x3a\xe3\x6c\x3a\xb1\x28\x42\xb6\x2f\x66\xef\xb6\x76\x72\xb4\xc5\x73\xc9\x60\x08\x8b\x7d\x40\xb4\x3d\xce\xf0\x7e\x61\x29\xcf\x61\x8f\x22\x03\x93\x92\x87\x30\xe2\x6e\x2f\x52\xb8\xe7\xdc\xd5\xa5\x8d\x2a\x8d\xe6\xba\xe2\xe9\x62\xc0\x77\x18\xa9\xc9\x61\x31\xf4\x04\x29\xfb\x5b\x9d\x45\xd8\x86\x19\xb3\x45\xd6\x83\x54\x4b\x1f\xb2\x18\xcd\xa8\xd5\xa9\xec\x9d\xe3\xd8\xe1\x0c\xbf\x18\x6d\x77\x60\xc3\xd3\x43\x8d\xe6\x3a\x98\x90\x2a\x5f\x69\xe7\x00\x73\xed\x4b\x8e\x8f\xd2\xf6\xcd\xad\xdd\x6e\x1c\x44\xfb\xd0\x7e\x38\x58\x6a\xf4\x1e\xcc\xac\xbf\x04\x23\xc3\xfb\x86\xd2\xfc\x82\x14\x4d\x8b\x2b\xfe\x99\xcf\xd5\xba\x96\xcf\xef\xb6\x60\x3c\x75\x1a\xeb\xf5\xba\x0e\x78\x49\xef\xa0\x85\x7e\x3f\xe5\xe4\xdd\x2d\x48\xe1\x4f\x68\x84\x50\x05\x24\xc2\xf6\x21\x03\x2b\x59\xb4\xb7\xb1\xd2\xe7\x75\x69\x2c\x00\x1b\xa0\x82\xca\xa9\x3f\xc9\xd0\x26\xfc\xb3\xbc\x58\x0c\xd4\x45\xc9\xfb\x3e\xc8\x0b\x93\xcd\xe3\x4b\x30\xaa\x51\xb7\x08\x5c\xe1\x9d\xf1\x00\xbf\x82\xbc\x35\x50\x5c\xc9\xef\xa8\xd6\x5c\x4a\xe0\x55\xa7\xd8\x22\xde\x92\x95\xce\xb8\x87\x59\x5b\x78\xa9\x11\xf2\x60\x26\xca\xf9\xea\xb0\xc2\x72\xb9\x85\x41\x68\x01\x3a\xc4\xef\x60\x6c\x6c\x29\xd1\x96\x39\x23\xe7\xc0\x84\x4f\xb0\x78\xe3\x3c\x2e\xf3\x3d\x86\xf6\x88\x3d\x59\xca\x49\x4c\x9c\x16\xcd\x5f\x58\xb0\x7c\xcb\x36\x26\x02\x5e\xfd\xc8\x8c\x59\x34\x5c\xb9\x41\xcb\x6b\x8e\x8f\xf5\x28\x40\xc4\x38\xf0\x1c\x70\x5e\x30\xab\x2e\x4b\xb4\xec\xe2\x6b\x65\x24\x07\x63\xc8\x9d\x40\x18\x14\x4e\x6c\x92\x51\xb0\x41\xaf\x6a\xf3\xc2\x9f\xce\x2c\x41\x68\x42\x0c\x9c\xf9\x59\x39\x28\x35\xe8\x41\x49\x1a\xe8\xc2\xb4\x3f\x1a\xf6\x02\x59\xe7\x28\xd8\x30\xb6\x0c\x95\xf9\x4e\x22\x2b\x16\x33\xc6\xda\x86\x36\xca\x52\x2d\x49\x47\xc3\xe9\xcf\x12\xed\x42\x04\x98\xe3\xf5\xca\xda\x5c\x97\xe2\xc1\xb2\xdf\xf1\xad\x78\xef\x92\x7c\xf7\x1e\xbd\x6f\x2d\x7e\x65\x52\x6f\xca\x73\x73\xa9\x92\xa2\xdd\x90\xde\xab\xdc\x3d\xff\x80\x14\xae\x2e\x36\x6d\xba\x5f\xbb\x38\xfb\x72\xd5\x3c\xe4\x10\x1b\xee\x02\xa6\x50\x6c\x10\x2a\xe4\x5c\xd6\x77\xed\x39\xa6\x0b\x0b\x1b\x76\x55\x62\x01\xc7\x95\xe2\xfd\xee\xe6\x55\xc1\xf1\x9d\x42\xb3\x9f\xdd\x3d\x7e\xf8\xec\x75\xd6\x3d\x7e\x24\xed\xad\xad\x91\x33\xfd\xda\xdf\xfa\x4c\x3f\x0c\x67\x63\x9c\xbc\x78\x60\x13\x01\x38\xbd\xcb\x4d\xfd\x35\x87\x78\x33\x73\xe7\xbd\x9c\xe6\xfb\xd0\xb1\x43\xc2\x71\x52\x71\x68\x97\x5f\xba\x4d\x08\xc4\x7b\x2d\x13\x86\x52\x83\x9c\xe1\xfc\x0c\x2a\xd1\x9f\x9c\x11\xb3\x8a\x3b\xf0\x32\x63\x51\x15\x68\x91\x25\xd2\x69\x90\xd3\x0d\x9d\x9b\x0c\x5f\x65\xe4\x14\xe9\xb3\x67\x34\xa3\x7d\x62\xbe\x59\x3c\xd5\x86\x1f\xe0\x61\x38\xf5\x27\x93\x6b\x96\x06\x34\x28\x7d\x73\x23\x8f\xca\x0d\x6b\x85\x0d\xdc\x89\x40\x43\x6d\x76\xf9\x64\x1c\xb7\xc1\xef\x41\xd3\x73\xe4\x53\x22\xdd\xea\xc8\x9d\x5f\xee\x62\x47\xa9\xe9\x70\xd4\x92\xcb\xd4\xf2\xd9\xcd\x13\x48\xec\xe2\xab\x5b\x66\x82\xb0\x0c\xaf\x44\x3e\xf2\x7d\xc3\x92\xd3\xa9\xdd\x3c\x84\xd1\x6c\x9e\xdd\x65\x4e\x39\x79\xa8\x44\x77\x0b\x3a\xbb\x2f\xe2\x18\x6a\x8c\xc2\x42\x1f\xb7\x4e\x2a\x01\xa3\x65\x0f\x61\x93\x4f\xce\x06\xca\xdb\xa0\x15\x5e\x59\xa9\xa7\xaf\x50\x0f\xd7\x08\xe4\x80\x7a\x32\xd0\x1b\xbb\x6e\xde\xbd\xd3\xe6\xdd\xd5\x76\x5b\x69\x83\xe8\x75\x9a\x9e\xa6\x3c\x5f\x7f\x34\xb5\xfb\xa7\xeb\xbe\x5d\xbb\xa3\x11\xc9\xbc\x48\x13\x6e\x1e\x52\xc0\x01\x58\x68\x5c\xad\x89\xa8\x48\x89\x0d\xd9\x51\xf5\x7e\x12\xd2\x83\xcb\xeb\x42\x8e\x57\x5a\x49\x5c\x52\x15\x45\x64\x75\x70\x5e\xc6\xc3\x04\x67\xf7\xa4\x54\x22\xf2\xef\xae\x3d\x70\x10\xf4\x92\xb1\x09\x9b\x27\x32\x75\xf4\x2d\xab\x31\x94\x9d\x83\x1d\x01\x82\xad\x3a\x23\xa1\x2f\xa2\x3e\x0a\xe2\x51\xf7\x70\x2f\xf0\x76\xbb\xcf\xf8\xb2\x70\x60\x5a\x10\x5e\x96\x1e\xaa\xa4\xe8\xb2\xfa\x38\xd9\x0d\xf1\x0b\x14\x53\xb4\xa3\x6f\xa4\xb8\x98\xac\xeb\x45\x91\x31\xb5\x4a\x5c\x5f\xa0\xc3\xb2\x47\xc9\xdc\x9c\x4c\xe2\x4b\xe4\x27\x83\x30\x4b\xfc\xe4\x1a\x31\xf5\xd2\x17\x7c\x6d\x89\x3b\xf8\x45\xd6\x48\xfc\x6c\x6d\xb8\x60\xa0\x74\x75\x4b\xb9\xd1\x5a\xe0\x0c\x49\x50\x2a\x70\x83\x84\xf8\x6f\xa0\xdb\x88\x13\x14\x46\x11\x4e\x20\xfa\x6c\x3c\xcf\x40\x80\xd0\xa3\xf0\x41\xcc\x44\xaa\x63\xa4\x64\xc8\x1e\x68\x2b\x46\x40\x3a\xae\xf1\x93\x6b\x84\x96\x1a\xcb\x90\x40\x2c\x69\x25\xe3\x22\x7d\x64\x28\x15\x0c\xa5\x82\x46\x63\xbf\x1d\x1c\xc1\x7c\xd2\x6b\xc0\x99\x1f\xa0\x61\x1c\xa5\x99\x1f\xe9\xcd\x5b\x93\x48\xa9\x73\xec\x56\xac\x09\xbc\x4f\xc3\x33\xf4\xfb\x06\xaa\x5f\x75\x86\xf4\x7f\x36\x77\x18\xa3\x70\xab\x4b\xff\x57\xac\x19\x8b\x35\x9d\x58\xa8\x3d\xdb\x28\xf2\x2f\x88\x43\x06\x3b\xd0\x43\x44\x21\x13\x4c\xfc\x5e\x22\x91\x15\xe4\x2b\xb3\x31\x63\xcb\x40\x42\xa7\x6d\x7c\xdc\xa1\x27\x55\xf5\xc5\xf9\x82\xb9\x5d\x04\x32\x18\xe6\xef\x26\xfe\xd8\xfe\x66\x9f\x45\x1f\x03\xbc\x42\x58\x62\x85\x91\x50\x96\x9c\xf2\x32\x81\xc8\x8c\xd2\xf7\x1f\x8c\x4c\x26\x09\xde\xca\xc2\xe0\x63\x0f\x15\x3d\x0c\x86\xfa\x7f\x7a\xf4\xb0\x05\x62\xea\x32\x22\x22\xe1\xa1\x39\x0d\x2d\x8c\x20\xe6\xae\xb1\x30\x8a\x98\xbb\xea\x03\x45\x12\xbb\x3b\xb7\xeb\x53\xf5\x34\x8c\xb7\x65\x3f\x26\xd2\xc5\xae\x3d\x38\x5a\x61\xc0\xb1\x42\x8e\x29\x8f\x95\x06\x34\x97\x50\xb8\xa4\xc1\x2f\x99\x04\x2a\x55\x67\xc8\xb1\xa9\x3f\xb4\x5f\x12\x89\x83\xbf\xc3\x08\xee\xe5\xdf\x5a\x61\x7e\xd5\x6d\xbf\xb0\xbc\x9e\x84\x83\x17\x04\x95\x00\x6c\x5b\x53\xed\x2b\x8e\x86\x2f\xc0\xa6\xd1\xf2\x9e\xba\x59\x6a\x1f\xa6\x41\x67\xb1\xf1\x5d\x3a\xf6\x9b\x1d\x1d\x24\x79\xd9\xd4\xc1\xa5\x63\xbf\xd3\x68\x9a\x2f\x5b\xeb\x96\x92\x2d\xed\x55\x12\xce\xf0\x34\x68\x74\xeb\x56\xdb\x3f\xe5\xd5\x6c\xf0\x25\x18\xe9\xed\xe0\x8b\xd9\x97\x60\x54\x74\xef\xa0\x76\x3d\x0e\xf0\x8b\xe1\x68\x60\x7d\x9d\x25\x8e\xd7\x2f\xce\x27\x7e\x30\xf5\x23\xdb\xe7\xd8\x0e\x0c\x0f\xf5\xd7\x33\x3f\x78\xe1\x47\x69\x78\xf5\xb2\xa9\x0f\x02\xf9\x14\xa6\x71\xa3\xde\x68\xea\x23\xce\x3e\xbd\x5c\x7b\xb9\xa6\xcf\x10\xf9\xf4\x07\x4e\x62\xe6\x7a\x6d\xf9\x1a\x39\xbe\x51\x1d\xd9\x8b\x31\xbe\xd2\x3e\xf8\x58\x27\x2e\x1a\x77\x23\x30\xde\x27\x43\x7d\x72\x13\x7f\x30\x08\x33\xeb\xcb\x17\x13\x7c\xee\x0f\xaf\x1f\xfa\x0e\x48\xac\x1e\x78\xd2\x17\x0d\xbc\xcc\xd7\x8a\x78\x64\x4b\x04\x9e\xc9\xca\xd0\xcc\x42\xd9\x3a\x10\xbf\x9b\x6d\xf1\x9b\x50\x3d\xff\x4d\x88\x5d\xfc\xa6\xbf\x72\xd2\xce\xed\x4b\xe1\x17\x23\x64\x8a\x01\xa5\x5f\xe3\x0e\x8b\xa2\xc3\xa9\x55\x7a\xca\x12\xf5\x49\xd0\x66\xfe\x36\x56\x6a\x10\x4a\xa4\xcd\xca\x04\x28\xde\x08\xba\x93\xdf\x50\x72\x13\x6f\x64\x2a\x13\x2f\x23\xf5\x95\x44\x53\xf0\x4c\x48\x09\x7e\xe4\x14\x44\x47\x65\xc8\x06\x8a\xd1\x8b\xf4\x9b\x93\xc9\xb2\x8a\x48\x45\x01\x29\xf3\xda\xe5\x15\x93\xee\x50\x6c\xac\x4b\xbd\x4e\xc3\x2b\xd6\x26\x7b\x2a\x5d\xf5\x3a\x6d\x4f\x21\xbc\x5e\xa7\xe3\xe5\x13\xdf\xeb\x74\x3d\x75\xf4\x7a\x9d\x35\xfd\x46\x58\x27\xe5\x5e\xb7\xee\x31\x6a\xed\x75\x01\x1f\x41\x29\xbd\x6e\xd3\x93\x69\xa5\xd7\x6d\x7b\x36\x6a\xe9\x75\x5b\x9e\x4c\x21\xbd\x6e\xc7\x93\xe9\xa7\xd7\x05\xbc\x14\x9a\xe9\x75\xd7\x3c\x9d\x6a\x7a\xdd\x75\x4f\xa7\x9b\x5e\xf7\xa5\x67\x10\x49\x6f\xad\xee\x59\xc8\xa9\xb7\x06\xf8\xb3\x25\xd1\x5b\x03\xec\x19\x69\xf4\xd6\xda\x9e\x41\x1c\xbd\x35\x40\x9c\x90\x51\x6f\x0d\x70\xce\xd7\x59\x6f\xad\x2b\x5f\xa0\x7b\xf9\x92\xed\xad\xf1\xab\x75\xb2\x98\x7b\x6b\x2f\x3d\xbe\x54\x7b\xeb\x75\x2f\x5f\xc2\xbd\xf5\x86\x97\x2f\xee\xde\x3a\xa0\x93\x53\x70\x6f\x1d\x1a\x17\x8c\xa6\xb7\xde\xbe\x39\xf3\xba\xf5\xc7\xcb\x83\xbf\xfe\xf2\xa0\x3f\xc6\xc3\x2f\xa4\x53\xb0\x52\xa8\x1b\x10\x4d\x73\x96\xce\x67\x64\x60\x30\x8b\x4f\x2d\xf5\x1b\xe4\x78\x1a\xd2\x1c\xfd\xb0\x81\x9e\x73\xc8\xcf\x2d\x16\x21\xc2\x49\xe3\x1e\xaf\x2b\x0a\xcd\xf1\x45\x3b\x47\x78\x84\x13\x0c\x07\xbd\x24\x3c\x87\x33\x59\x18\x85\x59\x0e\x26\x9d\xcf\x70\x02\xaa\xeb\x0d\x2d\x3d\x87\x04\x65\x73\x7e\x3e\xc5\x51\xa6\x15\x40\x59\x8c\xc6\x7e\x14\x4c\xb0\x32\x6e\x32\xec\x81\x15\xb2\x62\x53\x03\x55\x4d\x77\x40\x49\xf7\x4d\x63\xc9\x53\x13\xa8\x30\xca\xd6\x25\x0d\xfd\x48\xae\x2f\x14\x13\xea\xec\x98\xc7\xfc\xbc\x06\x55\xc2\x7f\x24\x50\xe1\x85\x8c\x8d\x72\x88\xb0\x22\x16\xd3\xf4\x5f\x00\xe9\x22\xc4\x97\x2e\x14\x9d\xcd\x4b\x08\xef\x71\x14\xd0\xd7\xaf\x6a\x79\x4e\x70\x80\x25\xe8\x8c\x79\xf5\x1f\xc8\x9a\x13\xb6\x23\xb0\xe8\xec\xc0\x8d\xaa\x55\xa3\x15\x27\x56\x8d\xae\x1d\x2d\x77\x4b\xcb\xd5\xd8\x8b\xb2\x56\x73\xd9\x26\x96\xab\xb1\x33\x89\xfd\xdb\x54\xe9\xb6\xe1\x7d\x5e\xfe\x96\xa4\x54\xa3\x14\xec\x21\xf9\xd5\x75\x86\x0f\x20\x39\x90\xf1\xda\x96\x77\x59\xa1\xbf\x5d\xba\xe8\xf2\xb6\xca\xac\x88\xbc\xf4\x72\x2a\x84\x1c\xda\x1b\x81\x1b\xda\xb0\xe3\x6c\xd1\x2c\x6c\x5f\xb1\xec\xab\xd7\x99\xcd\xf8\x79\x29\x77\x41\x1b\x2a\xcb\xe4\xd3\xce\xeb\x9f\x86\x67\xb7\x4a\x9e\x9d\x9b\x73\x87\x7f\x60\xaa\xaa\xcd\x1d\x47\xd5\xa2\x82\xb1\xe6\xa9\x2d\x3c\xc4\xdc\x08\x6d\x1d\x51\xe6\xdb\x9a\xf5\x8c\x8c\x26\x79\x4d\xe0\xa1\x88\x48\x7d\x32\x33\x37\xdb\xf5\x67\xb3\xc9\x35\x6b\xd8\x4f\xce\xe7\x84\x85\xa7\x45\xfe\x8a\x8c\x5f\xd7\x66\x49\x9c\xc5\x04\x47\x99\x73\x17\x19\x4e\xe8\xbb\x8f\x5d\xc1\xd2\x6d\x3c\xca\x3a\x7f\x8d\xac\x03\x01\xa3\xff\x82\xb8\x44\xd6\x9c\x4a\x25\x4c\x24\x60\x8b\xa5\xf7\x78\x28\xcb\x75\xeb\xa4\xca\x09\x63\x16\x52\x49\xaa\xba\xd4\x6e\xfe\x6c\x92\x9e\x8b\xaf\x74\xdb\x76\x2e\x72\x42\xd8\xc4\x06\x1d\xbe\x9a\x3f\x48\xe9\x8f\x34\x8c\x58\x30\x56\xc2\x32\xea\x57\x8d\x3a\xfb\xab\xa2\xaf\x6a\x1a\x5f\xb6\xbc\x2a\x55\xab\x85\xfa\xfe\x56\x47\xb3\xa6\xb0\x19\x80\xe8\x5e\x93\x68\x83\x8d\xaa\xc5\x00\x84\xa7\xbd\x29\xbc\x1d\xcb\x35\xc1\xf6\x5c\xc5\xa7\x26\x27\xad\x5f\x75\xd7\xda\x9d\x66\xab\xde\xf0\x50\xfd\x0a\x8f\x86\x81\x3f\x58\x7f\x69\xc9\xab\x58\xbf\x7a\xb9\x3e\xf0\x83\xe1\x08\x7b\x30\x30\xad\x66\xa7\xbd\xd6\x55\xcb\x9d\x39\x6f\xc4\xb4\x34\x7a\x72\x2f\xf6\x45\x26\x3d\xdb\xde\x75\xe9\xcf\x10\x06\xf7\xea\xc5\x7b\x48\xa3\xeb\xde\x31\xdc\xd7\xd7\x7c\x36\x28\x12\x9f\x08\x3c\x9e\x5e\x10\x85\x8e\x08\xbc\xfb\x9f\xa4\xd2\xfb\xa7\xfc\xe1\xcc\xe6\x12\x22\x7d\x26\x04\x67\x16\x20\x7f\x95\x4a\x45\x82\x49\x3d\xc5\xd1\x57\x24\xbf\x84\xbd\xae\x5d\xd5\x7c\xc4\xd1\xd7\x92\x00\x9b\xed\xaa\x05\x20\x84\x32\x56\x5c\xd2\x4d\x70\x77\x33\x0e\xd9\x55\x6e\x28\xec\xd7\xfd\xca\x90\xd6\x91\x34\xa6\x68\x05\xd5\x75\xf1\x41\x29\xdd\xd0\x4a\x37\x0a\x4b\x37\xb5\xd2\xcd\xc2\xd2\x2d\xad\x74\xab\xb0\x74\x5b\x2b\xdd\x2e\x2c\xdd\xd1\x4a\x77\x0a\x4b\x77\xb5\xd2\xdd\xc2\xd2\x6b\x5a\xe9\xb5\xc2\xd2\xeb\x5a\xe9\xf5\xc2\xd2\x2f\xb5\xd2\x2f\x8b\x67\xa7\xae\xcd\xce\x82\xc9\x6c\x68\xc5\x8b\x67\xb3\xd1\xd4\x8a\x17\x4f\x67\xa3\xa5\x15\x2f\x9e\xcf\x46\x5b\x2b\x5e\x3c\xa1\x8d\x8e\x56\xbc\x63\x70\x83\xd5\x55\xc2\x90\xbf\x84\xd1\x39\xa9\x1a\xfa\x93\x81\x4d\x6c\xf6\xc9\x36\x70\x6a\x1d\xa8\x01\x7c\xb2\x0e\xca\x10\x3e\x59\x07\x20\x80\x4f\x2d\x1b\x3a\xfd\xfc\x0e\x5a\xfd\x46\x90\xd8\xd9\xa9\xf8\x1e\x1a\x78\x68\xe8\xa1\xc0\x93\x16\xa8\x87\xd0\x9a\x47\xb6\xd0\xfa\x99\xce\x1b\x02\x5a\x2f\xf0\x90\xa8\x9a\x8f\x90\x87\x50\xa3\xe9\xa1\x93\xd3\x86\x51\x6f\x48\xeb\xd1\x96\x68\xd5\x7c\xd1\x92\x7a\x6b\xa4\x5e\xd3\xa8\x37\xa0\xf5\x04\x92\xbe\x54\xaf\xe5\x21\xd4\x84\xf6\x5a\x46\xbd\xa2\xfe\xb5\x45\xff\xda\x4b\xf5\xaf\x23\xfa\xd7\x59\xaa\x7f\x5d\xd1\xbf\xee\x52\xfd\x5b\x13\xfd\x5b\x5b\xaa\x7f\xeb\xa2\x7f\xeb\x4b\xf5\xef\xa5\xe8\xdf\xcb\xa5\xfa\xd7\xa8\x7b\xac\x7f\x0d\x93\x60\x8a\x3a\xd8\x68\x78\xac\x83\x0d\x93\x62\x8a\x7a\x48\xb0\xa4\x3d\x6c\x98\x24\x53\x48\xa2\x2d\x8f\x93\xa8\x49\x33\x85\x7d\x6c\x8b\x3e\x9a\x44\x53\xd8\xc7\x8e\xe8\x23\x50\x8d\xd9\xc9\xb7\x6f\x1d\x9d\xf4\x10\xea\xd0\x4e\x9a\x74\x13\xd0\x8a\xd6\x4e\x12\x7a\x7b\x49\x2b\x9a\x84\x33\xa4\x15\xed\x9d\x6c\x78\x88\x74\xf4\xe4\xb4\x61\x52\xce\x80\x56\xb4\x76\x92\x70\x8c\x66\x1d\x2a\x9a\xa4\x53\xd4\xc7\x8e\xe8\x63\xd3\xce\x6b\x5c\x7d\x24\x34\x47\xfb\xd8\xb4\x33\x1b\x67\x1f\x3b\xbc\x8f\x4d\x3b\xb7\x71\xf5\xb1\x2d\xfa\xd8\xb4\xb3\x1b\x57\x1f\x5f\xe6\x7d\xb4\xf3\x1b\x67\x1f\xdb\xa2\x8f\x76\x86\xe3\xea\x23\x61\x8c\xac\x8f\x76\x8e\xe3\xea\xe3\x7a\xde\x47\x3b\xcb\x71\xd2\x6a\xcb\xe3\x7d\xb4\xf3\x1c\x57\x1f\x9b\x82\x56\x9b\x76\xa6\xe3\xea\xe3\x9a\xe8\x63\xcb\xce\x74\x5c\x7d\x24\xcb\x9f\xf6\xb1\xd5\xb0\x2f\xc8\xdd\x5d\x37\xb1\xb6\x01\xd7\x96\x9d\xeb\xec\xee\xda\x3b\x49\x86\x95\xac\xad\x93\xd3\x96\x9d\xeb\xec\xee\x16\x2c\xc8\x2e\x54\xb4\x73\x9d\xdd\x5d\x47\x27\xdb\x1e\x6a\xb6\xa0\xa2\x49\x3a\x45\x7d\x6c\xe4\x7d\xb4\x33\x1d\x57\x1f\xdb\x79\x1f\xed\x4c\xc7\xd5\x47\x98\x48\xda\x47\x3b\xd3\x71\xf6\xb1\x2e\xfa\x68\x67\x3a\xce\x3e\xb6\x3c\xd6\xc7\xb6\x9d\xe9\xb8\xfa\x58\x17\x7d\x6c\xdb\x99\x8e\xab\x8f\x2d\xd1\xc7\xb6\x9d\xe9\xb8\xfa\x48\x58\x39\xed\x63\xdb\xce\x74\x5c\x7d\x7c\x29\xe6\xb1\x6d\x67\x3a\xae\x3e\x92\xe5\xc1\xfa\x68\x67\x3a\x4e\x5a\xed\x70\x5a\x6d\xdb\x99\x8e\xab\x8f\xcd\xbc\x8f\x6b\xf6\x05\xb9\xb7\xe7\x16\x54\xbb\xb4\x93\x76\xae\xb3\xb7\x67\xef\x24\xd0\x1c\xf0\x80\xb6\x9d\xeb\xec\xed\x15\x88\x01\x1d\x10\x01\xed\x5c\x67\x6f\xcf\xde\x49\xc2\x3b\x9a\x30\xac\x1d\xbb\xa8\xe3\xea\x23\x99\x0f\xda\xc7\x8e\x9d\xe9\xb8\xfa\xd8\x12\x7d\xec\xd8\x99\x8e\xb3\x8f\x75\xd1\x47\x3b\xd3\x71\xf5\xb1\x91\xf7\xd1\xce\x74\x5c\x7d\x5c\x17\xf3\xd8\xb1\x33\x1d\x57\x1f\x81\xe6\x68\x1f\xed\x4c\xc7\xd5\x47\x10\xc9\x69\x1f\xed\x4c\xc7\xd9\xc7\x96\xc7\xfb\x68\x67\x3a\xae\x3e\xb6\x45\x1f\xbb\x76\xa6\xe3\xec\x63\x83\xf7\xb1\x6b\x67\x3a\xae\x3e\x36\x45\x1f\xbb\x76\xa6\xe3\xea\xe3\x4b\x31\x8f\xdd\x96\xb9\x20\xe1\x1a\x25\xc3\xc9\x14\x07\xa1\x9f\x31\xa7\x32\x70\x57\x50\xcb\x91\x23\x2e\xda\x40\x15\xf8\x77\x05\xf9\xba\x86\x95\x96\x69\xb0\x32\x0d\x52\x66\x60\x2f\xd3\x64\x65\x9a\xa4\xcc\xd0\x5e\xa6\xc5\xca\xb4\x48\x99\xc0\xd0\xe6\x6a\xaa\xca\x1d\x8b\xa5\xee\x92\x01\x6d\x21\x53\xba\xc8\xa6\xeb\x67\xbe\xed\x60\xee\x67\xbe\x08\xe5\xe3\x67\xbe\x5b\x39\x16\xbd\x09\xb3\xf4\x24\xce\xfc\x89\x80\x19\x6d\xf9\x99\x4f\x3d\x48\x7e\x42\xeb\x16\xe8\x50\xe7\x3d\x1e\x65\x1c\xba\xf0\x38\x81\xf2\x46\x67\x9c\x29\xaf\x04\x9a\xa7\x39\xc8\x9f\x7f\xfe\x19\x75\xe0\xe2\xad\x7e\xb5\x5e\xcf\xef\xdb\xf2\x12\xff\x42\xad\xa6\x41\x1c\x6a\x5f\x76\xd1\x06\x02\xb5\xfb\x68\x12\xc7\x49\x45\xea\xe4\xaa\xa2\x7b\x77\x75\x0e\xca\xbe\x47\x1b\xd2\x93\xbe\x70\x04\xea\x95\x4a\x25\xc7\x6d\x05\x75\xdb\x34\x5f\xda\x4b\x08\x26\xda\xae\x52\x85\x8d\x5d\x3f\xcb\xab\x32\x9c\x73\xe5\xac\xfc\xb6\xbc\x76\xd6\x04\xc7\x54\xb3\x3a\xb8\x45\xba\x59\x83\x4b\x2c\xd3\xd9\x76\x99\xce\xbe\xb7\x76\xf6\xfd\x6d\x3b\xfb\xde\xda\xd9\xf7\x65\x3b\x6b\xf6\x56\x76\xa2\xaa\x88\xee\xf3\x60\x53\x90\x53\xcf\xee\x3f\x08\x06\xef\xd4\x8d\x01\x7c\x14\x6d\x9e\x54\x85\x79\xe5\x17\x78\x43\x2a\x3a\x6f\x0b\xf9\xee\x32\xc3\x78\xa7\xf7\xdb\x52\xf7\x1e\x8e\x2b\x2e\x54\x74\xfd\x2f\x30\x81\x2b\x8c\xdd\x53\xfb\xdd\xc5\x2e\xbb\x25\xab\x54\x76\x95\x6b\x89\xdd\xa5\xef\x23\x28\x2d\xec\x2a\x77\x11\xbb\xce\x4b\x88\xc5\x37\x0e\x47\x2c\x37\x30\xcc\x21\x8b\xc0\x13\xc0\x98\xaa\x45\x4b\x24\x2b\x07\x37\x84\x42\x56\x0f\x0a\x56\x70\xca\x14\x37\x74\xf0\x98\x5f\xff\x1b\x1b\x2f\x7c\xfe\x64\xd0\x82\xcb\xbb\x92\x47\xd0\x20\x5f\xed\x1e\x0e\xf4\x97\x40\x52\x53\x7d\x5d\x79\x28\xf5\x90\x7a\x85\x06\x7c\x12\x6d\x20\x1f\xad\xa0\x4a\x65\x80\x7e\xa4\x9b\x63\xe5\xff\x92\x9f\x41\x95\xb0\x81\x2b\xb4\x82\x32\xa9\x3d\x11\xb0\x38\x22\xd3\x94\xd2\x95\x4a\xe3\x94\xb7\x9a\xe8\x05\x4a\xab\x50\x6d\xa0\x19\xbd\x09\xac\xb4\xf3\x7f\x39\xac\x60\x3b\xae\x0c\xd1\x8f\xe8\xff\x3e\x0c\x56\xda\x21\x68\x21\x56\x03\xf4\x3b\x1a\xa2\xdf\x09\x62\xf7\x8f\x8c\x26\x00\x2e\x44\x86\x20\x52\x19\xa0\xaf\xf7\x3c\x38\xf2\x6d\xf5\xb1\x2b\x4d\xfa\xc2\xc4\xfb\x65\x82\xac\x71\x3f\x31\xcd\x45\x11\x56\x83\x09\xc6\xe1\x2c\xe6\x28\x7d\xdb\xb0\x66\x6c\x5d\x0a\x23\x97\xfd\xad\x8e\xc5\xf7\xab\xb8\xbc\xe9\xf0\x95\xc7\x17\x53\x2e\xf3\xd5\x8c\xfc\xfb\x5b\x1d\xab\xc9\x80\x73\x12\x16\xe4\xaa\xbf\xaf\x29\xb8\x55\x68\x87\xc5\x13\x27\x7b\xf9\xdd\xc7\xc4\x51\xa7\x32\x31\x11\xbb\x53\x7f\x48\x26\x43\xc9\x0c\x6f\xce\x07\x2b\x66\xce\x49\x9e\xcd\x9e\xce\x4b\x61\x06\x76\x16\xd9\xda\x61\x01\xd5\xfc\x5b\xbb\x98\xfd\xf3\x63\xb2\xd1\xc5\xf6\x13\x8b\x33\x84\x76\x30\x0e\x06\xfe\xf0\x0b\x8b\xab\x39\x8d\x03\x58\x52\x84\x66\xc4\x7c\xc3\xcb\xfe\xce\x1b\x22\x02\x59\xc4\x03\x30\x73\x82\xaf\x8a\xb5\x1c\x58\xb8\xd0\x56\xf6\x09\x00\x66\xcc\x23\x56\x7d\x7f\xe7\x4d\x6d\x3b\xa2\xb1\xca\xc1\x80\x6a\xe7\x8d\xc5\xe0\x67\xe6\x30\x97\x61\x66\x86\x05\x26\x33\x6e\xd1\x94\x85\xa0\xe2\x02\x09\x7d\xb4\xdd\x33\x4b\xa1\x3c\x68\x21\x39\x94\x87\x5a\x9e\xc7\x28\x7f\x87\xaf\xd3\x2c\xc1\xfe\x74\x33\x0a\x58\xef\x2c\xd6\x91\x31\x33\x8b\x15\xe0\x3c\xd6\x80\x4d\xc8\x3e\xc2\x53\x0c\x41\xc6\xc1\x18\x93\xce\x13\x8b\x95\x09\xfe\xf3\x11\xbe\xca\xe8\x6b\xbb\xf8\x8e\x2f\xde\xb0\x98\xa9\xd0\x7a\x2d\x9d\x84\x43\x5c\xe1\x28\x88\x9b\x7a\x81\x8b\xcd\x7e\x52\x99\xb5\x2d\xfc\x4f\x99\xb5\x3b\x8c\x2e\x18\x0e\x8f\xc3\x74\xe9\xb1\xfd\x66\x74\x73\x92\x77\x68\x80\x87\xf1\x94\x79\xdd\x13\x82\x08\xe3\x79\x5a\x8e\x64\x44\x17\x4b\x89\xe3\x05\xbd\xa9\x2c\xec\x82\xe6\x1b\x61\x1e\xd8\xe0\xbc\x77\x91\x07\x6b\xb9\x78\xa5\x1a\x8d\xcb\xe1\x98\x69\xf3\xf9\x67\xc8\xec\x7a\x61\x3d\xd2\x88\xd2\x68\x03\x85\x17\x6c\x0a\xeb\x8e\x95\x18\x5f\x60\xb4\xf7\x0b\x9c\x3f\xd3\xf9\x20\xc5\xff\x3d\xc7\x51\x56\x70\x7a\x06\x7c\x85\x03\xc3\x42\x03\x68\x1d\x1f\x6d\x42\xcc\x49\x20\x7f\x8c\xca\x31\x1d\x68\x28\x58\x11\x40\x3c\xa4\x76\x65\x75\x15\xb1\x19\xc9\xdf\x59\xb3\xe5\x16\x47\x8d\xa1\xa6\xe7\xb9\x85\x20\x44\x82\x11\x8d\xc2\x39\xda\xa0\x17\x86\x05\x17\x27\x76\xde\x14\x19\x5c\xf3\x4d\x67\x99\x38\x75\xdd\xd6\xa3\xf0\xf1\xbd\x0b\x1f\xe8\x3f\x67\x09\x4e\x71\x72\x81\xa9\x18\x12\xcf\x89\x28\x2f\x89\x1f\xa0\xc6\xf0\xb3\x70\x30\x61\x1c\x18\x6d\x25\xe8\x4d\x12\xfa\x11\x7a\x4b\xdd\x33\xd1\x28\x9c\x60\x1c\x0d\x6b\x43\x00\xc1\x43\x3e\x43\x04\x6c\x8d\x7e\x4e\x8e\xa0\xc8\x7f\xf9\x11\xda\x4d\xe6\x83\x6b\xf4\x79\x4c\xfe\xa9\x5d\xe2\xc1\x7f\x9e\x4f\xfd\x70\x52\x1b\xc6\x53\xbb\xbc\x73\x72\xc4\x9b\x2b\x10\x7b\xe4\x42\xa5\xa5\x9f\x27\x79\xbe\x97\x68\x48\x0e\x0a\x34\x65\xd2\xd3\x27\x4f\xc8\xa0\x03\xe9\x89\x74\x48\xa0\x24\xa2\x4a\xa1\x2a\xcc\x3a\xfd\xf5\x27\x5a\x5d\x8d\x2f\x70\x32\x9a\xc4\x97\xa4\x0e\x6c\x7c\x0d\x9e\x0e\x94\xd4\x6b\x74\xab\x3f\x92\xb2\xaf\xc4\xe7\xa6\xfc\x79\x5d\xff\xda\x62\x7b\x18\x6b\x0c\xf0\x04\x54\x08\x58\xd1\xee\xea\x2a\xe2\xcd\xa2\x41\x83\x14\x01\x94\xa1\xe9\xfa\x2b\x51\xa5\x99\x57\x11\x65\x9e\x00\x02\xb4\x10\x2d\xd5\x52\x4b\xb1\x62\x4f\x00\x15\x56\xee\x06\xfe\x4b\x08\x52\x2e\xb1\xb2\x32\x68\x49\xdf\xe1\x3f\xbc\x0c\x2d\xb2\xb2\x32\x68\xbe\x7a\xea\x2e\xb0\xb2\x32\x68\xb0\xef\xe4\xbf\xd0\x71\xde\x28\x3c\xac\x6c\x40\xcf\x5f\xbf\x66\xf9\x20\xe5\xd7\x4d\xaa\x02\x54\xde\x32\x84\xcc\x96\x44\xb5\xfa\x55\xbd\xc1\xb4\x7e\x79\x51\xc6\xf5\x48\x21\xf2\xf2\x46\xa7\x0e\xb6\x3c\x2a\x43\xfa\xaf\x4a\x23\xec\x25\xbd\x41\xe2\xa4\x94\xbf\xac\x32\x82\x91\xa6\x60\x75\x15\x91\x5d\x02\x6e\x62\x50\x28\x2d\x24\xba\x78\x8c\x95\xf6\x3c\x45\x00\x2f\x45\x71\x34\xb9\xa6\xcb\x71\xeb\xd7\x83\xa3\x2d\xf4\x19\xbd\x46\xeb\x00\x93\x37\xd8\xb0\x61\x41\xef\xe2\xd4\xce\xb2\x6f\xbc\xbf\x7c\x2d\x29\x67\x01\xb1\xae\x6a\x8e\xd7\x7f\xa1\xcc\xb9\xac\xc8\x69\x14\xd7\x64\x18\xb3\x55\xc6\x13\x45\xb3\x7c\xc0\x0c\xd4\x8b\x24\x1e\xe4\x96\x7a\x40\x68\xb0\x37\x52\x2c\x03\xa1\x5b\xc8\x41\x68\xb1\x2c\xc4\xa5\x03\x42\xd8\x26\xcd\x53\x56\xf4\x44\x17\x8d\xd8\x67\x09\x57\x55\xf5\xbc\x8c\x50\x84\x1c\x82\x11\xba\x9d\x70\x84\x96\x14\x90\x90\x2a\xcf\x99\x87\xae\x9c\xee\xe5\xb3\x97\x58\x1a\xaf\x34\xc9\x4a\x14\x97\x04\x2c\xa7\x88\x25\x15\x5e\x42\xd2\x6a\x3f\x4a\x5a\xdf\xbb\xa4\xe5\x90\xaf\x1c\xea\x9d\x93\xa3\x62\x39\x67\x59\xf5\x8e\x85\xa5\xeb\xbc\xfc\x91\x89\xff\xf3\x98\x78\xe1\x69\xf6\x01\x58\xf6\x5e\x34\x4c\x30\x44\x6e\x60\xc0\x35\x90\x4c\x0e\xc9\x27\xf7\x05\xa2\xc6\x34\x8e\x2f\x70\x5b\xfe\x15\xd5\xff\x56\x9b\x43\xd9\x5d\x61\xf1\x79\x9b\x94\x59\x62\x17\xe8\x3c\xee\x02\x7f\x8b\x5d\x60\x7b\x82\x87\x59\x12\x47\xe1\x10\xf5\xe3\x00\x0f\xe2\x78\xb1\xc2\x7f\xbb\x5f\xa4\xf0\xa7\x5f\x97\xda\x11\xb6\xfb\xaa\xc2\x9f\x3c\xdf\xd7\x0e\x20\xb3\x76\x95\x81\xa8\xf5\x8a\xb4\x98\x04\x1f\x65\x21\x3d\x14\x7e\x01\xbe\x15\x7e\x3c\xf5\x52\x7f\xb1\xde\x0c\xca\x2c\xb1\x8e\xff\xde\xc9\x91\xff\xe7\xac\xe3\x83\x79\x36\x9b\x67\xe5\x2f\xed\x0e\x0a\x2f\xed\x0e\x96\xbf\xb4\xd3\xa5\xba\x03\xed\x12\xef\xe0\xaf\xbd\x0e\x7a\x70\xa9\xce\xd4\xcd\x8b\x37\xf7\x2b\xd9\x15\x34\xf4\xbd\x48\x77\xff\xa4\x13\xf6\x81\x76\xad\xe9\x12\xa2\x0e\x4a\x5c\x5a\x1c\x2c\x79\x69\xf1\x98\xc5\xee\xef\xc1\x7c\x37\x3f\x1c\xef\xa1\xdf\x6a\x2f\x9b\x2d\x6e\x20\x8e\xd2\x8c\x2c\xef\xf3\x6b\x83\xfb\xce\xfc\xa0\xb6\x19\xa5\xe1\x6f\xa4\xb4\xc8\x05\x37\xf3\x03\x99\xfd\x05\x7e\xe6\x4b\x17\xa1\xae\x0b\xd0\x54\xbd\x01\x25\xb5\x8e\x73\x83\x5f\xc5\x00\xf8\x95\x5a\x74\xa0\xa7\x15\x19\xb8\x12\x8a\x00\x51\xcc\xa3\x4c\xf4\x4c\x0b\x66\x05\xb6\x78\x87\xf4\x9b\x01\x8c\xbe\x78\xa1\x62\xf6\x2f\xed\xbb\xd1\x1a\x8d\x69\x33\xf1\x53\x1a\x39\x0b\xcd\xe2\x34\x54\x3d\xf0\x49\xa3\xe4\x3b\xa9\x7f\x18\xf3\xce\x8a\x16\x56\x34\x8c\x5e\xa0\x86\xd6\xc8\xa1\x1f\xe4\xcf\x30\x50\x22\xdb\x88\xfa\x9a\xb2\x12\xb9\xad\x3c\xa4\x96\xda\x48\x1e\x52\x4b\x2e\x6d\x0b\xae\xa5\x5a\x66\xaf\x68\x80\xb8\x1d\x22\xb7\xc0\x9d\x47\x16\xe2\xd0\x29\xe2\x2d\xce\xa4\x84\xf3\xca\x54\x51\x05\xbe\x18\xcd\xe2\x99\x93\xfa\x5c\x51\xd1\x7c\x41\x8e\xbf\xac\xef\xf9\x45\x90\x84\x02\xdb\x57\x0c\x0f\x09\x0d\x8c\xa3\xb7\x4f\x9f\xdc\x58\xf9\x26\x5f\x2e\x57\x2f\x9b\xad\xa5\x78\xe7\xdd\x12\x93\x3d\xf2\xce\x6f\xc5\x3b\xf7\x8e\x0f\x10\x84\xc4\x2d\xc7\x3a\xf7\x58\x00\xdd\xbb\xb2\xce\xbf\x9c\x1d\xe6\x4b\x62\x01\x3f\xb4\xb0\x2a\x9a\x0e\xc0\x1e\x81\xae\x96\xf8\x51\x10\x4f\x2b\x06\x07\xac\x56\x6b\x9a\xa4\x54\x0c\x87\xa5\x0e\x3b\x35\xb8\x5c\xb3\x7d\xe6\x11\x70\x8f\x8c\x4a\x67\x54\x9c\x38\x97\x62\x54\x7f\xef\xcc\x0b\xff\xa3\x18\xd5\xea\xde\x76\x1f\xbd\x5c\x7b\xb9\xf6\xa2\x81\x18\x6d\xa0\x7d\x9c\x8d\xe3\x00\x35\x5d\xdc\x0a\x42\x7b\xdf\x96\x5b\x6d\x06\x01\xf5\x1f\x54\x17\x44\x09\x2e\xc0\x57\x2f\xa9\x4d\xff\xf8\xa2\x55\x1a\xf8\x3f\x38\x89\x21\x77\x58\x36\xc6\x28\xc1\xa9\xc4\x17\x95\x8e\x90\x72\xac\xc7\xe4\xd9\xc0\xfb\x56\xbc\x80\x2d\xc4\x3f\x18\x0e\xea\x6a\x74\x36\x0f\xa0\x29\x3c\xfb\xc2\x8e\x23\x8c\xa6\x71\x82\xa9\xf0\xf8\xe2\x05\xf4\xcd\x35\x8a\x7c\xbd\xbf\x78\x51\x72\x81\xc3\x7c\x2e\xb3\xc0\xd7\xee\x16\xe5\xfc\x71\x81\x7f\xb3\x53\x1c\x8a\xe2\x78\x56\x4e\x0c\xf9\xc0\xc9\xd1\xb9\xb2\x05\xb1\xbb\xd7\x44\x5e\xa4\x88\xe6\x44\x53\x4b\x11\xdd\xdd\xc2\xcd\x3e\x12\xdd\xb7\x22\xba\xff\x23\x31\xbf\x62\x92\x93\x78\xe0\x5f\x28\xfc\x96\x3e\x38\xcb\xe7\x5b\x43\x00\xae\x54\x8a\x45\xe0\x2a\xfa\xfa\x55\x7f\x75\xab\x2d\xc6\xde\xe3\xc5\x71\x05\x56\x57\xd1\x47\x02\x5f\xad\x17\x1a\x91\x02\x40\xb3\x20\xca\x5c\x8e\xc3\x09\x46\x95\x1f\x2a\xb9\xaf\x75\x1e\x83\x1b\x3c\x0e\x8d\x98\xdb\xc2\x84\xd3\x50\x64\x86\x62\x4b\x42\xaa\x8a\x52\x77\xec\x86\x78\xbc\x65\x76\x2f\x89\x82\x96\xe2\x25\x7f\x6f\xc7\x2d\x4b\x8e\x2e\x9a\x24\xeb\x61\xf9\x4a\x9e\x09\x09\x5a\xfb\xeb\xf3\x7c\x3c\x6c\x92\xf0\x72\x31\xb1\x8d\x98\xd7\xe2\xcb\xf1\xee\x66\x23\x8f\xf5\x4c\x9e\xa4\x8f\x66\x22\x70\x9b\x83\xe8\xa1\x9f\xa6\x64\x21\xbf\x20\xa8\x05\xe8\x1d\xbe\x46\x5b\x38\x09\x2f\x68\x4e\xc8\x1d\x3e\x28\xcd\xe2\x98\xd3\x87\x6f\xde\x6d\xed\x34\xf3\xd6\xc4\x73\xc9\xc4\xe3\xfd\x38\x1a\x85\xe7\x73\x96\x89\x32\x86\xac\x90\x69\x51\x7e\xc9\x24\x9e\xe1\x24\xbb\x46\x7f\xd2\x63\x31\x78\x93\x02\xf3\x3d\x19\xd3\x1c\xc7\x29\x79\x08\x23\x96\x2e\x20\x8b\x85\x2f\x4d\x0d\x6d\xe1\x91\x3f\x9f\x64\x3d\xd4\x46\x95\x46\x73\x1d\x12\x29\x57\x5d\xf0\x1d\x09\xcd\x71\xc2\x13\x99\xe7\xe0\xc8\xf8\x2f\x42\x33\xcc\x58\xf2\xcc\x14\x40\xe5\x87\x7a\xe9\x43\x16\xa3\x19\x4e\x46\x71\x32\x95\x80\x2b\x90\xa5\xf4\x8f\xc3\xd1\x79\xcf\x35\xca\x88\x5e\x7c\x1d\x43\xcc\x99\x46\x73\x7d\xb5\xd5\xd4\x42\x70\xd3\xae\x50\xd4\xb5\x4f\x39\x42\x4a\xe3\x37\xd5\xa2\x84\xa4\x45\x09\xe4\xc9\xac\x04\x39\x69\xf1\xf5\xb6\x38\x8b\xe8\x01\xf0\xb9\x1b\xd2\x55\x39\x63\x28\x19\xbf\xa1\x8d\x6e\xb8\xbf\xd9\x28\x4e\xe0\x14\x93\x37\x7a\x0f\x89\x41\xbf\x04\x23\x23\x69\x3c\xa5\x76\x7e\x7a\x54\xcc\xb0\x96\xa9\xf8\x67\x3e\x59\xeb\x34\xfd\xe4\x9d\xc1\x78\xea\x34\xd6\xeb\x75\x1d\x70\x41\xf6\xfa\xe1\xe8\xdc\x6e\x78\x41\x26\x62\x43\xfc\xe4\x84\x47\x8a\xbb\x82\x61\x98\xeb\x1d\xae\x2b\xa8\x07\x5d\x59\x16\x74\x9b\x7c\xb3\x33\x06\x1b\xa8\x85\x3f\xd4\x4a\x56\x4e\xfd\x49\x86\x36\xe1\x9f\xe5\x13\xd1\x72\x37\x1a\xc9\xaf\xfd\x2e\x64\x47\x13\xa9\x07\xa3\x1a\x8b\x4a\x52\xe1\x9d\xf1\x00\x3f\xe7\xa4\xb2\xe2\xf2\xbc\x6a\x35\x97\xca\xed\xa2\x4e\xbd\xd5\x80\x30\xcc\x1c\x49\x61\x99\x97\x3d\xf8\xee\x33\x5a\x25\xe4\x43\x79\x90\x27\x66\xc7\x6e\x96\xe8\x4e\x50\x0e\xb2\x29\x1d\x6c\x9a\x6e\xde\xd0\xe7\xd8\x42\x3d\x81\x9c\xbc\x17\x05\xf8\xca\x56\xe3\xb4\x7e\xc5\x14\x40\x96\x68\x9d\x0b\x42\x74\x09\x54\x84\xb0\x2c\xde\x38\xf3\xd7\xe7\xd8\xf0\x4a\xf9\x1b\x67\x25\xbe\xe5\x6d\x90\x59\xa9\xb1\x27\x9b\x11\x46\xbe\xb5\xd0\xa2\xf9\x8b\x05\x46\x16\xea\x47\x26\xa8\x6b\x1d\xe4\x71\x91\x5e\x73\x7c\xac\xc6\x05\xa2\x93\x2c\xcf\x31\x4f\x96\x0d\x14\x98\xa7\xf1\xcd\x7b\xad\xcf\x19\x62\x19\xbd\xf3\xd4\xc0\xe6\xf7\xc5\xd9\x18\x00\xbe\x32\xc4\xd6\xd1\x35\x8b\x8b\x2c\x46\xf9\x2b\xd6\x71\x07\x22\x7b\x62\x8c\xed\xa0\x43\x39\x9a\x1d\x03\x6b\xc1\x42\xb1\xe5\x68\x50\x5b\x0e\x69\xfa\x9c\xc6\x1c\x08\xf8\xb9\xd2\x04\x8c\x9e\x18\x69\xf9\xa3\x6d\xac\xcb\x8c\x37\x5a\x14\x0a\xca\xd6\x59\x3e\xfa\xf2\x3b\x7b\xc0\x2a\xa9\x89\xdf\x0e\x8e\xd4\xee\x80\xeb\x94\xc5\xe3\xda\x18\xb7\xcf\xd4\x06\xe6\x33\xb7\x81\x91\x66\xf3\x15\xfa\x5c\x30\x7a\xe4\x2f\xaf\x71\xfa\x19\xcc\x61\x8c\x8e\x9c\x7e\xd6\xcd\x62\xf8\xdf\x8d\xf9\x5a\x0f\x38\x45\xfe\x24\xe6\xc0\x74\xd3\xd0\xa8\x6d\x4a\x34\x26\x71\x5a\x3f\x5b\x59\x29\x36\x29\x92\x80\x4b\x47\x5f\xce\x37\x2c\x41\xcc\xd8\x5e\x96\xd7\x2b\x32\xa0\x94\x8f\x11\x77\xda\xd0\xcb\x04\x9b\x29\xdc\xc8\x97\xdc\xc4\xef\x4b\xb4\x0c\x53\x5b\xba\xfd\xc5\xd1\x6b\x2c\xa2\xc1\x3d\x04\xb1\xa1\x22\x82\x90\x0c\xa9\x50\xe8\x12\x13\x96\xab\xe6\x21\x87\x6c\x7a\x17\x30\x85\xb2\x69\x1e\x64\x47\x1c\x25\x5d\x02\x8c\x87\x74\x41\x95\x0d\xbb\x2a\x16\x93\x42\x0b\x84\xa7\x9b\x22\x5b\x34\x0a\xcd\x1e\xa8\x47\x4f\xa1\xcb\x73\xc2\xde\x9c\x79\x6b\x7f\x6f\x1f\xfa\x25\xd2\xba\x2f\x4e\x8e\xfe\xb0\xba\x23\x67\x7a\x6d\x57\xd6\xeb\x7f\x82\x76\xe9\x18\x8c\x33\xfb\xdc\x78\x97\x2a\x91\xe4\x97\x45\x7a\x24\x81\xc7\x11\x9e\xa7\xfe\x60\x82\x59\x38\x30\x09\x9d\x63\x24\xa7\x5a\xa4\x50\xf4\x37\x6f\x91\x9a\x61\x4d\xda\x16\x8e\x20\x9b\x32\x62\x86\xb6\xcc\xc6\xd8\xd4\x24\x89\xf2\x10\x63\x25\x4c\x91\x8f\x68\x02\x66\x74\x81\x93\x14\xa2\x96\x8d\xfd\x0c\x45\xf8\x7c\x82\x87\x19\x0e\x08\x1b\x1e\xb2\x94\xaa\x19\x53\xf8\x64\x31\x9a\x84\x59\x36\xc1\x2f\x68\x80\xcb\x9a\x0a\x14\x27\x49\x9c\xa0\x20\xc6\x69\xf4\x3c\x43\xfe\x68\x84\x87\xb4\x2e\x45\xea\x79\x8a\x52\x3c\x9c\x27\x61\x76\xed\x89\x8a\x83\x79\x86\xc2\x0c\x2a\xf1\x1a\x61\x96\x8a\x80\x0a\xe1\x24\xcc\x98\x13\x37\xcd\xeb\x1a\x12\xfe\x3c\xc5\x11\xdd\x0f\x52\x9b\xa2\x8c\x0e\xc8\x7b\xda\x39\xa1\x2e\xd3\xde\xca\xf3\x77\xdb\xa4\x6d\xc5\x87\x94\x77\xb2\x19\xb4\xf3\x80\x91\x5b\x6f\xc3\xa9\xe1\xa2\xe8\xb4\x10\xb2\x13\x1a\xd9\xbd\xb0\xf3\x9c\xf6\x9b\x68\x97\xfc\xb2\x24\x8e\x7b\x77\x5a\x3f\xf3\x50\xe5\xdd\x69\xeb\x8c\x05\x0b\x40\x5f\xc9\x23\xbb\x0a\x68\x74\xab\x96\x24\x72\xef\x4e\x1b\xb4\x52\x5d\xad\xd4\x2a\xae\xd4\xa4\x95\x1a\x6a\xa5\x7a\x71\xa5\x16\xad\xd4\x54\x2b\x35\x44\x25\xb5\x8e\x2d\x3b\x92\x31\x64\xdc\xcb\xd0\x35\x68\x7d\x31\x68\x7d\xfb\xa0\x99\xf8\x48\xc3\xc5\xfa\x44\x2f\x4c\x46\x23\x9e\x76\x90\x22\x4d\x83\xac\xd6\xeb\xe4\x8b\xad\xbf\xe6\x44\xb4\x54\xc8\x0d\x2b\xe4\x66\x29\xc8\x75\xe7\xc0\x4b\x30\x34\xc8\xad\x52\x90\x1b\xae\xd9\xf1\x24\x18\x1a\xe4\xba\x06\x79\xf1\x44\xf6\xfd\x24\xb9\x46\x03\x3d\x9d\x2a\x9d\xaa\x01\x8d\x7f\x61\x6a\x32\x32\x3a\xf9\x84\xf5\xa4\xd7\x69\x86\xa7\x68\x14\xcf\x13\x94\x85\x53\x7d\xee\x97\x0c\xca\x1b\xe1\xab\xec\x98\xac\x3e\x77\xfc\x58\x4b\xc4\xdb\xfd\x38\x08\x47\xd7\x94\x13\x52\x3a\x2c\x81\xc5\xba\x1b\x8b\xfe\x29\x75\x1c\xf8\xed\x14\x52\x5e\x42\xb4\x15\x23\x53\x9c\x2d\x49\xee\x2f\x28\xc5\xd9\x7c\xa6\x7e\x28\xf0\xe8\x58\x7c\xd8\xdf\xfb\x85\xba\x76\x14\x9d\xf0\xf7\x7e\xf9\x54\x47\x1b\x68\xef\x17\x33\x35\x9a\x54\xa4\x41\x8b\x34\xac\xd1\x8c\xe5\x25\x0d\x53\x99\xce\x07\x17\x98\x88\x0a\xae\xa3\x7f\x9d\x06\x3f\x86\xb6\x69\xf4\xe3\xaf\x88\x3e\xb9\xa2\x1f\xcb\xc5\x59\x98\x63\x51\x3e\xbf\x0e\xb5\x87\x39\x16\xcd\x36\x45\xb3\x0d\xa5\xd9\xc6\xa2\x66\x1b\x6a\xb3\x8d\xe5\x9a\x85\x30\x3a\x61\x9d\x2f\x41\x02\x24\x6c\xaa\x2b\xd0\x55\xb5\x05\x55\x9b\x7c\x31\x43\xd5\xba\xba\x4c\x1d\x33\xc2\xc8\xba\x88\xb5\x22\xa0\xd6\x3a\x3d\xd7\xeb\xb1\xfd\xe9\xc7\x06\xfd\xd8\xb0\x7e\x6c\xd2\x8f\x4d\xeb\xc7\x16\xfd\xd8\xb2\x7e\x6c\x17\xb5\xd9\x29\x6a\xb3\x5b\xd4\xe6\x9a\x68\xb3\x40\x23\x55\x8a\xf3\xa0\xe5\xb9\x0f\x2a\xc7\x81\x90\xa9\xa4\x90\xfd\x88\xee\x25\xb9\xab\x53\x79\x2d\x49\x1f\xa5\x38\xb3\x5a\xc4\xde\x3b\xf7\xf6\x0e\x83\x9b\x7b\x99\x01\x17\x52\x4b\x1f\xd3\x50\x43\xbf\x01\x11\xa2\xca\x6f\x64\xee\xf9\x2a\x81\x67\xb1\xf7\xbe\xd2\x2b\x36\x68\xc5\x26\xab\xb8\xa6\x55\xec\x38\x2b\x36\x69\xc5\x36\xab\xd8\xd0\x2a\xae\x39\x2b\xb6\x68\xc5\xee\x99\x40\x4d\xa9\xd8\xc8\x2b\xde\x69\x17\x2b\x8a\x52\x4f\x11\xe1\xb1\xe3\x8f\x59\x4a\x76\x16\x3c\x1e\x1e\x6f\x13\x3d\x9e\xc3\x61\x0c\x4e\xc0\xb1\xc5\x8f\xb7\xe2\x6b\x75\xc2\x43\x52\x8e\x5e\xe1\x4d\x77\x5c\xec\x45\x27\x53\xbf\xb0\xe3\xc9\x6f\x6e\xf3\x8f\xe1\x05\xfd\xd2\x6d\xaf\xb6\x9a\xba\x5a\x4e\x2c\x13\x41\xb0\x95\x92\xae\x50\xca\xfa\x50\xbe\x48\x22\xa8\x66\xf0\x73\xec\x5f\x60\x14\x4f\x02\x27\xab\x5d\x42\x7e\xe8\x7f\xa2\x93\xdb\xd7\xe3\x1d\x2a\x2d\xf6\xfd\xc9\x70\x3e\x21\x2b\x2c\xc2\x97\xce\x66\xfb\x2c\x11\x4c\x9f\x26\x82\xa9\x5f\xb5\x83\x16\xfc\x1f\x5a\xe1\x12\x9a\x9e\xaf\xa5\xcf\xf2\xc2\xf4\x69\x5e\x98\xfa\x15\xab\xd1\x82\x98\xf2\x7d\x2e\xa0\xd6\xab\xe8\x35\xaa\xf4\x3f\x49\xcf\xff\x81\x1a\xa8\x87\xea\x55\x13\x62\x93\x41\x6c\x52\x88\x0c\x60\x9b\x41\x6c\x68\x10\x1b\x25\x20\xb6\x18\xc4\x96\xd1\xad\x0a\x6d\x47\x81\xd8\x2c\x01\xb1\xcd\x20\xb6\xad\xbd\x6e\x69\x10\x5b\x25\x20\x76\x18\xc4\x8e\xb5\xd7\x6d\x0d\x62\xbb\x04\xc4\x2e\x83\xd8\xb5\xf6\xba\xa3\x41\xec\x94\x80\xb8\xc6\x20\xae\x59\x7b\xdd\xd5\x20\x76\x17\x42\xcc\xc5\x7e\x0a\x54\xa9\xbe\xa6\x57\xd7\xbd\x63\x04\x4d\x93\xdd\xe7\xfc\xc5\x1d\x16\x11\x29\x75\x7e\x05\xbc\x3a\x24\x5d\xeb\x5b\x92\x70\xf0\x74\xf9\xc9\x7c\x98\xa1\x71\x78\x3e\x46\x7e\x14\xa0\x49\x7c\x89\xfc\xe4\x7c\x0e\xe1\x5f\xc0\xcd\xf9\xbf\xe7\x7e\x62\x24\xee\x81\x06\x7c\xb4\x41\x5a\xe1\x52\x9c\x45\x79\x70\x3e\xa0\x45\xe8\x2e\x61\x3d\x3e\xf1\x3e\x2b\x18\x24\x38\x9d\x4f\x32\x14\x8f\x8a\x9a\x1f\xd3\x2d\xa0\x72\xee\xa3\x9f\xd0\xb9\x4f\x5d\x57\x1a\x6b\x55\xb4\x82\xe8\xab\x01\x7b\xd5\x81\x57\x03\x78\x65\x43\x72\x42\x01\x49\x5d\xa1\x47\xc2\x9f\xd0\xf9\x15\xcc\x70\x15\x08\x82\x17\x10\x62\xa7\x54\xc0\x96\x08\x86\x74\xe8\xb7\x83\x23\x04\xe1\x24\xe5\x8f\x6f\x29\x87\x3b\x1f\xa3\xdf\xd1\xf9\xa4\x2c\x93\xb3\x2b\x55\x7e\x63\x2c\xee\x2d\x65\x71\x95\xca\xdb\x7c\xfb\x26\x3b\xd9\x5b\x49\x2c\xa8\xb2\x02\x5d\xb5\x40\x37\x2f\xa0\xd3\xf3\x6f\x8c\x1b\xbe\xa5\xdc\xb0\x42\x9b\xc9\xf7\xdb\xb7\x9c\xff\xc1\x7e\xbb\x82\x48\x6b\x26\x8c\x26\x83\xd1\xe4\x30\x1a\x2a\x02\x0d\x03\xc3\xba\x5a\xa0\x5e\x84\x61\x8b\x41\x6f\x71\xe8\x4d\x15\xc3\xa6\x86\x61\xc3\x82\x61\x9b\xc1\x68\x73\x18\x2d\x15\x81\x96\x81\x61\x53\x2d\xd0\x2c\xc2\xb0\xc3\xa0\x77\x38\xf4\xb6\x8a\x61\x5b\xc3\xb0\x65\xc1\xb0\xcb\x60\x74\x39\x8c\x8e\x8a\x40\xc7\xc0\xb0\xad\x16\x68\x17\x61\xb8\xc6\xa0\xaf\x9d\x29\x24\x22\x30\xec\x6a\x18\x76\x14\x0c\x4b\x25\xfe\x48\x79\xd2\x09\xa1\x6b\x2d\x91\x76\x62\xd1\x75\x17\x85\x95\xe1\xab\x4c\xbe\x77\x92\x35\xa9\x3c\x94\x82\x92\xc6\x81\xde\x16\x99\xf7\x57\xb3\x89\x4f\xb0\xb9\xca\x90\x13\x1c\x8b\x33\x53\xc9\x5b\xb6\x41\x14\x17\x57\x45\x4a\x5d\x35\x79\x87\x5c\xb2\x5a\x74\x07\x25\x17\x2c\x6d\x8c\xec\xa9\x77\x23\xbd\x4e\xdb\xcb\x2f\x45\x7a\x9d\xae\xc7\xee\x4a\x7a\xdd\xc6\xcd\x99\xb7\xf6\xf7\x8e\x44\xf8\x78\x5f\xf5\x78\x5f\xf5\x60\xf7\x55\xda\x12\xcf\xef\x73\xf4\x9b\x9c\xbf\xd7\x1d\xce\x7d\x65\x85\x7b\x27\x8e\xe6\xef\xd4\xa3\xf9\xbb\xdb\x1e\xcd\xdf\xa9\x47\xf3\x77\x45\x47\xf3\x45\x0a\xe6\xc7\x9b\xaa\xc7\x9b\xaa\xc7\x9b\x2a\xe5\xcb\xe3\x4d\xd5\xe3\x4d\xd5\xe3\x4d\x55\xde\xec\xe3\x4d\x95\xfe\xf1\xf1\xa6\xca\xf1\xf8\x78\x53\xf5\x78\x53\xf5\x78\x53\x05\x7f\x8f\x37\x55\xe5\x94\xb8\x8f\x37\x55\x8f\x37\x55\x8f\x37\x55\xd2\xdf\xe3\x4d\xd5\xe3\x4d\xd5\xe3\x4d\xd5\xe3\x4d\xd5\xff\xe4\x9b\xaa\x7b\xbb\xa3\xba\xdd\xed\x54\x99\x7b\xa9\x12\x37\x52\x0f\x75\x17\xf5\xf7\xce\x87\xf2\x78\x17\xf5\xcf\xbf\x8b\x92\xef\x8e\xfa\xed\x85\x8e\x4e\xf2\xcd\x51\xbf\x2d\x5d\x1b\xc1\xc3\xc3\xdf\x19\x51\x2f\x4d\x71\x6b\x64\x0f\x2a\xc0\x3d\xb4\x8b\xae\x95\xc0\x8d\x53\xf6\x28\x96\x62\xa6\x9b\xfa\x8a\x28\xcc\x50\x3a\x88\xaf\x4c\x38\xc7\x02\x9d\x63\xf9\x9a\x8e\xff\xd9\xa4\xc9\x66\xa7\xeb\x3e\x94\xb3\x43\x77\xb8\x58\x8d\xfb\x0e\x5f\xdb\xf4\xb8\x6a\x8b\x1e\xf7\x1f\x5f\xd8\x30\x1b\x14\x32\x04\x3c\xaa\x44\x88\xfe\x25\x8f\x93\x43\x75\xc8\x2a\x91\xad\x8d\x8f\xfd\xa9\x02\xc8\x8c\x84\xa6\x7c\x36\x82\xa2\xd9\xce\xfe\xa4\x17\x95\xcf\x68\x85\x8e\xcf\x0a\x6f\xb4\x8a\xfe\x05\xbd\x72\xc4\x52\xb8\xf4\x67\x76\x9c\x61\xdf\x30\x35\x04\xd2\x04\x1c\xdb\x1d\xe3\xc9\x6b\x32\xe3\x8b\xa7\xa7\x6f\x55\xf1\xb3\xac\x1a\x82\x68\x3e\xb3\x2c\xb3\x02\xd0\x9d\xd5\x72\x5c\x13\x02\x5a\x10\x23\xff\x3a\x99\x1e\xbb\xca\x50\x69\x59\x38\x39\x37\x3b\x5d\x87\x42\xa4\xee\x54\x86\x58\x1b\x2d\xab\x18\x91\xd6\x93\xa6\x18\xc9\x07\x2d\xd4\xbe\x7c\xce\x87\x73\x61\x06\x78\x50\x0e\xaa\xd5\xbf\xc8\x78\x6a\xf3\x21\x56\x53\x44\x97\x51\x44\x55\x6a\x91\x65\x11\x85\xa0\x41\xa7\x09\xe3\x18\x55\x2a\xdf\x15\x12\x76\x10\xae\x95\x68\x0b\x08\xd6\x4d\xac\x39\xa1\xaa\xef\xd5\xce\x7e\x25\x75\x2b\x6c\x4d\x91\x2a\x0c\xaf\xb3\x3c\xaf\x41\xa4\xe7\x31\xd0\x8e\x4f\x1f\x21\x0e\x8a\xe5\x46\x2b\x27\xf5\xd0\x38\xbb\x93\xb1\x50\xe6\x8a\x89\x65\x0a\x76\xdf\xab\xdc\xdb\x6f\xdf\x87\xd0\xdb\x6f\x2f\x2d\xf1\x9a\x7b\xac\x26\xee\xf6\xdb\xd6\xd8\x16\x70\x43\x13\xe2\xe0\x16\x3b\xfc\x56\x12\xcf\x94\x5d\x9e\xbd\x80\x41\xf8\x06\x51\xf1\x02\xd2\x9c\x1a\x68\x4e\xd3\xf3\x93\x89\x27\xa5\x44\xa8\x39\xd4\x78\xd9\x94\xc1\xea\xb1\xe6\x08\xea\x52\xd4\x2f\x6d\x15\x13\x50\x3d\x15\x84\x1a\x31\xae\x94\x10\x43\xda\xe0\x05\x8b\xef\x30\xc8\x78\x16\x6c\xe0\xc2\xf0\x85\xe0\x45\x76\xf1\x9f\x61\x33\x7f\xf1\xc2\xba\x87\x2f\xc1\xee\xd1\x82\x04\x48\xdf\xd1\x6a\x23\x43\x74\x3f\x2b\x0e\x20\x2d\xbf\xea\x18\xcd\x17\xaf\x3c\x52\xa8\xf8\xa4\xd9\x6f\x3f\xd4\x31\xf3\x6e\xe9\xfa\xbe\xe5\xf9\xf2\xc1\x4e\x81\xdf\x36\x88\x33\x61\x55\x38\xc5\xc9\x05\x7e\xfa\xa4\x32\xac\xa2\x66\xbd\xd1\x44\x83\x6b\xd4\xff\xff\xfe\xdf\x20\x09\x87\x68\x1f\xa7\x51\x38\xa9\xa1\xcd\xc9\x04\x25\xe1\xf9\x38\x4b\x11\x2b\x1f\xd4\x9e\x3e\x7d\x72\x84\x83\x30\xcd\x92\x70\x30\x07\xf8\x7e\x14\x40\x50\x9e\x30\x42\x69\x3c\x4f\x86\x18\xde\x0c\xc2\xc8\x4f\xae\x09\x3b\x98\xa6\x1e\x8b\xd2\x90\xc0\xbf\xf1\x3c\x43\x53\xe0\xe9\x43\xe0\xac\x1e\xf2\x13\x8c\x66\x38\x99\x86\x59\x86\x03\x34\x4b\xe2\x8b\x30\xc0\x01\x0d\x3a\x41\xd6\xe9\x28\x9e\x4c\xe2\xcb\x30\x3a\x47\xc3\x38\x0a\x42\xba\x86\x49\xa5\x29\xce\x7a\x6c\xc5\xbf\x40\x2a\x5a\x29\x28\x86\x29\x3e\xc3\x38\xc0\x68\x3a\x4f\x33\xb2\x51\xfb\x61\x04\x40\xfd\x41\x7c\x41\x3e\xcd\xae\xa1\x8b\x28\x8a\xb3\x70\x88\x3d\x1a\x57\x68\x12\xa6\xa0\x59\x96\xdb\x8b\x02\x0d\x99\x20\x4c\x87\x13\x3f\x9c\xe2\xa4\xe6\xc2\x21\x8c\xe4\x81\xe0\x38\xcc\x92\x38\x98\x0f\xf1\xbd\xa3\x81\x58\xd7\x82\x78\x38\x17\x71\x30\x48\x8d\xd5\x38\x61\x31\x32\xa6\x7e\x86\x93\xd0\x9f\xa4\xf9\x30\xc3\xdc\x40\x35\x09\x75\x32\xcf\x27\xbb\x7b\xc7\xe8\xf8\x60\xe7\xe4\xd7\xcd\xa3\x6d\xb4\x77\x8c\x0e\x8f\x0e\x7e\xd9\xdb\xda\xde\x42\x6f\xfe\x8d\x4e\x76\xb7\x51\xff\xe0\xf0\xdf\x47\x7b\x6f\x77\x4f\xd0\xee\xc1\xfb\xad\xed\xa3\x63\xb4\xf9\x61\x0b\xf5\x0f\x3e\x9c\x1c\xed\xbd\xf9\x78\x72\x70\x74\x8c\x9e\x6d\x1e\xa3\xbd\xe3\x67\xf0\x61\xf3\xc3\xbf\xd1\xf6\x6f\x87\x47\xdb\xc7\xc7\xe8\xe0\x08\xed\xed\x1f\xbe\xdf\xdb\xde\x42\xbf\x6e\x1e\x1d\x6d\x7e\x38\xd9\xdb\x3e\xf6\xd0\xde\x87\xfe\xfb\x8f\x5b\x7b\x1f\xde\x7a\xe8\xcd\xc7\x13\xf4\xe1\xe0\x04\xbd\xdf\xdb\xdf\x3b\xd9\xde\x42\x27\x07\x1e\x34\x6a\x56\x43\x07\x3b\x68\x7f\xfb\xa8\xbf\xbb\xf9\xe1\x64\xf3\xcd\xde\xfb\xbd\x93\x7f\x43\x7b\x3b\x7b\x27\x1f\x48\x5b\x3b\x07\x47\x68\x13\x1d\x6e\x1e\x9d\xec\xf5\x3f\xbe\xdf\x3c\x42\x87\x1f\x8f\x0e\x0f\x8e\xb7\x11\xe9\xd6\xd6\xde\x71\xff\xfd\xe6\xde\xfe\xf6\x56\x0d\xed\x7d\x40\x1f\x0e\xd0\xf6\x2f\xdb\x1f\x4e\xd0\xf1\xee\xe6\xfb\xf7\xd6\x5e\x12\xdc\x95\x3e\xbe\xd9\x46\xef\xf7\x36\xdf\xbc\xdf\xa6\x2d\x7d\xf8\x37\xda\xda\x3b\xda\xee\x9f\x90\xee\xe4\xbf\xfa\x7b\x5b\xdb\x1f\x4e\x36\xdf\x7b\xe8\xf8\x70\xbb\xbf\x47\x7e\x6c\xff\xb6\xbd\x7f\xf8\x7e\xf3\xe8\xdf\x1e\x83\x79\xbc\xfd\xbf\x3f\x6e\x7f\x38\xd9\xdb\x7c\x8f\xb6\x36\xf7\x37\xdf\x6e\x1f\xa3\xca\x82\x21\x39\x3c\x3a\xe8\x7f\x3c\xda\xde\x27\x38\x1f\xec\xa0\xe3\x8f\x6f\x8e\x4f\xf6\x4e\x3e\x9e\x6c\xa3\xb7\x07\x07\x5b\x30\xd0\xc7\xdb\x47\xbf\xec\xf5\xb7\x8f\x5f\xa1\xf7\x07\xc7\x30\x5a\x1f\x8f\xb7\x3d\xb4\xb5\x79\xb2\x09\x0d\x1f\x1e\x1d\xec\xec\x9d\x1c\xbf\x22\xbf\xdf\x7c\x3c\xde\x83\x41\xdb\xfb\x70\xb2\x7d\x74\xf4\xf1\xf0\x64\xef\xe0\x43\x15\xed\x1e\xfc\xba\xfd\xcb\xf6\x11\xea\x6f\x7e\x3c\xde\xde\x82\xd1\x3d\xf8\x00\x5d\x3d\xd9\xdd\x3e\x38\xfa\x37\x01\x4a\xc6\x00\x06\xdf\x43\xbf\xee\x6e\x9f\xec\x6e\x1f\x91\x01\x85\x91\xda\x24\x43\x70\x7c\x72\xb4\xd7\x3f\x91\x8b\x1d\x1c\xa1\x93\x83\xa3\x13\xa9\x8f\xe8\xc3\xf6\xdb\xf7\x7b\x6f\xb7\x3f\xf4\xb7\xc9\xd7\x03\x02\xe5\xd7\xbd\xe3\xed\x2a\xda\x3c\xda\x3b\x26\x05\xf6\x68\xb3\xbf\x6e\xfe\x1b\x1d\x7c\x84\x2e\x93\x39\xfa\x78\xbc\x4d\x7f\x4a\x14\xeb\xc1\x4c\xa2\xbd\x1d\xb4\xb9\xf5\xcb\x1e\x41\x9b\x15\x3e\x3c\x38\x3e\xde\x63\x74\x02\x43\xd6\xdf\x65\xc3\x5d\x7b\xfa\xe4\xa7\x55\x55\xe7\xb5\xef\x67\xe3\xfb\xd5\x7b\x95\x8b\x3a\x4d\x03\x1f\x8b\x22\xf4\xb1\x94\x75\x36\x5c\xd8\xf9\x51\x96\xa2\xcc\x1f\x70\x89\x85\x54\xf9\xf4\xc7\xc4\x1a\x6c\x33\x97\xa3\xea\x1e\x42\x0d\x0f\xa1\xa6\x87\x50\xcb\x43\xa8\xed\x21\xd4\xf1\x10\xea\x7a\x08\xad\x79\x08\xad\x7b\x08\xbd\xf4\x50\xa3\xee\xa1\x46\xc3\x43\x8d\xa6\x87\x1a\x2d\x0f\x35\xda\x1e\x6a\x74\x24\x0b\xcb\x35\x5a\x97\x7c\x23\xf0\x48\x79\x02\xa3\xd1\xa1\x70\x49\x3d\x68\xeb\x25\x83\xdf\x64\x30\x1a\xd0\x46\x0e\xa7\xc5\xda\x6a\x33\x5c\x5e\x32\x18\xeb\x12\x9e\x6b\x0c\x56\x97\xe1\xd2\xa0\x30\x1b\x72\xac\xe5\x06\xab\xcb\x71\xa9\x53\x18\x80\x07\xc7\xb3\x45\x61\x11\xf8\x0d\xb9\xdf\x32\x9c\x36\xab\xdb\x61\xb8\xaf\x31\x18\x4d\x09\xcf\x06\x83\xb5\xce\x70\x61\xfd\x6e\xb4\xce\xaa\xaf\xe4\xb9\x48\x16\xcc\x05\xc7\x63\x4d\x1a\xab\x26\x83\xc9\x71\xee\xaa\xe3\x01\x7d\x6b\x69\x7d\xef\xb2\x3a\xad\x1c\x16\xd4\xed\xe4\x38\x73\x18\x7c\x3c\xa0\xad\x86\xd6\x77\x28\xd4\x91\x3a\xb8\xc6\x10\xec\xe6\x83\x2b\x80\x34\xa5\x81\xa6\xc8\xe6\x80\xd6\x59\x1d\x69\xb0\x60\x62\x3a\xf9\xe0\x0a\x18\x2d\x69\xa0\x29\xb2\x12\x42\x4d\x36\xb2\x75\x09\x18\x1f\x8d\x35\x31\x7b\x82\x42\x11\x1b\x1d\x8a\xac\x3a\x1b\xe9\xa2\x95\x41\x51\x64\x63\x05\xe8\xc9\x2d\x71\xda\x6a\x49\xe3\xd9\xcd\xbf\x29\x34\xbd\xe6\xc1\x27\x18\x2a\x4e\xaf\x2f\x73\xda\xe3\x34\xd5\xe8\x48\xc3\xba\xc6\xca\x2a\xf3\xd1\xc8\x89\x40\xcc\xc5\x4b\x56\x90\x13\xcf\xba\x54\x86\x23\xbe\x06\xbf\xe5\xb3\x94\x58\xcb\xed\xbc\x2a\x6f\x5f\xac\x79\x79\x4d\xac\x2b\x20\x73\x50\x7c\x7d\x76\x72\xda\x17\xfd\x6c\xe6\x28\x88\x71\x62\x24\x43\xe1\x22\x6d\x4a\x16\x2d\x10\x86\x98\x32\xf8\x9d\x1c\x01\xe8\xe7\x5a\xbe\x10\xa1\xc1\x36\x43\xa4\xab\x21\xdd\x52\x07\x5f\x74\xba\x91\xc3\x11\x63\x27\x16\x34\x7c\x57\xe0\x08\x06\xd2\x90\x06\xa9\x9b\xb7\x2b\x16\x1e\x5b\xc0\x8d\x96\x65\x3e\x44\x07\x34\xc4\x39\x20\xb1\xe0\x9a\xd2\xbf\x1d\xb1\x8a\xd5\x01\xea\x58\xca\xb5\xd5\x99\x11\x33\x99\x77\x0a\x35\x1a\xe8\x4c\xc9\x92\xfd\x69\x4c\x56\x88\x65\x3e\x90\x08\xd5\x5c\xf7\x50\xfd\xaa\xb3\xb9\xde\x5c\x7b\xf9\xf2\x25\xf9\xdd\xdd\xde\x7a\xb9\xfd\x66\xb3\x41\x7e\xaf\xef\x34\xde\xbc\xe9\x6f\xf5\xc9\xef\xcd\x97\x9d\xd6\xce\x56\x7b\x5b\x9d\xef\x71\xe2\x6c\xa0\x53\xdf\x6c\xae\xbf\xd9\xee\x42\x03\xfd\xf6\xd6\x56\xa3\xd9\x86\x06\xb6\xd6\xea\xad\xed\x9d\x16\xf9\xbd\xb6\xd9\xdd\x5a\xeb\x6e\x43\xc3\x1c\xa1\x33\xab\x3e\xe0\x68\xef\x70\x7b\x7f\xab\xd1\xad\x43\xf8\xfd\x05\x3a\x24\x51\x36\xd7\x22\x49\xaf\xe8\xae\x7c\xdb\xbb\x22\xaa\x4c\x04\x24\x1c\x41\xb0\xbb\x6b\xed\x4e\xb3\x55\x87\x11\xdc\xde\xe9\x6f\x6d\xbe\x59\x87\x0e\xbe\x5c\x7f\xb3\xb9\xd5\xdf\xd9\x26\xbf\x1b\xf5\x56\xb3\xd3\x5e\x83\xc1\xe9\xb7\xb6\x9a\xdb\x8d\x9d\xfa\x99\x53\x35\x5e\x56\x29\x6f\x55\xec\x96\xf6\x52\x6a\x14\xdc\xd4\x2c\x36\xc7\xa7\x58\x80\xee\x35\x37\x8b\x74\x5c\xdf\xec\x7f\x92\x4a\xf3\xcb\x83\x4f\xa6\x21\x13\x2a\xba\x53\x91\xea\xa1\x0d\x54\x31\x0b\x20\x6a\x00\x2a\x35\x96\x1b\x3e\x48\x2f\x97\x33\x2a\x35\x00\x32\xbb\x52\x0d\xa0\x69\x5d\x6a\x82\x2b\x50\x8d\xa1\x45\xb6\xce\xbb\x48\xdc\x3f\x10\x52\x74\x5e\x39\x02\x03\xf8\x34\x9e\xb8\x0b\x24\x50\x20\x71\x16\x00\xf1\xf3\xd3\x1f\x6e\x08\x20\x13\x7d\xfa\xc3\x0d\x01\xb6\xe9\x4f\xa9\x1b\x02\x6c\x1a\x9f\xd2\xc4\x1e\xd1\x7a\x75\x95\xac\xb2\x2f\xe4\xd0\x7c\xe1\x27\x21\x91\x8e\x2d\x97\xb4\xfe\xc4\x43\x83\x89\x87\x86\x13\x0f\x05\x13\x0f\xe1\x89\xa5\x21\x3f\xf1\xd0\x20\xf1\xd0\x30\xf1\x50\x90\x78\x08\x27\x7a\x63\x3e\x41\xc5\x27\x08\xef\x9a\x2e\x23\x83\x04\x82\x8e\xc3\xc7\x86\xfe\x71\x48\x3e\x0e\xe9\xc7\xa6\xfe\x31\x20\x1f\x03\xfa\xb1\xa5\x7f\x84\x03\x03\xa6\x1f\xdb\xfa\x47\x91\xa6\xda\x57\xf3\x52\xf3\x2e\xe9\xb7\x82\x56\x53\x42\xf8\x77\x65\x03\x35\xac\x6b\x3b\x23\xcb\xc7\x9f\xa0\x95\x7c\x4d\xad\xfc\x31\x39\x0d\xcf\xce\xaa\x5f\x6d\x4e\x0c\xe0\xb5\xf3\xba\xd1\xad\xfe\xf9\xf4\x89\xca\x1a\x49\x1b\x68\xd4\xa8\x0c\x26\xde\x70\xe2\x05\x93\x2a\x5a\x41\xe3\x89\xdd\xf7\xe6\x06\x09\x85\x5c\xf8\xba\xd5\xa4\xaa\x36\x0b\xb4\xa6\x0e\xcd\x18\x79\x03\x5a\x7b\xdd\x09\xad\xa5\x43\x33\xa6\xca\x80\xd6\x6d\x3b\xa1\xb5\x75\x68\xc6\xdc\x4a\xd0\xfe\x5c\x5d\x65\x10\xd7\xeb\x4e\x88\x1d\x1d\xa2\x41\x10\xc8\x1e\x26\x9d\x4c\x62\x66\x9d\x2e\xf2\x05\x25\x71\x36\xa9\x64\x5e\x4a\xa6\xd5\xe6\xb4\x01\x34\x90\xad\xe0\x89\x7d\xca\x61\x45\x18\x4b\x8a\xfc\x01\xdd\x06\xb6\x2f\x40\xee\xd0\x2e\x59\x93\x0d\xab\x1b\x10\xac\x97\x81\xad\x36\x2c\x33\xe3\x26\x51\xa0\xea\x27\x68\x45\xa2\xd6\xe4\xf6\xd4\xda\xa9\x0c\x12\x6f\x98\x78\x41\x02\x23\x9e\xdc\x8d\x5a\xdb\x3a\xb4\xbb\x52\xab\x0a\xed\x4e\xd4\xda\xd4\xa1\xdd\x99\x5a\x1b\x3a\xc4\x7b\xa6\xd6\x04\x6e\xad\x0b\xc8\x35\x71\x90\x2b\x70\xd4\xc4\x46\xae\xc0\x88\x6d\x5f\x80\x45\x53\x72\x4d\x9c\xe4\x0a\x1b\x80\xad\x36\x6c\x0d\xa6\x85\x86\xce\xca\xf7\xe4\x74\x0c\x20\x43\x82\xd5\xaf\x26\x61\x92\xff\x6c\xa0\xca\x2e\x35\xcd\x1d\x12\xce\x1c\x58\x7a\xba\xcb\x4c\x78\x77\xa9\xf9\x6d\x40\xca\xd9\x46\x64\x97\x99\xe9\xee\x52\x43\x5a\x4c\xca\xf9\xd6\x72\x2d\x56\x0e\x8c\x65\x61\x47\x18\x58\xcb\xb5\x59\x39\x30\x4c\x1e\x90\x72\x43\x6b\x39\x30\x60\x56\x86\x45\x17\x6b\x77\x58\x6a\x8d\x3b\x98\x67\xfd\xff\xec\xbd\x7d\x97\xd4\x36\xd2\x28\xfe\x77\xf8\x14\xda\xfd\x9d\x85\x1e\xa6\x99\xb1\xe4\x37\x19\x98\xfc\x2e\x21\xf0\x4c\x6e\x20\x70\x80\xdc\xf0\x1c\x0e\x64\x65\x5b\x9e\x76\xe8\xe9\x9e\xa7\xdb\xc3\xf4\x64\x43\xce\xfd\x1a\xf7\xeb\xdd\x4f\x72\x8f\x4a\xb2\x2d\xdb\x92\xdc\x3d\x0c\x79\x36\xbb\xcc\x9e\x25\xdd\xed\x52\x55\xa9\xde\x54\xd6\x4b\x29\x67\x15\x6b\x92\x21\xf1\xc5\x30\xf0\x8f\x5f\xc3\x58\x43\x2e\xbe\x29\xab\xf5\xab\x65\x05\x11\x4f\xe2\x5c\x7c\xcb\x2a\x26\x77\x6d\xdd\x46\xd4\x80\x1d\xda\x3c\xe1\x45\x35\xb8\xb4\x11\xe0\x07\x9d\x79\x90\xe7\xc3\x5b\x88\x91\xba\x6f\x51\x6e\x66\x6a\x51\x8a\x6c\x32\x7c\x8b\x7e\x3b\x92\x17\x0b\xb7\x7b\x24\x1a\x88\xbf\x21\x9f\xf4\xad\xb5\xc5\x34\x99\x4c\x5a\xd0\x7d\x24\xe2\x83\x40\x99\xec\x09\x54\x81\xf0\x5b\x1c\x58\x12\xe8\xba\xa9\x14\x47\x9b\x3c\x6b\x3f\x6e\x9f\x3c\x0f\x90\xa9\xc4\xb9\x87\x6c\x2c\x71\x36\x75\x54\xbf\xa7\xa3\xbd\x0f\xb3\xbe\x63\x07\x36\xc7\x18\xae\xed\x38\x3c\x84\x37\x41\x04\xb7\xbb\xc8\x03\x59\xc6\x8d\x53\x67\xf2\xcd\x6b\x78\x9b\x8b\xdb\x2c\xc1\xbb\xf5\x1c\xdd\x60\x38\xc7\xe8\x08\xe9\xe9\xfb\xa7\xbd\xbf\x85\x5b\xbd\xbe\x99\xdf\xc8\x8e\xe1\x55\xec\xd8\x70\x98\x04\xb9\xde\xc1\x8e\x9b\xe3\x7a\xc7\x9d\xd7\xab\xe3\x9d\xdf\xab\xa4\x85\x1c\x77\xde\xa9\x8e\xad\x2f\x53\xe3\x5b\xe1\x5e\xc8\x95\x70\xa9\x5c\x75\x83\x45\x0e\xc2\xee\x82\xaa\x15\xf3\x9e\x82\x3a\x61\x2a\x9b\x2f\x17\xee\x00\x05\x5b\x09\x04\x54\x3b\xbb\x00\x5f\xed\xdb\x20\xe4\xe3\x9f\x07\x46\x22\xdb\x0d\x6d\x4d\xb1\x09\x4f\x3b\xfb\xa2\xe0\xe3\x47\xb9\xfa\x8f\xf4\x1d\x71\x05\x9e\x6c\xa6\xe8\x72\x8a\x7e\x35\x5d\xf3\x31\x99\x6c\xe0\x64\xe7\x25\xfc\xfb\x6b\x7b\x5b\xfb\xc7\x01\x1e\xe2\xc6\x33\xd9\xec\xdd\x9c\x5c\xee\xc9\xe3\xe4\xbf\x8b\x2f\xbf\xee\xed\xed\xdd\xb3\x61\xf3\x47\xb1\x09\x44\xbf\x0b\x8c\x2d\x6b\x16\x5c\xc1\x38\xae\x9b\x80\x01\x78\xbb\xdc\xbb\x39\xf9\x1d\x98\xb3\x63\x0c\xb7\x91\x99\x10\xda\x6f\x2d\x2a\x0b\x2e\x48\x25\x36\xd3\x85\x11\xd3\xe6\xfe\xfd\x05\x70\xb5\xf9\xfa\xeb\xaf\x27\x3e\xb9\xb3\xd0\x99\x92\x1f\x9c\xbb\x61\xea\xcd\x30\xf2\x1e\xb8\xed\x36\xc3\x58\x6f\xfb\x51\xfb\x5b\x60\xcf\x53\xfd\xb9\x5a\xca\xc8\x34\x44\x63\xb9\x9f\xc7\x02\x7d\xd5\x8b\x79\x94\x67\xb4\x3b\x59\xea\x09\xbc\xc9\x2d\xc5\xe2\x2d\xc3\x2e\x1c\x7b\xab\x8b\x9a\x5b\xd3\x76\x9b\xe1\xe4\x60\x6f\xab\x4d\x0d\xb0\xdd\x56\xa5\x5a\x39\xc7\x4f\x1f\x3c\xfc\x03\x54\xe3\x68\xfe\x9e\x5f\x42\xd3\x35\xcf\x56\xbc\xb2\xdc\x9d\x64\x51\x28\x5c\x39\x78\x8d\x0a\x95\x17\x19\x36\xaa\x39\x3e\x65\x59\xab\x1e\x7d\x8b\x95\x41\x43\x1d\xe0\xa1\x96\x4e\x59\x66\xd0\xd4\x57\x1f\xe5\x3a\xb0\x65\x6b\x54\x0d\x69\xbe\x9d\xe8\xe3\xdb\x69\x1c\x7f\xd9\xe2\xf4\xaf\x70\x64\xe5\x73\x2f\xdd\xf7\x0a\xab\x69\x84\xad\x25\xd3\x5e\x1e\x3f\xb8\x83\xb7\x58\xc9\x18\xde\x55\x7d\x9d\xeb\x17\x47\x70\xfa\xb4\x5d\xc2\x28\x17\x65\x35\x31\x14\xa0\xea\x2e\x69\xf0\x22\xcb\x59\x4a\x13\x43\x6d\x26\x6f\x93\xd0\x94\xe5\x59\xc1\x3b\x6b\x1c\x26\xc0\xcc\xcf\x09\xc7\x85\xd7\x7d\xf6\xe9\x4b\x20\xb6\x0c\xdd\x9c\x7c\x0f\x67\xd0\x07\x08\xb6\x99\x7b\x36\x4f\x17\x8b\x47\xa9\x79\xb2\x18\x12\x46\xf3\x54\x31\xbc\xae\x9a\x27\x8a\xc5\x23\xde\x4c\x13\x0f\x38\xb5\xce\x13\x5b\xe7\x84\x2d\x6f\x0b\x30\xef\x83\xe4\x09\x53\x4b\x2d\x98\x9f\x64\xe2\xdf\x2d\x81\xd1\x3d\x7b\x5a\xff\xd5\x13\x4a\x66\x44\xf5\x39\x87\x9f\xde\x94\xe8\x0e\xf2\xdf\xa2\x77\xea\x23\x6d\x3f\xe2\x40\xfb\x1c\xd9\xee\x8e\x54\x2c\x4d\x16\x70\x38\x56\xbe\x5b\xc2\xeb\x83\x8f\xcd\x65\x6a\xcc\x6f\x42\x30\xb5\x34\x61\x02\x49\x08\x48\x98\x7c\x93\x89\xe1\x80\x2c\x47\xfb\x40\xc8\x36\xd1\x88\xee\x23\xe2\x59\xa5\x06\xd3\x66\x93\x49\x8a\x6e\xa2\x4c\xe6\xb9\xe2\x63\x0e\x98\xbd\x4d\xc8\xe4\x2a\xec\xc8\x14\x1f\xba\x8f\x82\x31\x12\x29\x7a\x87\x32\xf4\x0e\xe5\x12\x73\xc4\xf3\x84\xa7\xcc\x54\x74\xa8\x87\x39\xda\x81\x79\xc9\xbb\xf8\x94\xa9\x5e\xdc\x41\xde\x26\xf6\x78\x10\xf8\x24\xb0\xd3\x3a\xbc\xdd\x90\xa3\xde\x1e\xba\x7d\xb8\x75\x5f\x04\x7e\x3f\x4c\x72\x9f\x93\xfe\x2c\x0f\xb2\xa8\x54\xf8\x4b\x6e\x9a\xee\x43\x47\x28\x33\x4d\xf1\x21\x20\x79\xff\x3e\xf2\x3d\xd5\x4b\x50\xbf\xf1\x6e\x51\x74\x84\x4c\x7c\xb0\xed\x4e\x6b\x6d\x35\x19\xa8\x26\xd1\xea\xc9\x36\xd6\x3f\xe1\x8d\x3a\x13\x81\x30\x61\x38\xa8\x7c\x82\x3a\x93\x80\x30\x59\x98\x99\x61\x7c\x7d\xa2\x30\x37\xc3\x04\xfa\x24\x21\xef\xc3\x7c\x99\xe0\xfb\x67\x9d\xe0\x13\xb9\xf0\x41\x31\x5f\x2e\x57\xfa\x9c\xdb\x21\x0c\xd4\xea\xef\x93\x88\x40\x2d\x84\x16\xf3\xc8\x3c\xdd\x60\x9a\xee\x33\xcd\xd0\xed\x38\x0f\x64\x9c\xae\xfb\x33\xce\x06\x7d\x99\x42\x18\x4c\x06\x88\xf4\x79\xa7\xd9\x03\x68\xe0\x9a\x38\xe8\x26\xe4\xdd\x39\x03\xf1\xec\xcb\x74\xc1\xb5\x4e\x17\x80\x3e\xb6\x98\x29\x30\xab\xa5\x9d\x24\x50\xaa\xb1\x1f\x9b\x12\x00\xf6\x69\x01\xfa\xa7\x2e\xb0\xb1\x9e\x31\x12\x46\x9f\xbb\x36\x86\xa2\xf2\xef\x33\x7d\x30\x98\x1e\xd0\xdf\xe1\x49\x18\x75\xde\xe2\xb5\x53\xd8\xfd\x59\x01\x42\x82\xed\xe6\x05\x04\x60\x07\x27\x7c\x97\xc8\xff\xd0\xb9\x81\x0c\x7b\x61\xc2\x73\x2a\x5e\xf9\xfd\x28\xce\xf2\xd0\x8b\xe1\xb3\x17\x7b\x79\x8e\xe1\x73\x11\x7b\x3c\x4c\x7c\xf3\x9c\x41\x51\x64\x9e\x97\xfa\x30\xb9\x10\xd1\x90\xe2\x10\xcb\xcf\x41\x91\xd0\x82\x01\x82\x94\x17\x2c\x28\x58\xb0\xc3\x74\xc1\x56\x99\xa7\x16\xf6\x95\xe8\xb4\x96\x8e\x53\xb4\x10\x51\x9b\x74\xe6\xce\xd1\x30\x79\xb1\x2c\x2c\x7d\x19\xa2\x47\x46\x5c\x42\x82\x5d\x07\x69\xd1\x64\x64\x98\xee\x78\xc7\x60\xa0\x26\xc4\x7c\x88\xfd\xcb\x50\xfd\x09\x43\xb5\xd0\xca\x76\x83\xb5\x51\x39\x9d\xe1\x5a\x2a\xc8\x39\x60\x13\xd2\x3f\xea\xac\x9d\x6b\x56\xc3\xd1\xdd\x38\x11\x03\x78\xf2\x65\x5e\xff\xbf\x67\x60\xfe\xf3\x1d\xcb\xfb\x4e\x5e\xe2\x50\xfe\xda\x9c\xca\x45\xab\xe5\xf9\x22\x47\x59\xf7\xbc\x9e\xd6\x83\xe3\xfe\xd5\x29\xdf\x77\x97\x01\xea\x89\x5a\xde\xe2\x90\x4f\x4c\x19\x0c\xd2\x97\x94\xcb\xf5\xf3\x55\x79\xca\x27\x0b\xe3\x30\xb6\xfe\xaf\x55\xf5\x43\xfd\x9e\x2f\xbe\x4c\x16\xfd\xf7\xcc\x66\x22\x58\xaa\x13\x1d\x21\x72\xaf\xfe\x7c\xff\x48\x62\xa8\x7f\x70\xcc\x0d\xff\x65\xb2\x40\x7f\x53\x60\x7b\xd6\xf9\x42\xe5\xa3\x05\x9b\xaf\xf9\xf8\xae\xc0\xfe\xfc\x58\xfd\x3e\xbe\x3a\xef\xbe\xe1\x1a\xc4\x72\xc2\xab\xc7\x2b\x06\x9f\xd9\xfc\x9b\xb2\x5a\x1b\x04\xd4\x2c\xe1\x2f\xd0\x1d\x34\x59\x40\x65\xcf\x3d\x74\xbb\x33\xf9\xd1\x9f\xc9\xd2\x68\xd5\xb3\xd4\x7a\x65\x76\xf8\x0d\x14\xd2\xab\xdf\x73\x31\x2b\xe7\x1c\x4d\xd4\xb3\xfb\x48\x6d\xc9\xec\x4b\xb1\xd5\xa6\x55\xd0\x0d\x0a\x6a\x95\xf2\xf1\x1b\x09\x04\x65\x47\x07\x82\x00\x5b\x38\x5b\x5e\x4c\x16\x53\x84\xd1\x21\x22\x7b\x5b\x54\x6c\x47\x70\x13\xca\x2e\x68\xfd\x3d\x63\xf1\x6c\x89\x62\x7f\x7f\x64\x2a\x74\xd1\x81\xa8\x33\xa4\x49\x8b\xf3\xea\x6b\x6c\x22\xf1\xde\x2e\x9b\x1e\x66\xe8\x9f\x7d\xa5\xed\xf8\x60\x3d\x2f\x33\x3e\xf1\xf6\xbe\xac\x7a\x6d\xbd\xea\x35\x78\x54\xc0\xa3\xd0\xf4\xe8\x04\x1e\x0d\x16\x8c\x20\x67\x81\x47\xf1\x27\x2f\xa3\x45\x8e\x5a\xf7\x7f\xf4\x32\xda\x09\x3b\x3d\x65\xde\xa6\x59\x4c\xc3\x03\xa1\x0c\xa1\x61\xa3\xf1\xa4\x6e\x79\xff\x3e\x22\x72\xd1\xab\xfe\xe5\xeb\xaf\xbf\x46\xf1\xde\x1e\x42\xef\xcc\x98\xba\x7f\x1d\x4c\x38\x18\x60\xc2\x74\x6f\x6f\x3b\x4c\xdd\x76\xbe\x31\xbc\x74\x7a\x82\xdb\x7e\x1b\x37\xc9\x77\x81\xb5\x6e\x63\xc9\xac\xd6\x6d\xbc\xa9\xeb\x4d\x6f\xc9\x6c\x17\x93\x3f\xc4\x94\xec\xd8\xed\xba\x9d\xf9\x4e\x02\xd4\x1a\x8e\x52\xe2\xbe\xea\x39\x14\xf9\x55\x3d\xdc\x77\x2e\x98\xda\x56\x3f\x33\x38\xd5\x38\xe1\xe8\x26\x2a\x60\xb3\xdb\xef\xe2\xe3\x89\xed\x0a\x97\x53\x06\x15\xe6\x18\xba\x89\x52\x00\x67\x72\x75\xf0\x1d\x52\xeb\x84\x26\xfe\x21\x59\x29\x4f\x04\xe3\xcd\x52\xab\x5a\x6c\x53\x6b\xad\x72\xeb\x9f\x7c\x82\x13\xed\x09\xf6\x3b\x8f\x3a\x8d\xcc\x63\x5b\x43\x0c\xee\xa9\x99\x70\xb0\x71\x59\x39\x99\x43\xbb\x48\x61\x94\x4f\xb0\xf6\x04\x63\xfd\x51\x2c\x77\xb6\xca\x47\x24\x34\x8f\x78\xb0\x80\x2c\x28\xcd\xd0\x7e\x4d\x76\x5f\x08\x75\x5f\x5e\xf4\x66\x5d\x3c\x86\x86\x04\x1d\xd5\x82\xd9\x17\xa2\x35\x51\x10\x81\xeb\xc4\x80\x40\xc4\xba\x7e\x9d\x76\xf1\x27\xc2\xa3\x29\xfd\x82\xda\x99\x70\x5b\x02\x36\x2d\xf3\xa1\x91\x25\xd2\x7e\xb5\x75\x34\xb2\x1c\x3a\xa9\x84\x20\x2a\x62\xa2\xf5\xef\xb2\x34\x2a\x61\x42\x05\x03\x25\xc3\x0b\x33\x4c\xa4\x60\xa0\x24\xf8\x89\x19\x26\x56\x30\xe0\xf3\xb3\x2f\xcb\xb0\x5f\x96\x61\xbf\x2c\xc3\x0e\xb3\xcd\x2f\xcb\xb0\xff\x94\x73\xbc\x61\xb4\xf3\x1c\x6f\x18\x8d\xce\xf1\xea\xef\x6c\xc3\x39\xde\x30\xfa\x32\xc7\x7b\xed\x73\xbc\x61\xb4\xed\x1c\xaf\x49\x39\xdd\x39\x5e\x50\x90\x7b\xd3\x76\xb3\x76\x66\x5e\x9a\xa5\xde\x9f\x7a\x69\x76\x13\x05\x7f\xc8\xc5\x05\x0d\x9d\x2f\xb3\xc0\xdd\x59\xe0\x4d\x04\x6b\xaa\x07\x9b\x28\xd0\x7e\x7f\x1d\x05\xaa\x4a\x37\x40\x1c\x68\x75\xa2\x77\xaa\xe9\xa6\xf5\xef\xc5\xf1\xb3\x9f\x9f\x3d\x7e\xfc\xf2\xd1\xab\x97\xfd\xd9\xe2\xe7\xdf\xfd\xfc\xdd\x0f\xdf\x3e\x7a\xfd\x68\x78\x2b\xf7\x8b\x67\x3f\xfe\xf0\xed\xcf\x0f\x9f\xfd\xf0\xf2\xd5\x83\x1f\x9a\x96\x1a\x39\x39\xad\xfc\x70\xbb\x69\x65\xad\xc5\x6a\xb6\xac\x8b\xb6\xf4\xe6\xa4\x6b\xd2\xe2\xed\x1a\x4f\xd1\xa5\xad\x54\x79\x25\xa7\x44\x2a\x74\x1f\x91\xe0\x1e\xaa\x0c\x53\x22\x5a\x9f\xdf\x6c\xd0\x3e\x0a\xd1\x6d\x74\x29\x4f\x0f\x56\xf5\x21\x4d\xf8\x44\xf6\x60\xa6\x12\xfd\x0d\x45\x83\x5c\x04\xd2\x40\x7e\xf1\x1a\x1d\xa1\x4b\xf4\x37\x14\x9a\xb2\x44\x7e\xf1\x9f\x02\x2b\x41\xb7\x91\xa0\xe3\x0b\x3a\x7b\x06\xe0\x8d\x9c\x96\x7b\xdd\xfb\xf9\x52\xfe\xfc\x9f\x96\xa9\x60\x4d\x6c\x67\x25\x2a\xe1\x3a\x01\x83\xd0\x1a\xc9\x6c\xa4\x64\x36\xf2\x80\xe6\xc6\x20\x98\x06\x54\x4a\x17\x5d\x4a\xd0\x4b\xcb\xb4\x52\x6b\x20\x5d\x31\x5e\xc2\x05\x3f\xc3\x5e\x0b\xb9\xf6\xbb\xfe\x71\xb4\x6f\xbd\x55\x8e\xae\x35\x3c\x79\xfc\xf2\x85\xe0\x75\xe3\x61\x93\x31\xe8\xf7\x4e\x58\xe6\xc7\x04\x18\x90\xa8\x8d\xf5\xe9\xfa\xa2\x67\x5b\x46\xb0\x27\x35\x98\x45\x84\xea\xe6\x89\x5f\xd0\x7d\x14\xdf\x43\xbf\x38\x66\xe6\xa0\x0f\x70\x34\xd5\x5c\x15\xa5\x26\x9f\x96\xd5\xf3\xe5\x1a\xea\xb8\x0a\xab\x82\xcb\x72\x7f\xd9\x43\x77\x90\x69\x37\x75\x8d\x5c\x6f\x74\x1f\xa9\x7a\x11\x26\x60\xf1\x37\xe8\xe0\xbb\x23\x04\x64\x34\x2c\x16\x5a\xdd\x1d\xd5\x3a\xd5\xaf\x8f\x80\xac\x7d\x73\xf5\x80\xf2\x53\x8d\x72\x07\xd5\x1d\xc3\x7b\x4f\xc3\xc0\x76\x53\x4b\x9a\x61\x2d\xf8\xa6\x02\x03\x1a\x51\x0b\xb5\xef\x44\x3f\x3c\x44\xcf\x57\xe5\x69\x59\x95\x1f\x38\x3a\x5b\xce\x2f\x17\xcb\xd3\x92\xcd\xd1\xf2\x03\x5f\xa1\xff\x78\x3c\x21\x7b\x77\xd1\xe6\x1d\x45\xfb\x68\xf3\x2e\x82\x7f\x43\xf8\x37\x10\x61\xc6\x8c\x52\x59\xb4\x24\x2f\xcf\x0f\xbc\x43\xde\x26\x76\x6c\x99\xb7\x30\xa7\x30\x1c\x19\xed\x63\x64\xd1\xab\x17\xe0\xe5\x1c\x9f\x1a\x7e\xea\x02\x63\x7d\x9d\x4d\x07\xf6\xb3\xb7\xeb\x6a\xca\x1a\xfc\xa7\xe2\xa7\x67\xcb\x15\x5b\x5d\x76\x6e\xa2\x13\x2e\xf0\x4a\x1f\x88\xac\xab\x94\xc6\x5b\x67\xcc\xde\xff\xca\xd8\xb3\x31\xbe\x7b\x6b\x3b\xfe\x76\x2b\x3b\x7e\x67\x5d\xc7\x77\xad\xea\x5c\xff\x55\x02\xcb\xf3\xea\xec\xbc\x7a\x02\xaf\xd6\x1d\x58\x04\x49\x7a\xce\xd7\xe5\x8a\xe7\xda\x45\x03\x69\x59\xad\xeb\x82\xd0\xb2\x71\xe7\x6d\xa1\x6e\xfc\x6c\x31\xaf\xd5\xa4\xd5\xe0\x66\x2b\x7e\x17\x11\x12\x4c\x11\x09\xa3\x29\xf2\x69\x30\x45\x21\x26\xfd\xc6\xea\xce\x82\xbb\xe2\x99\xfe\xa8\x7f\x69\x41\xfd\xd2\x6c\xbd\xb7\x40\xef\x5d\x0f\xdb\x15\xee\x2f\x80\x99\x5a\xb8\x09\xb1\x7e\xf7\xae\xbf\xbd\x79\x6b\x89\xf6\x5b\x98\x9a\xf8\x03\x3c\xd2\xe4\x16\xfc\xa2\x31\x3b\x58\x84\x1b\x2b\x25\x00\x9c\x34\xb7\xf5\xc2\x08\x10\x79\x1e\xba\x83\xc4\x40\xdb\xdc\x94\xa0\x4b\x42\x64\x2f\x3e\xf9\x5c\x2b\x7a\x86\x89\x39\x83\xd0\x8c\x93\x67\x75\x27\x9e\xb0\x05\xcc\xfd\xf4\xba\x76\x88\x88\x69\x0e\x2d\x5d\x2f\x57\xe9\xb8\xfc\x7b\xe8\x3f\xa5\x92\xe0\x53\x52\xa2\xee\xa2\x98\x90\xb5\x75\xda\xfc\x29\x81\x3b\xe8\xfb\xe0\x22\xd6\xbb\x8a\x59\x58\xaf\xa0\x16\xe4\x9d\xf5\x04\x49\xa7\x90\x20\xb9\x4a\x05\x41\xd2\x29\x1d\x48\xae\x5e\x33\x50\x31\x8c\xc7\x38\xc6\x5d\x96\xf1\x95\x78\xc6\x5d\xa6\xf1\x2e\x5c\x1b\xf5\x20\x8d\xab\x99\x1a\x29\x17\xd5\x52\x5a\xb3\x59\xd3\x73\x06\x93\x79\xb5\x3b\x1b\x44\x21\x20\x0e\xe0\xbe\xd9\x77\x47\x20\x17\x1b\xcc\x7c\x79\x81\x14\xcc\xf8\x6a\xc4\x0b\x31\xc0\xae\x2d\x3e\x20\x13\x65\xf0\x03\xf9\x51\x26\xbd\xf0\xd9\xee\x02\xaf\x66\xbc\x62\xc3\x27\x3b\xbc\x35\x68\xc8\x9e\x96\xe2\x15\x64\x7e\x7e\xba\x80\xce\x19\xdc\xaa\x96\x60\x9d\x66\x4f\x51\x9b\x49\x1b\x81\x77\x7c\x27\xd1\x69\x74\xb4\xd4\xbe\xa1\x58\x08\x89\xbf\x3a\xf5\x6c\xb4\xe7\x82\x7d\xa2\xc1\xce\x97\x17\xd6\xbc\xd4\x2a\xad\x57\xc6\x3c\xc7\xd4\x93\x57\x42\x0b\xaf\xde\x6c\x6c\xbc\xbf\xda\x48\x5b\x3b\x82\x1e\xd8\x81\xc0\xd8\x8e\x80\xf5\xed\x76\xdf\x5c\xcd\x0c\x1c\x61\xb5\xed\x51\x00\x5d\x9a\x08\xbd\x04\xf0\x7a\xe8\x5a\x2c\x7f\xb5\xc1\x2d\x38\xde\x06\x5c\xda\xd7\xab\x0d\x76\xe9\x51\xc1\x3e\x69\x60\x41\x8f\x4e\xf3\x5e\x9f\xaf\xc0\xa3\xe4\x75\x22\xc2\xd4\xc7\xad\xfc\xd5\x26\x50\xb1\x00\x4d\x26\x8a\xb7\xe6\x68\xb0\xa2\xaf\xce\x07\xdb\x5e\x6f\x00\xdb\x93\x06\x9b\x8c\x1a\x12\xdb\x93\x1e\xb6\xa7\xe3\xd8\xfe\x50\xa7\xea\x84\x42\x87\x7d\xa2\x7e\x48\xb4\x98\x29\xda\xe9\x6d\xef\xc5\x6c\x89\x9e\x97\x0e\xcb\x16\x24\xeb\x3b\x1f\xf1\x3d\xed\xab\x4c\xe5\x9a\xef\x9f\x6c\xf2\x1d\xc9\x35\x68\x5d\x66\x2c\x80\xa4\x05\x8d\x05\xa4\x1a\xfa\x49\x0b\x6d\x0f\x49\x30\x58\xcc\x96\xcf\x64\x96\x72\xd4\x99\x0f\xd3\xf9\xb2\x76\xf6\xc5\x12\x12\x3d\x47\x88\x17\x2f\xd0\x2d\x89\xd1\x89\x07\xcd\x57\x26\x75\xa7\xef\xdf\x6f\x99\x04\xd3\xae\xfb\x07\x57\x69\xfa\x04\xdd\xd1\x9e\xdb\x0c\x1d\x75\x5d\xa7\xc1\x61\x44\xfe\x74\x47\xe4\xdd\x39\x8f\xb6\xbb\x5b\xcd\x78\xf4\xbb\xac\xb8\xd2\xd0\xc0\x6c\xc7\x90\xb9\x28\xb8\x72\xcf\x9f\x8e\xd0\x78\xb2\x23\x0d\xd7\xd8\xb6\x62\x8b\xf5\xd9\x72\xed\xb4\x12\x08\xbf\xcf\xcb\x27\xd2\x31\x5e\xbd\xd1\x26\x14\x5b\x3b\xb4\x8e\x79\xb2\xe1\x36\x03\x9f\x82\x1c\x1b\xfd\xac\xf1\xe3\xac\x44\xac\x82\x21\x10\xe2\xa5\x39\x27\x7c\xe5\x41\x1f\x8c\x45\x5b\x9b\x97\x23\xaf\x09\x00\x46\xb8\x57\x5e\xdd\x1d\x09\x6d\x73\xf9\x57\x5e\xdd\x19\x05\x67\x19\xb7\x0e\x0f\xd1\xc3\x99\x2b\xf8\x6d\x3f\xac\x5f\x71\xc8\x18\x0f\x8d\x48\x0b\x5f\x75\x1c\x6e\xc6\x95\x11\xe3\xde\x2d\xa4\xd6\xad\x5e\x35\x06\xb7\x7d\x93\x0d\x6e\x1a\x4d\xb4\x24\x64\x6f\x9b\x01\x50\x22\x20\x3d\x04\x64\x80\xc0\x29\x45\x91\x7b\xac\x96\x17\x0e\x21\xce\x35\x6f\x78\xd5\xba\xc6\x3b\x34\xf9\x5d\xb1\x2f\x7f\xb8\x59\x33\x03\x5f\x5d\xf1\x63\xae\x79\xcd\xab\xd6\x85\x74\x8c\xf0\x43\x8b\x71\xbe\xbc\xf8\xf4\x09\xda\xef\x96\xa6\x37\x92\x81\xbe\xad\x9e\xd6\x99\x86\x14\xe3\x5b\x6f\x32\x13\x9e\x8f\xbe\xb4\x75\xb0\xd8\x1c\xb1\x93\xaf\x74\x5b\x08\x97\x74\x2c\x76\xfc\x73\x6d\x8b\x32\x4c\xd2\x5c\xfb\xae\xa8\x01\x7c\x33\xe3\x23\xda\x0d\xa7\x81\x6e\xc3\xe4\xd5\x70\x1e\xe8\xaa\x7b\xa9\xf0\x55\xb6\x52\xc1\x26\xa9\x8c\x97\xf3\xee\x7e\x27\xbc\x87\x0e\xbb\xfc\xef\xa1\xdb\xfd\x1f\x80\x38\x2c\xd0\x34\xbb\xb9\xfe\x49\x36\x41\x7d\xf2\x1c\x9e\x3e\xcd\x58\x33\x6f\x9c\x83\x44\x87\x46\xd5\xeb\x20\xf5\x2c\xe0\x10\xe7\xa1\x71\x33\xdd\xcb\xff\x3a\xe7\xfc\x57\x3e\x44\x3a\x63\xeb\x59\x6d\xdc\x5b\xdd\x45\x3f\xe0\xe2\x53\x26\x0b\xc7\xe7\x84\xb6\x4f\xe9\x6d\xe9\xfc\xee\x73\x88\x2d\x3d\xfb\xac\x9c\x96\x1a\xaa\x89\x39\x3d\xe1\xdc\x69\x6e\x4e\x43\xa5\xa6\xe7\x74\x54\x57\x9d\x57\x6c\x45\xe1\xee\xc4\x93\x41\x27\x9e\x5c\xb5\x13\x4f\x06\x9d\x78\xb2\x5b\x27\xcc\xaa\x92\xa6\xab\x9c\xac\x5a\xa2\x15\xaf\x56\x25\xff\xc0\x0d\x1b\x10\x91\x3a\xdc\x2d\xe3\xc1\xd9\xf9\x7a\x56\xb3\x61\x12\x91\x01\xf2\xe9\x10\xf2\xd3\xcb\x13\x1b\x4e\x0f\x35\xa4\xa7\x43\x17\xb6\x9e\x27\xba\xa6\x5d\x93\xf6\xf8\xa5\xb6\x50\x1a\xc2\x59\x73\xd8\x69\x8b\x08\xb1\xe5\x62\x4e\xfd\xb1\xdd\x9f\xe9\x14\xfb\x97\xed\x9a\x57\xdc\xae\xe9\xef\xba\x59\xd3\x1f\xdb\xaa\xe9\x3b\x36\x6a\xfa\x5f\xb6\x69\x5e\xf7\x36\x4d\x7f\xcb\x4d\x9a\x06\xb5\x74\xb6\x68\xfa\xdb\x6c\xd0\xf4\xed\xc7\xf0\x9b\x8d\x87\x77\x69\xf0\xf1\xed\x94\xe2\x7f\x91\xed\x9a\xfd\x02\x3b\x21\x26\x7f\xd8\x1e\xce\xba\xdc\x8e\xa0\xf9\xe7\x2a\xb7\x73\xa5\xdd\x96\xea\x71\xbb\xdb\xb3\x86\xd9\xa9\x20\x4f\x88\x49\x67\x5b\x48\x88\x89\x75\x9b\x09\xdd\xb2\x20\x8f\x00\xec\x6c\x35\xa1\xaa\xaa\x45\x88\xc9\xb5\x1d\x21\xd6\xbb\x6f\xad\xc9\x33\xd8\xe4\xe0\x6d\xb2\x34\x4d\x93\x3c\xcc\xa7\x5a\xc1\x9e\xbd\xa9\x09\x32\x22\x09\x23\x09\x61\x7a\x39\x9f\x3d\x43\xdd\x1e\x43\xd3\x04\x87\x89\x87\x43\xa6\x57\xff\x31\x13\xc1\x21\x29\x78\x26\x6b\x06\xd5\xb5\x81\xb6\x24\x12\xc5\xbe\x4f\xa2\x48\x96\x15\x52\x95\x83\xcc\x44\x28\x4f\x83\x80\xd1\x58\xaf\x2b\xb4\x25\x91\x3c\xf5\x32\xc2\xbd\x5c\x2f\x43\x64\x26\x12\xc4\x69\x18\x50\x9c\xeb\x45\x8a\x7a\xa9\xe9\x75\x57\x29\x12\xf6\x74\xc5\x2a\x45\x38\xfa\x52\xa6\xe8\x9a\x72\x22\xba\x73\x99\x22\xd1\x64\x2c\x2f\xd2\x63\xc6\x30\x33\xa2\x5f\xca\x14\x5d\x7f\x6e\x44\xb7\x2d\x53\x64\x54\x4e\x37\x3f\xa2\xa3\x65\x8a\x7c\xea\x2e\x53\x24\x86\xf1\xbb\x94\x98\xb2\x25\xf2\x2f\x92\x2d\xfd\x4b\x1f\x6e\xb9\xde\x83\x2d\x9f\xe9\xc8\xca\xd5\x93\x28\xf9\xa8\xe9\xae\x42\xf4\x73\xbd\x83\xd7\x70\xd7\x4d\x77\x93\xef\x01\x3b\x3b\x9b\x5f\x4e\xd4\x8f\x53\xc4\x56\x27\xe7\xa7\x7c\x51\xad\xfb\x77\xf2\xe8\xc7\x67\x5a\x7e\xa0\x94\x52\x4b\xa2\x47\xde\xdb\x04\x84\x32\x52\x24\x90\x57\xe4\x31\xa1\x8c\x13\xb2\x37\x1d\xc2\xc5\xd8\x8f\x83\x20\x81\x32\x83\xc4\xe7\x45\x14\x66\xb9\x9e\x1a\x0c\x1a\xa4\x61\xe6\x15\x69\x56\xc0\x05\x08\x59\x90\xfb\x29\x29\x4c\x88\x79\x92\x86\x79\xca\x42\xb8\x3d\x1b\xd3\x24\x4f\xd3\xcc\x89\xd8\x4f\xc2\x28\x23\x61\x0a\xe9\x8c\x1f\xd0\x34\xf4\xa9\x09\x71\x98\x14\x18\xe3\x02\x38\x4e\x23\x2f\xcc\x3d\x9c\x38\x11\x27\xc4\x2f\x28\x61\x70\xe5\x36\x2b\x70\x12\x14\x49\x6a\x42\xcc\x52\x9c\x85\x3c\x07\x8e\x73\x16\xe5\x14\x63\xea\x44\x9c\x53\x2f\x66\x4c\xca\x98\xf9\x9e\xef\x91\xc0\x28\x63\x4c\xa8\x1f\xa6\xf2\xce\x88\x20\x8c\xbd\xa8\x48\xb9\x13\x31\x09\x7c\x4c\xc3\x14\xee\x8e\x08\x38\x0f\x52\x42\x33\xa3\x28\x42\x2f\x8b\xf3\x0c\x2e\x10\xcf\xc3\xa2\x48\x03\x4e\x9c\x88\x63\x92\xf2\x30\x8f\x41\x14\x05\x89\x53\x9a\x44\x46\xe5\x51\x2f\xe7\x29\x96\x97\x57\xf8\x29\x8e\x92\x28\xc5\x6e\x19\xa7\x79\xe6\x45\xb2\x42\x25\x09\xb3\x18\x13\x3f\x34\x21\xce\x70\x92\x16\x58\x32\x90\x15\x51\x42\xa2\x24\x70\x22\xe6\x41\x92\x46\x49\x06\xb2\x4b\x78\x81\x03\x96\x1b\x65\xcc\x8b\x94\x07\x31\x85\x6b\xc4\x7d\x1a\x14\x24\xe4\xbe\x13\xb1\x57\x64\x38\xc9\x33\x68\x40\x53\x9a\xe5\x61\x6a\xe4\x98\x04\x5e\xc6\x70\x96\xc1\x25\xed\x31\xcb\x92\x2c\x0a\xdd\xca\xcb\x79\x42\xb2\x08\x1c\x24\x4c\x48\xea\x91\xd8\x88\x38\x60\x71\x40\x03\x06\xef\x08\x11\x67\x11\x0f\xa8\x9b\xe3\x30\x4b\x3d\x96\xe4\xc0\x49\x9a\x07\xb8\x48\xf3\xc0\xe8\xd2\x51\x91\x50\x9a\x03\x62\xea\x63\x1c\xfa\xa9\x9b\xe3\x84\xfa\x3c\xc4\x21\x01\x97\xe6\x51\x94\x17\xcc\xec\x20\xd4\xc7\x59\x14\x41\x86\x4f\xf2\x34\xf0\x09\xf6\xdc\xb1\xc2\xf3\x7c\x12\x67\x54\xde\xf9\x5e\xa4\x04\xfb\x46\x73\x4b\x8b\x30\x89\x8b\x4c\xd5\x37\xe5\x85\xc7\xb9\xdb\x2a\xb2\x88\x7b\x5e\x5a\x80\xe1\xfb\x39\xa3\xb4\xc8\x8c\x56\x91\x87\x2c\x4e\x70\x00\x88\x13\xdf\x63\x2c\x26\x6e\x51\x78\x51\xc6\x22\x3f\x94\xd7\xbb\x78\x9e\x4f\x89\xd9\x41\x70\x40\x12\x92\xc8\x77\x2f\x8f\x79\x3c\xe2\xb1\x5b\x14\x24\x4e\x63\x8f\x51\x08\x2e\x41\x94\x13\x52\x14\x46\x97\x26\x1c\x0b\x31\x81\xc8\xc2\x8c\x44\x59\x42\x22\x27\xe2\x20\x27\x59\x94\x17\x60\x15\x21\xcb\x02\xc2\x78\x6e\x8c\x15\xbe\x4f\xbd\x1c\x83\xc8\x92\x3c\x09\x53\x3f\x2f\x9c\x88\xa3\xd0\x63\xb1\x1f\x06\xd2\x41\x58\x11\xf9\x39\x37\x9b\x5b\xc4\x3c\x96\x42\xdc\xf6\xb3\x38\x4e\x09\x73\x87\x4d\x8a\x33\x92\x25\x44\x46\xb7\x98\xe7\x8c\xf3\xc8\x84\x38\x21\x31\x21\x99\x14\x19\x0e\x28\xf1\x43\x3f\x75\x22\x66\x24\x2d\x38\x65\x32\xce\x66\x05\xf6\xfc\xc8\xe8\x20\x8c\x62\x16\x45\x01\x70\x9c\x66\x01\xf1\x3d\xcf\x1d\xdd\x32\x12\xa4\x34\x8d\x3d\x88\xb3\x5e\x41\x93\x38\xc1\xc6\xe8\x16\x47\x59\x88\x19\xc8\xd8\x8b\xc2\x20\xe5\xbe\xdb\x2a\x72\x9c\x10\x4e\x71\x02\x88\x23\x5e\x84\x04\x1b\xc7\xbc\x3c\x4a\x12\x2f\x22\xa0\x8b\x30\x8c\x42\x96\x8c\x78\x5e\x11\x78\xdc\x0f\xa5\xec\xc2\x38\xc6\xc4\x23\xcc\x68\xc7\x5e\xc4\x98\x27\x7b\xe6\x93\x34\xcd\x71\xea\x56\x1e\x4e\x58\x90\x61\x0c\x61\x33\xa5\x39\xc9\xbd\xcc\xc8\x31\xe6\x7e\x1c\x65\x9e\xb4\x63\x1c\x60\x96\x86\xee\xe8\x46\xe2\x80\xc6\x71\x00\x76\x9c\x17\x94\xf3\x34\x49\x4c\x88\xfd\x20\xf5\xd2\x2c\x85\x9e\x71\x9c\xa4\x01\x1d\x31\x37\x3f\xc1\x99\x97\xa5\xa0\x94\x2c\xcc\x92\x90\x45\xbe\x31\x1e\xf3\x9c\x32\x16\x40\xd8\xe4\x7e\x80\x29\xcb\xdc\xe6\x16\xa6\x49\x96\xb1\xa0\x90\x23\x43\xe4\x73\x3f\x36\x22\x8e\x28\xe1\x51\x21\x83\x55\x1e\xa5\x24\xa5\xcc\x2d\x8a\x38\xa0\x05\x25\x1c\x1c\x24\xcc\x79\x91\x12\x73\xac\x88\x29\x0b\x23\x5f\x8e\x34\x81\x8f\x63\x52\x44\x6e\xab\xa0\x41\x46\x63\x8a\x65\x26\x84\x0b\x8f\xa5\xb1\x31\x6c\xd2\x2c\x8b\x3d\x22\x95\x87\x59\x14\xf8\x09\x77\xe7\x6e\x89\x97\xf2\xa2\x28\x98\xcc\x22\x23\x1f\x73\x62\xb4\x0a\x16\x84\x5e\x94\x71\xf0\xbc\x9c\x53\x92\xe6\xdc\x9d\xbb\xa5\xbc\x48\x98\x5f\xc8\x91\x81\x64\x51\x9c\x60\x73\x5e\x11\xc5\x38\xa6\x85\x1c\xc2\xfc\x98\x84\x3e\x71\x2b\x2f\x63\x24\xf6\x79\x06\x32\xe6\x8c\x44\x11\x4e\x8c\x32\xce\x31\x8d\x52\x2a\x87\x26\x22\x0c\x89\x74\x27\x01\x87\x89\x08\xcb\x59\x9c\xe7\xe0\x20\x59\xce\x3d\x9e\x62\x63\xd8\x2c\xc2\x38\x0f\x8a\xb8\x50\x83\x2e\xcf\x71\xec\xb6\x63\x2f\x2a\xbc\x28\x96\xf9\x42\x4c\x70\x1c\x15\xa9\xd1\xa5\x3d\x16\xf9\x71\x9e\x81\x83\x30\x92\xd1\x84\x32\xf7\x08\x82\xb1\x5f\x24\xd4\x0b\xd4\xc4\x5d\xe2\xe5\xcc\xc8\x31\x4e\x63\xec\xa5\xbe\x8c\xc7\x3e\xce\x82\x18\xbb\x65\x4c\x68\x9e\xc6\x71\x11\x4a\xab\xf0\x82\x38\xa7\xc6\x78\xec\x93\x8c\xb1\x34\x06\xab\x08\xbc\x2c\x26\x41\xe2\x76\x10\x3f\x4b\x78\xca\x3d\x10\x05\x0e\xb3\x24\xe5\xa9\x51\x79\x81\x8f\xf3\x28\xce\xa0\x67\x49\x86\x3d\x2f\x0f\xdc\x76\x1c\x64\x59\x98\x07\x32\xf1\xce\x52\x9f\x07\x24\x35\x0e\x4d\x22\x5d\x21\x49\x02\xc1\xaa\xc8\xa2\x30\xe6\x22\xbc\xba\x62\x45\x91\xa5\x51\xc1\xe4\x20\xc9\xf2\xa8\x60\xdc\xc8\x71\x94\x05\x01\x4e\x28\x20\x0e\x58\x10\x87\x14\xc7\x6a\x12\xf5\xad\xe3\xd8\x6a\xfb\x5e\xf8\xd3\x55\x4f\xa8\xda\xae\x41\xfb\xa9\x73\x42\xf5\xe7\xab\x9d\x50\x0d\x31\xd9\x6e\xe9\xc0\xb0\x1c\x71\xfd\xd5\x47\xaf\xba\x74\x10\x31\x2f\xe1\xf5\x84\xbb\x9f\x66\x59\xe2\x59\x96\x0e\xd2\x34\x8a\x19\x97\xc3\x2f\x0d\x32\xc6\xe2\x6e\xea\xe2\x20\xe2\x67\x11\x2f\xfc\x18\x22\x59\xc1\x93\xa0\xa0\x22\x92\x99\x20\x59\x18\x14\x45\xe8\x83\x17\x84\x05\xce\xfd\xa8\xd8\x76\x56\x3f\xc4\x1e\x0f\x89\x0c\x3e\x2c\xe7\x11\x25\xb9\x65\xe9\x20\x49\xbd\x30\xa2\xd2\x20\x49\xea\xf3\x28\xc3\xc5\x96\x44\x70\x41\xfd\x3c\x91\x36\x5f\xa4\x01\x4e\xf3\xc8\xd2\x93\x30\xe5\x5e\x96\xcb\x34\x08\xfb\x31\x27\x38\x4e\x76\x59\x3a\xb8\xee\x73\xa4\xdb\x94\x86\x05\x38\xcf\x5e\xf9\xf5\x18\xdb\x4b\xbf\x1e\x13\x7b\xed\xd7\x63\xdf\x5e\xfc\xf5\x38\xb0\x57\x7f\x3d\x0e\xed\xe5\x5f\x8f\x23\x7b\xfd\xd7\xe3\xd8\x52\x00\x56\x76\x10\xca\xc3\x1a\xf7\x81\xcb\xe7\x73\xf9\x7c\x78\xd8\x43\xca\x00\x9a\x1b\x8f\x40\xc9\xe7\x73\xf9\xdc\xd2\x9c\x40\x73\x62\x6d\x4e\xe6\xf2\xb9\xa5\xb9\x0f\xcd\x7d\x6b\x73\x7f\x2e\x9f\x5b\x9a\x07\xd0\x3c\xb0\x36\x0f\xe6\xf2\xb9\xa5\x79\x08\xcd\x43\x6b\xf3\x70\x2e\x9f\x5b\x9a\x47\xd0\x3c\xb2\x36\x8f\xe6\xf2\xb9\xa5\x79\x0c\xcd\x63\x6b\xf3\x78\x2e\x9f\x1b\xb6\xf5\x6d\x59\xf4\x58\x5a\x86\x09\x39\x93\x46\xd1\xaf\xb8\x07\x5b\x6e\xa5\x41\x98\x5a\xa5\xd2\x16\x4c\xad\x32\x69\x07\xa6\x56\x99\x34\x01\x53\xab\x5c\xaa\xdf\xd4\x2a\x97\x9a\x37\xb5\xe2\x52\xeb\xa6\x56\x5c\x2a\xdc\xd4\xaa\x90\xca\x36\xb5\x2a\xa4\x9e\x4d\xad\x4e\xa4\x8e\x4d\xad\x4e\xa4\x7a\x4d\xad\x66\x52\xb5\xa6\x56\x33\xa9\xd5\xb9\xa9\xee\xa0\xeb\xe8\xee\x96\xd7\xa1\x5a\xeb\x69\xd7\xf4\x7f\x2a\x65\xed\x61\xdb\x71\xf3\x47\x30\x82\xd7\xcb\x67\x43\x90\x2d\x0a\x45\x4b\x32\x42\x04\x3f\x95\xf5\x69\x03\xbd\x6a\x34\xba\x8d\xc8\x5b\x80\x34\xd7\x72\x6d\x71\xcc\x25\x0e\x75\xbe\xa0\x8f\x03\x4e\xcd\x5f\xa9\x02\xf5\xe1\x21\xfa\x0f\xa8\x46\x6c\x27\x5e\x97\x74\xde\xa9\x42\xf5\x66\xd6\xd4\x39\xde\x8c\x9d\xc5\x53\x60\x73\xad\x85\xfb\x3c\x9e\x84\x9a\x75\xaa\x60\xcf\x64\xf1\x5f\xbd\x78\xf5\x1c\x4a\x14\xd7\xe5\x80\x3b\x70\x74\x00\x07\x9b\x5e\xdf\xa1\x2e\x58\xec\x3a\x61\x2a\x21\xe7\x1d\x2e\xe6\x43\x2e\x66\x26\x2e\xe6\x43\x2e\x66\x3a\x17\x5d\xb8\x78\x08\x67\xa9\x64\xac\xab\xd4\x52\x33\xe7\x83\x56\x7b\x7b\x97\xe2\xdb\xad\x46\xf1\x76\x1a\xc5\xad\x46\xf1\x56\x1a\xc5\xb3\x4e\x81\xef\x59\x5d\x85\x5b\x2b\xcc\x3d\x57\xb5\xba\x35\x21\x61\x25\xe1\x2e\x18\xec\x63\x4e\x34\x95\xd6\xf8\xa2\x51\x95\xe2\x79\x87\x8d\xb9\x81\x8d\x99\x89\x8d\xf9\x80\x8d\x59\x87\x8d\x2e\xc2\x68\x80\x8f\x44\x4e\x9d\xee\x54\x3b\xdc\x15\x4a\xe2\x56\xed\xb1\x4b\xed\x3f\x95\xb1\x8c\x5c\xc6\x81\xb9\x07\x39\x57\x90\x8e\x33\xe1\x12\x12\x47\x5a\x20\xb1\xde\x0a\x5d\xc3\x4a\x06\xb0\x31\xb3\xe8\xc3\xce\x6b\xd8\x51\x1e\xda\x48\x33\x17\x42\x2b\xe3\xfe\xc8\xd5\x05\x6f\x43\xd9\x4c\x82\xcf\xa0\x66\x9b\xc0\x23\x34\xe9\xed\xa1\xfb\xb5\x77\x36\xbf\xfc\xff\x08\xa3\xbb\x68\xb0\x6d\x7a\xc8\x87\xf8\xb7\xd6\xe0\x38\x1b\xe2\xdf\xfd\xc6\x5b\x2c\x5c\xe0\xab\x72\x01\x52\xdc\x92\x07\xa9\x9d\x21\x07\x52\x13\x03\xfa\x66\xa4\xed\xa8\xf8\x53\x69\x53\x6f\x3b\xea\xfd\x54\x9a\x98\xb3\xd7\xc4\x57\x45\xf1\x67\xe8\x26\x2a\x66\xaa\x2c\xbe\xf8\x62\x3e\xc7\x27\xdb\x48\xdf\xe7\x73\xd1\x66\xae\xda\x88\x2f\x27\x73\x47\x31\xfd\x19\x54\xd3\x17\xa8\x53\x49\x07\x3e\x67\xf2\x73\xaa\x3e\xdb\x9b\xcf\xa1\xb9\xa0\x92\x4a\x92\xf0\x39\x93\x9f\x53\xf5\xd9\x5d\x92\x7f\x26\x6b\xf2\xab\x80\x23\xc7\x15\x36\x97\xe5\xa5\xf7\x64\xf1\x03\x36\xab\x2b\xf6\xab\x87\x9d\x9a\xfd\x33\xed\x16\x09\x56\x8f\x3a\xce\xca\xfc\xf0\x36\x35\x69\x10\x29\x9a\xb3\x2e\xcd\x79\x87\xe6\xac\x4b\x73\xae\xd3\x9c\x6d\x43\x13\xcb\x7e\x72\x35\x34\xc8\xf3\x26\x5c\x0e\x0a\xb4\x2e\xfb\x3f\xab\x2f\xad\xd0\x1e\x06\xed\x43\x41\xd3\xaf\x9f\xc9\x32\xdc\x6e\x9a\xb2\x9f\x0a\xb8\xa6\x39\xeb\xd2\x9c\x77\x68\xce\xba\x34\xe7\x3a\xcd\x59\x4b\xd3\x98\x75\x8e\xdf\x43\x60\xe6\xf5\x7b\xa8\xbe\xf4\xbd\xfd\x30\xd5\xf7\xe0\xbc\xdf\x97\xae\x63\x54\xdf\x43\x30\xf8\xbe\xb4\x85\xd0\x0f\x70\x51\x82\x80\x99\xcd\x1b\x16\x4d\x4e\x29\x01\x05\xc1\x59\xdb\x17\x19\x2e\x2a\xac\x87\x8b\xd9\x36\xb1\xaa\x25\x2b\xfe\x15\x12\x71\xd3\xac\x80\x54\x36\x33\x11\xcc\xae\x44\xf1\x7b\x63\xe8\xe9\x53\xfc\xbe\x34\x51\xfc\xbe\xbc\x0a\x45\x73\xb0\xeb\x53\xfc\xc9\x48\xf1\x27\x13\x45\xb3\xb5\xf5\x2f\xaf\xb0\x90\x84\xc9\x8b\xda\xed\x01\xd0\xca\x1d\xcc\x83\xd4\x51\x69\x5f\x86\x47\x60\x91\xe8\x2c\xd6\xb8\xb6\x63\xf3\xc7\xb3\x9c\x55\x1c\x5d\xb8\xdf\xf4\xc5\x1f\xbc\x6f\x1a\xed\x1b\x5e\x37\x4f\x4c\x6c\xc3\x00\x54\x98\xda\xc0\x8b\x6d\x61\x6a\x03\xef\xd0\xdc\xd4\x06\x5e\xa1\xb9\xa9\x0d\xbc\x92\x4f\xf2\x39\x5c\xdf\x31\xb7\xdd\xdf\x01\xef\xf4\x93\x7c\x06\x50\x52\x74\x5c\x97\x5c\x3e\x10\x9a\xf5\x26\x10\x81\x29\x33\xf1\x08\x53\x0a\x99\x89\x47\x98\xbd\x48\x4d\x6d\x60\xf2\x22\x35\xb5\x81\x79\x12\x66\x6a\x03\xd3\x24\x83\xdb\x0c\xc4\x1f\x4c\xbb\x4c\xa4\xa9\x57\xc4\x2a\x0c\x98\xb8\x99\x48\x39\x08\xcb\xda\x6f\x47\x1c\x29\x8d\x6a\x98\xec\x5c\xeb\x65\x25\xda\x9c\x21\x64\x06\xc7\x60\xff\x6c\x90\x0d\x1c\x37\xc5\x28\x26\xc7\x60\xf7\x4c\x32\x7b\xec\xe9\xdc\xb2\x21\xb3\x7d\x3c\xda\x2c\xa3\x24\x08\x22\x4a\x87\x04\x71\x4b\x10\xc4\x93\x2a\x82\x9d\x48\x90\x8e\x13\xd4\xe6\x25\x25\x41\x02\x21\x76\x48\x90\xb4\x04\xc9\xac\x1e\x97\x26\x00\xaf\x85\xd7\x71\x82\xda\x4c\xa6\x24\xe8\x0b\x82\xf9\x90\xa0\xdf\x12\xf4\x05\xad\x5c\x11\xf4\x47\xdc\xa1\x8f\x47\x9b\xfb\x94\x04\x03\x41\x90\x0f\x09\x06\x2d\xc1\x40\xd0\xe2\x8a\x60\xa0\x13\xe4\xe3\x04\xb5\xd9\x52\x49\x30\x14\x04\x8b\x21\xc1\xb0\x25\x18\x0a\x5a\x85\x22\x18\xea\x04\x8b\x71\x82\xda\xfc\xaa\x24\x18\xc1\x4b\xc5\x90\x60\xd4\x12\x84\xec\xfd\x44\x11\x8c\x3a\x2f\x11\xe3\x04\xb5\x19\x59\x49\x30\x16\x04\x67\x43\x82\x71\x4b\x10\x5e\x9b\xd4\x98\x2c\xe0\x5d\x49\xc0\x27\x9f\xbd\xf8\x72\x29\xce\xf5\x5d\x8a\x83\x45\x72\xaf\x6e\x36\x13\xc8\xa0\x0e\x8b\xef\x5d\xf7\xb5\x38\x66\x32\xf8\x9f\xf2\x62\x9c\x87\xcb\xc5\x07\xbe\x92\x55\x7e\x51\xb5\x44\x3e\xb9\x93\x96\x95\x48\x50\x72\xc4\x60\x7f\x76\xca\x8b\xe5\x8a\xab\xed\xd4\x03\xad\x69\x67\x4d\xb4\xb5\xbb\x6a\xf9\xda\x27\xd7\x71\x11\xcf\x9f\xf5\x0a\x1e\x9d\xcf\xa6\x3e\xc8\x5d\x84\x3d\x12\x1c\xfa\xaa\x4e\xf1\x97\xd3\x4d\xd6\xa3\x4a\x21\x26\xbb\x9e\x6e\x12\x4d\x46\x4e\x37\x75\xb6\x35\x0c\x4e\x37\x85\x98\x7c\x39\xdd\x74\xdd\xa7\x9b\x84\x56\xb6\x3b\xdd\x64\x54\x4e\xe7\x74\x93\x54\x90\xf3\x74\x93\x3c\x47\xbb\xe5\xe9\x6f\xff\x4f\x7d\x9e\x89\x2f\xb2\x3b\x29\x5b\xf3\x28\xe8\x3d\x38\xcd\xc3\x3e\xe8\x87\xb3\xf7\x79\xd1\xfb\x31\x2b\xcf\x66\x7c\xf5\x87\x1c\x89\xd2\x58\x85\xef\x82\x43\xf9\x40\x32\x06\x9f\x75\x7e\xfe\x15\x8e\x4e\xfd\xb4\xd5\x9d\x40\xb0\x79\xe6\x21\x74\xbd\x81\xd3\x7e\x1b\x3f\x0a\x75\x78\x88\x9e\xf3\xd5\x29\x8c\xa2\x0f\x67\xcb\x32\xe3\x08\xf7\xaf\x4d\x11\xcd\x9f\x3f\xc4\xdd\xb3\x4b\x61\x3c\x45\x41\x32\x45\x01\x9e\x22\xdf\x9f\x22\x12\x4e\x11\x8e\xa7\x28\x99\x22\x84\xb5\xad\x46\x21\x9d\xa2\xd0\x9b\xa2\x80\x4c\x91\x1f\x4c\x11\x89\xa6\x08\xd3\x29\xc2\xde\x14\x11\x1d\x2e\x99\xa2\x10\x4f\x51\xe0\x4f\x91\x1f\x4e\x11\x89\xa7\x08\x27\x53\x84\x05\x7e\x0d\x2e\xf2\xa6\x28\x24\x53\x14\x04\x53\xe4\x47\x53\x14\xf9\x53\x14\x86\x53\x14\xc4\x53\xe4\x27\x1a\xa0\x8f\xa7\x88\xf8\x53\x84\xc3\x29\x8a\xa7\x08\x45\x64\x8a\xc2\x60\x8a\x02\xb8\x5a\x40\x07\x14\x9c\x90\x29\xc2\xc1\x14\x45\x02\x10\x4f\x51\xe8\x4f\x51\x10\x4e\x91\x1f\x6b\x80\x24\x99\x22\x82\xa7\x08\x0b\x92\x53\x84\x08\x9d\x22\xe2\x4d\x11\x16\xec\x48\xb0\xb7\x0e\xb9\x12\xb3\x5c\x49\x57\xae\x82\x0b\x21\x47\xd1\x6f\x22\x3e\x4f\x11\x0a\x75\x6e\x15\x61\xd1\x2d\xc1\x2d\x30\xe4\xe9\x5c\xfa\x4a\x70\x82\x2b\x01\x10\x4d\x91\xde\x5d\x1c\x49\x79\x08\x01\x03\xf7\x7e\x57\x11\x42\xa1\x42\xc0\x42\x7e\x7e\x2c\x05\x1b\x86\x3d\x79\x05\x9e\xd2\x56\x28\xb5\x1f\xe8\x14\x84\x6a\x84\x69\xf8\x42\xa5\x91\x54\x7b\xa8\xeb\x50\xa8\x40\xd8\x83\xb0\x0b\xa1\x43\x21\xd8\x3a\xab\xe9\xdc\x08\x75\x7e\x7a\x3e\x67\x70\x4d\x8a\x48\x2a\xd7\xb3\xb2\x18\xdc\xf0\x04\x5e\xf0\xdd\xab\x9f\x5f\x1e\x7f\xf7\x58\xde\x29\x25\x24\x46\xa6\x08\x3a\x2f\x24\x44\x85\x45\x2a\x35\x81\x74\x95\xa5\x62\xa5\x4e\xa2\xac\x17\x04\x42\x75\xfa\x2f\xbf\x79\xf6\x9a\xaf\x11\x5b\xe4\xaa\x36\xfa\x19\xa8\x54\xde\xa7\x61\xe0\x43\xc0\xff\xfc\xbc\xab\xcf\x5e\x4a\xe9\x6d\xbc\xbb\xf0\x32\x42\x89\xe7\x4d\xfb\xcf\xea\x77\x05\x09\x62\x00\x20\x1d\x00\xea\x79\x64\x00\xe2\x6b\x20\xc3\xa7\x81\xfe\xd4\x40\x20\xec\x12\x20\x06\x02\x51\x97\x49\x13\x48\xdc\xeb\x87\x81\x10\xed\x30\x32\x44\x91\xf4\xa9\x0c\x51\x30\x1d\xc4\x04\x90\xf6\xa5\x35\x04\xc9\x7a\x64\x06\x00\x79\xbf\x2b\x43\x10\xae\x81\x0c\x29\x14\x5d\x2e\x87\xcd\xa9\xab\x35\xa6\xa3\xfa\x20\x74\x84\x80\x4f\x47\xac\x2a\xe8\x13\x31\xd8\x05\x75\xdb\x4d\x44\x47\x0d\x33\xa6\x2e\xc3\xa4\x74\x54\xdf\x09\x1d\xd1\x37\xeb\x33\x61\x30\x89\x3e\x99\x21\x27\x19\x1d\xd5\x78\x4e\x47\xac\x86\x53\xb7\x75\x17\x7d\x1a\x06\xcd\x5b\xd5\xa5\xa2\x04\x36\x0b\x92\x68\x4f\x2d\xca\xf4\x3b\x20\x46\xea\x41\x17\x8b\xa9\x8f\xa1\x0e\x62\xb4\x09\x9d\x4f\xc3\xf3\xb8\xcb\x86\xc3\x37\xb0\xc3\xfc\x93\x3e\xa7\xd6\x40\x81\x1d\x1a\x4d\xbb\x9d\x31\x58\x45\xa7\x33\xd6\x38\x81\x1d\xf6\xcb\x7b\x20\xb6\x50\x81\xcd\xa1\x80\x8e\x8a\x02\xd3\x51\x51\x10\x3a\xaa\x7a\x9f\xba\xd5\x16\xf4\x50\xd8\x62\x85\x4b\xdc\x11\x75\x99\x70\x4c\x47\x94\x41\xe9\x88\x24\x13\x3a\x6a\x5a\x8c\xba\x15\x9a\xf6\xe5\x6d\x18\x3c\xfa\x54\x86\x20\x39\x75\xa9\x94\xd3\x11\x17\x2a\xfa\x1a\xd5\xef\xa8\x9a\x8e\x65\x19\x81\xe7\xd1\xc0\xc3\xd6\x08\xa2\x60\xac\x69\x46\xa3\x40\x5b\x04\xa9\x89\x78\x26\x22\x41\x97\x88\x11\x26\xec\xe2\x31\x32\x13\x75\xf1\x18\x61\xe2\x16\xc6\x40\x45\x0f\xb6\xc6\xe6\x49\x9f\x84\x01\x09\xeb\x77\xc7\x9e\x70\x28\x42\x06\x24\x59\x47\xb0\x06\x80\xbc\x05\xb0\x06\x10\xc9\x82\xa1\x71\xd1\xd7\x8a\x35\xef\x72\x0a\x13\xd3\x91\x5e\x10\xea\x92\xb6\xdf\x27\x61\xb2\x0d\xda\xd3\xbb\xc9\x36\xe8\xb8\xc0\x23\x3a\x62\xa8\x31\x1d\x37\x54\x4a\x47\x94\x92\x50\x87\x52\x18\x75\xfb\x52\xda\xe7\xc0\x1e\x48\x9c\xae\x92\xd3\x11\x23\xe6\x7d\x99\xda\xe3\x89\xd5\x82\xf4\x17\x10\xc3\x53\xbc\x85\xdb\x63\xb2\x85\x33\x61\x7f\x0b\xc7\xc7\xc1\x16\xf6\x8c\x43\xa7\xeb\xe3\x68\xcc\x25\x71\x3c\x12\x0c\xf5\x14\xdc\x8c\x21\x19\x0b\x97\x98\x8d\xf9\x3d\x4e\xb7\x88\x96\x38\x1b\x0b\x64\x38\xdf\x22\x58\x62\xbe\x45\x28\xc3\x45\x5f\x43\x46\x73\x19\x0b\x15\x18\x8f\x79\x28\x26\x5b\x38\x08\xf6\x47\xbc\x0c\x07\xdb\x04\xb6\x70\x8b\xb0\x83\x23\x67\x74\xc3\xf1\x16\x61\x09\xd3\x2d\x7c\x11\x27\x5b\x78\x3d\x66\x5b\x44\x53\x9c\x8e\x45\x30\x9c\xb9\x42\x18\xce\xc7\xc2\x02\xdf\x22\x8c\xe2\xa2\x17\xa1\x76\x49\x55\xb0\x17\x58\x82\x91\x99\x65\xd2\x91\x0a\xb6\xa6\x28\x12\xb7\x09\x7b\xa0\x3d\xf7\x0c\xcf\xc3\x9e\x72\x86\x10\x51\x47\x68\x26\x1a\x71\x07\x62\x7c\x38\xb6\xe7\x26\x2d\x15\x5b\x66\x52\xf7\xd4\x96\x95\xb4\x5c\x0c\xf9\xcc\x7a\xd2\x1c\x42\xe4\x1d\x69\xd9\x52\x13\xc0\x60\x49\x4b\x54\x5b\xb3\x04\x5c\xdd\xc3\x74\x8c\x7d\x42\xed\x86\xe2\xd3\x31\x43\x09\xe8\x98\xa2\x43\xea\xee\x7c\x44\xdd\xa6\x14\x6b\xcf\x87\x4f\x29\xb5\x8b\x2e\xa1\x2e\xd1\x31\x3a\x66\x5e\x29\x75\x3b\x41\x46\xdd\xa6\x93\xd3\x31\xc3\xe0\x74\xcc\x09\x0a\x3a\x66\xe2\x9d\xb4\xc2\x62\x04\x78\xc4\x5d\x31\x19\xb1\x50\xec\x8f\x86\x0c\x1c\x38\x2d\x15\x87\xa3\x0e\x8f\xa3\xd1\xa8\x81\x63\x57\x24\xa6\xa3\x9e\x88\x93\xd1\x90\x81\x99\xc3\x1b\x71\x3a\x12\x2e\x70\x36\x1a\xb5\xb0\x1e\x0e\x0c\x24\xf8\x48\xec\xc5\xc5\x68\x48\x52\xa9\x85\xb3\x9b\xd8\xe9\x57\x98\x8c\x87\x16\xdf\x11\x39\x70\x30\xe2\xd6\x38\x1c\x8d\x2d\x38\x72\x3a\x30\x8e\x47\x63\x1b\xa6\x23\xc1\x07\x27\xa3\x1e\x88\xd9\x48\x18\xc0\xe9\x68\x0c\xc4\xd9\x68\x28\xc0\xf9\x68\x3c\xc2\xdc\x11\xec\x70\xd1\x8d\x46\xbb\xe4\x0f\xd4\x93\x24\xcd\xb1\xa5\xce\x3e\xb1\x17\x58\x52\x89\x9a\x69\xc3\x73\xbf\xc5\x10\x98\x0d\x31\xb0\x1b\x51\xd8\x95\x88\x39\x87\x68\x92\x63\x13\xf9\xd8\xeb\xa4\x7f\xf6\xf1\xb3\x5e\x51\x31\x67\x10\xad\x6e\xcd\xf9\x83\x7c\x6e\xce\x1d\x5a\xf1\xd9\x56\x50\x5a\xf1\x18\x70\xe4\x9a\x97\x5a\x32\x87\xda\xbc\xcd\xb9\x43\xab\x60\x4b\xff\x9d\xfa\xc5\xd4\xde\x3d\x42\xc7\x98\xf7\xe9\x98\x00\x02\xea\x56\x71\x48\xc7\xba\x10\x51\xab\xfd\xc4\x74\xcc\xf8\x28\x75\xc9\x2f\xe9\x12\xb7\x25\x11\x0e\xeb\x48\xa9\x4b\x7b\x19\x1d\xb3\xbe\x9c\xba\xed\x97\x53\xb7\xfb\x15\x74\xcc\x43\xb0\x37\xe2\x22\x18\x8f\x78\x21\x26\xa3\x6e\x88\x7d\xd7\x48\xe1\xb4\x70\x1c\x8e\xba\x08\x8e\xbc\x31\x3d\xe1\x78\x34\x92\x61\x3a\xea\x2d\x38\x19\x0d\x17\x98\x8d\x06\x3c\x9c\x8e\xc4\x4c\x9c\x8d\xc6\x0d\x9c\x8f\x84\x25\xcc\x1d\x71\x09\x17\xce\xb0\x21\xb3\x07\x77\x1f\xf0\xa8\x5f\x62\x62\x77\x4c\xec\x8f\xb8\x3d\x0e\x46\x0c\x1f\x87\xa3\xbe\x83\xa3\xf1\xe8\x16\x3b\xc2\x1b\xa6\xe3\xce\x93\x38\xe3\x07\x66\xa3\xf1\x0f\xa7\xa3\x41\x14\x67\xce\x20\x82\xf3\xd1\x28\x85\xf9\x48\x98\xc2\x45\x37\x8e\xec\x96\x3c\x18\x63\x4a\xcd\xaf\x6d\x85\xa4\xe1\xc6\x98\x32\xdc\xd5\xb6\x6b\x18\x33\x06\x05\x00\xf3\x29\xc6\xbc\xa1\xc9\xf9\x0c\xcf\xa3\x1a\x81\x0d\x20\x6e\x19\x34\x3c\xd5\x75\x6e\x4b\x19\x5a\xfe\x2c\x39\x43\xdb\x43\x03\x85\xb4\x65\xd0\xcc\x42\xd6\x01\x30\x0d\x1c\x56\xdf\xe3\xba\x72\x0c\xa8\x8b\x8e\x70\xcc\x73\x0e\xae\xf6\x98\x8e\x08\x97\x50\xcf\x66\x38\x3e\x75\x1b\x4e\x40\x5d\x86\x13\xd2\x11\xbb\x88\xe8\x88\xd4\x62\x3a\x62\x7a\x94\x8e\xa8\x36\xa1\x36\xb9\x33\x3a\xa2\xd3\x94\xba\xad\x36\xa3\x23\x56\x93\xd3\x11\xcd\x71\xea\x36\xdc\x82\xba\xcc\x1e\x7b\x4e\xb7\xc5\xd8\xb3\xea\x15\x93\x31\x9f\xc6\xfe\x98\x4f\xe2\x60\xc4\xab\x71\x38\xe6\x14\x38\x1a\x8b\x1c\x38\x1e\xf1\xed\x66\xdc\xb3\xaa\x11\x27\x63\x0e\x84\xd9\x48\x7c\xc4\xe9\x58\x04\xc1\x99\x33\x42\xe1\x7c\x2c\xc2\x60\x6e\x1f\x9c\x8b\x91\x08\x01\xf9\x81\x5b\x57\x78\xc4\xd2\x30\x19\xf1\x74\xec\x8f\x39\x33\x0e\xc6\x9c\x15\x87\x63\xa1\x2a\xb2\x87\x22\x1c\x8f\x05\x0b\x4c\xdd\xee\x92\x8c\x39\x3c\x66\xd6\x60\x81\xd3\x31\x5f\xc6\xd9\x48\xb8\xc0\xb9\x33\x58\x62\x3e\x16\xca\x70\xd1\x0b\x38\xbb\x64\x05\x8a\x6d\x6a\x8a\x22\x35\x4e\x53\x5e\x20\xdb\x12\x73\x9f\xfd\xf6\x39\x31\xe1\x0e\x5a\x89\x18\xf1\x87\x7a\x7f\x4c\x59\x41\xf3\x74\x88\x3b\xee\x18\xb4\x75\x54\x34\x66\x03\x1a\x53\x43\xc4\xac\x26\x6b\x64\x39\x55\x06\x6a\xca\x00\x34\x59\x0d\x9f\xe7\x1a\xda\xe1\x53\xde\xf4\x75\xf8\xac\xe8\x48\xd9\xd4\x53\xa7\x92\x30\x75\x2b\x89\x50\x4b\x8f\x7c\xea\xd2\x4e\x40\x5d\xfd\x09\xa9\xdb\xea\x22\xea\xb6\x8c\x98\xda\xe5\x41\xa9\xcb\x2e\x12\x6a\xb7\x67\x46\xdd\xaa\x4f\xa9\x5b\x87\x19\xb5\xd8\x54\x4e\xdd\x2a\xe2\xd4\x65\x53\x05\x75\x9b\x32\xf6\x46\xfc\x08\xe3\x11\xe3\xc3\x64\xc4\x53\xb1\xef\x30\x40\x1c\x38\xfd\x14\x87\x23\xae\x88\x23\x6f\x24\x06\xc5\x4e\x9f\x6b\x32\x58\x0b\xef\x89\x35\x6a\x33\x9b\xb7\xe2\x74\x24\xb4\xe1\xcc\x11\x17\x71\x3e\x12\x43\x30\x1f\xf1\x59\x5c\x38\x83\x9b\x18\xd1\x2d\x8c\x63\xa7\x29\x61\xe2\x74\x5a\xec\x8f\xf8\x25\x0e\x46\x1c\x13\x87\x0e\xcf\xc4\xd1\x48\xac\xc1\xf1\x68\xb0\x1a\xf1\x24\x9c\x8c\xf8\x28\x66\x8e\x00\x80\x53\x67\xd4\xc2\x99\x33\xb4\xe0\xdc\xe6\xff\x98\x8f\xb9\x70\xd1\x0d\x3d\xbb\x0f\xdd\x06\x1b\xa9\x59\x0d\x3c\x6c\x18\xba\x55\xaa\x61\x18\xb4\x15\x52\x53\xb3\xa0\x49\x72\x4c\x4f\x43\x4b\xf7\x23\x89\xd2\x30\x46\xb7\x29\xd3\xf0\x29\xd5\x3a\x60\x1a\xa6\x9b\xbe\x0f\x9b\x32\xcd\xc8\x87\x4f\x53\xad\x13\xa6\x57\x75\x2d\x8f\x33\x0c\xd3\x52\x6e\x43\xac\xbc\x95\x9b\xe9\x25\x5d\xcb\x7c\x87\x3d\x75\x89\x01\x53\xb3\x50\x09\x75\xe9\xd7\xa7\xae\x3e\x06\xd4\x61\x38\x21\x75\x09\x2f\xa2\xae\x9e\xc4\xd4\x26\x1e\x4a\x1d\x66\x95\x50\x97\xaa\x19\x75\x69\x24\xa5\x0e\x43\xc8\xa8\xcd\xcc\x73\xea\xb2\x64\x4e\xcd\x16\x5b\x50\x87\x92\xb1\xe7\xd4\x32\xc6\x4e\x77\x25\x4e\x7f\xc5\xbe\xd3\x57\x70\xe0\x72\x07\x1c\x3a\x5d\x09\x47\x4e\x87\xc0\xb1\x2b\x22\xa8\xf1\xc6\xf8\x28\x71\x46\x0b\xcc\x5c\x1e\x83\x53\x4b\xd0\xc0\x99\x2d\xc8\xe6\x4e\xcf\xc5\xdc\x19\x14\x70\x61\x8d\x88\xd8\x73\x6a\x1d\x3b\x1d\x11\x13\xb7\x77\xfb\x16\x4b\xc3\x81\xd3\xd1\x70\xe8\x72\x61\x1c\x59\xfd\x10\xc7\xce\xc8\x80\xa9\xd3\xfb\x71\xe2\xf4\x45\xcc\x2c\xc1\x0a\xa7\x4e\x77\xc3\x99\x2b\x3a\xe0\xdc\xea\xc5\x98\x3b\x23\x07\x2e\xb4\xe0\xb0\xcb\x98\x4a\xc5\x00\x4f\x0c\x08\x1b\xe1\x0c\xe3\xf1\xdd\x76\x71\x63\x18\x8e\x65\xbb\x61\x20\x56\xf8\x0c\x8f\x42\x89\x8f\x18\xf9\x88\x9a\x87\xa6\x20\xac\x38\x31\x8f\x33\xd4\x33\xf3\x9f\x34\xfd\x36\x85\x60\xc9\xa7\xe9\x51\xda\x20\x35\xf0\x99\xdd\x95\x87\x3d\x86\xe1\xd7\x6c\x27\xbc\x11\xa2\xa1\x4d\xa1\x98\x30\x3c\xaa\x17\x95\xac\x3d\x97\x8f\xb1\x4b\xa6\x0a\x86\xb8\xf4\xaf\x60\x7c\x97\xae\xd5\xef\x81\x4b\xd8\x0a\x26\xb4\x8b\x55\x41\x44\xa3\x7d\x8e\x2d\xa6\xa5\x1e\x53\x97\x44\x15\x4c\x62\xd3\x92\x7a\xce\xec\x56\xaa\x20\x52\x97\x3d\x2a\x98\xcc\xac\x72\xf5\x34\x77\x99\x91\x82\xe1\x2e\x13\x55\x30\x85\xdd\x43\xeb\x8c\xd8\xe8\xd8\xd8\xd5\x03\x4c\x2c\x42\xc6\xbe\xcd\xe2\x70\xe0\x62\x16\x87\x2e\xb5\xe0\xc8\x25\x0c\x1c\x3b\xba\x68\x8b\xbf\x89\x5d\x85\x98\xb9\x2c\x15\xa7\xce\x78\x98\xb9\x3c\x0a\xe7\x76\xfb\xc6\xdc\x66\x74\xb8\x18\xf7\xae\xf6\xe5\xc6\x0a\x81\xdd\xb1\x00\x93\x71\x83\xc3\xfe\x98\xf7\xe1\xc0\xe9\x7d\x38\x1c\x0f\x02\xb5\xb2\x9d\xdd\x8d\xc7\x83\x12\xa6\xe3\xc1\x0d\x27\xe3\xd1\xa0\x36\x07\x97\x97\x49\xa3\xb0\x3e\xcd\xc6\xc2\x9a\x34\x0c\x07\x9f\x7c\x2c\xe2\xd4\x46\x02\x54\xb4\x91\x5d\x7e\xd4\xeb\x1a\x3c\x65\xeb\xf7\x6b\x54\xcd\x58\x85\xd6\x7c\xce\xb3\x0a\xea\x11\xbd\xfc\xe6\xd9\x6b\x54\x2e\xce\xea\x6b\x22\x9a\x8a\x06\x4f\x1f\xbc\xec\x5d\x5c\xdc\x1e\x4c\x9c\xa2\x76\xe3\x3f\x5c\xa0\xa8\xbe\xc0\x67\xf5\x65\xaa\x37\xf4\xd4\xaf\x12\x40\x7e\xa9\x3f\x8b\x2f\x53\xad\x3f\x7d\xce\xb5\xaa\x4a\xdf\x3e\x7a\x29\x0b\x63\x21\x59\xf8\xc5\x7d\x47\x95\x80\x6e\x2e\xa8\x92\x5f\xb4\x2a\x29\x57\xbd\xa2\xca\x5d\x5a\xef\x3d\xbf\x6c\x4a\x80\xbd\xe7\x97\x86\xd2\x77\xef\xf9\x65\x5d\x57\xef\x3d\xbf\x34\x97\xd5\x13\x34\xa4\x8a\xc2\x08\xa5\x65\xb5\x46\x2c\xcb\x96\xab\xbc\x5c\x9c\xa0\x6a\x89\x9e\x3f\xc4\x46\xbc\xdf\x94\x50\x0a\xe8\x4d\xbf\x06\xb2\xe9\xee\x90\x30\xb2\xdf\x1d\xd2\xa2\x7b\xbe\x14\x08\x9f\x3f\xc4\x6f\xca\xb7\xe8\x0e\xc2\x86\x1a\xa5\x8a\xae\x2c\xcf\x3f\xa9\x7b\xf7\xa6\x6d\xaf\xca\xf1\x89\xff\x4c\x7c\x8c\xee\x68\xa8\xa1\x0e\xdf\x1e\xba\x39\x40\x6c\x28\x58\xfa\x60\xbd\xe6\xa7\xe9\x9c\x23\x1c\xa1\xf5\x79\xfa\x9e\x5f\x1a\xc4\xbf\x3e\x4f\xbf\xe7\x97\xeb\x46\x05\xed\x77\xbb\x50\x16\x2f\x01\x48\x8a\xa6\xfe\x72\x1f\xe1\xa8\xf9\x66\xbf\x62\xe5\x21\x54\x9c\x52\xfc\x98\x05\xb9\xae\xb1\x2b\x5e\xde\x28\xa4\x6f\x15\x53\x46\xbc\xee\xab\x5b\xd2\xb2\x7a\x09\x55\x51\x8e\xb4\x22\x28\x0d\x5e\x1b\x4a\x69\x50\x01\x35\x1a\x14\x19\xb6\x31\x59\x0d\x09\xec\x56\xd3\xa5\x53\xac\x96\xa7\x10\x60\xe6\xbc\xa8\x10\xa1\xe0\x19\x82\xb2\xb9\xa1\x14\xce\x9b\x49\x89\x0e\xe5\xdd\x10\x1e\x14\x70\xac\x8d\x6b\x32\x79\xfe\x90\x28\x1b\xdc\x43\xfb\x8d\x04\xf6\xd0\xdf\x10\xa1\x6f\xa1\xc6\x23\xd8\x56\x89\xfe\x06\x77\x5c\x6c\xcd\xde\xaa\x3c\x99\x6d\xcf\x5f\x00\xe5\x3b\x5b\x26\xf7\x3a\x5c\x12\x0a\x8f\x25\xaf\x68\x1f\x91\xc0\xc2\xf0\x9e\x81\xe3\x01\x59\x53\x65\x7f\xd1\x81\x72\x91\x71\xc4\x59\x36\x53\x66\x87\xca\x35\x62\x67\x67\xf3\x92\xe7\x42\x97\x6c\x81\xf8\xe6\x8c\x2d\x72\x9e\xd7\x75\x19\x21\xbc\x4f\x8d\xd8\x84\x08\x14\x9a\x8c\x2d\x50\xca\x51\xba\x5a\xbe\xe7\x0b\x54\x2e\xaa\x25\xa2\xb2\x28\xf0\x1a\xad\x33\x36\x97\xe8\x25\xca\xb5\x19\xdb\xc5\xac\xcc\x66\x88\xcd\xe7\xcb\x8b\x35\xa0\x16\x78\xab\xa5\x40\x7b\xbe\xe6\x39\xba\x28\xab\xd9\xf2\xbc\x92\x0c\xae\xcb\xe5\x62\x88\x45\x09\x1a\xca\x6b\x4e\xda\x2f\xf7\xef\xab\x6b\x65\xda\x9f\x44\x40\xf1\xb1\x49\x72\x1d\xcb\xc5\xd2\x72\x63\xb7\xe1\x2a\xb4\x10\xc4\xda\xcf\x10\xb3\x26\xa5\x54\xe2\x6d\x24\xb4\xef\x9b\x55\x65\xeb\x47\xac\xf7\x23\x7e\xab\x0a\x7b\xfe\xa6\xff\x04\x97\x02\x0c\xae\xda\x31\x44\xc0\x87\xb2\xf0\x25\x2a\x17\x1f\xf8\x6a\xcd\xed\x51\xb0\x5c\x7c\x78\xd9\x0b\x84\x9d\x9f\xb6\x1a\x20\xb0\x63\x80\x68\xb1\xe9\x12\x5b\xbf\xc1\xa1\x30\xe8\x3e\xf6\x8f\x9d\x09\x87\xf6\x0b\x5f\x64\xab\xcb\xb3\x6a\x87\xab\x00\x55\xc5\xda\xe5\xc3\xa6\x5d\x0b\x3c\xed\x86\x7c\x6b\x09\xdd\x9c\x7f\x0e\xaa\xad\x44\x5c\xb5\x7b\x1f\xba\x29\x4f\x6b\x41\x9a\x92\x8e\xff\xe0\x95\x9e\xa7\x75\x99\x9b\x03\x52\xed\x6a\xac\xbe\x0e\x24\xd8\xaa\x0f\x06\x37\x67\x19\xb2\x8f\xef\x16\x65\x55\xb2\xb9\x5e\xfa\xaa\x0b\xc3\x37\xd9\x8c\x2d\x4e\xf8\x93\x17\x6d\x59\x54\x59\x79\xcc\xdb\x78\x85\xfc\x5f\xdf\xa4\xcd\x6d\xe4\xfd\xd4\xf0\xc6\x5a\x14\xd6\x36\x2f\x9e\xe8\x6d\x08\xd0\xf1\xd5\xdf\x76\x6d\xa8\xe4\xcd\x2b\x0a\xf1\xff\x2d\x79\x83\x36\xa1\xfa\x33\x56\xa6\x75\x5d\xd5\x26\xcb\x87\x81\x47\xc9\x8f\xd2\xab\xe0\xf3\xf8\xb5\x6d\x86\x91\xc8\x98\x4f\x00\x3a\xdb\xb5\x17\x8d\x61\xe8\x76\x62\x81\x5d\x75\x61\x57\x0a\xd6\xc8\xe4\x63\x5e\xae\x2b\x3e\x6f\xac\xd8\x8c\xb1\x80\xce\x6f\x97\x5a\x50\x77\x80\x2e\xc4\x40\x2b\x4b\xad\xbd\x29\xdf\xbe\x99\x4c\x14\xb7\xef\xda\x70\x2d\x12\xc9\xe6\xd5\x05\xbe\x43\x59\x6d\x93\x68\x0c\x01\xbb\xe7\x48\x2b\x9b\xa4\x7a\x9e\x34\xaf\xd9\x28\xc6\x03\xf8\x8f\x8b\x7c\x89\xd6\x17\xec\x4c\xa6\x1f\x73\xb6\xae\xa4\x31\x0c\x43\x78\xe5\x56\x59\x8f\xd9\xae\xc2\x5c\x8e\x5f\x19\x6c\x18\x2a\x8a\xef\xea\xea\x03\xd7\xb8\x36\x17\xbc\x8a\xab\x5f\x25\xa4\x8c\x84\x2e\xc3\x1b\x59\x85\x96\xe7\xd5\x20\x02\x37\x21\xd7\xad\xb2\x4e\xc8\xb5\xeb\xac\x33\x64\xbc\xe7\x97\xb2\x04\x74\x14\x1c\xfa\x44\x7f\x52\x7e\xb0\x3c\xd0\xea\x46\x47\xc6\xaa\xd1\x87\xe8\xa5\xb0\x40\xf5\x12\xb0\x5a\xae\xd7\x6d\x9a\x0e\x35\x0f\x21\x21\x86\xd7\x52\xd9\xa2\x19\xa8\x5a\xc1\x4d\xea\xf1\xea\x94\xad\xdf\x77\x5c\xb6\xb6\xdd\xc9\xa4\x63\xa2\xc2\x11\xeb\xd1\xf5\x5d\xa7\xeb\xc2\x69\x05\x16\x4d\x04\x1d\x93\x7d\x07\x36\xfb\x95\xd1\xf0\xc5\x33\x91\x51\x49\xcc\x0a\xaa\xf6\xbb\x01\xdb\x2f\x9e\x6c\xcf\xf6\xca\xce\xf6\xdc\xcd\xf6\xdc\xc1\xf6\x6a\x0b\xb6\x9d\x45\xa4\xd7\x75\x15\x69\x39\xfd\xb1\x5d\x1d\xe9\xb1\x22\xcc\x12\x57\xc5\x37\x95\x5e\x8a\xf9\xdb\x47\x2f\x0f\x54\x82\xd6\xa9\xc5\x3c\x45\x59\x71\x62\x28\xae\x7d\x36\x67\x82\x89\x4d\x85\xfa\x58\x54\xc2\x35\x69\xe9\x98\x10\x35\x95\x9d\x87\x13\x35\xdd\xa2\xdb\xdf\x3e\x7a\x69\xac\xb8\xfd\x6a\x55\x9e\xcd\xf9\x9d\xdd\xa6\x88\x64\xa3\xce\x44\x91\xfe\xd3\x9f\x67\xba\x48\x4d\x44\x08\xb6\x4b\xa8\x50\x9a\xf5\xaf\x07\x52\x59\x2c\x5f\x63\x74\x24\xe0\x0e\xa4\x54\x1f\x49\x1d\x2f\x57\x93\xf6\x9e\x75\x75\x71\x7c\x4d\xfa\x60\x3d\x2f\x33\x3e\xf1\xa6\x88\xec\x0d\xee\xc2\x68\xd0\x92\x2b\xa2\x25\x53\x14\x38\xd0\xfa\x57\x44\x1b\x4c\x51\xb4\x67\xbf\x48\xe3\xca\xef\x1e\x7c\x8d\x0f\xf4\xc6\x5a\x0b\xab\x64\x0e\xf4\x77\x8e\x2d\x1a\xf8\x5b\x50\xb8\x9e\x77\x1a\x41\x6b\x47\xe6\xc8\xae\xdd\xc7\x5b\x50\x30\x8f\x7a\x38\x21\xd7\x36\xec\xfd\x93\x84\xd5\x26\xba\x5c\x43\x70\x6d\x71\xed\x18\x62\x6d\x21\xae\x1b\x68\x1b\x28\x67\xfd\xfc\x06\xaa\x57\x42\x5f\x2b\xcc\x7e\x37\x24\xd3\x5e\x55\x7d\xad\xb8\xfb\xdd\x30\x98\xb6\x55\xdd\xef\x86\xd1\x54\x15\x7b\xbf\x1b\xe1\x8f\x6f\xa7\x34\xf8\xa4\x82\xfb\x7f\x64\xa5\xfd\xcf\x56\x0f\xff\xbf\xa7\xb2\x3d\xdc\x54\x50\x2e\x78\x7e\xbd\x25\xee\xbf\x61\x6b\xde\x56\xad\x67\x6b\xae\x3d\x7b\xed\x13\x67\x05\xfc\xa1\x2f\x6f\xa2\x00\x2d\xd8\x29\x5f\x9f\xe9\x5e\x7a\xa8\xb3\x21\x40\x04\x1b\xf2\xbf\xff\xf8\x68\x42\xf3\x00\x45\x41\x73\x85\x8d\x09\xcd\xeb\x28\x10\x7c\x00\x53\x9b\x28\x38\x50\x5f\x04\xff\x86\xcc\xa0\x45\x2d\xd1\xab\xe9\x94\xf2\x57\xbe\x46\x0c\x2d\xf8\xc5\xfc\x12\x49\x5f\xcb\x4d\x84\xf5\x80\x82\x3a\xb7\x79\x2c\xce\x4f\x53\xbe\xfa\x88\xe0\x56\x29\xb8\x55\x45\x7c\xf0\x09\xa4\xf3\x07\xce\x26\xf3\xe5\x05\xb4\x10\xff\x35\x35\xe8\x36\xee\x46\xb7\x21\x40\x2d\x97\x4d\x2b\x97\x3a\x22\xd4\xe2\xa9\x07\x66\xb9\xfa\xe7\x11\xcf\x87\xb7\xb2\xc0\x0b\xbd\xc8\xeb\xce\x77\xd6\x92\x86\x10\xbf\x28\x3b\x19\x95\xe8\xe1\x54\x70\x6d\x1e\xc3\xd4\xfd\x5a\x86\x5b\x3d\xe1\xb1\xe8\xed\x11\xea\xde\xbe\xad\xbf\x99\xf7\x35\xf5\x4d\x59\x5d\x94\x6b\x8e\x7e\x78\xf6\x6a\x0d\x18\xc6\x14\x53\x5f\x94\xa2\x0c\xe4\x23\x7a\x20\xf4\x2b\xe4\x72\x07\x04\xa3\x46\x12\x56\x54\x7c\x85\x16\xfc\x84\x55\xe5\xe2\xe4\x1a\x04\x0f\xa8\xb8\x10\xbc\x52\xc1\xc1\x62\x59\x4d\xac\x52\x3d\x3c\x44\x8b\xe5\x68\xa6\x0a\x77\xb2\x48\x81\xfe\xde\x48\xf7\x9e\x11\x4c\x0a\xf6\xf7\x5a\xc8\x86\x94\x54\x49\x46\x09\xa6\xb6\x86\x56\x9d\xf7\x3a\xdc\x75\x32\x00\x9b\x56\x1e\xfc\xf0\xad\xa6\x15\x58\x4e\x80\x71\xfb\x8c\xad\x61\x79\x61\x2b\x1f\x6a\x34\x05\x38\x84\x4b\x34\xca\xaa\x96\x82\x44\x8d\xf7\x9a\x95\xff\xe0\x87\x6f\xaf\x47\xf5\x72\x6d\xa7\x55\x3c\x5b\xe4\x13\xb6\x58\x56\x33\xbe\x52\x8c\xb8\xcc\x80\x2d\x72\xdd\x0c\x44\x0f\x47\x4c\xa1\xf5\xb3\x9b\x52\x20\x63\x56\xd1\x78\x9e\x82\xff\xc3\xec\xe3\xd9\x8b\xcf\x6d\x1e\xcf\x5e\x7c\x26\xeb\x78\xf6\xe2\x7a\x8c\x63\xb9\xea\xd8\xc6\x72\xb5\x83\x69\x2c\x57\x57\xb6\x8c\xdf\x76\xb4\x8c\xdf\xfe\x60\xcb\x78\xfd\xf9\x4d\xe3\xf5\x67\xb3\x8d\xd7\xd7\x65\x1c\x9b\x9e\x75\x6c\x76\x32\x8f\xcd\x27\xd8\xc7\xbb\x1d\xed\xe3\xdd\x1f\x64\x1f\xb0\x28\xaf\x5b\xc6\x42\xce\x8c\xaa\x17\xc2\x39\x2f\xaa\xed\xb3\xb2\x05\xd8\x84\xfc\x86\x96\x45\x83\x09\xae\xb0\xb9\x2e\x63\x00\x64\xd7\x63\x0e\x80\xaa\x63\x10\xf0\xcb\x93\x09\x09\x5d\x76\x20\x81\x74\x53\x58\x98\xec\x40\xbc\x02\x2d\xd0\x7d\xe4\x13\xdb\x4a\x97\x66\x29\x93\xd6\x54\xee\xdf\x47\x0b\x58\x22\x6f\x8c\x41\x6e\x1d\x22\xe8\x0e\x5a\x18\x2f\xab\x37\x9b\x90\xc0\x33\xb4\xb5\x8f\xa8\x7e\x79\x72\x33\xa4\xa3\x99\x2c\xd0\x1d\xc3\x8d\xa1\x03\xd2\xfd\xa5\x2e\x41\xee\xbf\xd3\x7a\x61\x2a\xff\xdf\xce\x7c\x5f\x4c\xec\x2f\x17\xb5\xf5\xbe\xb8\x26\xeb\x95\x7a\xef\x5a\xaa\x66\xbc\xb5\x3d\x6f\x61\xbc\x83\x88\x09\xa8\xae\x60\xbf\x9a\x17\x34\x78\xc6\x0d\x58\x91\xff\xc3\x2d\xf8\xc5\xb2\x62\x15\xff\xdc\x01\x78\x05\x54\xae\xcb\x84\x01\xdb\xf5\x98\xb0\x64\x4c\x37\xe1\xd5\x72\x34\xfe\x0a\x90\x51\xfb\x55\x3d\x02\x3b\x50\x51\x7d\xb1\x27\xd2\xc1\xf6\x97\x17\x93\x28\x18\x98\xe5\xa7\x2a\xec\x9a\x62\xce\x9f\x4b\x63\x23\x21\x47\x40\xec\xae\xb0\x17\x03\x85\x3d\xb9\x8a\xc2\x1e\xe4\xf9\xe7\xce\x7c\x59\x9e\x7f\xa6\xcc\x57\x5e\xf9\x7d\x1d\xef\xcc\x79\xef\x9d\x39\xdf\xe9\x9d\x39\xdf\xfa\x9d\xb9\x3f\x22\xec\x37\x89\x2c\x6c\x18\x35\x27\xbf\x19\x5b\xad\x2e\x45\xb3\x7a\x0c\x91\x17\xc3\x77\x86\x95\xf6\x7a\x78\x33\x8e\x61\x22\xb5\xdf\xe6\xdc\x68\x5f\xd2\x50\x3c\x7c\x6a\x44\x97\xdf\xcc\xab\x2b\x0f\x16\xea\x0a\xf0\x65\xa1\xcf\x6d\xae\x4d\x37\x1c\xaf\x96\x67\x7c\x55\x5d\xa2\x7f\xa8\x2b\x86\x01\x10\xcc\xab\x41\x31\x98\x56\x54\x06\xb2\x3e\x30\xe1\xa9\xc3\x4a\x73\x27\x7a\x37\xba\xac\xcb\x93\x45\x59\x94\x19\x5b\x54\x28\x85\xe7\xe5\x42\xf3\x0d\x20\xea\x98\xfd\x6d\xe7\xa5\x6b\x66\xea\x5f\xae\x61\x1e\x78\xc8\x81\xdd\x1d\x3b\xe2\x9a\x3c\x3b\x13\x66\xc9\xe6\x7b\x1d\xd9\x8f\x0a\x0e\x19\x03\x72\x23\x39\x0d\xed\x56\x42\xe4\x5d\x35\x7f\x82\xaf\x5e\xe8\xa2\xee\xf7\xa2\xb3\xe6\xdb\xf5\xd9\x4f\x44\xf6\x66\xd0\x5e\xfc\xed\x3a\xad\x3d\xdd\x15\x0b\xa6\x38\xc1\x0c\xa7\x70\xa6\x26\xc3\x39\xe6\xb8\xd8\x1b\x20\x79\xfb\x6f\xd4\xd5\x29\xc2\xde\xd6\xcb\x03\x60\x74\xd3\xc6\x6c\x07\x61\xf9\x42\x6d\x9e\x80\xb0\x58\x7f\x91\xff\xfd\xed\x37\xc3\x01\x0c\x91\xf7\x37\x3e\xf0\x97\x23\x34\x5c\x05\xd3\xff\xe4\xd8\x5c\x83\x1f\x35\x6c\xf4\xf7\x02\x5a\x93\xf6\x3e\x02\xe9\x43\x73\xbe\x38\xa9\x66\xe8\x36\xa2\x5b\x6e\xa5\xee\x07\x9a\x87\xcb\xc5\x07\xbe\xaa\x5f\x0d\xb5\x30\xac\xe2\x83\x18\xb4\xeb\xd3\x01\x5b\x05\x9e\x7a\xd4\x6e\xb4\xdb\x59\x99\xfb\x88\x5e\x75\x83\xe8\xad\x35\xca\x59\xc5\x10\x5b\xef\x48\x67\xeb\x99\xac\xee\x4a\xe1\x46\x0b\xd0\x07\xd5\xf2\xb5\x4f\xec\x4b\x21\xf0\xf8\x13\xf6\xec\x28\x5a\x5d\xa3\x32\xec\xdc\xa9\xe1\x9e\x48\x65\x36\x4c\xd6\xea\x35\xed\xe2\x91\x6a\x33\xe0\x92\xdd\xdd\x7a\xf3\x7e\x97\xb6\xfb\xa4\x57\xbb\x84\x57\xb7\x7a\x33\xd8\xc2\x2f\xfe\x6a\x1e\x0e\xce\xce\xd7\xb3\x49\x9d\x48\x89\x1c\xc1\xf4\x5e\x69\x86\xee\xe5\x12\xc8\xb0\x4f\xb6\x4e\x45\x34\x05\xd7\x11\xa4\xc6\x39\xed\xba\x8d\x75\x23\xc9\xc0\x2b\x00\x8d\x30\xc9\x6c\x79\x06\x83\xa4\x65\xec\x47\xa3\x69\x6b\x63\xf6\x1c\x65\xf3\xe5\xc2\xf5\xa6\xb2\xad\x49\x03\x9e\xbe\x2d\xc3\x8f\x76\x5b\x86\xc7\x4e\x5b\xd6\x31\x43\x96\x22\xd9\x6d\x76\xbe\x9a\x76\xba\x3e\x04\xf8\xbf\x82\x61\xff\x55\x4a\x66\x88\xb4\x8e\xa5\x12\xdf\x30\xcc\xd6\xbb\xc6\xec\x04\xe0\x0c\x53\xbd\xb0\x2e\x93\x13\x0b\x99\xc6\x85\x2e\x3a\xfe\x33\xea\x06\x17\xdb\xf8\xc0\x85\x32\xf9\x1a\xfd\x9b\xf2\xad\x49\xec\x76\x53\x05\xe0\xce\xfa\x72\x93\x1e\x5b\xf7\xcd\xf4\x76\xcb\xa8\xad\x31\x1f\xdf\x4e\x69\xb8\xcd\x7e\x97\xc3\xdb\x7f\x41\xb3\xaa\x3a\x5b\xdf\x3d\x3c\x3c\xad\x66\xeb\x83\x94\x1f\x9e\x57\x05\xfd\x65\x8d\x3e\x90\x03\x7c\x40\x50\x7a\x89\xfe\xc7\x29\xab\x66\x25\x5b\x0b\x8b\x69\x37\xc8\xc0\xae\x10\xb9\xd9\xe3\xf0\x10\x7d\xcb\x2b\x79\x1c\x8e\x73\x21\xee\x92\xa5\x73\xbe\x46\x7f\x57\x94\xfe\x7e\xe3\x2b\xd8\xc6\xbf\xe2\xfc\x51\xb3\xff\x65\xb0\x93\x06\xdd\x92\xca\xbb\x85\x6e\xde\xac\x7f\xbe\x67\x47\x8f\xfe\x2e\xbb\xa3\x21\x7f\x0a\x3f\xb4\xb8\x4f\xd5\xf7\x2e\x6a\xf5\xeb\xcd\x9b\x86\xfd\x39\x47\x1d\x26\x1b\x60\x27\x1b\x27\xb0\x73\xe6\xef\x53\xb9\x1b\xff\x87\x65\xce\x0f\x7e\x59\xa3\xe5\x0a\x7d\x23\xb7\xd2\x94\x45\xc9\x73\x94\x2d\x73\x3e\x05\x2c\x6c\x91\xa3\xf3\x35\x47\x65\x25\xc6\xb5\xbf\x0b\x39\x6a\x7d\x50\xfb\x70\x9a\x3e\x9c\xa8\xef\xdd\x3e\xc8\x5f\xef\xc9\x3d\x49\x6d\xb3\x83\x06\xfa\x48\x47\xf6\xdb\x6f\xda\xb7\x83\x8b\x72\x91\x8b\xb7\xcb\x0e\x8c\xdc\x3a\x24\x78\x41\xfa\xcf\xb0\xd9\xe7\xc6\x57\x87\xb7\xef\x5c\xdb\xdf\xed\xc3\x1b\xb2\xb7\xeb\x6a\x55\x2e\x4e\x1e\xaf\x96\xa7\x0f\x67\x6c\xf5\x70\x99\x0b\xcd\xbd\x84\x1f\x0f\x0a\xed\x57\x25\xfc\x57\xec\x3d\x5f\x48\x19\xf7\x4d\xf6\xec\x7c\x71\x29\xe4\x7b\xe3\xab\x26\x82\x9d\x67\x6b\x92\x73\xf1\xe3\x44\xd2\x91\x1d\x84\xa5\x4d\xd8\x7c\x5f\x0f\x81\xf0\x53\xb6\x3c\x5f\x54\x7c\xa5\x66\x2e\xe1\xa7\x79\x1d\x2b\x64\xf3\x36\x58\xc0\x53\x38\xcf\x58\x7f\xe1\x9b\x6a\xc5\xc4\x97\x8b\x59\x39\xe7\x68\x52\x63\xbb\xaf\x90\x48\xd2\x5f\x41\x9b\x16\x61\xa6\xba\xf7\xa0\xaa\x1b\xec\xef\x0b\x57\xff\x0a\x74\x2a\x81\xbf\x3e\x42\xde\xe6\x5b\xea\x79\x42\xe7\xf2\xa7\xfb\xf0\xd3\x37\x8f\x1f\x8b\x9f\x2c\x94\x84\xb8\xe0\x75\x7d\x7d\xbe\x5a\x2d\x4f\x58\xc5\xa7\x60\x75\xd5\x8c\xaf\x38\x9c\xf3\x44\x0b\xbe\xa9\x90\x60\x81\x65\x15\x5f\x41\x23\xe8\xc6\x36\xfc\x01\x83\x13\x09\x7e\x13\x79\x9b\xc7\x0f\x3d\x6f\x4f\x58\xa8\xb7\xf9\x16\x3e\xfe\x43\x04\xe7\xf9\xf2\xa2\xa5\x0f\xcd\xbe\x92\x92\x97\x43\xf9\x44\x75\x51\x20\xf0\x1f\x3f\xde\x83\xa3\x99\xde\x1e\xda\x47\x1a\x66\x78\xb0\x5f\x57\x1c\x52\xd4\xdb\x2c\x58\x75\xf5\x7c\x71\xca\xaa\x6c\xc6\xf3\x96\xde\x3d\xb4\x5c\xcc\x2f\x11\x3b\x3b\xe3\xd0\xef\x72\x0d\x0e\x88\xce\x17\x65\x35\x15\x2f\x9a\x19\x5b\x73\x78\xdb\x14\x82\x68\x30\x35\x30\x42\x48\x55\xbd\x2f\xaa\xc1\x2a\x86\x7a\xa6\x7d\x3d\x63\xe5\x6a\xd8\x33\xe8\x97\xe2\xf5\x2b\x25\xba\x3b\x77\x14\xef\x37\xfa\x1d\xb0\xb4\x14\x80\xe2\xff\x2a\xde\x4b\xa8\xda\x1b\xaf\xe2\x0c\x7c\x01\xce\x00\xa3\x70\xeb\x0b\x8d\x95\xcb\xbc\xa5\x6b\xe4\xe5\x22\xe7\x1b\x74\x84\xee\x60\xa3\xd9\x37\x7e\x74\xeb\x96\x66\xfc\xfb\xfb\xb2\x99\xc5\xf8\x81\xce\x1b\x00\x79\xdb\x37\x76\x61\x4a\x8f\x85\xc6\xa5\x64\xe4\xaf\x77\x8e\x6a\xf5\xdf\xd3\xe4\x85\xf6\x8f\x0c\xf1\xa3\x46\xf4\xf5\xd7\x08\x7b\xb5\x01\xa1\xdf\x94\x0f\x29\x95\xd4\x9c\x48\x63\x45\xbf\xa1\x8e\x1d\x36\xc2\xdf\x82\x10\x20\xb4\x29\xa9\x11\x7e\x36\xe3\xd9\xfb\x97\x19\x9b\xb3\xd5\xff\x12\xad\x26\x42\x0f\xcf\x97\xe5\x42\xee\xa6\x06\x01\x34\x3f\x75\x3d\xbe\xfd\x59\x7a\x7d\x2b\x9c\x6a\xb6\x5a\x5e\xa0\x47\xab\xd5\x72\x35\x81\x5e\xdd\x7a\x22\x52\xa1\xd6\x34\x7f\xdc\xbf\x85\xf6\x5b\x04\x07\xd5\x52\x46\xd6\x09\x8e\xf6\x0e\xaa\xe5\x8f\x67\x67\x7c\xf5\x90\xad\xf9\x64\x0f\xed\x4b\x04\xc2\xe4\x17\xcb\x4a\x18\x38\x30\x2b\xe5\x72\x4b\x3c\xac\x3b\xfa\xf1\x33\x8c\x04\xad\x9c\x20\xab\x16\x99\x78\x2b\x8e\xa9\x5c\x66\x53\x83\x93\x94\xb2\x41\x1b\x13\x5d\x80\x5f\xd7\x6d\xa4\x46\x61\xaa\x72\x43\xbd\xbd\xbe\x5e\xa4\x43\x3c\xac\x1b\x9a\xd4\xa2\xa1\xbd\xa9\x8c\xf3\xf1\x63\xaa\x62\x9d\x0a\x73\xf8\x4e\x7a\x59\x71\xb4\xe6\xff\x75\xce\x17\x19\x04\x3a\x3b\xa3\x2d\x8d\xda\x74\x60\x20\xbc\x3c\x4d\x97\xf3\xc6\x91\x6c\x94\xa9\xd7\xa5\x4c\x86\x94\x1b\x4c\xe3\x42\x8a\xa4\x80\xb0\x12\xd0\x43\xaf\x61\xa9\xd9\x78\x6c\x60\x02\xc2\xb0\xce\x84\x3f\x64\xc2\x61\xf0\xf7\x76\x64\x12\x13\xc9\xa5\xa7\xb8\x7c\xe4\x75\x50\xec\x1f\x59\xac\x26\xda\xa2\x33\x8f\xbc\x41\x67\x82\x4f\x92\x28\xa6\x8a\xd9\x58\x32\xfb\x78\x4b\x66\x31\xd9\xb5\x53\x2d\xa4\x89\xab\x6e\x47\xbb\x1e\xd0\xd8\x26\x60\xe8\xbb\x84\x48\xfd\xd5\x38\xd1\x4f\x9a\x1a\xa4\x22\x75\x1f\x26\x57\x83\xac\xa9\x85\x1f\x1d\x54\x1a\xd0\xfa\x07\xa1\x04\x19\xad\xb6\x1c\x5c\xda\x1e\xeb\x84\xf5\x51\x46\x43\xb9\x7f\xe4\x70\xfd\x5e\x44\x6f\x9b\x7d\xae\x44\xb8\x91\xfd\x8a\xb3\xfc\xe1\x72\x51\x95\x8b\x73\x38\x3c\x0b\xda\x6f\x43\x91\xe0\xe4\x3b\xe8\xfb\xd7\x47\xc0\xd6\x43\x91\x58\x18\x46\x83\x5b\xdf\x2d\x3e\xb0\x79\x99\x03\x90\x94\xf6\x2d\xd5\xad\x46\xde\x5d\x2a\x48\x22\x84\x89\x82\x37\x0d\x9d\xb7\xca\x4d\x44\xd3\xe6\xc7\xfd\x7d\x91\x8c\xd7\x11\xaa\x87\xe6\xa6\x0c\x23\x32\x11\x14\x51\xf2\x1f\x5a\x30\x34\x42\xfb\x8f\x1b\xc6\x0e\x0f\xd1\x77\x05\xba\xe0\x48\xe4\x6b\xe7\x67\x48\x64\xaa\x53\x54\x56\xff\xf7\x7f\xff\x9f\x7a\x58\xd2\x51\x00\xc7\x37\x2c\x3d\x1f\x00\xde\x1a\x04\x7f\x69\xbd\x2f\xc1\x0b\x26\xad\x95\x0b\x60\xac\x9b\x21\xd1\xbf\xf8\xfa\x97\xc0\x60\xbe\x43\x5d\x7d\x82\xaa\xba\x98\x8e\x86\x5a\x57\x92\x2d\xd8\x1c\x0e\x3f\x34\x72\x7c\xc1\x59\x8e\x8a\x72\xb5\xae\x6a\x29\x41\xb7\x76\x57\xf3\x70\x74\x43\x93\xc5\x72\x28\xde\xf5\x5e\x6d\x13\x92\xd0\x4d\xa5\x7f\x15\x59\x35\x5e\x1b\xf9\xd6\xbc\x0e\xc7\xb0\x1e\x9e\x47\xb5\x41\x3d\xac\x51\x81\x5a\xd0\x91\xc5\x61\xee\xf5\xe3\x81\x8e\x0c\xcb\xd7\x0c\xa8\xb9\xd3\x68\xd7\x94\x80\x35\xd6\xdb\x9a\xaf\x16\xa3\xba\x09\xfc\x0e\x26\x58\xa7\xf5\xb2\xef\x7e\x5f\xb6\xa7\xec\x12\x95\x8b\x6c\x7e\x0e\x2f\x21\xe2\xe5\x42\x7f\xa5\x31\x49\xf9\x71\x2d\x9d\x47\x3b\x48\x07\x4c\xf9\x6a\x02\xf4\xd4\x7b\x1a\x81\xbd\x49\x92\x96\x2e\x50\xdf\x26\x50\x0f\x92\x17\x29\xb0\xb1\xfc\xe0\x73\xca\x7c\x38\xc2\xf7\x25\x4a\x95\x44\x1f\x5f\xaf\x44\x21\x64\x5c\x51\xe8\x31\x08\xdd\xdb\xf4\xc5\xee\x6d\xbc\x87\x7b\xe8\x37\x90\xc8\x44\xf2\x20\x7f\x6d\xf4\x11\x58\xf5\x01\x6f\x54\x86\x77\x0c\xec\xe9\xaf\x60\x66\x4d\xd4\xf2\x34\x6a\xe1\xc7\x57\x8f\xef\x50\x94\xc3\x4c\x19\xcf\x9b\xc8\x5b\x87\x4d\x75\x02\xab\xf9\x0e\x01\x4d\xfb\x0e\xf1\xe7\x5e\x2f\x27\x51\xb9\x46\x3b\x1a\x4b\xfe\x1a\x7c\xdd\x94\x44\x03\xab\xa3\x1a\x50\xd1\x03\xa0\x96\x94\x68\x31\xb6\x9d\xfd\xe9\xa4\x3b\xed\x3c\x51\x75\x7a\xa6\x65\x23\x93\xea\xf4\x0c\x1d\xf5\xc6\x92\x3d\xf4\x97\xa3\x23\x19\x94\xfb\xd9\x89\x5a\xc4\xa8\x4e\xcf\xfa\x79\x86\xf6\x82\xde\x42\xef\x7d\xce\xc9\x37\x21\x56\x74\x04\x0c\xde\xfa\xc0\x57\xeb\x72\xb9\xb8\x75\x17\xdd\x82\x49\xdf\x5b\x53\xf1\xab\xe4\xe7\xd6\x5d\x2d\x2b\x84\xdf\x65\x77\xd5\xef\xf2\xcb\x8d\xaf\x3e\xaa\x49\xba\x97\xcb\x53\x8e\x1e\x3c\xfd\x16\xa5\xe7\xe5\x3c\x47\xcb\xb3\xaa\x3c\x2d\x7f\xe5\xab\xf5\x14\xcd\xcb\xf7\x1c\xad\x0e\x7e\x59\x4f\xe5\x2b\x31\xcc\xb4\xaf\xcf\x78\x56\x16\x65\x26\x9c\x37\x2f\x41\xe1\x67\xac\xaa\xf8\x6a\xb1\x06\x7c\xd0\xa8\x9a\x71\x54\x2c\xe7\xf3\xe5\x45\xb9\x38\xb9\x2b\xe7\x3c\x85\xf9\xf5\xce\x45\xa2\x5b\xb5\xd1\xdc\x92\x93\xbb\x1d\x80\x03\x76\x9a\xf7\x66\x51\x9b\x23\x92\xe2\xd9\x8d\xaf\xa4\xba\xd4\xa1\xc9\x66\x9a\xbb\x3b\x80\x89\x3e\x83\xee\x40\x39\xed\xdb\x45\x6f\xd6\xf8\x2f\xda\xf7\x83\xc5\x32\xe7\xaf\x2e\xcf\x78\x9b\xcc\xb5\x73\xd5\xea\xc5\xa3\x5c\xe8\xf3\xc6\x2f\xca\xc5\xc9\xf2\x7f\xbe\x44\x1f\xbc\x03\x7a\xe0\xc1\xeb\x79\xdb\x42\x3b\x4b\xda\x30\xa3\x42\x63\x8d\x89\xad\x2e\x66\x6c\xde\xc3\x14\x1f\x78\x77\xe4\x44\xcc\xaa\xde\x1b\x25\x4f\x31\xaa\xdf\x66\x6c\xfd\xec\x62\xf1\xbc\xde\x02\x73\xa4\x80\x0e\xba\xbf\x03\x78\xb3\x44\x02\x55\xe3\xa4\x50\xea\x88\xd1\x05\x97\xeb\x43\xe2\x39\x1c\x24\xde\x13\xb2\xd1\x65\xf5\xe6\xbd\x2c\x60\x28\x20\xe0\x73\x67\xf2\xab\xd7\xaf\x17\xb3\x72\xb1\x14\xbd\x62\xe8\x82\xa7\x48\x1d\x54\x55\xb3\xd6\x07\xca\xa0\x95\x4c\x3e\xde\x50\x47\x54\x61\xd9\xe4\xe3\xf4\x1f\x1f\xdf\x4e\x69\xb4\xcd\x92\xc8\xe0\xc4\xee\xeb\xa7\x4f\x8e\xab\xea\xec\x85\x18\x32\xd6\x55\x83\xed\xaf\x69\x79\x22\x37\xb3\x1c\xfc\xb2\xfe\xeb\x36\x98\x6f\x9d\xaf\x39\xbc\xb0\x65\xd5\xad\x7b\x37\x86\x84\xbe\x29\x4f\x7e\x00\x84\xf7\x44\x87\x7f\x59\xcf\x44\x50\x2e\x4f\x16\xcb\x15\xbf\x3b\x2f\x17\xfc\x46\x43\xfa\x82\xa7\xfe\x56\x24\x85\x92\x7e\xe2\xa9\x1c\x9b\xe4\x31\xe3\x5b\x07\x87\xf3\x32\x3d\x14\x28\x44\x70\xbe\x71\x78\x88\xf2\xe5\xa2\x42\xcb\x0f\x7c\xb5\x2a\x73\x5e\x2f\x38\xd4\xeb\x1b\x37\xb4\x23\xc8\x6a\xe5\x40\x04\xb8\x5b\xcd\x86\x06\x58\x8f\xe8\x00\x1c\x48\x92\x5d\x28\x61\x20\xb0\x4c\xa6\x83\x00\x73\xf7\x6e\x7c\x34\x48\x43\x3e\x51\x0b\x5b\x35\xc7\x7f\xbd\x4b\xc8\xc7\xb7\x42\x0a\xd3\x37\x52\x0a\x6f\xf7\x6e\x1c\x1e\xfe\x7f\x68\xbd\x3c\x5f\x65\xfc\x29\x3b\x3b\x2b\x17\x27\x3f\xbe\x78\x72\x24\x1e\xde\x99\xc3\x26\xd2\x5f\xd6\x07\xa7\xec\xec\xc6\xff\x0b\x00\x00\xff\xff\x15\xd8\x48\xf5\x3d\x29\x06\x00") func web3JsBytes() ([]byte, error) { return bindataRead( @@ -122,8 +111,8 @@ func web3Js() (*asset, error) { // 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 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) @@ -148,8 +137,8 @@ func MustAsset(name string) []byte { // 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 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) @@ -190,8 +179,8 @@ var _bindata = map[string]func() (*asset, error){ func AssetDir(name string) ([]string, error) { node := _bintree if len(name) != 0 { - canonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(canonicalName, "/") + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") for _, p := range pathList { node = node.Children[p] if node == nil { @@ -262,6 +251,6 @@ func RestoreAssets(dir, name string) error { } func _filePath(dir, name string) string { - canonicalName := strings.Replace(name, "\\", "/", -1) - return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...) + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } diff --git a/internal/jsre/deps/web3.js b/internal/jsre/deps/web3.js index 07418d0563..e42cc2963d 100644 --- a/internal/jsre/deps/web3.js +++ b/internal/jsre/deps/web3.js @@ -3811,6 +3811,39 @@ var outputTransactionReceiptFormatter = function (receipt){ return receipt; }; +/** + * Formats the output of a transaction original data and receipt to its proper values + * + * @method outputTransactionDataAndReceiptFormatter + * @param {Object} dataAndReceipt + * @returns {Object} + */ +var outputTransactionDataAndReceiptFormatter = function (dataAndReceipt){ + if(dataAndReceipt.receipt.blockNumber !== null) + dataAndReceipt.receipt.blockNumber = utils.toDecimal(dataAndReceipt.receipt.blockNumber); + if(dataAndReceipt.receipt.transactionIndex !== null) + dataAndReceipt.receipt.transactionIndex = utils.toDecimal(dataAndReceipt.receipt.transactionIndex); + dataAndReceipt.receipt.cumulativeGasUsed = utils.toDecimal(dataAndReceipt.receipt.cumulativeGasUsed); + dataAndReceipt.receipt.gasUsed = utils.toDecimal(dataAndReceipt.receipt.gasUsed); + + if(utils.isArray(dataAndReceipt.receipt.logs)) { + dataAndReceipt.receipt.logs = dataAndReceipt.receipt.logs.map(function(log){ + return outputLogFormatter(log); + }); + } + + if(dataAndReceipt.txData.blockNumber !== null) + dataAndReceipt.txData.blockNumber = utils.toDecimal(dataAndReceipt.txData.blockNumber); + if(dataAndReceipt.txData.transactionIndex !== null) + dataAndReceipt.txData.transactionIndex = utils.toDecimal(dataAndReceipt.txData.transactionIndex); + dataAndReceipt.txData.nonce = utils.toDecimal(dataAndReceipt.txData.nonce); + dataAndReceipt.txData.gas = utils.toDecimal(dataAndReceipt.txData.gas); + dataAndReceipt.txData.gasPrice = utils.toBigNumber(dataAndReceipt.txData.gasPrice); + dataAndReceipt.txData.value = utils.toBigNumber(dataAndReceipt.txData.value); + + return dataAndReceipt; +}; + /** * Formats the output of a block to its proper values * @@ -3957,6 +3990,7 @@ module.exports = { outputBigNumberFormatter: outputBigNumberFormatter, outputTransactionFormatter: outputTransactionFormatter, outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, + outputTransactionDataAndReceiptFormatter: outputTransactionDataAndReceiptFormatter, outputBlockFormatter: outputBlockFormatter, outputLogFormatter: outputLogFormatter, outputPostFormatter: outputPostFormatter, @@ -5343,6 +5377,27 @@ var methods = function () { outputFormatter: formatters.outputTransactionFormatter }); + var getTransactionDataAndReceipt = new Method({ + name: 'getTransactionDataAndReceipt', + call: 'eth_getTransactionDataAndReceipt', + params: 1, + outputFormatter: formatters.outputTransactionDataAndReceiptFormatter + }); + + var getTransactionsByBlockNumber = new Method({ + name: 'getTransactionsByBlockNumber', + call: 'eth_getTransactionsByBlockNumber', + params: 1, + outputFormatter: formatters.outputTransactionFormatter + }); + + var getTransactionReceiptsByBlockNumber = new Method({ + name: 'getTransactionReceiptsByBlockNumber', + call: 'eth_getTransactionReceiptsByBlockNumber', + params: 1, + outputFormatter: formatters.outputTransactionReceiptFormatter + }); + var getTransactionReceipt = new Method({ name: 'getTransactionReceipt', call: 'eth_getTransactionReceipt', @@ -5442,6 +5497,9 @@ var methods = function () { getBlockUncleCount, getTransaction, getTransactionFromBlock, + getTransactionsByBlockNumber, + getTransactionReceiptsByBlockNumber, + getTransactionDataAndReceipt, getTransactionReceipt, getTransactionCount, call, diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index 4d85f0597d..c978667715 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -493,6 +493,13 @@ web3._extend({ params: 1, inputFormatter: [web3._extend.formatters.inputTransactionFormatter] }), + new web3._extend.Method({ + name: 'estimateGas', + call: 'eth_estimateGas', + params: 2, + inputFormatter: [web3._extend.formatters.inputCallFormatter, web3._extend.formatters.inputBlockNumberFormatter], + outputFormatter: web3._extend.utils.toDecimal + }), new web3._extend.Method({ name: 'submitTransaction', call: 'eth_submitTransaction', diff --git a/les/client.go b/les/client.go index 94ac4ce847..091f89380f 100644 --- a/les/client.go +++ b/les/client.go @@ -102,7 +102,7 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { eventMux: ctx.EventMux, reqDist: newRequestDistributor(peers, &mclock.System{}), accountManager: ctx.AccountManager, - engine: eth.CreateConsensusEngine(ctx, chainConfig, &config.Ethash, nil, false, chainDb), + engine: eth.CreateConsensusEngine(ctx, chainConfig, &config.Ethash, nil, false, chainDb, nil, genesisHash), bloomRequests: make(chan chan *bloombits.Retrieval), bloomIndexer: eth.NewBloomIndexer(chainDb, params.BloomBitsBlocksClient, params.HelperTrieConfirmations), serverPool: newServerPool(chainDb, config.UltraLightServers), @@ -221,7 +221,7 @@ func (s *LightEthereum) APIs() []rpc.API { }, { Namespace: "eth", Version: "1.0", - Service: filters.NewPublicFilterAPI(s.ApiBackend, true), + Service: filters.NewPublicFilterAPI(s.ApiBackend, true, s.config.RangeLimit), Public: true, }, { Namespace: "net", diff --git a/les/server_handler.go b/les/server_handler.go index 9543e6ed98..f27bb5ea62 100644 --- a/les/server_handler.go +++ b/les/server_handler.go @@ -582,6 +582,7 @@ func (h *serverHandler) handleMsg(p *clientPeer, wg *sync.WaitGroup) error { var ( lastBHash common.Hash root common.Hash + header *types.Header ) reqCnt := len(req.Reqs) if accept(req.ReqID, uint64(reqCnt), MaxProofsFetch) { @@ -596,10 +597,6 @@ func (h *serverHandler) handleMsg(p *clientPeer, wg *sync.WaitGroup) error { return } // Look up the root hash belonging to the request - var ( - header *types.Header - trie state.Trie - ) if request.BHash != lastBHash { root, lastBHash = common.Hash{}, request.BHash @@ -626,6 +623,7 @@ func (h *serverHandler) handleMsg(p *clientPeer, wg *sync.WaitGroup) error { // Open the account or storage trie for the request statedb := h.blockchain.StateCache() + var trie state.Trie switch len(request.AccKey) { case 0: // No account key specified, open an account trie diff --git a/log/async_file_writer.go b/log/async_file_writer.go new file mode 100644 index 0000000000..c67df94823 --- /dev/null +++ b/log/async_file_writer.go @@ -0,0 +1,214 @@ +package log + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "sync" + "sync/atomic" + "time" +) + +type HourTicker struct { + stop chan struct{} + C <-chan time.Time +} + +func NewHourTicker() *HourTicker { + ht := &HourTicker{ + stop: make(chan struct{}), + } + ht.C = ht.Ticker() + return ht +} + +func (ht *HourTicker) Stop() { + ht.stop <- struct{}{} +} + +func (ht *HourTicker) Ticker() <-chan time.Time { + ch := make(chan time.Time) + go func() { + hour := time.Now().Hour() + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + for { + select { + case t := <-ticker.C: + if t.Hour() != hour { + ch <- t + hour = t.Hour() + } + case <-ht.stop: + return + } + } + }() + return ch +} + +type AsyncFileWriter struct { + filePath string + fd *os.File + + wg sync.WaitGroup + started int32 + buf chan []byte + stop chan struct{} + hourTicker *HourTicker +} + +func NewAsyncFileWriter(filePath string, bufSize int64) *AsyncFileWriter { + absFilePath, err := filepath.Abs(filePath) + if err != nil { + panic(fmt.Sprintf("get file path of logger error. filePath=%s, err=%s", filePath, err)) + } + + return &AsyncFileWriter{ + filePath: absFilePath, + buf: make(chan []byte, bufSize), + stop: make(chan struct{}), + hourTicker: NewHourTicker(), + } +} + +func (w *AsyncFileWriter) initLogFile() error { + var ( + fd *os.File + err error + ) + + realFilePath := w.timeFilePath(w.filePath) + fd, err = os.OpenFile(realFilePath, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0644) + if err != nil { + return err + } + + w.fd = fd + _, err = os.Lstat(w.filePath) + if err == nil || os.IsExist(err) { + err = os.Remove(w.filePath) + if err != nil { + return err + } + } + + err = os.Symlink(realFilePath, w.filePath) + if err != nil { + return err + } + + return nil +} + +func (w *AsyncFileWriter) Start() error { + if !atomic.CompareAndSwapInt32(&w.started, 0, 1) { + return errors.New("logger has already been started") + } + + err := w.initLogFile() + if err != nil { + return err + } + + w.wg.Add(1) + go func() { + defer func() { + atomic.StoreInt32(&w.started, 0) + + w.flushBuffer() + w.flushAndClose() + + w.wg.Done() + }() + + for { + select { + case msg, ok := <-w.buf: + if !ok { + fmt.Fprintln(os.Stderr, "buf channel has been closed.") + return + } + w.SyncWrite(msg) + case <-w.stop: + return + } + } + }() + return nil +} + +func (w *AsyncFileWriter) flushBuffer() { + for { + select { + case msg := <-w.buf: + w.SyncWrite(msg) + default: + return + } + } +} + +func (w *AsyncFileWriter) SyncWrite(msg []byte) { + w.rotateFile() + if w.fd != nil { + w.fd.Write(msg) + } +} + +func (w *AsyncFileWriter) rotateFile() { + select { + case <-w.hourTicker.C: + if err := w.flushAndClose(); err != nil { + fmt.Fprintf(os.Stderr, "flush and close file error. err=%s", err) + } + if err := w.initLogFile(); err != nil { + fmt.Fprintf(os.Stderr, "init log file error. err=%s", err) + } + default: + } +} + +func (w *AsyncFileWriter) Stop() { + w.stop <- struct{}{} + w.wg.Wait() + + w.hourTicker.Stop() +} + +func (w *AsyncFileWriter) Write(msg []byte) (n int, err error) { + // TODO(wuzhenxing): for the underlying array may change, is there a better way to avoid copying slice? + buf := make([]byte, len(msg)) + copy(buf, msg) + + select { + case w.buf <- buf: + default: + } + return 0, nil +} + +func (w *AsyncFileWriter) Flush() error { + if w.fd == nil { + return nil + } + return w.fd.Sync() +} + +func (w *AsyncFileWriter) flushAndClose() error { + if w.fd == nil { + return nil + } + + err := w.fd.Sync() + if err != nil { + return err + } + + return w.fd.Close() +} + +func (w *AsyncFileWriter) timeFilePath(filePath string) string { + return filePath + "." + time.Now().Format("2006-01-02_15") +} diff --git a/log/async_file_writer_test.go b/log/async_file_writer_test.go new file mode 100644 index 0000000000..3e8ba3bac8 --- /dev/null +++ b/log/async_file_writer_test.go @@ -0,0 +1,26 @@ +package log + +import ( + "io/ioutil" + "os" + "strings" + "testing" +) + +func TestWriter(t *testing.T) { + w := NewAsyncFileWriter("./hello.log", 100) + w.Start() + w.Write([]byte("hello\n")) + w.Write([]byte("world\n")) + w.Stop() + files, _ := ioutil.ReadDir("./") + for _, f := range files { + fn := f.Name() + if strings.HasPrefix(fn, "hello") { + t.Log(fn) + content, _ := ioutil.ReadFile(fn) + t.Log(content) + os.Remove(fn) + } + } +} diff --git a/log/handler.go b/log/handler.go index 3c99114dcb..b73533d5f3 100644 --- a/log/handler.go +++ b/log/handler.go @@ -5,6 +5,7 @@ import ( "io" "net" "os" + "path" "reflect" "sync" @@ -70,6 +71,21 @@ func FileHandler(path string, fmtr Format) (Handler, error) { return closingHandler{f, StreamHandler(f, fmtr)}, nil } +// RotatingFileHandler returns a handler which writes log records to file chunks +// at the given path. When a file's size reaches the limit, the handler creates +// a new file named after the timestamp of the first log record it will contain. +func RotatingFileHandler(filePath string, limit uint, formatter Format) (Handler, error) { + if _, err := os.Stat(path.Dir(filePath)); os.IsNotExist(err) { + err := os.MkdirAll(path.Dir(filePath), 0755) + if err != nil { + return nil, fmt.Errorf("could not create directory %s, %v", path.Dir(filePath), err) + } + } + fileWriter := NewAsyncFileWriter(filePath, int64(limit)) + fileWriter.Start() + return StreamHandler(fileWriter, formatter), nil +} + // NetHandler opens a socket to the given address and writes records // over the connection. func NetHandler(network, addr string, fmtr Format) (Handler, error) { diff --git a/log/logger.go b/log/logger.go index 276d6969e2..e78beb72c8 100644 --- a/log/logger.go +++ b/log/logger.go @@ -243,3 +243,19 @@ func (c Ctx) toArray() []interface{} { return arr } + +func NewFileLvlHandler(logPath string, maxBytesSize uint, level string) Handler { + rfh, err := RotatingFileHandler( + logPath, + maxBytesSize, + LogfmtFormat(), + ) + if err != nil { + panic(err) + } + logLevel, err := LvlFromString(level) + if err != nil { + panic(err) + } + return LvlFilterHandler(logLevel, rfh) +} diff --git a/miner/miner.go b/miner/miner.go index b968b3a92a..d5c9428954 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -43,14 +43,15 @@ type Backend interface { // Config is the configuration parameters of mining. type Config struct { - Etherbase common.Address `toml:",omitempty"` // Public address for block mining rewards (default = first account) - Notify []string `toml:",omitempty"` // HTTP URL list to be notified of new work packages(only useful in ethash). - ExtraData hexutil.Bytes `toml:",omitempty"` // Block extra data set by the miner - GasFloor uint64 // Target gas floor for mined blocks. - GasCeil uint64 // Target gas ceiling for mined blocks. - GasPrice *big.Int // Minimum gas price for mining a transaction - Recommit time.Duration // The time interval for miner to re-create mining work. - Noverify bool // Disable remote mining solution verification(only useful in ethash). + Etherbase common.Address `toml:",omitempty"` // Public address for block mining rewards (default = first account) + Notify []string `toml:",omitempty"` // HTTP URL list to be notified of new work packages(only useful in ethash). + ExtraData hexutil.Bytes `toml:",omitempty"` // Block extra data set by the miner + DelayLeftOver time.Duration // Time for broadcast block + GasFloor uint64 // Target gas floor for mined blocks. + GasCeil uint64 // Target gas ceiling for mined blocks. + GasPrice *big.Int // Minimum gas price for mining a transaction + Recommit time.Duration // The time interval for miner to re-create mining work. + Noverify bool // Disable remote mining solution verification(only useful in ethash). } // Miner creates blocks and searches for proof-of-work values. @@ -72,7 +73,7 @@ func New(eth Backend, config *Config, chainConfig *params.ChainConfig, mux *even mux: mux, engine: engine, exitCh: make(chan struct{}), - worker: newWorker(config, chainConfig, engine, eth, mux, isLocalBlock, true), + worker: newWorker(config, chainConfig, engine, eth, mux, isLocalBlock, false), canStart: 1, } go miner.update() @@ -166,7 +167,20 @@ func (miner *Miner) SetRecommitInterval(interval time.Duration) { // Pending returns the currently pending block and associated state. func (miner *Miner) Pending() (*types.Block, *state.StateDB) { - return miner.worker.pending() + if miner.worker.isRunning() { + return miner.worker.pending() + } else { + // fallback to latest block + block := miner.worker.chain.CurrentBlock() + if block == nil { + return nil, nil + } + stateDb, err := miner.worker.chain.StateAt(block.Root()) + if err != nil { + return nil, nil + } + return block, stateDb + } } // PendingBlock returns the currently pending block. @@ -175,7 +189,12 @@ func (miner *Miner) Pending() (*types.Block, *state.StateDB) { // simultaneously, please use Pending(), as the pending state can // change between multiple method calls func (miner *Miner) PendingBlock() *types.Block { - return miner.worker.pendingBlock() + if miner.worker.isRunning() { + return miner.worker.pendingBlock() + } else { + // fallback to latest block + return miner.worker.chain.CurrentBlock() + } } func (miner *Miner) SetEtherbase(addr common.Address) { diff --git a/miner/worker.go b/miner/worker.go index 59a47a1220..54aef7bfbd 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -28,11 +28,14 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/consensus/parlia" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/systemcontracts" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" ) @@ -54,7 +57,7 @@ const ( resubmitAdjustChanSize = 10 // miningLogAtDepth is the number of confirmations before logging successful mining. - miningLogAtDepth = 7 + miningLogAtDepth = 11 // minRecommitInterval is the minimal time interval to recreate the mining block with // any newly arrived transactions. @@ -73,7 +76,11 @@ const ( intervalAdjustBias = 200 * 1000.0 * 1000.0 // staleThreshold is the maximum depth of the acceptable stale block. - staleThreshold = 7 + staleThreshold = 11 +) + +var ( + commitTxsTimer = metrics.NewRegisteredTimer("worker/committxs", nil) ) // environment is the worker's current environment and holds all of the current state information. @@ -347,17 +354,21 @@ func (w *worker) newWorkLoop(recommit time.Duration) { case <-w.startCh: clearPending(w.chain.CurrentBlock().NumberU64()) timestamp = time.Now().Unix() - commit(false, commitInterruptNewHead) + commit(true, commitInterruptNewHead) case head := <-w.chainHeadCh: + if !w.isRunning() { + continue + } clearPending(head.Block.NumberU64()) timestamp = time.Now().Unix() - commit(false, commitInterruptNewHead) + commit(true, commitInterruptNewHead) case <-timer.C: // If mining is running resubmit a new work cycle periodically to pull in // higher priced transactions. Disable this overhead for pending blocks. - if w.isRunning() && (w.chainConfig.Clique == nil || w.chainConfig.Clique.Period > 0) { + if w.isRunning() && ((w.chainConfig.Ethash != nil) || (w.chainConfig.Clique != nil && + w.chainConfig.Clique.Period > 0) || (w.chainConfig.Parlia != nil && w.chainConfig.Parlia.Period > 0)) { // Short circuit if no new transaction arrives. if atomic.LoadInt32(&w.newTxs) == 0 { timer.Reset(recommit) @@ -414,6 +425,9 @@ func (w *worker) mainLoop() { case ev := <-w.chainSideCh: // Short circuit for duplicate side blocks + if _, ok := w.engine.(*parlia.Parlia); ok { + continue + } if _, exist := w.localUncles[ev.Block.Hash()]; exist { continue } @@ -482,7 +496,8 @@ func (w *worker) mainLoop() { } else { // If clique is running in dev mode(period is 0), disable // advance sealing here. - if w.chainConfig.Clique != nil && w.chainConfig.Clique.Period == 0 { + if (w.chainConfig.Clique != nil && w.chainConfig.Clique.Period == 0) || + (w.chainConfig.Parlia != nil && w.chainConfig.Parlia.Period == 0) { w.commitNewWork(nil, true, time.Now().Unix()) } } @@ -718,10 +733,18 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin if w.current.gasPool == nil { w.current.gasPool = new(core.GasPool).AddGas(w.current.header.GasLimit) + w.current.gasPool.SubGas(params.SystemTxsGas) } var coalescedLogs []*types.Log - + var stopTimer *time.Timer + delay := w.engine.Delay(w.chain, w.current.header) + if delay != nil { + stopTimer = time.NewTimer(*delay - w.config.DelayLeftOver) + log.Debug("Time left for mining work", "left", (*delay - w.config.DelayLeftOver).String(), "leftover", w.config.DelayLeftOver) + defer stopTimer.Stop() + } +LOOP: for { // In the following three cases, we will interrupt the execution of the transaction. // (1) new head block event arrival, the interrupt signal is 1 @@ -748,6 +771,14 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin log.Trace("Not enough gas for further transactions", "have", w.current.gasPool, "want", params.TxGas) break } + if stopTimer != nil { + select { + case <-stopTimer.C: + log.Info("Not enough time for further transactions", "txs", len(w.current.txs)) + break LOOP + default: + } + } // Retrieve the next transaction and abort if all done tx := txs.Peek() if tx == nil { @@ -885,6 +916,7 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) if w.chainConfig.DAOForkSupport && w.chainConfig.DAOForkBlock != nil && w.chainConfig.DAOForkBlock.Cmp(header.Number) == 0 { misc.ApplyDAOHardFork(env.state) } + systemcontracts.UpgradeBuildInSystemContract(w.chainConfig, header.Number, env.state) // Accumulate the uncles for the current block uncles := make([]*types.Header, 0, 2) commitUncles := func(blocks map[common.Hash]*types.Block) { @@ -920,32 +952,32 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) pending, err := w.eth.TxPool().Pending() if err != nil { log.Error("Failed to fetch pending transactions", "err", err) - return } // Short circuit if there is no available pending transactions - if len(pending) == 0 { - w.updateSnapshot() - return - } - // Split the pending transactions into locals and remotes - localTxs, remoteTxs := make(map[common.Address]types.Transactions), pending - for _, account := range w.eth.TxPool().Locals() { - if txs := remoteTxs[account]; len(txs) > 0 { - delete(remoteTxs, account) - localTxs[account] = txs + if len(pending) != 0 { + start := time.Now() + // Split the pending transactions into locals and remotes + localTxs, remoteTxs := make(map[common.Address]types.Transactions), pending + for _, account := range w.eth.TxPool().Locals() { + if txs := remoteTxs[account]; len(txs) > 0 { + delete(remoteTxs, account) + localTxs[account] = txs + } } - } - if len(localTxs) > 0 { - txs := types.NewTransactionsByPriceAndNonce(w.current.signer, localTxs) - if w.commitTransactions(txs, w.coinbase, interrupt) { - return + if len(localTxs) > 0 { + txs := types.NewTransactionsByPriceAndNonce(w.current.signer, localTxs) + if w.commitTransactions(txs, w.coinbase, interrupt) { + return + } } - } - if len(remoteTxs) > 0 { - txs := types.NewTransactionsByPriceAndNonce(w.current.signer, remoteTxs) - if w.commitTransactions(txs, w.coinbase, interrupt) { - return + if len(remoteTxs) > 0 { + txs := types.NewTransactionsByPriceAndNonce(w.current.signer, remoteTxs) + if w.commitTransactions(txs, w.coinbase, interrupt) { + return + } } + commitTxsTimer.UpdateSince(start) + log.Info("Gas pool", "height", header.Number.String(), "pool", w.current.gasPool.String()) } w.commit(uncles, w.fullTaskHook, true, tstart) } @@ -953,14 +985,8 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) // commit runs any post-transaction state modifications, assembles the final block // and commits new work if consensus engine is running. func (w *worker) commit(uncles []*types.Header, interval func(), update bool, start time.Time) error { - // Deep copy receipts here to avoid interaction between different tasks. - receipts := make([]*types.Receipt, len(w.current.receipts)) - for i, l := range w.current.receipts { - receipts[i] = new(types.Receipt) - *receipts[i] = *l - } s := w.current.state.Copy() - block, err := w.engine.FinalizeAndAssemble(w.chain, w.current.header, s, w.current.txs, uncles, w.current.receipts) + block, receipts, err := w.engine.FinalizeAndAssemble(w.chain, types.CopyHeader(w.current.header), s, w.current.txs, uncles, w.current.receipts) if err != nil { return err } diff --git a/node/config.go b/node/config.go index 1905ac7fa5..730757e56d 100644 --- a/node/config.go +++ b/node/config.go @@ -95,6 +95,12 @@ type Config struct { // NoUSB disables hardware wallet monitoring and connectivity. NoUSB bool `toml:",omitempty"` + // DirectBroadcast enable directly broadcast mined block to all peers + DirectBroadcast bool `toml:",omitempty"` + + // RangeLimit enable 5000 blocks limit when handle range query + RangeLimit bool `toml:",omitempty"` + // SmartCardDaemonPath is the path to the smartcard daemon's socket SmartCardDaemonPath string `toml:",omitempty"` @@ -188,6 +194,8 @@ type Config struct { // Logger is a custom logger to use with the p2p.Server. Logger log.Logger `toml:",omitempty"` + LogConfig *LogConfig `toml:",omitempty"` + staticNodesWarning bool trustedNodesWarning bool oldGethResourceWarning bool @@ -543,3 +551,10 @@ func (c *Config) warnOnce(w *bool, format string, args ...interface{}) { l.Warn(fmt.Sprintf(format, args...)) *w = true } + +type LogConfig struct { + FileRoot string + FilePath string + MaxBytesSize uint + Level string +} diff --git a/node/node.go b/node/node.go index 1d14317fc1..26515f49c5 100644 --- a/node/node.go +++ b/node/node.go @@ -21,6 +21,7 @@ import ( "fmt" "net" "os" + "path" "path/filepath" "reflect" "strings" @@ -104,6 +105,15 @@ func New(conf *Config) (*Node, error) { if err != nil { return nil, err } + if conf.LogConfig != nil { + logFilePath := "" + if conf.LogConfig.FileRoot == "" { + logFilePath = path.Join(conf.DataDir, conf.LogConfig.FilePath) + } else { + logFilePath = path.Join(conf.LogConfig.FileRoot, conf.LogConfig.FilePath) + } + log.Root().SetHandler(log.NewFileLvlHandler(logFilePath, conf.LogConfig.MaxBytesSize, conf.LogConfig.Level)) + } if conf.Logger == nil { conf.Logger = log.New() } diff --git a/p2p/discover/v5_udp.go b/p2p/discover/v5_udp.go index e667be1690..65550fc65f 100644 --- a/p2p/discover/v5_udp.go +++ b/p2p/discover/v5_udp.go @@ -419,9 +419,20 @@ func (t *UDPv5) call(node *enode.Node, responseType byte, packet packetV5) *call // callDone tells dispatch that the active call is done. func (t *UDPv5) callDone(c *callV5) { - select { - case t.callDoneCh <- c: - case <-t.closeCtx.Done(): + // This needs a loop because further responses may be incoming until the + // send to callDoneCh has completed. Such responses need to be discarded + // in order to avoid blocking the dispatch loop. + for { + select { + case <-c.ch: + // late response, discard. + case <-c.err: + // late error, discard. + case t.callDoneCh <- c: + return + case <-t.closeCtx.Done(): + return + } } } diff --git a/p2p/enode/nodedb.go b/p2p/enode/nodedb.go index bd066ce857..08a0511494 100644 --- a/p2p/enode/nodedb.go +++ b/p2p/enode/nodedb.go @@ -61,6 +61,10 @@ const ( dbVersion = 9 ) +var ( + errInvalidIP = errors.New("invalid IP") +) + var zeroIP = make(net.IP, 16) // DB is the node database, storing previously seen nodes and any collected metadata about @@ -359,16 +363,25 @@ func (db *DB) expireNodes() { // LastPingReceived retrieves the time of the last ping packet received from // a remote node. func (db *DB) LastPingReceived(id ID, ip net.IP) time.Time { + if ip = ip.To16(); ip == nil { + return time.Time{} + } return time.Unix(db.fetchInt64(nodeItemKey(id, ip, dbNodePing)), 0) } // UpdateLastPingReceived updates the last time we tried contacting a remote node. func (db *DB) UpdateLastPingReceived(id ID, ip net.IP, instance time.Time) error { + if ip = ip.To16(); ip == nil { + return errInvalidIP + } return db.storeInt64(nodeItemKey(id, ip, dbNodePing), instance.Unix()) } // LastPongReceived retrieves the time of the last successful pong from remote node. func (db *DB) LastPongReceived(id ID, ip net.IP) time.Time { + if ip = ip.To16(); ip == nil { + return time.Time{} + } // Launch expirer db.ensureExpirer() return time.Unix(db.fetchInt64(nodeItemKey(id, ip, dbNodePong)), 0) @@ -376,26 +389,41 @@ func (db *DB) LastPongReceived(id ID, ip net.IP) time.Time { // UpdateLastPongReceived updates the last pong time of a node. func (db *DB) UpdateLastPongReceived(id ID, ip net.IP, instance time.Time) error { + if ip = ip.To16(); ip == nil { + return errInvalidIP + } return db.storeInt64(nodeItemKey(id, ip, dbNodePong), instance.Unix()) } // FindFails retrieves the number of findnode failures since bonding. func (db *DB) FindFails(id ID, ip net.IP) int { + if ip = ip.To16(); ip == nil { + return 0 + } return int(db.fetchInt64(nodeItemKey(id, ip, dbNodeFindFails))) } // UpdateFindFails updates the number of findnode failures since bonding. func (db *DB) UpdateFindFails(id ID, ip net.IP, fails int) error { + if ip = ip.To16(); ip == nil { + return errInvalidIP + } return db.storeInt64(nodeItemKey(id, ip, dbNodeFindFails), int64(fails)) } // FindFailsV5 retrieves the discv5 findnode failure counter. func (db *DB) FindFailsV5(id ID, ip net.IP) int { + if ip = ip.To16(); ip == nil { + return 0 + } return int(db.fetchInt64(v5Key(id, ip, dbNodeFindFails))) } // UpdateFindFailsV5 stores the discv5 findnode failure counter. func (db *DB) UpdateFindFailsV5(id ID, ip net.IP, fails int) error { + if ip = ip.To16(); ip == nil { + return errInvalidIP + } return db.storeInt64(v5Key(id, ip, dbNodeFindFails), int64(fails)) } diff --git a/params/config.go b/params/config.go index fd9717ef3e..6c411f2ac4 100644 --- a/params/config.go +++ b/params/config.go @@ -31,6 +31,10 @@ var ( RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") + + BSCGenesisHash = common.HexToHash("0x0d21840abff46b96c84b2ac9e10e4f5cdaeb5693cb665db62a2f3b02d2d57b5b") + ChapelGenesisHash = common.HexToHash("0x6d3c66c5357ec91d5c43af47e234a939b22557cbb552dc45bebbceeed90fbe34") + RialtoGenesisHash = common.HexToHash("0x005dc005bddd1967de6187c1c23be801eb7abdd80cebcc24f341b727b70311d6") ) // TrustedCheckpoints associates each known checkpoint with the genesis hash of @@ -210,21 +214,81 @@ var ( Threshold: 2, } + BSCChainConfig = &ChainConfig{ + ChainID: big.NewInt(56), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + MuirGlacierBlock: big.NewInt(0), + RamanujanBlock: big.NewInt(0), + NielsBlock: big.NewInt(0), + MirrorSyncBlock: big.NewInt(5184000), + Parlia: &ParliaConfig{ + Period: 3, + Epoch: 200, + }, + } + + ChapelChainConfig = &ChainConfig{ + ChainID: big.NewInt(97), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + MuirGlacierBlock: big.NewInt(0), + RamanujanBlock: big.NewInt(1010000), + NielsBlock: big.NewInt(1014369), + MirrorSyncBlock: big.NewInt(5582500), + Parlia: &ParliaConfig{ + Period: 3, + Epoch: 200, + }, + } + + RialtoChainConfig = &ChainConfig{ + ChainID: big.NewInt(1417), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + MuirGlacierBlock: big.NewInt(0), + RamanujanBlock: big.NewInt(400), + NielsBlock: big.NewInt(0), + MirrorSyncBlock: big.NewInt(400), + Parlia: &ParliaConfig{ + Period: 3, + Epoch: 200, + }, + } + // AllEthashProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Ethash consensus. // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, new(EthashConfig), nil} + AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, new(EthashConfig), nil, nil} // AllCliqueProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Clique consensus. // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}} + AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil} - TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, new(EthashConfig), nil} + TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, new(EthashConfig), nil, nil} TestRules = TestChainConfig.Rules(new(big.Int)) ) @@ -278,28 +342,32 @@ type CheckpointOracleConfig struct { type ChainConfig struct { ChainID *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection - HomesteadBlock *big.Int `json:"homesteadBlock,omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead) + HomesteadBlock *big.Int `json:"homesteadBlock,omitempty" toml:",omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead) - DAOForkBlock *big.Int `json:"daoForkBlock,omitempty"` // TheDAO hard-fork switch block (nil = no fork) - DAOForkSupport bool `json:"daoForkSupport,omitempty"` // Whether the nodes supports or opposes the DAO hard-fork + DAOForkBlock *big.Int `json:"daoForkBlock,omitempty" toml:",omitempty"` // TheDAO hard-fork switch block (nil = no fork) + DAOForkSupport bool `json:"daoForkSupport,omitempty" toml:",omitempty"` // Whether the nodes supports or opposes the DAO hard-fork // EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150) - EIP150Block *big.Int `json:"eip150Block,omitempty"` // EIP150 HF block (nil = no fork) - EIP150Hash common.Hash `json:"eip150Hash,omitempty"` // EIP150 HF hash (needed for header only clients as only gas pricing changed) - - EIP155Block *big.Int `json:"eip155Block,omitempty"` // EIP155 HF block - EIP158Block *big.Int `json:"eip158Block,omitempty"` // EIP158 HF block - - ByzantiumBlock *big.Int `json:"byzantiumBlock,omitempty"` // Byzantium switch block (nil = no fork, 0 = already on byzantium) - ConstantinopleBlock *big.Int `json:"constantinopleBlock,omitempty"` // Constantinople switch block (nil = no fork, 0 = already activated) - PetersburgBlock *big.Int `json:"petersburgBlock,omitempty"` // Petersburg switch block (nil = same as Constantinople) - IstanbulBlock *big.Int `json:"istanbulBlock,omitempty"` // Istanbul switch block (nil = no fork, 0 = already on istanbul) - MuirGlacierBlock *big.Int `json:"muirGlacierBlock,omitempty"` // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated) - EWASMBlock *big.Int `json:"ewasmBlock,omitempty"` // EWASM switch block (nil = no fork, 0 = already activated) + EIP150Block *big.Int `json:"eip150Block,omitempty" toml:",omitempty"` // EIP150 HF block (nil = no fork) + EIP150Hash common.Hash `json:"eip150Hash,omitempty" toml:",omitempty"` // EIP150 HF hash (needed for header only clients as only gas pricing changed) + + EIP155Block *big.Int `json:"eip155Block,omitempty" toml:",omitempty"` // EIP155 HF block + EIP158Block *big.Int `json:"eip158Block,omitempty" toml:",omitempty"` // EIP158 HF block + + ByzantiumBlock *big.Int `json:"byzantiumBlock,omitempty" toml:",omitempty"` // Byzantium switch block (nil = no fork, 0 = already on byzantium) + ConstantinopleBlock *big.Int `json:"constantinopleBlock,omitempty" toml:",omitempty"` // Constantinople switch block (nil = no fork, 0 = already activated) + PetersburgBlock *big.Int `json:"petersburgBlock,omitempty" toml:",omitempty"` // Petersburg switch block (nil = same as Constantinople) + IstanbulBlock *big.Int `json:"istanbulBlock,omitempty" toml:",omitempty"` // Istanbul switch block (nil = no fork, 0 = already on istanbul) + MuirGlacierBlock *big.Int `json:"muirGlacierBlock,omitempty" toml:",omitempty"` // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated) + EWASMBlock *big.Int `json:"ewasmBlock,omitempty" toml:",omitempty"` // EWASM switch block (nil = no fork, 0 = already activated) + RamanujanBlock *big.Int `json:"ramanujanBlock,omitempty" toml:",omitempty"` // ramanujanBlock switch block (nil = no fork, 0 = already activated) + NielsBlock *big.Int `json:"nielsBlock,omitempty" toml:",omitempty"` // nielsBlock switch block (nil = no fork, 0 = already activated) + MirrorSyncBlock *big.Int `json:"mirrorSyncBlock,omitempty" toml:",omitempty"` // mirrorSyncBlock switch block (nil = no fork, 0 = already activated) // Various consensus engines - Ethash *EthashConfig `json:"ethash,omitempty"` - Clique *CliqueConfig `json:"clique,omitempty"` + Ethash *EthashConfig `json:"ethash,omitempty" toml:",omitempty"` + Clique *CliqueConfig `json:"clique,omitempty" toml:",omitempty"` + Parlia *ParliaConfig `json:"parlia,omitempty" toml:",omitempty"` } // EthashConfig is the consensus engine configs for proof-of-work based sealing. @@ -321,6 +389,17 @@ func (c *CliqueConfig) String() string { return "clique" } +// ParliaConfig is the consensus engine configs for proof-of-staked-authority based sealing. +type ParliaConfig struct { + Period uint64 `json:"period"` // Number of seconds between blocks to enforce + Epoch uint64 `json:"epoch"` // Epoch length to update validatorSet +} + +// String implements the stringer interface, returning the consensus engine details. +func (b *ParliaConfig) String() string { + return "parlia" +} + // String implements the fmt.Stringer interface. func (c *ChainConfig) String() string { var engine interface{} @@ -329,10 +408,12 @@ func (c *ChainConfig) String() string { engine = c.Ethash case c.Clique != nil: engine = c.Clique + case c.Parlia != nil: + engine = c.Parlia default: engine = "unknown" } - return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Engine: %v}", + return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Engine: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -345,6 +426,9 @@ func (c *ChainConfig) String() string { c.PetersburgBlock, c.IstanbulBlock, c.MuirGlacierBlock, + c.RamanujanBlock, + c.NielsBlock, + c.MirrorSyncBlock, engine, ) } @@ -384,6 +468,36 @@ func (c *ChainConfig) IsConstantinople(num *big.Int) bool { return isForked(c.ConstantinopleBlock, num) } +// IsRamanujan returns whether num is either equal to the IsRamanujan fork block or greater. +func (c *ChainConfig) IsRamanujan(num *big.Int) bool { + return isForked(c.RamanujanBlock, num) +} + +// IsOnRamanujan returns whether num is equal to the Ramanujan fork block +func (c *ChainConfig) IsOnRamanujan(num *big.Int) bool { + return configNumEqual(c.RamanujanBlock, num) +} + +// IsNiels returns whether num is either equal to the Niels fork block or greater. +func (c *ChainConfig) IsNiels(num *big.Int) bool { + return isForked(c.NielsBlock, num) +} + +// IsOnNiels returns whether num is equal to the IsNiels fork block +func (c *ChainConfig) IsOnNiels(num *big.Int) bool { + return configNumEqual(c.NielsBlock, num) +} + +// IsMirrorSync returns whether num is either equal to the MirrorSync fork block or greater. +func (c *ChainConfig) IsMirrorSync(num *big.Int) bool { + return isForked(c.MirrorSyncBlock, num) +} + +// IsOnMirrorSync returns whether num is equal to the MirrorSync fork block +func (c *ChainConfig) IsOnMirrorSync(num *big.Int) bool { + return configNumEqual(c.MirrorSyncBlock, num) +} + // IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater. func (c *ChainConfig) IsMuirGlacier(num *big.Int) bool { return isForked(c.MuirGlacierBlock, num) @@ -442,6 +556,8 @@ func (c *ChainConfig) CheckConfigForkOrder() error { {"petersburgBlock", c.PetersburgBlock}, {"istanbulBlock", c.IstanbulBlock}, {"muirGlacierBlock", c.MuirGlacierBlock}, + {"ramanujanBlock", c.RamanujanBlock}, + {"mirrorSyncBlock", c.MirrorSyncBlock}, } { if lastFork.name != "" { // Next one must be higher number @@ -501,6 +617,12 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi if isForkIncompatible(c.EWASMBlock, newcfg.EWASMBlock, head) { return newCompatError("ewasm fork block", c.EWASMBlock, newcfg.EWASMBlock) } + if isForkIncompatible(c.RamanujanBlock, newcfg.RamanujanBlock, head) { + return newCompatError("ramanujan fork block", c.RamanujanBlock, newcfg.RamanujanBlock) + } + if isForkIncompatible(c.MirrorSyncBlock, newcfg.MirrorSyncBlock, head) { + return newCompatError("mirrorSync fork block", c.MirrorSyncBlock, newcfg.MirrorSyncBlock) + } return nil } diff --git a/params/protocol_params.go b/params/protocol_params.go index ad2c5db643..155ef86dde 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -19,21 +19,23 @@ package params import "math/big" const ( - GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations. + GasLimitBoundDivisor uint64 = 256 // The bound divisor of the gas limit, used in update calculations. MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be. GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block. - MaximumExtraDataSize uint64 = 32 // Maximum size extra data may be after Genesis. - ExpByteGas uint64 = 10 // Times ceil(log256(exponent)) for the EXP instruction. - SloadGas uint64 = 50 // Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. - CallValueTransferGas uint64 = 9000 // Paid for CALL when the value transfer is non-zero. - CallNewAccountGas uint64 = 25000 // Paid for CALL when the destination address didn't exist prior. - TxGas uint64 = 21000 // Per transaction not creating a contract. NOTE: Not payable on data of calls between transactions. - TxGasContractCreation uint64 = 53000 // Per transaction that creates a contract. NOTE: Not payable on data of calls between transactions. - TxDataZeroGas uint64 = 4 // Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions. - QuadCoeffDiv uint64 = 512 // Divisor for the quadratic particle of the memory cost equation. - LogDataGas uint64 = 8 // Per byte in a LOG* operation's data. - CallStipend uint64 = 2300 // Free gas given at beginning of call. + MaximumExtraDataSize uint64 = 32 // Maximum size extra data may be after Genesis. + ForkIDSize uint64 = 4 // The length of fork id + ExpByteGas uint64 = 10 // Times ceil(log256(exponent)) for the EXP instruction. + SloadGas uint64 = 50 // Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. + CallValueTransferGas uint64 = 9000 // Paid for CALL when the value transfer is non-zero. + CallNewAccountGas uint64 = 25000 // Paid for CALL when the destination address didn't exist prior. + TxGas uint64 = 21000 // Per transaction not creating a contract. NOTE: Not payable on data of calls between transactions. + SystemTxsGas uint64 = 500000 // The gas reserved for system txs; only for parlia consensus + TxGasContractCreation uint64 = 53000 // Per transaction that creates a contract. NOTE: Not payable on data of calls between transactions. + TxDataZeroGas uint64 = 4 // Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions. + QuadCoeffDiv uint64 = 512 // Divisor for the quadratic particle of the memory cost equation. + LogDataGas uint64 = 8 // Per byte in a LOG* operation's data. + CallStipend uint64 = 2300 // Free gas given at beginning of call. Sha3Gas uint64 = 30 // Once per SHA3 operation. Sha3WordGas uint64 = 6 // Once per word of the SHA3 operation's data. @@ -113,6 +115,10 @@ const ( // Precompiled contract gas prices + //TODO need further discussion + TendermintHeaderValidateGas uint64 = 3000 // Gas for validate tendermiint consensus state + IAVLMerkleProofValidateGas uint64 = 3000 // Gas for validate merkle proof + EcrecoverGas uint64 = 3000 // Elliptic curve sender recovery gas price Sha256BaseGas uint64 = 60 // Base price for a SHA256 operation Sha256PerWordGas uint64 = 12 // Per-word price for a SHA256 operation diff --git a/params/version.go b/params/version.go index ca45179930..f9d94669b1 100644 --- a/params/version.go +++ b/params/version.go @@ -21,10 +21,10 @@ import ( ) const ( - VersionMajor = 1 // Major version component of the current release - VersionMinor = 9 // Minor version component of the current release - VersionPatch = 13 // Patch version component of the current release - VersionMeta = "stable" // Version metadata to append to the version string + VersionMajor = 1 // Major version component of the current release + VersionMinor = 0 // Minor version component of the current release + VersionPatch = 7 // Patch version component of the current release + VersionMeta = "" // Version metadata to append to the version string ) // Version holds the textual version string. diff --git a/rpc/client.go b/rpc/client.go index 984f56bc69..4b436a5c4e 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -552,9 +552,9 @@ func (c *Client) dispatch(codec ServerCodec) { // Read path: case op := <-c.readOp: if op.batch { - conn.handler.handleBatch(op.msgs) + conn.handler.handleBatch(context.Background(), op.msgs) } else { - conn.handler.handleMsg(op.msgs[0]) + conn.handler.handleMsg(context.Background(), op.msgs[0]) } case err := <-c.readErr: diff --git a/rpc/handler.go b/rpc/handler.go index c8571ad795..67d7eb477a 100644 --- a/rpc/handler.go +++ b/rpc/handler.go @@ -93,7 +93,7 @@ func newHandler(connCtx context.Context, conn jsonWriter, idgen func() ID, reg * } // handleBatch executes all messages in a batch and returns the responses. -func (h *handler) handleBatch(msgs []*jsonrpcMessage) { +func (h *handler) handleBatch(ctx context.Context, msgs []*jsonrpcMessage) { // Emit error response for empty batches: if len(msgs) == 0 { h.startCallProc(func(cp *callProc) { @@ -116,7 +116,7 @@ func (h *handler) handleBatch(msgs []*jsonrpcMessage) { h.startCallProc(func(cp *callProc) { answers := make([]*jsonrpcMessage, 0, len(msgs)) for _, msg := range calls { - if answer := h.handleCallMsg(cp, msg); answer != nil { + if answer := h.handleCallMsg(cp, ctx, msg); answer != nil { answers = append(answers, answer) } } @@ -131,12 +131,12 @@ func (h *handler) handleBatch(msgs []*jsonrpcMessage) { } // handleMsg handles a single message. -func (h *handler) handleMsg(msg *jsonrpcMessage) { +func (h *handler) handleMsg(ctx context.Context, msg *jsonrpcMessage) { if ok := h.handleImmediate(msg); ok { return } h.startCallProc(func(cp *callProc) { - answer := h.handleCallMsg(cp, msg) + answer := h.handleCallMsg(cp, ctx, msg) h.addSubscriptions(cp.notifiers) if answer != nil { h.conn.writeJSON(cp.ctx, answer) @@ -287,7 +287,7 @@ func (h *handler) handleResponse(msg *jsonrpcMessage) { } // handleCallMsg executes a call message and returns the answer. -func (h *handler) handleCallMsg(ctx *callProc, msg *jsonrpcMessage) *jsonrpcMessage { +func (h *handler) handleCallMsg(ctx *callProc, reqCtx context.Context, msg *jsonrpcMessage) *jsonrpcMessage { start := time.Now() switch { case msg.isNotification(): @@ -297,7 +297,8 @@ func (h *handler) handleCallMsg(ctx *callProc, msg *jsonrpcMessage) *jsonrpcMess case msg.isCall(): resp := h.handleCall(ctx, msg) if resp.Error != nil { - h.log.Warn("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start), "err", resp.Error.Message) + xForward := reqCtx.Value("X-Forwarded-For") + h.log.Warn("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start), "err", resp.Error.Message, "X-Forwarded-For", xForward) } else { h.log.Debug("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start)) } @@ -339,7 +340,8 @@ func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage } else { successfulRequestGauge.Inc(1) } - rpcServingTimer.UpdateSince(start) + RpcServingTimer.UpdateSince(start) + newRPCRequestGauge(msg.Method).Inc(1) newRPCServingTimer(msg.Method, answer.Error == nil).UpdateSince(start) } return answer diff --git a/rpc/http.go b/rpc/http.go index b3ce0a5b5e..3b6cf75f86 100644 --- a/rpc/http.go +++ b/rpc/http.go @@ -227,6 +227,9 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { if origin := r.Header.Get("Origin"); origin != "" { ctx = context.WithValue(ctx, "Origin", origin) } + if xForward := r.Header.Get("X-Forwarded-For"); xForward != "" { + ctx = context.WithValue(ctx, "X-Forwarded-For", xForward) + } w.Header().Set("content-type", contentType) codec := newHTTPServerConn(r, w) diff --git a/rpc/json.go b/rpc/json.go index 61631a3d76..f0250fa4a5 100644 --- a/rpc/json.go +++ b/rpc/json.go @@ -194,15 +194,22 @@ func (c *jsonCodec) remoteAddr() string { return c.remote } -func (c *jsonCodec) readBatch() (msg []*jsonrpcMessage, batch bool, err error) { +func (c *jsonCodec) readBatch() (messages []*jsonrpcMessage, batch bool, err error) { // Decode the next JSON object in the input stream. // This verifies basic syntax, etc. var rawmsg json.RawMessage if err := c.decode(&rawmsg); err != nil { return nil, false, err } - msg, batch = parseMessage(rawmsg) - return msg, batch, nil + messages, batch = parseMessage(rawmsg) + for i, msg := range messages { + if msg == nil { + // Message is JSON 'null'. Replace with zero value so it + // will be treated like any other invalid message. + messages[i] = new(jsonrpcMessage) + } + } + return messages, batch, nil } func (c *jsonCodec) writeJSON(ctx context.Context, v interface{}) error { diff --git a/rpc/metrics.go b/rpc/metrics.go index 7fb6fc0a17..ecd2e0e00f 100644 --- a/rpc/metrics.go +++ b/rpc/metrics.go @@ -26,7 +26,7 @@ var ( rpcRequestGauge = metrics.NewRegisteredGauge("rpc/requests", nil) successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", nil) failedReqeustGauge = metrics.NewRegisteredGauge("rpc/failure", nil) - rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", nil) + RpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", nil) ) func newRPCServingTimer(method string, valid bool) metrics.Timer { @@ -37,3 +37,8 @@ func newRPCServingTimer(method string, valid bool) metrics.Timer { m := fmt.Sprintf("rpc/duration/%s/%s", method, flag) return metrics.GetOrRegisterTimer(m, nil) } + +func newRPCRequestGauge(method string) metrics.Gauge { + m := fmt.Sprintf("rpc/count/%s", method) + return metrics.GetOrRegisterGauge(m, nil) +} diff --git a/rpc/server.go b/rpc/server.go index ddd7c744c0..eedcbf7957 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -109,9 +109,9 @@ func (s *Server) serveSingleRequest(ctx context.Context, codec ServerCodec) { return } if batch { - h.handleBatch(reqs) + h.handleBatch(ctx, reqs) } else { - h.handleMsg(reqs[0]) + h.handleMsg(ctx, reqs[0]) } } diff --git a/rpc/testdata/invalid-batch.js b/rpc/testdata/invalid-batch.js index f470574fb5..768dbc837e 100644 --- a/rpc/testdata/invalid-batch.js +++ b/rpc/testdata/invalid-batch.js @@ -10,5 +10,8 @@ --> [1,2,3] <-- [{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] +--> [null] +<-- [{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] + --> [{"jsonrpc":"2.0","id":1,"method":"test_echo","params":["foo",1]},55,{"jsonrpc":"2.0","id":2,"method":"unknown_method"},{"foo":"bar"}] <-- [{"jsonrpc":"2.0","id":1,"result":{"String":"foo","Int":1,"Args":null}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":2,"error":{"code":-32601,"message":"the method unknown_method does not exist/is not available"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] diff --git a/rpc/testdata/invalid-nonobj.js b/rpc/testdata/invalid-nonobj.js index 4b9f4d994c..ffdd4a5b87 100644 --- a/rpc/testdata/invalid-nonobj.js +++ b/rpc/testdata/invalid-nonobj.js @@ -2,3 +2,6 @@ --> 1 <-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} + +--> null +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} diff --git a/signer/core/signed_data.go b/signer/core/signed_data.go index 3a827afa2d..2031716b26 100644 --- a/signer/core/signed_data.go +++ b/signer/core/signed_data.go @@ -36,6 +36,7 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/consensus/clique" + "github.com/ethereum/go-ethereum/consensus/parlia" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" @@ -59,6 +60,10 @@ var ( accounts.MimetypeClique, 0x02, } + ApplicationParlia = SigFormat{ + accounts.MimetypeParlia, + 0x03, + } TextPlain = SigFormat{ accounts.MimetypeTextPlain, 0x45, @@ -259,6 +264,41 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType // Clique uses V on the form 0 or 1 useEthereumV = false req = &SignDataRequest{ContentType: mediaType, Rawdata: cliqueRlp, Messages: messages, Hash: sighash} + case ApplicationParlia.Mime: + stringData, ok := data.(string) + if !ok { + return nil, useEthereumV, fmt.Errorf("input for %v must be an hex-encoded string", ApplicationParlia.Mime) + } + parliaData, err := hexutil.Decode(stringData) + if err != nil { + return nil, useEthereumV, err + } + header := &types.Header{} + if err := rlp.DecodeBytes(parliaData, header); err != nil { + return nil, useEthereumV, err + } + // The incoming parlia header is already truncated, sent to us with a extradata already shortened + if len(header.Extra) < 65 { + // Need to add it back, to get a suitable length for hashing + newExtra := make([]byte, len(header.Extra)+65) + copy(newExtra, header.Extra) + header.Extra = newExtra + } + // Get back the rlp data, encoded by us + sighash, parliaRlp, err := parliaHeaderHashAndRlp(header, api.chainID) + if err != nil { + return nil, useEthereumV, err + } + messages := []*NameValueType{ + { + Name: "Parlia header", + Typ: "parlia", + Value: fmt.Sprintf("parlia header %d [0x%x]", header.Number, header.Hash()), + }, + } + // Parlia uses V on the form 0 or 1 + useEthereumV = false + req = &SignDataRequest{ContentType: mediaType, Rawdata: parliaRlp, Messages: messages, Hash: sighash} default: // also case TextPlain.Mime: // Calculates an Ethereum ECDSA signature for: // hash = keccak256("\x19${byteVersion}Ethereum Signed Message:\n${message length}${message}") @@ -311,6 +351,16 @@ func cliqueHeaderHashAndRlp(header *types.Header) (hash, rlp []byte, err error) return hash, rlp, err } +func parliaHeaderHashAndRlp(header *types.Header, chainId *big.Int) (hash, rlp []byte, err error) { + if len(header.Extra) < 65 { + err = fmt.Errorf("clique header extradata too short, %d < 65", len(header.Extra)) + return + } + rlp = parlia.ParliaRLP(header, chainId) + hash = parlia.SealHash(header, chainId).Bytes() + return hash, rlp, err +} + // SignTypedData signs EIP-712 conformant typed data // hash = keccak256("\x19${byteVersion}${domainSeparator}${hashStruct(message)}") func (api *SignerAPI) SignTypedData(ctx context.Context, addr common.MixedcaseAddress, typedData TypedData) (hexutil.Bytes, error) { diff --git a/signer/storage/aes_gcm_storage.go b/signer/storage/aes_gcm_storage.go index 8c5e147ac6..1dad34a3eb 100644 --- a/signer/storage/aes_gcm_storage.go +++ b/signer/storage/aes_gcm_storage.go @@ -151,11 +151,11 @@ func encrypt(key []byte, plaintext []byte, additionalData []byte) ([]byte, []byt return nil, nil, err } aesgcm, err := cipher.NewGCM(block) - nonce := make([]byte, aesgcm.NonceSize()) - if _, err := io.ReadFull(rand.Reader, nonce); err != nil { + if err != nil { return nil, nil, err } - if err != nil { + nonce := make([]byte, aesgcm.NonceSize()) + if _, err := io.ReadFull(rand.Reader, nonce); err != nil { return nil, nil, err } ciphertext := aesgcm.Seal(nil, nonce, plaintext, additionalData)