ETH Price: $3,134.79 (-4.96%)
Gas: 3 Gwei

Contract

0xB16D8c8ed8EcA378A8CCE0960aF12A444aA659B9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve196964112024-04-20 11:45:3575 days ago1713613535IN
0xB16D8c8e...44aA659B9
0 ETH0.000326096.96372318
Set Min Swap Tok...196964062024-04-20 11:44:3575 days ago1713613475IN
0xB16D8c8e...44aA659B9
0 ETH0.00019676.78011352
Set Trading196963942024-04-20 11:42:1175 days ago1713613331IN
0xB16D8c8e...44aA659B9
0 ETH0.000210067.35272835
Approve196963652024-04-20 11:36:2375 days ago1713612983IN
0xB16D8c8e...44aA659B9
0 ETH0.00033797.16085936
0x60806040196963552024-04-20 11:34:2375 days ago1713612863IN
 Create: TEST
0 ETH0.039039646.89947228

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
196963982024-04-20 11:42:5975 days ago1713613379
0xB16D8c8e...44aA659B9
0.00550981 ETH
196963982024-04-20 11:42:5975 days ago1713613379
0xB16D8c8e...44aA659B9
0.00550981 ETH
196963962024-04-20 11:42:3575 days ago1713613355
0xB16D8c8e...44aA659B9
0.01657785 ETH
196963962024-04-20 11:42:3575 days ago1713613355
0xB16D8c8e...44aA659B9
0.01657785 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TEST

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-20
*/

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.9;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

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
    );
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    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;
    }

    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;
    }

    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;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}

contract TEST is Context, IERC20, Ownable {
    string private constant _name = "TESTTOKEN";
    string private constant _symbol = "TEST";

    using SafeMath for uint256;

    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 9000000 * 10**9; 
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _totalBuys = 0;
    uint256 private _totalSells = 0;
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 4;
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 4;

    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    
    mapping(address => uint256) public _buyMap;
    address payable private _marketingAddress =
        payable(0xf4E7789371eC022b0BDb13B73bFA9D0f1B29DD5b);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private tradingOpen = false;
    bool private inSwap = false;
    bool private swapEnabled = true;


    uint256 public _swapTokensAtAmount = 15000 * 10**9;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        ); //
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    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;
    }

    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

    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);
    }

    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");

        if (from != owner() && to != owner()) {
            //Trade start check
            if (!tradingOpen) {
                require(
                    from == owner(),
                    "TOKEN: This account cannot send tokens until trading is enabled"
                );
            }

            
            

          

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

           

            if (
                canSwap &&
                !inSwap &&
                from != uniswapV2Pair &&
                swapEnabled &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        //Transfer Tokens
        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        } else {
            //Set Fee for Buys
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _totalBuys++;
                if (_totalBuys <= 100) {
                    // Set high fees
                    _redisFee = 0;
                    _taxFee = 25;
                } else {
                    _redisFee = _redisFeeOnBuy;
                    _taxFee = _taxFeeOnBuy;
                }
            }

            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _totalSells++;
                if (_totalSells <= 100) {
                    // Set high fees
                    _redisFee = 0;
                    _taxFee = 25;
                } else {
                    _redisFee = _redisFeeOnSell;
                    _taxFee = _taxFeeOnSell;
                }
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount);
    }

    function setTrading() public onlyOwner {
        tradingOpen = true;
    }
    function isTrading() public view returns (bool) {
        return tradingOpen;
    }

    function manualswap() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(
            tAmount,
            _redisFee,
            _taxFee
        );
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tTeam,
            currentRate
        );
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function setFee(
        uint256 redisFeeOnBuy,
        uint256 redisFeeOnSell,
        uint256 taxFeeOnBuy,
        uint256 taxFeeOnSell
    ) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(uint256 swapTokensAtAmount)
        public
        onlyOwner
    {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }



    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }
}

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":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052661ff973cafa80005f196100189190610607565b5f196100249190610664565b6006555f6008555f6009555f600a556004600b555f600c556004600d55600c54600e55600d54600f55600e54601055600f5460115573f4e7789371ec022b0bdb13b73bfa9d0f1b29dd5b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f601560146101000a81548160ff0219169083151502179055505f6015806101000a81548160ff0219169083151502179055506001601560166101000a81548160ff021916908315150217905550650da475abf000601655348015610110575f80fd5b505f6101206105a360201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060065460025f6101d06105a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d291906106f5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035b91906106f5565b6040518363ffffffff1660e01b815260040161037892919061072f565b6020604051808303815f875af1158015610394573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b891906106f5565b60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160055f61040a6105aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506105326105a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef661ff973cafa80006040516105959190610765565b60405180910390a35061077e565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610611826105d1565b915061061c836105d1565b92508261062c5761062b6105da565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61066e826105d1565b9150610679836105d1565b925082820390508181111561069157610690610637565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106c48261069b565b9050919050565b6106d4816106ba565b81146106de575f80fd5b50565b5f815190506106ef816106cb565b92915050565b5f6020828403121561070a57610709610697565b5b5f610717848285016106e1565b91505092915050565b610729816106ba565b82525050565b5f6040820190506107425f830185610720565b61074f6020830184610720565b9392505050565b61075f816105d1565b82525050565b5f6020820190506107785f830184610756565b92915050565b6131f18061078b5f395ff3fe60806040526004361061014e575f3560e01c8063715018a6116100b5578063a2a957bb1161006e578063a2a957bb14610455578063a9059cbb1461047d578063c3c8cd80146104b9578063c492f046146104cf578063dd62ed3e146104f7578063f2fde38b1461053357610155565b8063715018a6146103715780637c519ffb146103875780637f2feddc1461039d5780638da5cb5b146103d957806395d89b411461040357806398a5c3151461042d57610155565b8063313ce56711610107578063313ce5671461027957806349bd5a5e146102a35780636d8aa8f8146102cd5780636e9087db146102f55780636fc3eaec1461031f57806370a082311461033557610155565b806306fdde0314610159578063095ea7b3146101835780631694505e146101bf57806318160ddd146101e957806323b872dd146102135780632fd689e31461024f57610155565b3661015557005b5f80fd5b348015610164575f80fd5b5061016d61055b565b60405161017a91906123f3565b60405180910390f35b34801561018e575f80fd5b506101a960048036038101906101a491906124a8565b610598565b6040516101b69190612500565b60405180910390f35b3480156101ca575f80fd5b506101d36105b5565b6040516101e09190612574565b60405180910390f35b3480156101f4575f80fd5b506101fd6105da565b60405161020a919061259c565b60405180910390f35b34801561021e575f80fd5b50610239600480360381019061023491906125b5565b6105e8565b6040516102469190612500565b60405180910390f35b34801561025a575f80fd5b506102636106bc565b604051610270919061259c565b60405180910390f35b348015610284575f80fd5b5061028d6106c2565b60405161029a9190612620565b60405180910390f35b3480156102ae575f80fd5b506102b76106ca565b6040516102c49190612648565b60405180910390f35b3480156102d8575f80fd5b506102f360048036038101906102ee919061268b565b6106ef565b005b348015610300575f80fd5b506103096107a0565b6040516103169190612500565b60405180910390f35b34801561032a575f80fd5b506103336107b6565b005b348015610340575f80fd5b5061035b600480360381019061035691906126b6565b610825565b604051610368919061259c565b60405180910390f35b34801561037c575f80fd5b50610385610873565b005b348015610392575f80fd5b5061039b6109c1565b005b3480156103a8575f80fd5b506103c360048036038101906103be91906126b6565b610a72565b6040516103d0919061259c565b60405180910390f35b3480156103e4575f80fd5b506103ed610a87565b6040516103fa9190612648565b60405180910390f35b34801561040e575f80fd5b50610417610aae565b60405161042491906123f3565b60405180910390f35b348015610438575f80fd5b50610453600480360381019061044e91906126e1565b610aeb565b005b348015610460575f80fd5b5061047b6004803603810190610476919061270c565b610b89565b005b348015610488575f80fd5b506104a3600480360381019061049e91906124a8565b610c3f565b6040516104b09190612500565b60405180910390f35b3480156104c4575f80fd5b506104cd610c5c565b005b3480156104da575f80fd5b506104f560048036038101906104f091906127d1565b610cd3565b005b348015610502575f80fd5b5061051d6004803603810190610518919061282e565b610e02565b60405161052a919061259c565b60405180910390f35b34801561053e575f80fd5b50610559600480360381019061055491906126b6565b610e84565b005b60606040518060400160405280600981526020017f54455354544f4b454e0000000000000000000000000000000000000000000000815250905090565b5f6105ab6105a4611041565b8484611048565b6001905092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f661ff973cafa8000905090565b5f6105f484848461120b565b6106b184610600611041565b6106ac856040518060600160405280602881526020016131946028913960045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610663611041565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546118fa9092919063ffffffff16565b611048565b600190509392505050565b60165481565b5f6009905090565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106f7611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077a906128b6565b60405180910390fd5b80601560166101000a81548160ff02191690831515021790555050565b5f601560149054906101000a900460ff16905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107f6611041565b73ffffffffffffffffffffffffffffffffffffffff1614610815575f80fd5b5f4790506108228161195c565b50565b5f61086c60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119c4565b9050919050565b61087b611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fe906128b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6109c9611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c906128b6565b60405180910390fd5b6001601560146101000a81548160ff021916908315150217905550565b6012602052805f5260405f205f915090505481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f5445535400000000000000000000000000000000000000000000000000000000815250905090565b610af3611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b76906128b6565b60405180910390fd5b8060168190555050565b610b91611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c14906128b6565b60405180910390fd5b83600a8190555082600c8190555081600b8190555080600d8190555050505050565b5f610c52610c4b611041565b848461120b565b6001905092915050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c9c611041565b73ffffffffffffffffffffffffffffffffffffffff1614610cbb575f80fd5b5f610cc530610825565b9050610cd081611a30565b50565b610cdb611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e906128b6565b60405180910390fd5b5f5b83839050811015610dfc578160055f868685818110610d8b57610d8a6128d4565b5b9050602002016020810190610da091906126b6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610d69565b50505050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610e8c611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f906128b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90612971565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad906129ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90612a8d565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111fe919061259c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090612b1b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90612ba9565b60405180910390fd5b5f8111611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090612c37565b60405180910390fd5b611331610a87565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561139f575061136f610a87565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561159b57601560149054906101000a900460ff1661142e576113c0610a87565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490612cc5565b60405180910390fd5b5b5f61143830610825565b90505f601654821015905080801561145b575060158054906101000a900460ff16155b80156114b4575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156114cc5750601560169054906101000a900460ff165b801561151f575060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611572575060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156115985761158082611a30565b5f4790505f811115611596576115954761195c565b5b505b50505b5f6001905060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061163b575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806116ec575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156116eb575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156116f9575f90506118e8565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156117a2575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156117f05760085f8154809291906117b990612d10565b91905055506064600854116117dc575f600e819055506019600f819055506117ef565b600a54600e81905550600b54600f819055505b5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611899575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156118e75760095f8154809291906118b090612d10565b91905055506064600954116118d3575f600e819055506019600f819055506118e6565b600c54600e81905550600d54600f819055505b5b5b6118f484848484611c99565b50505050565b5f838311158290611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193891906123f3565b60405180910390fd5b505f838561194f9190612d57565b9050809150509392505050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156119c0573d5f803e3d5ffd5b5050565b5f600654821115611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190612dfa565b60405180910390fd5b5f611a13611cc6565b9050611a288184611cef90919063ffffffff16565b915050919050565b60016015806101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611a6657611a65612e18565b5b604051908082528060200260200182016040528015611a945781602001602082028036833780820191505090505b50905030815f81518110611aab57611aaa6128d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b739190612e59565b81600181518110611b8757611b866128d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611bed3060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611048565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611c4f959493929190612f74565b5f604051808303815f87803b158015611c66575f80fd5b505af1158015611c78573d5f803e3d5ffd5b50505050505f6015806101000a81548160ff02191690831515021790555050565b80611ca757611ca6611d38565b5b611cb2848484611d71565b80611cc057611cbf611f31565b5b50505050565b5f805f611cd1611f45565b91509150611ce88183611cef90919063ffffffff16565b9250505090565b5f611d3083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f9e565b905092915050565b5f600e54148015611d4a57505f600f54145b611d6f57600e54601081905550600f546011819055505f600e819055505f600f819055505b565b5f805f805f80611d8087611fff565b955095509550955095509550611ddc8660025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461205f90919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611e6d8560025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120a890919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611eb781612105565b611ec184836121bc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611f1e919061259c565b60405180910390a3505050505050505050565b601054600e81905550601154600f81905550565b5f805f60065490505f661ff973cafa80009050611f74661ff973cafa8000600654611cef90919063ffffffff16565b821015611f9157600654661ff973cafa8000935093505050611f9a565b81819350935050505b9091565b5f8083118290611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb91906123f3565b60405180910390fd5b505f8385611ff29190612ff9565b9050809150509392505050565b5f805f805f805f805f6120178a600e54600f546121f6565b9250925092505f612026611cc6565b90505f805f6120378e878787612288565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b5f6120a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118fa565b905092915050565b5f8082846120b69190613029565b9050838110156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f2906130a6565b60405180910390fd5b8091505092915050565b5f61210e611cc6565b90505f612124828461230c90919063ffffffff16565b90506121768160025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120a890919063ffffffff16565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b6121d18260065461205f90919063ffffffff16565b6006819055506121ec816007546120a890919063ffffffff16565b6007819055505050565b5f805f806122206064612212888a61230c90919063ffffffff16565b611cef90919063ffffffff16565b90505f612249606461223b888b61230c90919063ffffffff16565b611cef90919063ffffffff16565b90505f61227182612263858c61205f90919063ffffffff16565b61205f90919063ffffffff16565b905080838395509550955050505093509350939050565b5f805f8061229f858961230c90919063ffffffff16565b90505f6122b5868961230c90919063ffffffff16565b90505f6122cb878961230c90919063ffffffff16565b90505f6122f3826122e5858761205f90919063ffffffff16565b61205f90919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f80830361231c575f905061237d565b5f828461232991906130c4565b90508284826123389190612ff9565b14612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f90613175565b60405180910390fd5b809150505b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6123c582612383565b6123cf818561238d565b93506123df81856020860161239d565b6123e8816123ab565b840191505092915050565b5f6020820190508181035f83015261240b81846123bb565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124448261241b565b9050919050565b6124548161243a565b811461245e575f80fd5b50565b5f8135905061246f8161244b565b92915050565b5f819050919050565b61248781612475565b8114612491575f80fd5b50565b5f813590506124a28161247e565b92915050565b5f80604083850312156124be576124bd612413565b5b5f6124cb85828601612461565b92505060206124dc85828601612494565b9150509250929050565b5f8115159050919050565b6124fa816124e6565b82525050565b5f6020820190506125135f8301846124f1565b92915050565b5f819050919050565b5f61253c6125376125328461241b565b612519565b61241b565b9050919050565b5f61254d82612522565b9050919050565b5f61255e82612543565b9050919050565b61256e81612554565b82525050565b5f6020820190506125875f830184612565565b92915050565b61259681612475565b82525050565b5f6020820190506125af5f83018461258d565b92915050565b5f805f606084860312156125cc576125cb612413565b5b5f6125d986828701612461565b93505060206125ea86828701612461565b92505060406125fb86828701612494565b9150509250925092565b5f60ff82169050919050565b61261a81612605565b82525050565b5f6020820190506126335f830184612611565b92915050565b6126428161243a565b82525050565b5f60208201905061265b5f830184612639565b92915050565b61266a816124e6565b8114612674575f80fd5b50565b5f8135905061268581612661565b92915050565b5f602082840312156126a05761269f612413565b5b5f6126ad84828501612677565b91505092915050565b5f602082840312156126cb576126ca612413565b5b5f6126d884828501612461565b91505092915050565b5f602082840312156126f6576126f5612413565b5b5f61270384828501612494565b91505092915050565b5f805f806080858703121561272457612723612413565b5b5f61273187828801612494565b945050602061274287828801612494565b935050604061275387828801612494565b925050606061276487828801612494565b91505092959194509250565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261279157612790612770565b5b8235905067ffffffffffffffff8111156127ae576127ad612774565b5b6020830191508360208202830111156127ca576127c9612778565b5b9250929050565b5f805f604084860312156127e8576127e7612413565b5b5f84013567ffffffffffffffff81111561280557612804612417565b5b6128118682870161277c565b9350935050602061282486828701612677565b9150509250925092565b5f806040838503121561284457612843612413565b5b5f61285185828601612461565b925050602061286285828601612461565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6128a060208361238d565b91506128ab8261286c565b602082019050919050565b5f6020820190508181035f8301526128cd81612894565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61295b60268361238d565b915061296682612901565b604082019050919050565b5f6020820190508181035f8301526129888161294f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6129e960248361238d565b91506129f48261298f565b604082019050919050565b5f6020820190508181035f830152612a16816129dd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612a7760228361238d565b9150612a8282612a1d565b604082019050919050565b5f6020820190508181035f830152612aa481612a6b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612b0560258361238d565b9150612b1082612aab565b604082019050919050565b5f6020820190508181035f830152612b3281612af9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612b9360238361238d565b9150612b9e82612b39565b604082019050919050565b5f6020820190508181035f830152612bc081612b87565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612c2160298361238d565b9150612c2c82612bc7565b604082019050919050565b5f6020820190508181035f830152612c4e81612c15565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e64205f8201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b5f612caf603f8361238d565b9150612cba82612c55565b604082019050919050565b5f6020820190508181035f830152612cdc81612ca3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d1a82612475565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d4c57612d4b612ce3565b5b600182019050919050565b5f612d6182612475565b9150612d6c83612475565b9250828203905081811115612d8457612d83612ce3565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f612de4602a8361238d565b9150612def82612d8a565b604082019050919050565b5f6020820190508181035f830152612e1181612dd8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050612e538161244b565b92915050565b5f60208284031215612e6e57612e6d612413565b5b5f612e7b84828501612e45565b91505092915050565b5f819050919050565b5f612ea7612ea2612e9d84612e84565b612519565b612475565b9050919050565b612eb781612e8d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612eef8161243a565b82525050565b5f612f008383612ee6565b60208301905092915050565b5f602082019050919050565b5f612f2282612ebd565b612f2c8185612ec7565b9350612f3783612ed7565b805f5b83811015612f67578151612f4e8882612ef5565b9750612f5983612f0c565b925050600181019050612f3a565b5085935050505092915050565b5f60a082019050612f875f83018861258d565b612f946020830187612eae565b8181036040830152612fa68186612f18565b9050612fb56060830185612639565b612fc2608083018461258d565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61300382612475565b915061300e83612475565b92508261301e5761301d612fcc565b5b828204905092915050565b5f61303382612475565b915061303e83612475565b925082820190508082111561305657613055612ce3565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613090601b8361238d565b915061309b8261305c565b602082019050919050565b5f6020820190508181035f8301526130bd81613084565b9050919050565b5f6130ce82612475565b91506130d983612475565b92508282026130e781612475565b915082820484148315176130fe576130fd612ce3565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61315f60218361238d565b915061316a82613105565b604082019050919050565b5f6020820190508181035f83015261318c81613153565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122096eda5c075070b25af21fd5f0d59c826729565b9788b4ae19b11d7ddbc02c48a64736f6c63430008190033

Deployed Bytecode

0x60806040526004361061014e575f3560e01c8063715018a6116100b5578063a2a957bb1161006e578063a2a957bb14610455578063a9059cbb1461047d578063c3c8cd80146104b9578063c492f046146104cf578063dd62ed3e146104f7578063f2fde38b1461053357610155565b8063715018a6146103715780637c519ffb146103875780637f2feddc1461039d5780638da5cb5b146103d957806395d89b411461040357806398a5c3151461042d57610155565b8063313ce56711610107578063313ce5671461027957806349bd5a5e146102a35780636d8aa8f8146102cd5780636e9087db146102f55780636fc3eaec1461031f57806370a082311461033557610155565b806306fdde0314610159578063095ea7b3146101835780631694505e146101bf57806318160ddd146101e957806323b872dd146102135780632fd689e31461024f57610155565b3661015557005b5f80fd5b348015610164575f80fd5b5061016d61055b565b60405161017a91906123f3565b60405180910390f35b34801561018e575f80fd5b506101a960048036038101906101a491906124a8565b610598565b6040516101b69190612500565b60405180910390f35b3480156101ca575f80fd5b506101d36105b5565b6040516101e09190612574565b60405180910390f35b3480156101f4575f80fd5b506101fd6105da565b60405161020a919061259c565b60405180910390f35b34801561021e575f80fd5b50610239600480360381019061023491906125b5565b6105e8565b6040516102469190612500565b60405180910390f35b34801561025a575f80fd5b506102636106bc565b604051610270919061259c565b60405180910390f35b348015610284575f80fd5b5061028d6106c2565b60405161029a9190612620565b60405180910390f35b3480156102ae575f80fd5b506102b76106ca565b6040516102c49190612648565b60405180910390f35b3480156102d8575f80fd5b506102f360048036038101906102ee919061268b565b6106ef565b005b348015610300575f80fd5b506103096107a0565b6040516103169190612500565b60405180910390f35b34801561032a575f80fd5b506103336107b6565b005b348015610340575f80fd5b5061035b600480360381019061035691906126b6565b610825565b604051610368919061259c565b60405180910390f35b34801561037c575f80fd5b50610385610873565b005b348015610392575f80fd5b5061039b6109c1565b005b3480156103a8575f80fd5b506103c360048036038101906103be91906126b6565b610a72565b6040516103d0919061259c565b60405180910390f35b3480156103e4575f80fd5b506103ed610a87565b6040516103fa9190612648565b60405180910390f35b34801561040e575f80fd5b50610417610aae565b60405161042491906123f3565b60405180910390f35b348015610438575f80fd5b50610453600480360381019061044e91906126e1565b610aeb565b005b348015610460575f80fd5b5061047b6004803603810190610476919061270c565b610b89565b005b348015610488575f80fd5b506104a3600480360381019061049e91906124a8565b610c3f565b6040516104b09190612500565b60405180910390f35b3480156104c4575f80fd5b506104cd610c5c565b005b3480156104da575f80fd5b506104f560048036038101906104f091906127d1565b610cd3565b005b348015610502575f80fd5b5061051d6004803603810190610518919061282e565b610e02565b60405161052a919061259c565b60405180910390f35b34801561053e575f80fd5b50610559600480360381019061055491906126b6565b610e84565b005b60606040518060400160405280600981526020017f54455354544f4b454e0000000000000000000000000000000000000000000000815250905090565b5f6105ab6105a4611041565b8484611048565b6001905092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f661ff973cafa8000905090565b5f6105f484848461120b565b6106b184610600611041565b6106ac856040518060600160405280602881526020016131946028913960045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610663611041565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546118fa9092919063ffffffff16565b611048565b600190509392505050565b60165481565b5f6009905090565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106f7611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077a906128b6565b60405180910390fd5b80601560166101000a81548160ff02191690831515021790555050565b5f601560149054906101000a900460ff16905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107f6611041565b73ffffffffffffffffffffffffffffffffffffffff1614610815575f80fd5b5f4790506108228161195c565b50565b5f61086c60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119c4565b9050919050565b61087b611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fe906128b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6109c9611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c906128b6565b60405180910390fd5b6001601560146101000a81548160ff021916908315150217905550565b6012602052805f5260405f205f915090505481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f5445535400000000000000000000000000000000000000000000000000000000815250905090565b610af3611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b76906128b6565b60405180910390fd5b8060168190555050565b610b91611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c14906128b6565b60405180910390fd5b83600a8190555082600c8190555081600b8190555080600d8190555050505050565b5f610c52610c4b611041565b848461120b565b6001905092915050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c9c611041565b73ffffffffffffffffffffffffffffffffffffffff1614610cbb575f80fd5b5f610cc530610825565b9050610cd081611a30565b50565b610cdb611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e906128b6565b60405180910390fd5b5f5b83839050811015610dfc578160055f868685818110610d8b57610d8a6128d4565b5b9050602002016020810190610da091906126b6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610d69565b50505050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610e8c611041565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f906128b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90612971565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad906129ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90612a8d565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111fe919061259c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090612b1b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90612ba9565b60405180910390fd5b5f8111611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090612c37565b60405180910390fd5b611331610a87565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561139f575061136f610a87565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561159b57601560149054906101000a900460ff1661142e576113c0610a87565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490612cc5565b60405180910390fd5b5b5f61143830610825565b90505f601654821015905080801561145b575060158054906101000a900460ff16155b80156114b4575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156114cc5750601560169054906101000a900460ff165b801561151f575060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611572575060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156115985761158082611a30565b5f4790505f811115611596576115954761195c565b5b505b50505b5f6001905060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061163b575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806116ec575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156116eb575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156116f9575f90506118e8565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156117a2575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156117f05760085f8154809291906117b990612d10565b91905055506064600854116117dc575f600e819055506019600f819055506117ef565b600a54600e81905550600b54600f819055505b5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611899575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156118e75760095f8154809291906118b090612d10565b91905055506064600954116118d3575f600e819055506019600f819055506118e6565b600c54600e81905550600d54600f819055505b5b5b6118f484848484611c99565b50505050565b5f838311158290611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193891906123f3565b60405180910390fd5b505f838561194f9190612d57565b9050809150509392505050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156119c0573d5f803e3d5ffd5b5050565b5f600654821115611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190612dfa565b60405180910390fd5b5f611a13611cc6565b9050611a288184611cef90919063ffffffff16565b915050919050565b60016015806101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611a6657611a65612e18565b5b604051908082528060200260200182016040528015611a945781602001602082028036833780820191505090505b50905030815f81518110611aab57611aaa6128d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b739190612e59565b81600181518110611b8757611b866128d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611bed3060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611048565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611c4f959493929190612f74565b5f604051808303815f87803b158015611c66575f80fd5b505af1158015611c78573d5f803e3d5ffd5b50505050505f6015806101000a81548160ff02191690831515021790555050565b80611ca757611ca6611d38565b5b611cb2848484611d71565b80611cc057611cbf611f31565b5b50505050565b5f805f611cd1611f45565b91509150611ce88183611cef90919063ffffffff16565b9250505090565b5f611d3083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f9e565b905092915050565b5f600e54148015611d4a57505f600f54145b611d6f57600e54601081905550600f546011819055505f600e819055505f600f819055505b565b5f805f805f80611d8087611fff565b955095509550955095509550611ddc8660025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461205f90919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611e6d8560025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120a890919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611eb781612105565b611ec184836121bc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611f1e919061259c565b60405180910390a3505050505050505050565b601054600e81905550601154600f81905550565b5f805f60065490505f661ff973cafa80009050611f74661ff973cafa8000600654611cef90919063ffffffff16565b821015611f9157600654661ff973cafa8000935093505050611f9a565b81819350935050505b9091565b5f8083118290611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb91906123f3565b60405180910390fd5b505f8385611ff29190612ff9565b9050809150509392505050565b5f805f805f805f805f6120178a600e54600f546121f6565b9250925092505f612026611cc6565b90505f805f6120378e878787612288565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b5f6120a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118fa565b905092915050565b5f8082846120b69190613029565b9050838110156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f2906130a6565b60405180910390fd5b8091505092915050565b5f61210e611cc6565b90505f612124828461230c90919063ffffffff16565b90506121768160025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120a890919063ffffffff16565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b6121d18260065461205f90919063ffffffff16565b6006819055506121ec816007546120a890919063ffffffff16565b6007819055505050565b5f805f806122206064612212888a61230c90919063ffffffff16565b611cef90919063ffffffff16565b90505f612249606461223b888b61230c90919063ffffffff16565b611cef90919063ffffffff16565b90505f61227182612263858c61205f90919063ffffffff16565b61205f90919063ffffffff16565b905080838395509550955050505093509350939050565b5f805f8061229f858961230c90919063ffffffff16565b90505f6122b5868961230c90919063ffffffff16565b90505f6122cb878961230c90919063ffffffff16565b90505f6122f3826122e5858761205f90919063ffffffff16565b61205f90919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f80830361231c575f905061237d565b5f828461232991906130c4565b90508284826123389190612ff9565b14612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f90613175565b60405180910390fd5b809150505b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6123c582612383565b6123cf818561238d565b93506123df81856020860161239d565b6123e8816123ab565b840191505092915050565b5f6020820190508181035f83015261240b81846123bb565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124448261241b565b9050919050565b6124548161243a565b811461245e575f80fd5b50565b5f8135905061246f8161244b565b92915050565b5f819050919050565b61248781612475565b8114612491575f80fd5b50565b5f813590506124a28161247e565b92915050565b5f80604083850312156124be576124bd612413565b5b5f6124cb85828601612461565b92505060206124dc85828601612494565b9150509250929050565b5f8115159050919050565b6124fa816124e6565b82525050565b5f6020820190506125135f8301846124f1565b92915050565b5f819050919050565b5f61253c6125376125328461241b565b612519565b61241b565b9050919050565b5f61254d82612522565b9050919050565b5f61255e82612543565b9050919050565b61256e81612554565b82525050565b5f6020820190506125875f830184612565565b92915050565b61259681612475565b82525050565b5f6020820190506125af5f83018461258d565b92915050565b5f805f606084860312156125cc576125cb612413565b5b5f6125d986828701612461565b93505060206125ea86828701612461565b92505060406125fb86828701612494565b9150509250925092565b5f60ff82169050919050565b61261a81612605565b82525050565b5f6020820190506126335f830184612611565b92915050565b6126428161243a565b82525050565b5f60208201905061265b5f830184612639565b92915050565b61266a816124e6565b8114612674575f80fd5b50565b5f8135905061268581612661565b92915050565b5f602082840312156126a05761269f612413565b5b5f6126ad84828501612677565b91505092915050565b5f602082840312156126cb576126ca612413565b5b5f6126d884828501612461565b91505092915050565b5f602082840312156126f6576126f5612413565b5b5f61270384828501612494565b91505092915050565b5f805f806080858703121561272457612723612413565b5b5f61273187828801612494565b945050602061274287828801612494565b935050604061275387828801612494565b925050606061276487828801612494565b91505092959194509250565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261279157612790612770565b5b8235905067ffffffffffffffff8111156127ae576127ad612774565b5b6020830191508360208202830111156127ca576127c9612778565b5b9250929050565b5f805f604084860312156127e8576127e7612413565b5b5f84013567ffffffffffffffff81111561280557612804612417565b5b6128118682870161277c565b9350935050602061282486828701612677565b9150509250925092565b5f806040838503121561284457612843612413565b5b5f61285185828601612461565b925050602061286285828601612461565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6128a060208361238d565b91506128ab8261286c565b602082019050919050565b5f6020820190508181035f8301526128cd81612894565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61295b60268361238d565b915061296682612901565b604082019050919050565b5f6020820190508181035f8301526129888161294f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6129e960248361238d565b91506129f48261298f565b604082019050919050565b5f6020820190508181035f830152612a16816129dd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612a7760228361238d565b9150612a8282612a1d565b604082019050919050565b5f6020820190508181035f830152612aa481612a6b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612b0560258361238d565b9150612b1082612aab565b604082019050919050565b5f6020820190508181035f830152612b3281612af9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612b9360238361238d565b9150612b9e82612b39565b604082019050919050565b5f6020820190508181035f830152612bc081612b87565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612c2160298361238d565b9150612c2c82612bc7565b604082019050919050565b5f6020820190508181035f830152612c4e81612c15565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e64205f8201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b5f612caf603f8361238d565b9150612cba82612c55565b604082019050919050565b5f6020820190508181035f830152612cdc81612ca3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d1a82612475565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d4c57612d4b612ce3565b5b600182019050919050565b5f612d6182612475565b9150612d6c83612475565b9250828203905081811115612d8457612d83612ce3565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f612de4602a8361238d565b9150612def82612d8a565b604082019050919050565b5f6020820190508181035f830152612e1181612dd8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050612e538161244b565b92915050565b5f60208284031215612e6e57612e6d612413565b5b5f612e7b84828501612e45565b91505092915050565b5f819050919050565b5f612ea7612ea2612e9d84612e84565b612519565b612475565b9050919050565b612eb781612e8d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612eef8161243a565b82525050565b5f612f008383612ee6565b60208301905092915050565b5f602082019050919050565b5f612f2282612ebd565b612f2c8185612ec7565b9350612f3783612ed7565b805f5b83811015612f67578151612f4e8882612ef5565b9750612f5983612f0c565b925050600181019050612f3a565b5085935050505092915050565b5f60a082019050612f875f83018861258d565b612f946020830187612eae565b8181036040830152612fa68186612f18565b9050612fb56060830185612639565b612fc2608083018461258d565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61300382612475565b915061300e83612475565b92508261301e5761301d612fcc565b5b828204905092915050565b5f61303382612475565b915061303e83612475565b925082820190508082111561305657613055612ce3565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613090601b8361238d565b915061309b8261305c565b602082019050919050565b5f6020820190508181035f8301526130bd81613084565b9050919050565b5f6130ce82612475565b91506130d983612475565b92508282026130e781612475565b915082820484148315176130fe576130fd612ce3565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61315f60218361238d565b915061316a82613105565b604082019050919050565b5f6020820190508181035f83015261318c81613153565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122096eda5c075070b25af21fd5f0d59c826729565b9788b4ae19b11d7ddbc02c48a64736f6c63430008190033

Deployed Bytecode Sourcemap

4147:13176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6430:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7355:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5410:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6707:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7556:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5610:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6616:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5458:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16947:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12360:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12658:196;;;;;;;;;;;;;:::i;:::-;;6810:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1599:148;;;;;;;;;;;;;:::i;:::-;;12278:76;;;;;;;;;;;;;:::i;:::-;;5248:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1385:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6521:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16733:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16347:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6956:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12453:197;;;;;;;;;;;;;:::i;:::-;;17060:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7163:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1755:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6430:83;6467:13;6500:5;;;;;;;;;;;;;;;;;6493:12;;6430:83;:::o;7355:193::-;7457:4;7479:39;7488:12;:10;:12::i;:::-;7502:7;7511:6;7479:8;:39::i;:::-;7536:4;7529:11;;7355:193;;;;:::o;5410:41::-;;;;;;;;;;;;;:::o;6707:95::-;6760:7;4691:15;6780:14;;6707:95;:::o;7556:446::-;7688:4;7705:36;7715:6;7723:9;7734:6;7705:9;:36::i;:::-;7752:220;7775:6;7796:12;:10;:12::i;:::-;7823:138;7879:6;7823:138;;;;;;;;;;;;;;;;;:11;:19;7835:6;7823:19;;;;;;;;;;;;;;;:33;7843:12;:10;:12::i;:::-;7823:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;7752:8;:220::i;:::-;7990:4;7983:11;;7556:446;;;;;:::o;5610:50::-;;;;:::o;6616:83::-;6657:5;4365:1;6675:16;;6616:83;:::o;5458:28::-;;;;;;;;;;;;;:::o;16947:101::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17028:12:::1;17014:11;;:26;;;;;;;;;;;;;;;;;;16947:101:::0;:::o;12360:85::-;12402:4;12426:11;;;;;;;;;;;12419:18;;12360:85;:::o;12658:196::-;12724:17;;;;;;;;;;;12708:33;;:12;:10;:12::i;:::-;:33;;;12700:42;;;;;;12753:26;12782:21;12753:50;;12814:32;12827:18;12814:12;:32::i;:::-;12689:165;12658:196::o;6810:138::-;6876:7;6903:37;6923:7;:16;6931:7;6923:16;;;;;;;;;;;;;;;;6903:19;:37::i;:::-;6896:44;;6810:138;;;:::o;1599:148::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1706:1:::1;1669:40;;1690:6;::::0;::::1;;;;;;;;1669:40;;;;;;;;;;;;1737:1;1720:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1599:148::o:0;12278:76::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12342:4:::1;12328:11;;:18;;;;;;;;;;;;;;;;;;12278:76::o:0;5248:42::-;;;;;;;;;;;;;;;;;:::o;1385:79::-;1423:7;1450:6;;;;;;;;;;;1443:13;;1385:79;:::o;6521:87::-;6560:13;6593:7;;;;;;;;;;;;;;;;;6586:14;;6521:87;:::o;16733:162::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16869:18:::1;16847:19;:40;;;;16733:162:::0;:::o;16347:334::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16541:13:::1;16524:14;:30;;;;16583:14;16565:15;:32;;;;16623:11;16608:12;:26;;;;16661:12;16645:13;:28;;;;16347:334:::0;;;;:::o;6956:199::-;7061:4;7083:42;7093:12;:10;:12::i;:::-;7107:9;7118:6;7083:9;:42::i;:::-;7143:4;7136:11;;6956:199;;;;:::o;12453:197::-;12519:17;;;;;;;;;;;12503:33;;:12;:10;:12::i;:::-;:33;;;12495:42;;;;;;12548:23;12574:24;12592:4;12574:9;:24::i;:::-;12548:50;;12609:33;12626:15;12609:16;:33::i;:::-;12484:166;12453:197::o;17060:260::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17203:9:::1;17198:115;17222:8;;:15;;17218:1;:19;17198:115;;;17293:8;17259:18;:31;17278:8;;17287:1;17278:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;17259:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;17239:3;;;;;;;17198:115;;;;17060:260:::0;;;:::o;7163:184::-;7280:7;7312:11;:18;7324:5;7312:18;;;;;;;;;;;;;;;:27;7331:7;7312:27;;;;;;;;;;;;;;;;7305:34;;7163:184;;;;:::o;1755:281::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1878:1:::1;1858:22;;:8;:22;;::::0;1836:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1991:8;1962:38;;1983:6;::::0;::::1;;;;;;;;1962:38;;;;;;;;;;;;2020:8;2011:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1755:281:::0;:::o;99:98::-;152:7;179:10;172:17;;99:98;:::o;8693:369::-;8837:1;8820:19;;:5;:19;;;8812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8918:1;8899:21;;:7;:21;;;8891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9000:6;8970:11;:18;8982:5;8970:18;;;;;;;;;;;;;;;:27;8989:7;8970:27;;;;;;;;;;;;;;;:36;;;;9038:7;9022:32;;9031:5;9022:32;;;9047:6;9022:32;;;;;;:::i;:::-;;;;;;;;8693:369;;;:::o;9070:2602::-;9208:1;9192:18;;:4;:18;;;9184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9285:1;9271:16;;:2;:16;;;9263:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9355:1;9346:6;:10;9338:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9427:7;:5;:7::i;:::-;9419:15;;:4;:15;;;;:32;;;;;9444:7;:5;:7::i;:::-;9438:13;;:2;:13;;;;9419:32;9415:1025;;;9506:11;;;;;;;;;;;9501:205;;9576:7;:5;:7::i;:::-;9568:15;;:4;:15;;;9538:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;9501:205;9766:28;9797:24;9815:4;9797:9;:24::i;:::-;9766:55;;9836:12;9875:19;;9851:20;:43;;9836:58;;9948:7;:35;;;;;9977:6;;;;;;;;;;9976:7;9948:35;:77;;;;;10012:13;;;;;;;;;;;10004:21;;:4;:21;;;;9948:77;:109;;;;;10046:11;;;;;;;;;;;9948:109;:155;;;;;10079:18;:24;10098:4;10079:24;;;;;;;;;;;;;;;;;;;;;;;;;10078:25;9948:155;:199;;;;;10125:18;:22;10144:2;10125:22;;;;;;;;;;;;;;;;;;;;;;;;;10124:23;9948:199;9926:503;;;10182:38;10199:20;10182:16;:38::i;:::-;10239:26;10268:21;10239:50;;10333:1;10312:18;:22;10308:106;;;10359:35;10372:21;10359:12;:35::i;:::-;10308:106;10163:266;9926:503;9453:987;;9415:1025;10452:12;10467:4;10452:19;;10530:18;:24;10549:4;10530:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;10558:18;:22;10577:2;10558:22;;;;;;;;;;;;;;;;;;;;;;;;;10530:50;10529:115;;;;10607:13;;;;;;;;;;;10599:21;;:4;:21;;;;:44;;;;;10630:13;;;;;;;;;;;10624:19;;:2;:19;;;;10599:44;10529:115;10511:1100;;;10681:5;10671:15;;10511:1100;;;10763:13;;;;;;;;;;;10755:21;;:4;:21;;;:55;;;;;10794:15;;;;;;;;;;;10780:30;;:2;:30;;;;10755:55;10751:398;;;10831:10;;:12;;;;;;;;;:::i;:::-;;;;;;10880:3;10866:10;;:17;10862:272;;10958:1;10946:9;:13;;;;10992:2;10982:7;:12;;;;10862:272;;;11055:14;;11043:9;:26;;;;11102:12;;11092:7;:22;;;;10862:272;10751:398;11208:13;;;;;;;;;;;11202:19;;:2;:19;;;:55;;;;;11241:15;;;;;;;;;;;11225:32;;:4;:32;;;;11202:55;11198:402;;;11278:11;;:13;;;;;;;;;:::i;:::-;;;;;;11329:3;11314:11;;:18;11310:275;;11407:1;11395:9;:13;;;;11441:2;11431:7;:12;;;;11310:275;;;11504:15;;11492:9;:27;;;;11552:13;;11542:7;:23;;;;11310:275;11198:402;10511:1100;11623:41;11638:4;11644:2;11648:6;11656:7;11623:14;:41::i;:::-;9173:2499;9070:2602;;;:::o;2398:224::-;2518:7;2551:1;2546;:6;;2554:12;2538:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2578:9;2594:1;2590;:5;;;;:::i;:::-;2578:17;;2613:1;2606:8;;;2398:224;;;;;:::o;12171:99::-;12228:17;;;;;;;;;;;:26;;:34;12255:6;12228:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12171:99;:::o;8010:323::-;8105:7;8163;;8152;:18;;8130:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;8251:19;8273:10;:8;:10::i;:::-;8251:32;;8301:24;8313:11;8301:7;:11;;:24;;;;:::i;:::-;8294:31;;;8010:323;;;:::o;11680:483::-;5765:4;5756:6;;:13;;;;;;;;;;;;;;;;;;11758:21:::1;11796:1;11782:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11758:40;;11827:4;11809;11814:1;11809:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;11853:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11843:4;11848:1;11843:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;11886:62;11903:4;11918:15;;;;;;;;;;;11936:11;11886:8;:62::i;:::-;11959:15;;;;;;;;;;;:66;;;12040:11;12066:1;12082:4;12109;12129:15;11959:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11747:416;5801:5:::0;5792:6;;:14;;;;;;;;;;;;;;;;;;11680:483;:::o;12862:282::-;13018:7;13013:28;;13027:14;:12;:14::i;:::-;13013:28;13052:44;13070:6;13078:9;13089:6;13052:17;:44::i;:::-;13112:7;13107:29;;13121:15;:13;:15::i;:::-;13107:29;12862:282;;;;:::o;15910:164::-;15952:7;15973:15;15990;16009:19;:17;:19::i;:::-;15972:56;;;;16046:20;16058:7;16046;:11;;:20;;;;:::i;:::-;16039:27;;;;15910:164;:::o;2884:132::-;2942:7;2969:39;2973:1;2976;2969:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2962:46;;2884:132;;;;:::o;8341:219::-;8401:1;8388:9;;:14;:30;;;;;8417:1;8406:7;;:12;8388:30;8420:7;8384:43;8459:9;;8439:17;:29;;;;8497:7;;8479:15;:25;;;;8529:1;8517:9;:13;;;;8551:1;8541:7;:11;;;;8341:219;:::o;13152:610::-;13299:15;13329:23;13367:12;13394:23;13432:12;13459:13;13486:19;13497:7;13486:10;:19::i;:::-;13284:221;;;;;;;;;;;;13534:28;13554:7;13534;:15;13542:6;13534:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;13516:7;:15;13524:6;13516:15;;;;;;;;;;;;;;;:46;;;;13594:39;13617:15;13594:7;:18;13602:9;13594:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;13573:7;:18;13581:9;13573:18;;;;;;;;;;;;;;;:60;;;;13644:16;13654:5;13644:9;:16::i;:::-;13671:23;13683:4;13689;13671:11;:23::i;:::-;13727:9;13710:44;;13719:6;13710:44;;;13738:15;13710:44;;;;;;:::i;:::-;;;;;;;;13273:489;;;;;;13152:610;;;:::o;8568:117::-;8624:17;;8612:9;:29;;;;8662:15;;8652:7;:25;;;;8568:117::o;16082:257::-;16133:7;16142;16162:15;16180:7;;16162:25;;16198:15;4691;16198:25;;16248:20;4691:15;16248:7;;:11;;:20;;;;:::i;:::-;16238:7;:30;16234:61;;;16278:7;;4691:15;16270:25;;;;;;;;16234:61;16314:7;16323;16306:25;;;;;;16082:257;;;:::o;3024:223::-;3144:7;3176:1;3172;:5;3179:12;3164:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3203:9;3219:1;3215;:5;;;;:::i;:::-;3203:17;;3238:1;3231:8;;;3024:223;;;;;:::o;14181:702::-;14281:7;14303;14325;14347;14369;14391;14427:23;14452:12;14466:13;14483:90;14509:7;14531:9;;14555:7;;14483:11;:90::i;:::-;14426:147;;;;;;14584:19;14606:10;:8;:10::i;:::-;14584:32;;14628:15;14645:23;14670:12;14686:109;14712:7;14734:4;14753:5;14773:11;14686;:109::i;:::-;14627:168;;;;;;14814:7;14823:15;14840:4;14846:15;14863:4;14869:5;14806:69;;;;;;;;;;;;;;;;;;;14181:702;;;;;;;:::o;2254:136::-;2312:7;2339:43;2343:1;2346;2339:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2332:50;;2254:136;;;;:::o;2067:179::-;2125:7;2145:9;2161:1;2157;:5;;;;:::i;:::-;2145:17;;2186:1;2181;:6;;2173:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:1;2230:8;;;2067:179;;;;:::o;13770:211::-;13823:19;13845:10;:8;:10::i;:::-;13823:32;;13866:13;13882:22;13892:11;13882:5;:9;;:22;;;;:::i;:::-;13866:38;;13940:33;13967:5;13940:7;:22;13956:4;13940:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;13915:7;:22;13931:4;13915:22;;;;;;;;;;;;;;;:58;;;;13812:169;;13770:211;:::o;13989:147::-;14067:17;14079:4;14067:7;;:11;;:17;;;;:::i;:::-;14057:7;:27;;;;14108:20;14123:4;14108:10;;:14;;:20;;;;:::i;:::-;14095:10;:33;;;;13989:147;;:::o;14891:469::-;15060:7;15082;15104;15139:12;15154:30;15180:3;15154:21;15166:8;15154:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;15139:45;;15195:13;15211:28;15235:3;15211:19;15223:6;15211:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;15195:44;;15250:23;15276:28;15298:5;15276:17;15288:4;15276:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;15250:54;;15323:15;15340:4;15346:5;15315:37;;;;;;;;;14891:469;;;;;;;:::o;15368:534::-;15562:7;15584;15606;15641:15;15659:24;15671:11;15659:7;:11;;:24;;;;:::i;:::-;15641:42;;15694:12;15709:21;15718:11;15709:4;:8;;:21;;;;:::i;:::-;15694:36;;15741:13;15757:22;15767:11;15757:5;:9;;:22;;;;:::i;:::-;15741:38;;15790:23;15816:28;15838:5;15816:17;15828:4;15816:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;15790:54;;15863:7;15872:15;15889:4;15855:39;;;;;;;;;;15368:534;;;;;;;;:::o;2630:246::-;2688:7;2717:1;2712;:6;2708:47;;2742:1;2735:8;;;;2708:47;2765:9;2781:1;2777;:5;;;;:::i;:::-;2765:17;;2810:1;2805;2801;:5;;;;:::i;:::-;:10;2793:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2867:1;2860:8;;;2630:246;;;;;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:60::-;3367:3;3388:5;3381:12;;3339:60;;;:::o;3405:142::-;3455:9;3488:53;3506:34;3515:24;3533:5;3515:24;:::i;:::-;3506:34;:::i;:::-;3488:53;:::i;:::-;3475:66;;3405:142;;;:::o;3553:126::-;3603:9;3636:37;3667:5;3636:37;:::i;:::-;3623:50;;3553:126;;;:::o;3685:152::-;3761:9;3794:37;3825:5;3794:37;:::i;:::-;3781:50;;3685:152;;;:::o;3843:183::-;3956:63;4013:5;3956:63;:::i;:::-;3951:3;3944:76;3843:183;;:::o;4032:274::-;4151:4;4189:2;4178:9;4174:18;4166:26;;4202:97;4296:1;4285:9;4281:17;4272:6;4202:97;:::i;:::-;4032:274;;;;:::o;4312:118::-;4399:24;4417:5;4399:24;:::i;:::-;4394:3;4387:37;4312:118;;:::o;4436:222::-;4529:4;4567:2;4556:9;4552:18;4544:26;;4580:71;4648:1;4637:9;4633:17;4624:6;4580:71;:::i;:::-;4436:222;;;;:::o;4664:619::-;4741:6;4749;4757;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;5059:2;5085:53;5130:7;5121:6;5110:9;5106:22;5085:53;:::i;:::-;5075:63;;5030:118;5187:2;5213:53;5258:7;5249:6;5238:9;5234:22;5213:53;:::i;:::-;5203:63;;5158:118;4664:619;;;;;:::o;5289:86::-;5324:7;5364:4;5357:5;5353:16;5342:27;;5289:86;;;:::o;5381:112::-;5464:22;5480:5;5464:22;:::i;:::-;5459:3;5452:35;5381:112;;:::o;5499:214::-;5588:4;5626:2;5615:9;5611:18;5603:26;;5639:67;5703:1;5692:9;5688:17;5679:6;5639:67;:::i;:::-;5499:214;;;;:::o;5719:118::-;5806:24;5824:5;5806:24;:::i;:::-;5801:3;5794:37;5719:118;;:::o;5843:222::-;5936:4;5974:2;5963:9;5959:18;5951:26;;5987:71;6055:1;6044:9;6040:17;6031:6;5987:71;:::i;:::-;5843:222;;;;:::o;6071:116::-;6141:21;6156:5;6141:21;:::i;:::-;6134:5;6131:32;6121:60;;6177:1;6174;6167:12;6121:60;6071:116;:::o;6193:133::-;6236:5;6274:6;6261:20;6252:29;;6290:30;6314:5;6290:30;:::i;:::-;6193:133;;;;:::o;6332:323::-;6388:6;6437:2;6425:9;6416:7;6412:23;6408:32;6405:119;;;6443:79;;:::i;:::-;6405:119;6563:1;6588:50;6630:7;6621:6;6610:9;6606:22;6588:50;:::i;:::-;6578:60;;6534:114;6332:323;;;;:::o;6661:329::-;6720:6;6769:2;6757:9;6748:7;6744:23;6740:32;6737:119;;;6775:79;;:::i;:::-;6737:119;6895:1;6920:53;6965:7;6956:6;6945:9;6941:22;6920:53;:::i;:::-;6910:63;;6866:117;6661:329;;;;:::o;6996:::-;7055:6;7104:2;7092:9;7083:7;7079:23;7075:32;7072:119;;;7110:79;;:::i;:::-;7072:119;7230:1;7255:53;7300:7;7291:6;7280:9;7276:22;7255:53;:::i;:::-;7245:63;;7201:117;6996:329;;;;:::o;7331:765::-;7417:6;7425;7433;7441;7490:3;7478:9;7469:7;7465:23;7461:33;7458:120;;;7497:79;;:::i;:::-;7458:120;7617:1;7642:53;7687:7;7678:6;7667:9;7663:22;7642:53;:::i;:::-;7632:63;;7588:117;7744:2;7770:53;7815:7;7806:6;7795:9;7791:22;7770:53;:::i;:::-;7760:63;;7715:118;7872:2;7898:53;7943:7;7934:6;7923:9;7919:22;7898:53;:::i;:::-;7888:63;;7843:118;8000:2;8026:53;8071:7;8062:6;8051:9;8047:22;8026:53;:::i;:::-;8016:63;;7971:118;7331:765;;;;;;;:::o;8102:117::-;8211:1;8208;8201:12;8225:117;8334:1;8331;8324:12;8348:117;8457:1;8454;8447:12;8488:568;8561:8;8571:6;8621:3;8614:4;8606:6;8602:17;8598:27;8588:122;;8629:79;;:::i;:::-;8588:122;8742:6;8729:20;8719:30;;8772:18;8764:6;8761:30;8758:117;;;8794:79;;:::i;:::-;8758:117;8908:4;8900:6;8896:17;8884:29;;8962:3;8954:4;8946:6;8942:17;8932:8;8928:32;8925:41;8922:128;;;8969:79;;:::i;:::-;8922:128;8488:568;;;;;:::o;9062:698::-;9154:6;9162;9170;9219:2;9207:9;9198:7;9194:23;9190:32;9187:119;;;9225:79;;:::i;:::-;9187:119;9373:1;9362:9;9358:17;9345:31;9403:18;9395:6;9392:30;9389:117;;;9425:79;;:::i;:::-;9389:117;9538:80;9610:7;9601:6;9590:9;9586:22;9538:80;:::i;:::-;9520:98;;;;9316:312;9667:2;9693:50;9735:7;9726:6;9715:9;9711:22;9693:50;:::i;:::-;9683:60;;9638:115;9062:698;;;;;:::o;9766:474::-;9834:6;9842;9891:2;9879:9;9870:7;9866:23;9862:32;9859:119;;;9897:79;;:::i;:::-;9859:119;10017:1;10042:53;10087:7;10078:6;10067:9;10063:22;10042:53;:::i;:::-;10032:63;;9988:117;10144:2;10170:53;10215:7;10206:6;10195:9;10191:22;10170:53;:::i;:::-;10160:63;;10115:118;9766:474;;;;;:::o;10246:182::-;10386:34;10382:1;10374:6;10370:14;10363:58;10246:182;:::o;10434:366::-;10576:3;10597:67;10661:2;10656:3;10597:67;:::i;:::-;10590:74;;10673:93;10762:3;10673:93;:::i;:::-;10791:2;10786:3;10782:12;10775:19;;10434:366;;;:::o;10806:419::-;10972:4;11010:2;10999:9;10995:18;10987:26;;11059:9;11053:4;11049:20;11045:1;11034:9;11030:17;11023:47;11087:131;11213:4;11087:131;:::i;:::-;11079:139;;10806:419;;;:::o;11231:180::-;11279:77;11276:1;11269:88;11376:4;11373:1;11366:15;11400:4;11397:1;11390:15;11417:225;11557:34;11553:1;11545:6;11541:14;11534:58;11626:8;11621:2;11613:6;11609:15;11602:33;11417:225;:::o;11648:366::-;11790:3;11811:67;11875:2;11870:3;11811:67;:::i;:::-;11804:74;;11887:93;11976:3;11887:93;:::i;:::-;12005:2;12000:3;11996:12;11989:19;;11648:366;;;:::o;12020:419::-;12186:4;12224:2;12213:9;12209:18;12201:26;;12273:9;12267:4;12263:20;12259:1;12248:9;12244:17;12237:47;12301:131;12427:4;12301:131;:::i;:::-;12293:139;;12020:419;;;:::o;12445:223::-;12585:34;12581:1;12573:6;12569:14;12562:58;12654:6;12649:2;12641:6;12637:15;12630:31;12445:223;:::o;12674:366::-;12816:3;12837:67;12901:2;12896:3;12837:67;:::i;:::-;12830:74;;12913:93;13002:3;12913:93;:::i;:::-;13031:2;13026:3;13022:12;13015:19;;12674:366;;;:::o;13046:419::-;13212:4;13250:2;13239:9;13235:18;13227:26;;13299:9;13293:4;13289:20;13285:1;13274:9;13270:17;13263:47;13327:131;13453:4;13327:131;:::i;:::-;13319:139;;13046:419;;;:::o;13471:221::-;13611:34;13607:1;13599:6;13595:14;13588:58;13680:4;13675:2;13667:6;13663:15;13656:29;13471:221;:::o;13698:366::-;13840:3;13861:67;13925:2;13920:3;13861:67;:::i;:::-;13854:74;;13937:93;14026:3;13937:93;:::i;:::-;14055:2;14050:3;14046:12;14039:19;;13698:366;;;:::o;14070:419::-;14236:4;14274:2;14263:9;14259:18;14251:26;;14323:9;14317:4;14313:20;14309:1;14298:9;14294:17;14287:47;14351:131;14477:4;14351:131;:::i;:::-;14343:139;;14070:419;;;:::o;14495:224::-;14635:34;14631:1;14623:6;14619:14;14612:58;14704:7;14699:2;14691:6;14687:15;14680:32;14495:224;:::o;14725:366::-;14867:3;14888:67;14952:2;14947:3;14888:67;:::i;:::-;14881:74;;14964:93;15053:3;14964:93;:::i;:::-;15082:2;15077:3;15073:12;15066:19;;14725:366;;;:::o;15097:419::-;15263:4;15301:2;15290:9;15286:18;15278:26;;15350:9;15344:4;15340:20;15336:1;15325:9;15321:17;15314:47;15378:131;15504:4;15378:131;:::i;:::-;15370:139;;15097:419;;;:::o;15522:222::-;15662:34;15658:1;15650:6;15646:14;15639:58;15731:5;15726:2;15718:6;15714:15;15707:30;15522:222;:::o;15750:366::-;15892:3;15913:67;15977:2;15972:3;15913:67;:::i;:::-;15906:74;;15989:93;16078:3;15989:93;:::i;:::-;16107:2;16102:3;16098:12;16091:19;;15750:366;;;:::o;16122:419::-;16288:4;16326:2;16315:9;16311:18;16303:26;;16375:9;16369:4;16365:20;16361:1;16350:9;16346:17;16339:47;16403:131;16529:4;16403:131;:::i;:::-;16395:139;;16122:419;;;:::o;16547:228::-;16687:34;16683:1;16675:6;16671:14;16664:58;16756:11;16751:2;16743:6;16739:15;16732:36;16547:228;:::o;16781:366::-;16923:3;16944:67;17008:2;17003:3;16944:67;:::i;:::-;16937:74;;17020:93;17109:3;17020:93;:::i;:::-;17138:2;17133:3;17129:12;17122:19;;16781:366;;;:::o;17153:419::-;17319:4;17357:2;17346:9;17342:18;17334:26;;17406:9;17400:4;17396:20;17392:1;17381:9;17377:17;17370:47;17434:131;17560:4;17434:131;:::i;:::-;17426:139;;17153:419;;;:::o;17578:250::-;17718:34;17714:1;17706:6;17702:14;17695:58;17787:33;17782:2;17774:6;17770:15;17763:58;17578:250;:::o;17834:366::-;17976:3;17997:67;18061:2;18056:3;17997:67;:::i;:::-;17990:74;;18073:93;18162:3;18073:93;:::i;:::-;18191:2;18186:3;18182:12;18175:19;;17834:366;;;:::o;18206:419::-;18372:4;18410:2;18399:9;18395:18;18387:26;;18459:9;18453:4;18449:20;18445:1;18434:9;18430:17;18423:47;18487:131;18613:4;18487:131;:::i;:::-;18479:139;;18206:419;;;:::o;18631:180::-;18679:77;18676:1;18669:88;18776:4;18773:1;18766:15;18800:4;18797:1;18790:15;18817:233;18856:3;18879:24;18897:5;18879:24;:::i;:::-;18870:33;;18925:66;18918:5;18915:77;18912:103;;18995:18;;:::i;:::-;18912:103;19042:1;19035:5;19031:13;19024:20;;18817:233;;;:::o;19056:194::-;19096:4;19116:20;19134:1;19116:20;:::i;:::-;19111:25;;19150:20;19168:1;19150:20;:::i;:::-;19145:25;;19194:1;19191;19187:9;19179:17;;19218:1;19212:4;19209:11;19206:37;;;19223:18;;:::i;:::-;19206:37;19056:194;;;;:::o;19256:229::-;19396:34;19392:1;19384:6;19380:14;19373:58;19465:12;19460:2;19452:6;19448:15;19441:37;19256:229;:::o;19491:366::-;19633:3;19654:67;19718:2;19713:3;19654:67;:::i;:::-;19647:74;;19730:93;19819:3;19730:93;:::i;:::-;19848:2;19843:3;19839:12;19832:19;;19491:366;;;:::o;19863:419::-;20029:4;20067:2;20056:9;20052:18;20044:26;;20116:9;20110:4;20106:20;20102:1;20091:9;20087:17;20080:47;20144:131;20270:4;20144:131;:::i;:::-;20136:139;;19863:419;;;:::o;20288:180::-;20336:77;20333:1;20326:88;20433:4;20430:1;20423:15;20457:4;20454:1;20447:15;20474:143;20531:5;20562:6;20556:13;20547:22;;20578:33;20605:5;20578:33;:::i;:::-;20474:143;;;;:::o;20623:351::-;20693:6;20742:2;20730:9;20721:7;20717:23;20713:32;20710:119;;;20748:79;;:::i;:::-;20710:119;20868:1;20893:64;20949:7;20940:6;20929:9;20925:22;20893:64;:::i;:::-;20883:74;;20839:128;20623:351;;;;:::o;20980:85::-;21025:7;21054:5;21043:16;;20980:85;;;:::o;21071:158::-;21129:9;21162:61;21180:42;21189:32;21215:5;21189:32;:::i;:::-;21180:42;:::i;:::-;21162:61;:::i;:::-;21149:74;;21071:158;;;:::o;21235:147::-;21330:45;21369:5;21330:45;:::i;:::-;21325:3;21318:58;21235:147;;:::o;21388:114::-;21455:6;21489:5;21483:12;21473:22;;21388:114;;;:::o;21508:184::-;21607:11;21641:6;21636:3;21629:19;21681:4;21676:3;21672:14;21657:29;;21508:184;;;;:::o;21698:132::-;21765:4;21788:3;21780:11;;21818:4;21813:3;21809:14;21801:22;;21698:132;;;:::o;21836:108::-;21913:24;21931:5;21913:24;:::i;:::-;21908:3;21901:37;21836:108;;:::o;21950:179::-;22019:10;22040:46;22082:3;22074:6;22040:46;:::i;:::-;22118:4;22113:3;22109:14;22095:28;;21950:179;;;;:::o;22135:113::-;22205:4;22237;22232:3;22228:14;22220:22;;22135:113;;;:::o;22284:732::-;22403:3;22432:54;22480:5;22432:54;:::i;:::-;22502:86;22581:6;22576:3;22502:86;:::i;:::-;22495:93;;22612:56;22662:5;22612:56;:::i;:::-;22691:7;22722:1;22707:284;22732:6;22729:1;22726:13;22707:284;;;22808:6;22802:13;22835:63;22894:3;22879:13;22835:63;:::i;:::-;22828:70;;22921:60;22974:6;22921:60;:::i;:::-;22911:70;;22767:224;22754:1;22751;22747:9;22742:14;;22707:284;;;22711:14;23007:3;23000:10;;22408:608;;;22284:732;;;;:::o;23022:831::-;23285:4;23323:3;23312:9;23308:19;23300:27;;23337:71;23405:1;23394:9;23390:17;23381:6;23337:71;:::i;:::-;23418:80;23494:2;23483:9;23479:18;23470:6;23418:80;:::i;:::-;23545:9;23539:4;23535:20;23530:2;23519:9;23515:18;23508:48;23573:108;23676:4;23667:6;23573:108;:::i;:::-;23565:116;;23691:72;23759:2;23748:9;23744:18;23735:6;23691:72;:::i;:::-;23773:73;23841:3;23830:9;23826:19;23817:6;23773:73;:::i;:::-;23022:831;;;;;;;;:::o;23859:180::-;23907:77;23904:1;23897:88;24004:4;24001:1;23994:15;24028:4;24025:1;24018:15;24045:185;24085:1;24102:20;24120:1;24102:20;:::i;:::-;24097:25;;24136:20;24154:1;24136:20;:::i;:::-;24131:25;;24175:1;24165:35;;24180:18;;:::i;:::-;24165:35;24222:1;24219;24215:9;24210:14;;24045:185;;;;:::o;24236:191::-;24276:3;24295:20;24313:1;24295:20;:::i;:::-;24290:25;;24329:20;24347:1;24329:20;:::i;:::-;24324:25;;24372:1;24369;24365:9;24358:16;;24393:3;24390:1;24387:10;24384:36;;;24400:18;;:::i;:::-;24384:36;24236:191;;;;:::o;24433:177::-;24573:29;24569:1;24561:6;24557:14;24550:53;24433:177;:::o;24616:366::-;24758:3;24779:67;24843:2;24838:3;24779:67;:::i;:::-;24772:74;;24855:93;24944:3;24855:93;:::i;:::-;24973:2;24968:3;24964:12;24957:19;;24616:366;;;:::o;24988:419::-;25154:4;25192:2;25181:9;25177:18;25169:26;;25241:9;25235:4;25231:20;25227:1;25216:9;25212:17;25205:47;25269:131;25395:4;25269:131;:::i;:::-;25261:139;;24988:419;;;:::o;25413:410::-;25453:7;25476:20;25494:1;25476:20;:::i;:::-;25471:25;;25510:20;25528:1;25510:20;:::i;:::-;25505:25;;25565:1;25562;25558:9;25587:30;25605:11;25587:30;:::i;:::-;25576:41;;25766:1;25757:7;25753:15;25750:1;25747:22;25727:1;25720:9;25700:83;25677:139;;25796:18;;:::i;:::-;25677:139;25461:362;25413:410;;;;:::o;25829:220::-;25969:34;25965:1;25957:6;25953:14;25946:58;26038:3;26033:2;26025:6;26021:15;26014:28;25829:220;:::o;26055:366::-;26197:3;26218:67;26282:2;26277:3;26218:67;:::i;:::-;26211:74;;26294:93;26383:3;26294:93;:::i;:::-;26412:2;26407:3;26403:12;26396:19;;26055:366;;;:::o;26427:419::-;26593:4;26631:2;26620:9;26616:18;26608:26;;26680:9;26674:4;26670:20;26666:1;26655:9;26651:17;26644:47;26708:131;26834:4;26708:131;:::i;:::-;26700:139;;26427:419;;;:::o

Swarm Source

ipfs://96eda5c075070b25af21fd5f0d59c826729565b9788b4ae19b11d7ddbc02c48a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.