ETH Price: $2,681.74 (+1.26%)

Token

Echo (ECHO)
 

Overview

Max Total Supply

100,000,000,000,000,000,000,000,000 ECHO

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
1,655,945,865,299,350,396,181,896 ECHO

Value
$0.00
0x78c95b10a22b6d46e51f8277351cf6d928bbcc4c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Echo

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-12
*/

// SPDX-License-Identifier: MIT

// solidity version declaration
pragma solidity 0.8.20;

/** Default functions **/
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/** Uniswap pair creation **/
interface IUniswapV2Factory {
    /* Creates a new liquidity pool (pair) for the two specified ERC-20 tokens `tokenA` and `tokenB`.
    Returns the address of the newly created pair contract */
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

/** Uniswap pair swap **/
interface IUniswapV2Router02 {
    /* Swaps an exact amount of input tokens for as much ETH as possible, supporting tokens that take fees on transfers */
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    /* Returns the address of the Uniswap factory contract.
    The factory contract is responsible for creating and managing the liquidity pools (pairs) */
    function factory() external pure returns (address);
    /* Returns the address of the Wrapped Ether (WETH) contract.
    WETH is used within Uniswap to represent Ether in ERC-20 form */
    function WETH() external pure returns (address);
}

/** Math operations with checks **/
library SafeMath {
    /* Addition */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /* Subtraction */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    /* Multiplication */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /* Division */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

}

/** Processes data received from the block **/
abstract contract Context {
    /* Returns the address of the sender of the transaction */
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

/** Processes logic related to contract ownership **/
contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /* When creating a contract, makes the sender's address the owner */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /* When added to function, allows only the owner of the contract to call the function */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /* Returns the address of the contract owner (deployer) */
    function owner() public view returns (address) {
        return _owner;
    }

    /* Renounce of ownership of the contract.
    Calling functions available only to the owner is no longer possible. Note: only owner can call this function */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

/** Processes main contract logic **/
contract Echo is Context, IERC20, Ownable {
    using SafeMath for uint256; // math lib connection
    mapping (address => uint256) private _balances; // list of addresses and their balances | _balances[address] = addressBalance
    mapping (address => mapping (address => uint256)) private _allowances; // nested list of allowances and their balances | _allowances[owner][spender] = spenderAllowance
    mapping (address => bool) private _isExcludedFromFee; // list of excluded from fee addresses | _isExcludedFromFee[address] = whitelistedAddress
    address payable private _taxWallet; // address for taxes

    uint256 private _transferTax = 0; // tax for transfers
    uint256 private _initialBuyTax = 30; // buy tax when '_buyCount' variable is Less than '_reduceBuyTaxAt' constant
    uint256 private _initialSellTax = 30; // sell tax when '_buyCount' variable is Less than '_reduceSellTaxAt' constant
    uint256 private _finalBuyTax = 0; // buy tax when '_buyCount' variable is Greater than '_reduceBuyTaxAt' constant
    uint256 private _finalSellTax = 0; // sell tax when '_buyCount' variable is Greater than '_reduceSellTaxAt' constant
    uint256 private _reduceBuyTaxAt = 300; // number of purchases required to reduce buy tax
    uint256 private _reduceSellTaxAt = 300; // number of purchases required to reduce sell tax
    uint256 private _preventSwapBefore = 20; // prevents tax swap up to a specified number of purchases
    uint256 private _buyCount = 0; // buy transactions count

    string private constant _name = unicode"Echo";
    string private constant _symbol = unicode"ECHO"; // ticker
    uint8 private constant _decimals = 18; // number of decimal places for the token
    uint256 private constant _totalSupply = 100_000_000 * 10**_decimals; // 100m (all)
    uint256 public _maxTxAmount = 1_000_000 * 10**_decimals; // 1m (1%) | maximum buy transaction amount
    uint256 public _maxWalletSize = 2_000_000 * 10**_decimals; // 2m (2%)
    uint256 public _taxSwapThreshold = 500_000 * 10**_decimals; // 500k (0.5%) | tax swap will be triggered after tax amount is larger than it
    uint256 public _maxTaxSwap = 1_000_000 * 10**_decimals; // 1m (1%) | max tokens amount to swap in one transaction
    event MaxTxAmountUpdated(uint _maxTxAmount);

    IUniswapV2Router02 private uniswapV2Router; // declares a variable `uniswapV2Router` of type `IUniswapV2Router02` (has all the methods listed in the interface)
    address private uniswapV2Pair; // a variable in which, when a pair is created, its address is written
    bool private inSwap = false; // 'true' during taxes swap transaction processing, otherwise 'false'
    bool private swapEnabled = false; // allows tax swap when 'true'

    /* Called when creating a contract */
    constructor () {
        _taxWallet = payable(_msgSender()); // taxes go to the address of the contract deployer
        _balances[_msgSender()] = _totalSupply; // contract deployer receives all tokens on his balance
        _isExcludedFromFee[owner()] = true; // contract address is added to the whitelist
        _isExcludedFromFee[_taxWallet] = true; // contract address is added to the whitelist
        _isExcludedFromFee[address(this)] = true; // contract deployer address is added to the whitelist
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    /* When added to function, prevents two simultaneous taxes swap */
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    /* Changes transfer tax. Note: only owner can call this function */
    function setTransferTax(uint256 newTransferTax) public onlyOwner returns (bool) {
        _transferTax = newTransferTax;
        return true;
    }

    /* Changes initial buy tax. Note: only owner can call this function */
    function setInitialBuyTax(uint256 newInitialBuyTax) public onlyOwner returns (bool) {
        _initialBuyTax = newInitialBuyTax;
        return true;
    }

    /* Changes initial sell tax. Note: only owner can call this function */
    function setInitialSellTax(uint256 newInitialSellTax) public onlyOwner returns (bool) {
        _initialSellTax = newInitialSellTax;
        return true;
    }

    /* Adds the specified address to the whitelist. Note: only owner can call this function */
    function addToWhitelist(address newAddress) public onlyOwner returns (bool) {
        _isExcludedFromFee[newAddress] = true;
        return true;
    }

    /* Returns the transfer tax value */
    function transferTax() public view  returns (uint256) {
        return _transferTax;
    }

    /* Returns the initial buy tax value */
    function initialBuyTax() public view returns (uint256) {
        return _initialBuyTax;
    }

    /* Returns the initial sell tax value */
    function initialSellTax() public view  returns (uint256) {
        return _initialSellTax;
    }

    /* Returns the name of the contract */
    function name() public pure returns (string memory) {
        return _name;
    }

    /* Returns the ticker */
    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    /* Returns the '_decimals' variable value */
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    /* Returns the total supply value */
    function totalSupply() public pure override returns (uint256) {
        return _totalSupply;
    }

    /* Returns the balance value of the specified address */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /* Returns the amount of tokens that 'spender' is currently allowed to withdraw from 'owner'
    account using the 'transferFrom' function. */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /* Transfers 'amount' tokens from the sender to 'recipient'. Calls the '_transfer' function containing the main logic */
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /* Allows 'spender' to spend 'amount' tokens on behalf of the sender. Calls the '_approve' function containing the main logic */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /* Allows 'recipient' to spend 'amount' tokens on behalf of 'sender'
    and transfers 'amount' tokens from the 'sender' to 'recipient'.
    Calls the '_transfer' and '_approve' functions containing the main logic */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /* Allows 'spender' to spend 'amount' tokens on behalf of the sender */
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /* Sends ETH tax to '_taxWallet' */
    function sendETHToFee(uint256 amount) private {
        _taxWallet.transfer(amount);
    }

    /* Compares two numbers and returns the smallest */
    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    /* Transfers 'amount' tokens from the sender to 'recipient' */
    /* Taxes also applied to tax swap transaction */
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;

        // from == uniswapV2Pair: Buy
        // to == uniswapV2Pair: Sell
        if (from != owner() && to != owner()) { // && to != _taxWallet
            if (_buyCount == 0) {
                taxAmount = amount.mul((_buyCount > _reduceBuyTaxAt) ? _finalBuyTax : _initialBuyTax).div(100); // buy tax
            }
            if (_buyCount > 0) {
                taxAmount = amount.mul(_transferTax).div(100); // transfer tax
            }

            // any buy with tax will increase '_buyCount' by 1
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                taxAmount = amount.mul((_buyCount > _reduceBuyTaxAt) ? _finalBuyTax : _initialBuyTax).div(100); // buy tax
                _buyCount++;
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul((_buyCount > _reduceSellTaxAt) ? _finalSellTax : _initialSellTax).div(100); // sell tax
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _taxSwapThreshold &&
                _buyCount > _preventSwapBefore
            ) {
                swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap))); // swap token-tax for ETH (max: '_maxTaxSwap')
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance); // send tax ETH to '_taxWallet'
                }
            }
        }

        if (taxAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(taxAmount); // add token-tax to contract balance
            emit Transfer(from, address(this), taxAmount);
        }
        _balances[from] = _balances[from].sub(amount); // remove 'amount' from sender balance
        _balances[to] = _balances[to].add(amount.sub(taxAmount)); // add 'amount' minus 'tax' to recipient balance
        emit Transfer(from, to, amount.sub(taxAmount));
    }

    /* Changes tokens for ETH. Note: 'lockTheSwap' prevents two simultaneous taxes swap */
    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2); // array with length = 2
        path[0] = address(this); // first pair element: token address
        path[1] = uniswapV2Router.WETH(); // second pair element: WETH address
        _approve(address(this), address(uniswapV2Router), tokenAmount); // allows uniswap to spend (exchange) 'tokenAmount' on behalf of contract
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        ); // swap tokens for ETH
    }

    /* Removes limitations to maximum buy transaction amount and to maximum wallet size.
    Note: only owner can call this function */
    function removeLimits() external onlyOwner {
        _maxTxAmount = _totalSupply;
        _maxWalletSize = _totalSupply;
        emit MaxTxAmountUpdated(_totalSupply);
    }

    /* Creates a pair and enables trading. Note: only owner can call this function */
    function openTrading() external onlyOwner() {
        // mainNet address: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // creates uniswap router instance
        _approve(address(this), address(uniswapV2Router), _totalSupply); // allows uniswap to manage total supply on behalf of contract
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); // creates pair 'token/WETH'
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); // #
        swapEnabled = true; // allow tax swap
//        _isExcludedFromFee[address(uniswapV2Pair)] = true;
    }

    /* Manual swap tokens-tax to ETH. Note: in this case, tax swap limits do not apply */
    function manualSwap() external {
        require(_msgSender() == _taxWallet); // only '_taxWallet' address (owner) can call this function; note: will still work after renounce
        uint256 tokenBalance = balanceOf(address(this));
        if (tokenBalance > 0) {
            swapTokensForEth(tokenBalance); // swap token-tax for ETH
        }
        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0) {
            sendETHToFee(ethBalance); // send ETH to '_taxWallet'
        }
    }

    // contract can receive ETH
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"addToWhitelist","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"initialBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newInitialBuyTax","type":"uint256"}],"name":"setInitialBuyTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newInitialSellTax","type":"uint256"}],"name":"setInitialSellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferTax","type":"uint256"}],"name":"setTransferTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"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"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600555601e600655601e6007555f6008555f60095561012c600a5561012c600b556014600c555f600d556012600a6200003f9190620005f4565b620f42406200004f919062000644565b600e556012600a620000629190620005f4565b621e848062000072919062000644565b600f556012600a620000859190620005f4565b6207a12062000095919062000644565b6010556012600a620000a89190620005f4565b620f4240620000b8919062000644565b6011555f601360146101000a81548160ff0219169083151502179055505f601360156101000a81548160ff021916908315150217905550348015620000fb575f80fd5b505f6200010d6200043460201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001b96200043460201b60201c565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a620002089190620005f4565b6305f5e10062000219919062000644565b60015f6200022c6200043460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160035f6200027e6200043b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620003a86200043460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a620004069190620005f4565b6305f5e10062000417919062000644565b6040516200042691906200069f565b60405180910390a3620006ba565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620004ec57808604811115620004c457620004c362000462565b5b6001851615620004d45780820291505b8081029050620004e4856200048f565b9450620004a4565b94509492505050565b5f82620005065760019050620005d8565b8162000515575f9050620005d8565b81600181146200052e576002811462000539576200056f565b6001915050620005d8565b60ff8411156200054e576200054d62000462565b5b8360020a91508482111562000568576200056762000462565b5b50620005d8565b5060208310610133831016604e8410600b8410161715620005a95782820a905083811115620005a357620005a262000462565b5b620005d8565b620005b884848460016200049b565b92509050818404811115620005d257620005d162000462565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f6200060082620005df565b91506200060d83620005e8565b92506200063c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620004f5565b905092915050565b5f6200065082620005df565b91506200065d83620005df565b92508282026200066d81620005df565b9150828204841483151762000687576200068662000462565b5b5092915050565b6200069981620005df565b82525050565b5f602082019050620006b45f8301846200068e565b92915050565b612fd880620006c85f395ff3fe608060405260043610610169575f3560e01c80637d1db4a5116100d0578063a6042a4611610089578063c9567bf911610063578063c9567bf914610528578063db05944c1461053e578063dd62ed3e14610568578063e43252d7146105a457610170565b8063a6042a4614610486578063a9059cbb146104c2578063bf474bed146104fe57610170565b80637d1db4a5146103785780638124f7ac146103a25780638b525903146103cc5780638da5cb5b146104085780638f9a55c01461043257806395d89b411461045c57610170565b80633912ff97116101225780633912ff971461029457806351bc3c85146102be5780635bd17bb3146102d457806370a0823114610310578063715018a61461034c578063751039fc1461036257610170565b806306fdde0314610174578063095ea7b31461019e5780630faee56f146101da57806318160ddd1461020457806323b872dd1461022e578063313ce5671461026a57610170565b3661017057005b5f80fd5b34801561017f575f80fd5b506101886105e0565b604051610195919061227e565b60405180910390f35b3480156101a9575f80fd5b506101c460048036038101906101bf919061232f565b61061d565b6040516101d19190612387565b60405180910390f35b3480156101e5575f80fd5b506101ee61063a565b6040516101fb91906123af565b60405180910390f35b34801561020f575f80fd5b50610218610640565b60405161022591906123af565b60405180910390f35b348015610239575f80fd5b50610254600480360381019061024f91906123c8565b610663565b6040516102619190612387565b60405180910390f35b348015610275575f80fd5b5061027e610737565b60405161028b9190612433565b60405180910390f35b34801561029f575f80fd5b506102a861073f565b6040516102b591906123af565b60405180910390f35b3480156102c9575f80fd5b506102d2610748565b005b3480156102df575f80fd5b506102fa60048036038101906102f5919061244c565b6107df565b6040516103079190612387565b60405180910390f35b34801561031b575f80fd5b5061033660048036038101906103319190612477565b610884565b60405161034391906123af565b60405180910390f35b348015610357575f80fd5b506103606108ca565b005b34801561036d575f80fd5b50610376610a18565b005b348015610383575f80fd5b5061038c610b47565b60405161039991906123af565b60405180910390f35b3480156103ad575f80fd5b506103b6610b4d565b6040516103c391906123af565b60405180910390f35b3480156103d7575f80fd5b506103f260048036038101906103ed919061244c565b610b56565b6040516103ff9190612387565b60405180910390f35b348015610413575f80fd5b5061041c610bfb565b60405161042991906124b1565b60405180910390f35b34801561043d575f80fd5b50610446610c22565b60405161045391906123af565b60405180910390f35b348015610467575f80fd5b50610470610c28565b60405161047d919061227e565b60405180910390f35b348015610491575f80fd5b506104ac60048036038101906104a7919061244c565b610c65565b6040516104b99190612387565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e3919061232f565b610d0a565b6040516104f59190612387565b60405180910390f35b348015610509575f80fd5b50610512610d27565b60405161051f91906123af565b60405180910390f35b348015610533575f80fd5b5061053c610d2d565b005b348015610549575f80fd5b5061055261112c565b60405161055f91906123af565b60405180910390f35b348015610573575f80fd5b5061058e600480360381019061058991906124ca565b611135565b60405161059b91906123af565b60405180910390f35b3480156105af575f80fd5b506105ca60048036038101906105c59190612477565b6111b7565b6040516105d79190612387565b60405180910390f35b60606040518060400160405280600481526020017f4563686f00000000000000000000000000000000000000000000000000000000815250905090565b5f6106306106296112aa565b84846112b1565b6001905092915050565b60115481565b5f6012600a61064f9190612664565b6305f5e10061065e91906126ae565b905090565b5f61066f848484611474565b61072c8461067b6112aa565b61072785604051806060016040528060288152602001612f7b6028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6106de6112aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ce09092919063ffffffff16565b6112b1565b600190509392505050565b5f6012905090565b5f600654905090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107886112aa565b73ffffffffffffffffffffffffffffffffffffffff16146107a7575f80fd5b5f6107b130610884565b90505f8111156107c5576107c481611d42565b5b5f4790505f8111156107db576107da81611fad565b5b5050565b5f6107e86112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90612739565b60405180910390fd5b8160078190555060019050919050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108d26112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590612739565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610a206112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390612739565b60405180910390fd5b6012600a610aba9190612664565b6305f5e100610ac991906126ae565b600e819055506012600a610add9190612664565b6305f5e100610aec91906126ae565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6012600a610b219190612664565b6305f5e100610b3091906126ae565b604051610b3d91906123af565b60405180910390a1565b600e5481565b5f600554905090565b5f610b5f6112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290612739565b60405180910390fd5b8160058190555060019050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60606040518060400160405280600481526020017f4543484f00000000000000000000000000000000000000000000000000000000815250905090565b5f610c6e6112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190612739565b60405180910390fd5b8160068190555060019050919050565b5f610d1d610d166112aa565b8484611474565b6001905092915050565b60105481565b610d356112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890612739565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e5d3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600a610e499190612664565b6305f5e100610e5891906126ae565b6112b1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eeb919061276b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f71573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f95919061276b565b6040518363ffffffff1660e01b8152600401610fb2929190612796565b6020604051808303815f875af1158015610fce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff2919061276b565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016110ce9291906127bd565b6020604051808303815f875af11580156110ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110e919061280e565b506001601360156101000a81548160ff021916908315150217905550565b5f600754905090565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f6111c06112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390612739565b60405180910390fd5b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060019050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361131f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611316906128a9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490612937565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161146791906123af565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d9906129c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790612a53565b60405180910390fd5b5f8111611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990612ae1565b60405180910390fd5b5f61159b610bfb565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561160957506115d9610bfb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611a30575f600d5403611656576116536064611645600a54600d541161163257600654611636565b6008545b8561201590919063ffffffff16565b61208c90919063ffffffff16565b90505b5f600d54111561168b57611688606461167a6005548561201590919063ffffffff16565b61208c90919063ffffffff16565b90505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611734575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611787575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561187f57600e548211156117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c890612b49565b60405180910390fd5b600f54826117de85610884565b6117e89190612b67565b1115611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182090612be4565b60405180910390fd5b6118656064611857600a54600d541161184457600654611848565b6008545b8561201590919063ffffffff16565b61208c90919063ffffffff16565b9050600d5f81548092919061187990612c02565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561190757503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561194b57611948606461193a600b54600d54116119275760075461192b565b6009545b8561201590919063ffffffff16565b61208c90919063ffffffff16565b90505b5f61195530610884565b9050601360149054906101000a900460ff161580156119c0575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156119d85750601360159054906101000a900460ff165b80156119e5575060105481115b80156119f45750600c54600d54115b15611a2e57611a16611a1184611a0c846011546120d5565b6120d5565b611d42565b5f4790505f811115611a2c57611a2b47611fad565b5b505b505b5f811115611b2f57611a888160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120ed90919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b2691906123af565b60405180910390a35b611b7f8260015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461214a90919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611c22611bd6828461214a90919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120ed90919063ffffffff16565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611cc5848661214a90919063ffffffff16565b604051611cd291906123af565b60405180910390a350505050565b5f838311158290611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e919061227e565b60405180910390fd5b505f8385611d359190612c49565b9050809150509392505050565b6001601360146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611d7957611d78612c7c565b5b604051908082528060200260200182016040528015611da75781602001602082028036833780820191505090505b50905030815f81518110611dbe57611dbd612ca9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e86919061276b565b81600181518110611e9a57611e99612ca9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611f003060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846112b1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611f62959493929190612dcf565b5f604051808303815f87803b158015611f79575f80fd5b505af1158015611f8b573d5f803e3d5ffd5b50505050505f601360146101000a81548160ff02191690831515021790555050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612011573d5f803e3d5ffd5b5050565b5f808303612025575f9050612086565b5f828461203291906126ae565b90508284826120419190612e54565b14612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890612ef4565b60405180910390fd5b809150505b92915050565b5f6120cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612193565b905092915050565b5f8183116120e357826120e5565b815b905092915050565b5f8082846120fb9190612b67565b905083811015612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213790612f5c565b60405180910390fd5b8091505092915050565b5f61218b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ce0565b905092915050565b5f80831182906121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d0919061227e565b60405180910390fd5b505f83856121e79190612e54565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561222b578082015181840152602081019050612210565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612250826121f4565b61225a81856121fe565b935061226a81856020860161220e565b61227381612236565b840191505092915050565b5f6020820190508181035f8301526122968184612246565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122cb826122a2565b9050919050565b6122db816122c1565b81146122e5575f80fd5b50565b5f813590506122f6816122d2565b92915050565b5f819050919050565b61230e816122fc565b8114612318575f80fd5b50565b5f8135905061232981612305565b92915050565b5f80604083850312156123455761234461229e565b5b5f612352858286016122e8565b92505060206123638582860161231b565b9150509250929050565b5f8115159050919050565b6123818161236d565b82525050565b5f60208201905061239a5f830184612378565b92915050565b6123a9816122fc565b82525050565b5f6020820190506123c25f8301846123a0565b92915050565b5f805f606084860312156123df576123de61229e565b5b5f6123ec868287016122e8565b93505060206123fd868287016122e8565b925050604061240e8682870161231b565b9150509250925092565b5f60ff82169050919050565b61242d81612418565b82525050565b5f6020820190506124465f830184612424565b92915050565b5f602082840312156124615761246061229e565b5b5f61246e8482850161231b565b91505092915050565b5f6020828403121561248c5761248b61229e565b5b5f612499848285016122e8565b91505092915050565b6124ab816122c1565b82525050565b5f6020820190506124c45f8301846124a2565b92915050565b5f80604083850312156124e0576124df61229e565b5b5f6124ed858286016122e8565b92505060206124fe858286016122e8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561258a5780860481111561256657612565612508565b5b60018516156125755780820291505b808102905061258385612535565b945061254a565b94509492505050565b5f826125a2576001905061265d565b816125af575f905061265d565b81600181146125c557600281146125cf576125fe565b600191505061265d565b60ff8411156125e1576125e0612508565b5b8360020a9150848211156125f8576125f7612508565b5b5061265d565b5060208310610133831016604e8410600b84101617156126335782820a90508381111561262e5761262d612508565b5b61265d565b6126408484846001612541565b9250905081840481111561265757612656612508565b5b81810290505b9392505050565b5f61266e826122fc565b915061267983612418565b92506126a67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612593565b905092915050565b5f6126b8826122fc565b91506126c3836122fc565b92508282026126d1816122fc565b915082820484148315176126e8576126e7612508565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6127236020836121fe565b915061272e826126ef565b602082019050919050565b5f6020820190508181035f83015261275081612717565b9050919050565b5f81519050612765816122d2565b92915050565b5f602082840312156127805761277f61229e565b5b5f61278d84828501612757565b91505092915050565b5f6040820190506127a95f8301856124a2565b6127b660208301846124a2565b9392505050565b5f6040820190506127d05f8301856124a2565b6127dd60208301846123a0565b9392505050565b6127ed8161236d565b81146127f7575f80fd5b50565b5f81519050612808816127e4565b92915050565b5f602082840312156128235761282261229e565b5b5f612830848285016127fa565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6128936024836121fe565b915061289e82612839565b604082019050919050565b5f6020820190508181035f8301526128c081612887565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6129216022836121fe565b915061292c826128c7565b604082019050919050565b5f6020820190508181035f83015261294e81612915565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6129af6025836121fe565b91506129ba82612955565b604082019050919050565b5f6020820190508181035f8301526129dc816129a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612a3d6023836121fe565b9150612a48826129e3565b604082019050919050565b5f6020820190508181035f830152612a6a81612a31565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612acb6029836121fe565b9150612ad682612a71565b604082019050919050565b5f6020820190508181035f830152612af881612abf565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f612b336019836121fe565b9150612b3e82612aff565b602082019050919050565b5f6020820190508181035f830152612b6081612b27565b9050919050565b5f612b71826122fc565b9150612b7c836122fc565b9250828201905080821115612b9457612b93612508565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f612bce601a836121fe565b9150612bd982612b9a565b602082019050919050565b5f6020820190508181035f830152612bfb81612bc2565b9050919050565b5f612c0c826122fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c3e57612c3d612508565b5b600182019050919050565b5f612c53826122fc565b9150612c5e836122fc565b9250828203905081811115612c7657612c75612508565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f612d02612cfd612cf884612cd6565b612cdf565b6122fc565b9050919050565b612d1281612ce8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d4a816122c1565b82525050565b5f612d5b8383612d41565b60208301905092915050565b5f602082019050919050565b5f612d7d82612d18565b612d878185612d22565b9350612d9283612d32565b805f5b83811015612dc2578151612da98882612d50565b9750612db483612d67565b925050600181019050612d95565b5085935050505092915050565b5f60a082019050612de25f8301886123a0565b612def6020830187612d09565b8181036040830152612e018186612d73565b9050612e1060608301856124a2565b612e1d60808301846123a0565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612e5e826122fc565b9150612e69836122fc565b925082612e7957612e78612e27565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f612ede6021836121fe565b9150612ee982612e84565b604082019050919050565b5f6020820190508181035f830152612f0b81612ed2565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f612f46601b836121fe565b9150612f5182612f12565b602082019050919050565b5f6020820190508181035f830152612f7381612f3a565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122068edf38be7218746fcc2dd00f301ff6cab1c6394ebfe086190cb5aba27ce2d7564736f6c63430008140033

Deployed Bytecode

0x608060405260043610610169575f3560e01c80637d1db4a5116100d0578063a6042a4611610089578063c9567bf911610063578063c9567bf914610528578063db05944c1461053e578063dd62ed3e14610568578063e43252d7146105a457610170565b8063a6042a4614610486578063a9059cbb146104c2578063bf474bed146104fe57610170565b80637d1db4a5146103785780638124f7ac146103a25780638b525903146103cc5780638da5cb5b146104085780638f9a55c01461043257806395d89b411461045c57610170565b80633912ff97116101225780633912ff971461029457806351bc3c85146102be5780635bd17bb3146102d457806370a0823114610310578063715018a61461034c578063751039fc1461036257610170565b806306fdde0314610174578063095ea7b31461019e5780630faee56f146101da57806318160ddd1461020457806323b872dd1461022e578063313ce5671461026a57610170565b3661017057005b5f80fd5b34801561017f575f80fd5b506101886105e0565b604051610195919061227e565b60405180910390f35b3480156101a9575f80fd5b506101c460048036038101906101bf919061232f565b61061d565b6040516101d19190612387565b60405180910390f35b3480156101e5575f80fd5b506101ee61063a565b6040516101fb91906123af565b60405180910390f35b34801561020f575f80fd5b50610218610640565b60405161022591906123af565b60405180910390f35b348015610239575f80fd5b50610254600480360381019061024f91906123c8565b610663565b6040516102619190612387565b60405180910390f35b348015610275575f80fd5b5061027e610737565b60405161028b9190612433565b60405180910390f35b34801561029f575f80fd5b506102a861073f565b6040516102b591906123af565b60405180910390f35b3480156102c9575f80fd5b506102d2610748565b005b3480156102df575f80fd5b506102fa60048036038101906102f5919061244c565b6107df565b6040516103079190612387565b60405180910390f35b34801561031b575f80fd5b5061033660048036038101906103319190612477565b610884565b60405161034391906123af565b60405180910390f35b348015610357575f80fd5b506103606108ca565b005b34801561036d575f80fd5b50610376610a18565b005b348015610383575f80fd5b5061038c610b47565b60405161039991906123af565b60405180910390f35b3480156103ad575f80fd5b506103b6610b4d565b6040516103c391906123af565b60405180910390f35b3480156103d7575f80fd5b506103f260048036038101906103ed919061244c565b610b56565b6040516103ff9190612387565b60405180910390f35b348015610413575f80fd5b5061041c610bfb565b60405161042991906124b1565b60405180910390f35b34801561043d575f80fd5b50610446610c22565b60405161045391906123af565b60405180910390f35b348015610467575f80fd5b50610470610c28565b60405161047d919061227e565b60405180910390f35b348015610491575f80fd5b506104ac60048036038101906104a7919061244c565b610c65565b6040516104b99190612387565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e3919061232f565b610d0a565b6040516104f59190612387565b60405180910390f35b348015610509575f80fd5b50610512610d27565b60405161051f91906123af565b60405180910390f35b348015610533575f80fd5b5061053c610d2d565b005b348015610549575f80fd5b5061055261112c565b60405161055f91906123af565b60405180910390f35b348015610573575f80fd5b5061058e600480360381019061058991906124ca565b611135565b60405161059b91906123af565b60405180910390f35b3480156105af575f80fd5b506105ca60048036038101906105c59190612477565b6111b7565b6040516105d79190612387565b60405180910390f35b60606040518060400160405280600481526020017f4563686f00000000000000000000000000000000000000000000000000000000815250905090565b5f6106306106296112aa565b84846112b1565b6001905092915050565b60115481565b5f6012600a61064f9190612664565b6305f5e10061065e91906126ae565b905090565b5f61066f848484611474565b61072c8461067b6112aa565b61072785604051806060016040528060288152602001612f7b6028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6106de6112aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ce09092919063ffffffff16565b6112b1565b600190509392505050565b5f6012905090565b5f600654905090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107886112aa565b73ffffffffffffffffffffffffffffffffffffffff16146107a7575f80fd5b5f6107b130610884565b90505f8111156107c5576107c481611d42565b5b5f4790505f8111156107db576107da81611fad565b5b5050565b5f6107e86112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90612739565b60405180910390fd5b8160078190555060019050919050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108d26112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590612739565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610a206112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390612739565b60405180910390fd5b6012600a610aba9190612664565b6305f5e100610ac991906126ae565b600e819055506012600a610add9190612664565b6305f5e100610aec91906126ae565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6012600a610b219190612664565b6305f5e100610b3091906126ae565b604051610b3d91906123af565b60405180910390a1565b600e5481565b5f600554905090565b5f610b5f6112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290612739565b60405180910390fd5b8160058190555060019050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60606040518060400160405280600481526020017f4543484f00000000000000000000000000000000000000000000000000000000815250905090565b5f610c6e6112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190612739565b60405180910390fd5b8160068190555060019050919050565b5f610d1d610d166112aa565b8484611474565b6001905092915050565b60105481565b610d356112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890612739565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e5d3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600a610e499190612664565b6305f5e100610e5891906126ae565b6112b1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eeb919061276b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f71573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f95919061276b565b6040518363ffffffff1660e01b8152600401610fb2929190612796565b6020604051808303815f875af1158015610fce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff2919061276b565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016110ce9291906127bd565b6020604051808303815f875af11580156110ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110e919061280e565b506001601360156101000a81548160ff021916908315150217905550565b5f600754905090565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f6111c06112aa565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390612739565b60405180910390fd5b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060019050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361131f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611316906128a9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490612937565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161146791906123af565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d9906129c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790612a53565b60405180910390fd5b5f8111611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990612ae1565b60405180910390fd5b5f61159b610bfb565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561160957506115d9610bfb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611a30575f600d5403611656576116536064611645600a54600d541161163257600654611636565b6008545b8561201590919063ffffffff16565b61208c90919063ffffffff16565b90505b5f600d54111561168b57611688606461167a6005548561201590919063ffffffff16565b61208c90919063ffffffff16565b90505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611734575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611787575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561187f57600e548211156117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c890612b49565b60405180910390fd5b600f54826117de85610884565b6117e89190612b67565b1115611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182090612be4565b60405180910390fd5b6118656064611857600a54600d541161184457600654611848565b6008545b8561201590919063ffffffff16565b61208c90919063ffffffff16565b9050600d5f81548092919061187990612c02565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561190757503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561194b57611948606461193a600b54600d54116119275760075461192b565b6009545b8561201590919063ffffffff16565b61208c90919063ffffffff16565b90505b5f61195530610884565b9050601360149054906101000a900460ff161580156119c0575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156119d85750601360159054906101000a900460ff165b80156119e5575060105481115b80156119f45750600c54600d54115b15611a2e57611a16611a1184611a0c846011546120d5565b6120d5565b611d42565b5f4790505f811115611a2c57611a2b47611fad565b5b505b505b5f811115611b2f57611a888160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120ed90919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b2691906123af565b60405180910390a35b611b7f8260015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461214a90919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611c22611bd6828461214a90919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120ed90919063ffffffff16565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611cc5848661214a90919063ffffffff16565b604051611cd291906123af565b60405180910390a350505050565b5f838311158290611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e919061227e565b60405180910390fd5b505f8385611d359190612c49565b9050809150509392505050565b6001601360146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611d7957611d78612c7c565b5b604051908082528060200260200182016040528015611da75781602001602082028036833780820191505090505b50905030815f81518110611dbe57611dbd612ca9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e86919061276b565b81600181518110611e9a57611e99612ca9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611f003060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846112b1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611f62959493929190612dcf565b5f604051808303815f87803b158015611f79575f80fd5b505af1158015611f8b573d5f803e3d5ffd5b50505050505f601360146101000a81548160ff02191690831515021790555050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612011573d5f803e3d5ffd5b5050565b5f808303612025575f9050612086565b5f828461203291906126ae565b90508284826120419190612e54565b14612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890612ef4565b60405180910390fd5b809150505b92915050565b5f6120cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612193565b905092915050565b5f8183116120e357826120e5565b815b905092915050565b5f8082846120fb9190612b67565b905083811015612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213790612f5c565b60405180910390fd5b8091505092915050565b5f61218b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ce0565b905092915050565b5f80831182906121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d0919061227e565b60405180910390fd5b505f83856121e79190612e54565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561222b578082015181840152602081019050612210565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612250826121f4565b61225a81856121fe565b935061226a81856020860161220e565b61227381612236565b840191505092915050565b5f6020820190508181035f8301526122968184612246565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122cb826122a2565b9050919050565b6122db816122c1565b81146122e5575f80fd5b50565b5f813590506122f6816122d2565b92915050565b5f819050919050565b61230e816122fc565b8114612318575f80fd5b50565b5f8135905061232981612305565b92915050565b5f80604083850312156123455761234461229e565b5b5f612352858286016122e8565b92505060206123638582860161231b565b9150509250929050565b5f8115159050919050565b6123818161236d565b82525050565b5f60208201905061239a5f830184612378565b92915050565b6123a9816122fc565b82525050565b5f6020820190506123c25f8301846123a0565b92915050565b5f805f606084860312156123df576123de61229e565b5b5f6123ec868287016122e8565b93505060206123fd868287016122e8565b925050604061240e8682870161231b565b9150509250925092565b5f60ff82169050919050565b61242d81612418565b82525050565b5f6020820190506124465f830184612424565b92915050565b5f602082840312156124615761246061229e565b5b5f61246e8482850161231b565b91505092915050565b5f6020828403121561248c5761248b61229e565b5b5f612499848285016122e8565b91505092915050565b6124ab816122c1565b82525050565b5f6020820190506124c45f8301846124a2565b92915050565b5f80604083850312156124e0576124df61229e565b5b5f6124ed858286016122e8565b92505060206124fe858286016122e8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561258a5780860481111561256657612565612508565b5b60018516156125755780820291505b808102905061258385612535565b945061254a565b94509492505050565b5f826125a2576001905061265d565b816125af575f905061265d565b81600181146125c557600281146125cf576125fe565b600191505061265d565b60ff8411156125e1576125e0612508565b5b8360020a9150848211156125f8576125f7612508565b5b5061265d565b5060208310610133831016604e8410600b84101617156126335782820a90508381111561262e5761262d612508565b5b61265d565b6126408484846001612541565b9250905081840481111561265757612656612508565b5b81810290505b9392505050565b5f61266e826122fc565b915061267983612418565b92506126a67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612593565b905092915050565b5f6126b8826122fc565b91506126c3836122fc565b92508282026126d1816122fc565b915082820484148315176126e8576126e7612508565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6127236020836121fe565b915061272e826126ef565b602082019050919050565b5f6020820190508181035f83015261275081612717565b9050919050565b5f81519050612765816122d2565b92915050565b5f602082840312156127805761277f61229e565b5b5f61278d84828501612757565b91505092915050565b5f6040820190506127a95f8301856124a2565b6127b660208301846124a2565b9392505050565b5f6040820190506127d05f8301856124a2565b6127dd60208301846123a0565b9392505050565b6127ed8161236d565b81146127f7575f80fd5b50565b5f81519050612808816127e4565b92915050565b5f602082840312156128235761282261229e565b5b5f612830848285016127fa565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6128936024836121fe565b915061289e82612839565b604082019050919050565b5f6020820190508181035f8301526128c081612887565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6129216022836121fe565b915061292c826128c7565b604082019050919050565b5f6020820190508181035f83015261294e81612915565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6129af6025836121fe565b91506129ba82612955565b604082019050919050565b5f6020820190508181035f8301526129dc816129a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612a3d6023836121fe565b9150612a48826129e3565b604082019050919050565b5f6020820190508181035f830152612a6a81612a31565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612acb6029836121fe565b9150612ad682612a71565b604082019050919050565b5f6020820190508181035f830152612af881612abf565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f612b336019836121fe565b9150612b3e82612aff565b602082019050919050565b5f6020820190508181035f830152612b6081612b27565b9050919050565b5f612b71826122fc565b9150612b7c836122fc565b9250828201905080821115612b9457612b93612508565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f612bce601a836121fe565b9150612bd982612b9a565b602082019050919050565b5f6020820190508181035f830152612bfb81612bc2565b9050919050565b5f612c0c826122fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c3e57612c3d612508565b5b600182019050919050565b5f612c53826122fc565b9150612c5e836122fc565b9250828203905081811115612c7657612c75612508565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f612d02612cfd612cf884612cd6565b612cdf565b6122fc565b9050919050565b612d1281612ce8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d4a816122c1565b82525050565b5f612d5b8383612d41565b60208301905092915050565b5f602082019050919050565b5f612d7d82612d18565b612d878185612d22565b9350612d9283612d32565b805f5b83811015612dc2578151612da98882612d50565b9750612db483612d67565b925050600181019050612d95565b5085935050505092915050565b5f60a082019050612de25f8301886123a0565b612def6020830187612d09565b8181036040830152612e018186612d73565b9050612e1060608301856124a2565b612e1d60808301846123a0565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612e5e826122fc565b9150612e69836122fc565b925082612e7957612e78612e27565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f612ede6021836121fe565b9150612ee982612e84565b604082019050919050565b5f6020820190508181035f830152612f0b81612ed2565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f612f46601b836121fe565b9150612f5182612f12565b602082019050919050565b5f6020820190508181035f830152612f7381612f3a565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122068edf38be7218746fcc2dd00f301ff6cab1c6394ebfe086190cb5aba27ce2d7564736f6c63430008140033

Deployed Bytecode Sourcemap

4623:13350:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9645:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11076:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6761:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10044:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11469:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9911:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9346:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17382:518;;;;;;;;;;;;;:::i;:::-;;8731:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10214:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4429:148;;;;;;;;;;;;;:::i;:::-;;16278:177;;;;;;;;;;;;;:::i;:::-;;6436:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9201:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8254:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4178:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6542:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9766:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8488:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10767:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6617:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16550:733;;;;;;;;;;;;;:::i;:::-;;9495:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10490:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8997:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9645:83;9682:13;9715:5;;;;;;;;;;;;;;;;;9708:12;;9645:83;:::o;11076:161::-;11151:4;11168:39;11177:12;:10;:12::i;:::-;11191:7;11200:6;11168:8;:39::i;:::-;11225:4;11218:11;;11076:161;;;;:::o;6761:54::-;;;;:::o;10044:100::-;10097:7;6297:2;6402;:13;;;;:::i;:::-;6388:11;:27;;;;:::i;:::-;10117:19;;10044:100;:::o;11469:313::-;11567:4;11584:36;11594:6;11602:9;11613:6;11584:9;:36::i;:::-;11631:121;11640:6;11648:12;:10;:12::i;:::-;11662:89;11700:6;11662:89;;;;;;;;;;;;;;;;;:11;:19;11674:6;11662:19;;;;;;;;;;;;;;;:33;11682:12;:10;:12::i;:::-;11662:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11631:8;:121::i;:::-;11770:4;11763:11;;11469:313;;;;;:::o;9911:83::-;9952:5;6297:2;9970:16;;9911:83;:::o;9346:95::-;9392:7;9419:14;;9412:21;;9346:95;:::o;17382:518::-;17448:10;;;;;;;;;;;17432:26;;:12;:10;:12::i;:::-;:26;;;17424:35;;;;;;17568:20;17591:24;17609:4;17591:9;:24::i;:::-;17568:47;;17645:1;17630:12;:16;17626:105;;;17663:30;17680:12;17663:16;:30::i;:::-;17626:105;17741:18;17762:21;17741:42;;17811:1;17798:10;:14;17794:99;;;17829:24;17842:10;17829:12;:24::i;:::-;17794:99;17413:487;;17382:518::o;8731:162::-;8811:4;4037:12;:10;:12::i;:::-;4027:22;;:6;;;;;;;;;;:22;;;4019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8846:17:::1;8828:15;:35;;;;8881:4;8874:11;;8731:162:::0;;;:::o;10214:119::-;10280:7;10307:9;:18;10317:7;10307:18;;;;;;;;;;;;;;;;10300:25;;10214:119;;;:::o;4429:148::-;4037:12;:10;:12::i;:::-;4027:22;;:6;;;;;;;;;;:22;;;4019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4536:1:::1;4499:40;;4520:6;::::0;::::1;;;;;;;;4499:40;;;;;;;;;;;;4567:1;4550:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4429:148::o:0;16278:177::-;4037:12;:10;:12::i;:::-;4027:22;;:6;;;;;;;;;;:22;;;4019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6297:2:::1;6402;:13;;;;:::i;:::-;6388:11;:27;;;;:::i;:::-;16332:12;:27;;;;6297:2;6402;:13;;;;:::i;:::-;6388:11;:27;;;;:::i;:::-;16370:14;:29;;;;16415:32;6297:2;6402;:13;;;;:::i;:::-;6388:11;:27;;;;:::i;:::-;16415:32;;;;;;:::i;:::-;;;;;;;;16278:177::o:0;6436:55::-;;;;:::o;9201:92::-;9246:7;9273:12;;9266:19;;9201:92;:::o;8254:150::-;8328:4;4037:12;:10;:12::i;:::-;4027:22;;:6;;;;;;;;;;:22;;;4019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8360:14:::1;8345:12;:29;;;;8392:4;8385:11;;8254:150:::0;;;:::o;4178:79::-;4216:7;4243:6;;;;;;;;;;;4236:13;;4178:79;:::o;6542:57::-;;;;:::o;9766:87::-;9805:13;9838:7;;;;;;;;;;;;;;;;;9831:14;;9766:87;:::o;8488:158::-;8566:4;4037:12;:10;:12::i;:::-;4027:22;;:6;;;;;;;;;;:22;;;4019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8600:16:::1;8583:14;:33;;;;8634:4;8627:11;;8488:158:::0;;;:::o;10767:167::-;10845:4;10862:42;10872:12;:10;:12::i;:::-;10886:9;10897:6;10862:9;:42::i;:::-;10922:4;10915:11;;10767:167;;;;:::o;6617:58::-;;;;:::o;16550:733::-;4037:12;:10;:12::i;:::-;4027:22;;:6;;;;;;;;;;:22;;;4019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16714:42:::1;16677:15;;:80;;;;;;;;;;;;;;;;;;16803:63;16820:4;16835:15;;;;;;;;;;;6297:2;6402;:13;;;;:::i;:::-;6388:11;:27;;;;:::i;:::-;16803:8;:63::i;:::-;16974:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16956:55;;;17020:4;17027:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16956:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16940:13;;:110;;;;;;;;;;;;;;;;;;17097:13;;;;;;;;;;;17090:29;;;17128:15;;;;;;;;;;;17146:14;17090:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17191:4;17177:11;;:18;;;;;;;;;;;;;;;;;;16550:733::o:0;9495:98::-;9543:7;9570:15;;9563:22;;9495:98;:::o;10490:143::-;10571:7;10598:11;:18;10610:5;10598:18;;;;;;;;;;;;;;;:27;10617:7;10598:27;;;;;;;;;;;;;;;;10591:34;;10490:143;;;;:::o;8997:154::-;9067:4;4037:12;:10;:12::i;:::-;4027:22;;:6;;;;;;;;;;:22;;;4019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9117:4:::1;9084:18;:30;9103:10;9084:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;9139:4;9132:11;;8997:154:::0;;;:::o;3341:98::-;3394:7;3421:10;3414:17;;3341:98;:::o;11867:335::-;11977:1;11960:19;;:5;:19;;;11952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12058:1;12039:21;;:7;:21;;;12031:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12140:6;12110:11;:18;12122:5;12110:18;;;;;;;;;;;;;;;:27;12129:7;12110:27;;;;;;;;;;;;;;;:36;;;;12178:7;12162:32;;12171:5;12162:32;;;12187:6;12162:32;;;;;;:::i;:::-;;;;;;;;11867:335;;;:::o;12645:2708::-;12749:1;12733:18;;:4;:18;;;12725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12826:1;12812:16;;:2;:16;;;12804:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12896:1;12887:6;:10;12879:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12954:17;13077:7;:5;:7::i;:::-;13069:15;;:4;:15;;;;:32;;;;;13094:7;:5;:7::i;:::-;13088:13;;:2;:13;;;;13069:32;13065:1792;;;13158:1;13145:9;;:14;13141:160;;13192:82;13270:3;13192:73;13216:15;;13204:9;;:27;13203:61;;13250:14;;13203:61;;;13235:12;;13203:61;13192:6;:10;;:73;;;;:::i;:::-;:77;;:82;;;;:::i;:::-;13180:94;;13141:160;13331:1;13319:9;;:13;13315:115;;;13365:33;13394:3;13365:24;13376:12;;13365:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;13353:45;;13315:115;13522:13;;;;;;;;;;;13514:21;;:4;:21;;;:55;;;;;13553:15;;;;;;;;;;;13539:30;;:2;:30;;;;13514:55;:82;;;;;13574:18;:22;13593:2;13574:22;;;;;;;;;;;;;;;;;;;;;;;;;13573:23;13514:82;13510:435;;;13635:12;;13625:6;:22;;13617:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13730:14;;13720:6;13704:13;13714:2;13704:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;13696:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13806:82;13884:3;13806:73;13830:15;;13818:9;;:27;13817:61;;13864:14;;13817:61;;;13849:12;;13817:61;13806:6;:10;;:73;;;;:::i;:::-;:77;;:82;;;;:::i;:::-;13794:94;;13918:9;;:11;;;;;;;;;:::i;:::-;;;;;;13510:435;13971:13;;;;;;;;;;;13965:19;;:2;:19;;;:44;;;;;14004:4;13988:21;;:4;:21;;;;13965:44;13961:194;;;14042:85;14123:3;14042:76;14066:16;;14054:9;;:28;14053:64;;14102:15;;14053:64;;;14086:13;;14053:64;14042:6;:10;;:76;;;;:::i;:::-;:80;;:85;;;;:::i;:::-;14030:97;;13961:194;14171:28;14202:24;14220:4;14202:9;:24::i;:::-;14171:55;;14264:6;;;;;;;;;;;14263:7;:47;;;;;14297:13;;;;;;;;;;;14291:19;;:2;:19;;;14263:47;:79;;;;;14331:11;;;;;;;;;;;14263:79;:140;;;;;14386:17;;14363:20;:40;14263:140;:191;;;;;14436:18;;14424:9;;:30;14263:191;14241:605;;;14489:69;14506:51;14510:6;14518:38;14522:20;14544:11;;14518:3;:38::i;:::-;14506:3;:51::i;:::-;14489:16;:69::i;:::-;14624:26;14653:21;14624:50;;14718:1;14697:18;:22;14693:138;;;14744:35;14757:21;14744:12;:35::i;:::-;14693:138;14470:376;14241:605;13103:1754;13065:1792;14885:1;14873:9;:13;14869:209;;;14930:39;14959:9;14930;:24;14948:4;14930:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;14903:9;:24;14921:4;14903:24;;;;;;;;;;;;;;;:66;;;;15049:4;15026:40;;15035:4;15026:40;;;15056:9;15026:40;;;;;;:::i;:::-;;;;;;;;14869:209;15106:27;15126:6;15106:9;:15;15116:4;15106:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;15088:9;:15;15098:4;15088:15;;;;;;;;;;;;;;;:45;;;;15199:40;15217:21;15228:9;15217:6;:10;;:21;;;;:::i;:::-;15199:9;:13;15209:2;15199:13;;;;;;;;;;;;;;;;:17;;:40;;;;:::i;:::-;15183:9;:13;15193:2;15183:13;;;;;;;;;;;;;;;:56;;;;15319:2;15304:41;;15313:4;15304:41;;;15323:21;15334:9;15323:6;:10;;:21;;;;:::i;:::-;15304:41;;;;;;:::i;:::-;;;;;;;;12714:2639;12645:2708;;;:::o;2362:190::-;2448:7;2481:1;2476;:6;;2484:12;2468:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2508:9;2524:1;2520;:5;;;;:::i;:::-;2508:17;;2543:1;2536:8;;;2362:190;;;;;:::o;15453:679::-;8124:4;8115:6;;:13;;;;;;;;;;;;;;;;;;15531:21:::1;15569:1;15555:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15531:40;;15625:4;15607;15612:1;15607:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;15688:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15678:4;15683:1;15678:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;15758:62;15775:4;15790:15;;;;;;;;;;;15808:11;15758:8;:62::i;:::-;15905:15;;;;;;;;;;;:66;;;15986:11;16012:1;16028:4;16055;16075:15;15905:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15520:612;8160:5:::0;8151:6;;:14;;;;;;;;;;;;;;;;;;15453:679;:::o;12251:92::-;12308:10;;;;;;;;;;;:19;;:27;12328:6;12308:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12251:92;:::o;2586:246::-;2644:7;2673:1;2668;:6;2664:47;;2698:1;2691:8;;;;2664:47;2721:9;2737:1;2733;:5;;;;:::i;:::-;2721:17;;2766:1;2761;2757;:5;;;;:::i;:::-;:10;2749:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2823:1;2816:8;;;2586:246;;;;;:::o;2860:132::-;2918:7;2945:39;2949:1;2952;2945:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2938:46;;2860:132;;;;:::o;12408:107::-;12465:7;12497:1;12493;:5;12492:15;;12506:1;12492:15;;;12502:1;12492:15;12485:22;;12408:107;;;;:::o;2010:179::-;2068:7;2088:9;2104:1;2100;:5;;;;:::i;:::-;2088:17;;2129:1;2124;:6;;2116:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2180:1;2173:8;;;2010:179;;;;:::o;2220:136::-;2278:7;2305:43;2309:1;2312;2305:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2298:50;;2220:136;;;;:::o;2998:189::-;3084:7;3116:1;3112;:5;3119:12;3104:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3143:9;3159:1;3155;:5;;;;:::i;:::-;3143:17;;3178:1;3171:8;;;2998:189;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:474::-;5943:6;5951;6000:2;5988:9;5979:7;5975:23;5971:32;5968:119;;;6006:79;;:::i;:::-;5968:119;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;5875:474;;;;;:::o;6355:180::-;6403:77;6400:1;6393:88;6500:4;6497:1;6490:15;6524:4;6521:1;6514:15;6541:102;6583:8;6630:5;6627:1;6623:13;6602:34;;6541:102;;;:::o;6649:848::-;6710:5;6717:4;6741:6;6732:15;;6765:5;6756:14;;6779:712;6800:1;6790:8;6787:15;6779:712;;;6895:4;6890:3;6886:14;6880:4;6877:24;6874:50;;;6904:18;;:::i;:::-;6874:50;6954:1;6944:8;6940:16;6937:451;;;7369:4;7362:5;7358:16;7349:25;;6937:451;7419:4;7413;7409:15;7401:23;;7449:32;7472:8;7449:32;:::i;:::-;7437:44;;6779:712;;;6649:848;;;;;;;:::o;7503:1073::-;7557:5;7748:8;7738:40;;7769:1;7760:10;;7771:5;;7738:40;7797:4;7787:36;;7814:1;7805:10;;7816:5;;7787:36;7883:4;7931:1;7926:27;;;;7967:1;7962:191;;;;7876:277;;7926:27;7944:1;7935:10;;7946:5;;;7962:191;8007:3;7997:8;7994:17;7991:43;;;8014:18;;:::i;:::-;7991:43;8063:8;8060:1;8056:16;8047:25;;8098:3;8091:5;8088:14;8085:40;;;8105:18;;:::i;:::-;8085:40;8138:5;;;7876:277;;8262:2;8252:8;8249:16;8243:3;8237:4;8234:13;8230:36;8212:2;8202:8;8199:16;8194:2;8188:4;8185:12;8181:35;8165:111;8162:246;;;8318:8;8312:4;8308:19;8299:28;;8353:3;8346:5;8343:14;8340:40;;;8360:18;;:::i;:::-;8340:40;8393:5;;8162:246;8433:42;8471:3;8461:8;8455:4;8452:1;8433:42;:::i;:::-;8418:57;;;;8507:4;8502:3;8498:14;8491:5;8488:25;8485:51;;;8516:18;;:::i;:::-;8485:51;8565:4;8558:5;8554:16;8545:25;;7503:1073;;;;;;:::o;8582:281::-;8640:5;8664:23;8682:4;8664:23;:::i;:::-;8656:31;;8708:25;8724:8;8708:25;:::i;:::-;8696:37;;8752:104;8789:66;8779:8;8773:4;8752:104;:::i;:::-;8743:113;;8582:281;;;;:::o;8869:410::-;8909:7;8932:20;8950:1;8932:20;:::i;:::-;8927:25;;8966:20;8984:1;8966:20;:::i;:::-;8961:25;;9021:1;9018;9014:9;9043:30;9061:11;9043:30;:::i;:::-;9032:41;;9222:1;9213:7;9209:15;9206:1;9203:22;9183:1;9176:9;9156:83;9133:139;;9252:18;;:::i;:::-;9133:139;8917:362;8869:410;;;;:::o;9285:182::-;9425:34;9421:1;9413:6;9409:14;9402:58;9285:182;:::o;9473:366::-;9615:3;9636:67;9700:2;9695:3;9636:67;:::i;:::-;9629:74;;9712:93;9801:3;9712:93;:::i;:::-;9830:2;9825:3;9821:12;9814:19;;9473:366;;;:::o;9845:419::-;10011:4;10049:2;10038:9;10034:18;10026:26;;10098:9;10092:4;10088:20;10084:1;10073:9;10069:17;10062:47;10126:131;10252:4;10126:131;:::i;:::-;10118:139;;9845:419;;;:::o;10270:143::-;10327:5;10358:6;10352:13;10343:22;;10374:33;10401:5;10374:33;:::i;:::-;10270:143;;;;:::o;10419:351::-;10489:6;10538:2;10526:9;10517:7;10513:23;10509:32;10506:119;;;10544:79;;:::i;:::-;10506:119;10664:1;10689:64;10745:7;10736:6;10725:9;10721:22;10689:64;:::i;:::-;10679:74;;10635:128;10419:351;;;;:::o;10776:332::-;10897:4;10935:2;10924:9;10920:18;10912:26;;10948:71;11016:1;11005:9;11001:17;10992:6;10948:71;:::i;:::-;11029:72;11097:2;11086:9;11082:18;11073:6;11029:72;:::i;:::-;10776:332;;;;;:::o;11114:::-;11235:4;11273:2;11262:9;11258:18;11250:26;;11286:71;11354:1;11343:9;11339:17;11330:6;11286:71;:::i;:::-;11367:72;11435:2;11424:9;11420:18;11411:6;11367:72;:::i;:::-;11114:332;;;;;:::o;11452:116::-;11522:21;11537:5;11522:21;:::i;:::-;11515:5;11512:32;11502:60;;11558:1;11555;11548:12;11502:60;11452:116;:::o;11574:137::-;11628:5;11659:6;11653:13;11644:22;;11675:30;11699:5;11675:30;:::i;:::-;11574:137;;;;:::o;11717:345::-;11784:6;11833:2;11821:9;11812:7;11808:23;11804:32;11801:119;;;11839:79;;:::i;:::-;11801:119;11959:1;11984:61;12037:7;12028:6;12017:9;12013:22;11984:61;:::i;:::-;11974:71;;11930:125;11717:345;;;;:::o;12068:223::-;12208:34;12204:1;12196:6;12192:14;12185:58;12277:6;12272:2;12264:6;12260:15;12253:31;12068:223;:::o;12297:366::-;12439:3;12460:67;12524:2;12519:3;12460:67;:::i;:::-;12453:74;;12536:93;12625:3;12536:93;:::i;:::-;12654:2;12649:3;12645:12;12638:19;;12297:366;;;:::o;12669:419::-;12835:4;12873:2;12862:9;12858:18;12850:26;;12922:9;12916:4;12912:20;12908:1;12897:9;12893:17;12886:47;12950:131;13076:4;12950:131;:::i;:::-;12942:139;;12669:419;;;:::o;13094:221::-;13234:34;13230:1;13222:6;13218:14;13211:58;13303:4;13298:2;13290:6;13286:15;13279:29;13094:221;:::o;13321:366::-;13463:3;13484:67;13548:2;13543:3;13484:67;:::i;:::-;13477:74;;13560:93;13649:3;13560:93;:::i;:::-;13678:2;13673:3;13669:12;13662:19;;13321:366;;;:::o;13693:419::-;13859:4;13897:2;13886:9;13882:18;13874:26;;13946:9;13940:4;13936:20;13932:1;13921:9;13917:17;13910:47;13974:131;14100:4;13974:131;:::i;:::-;13966:139;;13693:419;;;:::o;14118:224::-;14258:34;14254:1;14246:6;14242:14;14235:58;14327:7;14322:2;14314:6;14310:15;14303:32;14118:224;:::o;14348:366::-;14490:3;14511:67;14575:2;14570:3;14511:67;:::i;:::-;14504:74;;14587:93;14676:3;14587:93;:::i;:::-;14705:2;14700:3;14696:12;14689:19;;14348:366;;;:::o;14720:419::-;14886:4;14924:2;14913:9;14909:18;14901:26;;14973:9;14967:4;14963:20;14959:1;14948:9;14944:17;14937:47;15001:131;15127:4;15001:131;:::i;:::-;14993:139;;14720:419;;;:::o;15145:222::-;15285:34;15281:1;15273:6;15269:14;15262:58;15354:5;15349:2;15341:6;15337:15;15330:30;15145:222;:::o;15373:366::-;15515:3;15536:67;15600:2;15595:3;15536:67;:::i;:::-;15529:74;;15612:93;15701:3;15612:93;:::i;:::-;15730:2;15725:3;15721:12;15714:19;;15373:366;;;:::o;15745:419::-;15911:4;15949:2;15938:9;15934:18;15926:26;;15998:9;15992:4;15988:20;15984:1;15973:9;15969:17;15962:47;16026:131;16152:4;16026:131;:::i;:::-;16018:139;;15745:419;;;:::o;16170:228::-;16310:34;16306:1;16298:6;16294:14;16287:58;16379:11;16374:2;16366:6;16362:15;16355:36;16170:228;:::o;16404:366::-;16546:3;16567:67;16631:2;16626:3;16567:67;:::i;:::-;16560:74;;16643:93;16732:3;16643:93;:::i;:::-;16761:2;16756:3;16752:12;16745:19;;16404:366;;;:::o;16776:419::-;16942:4;16980:2;16969:9;16965:18;16957:26;;17029:9;17023:4;17019:20;17015:1;17004:9;17000:17;16993:47;17057:131;17183:4;17057:131;:::i;:::-;17049:139;;16776:419;;;:::o;17201:175::-;17341:27;17337:1;17329:6;17325:14;17318:51;17201:175;:::o;17382:366::-;17524:3;17545:67;17609:2;17604:3;17545:67;:::i;:::-;17538:74;;17621:93;17710:3;17621:93;:::i;:::-;17739:2;17734:3;17730:12;17723:19;;17382:366;;;:::o;17754:419::-;17920:4;17958:2;17947:9;17943:18;17935:26;;18007:9;18001:4;17997:20;17993:1;17982:9;17978:17;17971:47;18035:131;18161:4;18035:131;:::i;:::-;18027:139;;17754:419;;;:::o;18179:191::-;18219:3;18238:20;18256:1;18238:20;:::i;:::-;18233:25;;18272:20;18290:1;18272:20;:::i;:::-;18267:25;;18315:1;18312;18308:9;18301:16;;18336:3;18333:1;18330:10;18327:36;;;18343:18;;:::i;:::-;18327:36;18179:191;;;;:::o;18376:176::-;18516:28;18512:1;18504:6;18500:14;18493:52;18376:176;:::o;18558:366::-;18700:3;18721:67;18785:2;18780:3;18721:67;:::i;:::-;18714:74;;18797:93;18886:3;18797:93;:::i;:::-;18915:2;18910:3;18906:12;18899:19;;18558:366;;;:::o;18930:419::-;19096:4;19134:2;19123:9;19119:18;19111:26;;19183:9;19177:4;19173:20;19169:1;19158:9;19154:17;19147:47;19211:131;19337:4;19211:131;:::i;:::-;19203:139;;18930:419;;;:::o;19355:233::-;19394:3;19417:24;19435:5;19417:24;:::i;:::-;19408:33;;19463:66;19456:5;19453:77;19450:103;;19533:18;;:::i;:::-;19450:103;19580:1;19573:5;19569:13;19562:20;;19355:233;;;:::o;19594:194::-;19634:4;19654:20;19672:1;19654:20;:::i;:::-;19649:25;;19688:20;19706:1;19688:20;:::i;:::-;19683:25;;19732:1;19729;19725:9;19717:17;;19756:1;19750:4;19747:11;19744:37;;;19761:18;;:::i;:::-;19744:37;19594:194;;;;:::o;19794:180::-;19842:77;19839:1;19832:88;19939:4;19936:1;19929:15;19963:4;19960:1;19953:15;19980:180;20028:77;20025:1;20018:88;20125:4;20122:1;20115:15;20149:4;20146:1;20139:15;20166:85;20211:7;20240:5;20229:16;;20166:85;;;:::o;20257:60::-;20285:3;20306:5;20299:12;;20257:60;;;:::o;20323:158::-;20381:9;20414:61;20432:42;20441:32;20467:5;20441:32;:::i;:::-;20432:42;:::i;:::-;20414:61;:::i;:::-;20401:74;;20323:158;;;:::o;20487:147::-;20582:45;20621:5;20582:45;:::i;:::-;20577:3;20570:58;20487:147;;:::o;20640:114::-;20707:6;20741:5;20735:12;20725:22;;20640:114;;;:::o;20760:184::-;20859:11;20893:6;20888:3;20881:19;20933:4;20928:3;20924:14;20909:29;;20760:184;;;;:::o;20950:132::-;21017:4;21040:3;21032:11;;21070:4;21065:3;21061:14;21053:22;;20950:132;;;:::o;21088:108::-;21165:24;21183:5;21165:24;:::i;:::-;21160:3;21153:37;21088:108;;:::o;21202:179::-;21271:10;21292:46;21334:3;21326:6;21292:46;:::i;:::-;21370:4;21365:3;21361:14;21347:28;;21202:179;;;;:::o;21387:113::-;21457:4;21489;21484:3;21480:14;21472:22;;21387:113;;;:::o;21536:732::-;21655:3;21684:54;21732:5;21684:54;:::i;:::-;21754:86;21833:6;21828:3;21754:86;:::i;:::-;21747:93;;21864:56;21914:5;21864:56;:::i;:::-;21943:7;21974:1;21959:284;21984:6;21981:1;21978:13;21959:284;;;22060:6;22054:13;22087:63;22146:3;22131:13;22087:63;:::i;:::-;22080:70;;22173:60;22226:6;22173:60;:::i;:::-;22163:70;;22019:224;22006:1;22003;21999:9;21994:14;;21959:284;;;21963:14;22259:3;22252:10;;21660:608;;;21536:732;;;;:::o;22274:831::-;22537:4;22575:3;22564:9;22560:19;22552:27;;22589:71;22657:1;22646:9;22642:17;22633:6;22589:71;:::i;:::-;22670:80;22746:2;22735:9;22731:18;22722:6;22670:80;:::i;:::-;22797:9;22791:4;22787:20;22782:2;22771:9;22767:18;22760:48;22825:108;22928:4;22919:6;22825:108;:::i;:::-;22817:116;;22943:72;23011:2;23000:9;22996:18;22987:6;22943:72;:::i;:::-;23025:73;23093:3;23082:9;23078:19;23069:6;23025:73;:::i;:::-;22274:831;;;;;;;;:::o;23111:180::-;23159:77;23156:1;23149:88;23256:4;23253:1;23246:15;23280:4;23277:1;23270:15;23297:185;23337:1;23354:20;23372:1;23354:20;:::i;:::-;23349:25;;23388:20;23406:1;23388:20;:::i;:::-;23383:25;;23427:1;23417:35;;23432:18;;:::i;:::-;23417:35;23474:1;23471;23467:9;23462:14;;23297:185;;;;:::o;23488:220::-;23628:34;23624:1;23616:6;23612:14;23605:58;23697:3;23692:2;23684:6;23680:15;23673:28;23488:220;:::o;23714:366::-;23856:3;23877:67;23941:2;23936:3;23877:67;:::i;:::-;23870:74;;23953:93;24042:3;23953:93;:::i;:::-;24071:2;24066:3;24062:12;24055:19;;23714:366;;;:::o;24086:419::-;24252:4;24290:2;24279:9;24275:18;24267:26;;24339:9;24333:4;24329:20;24325:1;24314:9;24310:17;24303:47;24367:131;24493:4;24367:131;:::i;:::-;24359:139;;24086:419;;;:::o;24511:177::-;24651:29;24647:1;24639:6;24635:14;24628:53;24511:177;:::o;24694:366::-;24836:3;24857:67;24921:2;24916:3;24857:67;:::i;:::-;24850:74;;24933:93;25022:3;24933:93;:::i;:::-;25051:2;25046:3;25042:12;25035:19;;24694:366;;;:::o;25066:419::-;25232:4;25270:2;25259:9;25255:18;25247:26;;25319:9;25313:4;25309:20;25305:1;25294:9;25290:17;25283:47;25347:131;25473:4;25347:131;:::i;:::-;25339:139;;25066:419;;;:::o

Swarm Source

ipfs://68edf38be7218746fcc2dd00f301ff6cab1c6394ebfe086190cb5aba27ce2d75
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.