ETH Price: $3,422.74 (+3.26%)

Token

WAGMI GAMES (WAGMIGAMES)
 

Overview

Max Total Supply

2,200,000,000,000 WAGMIGAMES

Holders

12,165 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (-5.98%)

Onchain Market Cap

$31,672,213.88

Circulating Supply Market Cap

$25,976,321.32

Other Info

Token Contract (WITH 18 Decimals)

Balance
98,101,817.670509044319965985 WAGMIGAMES

Value
$1,412.32 ( ~0.412628809449228 Eth) [0.0045%]
0x8A0f35F1a4E20456F6b438ff3687A598baF603C6
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

WAGMI Games is a pioneering Web3 transmedia entertainment franchise that aims to achieve mass adoption by seamlessly integrating mobile gaming, deep lore, and immersive storytelling.

Market

Volume (24H):$833,129.37
Market Capitalization:$25,976,321.32
Circulating Supply:1,804,354,666,195.00 WAGMIGAMES
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WAGMI

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-02
*/

/**
 * SPDX-License-Identifier: MIT
 */ 
 
// WAGMI GAMES - WE ARE ALL GOING TO MAKE IT - https://www.wagmigame.io/

pragma solidity ^0.8.6;

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

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

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        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) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

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

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }


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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }


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

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {return msg.sender;}
    function _msgData() internal view virtual returns (bytes calldata) {this; return msg.data;}
}

library Address {
    function isContract(address account) internal view returns (bool) { 
        uint256 size; assembly { size := extcodesize(account) } return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");(bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
        
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
        
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
        
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) { return returndata; } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {revert(errorMessage);}
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface IPancakeV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IPancakeV2Router {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

    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 WAGMI is IERC20Metadata, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;
    
    address internal deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    address public marketingWallet = 0x10b33D3CbcB6f674fc626bfd83a701D2422352E2;
    address public devWallet = 0x8Da67EF3CA0D9a2e28EB32DDd323295A64d20AD3;
    address public teamWallet = 0xf96cb8E903AE8AABf92c5668871e5ACE37316c64;
    
    string constant _name = "WAGMI GAMES";
    string constant _symbol = "WAGMIGAMES";
    uint8 constant _decimals = 18;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 internal constant _totalSupply = 2_200_000_000_000 * (10**18);
    uint256 internal _reflectedSupply = (MAX - (MAX % _totalSupply));
    
    uint256 public collectedFeeTotal;
  
    uint256 public maxTxAmount = _totalSupply / 1000; // 0.1% of the total supply
    uint256 public maxWalletBalance = _totalSupply / 50; // 2% of the total supply
    
    bool public takeFeeEnabled = true;
    bool public tradingIsEnabled = true;
    bool public isInPresale = false;
    
    bool private swapping;
    bool public swapEnabled = true;
    uint256 public swapTokensAtAmount = 100_000_000 * (10**18);

    bool public antiBotEnabled = false;
    uint256 public antiBotFee = 990; // 99%
    uint256 public _startTimeForSwap;
    
    uint256 private constant FEES_DIVISOR = 10**3;
    
    uint256 public rfiFee = 10; // 1%
    uint256 public marketingFee = 30; // 3%
    uint256 public devFee = 20; // 2%
    uint256 public teamFee = 25; // 2.5%
    uint256 public lpFee = 15; // 1.5%
    uint256 private totalFee;
    
    // Total = 100% (1000)
    uint256 public marketingPortionOfSwap = 500; // 50%
    uint256 public devPortionOfSwap = 200; // 20%
    uint256 public teamPortionOfSwap = 150; // 15%
    uint256 public lpPortionOfSwap = 150; // 15%
    
    IPancakeV2Router public router;
    address public pair;
    
    
    mapping (address => uint256) internal _reflectedBalances;
    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowances;

    mapping(address => bool) public _isBlacklisted;
    
    mapping (address => bool) internal _isExcludedFromFee;
    mapping (address => bool) internal _isExcludedFromRewards;
    address[] private _excluded;
    
    event UpdatePancakeswapRouter(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    
    event MarketingWalletUpdated(address indexed newMarketingWallet, address indexed oldMarketingWallet);
    event DevWalletUpdated(address indexed newDevWallet, address indexed oldDevWallet);
    event TeamWalletUpdated(address indexed newTeamWallet, address indexed oldTeamWallet);
    
    event LiquidityAdded(uint256 tokenAmountSent, uint256 ethAmountSent, uint256 liquidity);
    
    event SwapTokensForETH(uint256 amountIn, address[] path);

    modifier zeroAddressCheck(address _theAddress) {
        require(_theAddress != address(0), "Address cannot be the zero address");
        _;
    }
    
    constructor () {
        _reflectedBalances[owner()] = _reflectedSupply;
        
        IPancakeV2Router _newPancakeRouter = IPancakeV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IPancakeV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        router = _newPancakeRouter;

        // set fees
        totalFee = rfiFee.add(marketingFee).add(devFee).add(teamFee).add(lpFee);
        
        // exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        // exclude the owner and this contract from rewards
        _exclude(owner());
        _exclude(address(this));
        
        // exclude the pair address from rewards - we don't want to redistribute
        _exclude(pair);
        _exclude(deadAddress);
        
        _approve(owner(), address(router), ~uint256(0));
        
        emit Transfer(address(0), owner(), _totalSupply);
    }
    
    receive() external payable { }
    
    function name() external pure override returns (string memory) {
        return _name;
    }

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

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

    function totalSupply() external pure override returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view override returns (uint256){
        if (_isExcludedFromRewards[account]) return _balances[account];
        return tokenFromReflection(_reflectedBalances[account]);
        }
        
    function transfer(address recipient, uint256 amount) external override returns (bool){
        _transfer(_msgSender(), recipient, amount);
        return true;
        }
        
    function allowance(address owner, address spender) external view override returns (uint256){
        return _allowances[owner][spender];
        }
    
    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
        }
        
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool){
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
        }
        
    function burn(uint256 amount) external nonReentrant {

        address sender = _msgSender();
        require(sender != address(0), "ERC20: burn from the zero address");
        require(sender != address(deadAddress), "ERC20: burn from the burn address");

        uint256 balance = balanceOf(sender);
        require(balance >= amount, "ERC20: burn amount exceeds balance");

        uint256 reflectedAmount = amount.mul(_getCurrentRate());

        // remove the amount from the sender's balance first
        _reflectedBalances[sender] = _reflectedBalances[sender].sub(reflectedAmount);
        if (_isExcludedFromRewards[sender])
            _balances[sender] = _balances[sender].sub(amount);

        _burnTokens( sender, amount, reflectedAmount );
    }
    
    /**
     * @dev "Soft" burns the specified amount of tokens by sending them 
     * to the burn address
     */
    function _burnTokens(address sender, uint256 tBurn, uint256 rBurn) internal {

        /**
         * @dev Do not reduce _totalSupply and/or _reflectedSupply. (soft) burning by sending
         * tokens to the burn address (which should be excluded from rewards) is sufficient
         * in RFI
         */ 
        _reflectedBalances[deadAddress] = _reflectedBalances[deadAddress].add(rBurn);
        if (_isExcludedFromRewards[deadAddress])
            _balances[deadAddress] = _balances[deadAddress].add(tBurn);

        /**
         * @dev Emit the event so that the burn address balance is updated (on bscscan)
         */
        emit Transfer(sender, deadAddress, tBurn);
    }
    
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "BaseRfiToken: approve from the zero address");
        require(spender != address(0), "BaseRfiToken: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    
     /**
     * @dev Calculates and returns the reflected amount for the given amount with or without 
     * the transfer fees (deductTransferFee true/false)
     */
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
        require(tAmount <= _totalSupply, "Amount must be less than supply");
        uint256 feesSum;
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount,0);
            return rAmount;
        } else {
            feesSum = totalFee;
            (,uint256 rTransferAmount,,,) = _getValues(tAmount, feesSum);
            return rTransferAmount;
        }
    }

    /**
     * @dev Calculates and returns the amount of tokens corresponding to the given reflected amount.
     */
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _reflectedSupply, "Amount must be less than total reflections");
        uint256 currentRate = _getCurrentRate();
        return rAmount.div(currentRate);
    }
    
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcludedFromRewards[account], "Account is not included");
        _exclude(account);
    }
    
    function _exclude(address account) private {
        if(_reflectedBalances[account] > 0) {
            _balances[account] = tokenFromReflection(_reflectedBalances[account]);
        }
        _isExcludedFromRewards[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcludedFromRewards[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _balances[account] = 0;
                _isExcludedFromRewards[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function setExcludedFromFee(address account, bool value) external onlyOwner { 
        _isExcludedFromFee[account] = value; 
    }

    function _getValues(uint256 tAmount, uint256 feesSum) internal view returns (uint256, uint256, uint256, uint256, uint256) {
        
        uint256 tTotalFees = tAmount.mul(feesSum).div(FEES_DIVISOR);
        uint256 tTransferAmount = tAmount.sub(tTotalFees);
        uint256 currentRate = _getCurrentRate();
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTotalFees = tTotalFees.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rTotalFees);
        
        return (rAmount, rTransferAmount, tAmount, tTransferAmount, currentRate);
    }
    
    function _getCurrentRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    
    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _reflectedSupply;
        uint256 tSupply = _totalSupply;

        /**
         * The code below removes balances of addresses excluded from rewards from
         * rSupply and tSupply, which effectively increases the % of transaction fees
         * delivered to non-excluded holders
         */    
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_reflectedBalances[_excluded[i]] > rSupply || _balances[_excluded[i]] > tSupply)
            return (_reflectedSupply, _totalSupply);
            rSupply = rSupply.sub(_reflectedBalances[_excluded[i]]);
            tSupply = tSupply.sub(_balances[_excluded[i]]);
        }
        if (tSupply == 0 || rSupply < _reflectedSupply.div(_totalSupply)) return (_reflectedSupply, _totalSupply);
        return (rSupply, tSupply);
    }
    
    
    /**
     * @dev Redistributes the specified amount among the current holders via the reflect.finance
     * algorithm, i.e. by updating the _reflectedSupply (_rSupply) which ultimately adjusts the
     * current rate used by `tokenFromReflection` and, in turn, the value returns from `balanceOf`. 
     * 
     */
    function _redistribute(uint256 amount, uint256 currentRate, uint256 fee) private {
        uint256 tFee = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rFee = tFee.mul(currentRate);

        _reflectedSupply = _reflectedSupply.sub(rFee);
        
        collectedFeeTotal = collectedFeeTotal.add(tFee);
    }
    
    function _burn(uint256 amount, uint256 currentRate, uint256 fee) private {
        uint256 tBurn = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rBurn = tBurn.mul(currentRate);

        _burnTokens(address(this), tBurn, rBurn);
        
        collectedFeeTotal = collectedFeeTotal.add(tBurn);
    }
    
     function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcludedFromRewards[account];
    }
    
    function isExcludedFromFee(address account) public view returns(bool) { 
        return _isExcludedFromFee[account]; 
    }
    

    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled  = _enabled;
    }
    
    function updateSwapTokensAt(uint256 _swaptokens) external onlyOwner {
        swapTokensAtAmount = _swaptokens * (10**18);
    }
    
    function updateWalletMax(uint256 _walletMax) external onlyOwner {
        maxWalletBalance = _walletMax * (10**18);
    }
    
    function updateTransactionMax(uint256 _txMax) external onlyOwner {
        maxTxAmount = _txMax * (10**18);
    }

    function updateFees(uint256 _rfi, uint256 _marketing, uint256 _dev, uint256 _team, uint256 _lp) external onlyOwner {
       totalFee = _rfi.add(_marketing).add(_dev).add(_team).add(_lp); 
       require(totalFee <= 100, "Total Fees cannot be greater than 10% (100)");

       rfiFee = _rfi;
       marketingFee = _marketing;
       devFee = _dev;
       teamFee = _team;
       lpFee = _lp;
    }

   
    function updateMarketingWallet(address newWallet) external onlyOwner zeroAddressCheck(newWallet) {
        require(newWallet != marketingWallet, "The Marketing wallet is already this address");
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        
        marketingWallet = newWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner zeroAddressCheck(newWallet) {
        require(newWallet != devWallet, "The Dev wallet is already this address");
        emit DevWalletUpdated(newWallet, devWallet);
        
        devWallet = newWallet;
    }
    
    function updateTeamWallet(address newWallet) external onlyOwner zeroAddressCheck(newWallet) {
        require(newWallet != teamWallet, "The Team wallet is already this address");
        emit TeamWalletUpdated(newWallet, teamWallet);
        
        teamWallet = newWallet;
    }
    
    function updatePortionsOfSwap(uint256 marketingPortion, uint256  devPortion, uint256 lpPortion, uint256 teamPortion) 
    external onlyOwner {
        
        uint256 totalPortion = marketingPortion.add(devPortion).add(lpPortion).add(teamPortion);
        require(totalPortion == 1000, "Total must be equal to 1000 (100%)");
        
        marketingPortionOfSwap = marketingPortion;
        devPortionOfSwap = devPortion;
        lpPortionOfSwap = lpPortion;
        teamPortionOfSwap = teamPortion;
    }
    
    function updateTradingIsEnabled(bool tradingStatus) external onlyOwner() {
        tradingIsEnabled = tradingStatus;
    }
    
    function updateRouterAddress(address newAddress) external onlyOwner {
        require(newAddress != address(router), "The router already has that address");
        emit UpdatePancakeswapRouter(newAddress, address(router));
        
        router = IPancakeV2Router(newAddress);   
    }

    function toggleAntiBot(bool toggleStatus) external onlyOwner() {
        antiBotEnabled = toggleStatus;
        if(antiBotEnabled){
            _startTimeForSwap = block.timestamp + 60;    
        }    
    }
    
    function _takeFee(uint256 amount, uint256 currentRate, uint256 fee, address recipient) private {
        uint256 tAmount = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rAmount = tAmount.mul(currentRate);

        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rAmount);
        if(_isExcludedFromRewards[recipient])
            _balances[recipient] = _balances[recipient].add(tAmount);

        collectedFeeTotal = collectedFeeTotal.add(tAmount);
    }
    
    function _transferTokens(address sender, address recipient, uint256 amount, bool takeFee) private {
        
        uint256 sumOfFees = totalFee;

        // antibot enabled
        sumOfFees = antiBotEnabled && block.timestamp <= _startTimeForSwap ? antiBotFee : sumOfFees;

        // transfer between wallets
        if(sender != pair && recipient != pair) {
            sumOfFees = 0;
        }
        
        if ( !takeFee ){ sumOfFees = 0; }
        
        processReflectedBal(sender, recipient, amount, sumOfFees);
       
    }
    
    function processReflectedBal (address sender, address recipient, uint256 amount, uint256 sumOfFees) private {
        
        (uint256 rAmount, uint256 rTransferAmount, uint256 tAmount, 
        uint256 tTransferAmount, uint256 currentRate ) = _getValues(amount, sumOfFees);
         
        theReflection(sender, recipient, rAmount, rTransferAmount, tAmount, tTransferAmount); 
        
        _takeFees(amount, currentRate, sumOfFees);
        
        emit Transfer(sender, recipient, tTransferAmount);    
    }
    
    function theReflection(address sender, address recipient, uint256 rAmount, uint256 rTransferAmount, uint256 tAmount, 
        uint256 tTransferAmount) private {
            
        _reflectedBalances[sender] = _reflectedBalances[sender].sub(rAmount);
        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rTransferAmount);
        
        /**
         * Update the true/nominal balances for excluded accounts
         */        
        if (_isExcludedFromRewards[sender]) { _balances[sender] = _balances[sender].sub(tAmount); }
        if (_isExcludedFromRewards[recipient] ) { _balances[recipient] = _balances[recipient].add(tTransferAmount); }
    }
    
    
    function _takeFees(uint256 amount, uint256 currentRate, uint256 sumOfFees) private {
        if ( sumOfFees > 0 && !isInPresale ){
            _redistribute( amount, currentRate, rfiFee );  // redistribute to holders
            
            uint256 otherFees = sumOfFees.sub(rfiFee);
            _takeFee( amount, currentRate, otherFees, address(this));

        }
    }
    
    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "Token: transfer from the zero address");
        require(recipient != address(0), "Token: transfer to the zero address");
        require(sender != address(deadAddress), "Token: transfer from the burn address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        require(tradingIsEnabled, "This account cannot send tokens until trading is enabled");

        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "Blacklisted address");
        
        if (
            sender != address(router) && //router -> pair is removing liquidity which shouldn't have max
            !_isExcludedFromFee[recipient] && //no max for those excluded from fees
            !_isExcludedFromFee[sender] 
        ) {
            require(amount <= maxTxAmount, "Transfer amount exceeds the Max Transaction Amount.");
            
        }
        
        if ( maxWalletBalance > 0 && !_isExcludedFromFee[recipient] && !_isExcludedFromFee[sender] && recipient != address(pair) ) {
                uint256 recipientBalance = balanceOf(recipient);
                require(recipientBalance + amount <= maxWalletBalance, "New balance would exceed the maxWalletBalance");
            }
            
         // indicates whether or not fee should be deducted from the transfer
        bool _isTakeFee = takeFeeEnabled;
        if ( isInPresale ){ _isTakeFee = false; }
        
         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { 
            _isTakeFee = false; 
        }
        
        _beforeTokenTransfer(recipient);
        _transferTokens(sender, recipient, amount, _isTakeFee);
        
    }
    
    function _beforeTokenTransfer(address recipient) private {
            
        if ( !isInPresale ){
            uint256 contractTokenBalance = balanceOf(address(this));
            // swap
            bool canSwap = contractTokenBalance >= swapTokensAtAmount;
            
            if (!swapping && canSwap && swapEnabled && recipient == pair) {
                swapping = true;
                
                swapBack();
                
                swapping = false;
            }
            
        }
    }
    
    function swapBack() private nonReentrant {
        uint256 splitLiquidityPortion = lpPortionOfSwap.div(2);
        uint256 amountToLiquify = balanceOf(address(this)).mul(splitLiquidityPortion).div(FEES_DIVISOR);
        uint256 amountToSwap = balanceOf(address(this)).sub(amountToLiquify);

        uint256 balanceBefore = address(this).balance;
        
        swapTokensForETH(amountToSwap);

        uint256 amountBNB = address(this).balance.sub(balanceBefore);
        
        uint256 amountBNBMarketing = amountBNB.mul(marketingPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBDev = amountBNB.mul(devPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBTeam = amountBNB.mul(teamPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBLiquidity = amountBNB.mul(splitLiquidityPortion).div(FEES_DIVISOR);
        
          //Send to addresses
        transferToAddress(payable(marketingWallet), amountBNBMarketing);
        transferToAddress(payable(devWallet), amountBNBDev);
        transferToAddress(payable(teamWallet), amountBNBTeam);
        
        // add liquidity
        _addLiquidity(amountToLiquify, amountBNBLiquidity);
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

        // add the liquidity
        (uint256 tokenAmountSent, uint256 ethAmountSent, uint256 liquidity) = router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );

        emit LiquidityAdded(tokenAmountSent, ethAmountSent, liquidity);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function transferToAddress(address payable recipient, uint256 amount) private {
        require(recipient != address(0), "Cannot transfer the ETH to a zero address");
        recipient.transfer(amount);
    }
    
    function TransferETH(address payable recipient, uint256 amount) external onlyOwner {
        require(recipient != address(0), "Cannot withdraw the ETH balance to a zero address");
        recipient.transfer(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":true,"internalType":"address","name":"newDevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newTeamWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldTeamWallet","type":"address"}],"name":"TeamWalletUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdatePancakeswapRouter","type":"event"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startTimeForSwap","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":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotFee","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectedFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devPortionOfSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPortionOfSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingPortionOfSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rfiFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IPancakeV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"takeFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamPortionOfSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"toggleStatus","type":"bool"}],"name":"toggleAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingIsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_lp","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingPortion","type":"uint256"},{"internalType":"uint256","name":"devPortion","type":"uint256"},{"internalType":"uint256","name":"lpPortion","type":"uint256"},{"internalType":"uint256","name":"teamPortion","type":"uint256"}],"name":"updatePortionsOfSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swaptokens","type":"uint256"}],"name":"updateSwapTokensAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"tradingStatus","type":"bool"}],"name":"updateTradingIsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txMax","type":"uint256"}],"name":"updateTransactionMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletMax","type":"uint256"}],"name":"updateWalletMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811661dead179091556003805482167310b33d3cbcb6f674fc626bfd83a701d2422352e2179055600480548216738da67ef3ca0d9a2e28eb32ddd323295a64d20ad31790556005805490911673f96cb8e903ae8aabf92c5668871e5ace37316c64179055620000916c1bc49558fd67ce0b69c000000060001962000b82565b6200009f9060001962000b4a565b600655620000bd6103e86c1bc49558fd67ce0b69c000000062000b33565b600855620000da60326c1bc49558fd67ce0b69c000000062000b33565b600955600a805464ff00ffffff19166401000001011781556a52b7d2dcc80cd2e4000000600b55600c805460ff191690556103de600d55600f908155601e601055601460115560196012556013556101f460155560c8601655609660178190556018553480156200014a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600654601b6000620001aa6000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022157600080fd5b505afa15801562000236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025c919062000aed565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a557600080fd5b505afa158015620002ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e0919062000aed565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032957600080fd5b505af11580156200033e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000364919062000aed565b601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055601354601254601154601054600f54620003d99493620003c5939092849283916200050f602090811b62001d0717901c565b6200050f60201b62001d071790919060201c565b6014556001601f6000620003f56000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601f909252902080549091166001179055620004526200044c6000546001600160a01b031690565b6200057d565b6200045d306200057d565b601a5462000474906001600160a01b03166200057d565b6002546200048b906001600160a01b03166200057d565b620004b7620004a26000546001600160a01b031690565b6019546001600160a01b03166000196200063f565b600080546040516c1bc49558fd67ce0b69c000000081526001600160a01b0390911691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000bdb565b6000806200051e838562000b18565b905083811015620005765760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b9392505050565b6001600160a01b0381166000908152601b602052604090205415620005da576001600160a01b0381166000908152601b6020526040902054620005c09062000776565b6001600160a01b0382166000908152601c60205260409020555b6001600160a01b031660008181526020805260408120805460ff191660019081179091556021805491820181559091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319169091179055565b6001600160a01b038316620006ab5760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b60648201526084016200056d565b6001600160a01b038216620007155760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b60648201526084016200056d565b6001600160a01b038381166000818152601d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000600654821115620007df5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016200056d565b6000620007eb62000807565b90506200057681846200083a60201b62001d661790919060201c565b600080806200081562000899565b915091506200083381836200083a60201b62001d661790919060201c565b9250505090565b60008082116200088d5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016200056d565b62000576828462000b33565b60065460009081906c1bc49558fd67ce0b69c0000000825b60215481101562000a2e5782601b600060218481548110620008d757620008d762000bc5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000946575081601c6000602184815481106200091f576200091f62000bc5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000967575050600654936c1bc49558fd67ce0b69c00000009350915050565b620009be601b60006021848154811062000985576200098562000bc5565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054859162001dc162000a8d821b17901c565b925062000a17601c600060218481548110620009de57620009de62000bc5565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054849162001dc162000a8d821b17901c565b91508062000a258162000b64565b915050620008b1565b5080158062000a64575062000a616c1bc49558fd67ce0b69c00000006006546200083a60201b62001d661790919060201c565b82105b1562000a84575050600654926c1bc49558fd67ce0b69c000000092509050565b90939092509050565b60008282111562000ae15760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016200056d565b62000576828462000b4a565b60006020828403121562000b0057600080fd5b81516001600160a01b03811681146200057657600080fd5b6000821982111562000b2e5762000b2e62000b99565b500190565b60008262000b455762000b4562000baf565b500490565b60008282101562000b5f5762000b5f62000b99565b500390565b600060001982141562000b7b5762000b7b62000b99565b5060010190565b60008262000b945762000b9462000baf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6136958062000beb6000396000f3fe6080604052600436106103b05760003560e01c806370a08231116101e7578063a9059cbb1161010d578063d8c6404b116100a0578063f2fde38b1161006f578063f2fde38b14610b28578063f887ea4014610b48578063f8a194fc14610b68578063fd69c21514610b7e57600080fd5b8063d8c6404b14610a92578063dd62ed3e14610aac578063e01af92c14610af2578063e2f4560514610b1257600080fd5b8063bbf1af95116100dc578063bbf1af9514610a26578063cbf7e88814610a46578063d4cdeb3c14610a5c578063d7c94efd14610a7c57600080fd5b8063a9059cbb146109b0578063aacebbe3146109d0578063b225d4b7146109f0578063bbde77c114610a1057600080fd5b806388f820201161018557806391053d941161015457806391053d941461091d57806395d89b411461093d578063a457c2d714610970578063a8aa1b311461099057600080fd5b806388f82020146108915780638c0b5e22146108c95780638da5cb5b146108df5780638ea5220f146108fd57600080fd5b806379c4903c116101c157806379c4903c146108255780637cb332bb1461083b5780637d8dbe241461085b578063872f59691461087b57600080fd5b806370a08231146107d0578063715018a6146107f057806375f0a8741461080557600080fd5b8063450dde46116102d75780635a565c391161026a578063690c22ca11610239578063690c22ca1461076c5780636b67c4df146107825780636ddd171314610798578063704ce43e146107ba57600080fd5b80635a565c391461070a57806361a4036e146107205780636612e66f146107365780636827e7641461075657600080fd5b806352390c02116102a657806352390c02146106635780635342acb414610683578063589d89dc146106bc57806359927044146106d257600080fd5b8063450dde46146105e95780634549b03914610603578063455a439614610623578063457ffca21461064357600080fd5b80631cdd3be31161034f578063361ff9bf1161031e578063361ff9bf146105695780633685d4191461058957806339509351146105a957806342966c68146105c957600080fd5b80631cdd3be3146104dd57806323b872dd1461050d5780632d8381191461052d578063313ce5671461054d57600080fd5b806309c58fcd1161038b57806309c58fcd146104545780631264c9c41461047357806318160ddd146104935780631816467f146104bd57600080fd5b8062e6be7b146103bc57806306fdde03146103de578063095ea7b31461042457600080fd5b366103b757005b600080fd5b3480156103c857600080fd5b506103dc6103d73660046131c4565b610b9e565b005b3480156103ea57600080fd5b5060408051808201909152600b81526a5741474d492047414d455360a81b60208201525b60405161041b919061340f565b60405180910390f35b34801561043057600080fd5b5061044461043f3660046131fe565b610c98565b604051901515815260200161041b565b34801561046057600080fd5b50600a5461044490610100900460ff1681565b34801561047f57600080fd5b506103dc61048e3660046132d9565b610caf565b34801561049f57600080fd5b506c1bc49558fd67ce0b69c00000005b60405190815260200161041b565b3480156104c957600080fd5b506103dc6104d83660046131c4565b610cf3565b3480156104e957600080fd5b506104446104f83660046131c4565b601e6020526000908152604090205460ff1681565b34801561051957600080fd5b50610444610528366004613263565b610e0f565b34801561053957600080fd5b506104af6105483660046132f4565b610e78565b34801561055957600080fd5b506040516012815260200161041b565b34801561057557600080fd5b506103dc61058436600461335e565b610efc565b34801561059557600080fd5b506103dc6105a43660046131c4565b610fb1565b3480156105b557600080fd5b506104446105c43660046131fe565b611165565b3480156105d557600080fd5b506103dc6105e43660046132f4565b61119b565b3480156105f557600080fd5b50600a546104449060ff1681565b34801561060f57600080fd5b506104af61061e36600461330d565b6113d2565b34801561062f57600080fd5b506103dc61063e3660046132a4565b611473565b34801561064f57600080fd5b506103dc61065e366004613390565b6114c8565b34801561066f57600080fd5b506103dc61067e3660046131c4565b611584565b34801561068f57600080fd5b5061044461069e3660046131c4565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156106c857600080fd5b506104af60075481565b3480156106de57600080fd5b506005546106f2906001600160a01b031681565b6040516001600160a01b03909116815260200161041b565b34801561071657600080fd5b506104af60175481565b34801561072c57600080fd5b506104af60165481565b34801561074257600080fd5b506103dc6107513660046132a4565b611622565b34801561076257600080fd5b506104af60115481565b34801561077857600080fd5b506104af600e5481565b34801561078e57600080fd5b506104af60105481565b3480156107a457600080fd5b50600a5461044490640100000000900460ff1681565b3480156107c657600080fd5b506104af60135481565b3480156107dc57600080fd5b506104af6107eb3660046131c4565b611677565b3480156107fc57600080fd5b506103dc6116d5565b34801561081157600080fd5b506003546106f2906001600160a01b031681565b34801561083157600080fd5b506104af60155481565b34801561084757600080fd5b506103dc6108563660046131c4565b611749565b34801561086757600080fd5b506103dc6108763660046132f4565b611866565b34801561088757600080fd5b506104af600d5481565b34801561089d57600080fd5b506104446108ac3660046131c4565b6001600160a01b0316600090815260208052604090205460ff1690565b3480156108d557600080fd5b506104af60085481565b3480156108eb57600080fd5b506000546001600160a01b03166106f2565b34801561090957600080fd5b506004546106f2906001600160a01b031681565b34801561092957600080fd5b506103dc6109383660046132f4565b6118a8565b34801561094957600080fd5b5060408051808201909152600a8152695741474d4947414d455360b01b602082015261040e565b34801561097c57600080fd5b5061044461098b3660046131fe565b6118ea565b34801561099c57600080fd5b50601a546106f2906001600160a01b031681565b3480156109bc57600080fd5b506104446109cb3660046131fe565b611939565b3480156109dc57600080fd5b506103dc6109eb3660046131c4565b611946565b3480156109fc57600080fd5b506103dc610a0b3660046132f4565b611a68565b348015610a1c57600080fd5b506104af60095481565b348015610a3257600080fd5b506103dc610a413660046132d9565b611aaa565b348015610a5257600080fd5b506104af60185481565b348015610a6857600080fd5b50600a546104449062010000900460ff1681565b348015610a8857600080fd5b506104af60125481565b348015610a9e57600080fd5b50600c546104449060ff1681565b348015610ab857600080fd5b506104af610ac736600461322a565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b348015610afe57600080fd5b506103dc610b0d3660046132d9565b611afe565b348015610b1e57600080fd5b506104af600b5481565b348015610b3457600080fd5b506103dc610b433660046131c4565b611b48565b348015610b5457600080fd5b506019546106f2906001600160a01b031681565b348015610b7457600080fd5b506104af600f5481565b348015610b8a57600080fd5b506103dc610b993660046131fe565b611c32565b6000546001600160a01b03163314610bd15760405162461bcd60e51b8152600401610bc8906134a6565b60405180910390fd5b6019546001600160a01b0382811691161415610c3b5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610bc8565b6019546040516001600160a01b03918216918316907fc4382ee892d64a85fffb798adefd9dd8fcdeb2b1ababe74b46cdae7fe88da4e090600090a3601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ca5338484611e1d565b5060015b92915050565b6000546001600160a01b03163314610cd95760405162461bcd60e51b8152600401610bc8906134a6565b600a80549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b038116610d445760405162461bcd60e51b8152600401610bc890613464565b6004546001600160a01b0383811691161415610db15760405162461bcd60e51b815260206004820152602660248201527f546865204465762077616c6c657420697320616c72656164792074686973206160448201526564647265737360d01b6064820152608401610bc8565b6004546040516001600160a01b03918216918416907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a350600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e1c848484611f51565b610e6e8433610e6985604051806060016040528060288152602001613613602891396001600160a01b038a166000908152601d602090815260408083203384529091529020549190612421565b611e1d565b5060019392505050565b6000600654821115610edf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bc8565b6000610ee9612458565b9050610ef58382611d66565b9392505050565b6000546001600160a01b03163314610f265760405162461bcd60e51b8152600401610bc8906134a6565b6000610f3e82610f3885818989611d07565b90611d07565b9050806103e814610f9c5760405162461bcd60e51b815260206004820152602260248201527f546f74616c206d75737420626520657175616c20746f20313030302028313030604482015261252960f01b6064820152608401610bc8565b50601593909355601691909155601855601755565b6000546001600160a01b03163314610fdb5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116600090815260208052604090205460ff166110425760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bc8565b60005b60215481101561116157816001600160a01b03166021828154811061106c5761106c6135e7565b6000918252602090912001546001600160a01b0316141561114f576021805461109790600190613589565b815481106110a7576110a76135e7565b600091825260209091200154602180546001600160a01b0390921691839081106110d3576110d36135e7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601c8252604080822082905591805220805460ff191690556021805480611129576111296135d1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611159816135a0565b915050611045565b5050565b336000818152601d602090815260408083206001600160a01b03871684529091528120549091610ca5918590610e699086611d07565b600260015414156111ee5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bc8565b6002600155338061124b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bc8565b6002546001600160a01b03828116911614156112b35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610bc8565b60006112be82611677565b90508281101561131b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bc8565b600061132f611328612458565b859061247b565b6001600160a01b0384166000908152601b60205260409020549091506113559082611dc1565b6001600160a01b0384166000908152601b60209081526040808320939093558052205460ff16156113bd576001600160a01b0383166000908152601c60205260409020546113a39085611dc1565b6001600160a01b0384166000908152601c60205260409020555b6113c88385836124fa565b5050600180555050565b60006c1bc49558fd67ce0b69c00000008311156114315760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bc8565b6000826114545760006114458560006125da565b50929550610ca9945050505050565b50601454600061146485836125da565b50919550610ca9945050505050565b6000546001600160a01b0316331461149d5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114f25760405162461bcd60e51b8152600401610bc8906134a6565b61150481610f38848187818b8b611d07565b60148190556064101561156d5760405162461bcd60e51b815260206004820152602b60248201527f546f74616c20466565732063616e6e6f7420626520677265617465722074686160448201526a6e2031302520283130302960a81b6064820152608401610bc8565b600f94909455601092909255601155601255601355565b6000546001600160a01b031633146115ae5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116600090815260208052604090205460ff16156116165760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420696e636c756465640000000000000000006044820152606401610bc8565b61161f81612650565b50565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b038116600090815260208052604081205460ff16156116b357506001600160a01b03166000908152601c602052604090205490565b6001600160a01b0382166000908152601b6020526040902054610ca990610e78565b6000546001600160a01b031633146116ff5760405162461bcd60e51b8152600401610bc8906134a6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117735760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b03811661179a5760405162461bcd60e51b8152600401610bc890613464565b6005546001600160a01b03838116911614156118085760405162461bcd60e51b815260206004820152602760248201527f546865205465616d2077616c6c657420697320616c72656164792074686973206044820152666164647265737360c81b6064820152608401610bc8565b6005546040516001600160a01b03918216918416907fd9a2a08302ed3220f4e646ff99d6780d87e27baddf1af05679dc930ce811309590600090a350600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118905760405162461bcd60e51b8152600401610bc8906134a6565b6118a281670de0b6b3a764000061356a565b60085550565b6000546001600160a01b031633146118d25760405162461bcd60e51b8152600401610bc8906134a6565b6118e481670de0b6b3a764000061356a565b60095550565b6000610ca53384610e698560405180606001604052806025815260200161363b60259139336000908152601d602090815260408083206001600160a01b038d1684529091529020549190612421565b6000610ca5338484611f51565b6000546001600160a01b031633146119705760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b0381166119975760405162461bcd60e51b8152600401610bc890613464565b6003546001600160a01b0383811691161415611a0a5760405162461bcd60e51b815260206004820152602c60248201527f546865204d61726b6574696e672077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610bc8565b6003546040516001600160a01b03918216918416907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a350600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a925760405162461bcd60e51b8152600401610bc8906134a6565b611aa481670de0b6b3a764000061356a565b600b5550565b6000546001600160a01b03163314611ad45760405162461bcd60e51b8152600401610bc8906134a6565b600c805460ff191682151590811790915560ff161561161f57611af842603c613530565b600e5550565b6000546001600160a01b03163314611b285760405162461bcd60e51b8152600401610bc8906134a6565b600a80549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b03163314611b725760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116611bd75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c5c5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038216611ccc5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f7420776974686472617720746865204554482062616c616e636520604482015270746f2061207a65726f206164647265737360781b6064820152608401610bc8565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d02573d6000803e3d6000fd5b505050565b600080611d148385613530565b905083811015610ef55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bc8565b6000808211611db75760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610bc8565b610ef58284613548565b600082821115611e135760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610bc8565b610ef58284613589565b6001600160a01b038316611e875760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401610bc8565b6001600160a01b038216611eef5760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610bc8565b6001600160a01b038381166000818152601d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611fb55760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bc8565b6001600160a01b0382166120175760405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bc8565b6002546001600160a01b03848116911614156120835760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865206275726e206164604482015264647265737360d81b6064820152608401610bc8565b600081116120e55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bc8565b600a54610100900460ff166121625760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610bc8565b6001600160a01b0383166000908152601e602052604090205460ff161580156121a457506001600160a01b0382166000908152601e602052604090205460ff16155b6121e65760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610bc8565b6019546001600160a01b0384811691161480159061221d57506001600160a01b0382166000908152601f602052604090205460ff16155b801561224257506001600160a01b0383166000908152601f602052604090205460ff16155b156122b5576008548111156122b55760405162461bcd60e51b815260206004820152603360248201527f5472616e7366657220616d6f756e74206578636565647320746865204d6178206044820152722a3930b739b0b1ba34b7b71020b6b7bab73a1760691b6064820152608401610bc8565b60006009541180156122e057506001600160a01b0382166000908152601f602052604090205460ff16155b801561230557506001600160a01b0383166000908152601f602052604090205460ff16155b801561231f5750601a546001600160a01b03838116911614155b156123a557600061232f83611677565b60095490915061233f8383613530565b11156123a35760405162461bcd60e51b815260206004820152602d60248201527f4e65772062616c616e636520776f756c642065786365656420746865206d617860448201526c57616c6c657442616c616e636560981b6064820152608401610bc8565b505b600a5460ff8082169162010000900416156123be575060005b6001600160a01b0384166000908152601f602052604090205460ff16806123fd57506001600160a01b0383166000908152601f602052604090205460ff165b15612406575060005b61240f8361270f565b61241b848484846127ac565b50505050565b600081848411156124455760405162461bcd60e51b8152600401610bc8919061340f565b506124508385613589565b949350505050565b6000806000612465612825565b90925090506124748282611d66565b9250505090565b60008261248a57506000610ca9565b6000612496838561356a565b9050826124a38583613548565b14610ef55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bc8565b6002546001600160a01b03166000908152601b602052604090205461251f9082611d07565b600280546001600160a01b039081166000908152601b602090815260408083209590955592549091168152908052205460ff1615612598576002546001600160a01b03166000908152601c602052604090205461257c9083611d07565b6002546001600160a01b03166000908152601c60205260409020555b6002546040518381526001600160a01b03918216918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611f44565b600080808080806125f76103e86125f18a8a61247b565b90611d66565b905060006126058983611dc1565b90506000612611612458565b9050600061261f8b8361247b565b9050600061262d858461247b565b9050600061263b8383611dc1565b929d929c9b5093995091975095505050505050565b6001600160a01b0381166000908152601b6020526040902054156126aa576001600160a01b0381166000908152601b602052604090205461269090610e78565b6001600160a01b0382166000908152601c60205260409020555b6001600160a01b031660008181526020805260408120805460ff191660019081179091556021805491820181559091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319169091179055565b600a5462010000900460ff1661161f57600061272a30611677565b600b54600a54919250821015906301000000900460ff1615801561274b5750805b80156127615750600a54640100000000900460ff165b801561277a5750601a546001600160a01b038481169116145b15611d0257600a805463ff0000001916630100000017905561279a6129da565b600a805463ff00000019169055505050565b601454600c5460ff1680156127c35750600e544211155b6127cd57806127d1565b600d545b601a549091506001600160a01b038681169116148015906128005750601a546001600160a01b03858116911614155b15612809575060005b81612812575060005b61281e85858584612b5f565b5050505050565b60065460009081906c1bc49558fd67ce0b69c0000000825b60215481101561298c5782601b60006021848154811061285f5761285f6135e7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128ca575081601c6000602184815481106128a3576128a36135e7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128ea575050600654936c1bc49558fd67ce0b69c00000009350915050565b612930601b600060218481548110612904576129046135e7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611dc1565b9250612978601c60006021848154811061294c5761294c6135e7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611dc1565b915080612984816135a0565b91505061283d565b508015806129b257506006546129af906c1bc49558fd67ce0b69c0000000611d66565b82105b156129d1575050600654926c1bc49558fd67ce0b69c000000092509050565b90939092509050565b60026001541415612a2d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bc8565b60026001819055601854600091612a449190611d66565b90506000612a616103e86125f184612a5b30611677565b9061247b565b90506000612a7882612a7230611677565b90611dc1565b905047612a8482612bec565b6000612a904783611dc1565b90506000612aaf6103e86125f16015548561247b90919063ffffffff16565b90506000612ace6103e86125f16016548661247b90919063ffffffff16565b90506000612aed6103e86125f16017548761247b90919063ffffffff16565b90506000612b016103e86125f1878c61247b565b600354909150612b1a906001600160a01b031685612d8e565b600454612b30906001600160a01b031684612d8e565b600554612b46906001600160a01b031683612d8e565b612b508882612df6565b50506001805550505050505050565b6000806000806000612b7187876125da565b94509450945094509450612b89898987878787612f29565b612b9487828861304f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bd991815260200190565b60405180910390a3505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c2157612c216135e7565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c7557600080fd5b505afa158015612c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cad91906131e1565b81600181518110612cc057612cc06135e7565b6001600160a01b039283166020918202929092010152601954612ce69130911684611e1d565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d1f9085906000908690309042906004016134f4565b600060405180830381600087803b158015612d3957600080fd5b505af1158015612d4d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d829291906134db565b60405180910390a15050565b6001600160a01b038216611ccc5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207472616e73666572207468652045544820746f2061207a65726044820152686f206164647265737360b81b6064820152608401610bc8565b601954612e0e9030906001600160a01b031684611e1d565b601954600090819081906001600160a01b031663f305d7198530888580612e3d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612ea057600080fd5b505af1158015612eb4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed99190613330565b604080518481526020810184905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be39060600160405180910390a15050505050565b6001600160a01b0386166000908152601b6020526040902054612f4c9085611dc1565b6001600160a01b038088166000908152601b60205260408082209390935590871681522054612f7b9084611d07565b6001600160a01b038087166000908152601b60209081526040808320949094559189168152908052205460ff1615612fea576001600160a01b0386166000908152601c6020526040902054612fd09083611dc1565b6001600160a01b0387166000908152601c60205260409020555b6001600160a01b038516600090815260208052604090205460ff1615613047576001600160a01b0385166000908152601c602052604090205461302d9082611d07565b6001600160a01b0386166000908152601c60205260409020555b505050505050565b6000811180156130685750600a5462010000900460ff16155b15611d025761307a8383600f5461309f565b6000613091600f5483611dc190919063ffffffff16565b905061241b848483306130e9565b60006130b16103e86125f1868561247b565b905060006130bf828561247b565b6006549091506130cf9082611dc1565b6006556007546130df9083611d07565b6007555050505050565b60006130fb6103e86125f1878661247b565b90506000613109828661247b565b6001600160a01b0384166000908152601b602052604090205490915061312f9082611d07565b6001600160a01b0384166000908152601b60209081526040808320939093558052205460ff1615613197576001600160a01b0383166000908152601c602052604090205461317d9083611d07565b6001600160a01b0384166000908152601c60205260409020555b6007546131a49083611d07565b600755505050505050565b803580151581146131bf57600080fd5b919050565b6000602082840312156131d657600080fd5b8135610ef5816135fd565b6000602082840312156131f357600080fd5b8151610ef5816135fd565b6000806040838503121561321157600080fd5b823561321c816135fd565b946020939093013593505050565b6000806040838503121561323d57600080fd5b8235613248816135fd565b91506020830135613258816135fd565b809150509250929050565b60008060006060848603121561327857600080fd5b8335613283816135fd565b92506020840135613293816135fd565b929592945050506040919091013590565b600080604083850312156132b757600080fd5b82356132c2816135fd565b91506132d0602084016131af565b90509250929050565b6000602082840312156132eb57600080fd5b610ef5826131af565b60006020828403121561330657600080fd5b5035919050565b6000806040838503121561332057600080fd5b823591506132d0602084016131af565b60008060006060848603121561334557600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561337457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156133a857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600081518084526020808501945080840160005b838110156134045781516001600160a01b0316875295820195908201906001016133df565b509495945050505050565b600060208083528351808285015260005b8181101561343c57858101830151858201604001528201613420565b8181111561344e576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f416464726573732063616e6e6f7420626520746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061245060408301846133cb565b85815284602082015260a06040820152600061351360a08301866133cb565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613543576135436135bb565b500190565b60008261356557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613584576135846135bb565b500290565b60008282101561359b5761359b6135bb565b500390565b60006000198214156135b4576135b46135bb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461161f57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b25dde902c6f17b42cf9ebc0e494374ddffbb2c3600b189d655898949a62b3bb64736f6c63430008060033

Deployed Bytecode

0x6080604052600436106103b05760003560e01c806370a08231116101e7578063a9059cbb1161010d578063d8c6404b116100a0578063f2fde38b1161006f578063f2fde38b14610b28578063f887ea4014610b48578063f8a194fc14610b68578063fd69c21514610b7e57600080fd5b8063d8c6404b14610a92578063dd62ed3e14610aac578063e01af92c14610af2578063e2f4560514610b1257600080fd5b8063bbf1af95116100dc578063bbf1af9514610a26578063cbf7e88814610a46578063d4cdeb3c14610a5c578063d7c94efd14610a7c57600080fd5b8063a9059cbb146109b0578063aacebbe3146109d0578063b225d4b7146109f0578063bbde77c114610a1057600080fd5b806388f820201161018557806391053d941161015457806391053d941461091d57806395d89b411461093d578063a457c2d714610970578063a8aa1b311461099057600080fd5b806388f82020146108915780638c0b5e22146108c95780638da5cb5b146108df5780638ea5220f146108fd57600080fd5b806379c4903c116101c157806379c4903c146108255780637cb332bb1461083b5780637d8dbe241461085b578063872f59691461087b57600080fd5b806370a08231146107d0578063715018a6146107f057806375f0a8741461080557600080fd5b8063450dde46116102d75780635a565c391161026a578063690c22ca11610239578063690c22ca1461076c5780636b67c4df146107825780636ddd171314610798578063704ce43e146107ba57600080fd5b80635a565c391461070a57806361a4036e146107205780636612e66f146107365780636827e7641461075657600080fd5b806352390c02116102a657806352390c02146106635780635342acb414610683578063589d89dc146106bc57806359927044146106d257600080fd5b8063450dde46146105e95780634549b03914610603578063455a439614610623578063457ffca21461064357600080fd5b80631cdd3be31161034f578063361ff9bf1161031e578063361ff9bf146105695780633685d4191461058957806339509351146105a957806342966c68146105c957600080fd5b80631cdd3be3146104dd57806323b872dd1461050d5780632d8381191461052d578063313ce5671461054d57600080fd5b806309c58fcd1161038b57806309c58fcd146104545780631264c9c41461047357806318160ddd146104935780631816467f146104bd57600080fd5b8062e6be7b146103bc57806306fdde03146103de578063095ea7b31461042457600080fd5b366103b757005b600080fd5b3480156103c857600080fd5b506103dc6103d73660046131c4565b610b9e565b005b3480156103ea57600080fd5b5060408051808201909152600b81526a5741474d492047414d455360a81b60208201525b60405161041b919061340f565b60405180910390f35b34801561043057600080fd5b5061044461043f3660046131fe565b610c98565b604051901515815260200161041b565b34801561046057600080fd5b50600a5461044490610100900460ff1681565b34801561047f57600080fd5b506103dc61048e3660046132d9565b610caf565b34801561049f57600080fd5b506c1bc49558fd67ce0b69c00000005b60405190815260200161041b565b3480156104c957600080fd5b506103dc6104d83660046131c4565b610cf3565b3480156104e957600080fd5b506104446104f83660046131c4565b601e6020526000908152604090205460ff1681565b34801561051957600080fd5b50610444610528366004613263565b610e0f565b34801561053957600080fd5b506104af6105483660046132f4565b610e78565b34801561055957600080fd5b506040516012815260200161041b565b34801561057557600080fd5b506103dc61058436600461335e565b610efc565b34801561059557600080fd5b506103dc6105a43660046131c4565b610fb1565b3480156105b557600080fd5b506104446105c43660046131fe565b611165565b3480156105d557600080fd5b506103dc6105e43660046132f4565b61119b565b3480156105f557600080fd5b50600a546104449060ff1681565b34801561060f57600080fd5b506104af61061e36600461330d565b6113d2565b34801561062f57600080fd5b506103dc61063e3660046132a4565b611473565b34801561064f57600080fd5b506103dc61065e366004613390565b6114c8565b34801561066f57600080fd5b506103dc61067e3660046131c4565b611584565b34801561068f57600080fd5b5061044461069e3660046131c4565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156106c857600080fd5b506104af60075481565b3480156106de57600080fd5b506005546106f2906001600160a01b031681565b6040516001600160a01b03909116815260200161041b565b34801561071657600080fd5b506104af60175481565b34801561072c57600080fd5b506104af60165481565b34801561074257600080fd5b506103dc6107513660046132a4565b611622565b34801561076257600080fd5b506104af60115481565b34801561077857600080fd5b506104af600e5481565b34801561078e57600080fd5b506104af60105481565b3480156107a457600080fd5b50600a5461044490640100000000900460ff1681565b3480156107c657600080fd5b506104af60135481565b3480156107dc57600080fd5b506104af6107eb3660046131c4565b611677565b3480156107fc57600080fd5b506103dc6116d5565b34801561081157600080fd5b506003546106f2906001600160a01b031681565b34801561083157600080fd5b506104af60155481565b34801561084757600080fd5b506103dc6108563660046131c4565b611749565b34801561086757600080fd5b506103dc6108763660046132f4565b611866565b34801561088757600080fd5b506104af600d5481565b34801561089d57600080fd5b506104446108ac3660046131c4565b6001600160a01b0316600090815260208052604090205460ff1690565b3480156108d557600080fd5b506104af60085481565b3480156108eb57600080fd5b506000546001600160a01b03166106f2565b34801561090957600080fd5b506004546106f2906001600160a01b031681565b34801561092957600080fd5b506103dc6109383660046132f4565b6118a8565b34801561094957600080fd5b5060408051808201909152600a8152695741474d4947414d455360b01b602082015261040e565b34801561097c57600080fd5b5061044461098b3660046131fe565b6118ea565b34801561099c57600080fd5b50601a546106f2906001600160a01b031681565b3480156109bc57600080fd5b506104446109cb3660046131fe565b611939565b3480156109dc57600080fd5b506103dc6109eb3660046131c4565b611946565b3480156109fc57600080fd5b506103dc610a0b3660046132f4565b611a68565b348015610a1c57600080fd5b506104af60095481565b348015610a3257600080fd5b506103dc610a413660046132d9565b611aaa565b348015610a5257600080fd5b506104af60185481565b348015610a6857600080fd5b50600a546104449062010000900460ff1681565b348015610a8857600080fd5b506104af60125481565b348015610a9e57600080fd5b50600c546104449060ff1681565b348015610ab857600080fd5b506104af610ac736600461322a565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b348015610afe57600080fd5b506103dc610b0d3660046132d9565b611afe565b348015610b1e57600080fd5b506104af600b5481565b348015610b3457600080fd5b506103dc610b433660046131c4565b611b48565b348015610b5457600080fd5b506019546106f2906001600160a01b031681565b348015610b7457600080fd5b506104af600f5481565b348015610b8a57600080fd5b506103dc610b993660046131fe565b611c32565b6000546001600160a01b03163314610bd15760405162461bcd60e51b8152600401610bc8906134a6565b60405180910390fd5b6019546001600160a01b0382811691161415610c3b5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610bc8565b6019546040516001600160a01b03918216918316907fc4382ee892d64a85fffb798adefd9dd8fcdeb2b1ababe74b46cdae7fe88da4e090600090a3601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ca5338484611e1d565b5060015b92915050565b6000546001600160a01b03163314610cd95760405162461bcd60e51b8152600401610bc8906134a6565b600a80549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b038116610d445760405162461bcd60e51b8152600401610bc890613464565b6004546001600160a01b0383811691161415610db15760405162461bcd60e51b815260206004820152602660248201527f546865204465762077616c6c657420697320616c72656164792074686973206160448201526564647265737360d01b6064820152608401610bc8565b6004546040516001600160a01b03918216918416907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a350600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e1c848484611f51565b610e6e8433610e6985604051806060016040528060288152602001613613602891396001600160a01b038a166000908152601d602090815260408083203384529091529020549190612421565b611e1d565b5060019392505050565b6000600654821115610edf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bc8565b6000610ee9612458565b9050610ef58382611d66565b9392505050565b6000546001600160a01b03163314610f265760405162461bcd60e51b8152600401610bc8906134a6565b6000610f3e82610f3885818989611d07565b90611d07565b9050806103e814610f9c5760405162461bcd60e51b815260206004820152602260248201527f546f74616c206d75737420626520657175616c20746f20313030302028313030604482015261252960f01b6064820152608401610bc8565b50601593909355601691909155601855601755565b6000546001600160a01b03163314610fdb5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116600090815260208052604090205460ff166110425760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bc8565b60005b60215481101561116157816001600160a01b03166021828154811061106c5761106c6135e7565b6000918252602090912001546001600160a01b0316141561114f576021805461109790600190613589565b815481106110a7576110a76135e7565b600091825260209091200154602180546001600160a01b0390921691839081106110d3576110d36135e7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601c8252604080822082905591805220805460ff191690556021805480611129576111296135d1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611159816135a0565b915050611045565b5050565b336000818152601d602090815260408083206001600160a01b03871684529091528120549091610ca5918590610e699086611d07565b600260015414156111ee5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bc8565b6002600155338061124b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bc8565b6002546001600160a01b03828116911614156112b35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610bc8565b60006112be82611677565b90508281101561131b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bc8565b600061132f611328612458565b859061247b565b6001600160a01b0384166000908152601b60205260409020549091506113559082611dc1565b6001600160a01b0384166000908152601b60209081526040808320939093558052205460ff16156113bd576001600160a01b0383166000908152601c60205260409020546113a39085611dc1565b6001600160a01b0384166000908152601c60205260409020555b6113c88385836124fa565b5050600180555050565b60006c1bc49558fd67ce0b69c00000008311156114315760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bc8565b6000826114545760006114458560006125da565b50929550610ca9945050505050565b50601454600061146485836125da565b50919550610ca9945050505050565b6000546001600160a01b0316331461149d5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114f25760405162461bcd60e51b8152600401610bc8906134a6565b61150481610f38848187818b8b611d07565b60148190556064101561156d5760405162461bcd60e51b815260206004820152602b60248201527f546f74616c20466565732063616e6e6f7420626520677265617465722074686160448201526a6e2031302520283130302960a81b6064820152608401610bc8565b600f94909455601092909255601155601255601355565b6000546001600160a01b031633146115ae5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116600090815260208052604090205460ff16156116165760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420696e636c756465640000000000000000006044820152606401610bc8565b61161f81612650565b50565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b038116600090815260208052604081205460ff16156116b357506001600160a01b03166000908152601c602052604090205490565b6001600160a01b0382166000908152601b6020526040902054610ca990610e78565b6000546001600160a01b031633146116ff5760405162461bcd60e51b8152600401610bc8906134a6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117735760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b03811661179a5760405162461bcd60e51b8152600401610bc890613464565b6005546001600160a01b03838116911614156118085760405162461bcd60e51b815260206004820152602760248201527f546865205465616d2077616c6c657420697320616c72656164792074686973206044820152666164647265737360c81b6064820152608401610bc8565b6005546040516001600160a01b03918216918416907fd9a2a08302ed3220f4e646ff99d6780d87e27baddf1af05679dc930ce811309590600090a350600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118905760405162461bcd60e51b8152600401610bc8906134a6565b6118a281670de0b6b3a764000061356a565b60085550565b6000546001600160a01b031633146118d25760405162461bcd60e51b8152600401610bc8906134a6565b6118e481670de0b6b3a764000061356a565b60095550565b6000610ca53384610e698560405180606001604052806025815260200161363b60259139336000908152601d602090815260408083206001600160a01b038d1684529091529020549190612421565b6000610ca5338484611f51565b6000546001600160a01b031633146119705760405162461bcd60e51b8152600401610bc8906134a6565b806001600160a01b0381166119975760405162461bcd60e51b8152600401610bc890613464565b6003546001600160a01b0383811691161415611a0a5760405162461bcd60e51b815260206004820152602c60248201527f546865204d61726b6574696e672077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610bc8565b6003546040516001600160a01b03918216918416907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a350600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a925760405162461bcd60e51b8152600401610bc8906134a6565b611aa481670de0b6b3a764000061356a565b600b5550565b6000546001600160a01b03163314611ad45760405162461bcd60e51b8152600401610bc8906134a6565b600c805460ff191682151590811790915560ff161561161f57611af842603c613530565b600e5550565b6000546001600160a01b03163314611b285760405162461bcd60e51b8152600401610bc8906134a6565b600a80549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b03163314611b725760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038116611bd75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c5c5760405162461bcd60e51b8152600401610bc8906134a6565b6001600160a01b038216611ccc5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f7420776974686472617720746865204554482062616c616e636520604482015270746f2061207a65726f206164647265737360781b6064820152608401610bc8565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d02573d6000803e3d6000fd5b505050565b600080611d148385613530565b905083811015610ef55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bc8565b6000808211611db75760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610bc8565b610ef58284613548565b600082821115611e135760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610bc8565b610ef58284613589565b6001600160a01b038316611e875760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401610bc8565b6001600160a01b038216611eef5760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610bc8565b6001600160a01b038381166000818152601d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611fb55760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bc8565b6001600160a01b0382166120175760405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bc8565b6002546001600160a01b03848116911614156120835760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865206275726e206164604482015264647265737360d81b6064820152608401610bc8565b600081116120e55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bc8565b600a54610100900460ff166121625760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610bc8565b6001600160a01b0383166000908152601e602052604090205460ff161580156121a457506001600160a01b0382166000908152601e602052604090205460ff16155b6121e65760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610bc8565b6019546001600160a01b0384811691161480159061221d57506001600160a01b0382166000908152601f602052604090205460ff16155b801561224257506001600160a01b0383166000908152601f602052604090205460ff16155b156122b5576008548111156122b55760405162461bcd60e51b815260206004820152603360248201527f5472616e7366657220616d6f756e74206578636565647320746865204d6178206044820152722a3930b739b0b1ba34b7b71020b6b7bab73a1760691b6064820152608401610bc8565b60006009541180156122e057506001600160a01b0382166000908152601f602052604090205460ff16155b801561230557506001600160a01b0383166000908152601f602052604090205460ff16155b801561231f5750601a546001600160a01b03838116911614155b156123a557600061232f83611677565b60095490915061233f8383613530565b11156123a35760405162461bcd60e51b815260206004820152602d60248201527f4e65772062616c616e636520776f756c642065786365656420746865206d617860448201526c57616c6c657442616c616e636560981b6064820152608401610bc8565b505b600a5460ff8082169162010000900416156123be575060005b6001600160a01b0384166000908152601f602052604090205460ff16806123fd57506001600160a01b0383166000908152601f602052604090205460ff165b15612406575060005b61240f8361270f565b61241b848484846127ac565b50505050565b600081848411156124455760405162461bcd60e51b8152600401610bc8919061340f565b506124508385613589565b949350505050565b6000806000612465612825565b90925090506124748282611d66565b9250505090565b60008261248a57506000610ca9565b6000612496838561356a565b9050826124a38583613548565b14610ef55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bc8565b6002546001600160a01b03166000908152601b602052604090205461251f9082611d07565b600280546001600160a01b039081166000908152601b602090815260408083209590955592549091168152908052205460ff1615612598576002546001600160a01b03166000908152601c602052604090205461257c9083611d07565b6002546001600160a01b03166000908152601c60205260409020555b6002546040518381526001600160a01b03918216918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611f44565b600080808080806125f76103e86125f18a8a61247b565b90611d66565b905060006126058983611dc1565b90506000612611612458565b9050600061261f8b8361247b565b9050600061262d858461247b565b9050600061263b8383611dc1565b929d929c9b5093995091975095505050505050565b6001600160a01b0381166000908152601b6020526040902054156126aa576001600160a01b0381166000908152601b602052604090205461269090610e78565b6001600160a01b0382166000908152601c60205260409020555b6001600160a01b031660008181526020805260408120805460ff191660019081179091556021805491820181559091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319169091179055565b600a5462010000900460ff1661161f57600061272a30611677565b600b54600a54919250821015906301000000900460ff1615801561274b5750805b80156127615750600a54640100000000900460ff165b801561277a5750601a546001600160a01b038481169116145b15611d0257600a805463ff0000001916630100000017905561279a6129da565b600a805463ff00000019169055505050565b601454600c5460ff1680156127c35750600e544211155b6127cd57806127d1565b600d545b601a549091506001600160a01b038681169116148015906128005750601a546001600160a01b03858116911614155b15612809575060005b81612812575060005b61281e85858584612b5f565b5050505050565b60065460009081906c1bc49558fd67ce0b69c0000000825b60215481101561298c5782601b60006021848154811061285f5761285f6135e7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128ca575081601c6000602184815481106128a3576128a36135e7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128ea575050600654936c1bc49558fd67ce0b69c00000009350915050565b612930601b600060218481548110612904576129046135e7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611dc1565b9250612978601c60006021848154811061294c5761294c6135e7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611dc1565b915080612984816135a0565b91505061283d565b508015806129b257506006546129af906c1bc49558fd67ce0b69c0000000611d66565b82105b156129d1575050600654926c1bc49558fd67ce0b69c000000092509050565b90939092509050565b60026001541415612a2d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bc8565b60026001819055601854600091612a449190611d66565b90506000612a616103e86125f184612a5b30611677565b9061247b565b90506000612a7882612a7230611677565b90611dc1565b905047612a8482612bec565b6000612a904783611dc1565b90506000612aaf6103e86125f16015548561247b90919063ffffffff16565b90506000612ace6103e86125f16016548661247b90919063ffffffff16565b90506000612aed6103e86125f16017548761247b90919063ffffffff16565b90506000612b016103e86125f1878c61247b565b600354909150612b1a906001600160a01b031685612d8e565b600454612b30906001600160a01b031684612d8e565b600554612b46906001600160a01b031683612d8e565b612b508882612df6565b50506001805550505050505050565b6000806000806000612b7187876125da565b94509450945094509450612b89898987878787612f29565b612b9487828861304f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bd991815260200190565b60405180910390a3505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c2157612c216135e7565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c7557600080fd5b505afa158015612c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cad91906131e1565b81600181518110612cc057612cc06135e7565b6001600160a01b039283166020918202929092010152601954612ce69130911684611e1d565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d1f9085906000908690309042906004016134f4565b600060405180830381600087803b158015612d3957600080fd5b505af1158015612d4d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d829291906134db565b60405180910390a15050565b6001600160a01b038216611ccc5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207472616e73666572207468652045544820746f2061207a65726044820152686f206164647265737360b81b6064820152608401610bc8565b601954612e0e9030906001600160a01b031684611e1d565b601954600090819081906001600160a01b031663f305d7198530888580612e3d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612ea057600080fd5b505af1158015612eb4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed99190613330565b604080518481526020810184905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be39060600160405180910390a15050505050565b6001600160a01b0386166000908152601b6020526040902054612f4c9085611dc1565b6001600160a01b038088166000908152601b60205260408082209390935590871681522054612f7b9084611d07565b6001600160a01b038087166000908152601b60209081526040808320949094559189168152908052205460ff1615612fea576001600160a01b0386166000908152601c6020526040902054612fd09083611dc1565b6001600160a01b0387166000908152601c60205260409020555b6001600160a01b038516600090815260208052604090205460ff1615613047576001600160a01b0385166000908152601c602052604090205461302d9082611d07565b6001600160a01b0386166000908152601c60205260409020555b505050505050565b6000811180156130685750600a5462010000900460ff16155b15611d025761307a8383600f5461309f565b6000613091600f5483611dc190919063ffffffff16565b905061241b848483306130e9565b60006130b16103e86125f1868561247b565b905060006130bf828561247b565b6006549091506130cf9082611dc1565b6006556007546130df9083611d07565b6007555050505050565b60006130fb6103e86125f1878661247b565b90506000613109828661247b565b6001600160a01b0384166000908152601b602052604090205490915061312f9082611d07565b6001600160a01b0384166000908152601b60209081526040808320939093558052205460ff1615613197576001600160a01b0383166000908152601c602052604090205461317d9083611d07565b6001600160a01b0384166000908152601c60205260409020555b6007546131a49083611d07565b600755505050505050565b803580151581146131bf57600080fd5b919050565b6000602082840312156131d657600080fd5b8135610ef5816135fd565b6000602082840312156131f357600080fd5b8151610ef5816135fd565b6000806040838503121561321157600080fd5b823561321c816135fd565b946020939093013593505050565b6000806040838503121561323d57600080fd5b8235613248816135fd565b91506020830135613258816135fd565b809150509250929050565b60008060006060848603121561327857600080fd5b8335613283816135fd565b92506020840135613293816135fd565b929592945050506040919091013590565b600080604083850312156132b757600080fd5b82356132c2816135fd565b91506132d0602084016131af565b90509250929050565b6000602082840312156132eb57600080fd5b610ef5826131af565b60006020828403121561330657600080fd5b5035919050565b6000806040838503121561332057600080fd5b823591506132d0602084016131af565b60008060006060848603121561334557600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561337457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156133a857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600081518084526020808501945080840160005b838110156134045781516001600160a01b0316875295820195908201906001016133df565b509495945050505050565b600060208083528351808285015260005b8181101561343c57858101830151858201604001528201613420565b8181111561344e576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f416464726573732063616e6e6f7420626520746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061245060408301846133cb565b85815284602082015260a06040820152600061351360a08301866133cb565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613543576135436135bb565b500190565b60008261356557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613584576135846135bb565b500290565b60008282101561359b5761359b6135bb565b500390565b60006000198214156135b4576135b46135bb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461161f57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b25dde902c6f17b42cf9ebc0e494374ddffbb2c3600b189d655898949a62b3bb64736f6c63430008060033

Deployed Bytecode Sourcemap

11332:24835:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27599:293;;;;;;;;;;-1:-1:-1;27599:293:0;;;;;:::i;:::-;;:::i;:::-;;15730:94;;;;;;;;;;-1:-1:-1;15811:5:0;;;;;;;;;;;;-1:-1:-1;;;15811:5:0;;;;15730:94;;;;;;;:::i;:::-;;;;;;;;16743:167;;;;;;;;;;-1:-1:-1;16743:167:0;;;;;:::i;:::-;;:::i;:::-;;;5743:14:1;;5736:22;5718:41;;5706:2;5691:18;16743:167:0;5673:92:1;12385:35:0;;;;;;;;;;-1:-1:-1;12385:35:0;;;;;;;;;;;27463:124;;;;;;;;;;-1:-1:-1;27463:124:0;;;;;:::i;:::-;;:::i;16040:102::-;;;;;;;;;;-1:-1:-1;12017:28:0;16040:102;;;19765:25:1;;;19753:2;19738:18;16040:102:0;19720:76:1;26345:279:0;;;;;;;;;;-1:-1:-1;26345:279:0;;;;;:::i;:::-;;:::i;13549:46::-;;;;;;;;;;-1:-1:-1;13549:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16926:318;;;;;;;;;;-1:-1:-1;16926:318:0;;;;;:::i;:::-;;:::i;20570:268::-;;;;;;;;;;-1:-1:-1;20570:268:0;;;;;:::i;:::-;;:::i;15938:94::-;;;;;;;;;;-1:-1:-1;15938:94:0;;11912:2;21191:36:1;;21179:2;21164:18;15938:94:0;21146:87:1;26933:518:0;;;;;;;;;;-1:-1:-1;26933:518:0;;;;;:::i;:::-;;:::i;21326:499::-;;;;;;;;;;-1:-1:-1;21326:499:0;;;;;:::i;:::-;;:::i;18879:218::-;;;;;;;;;;-1:-1:-1;18879:218:0;;;;;:::i;:::-;;:::i;17260:776::-;;;;;;;;;;-1:-1:-1;17260:776:0;;;;;:::i;:::-;;:::i;12345:33::-;;;;;;;;;;-1:-1:-1;12345:33:0;;;;;;;;19931:511;;;;;;;;;;-1:-1:-1;19931:511:0;;;;;:::i;:::-;;:::i;24957:123::-;;;;;;;;;;-1:-1:-1;24957:123:0;;;;;:::i;:::-;;:::i;25600:405::-;;;;;;;;;;-1:-1:-1;25600:405:0;;;;;:::i;:::-;;:::i;20850:180::-;;;;;;;;;;-1:-1:-1;20850:180:0;;;;;:::i;:::-;;:::i;24818:125::-;;;;;;;;;;-1:-1:-1;24818:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;24907:27:0;24882:4;24907:27;;;:18;:27;;;;;;;;;24818:125;12129:32;;;;;;;;;;;;;;;;11713:70;;;;;;;;;;-1:-1:-1;11713:70:0;;;;-1:-1:-1;;;;;11713:70:0;;;;;;-1:-1:-1;;;;;4922:32:1;;;4904:51;;4892:2;4877:18;11713:70:0;4859:102:1;13170:38:0;;;;;;;;;;;;;;;;13119:37;;;;;;;;;;;;;;;;21837:132;;;;;;;;;;-1:-1:-1;21837:132:0;;;;;:::i;:::-;;:::i;12876:26::-;;;;;;;;;;;;;;;;12689:32;;;;;;;;;;;;;;;;12831;;;;;;;;;;;;;;;;12499:30;;;;;;;;;;-1:-1:-1;12499:30:0;;;;;;;;;;;12957:25;;;;;;;;;;;;;;;;16154:225;;;;;;;;;;-1:-1:-1;16154:225:0;;;;;:::i;:::-;;:::i;9342:148::-;;;;;;;;;;;;;:::i;11555:75::-;;;;;;;;;;-1:-1:-1;11555:75:0;;;;-1:-1:-1;;;;;11555:75:0;;;13062:43;;;;;;;;;;;;;;;;26636:285;;;;;;;;;;-1:-1:-1;26636:285:0;;;;;:::i;:::-;;:::i;25477:115::-;;;;;;;;;;-1:-1:-1;25477:115:0;;;;;:::i;:::-;;:::i;12644:31::-;;;;;;;;;;;;;;;;24673:133;;;;;;;;;;-1:-1:-1;24673:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;24767:31:0;24743:4;24767:31;;;:22;:31;;;;;;;;;24673:133;12172:48;;;;;;;;;;;;;;;;9117:79;;;;;;;;;;-1:-1:-1;9155:7:0;9182:6;-1:-1:-1;;;;;9182:6:0;9117:79;;11637:69;;;;;;;;;;-1:-1:-1;11637:69:0;;;;-1:-1:-1;;;;;11637:69:0;;;25342:123;;;;;;;;;;-1:-1:-1;25342:123:0;;;;;:::i;:::-;;:::i;15832:98::-;;;;;;;;;;-1:-1:-1;15915:7:0;;;;;;;;;;;;-1:-1:-1;;;15915:7:0;;;;15832:98;;19109:269;;;;;;;;;;-1:-1:-1;19109:269:0;;;;;:::i;:::-;;:::i;13315:19::-;;;;;;;;;;-1:-1:-1;13315:19:0;;;;-1:-1:-1;;;;;13315:19:0;;;16395:172;;;;;;;;;;-1:-1:-1;16395:172:0;;;;;:::i;:::-;;:::i;26018:315::-;;;;;;;;;;-1:-1:-1;26018:315:0;;;;;:::i;:::-;;:::i;25200:130::-;;;;;;;;;;-1:-1:-1;25200:130:0;;;;;:::i;:::-;;:::i;12255:51::-;;;;;;;;;;;;;;;;27900:214;;;;;;;;;;-1:-1:-1;27900:214:0;;;;;:::i;:::-;;:::i;13222:36::-;;;;;;;;;;;;;;;;12427:31;;;;;;;;;;-1:-1:-1;12427:31:0;;;;;;;;;;;12915:27;;;;;;;;;;;;;;;;12603:34;;;;;;;;;;-1:-1:-1;12603:34:0;;;;;;;;16583:148;;;;;;;;;;-1:-1:-1;16583:148:0;;;;;:::i;:::-;-1:-1:-1;;;;;16692:18:0;;;16666:7;16692:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16583:148;25088:100;;;;;;;;;;-1:-1:-1;25088:100:0;;;;;:::i;:::-;;:::i;12536:58::-;;;;;;;;;;;;;;;;9498:244;;;;;;;;;;-1:-1:-1;9498:244:0;;;;;:::i;:::-;;:::i;13278:30::-;;;;;;;;;;-1:-1:-1;13278:30:0;;;;-1:-1:-1;;;;;13278:30:0;;;12792:26;;;;;;;;;;;;;;;;35934:224;;;;;;;;;;-1:-1:-1;35934:224:0;;;;;:::i;:::-;;:::i;27599:293::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;;;;;;;;;27708:6:::1;::::0;-1:-1:-1;;;;;27686:29:0;;::::1;27708:6:::0;::::1;27686:29;;27678:77;;;::::0;-1:-1:-1;;;27678:77:0;;9619:2:1;27678:77:0::1;::::0;::::1;9601:21:1::0;9658:2;9638:18;;;9631:30;9697:34;9677:18;;;9670:62;-1:-1:-1;;;9748:18:1;;;9741:33;9791:19;;27678:77:0::1;9591:225:1::0;27678:77:0::1;27815:6;::::0;27771:52:::1;::::0;-1:-1:-1;;;;;27815:6:0;;::::1;::::0;27771:52;::::1;::::0;::::1;::::0;27815:6:::1;::::0;27771:52:::1;27844:6;:37:::0;;-1:-1:-1;;;;;;27844:37:0::1;-1:-1:-1::0;;;;;27844:37:0;;;::::1;::::0;;;::::1;::::0;;27599:293::o;16743:167::-;16820:4;16837:39;5443:10;16860:7;16869:6;16837:8;:39::i;:::-;-1:-1:-1;16894:4:0;16743:167;;;;;:::o;27463:124::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;27547:16:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;27547:32:0;;::::1;::::0;;;::::1;::::0;;27463:124::o;26345:279::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;26425:9;-1:-1:-1;;;;;14546:25:0;::::1;14538:72;;;;-1:-1:-1::0;;;14538:72:0::1;;;;;;;:::i;:::-;26468:9:::2;::::0;-1:-1:-1;;;;;26455:22:0;;::::2;26468:9:::0;::::2;26455:22;;26447:73;;;::::0;-1:-1:-1;;;26447:73:0;;12248:2:1;26447:73:0::2;::::0;::::2;12230:21:1::0;12287:2;12267:18;;;12260:30;12326:34;12306:18;;;12299:62;-1:-1:-1;;;12377:18:1;;;12370:36;12423:19;;26447:73:0::2;12220:228:1::0;26447:73:0::2;26564:9;::::0;26536:38:::2;::::0;-1:-1:-1;;;;;26564:9:0;;::::2;::::0;26536:38;::::2;::::0;::::2;::::0;26564:9:::2;::::0;26536:38:::2;-1:-1:-1::0;26595:9:0::2;:21:::0;;-1:-1:-1;;;;;;26595:21:0::2;-1:-1:-1::0;;;;;26595:21:0;;;::::2;::::0;;;::::2;::::0;;26345:279::o;16926:318::-;17026:4;17042:36;17052:6;17060:9;17071:6;17042:9;:36::i;:::-;17089:121;17098:6;5443:10;17120:89;17158:6;17120:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17120:19:0;;;;;;:11;:19;;;;;;;;5443:10;17120:33;;;;;;;;;;:37;:89::i;:::-;17089:8;:121::i;:::-;-1:-1:-1;17228:4:0;16926:318;;;;;:::o;20570:268::-;20636:7;20675:16;;20664:7;:27;;20656:82;;;;-1:-1:-1;;;20656:82:0;;8445:2:1;20656:82:0;;;8427:21:1;8484:2;8464:18;;;8457:30;8523:34;8503:18;;;8496:62;-1:-1:-1;;;8574:18:1;;;8567:40;8624:19;;20656:82:0;8417:232:1;20656:82:0;20749:19;20771:17;:15;:17::i;:::-;20749:39;-1:-1:-1;20806:24:0;:7;20749:39;20806:11;:24::i;:::-;20799:31;20570:268;-1:-1:-1;;;20570:268:0:o;26933:518::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;27096:20:::1;27119:64;27171:11:::0;27119:47:::1;27156:9:::0;27119:47;:16;27140:10;27119:20:::1;:32::i;:::-;:36:::0;::::1;:47::i;:64::-;27096:87;;27202:12;27218:4;27202:20;27194:67;;;::::0;-1:-1:-1;;;27194:67:0;;19008:2:1;27194:67:0::1;::::0;::::1;18990:21:1::0;19047:2;19027:18;;;19020:30;19086:34;19066:18;;;19059:62;-1:-1:-1;;;19137:18:1;;;19130:32;19179:19;;27194:67:0::1;18980:224:1::0;27194:67:0::1;-1:-1:-1::0;27282:22:0::1;:41:::0;;;;27334:16:::1;:29:::0;;;;27374:15:::1;:27:::0;27412:17:::1;:31:::0;26933:518::o;21326:499::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21408:31:0;::::1;;::::0;;;:22:::1;:31:::0;;;;;;::::1;;21400:67;;;::::0;-1:-1:-1;;;21400:67:0;;11137:2:1;21400:67:0::1;::::0;::::1;11119:21:1::0;11176:2;11156:18;;;11149:30;11215:25;11195:18;;;11188:53;11258:18;;21400:67:0::1;11109:173:1::0;21400:67:0::1;21483:9;21478:340;21502:9;:16:::0;21498:20;::::1;21478:340;;;21560:7;-1:-1:-1::0;;;;;21544:23:0::1;:9;21554:1;21544:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21544:12:0::1;:23;21540:267;;;21603:9;21613:16:::0;;:20:::1;::::0;21632:1:::1;::::0;21613:20:::1;:::i;:::-;21603:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21588:9:::1;:12:::0;;-1:-1:-1;;;;;21603:31:0;;::::1;::::0;21598:1;;21588:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21588:46:0::1;-1:-1:-1::0;;;;;21588:46:0;;::::1;;::::0;;21653:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:22;;;21694:31;;;;:39;;-1:-1:-1;;21694:39:0::1;::::0;;21752:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21752:15:0;;;;;-1:-1:-1;;;;;;21752:15:0::1;::::0;;;;;21478:340:::1;21326:499:::0;:::o;21540:267::-:1;21520:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21478:340;;;;21326:499:::0;:::o;18879:218::-;5443:10;18967:4;19016:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19016:34:0;;;;;;;;;;18967:4;;18984:83;;19007:7;;19016:50;;19055:10;19016:38;:50::i;17260:776::-;1034:1;1632:7;;:19;;1624:63;;;;-1:-1:-1;;;1624:63:0;;18648:2:1;1624:63:0;;;18630:21:1;18687:2;18667:18;;;18660:30;18726:33;18706:18;;;18699:61;18777:18;;1624:63:0;18620:181:1;1624:63:0;1034:1;1765:7;:18;5443:10;;17365:66:::1;;;::::0;-1:-1:-1;;;17365:66:0;;16584:2:1;17365:66:0::1;::::0;::::1;16566:21:1::0;16623:2;16603:18;;;16596:30;16662:34;16642:18;;;16635:62;-1:-1:-1;;;16713:18:1;;;16706:31;16754:19;;17365:66:0::1;16556:223:1::0;17365:66:0::1;17468:11;::::0;-1:-1:-1;;;;;17450:30:0;;::::1;17468:11:::0;::::1;17450:30;;17442:76;;;::::0;-1:-1:-1;;;17442:76:0;;15366:2:1;17442:76:0::1;::::0;::::1;15348:21:1::0;15405:2;15385:18;;;15378:30;15444:34;15424:18;;;15417:62;-1:-1:-1;;;15495:18:1;;;15488:31;15536:19;;17442:76:0::1;15338:223:1::0;17442:76:0::1;17531:15;17549:17;17559:6;17549:9;:17::i;:::-;17531:35;;17596:6;17585:7;:17;;17577:64;;;::::0;-1:-1:-1;;;17577:64:0;;7624:2:1;17577:64:0::1;::::0;::::1;7606:21:1::0;7663:2;7643:18;;;7636:30;7702:34;7682:18;;;7675:62;-1:-1:-1;;;7753:18:1;;;7746:32;7795:19;;17577:64:0::1;7596:224:1::0;17577:64:0::1;17654:23;17680:29;17691:17;:15;:17::i;:::-;17680:6:::0;;:10:::1;:29::i;:::-;-1:-1:-1::0;;;;;17813:26:0;::::1;;::::0;;;:18:::1;:26;::::0;;;;;17654:55;;-1:-1:-1;17813:47:0::1;::::0;17654:55;17813:30:::1;:47::i;:::-;-1:-1:-1::0;;;;;17784:26:0;::::1;;::::0;;;:18:::1;:26;::::0;;;;;;;:76;;;;17875:30;;;;::::1;;17871:98;;;-1:-1:-1::0;;;;;17940:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;;:29:::1;::::0;17962:6;17940:21:::1;:29::i;:::-;-1:-1:-1::0;;;;;17920:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;:49;17871:98:::1;17982:46;17995:6;18003;18011:15;17982:11;:46::i;:::-;-1:-1:-1::0;;990:1:0;1944:22;;-1:-1:-1;;17260:776:0:o;19931:511::-;20023:7;12017:28;20051:7;:23;;20043:67;;;;-1:-1:-1;;;20043:67:0;;12655:2:1;20043:67:0;;;12637:21:1;12694:2;12674:18;;;12667:30;12733:33;12713:18;;;12706:61;12784:18;;20043:67:0;12627:181:1;20043:67:0;20121:15;20152:17;20147:288;;20187:15;20210:21;20221:7;20229:1;20210:10;:21::i;:::-;-1:-1:-1;20186:45:0;;-1:-1:-1;20246:14:0;;-1:-1:-1;;;;;20246:14:0;20147:288;-1:-1:-1;20303:8:0;;20328:23;20358:28;20369:7;20303:8;20358:10;:28::i;:::-;-1:-1:-1;20326:60:0;;-1:-1:-1;20401:22:0;;-1:-1:-1;;;;;20401:22:0;24957:123;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25041:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;25041:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24957:123::o;25600:405::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;25736:50:::1;25782:3:::0;25736:41:::1;25771:5:::0;25736:41;25761:4;25736:41;:4;25745:10;25736:8:::1;:20::i;:50::-;25725:8;:61:::0;;;25817:3:::1;-1:-1:-1::0;25805:15:0::1;25797:71;;;::::0;-1:-1:-1;;;25797:71:0;;13015:2:1;25797:71:0::1;::::0;::::1;12997:21:1::0;13054:2;13034:18;;;13027:30;13093:34;13073:18;;;13066:62;-1:-1:-1;;;13144:18:1;;;13137:41;13195:19;;25797:71:0::1;12987:233:1::0;25797:71:0::1;25880:6;:13:::0;;;;25903:12:::1;:25:::0;;;;25938:6:::1;:13:::0;25961:7:::1;:15:::0;25986:5:::1;:11:::0;25600:405::o;20850:180::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20935:31:0;::::1;;::::0;;;:22:::1;:31:::0;;;;;;::::1;;20934:32;20926:68;;;::::0;-1:-1:-1;;;20926:68:0;;10023:2:1;20926:68:0::1;::::0;::::1;10005:21:1::0;10062:2;10042:18;;;10035:30;10101:25;10081:18;;;10074:53;10144:18;;20926:68:0::1;9995:173:1::0;20926:68:0::1;21005:17;21014:7;21005:8;:17::i;:::-;20850:180:::0;:::o;21837:132::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21925:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;21925:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21837:132::o;16154:225::-;-1:-1:-1;;;;;16243:31:0;;16220:7;16243:31;;;:22;:31;;;;;;;;16239:62;;;-1:-1:-1;;;;;;16283:18:0;;;;;:9;:18;;;;;;;16154:225::o;16239:62::-;-1:-1:-1;;;;;16339:27:0;;;;;;:18;:27;;;;;;16319:48;;:19;:48::i;9342:148::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;9449:1:::1;9433:6:::0;;9412:40:::1;::::0;-1:-1:-1;;;;;9433:6:0;;::::1;::::0;9412:40:::1;::::0;9449:1;;9412:40:::1;9480:1;9463:19:::0;;-1:-1:-1;;;;;;9463:19:0::1;::::0;;9342:148::o;26636:285::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;26717:9;-1:-1:-1;;;;;14546:25:0;::::1;14538:72;;;;-1:-1:-1::0;;;14538:72:0::1;;;;;;;:::i;:::-;26760:10:::2;::::0;-1:-1:-1;;;;;26747:23:0;;::::2;26760:10:::0;::::2;26747:23;;26739:75;;;::::0;-1:-1:-1;;;26739:75:0;;14195:2:1;26739:75:0::2;::::0;::::2;14177:21:1::0;14234:2;14214:18;;;14207:30;14273:34;14253:18;;;14246:62;-1:-1:-1;;;14324:18:1;;;14317:37;14371:19;;26739:75:0::2;14167:229:1::0;26739:75:0::2;26859:10;::::0;26830:40:::2;::::0;-1:-1:-1;;;;;26859:10:0;;::::2;::::0;26830:40;::::2;::::0;::::2;::::0;26859:10:::2;::::0;26830:40:::2;-1:-1:-1::0;26891:10:0::2;:22:::0;;-1:-1:-1;;;;;;26891:22:0::2;-1:-1:-1::0;;;;;26891:22:0;;;::::2;::::0;;;::::2;::::0;;26636:285::o;25477:115::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;25567:17:::1;:6:::0;25577::::1;25567:17;:::i;:::-;25553:11;:31:::0;-1:-1:-1;25477:115:0:o;25342:123::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;25436:21:::1;:10:::0;25450:6:::1;25436:21;:::i;:::-;25417:16;:40:::0;-1:-1:-1;25342:123:0:o;19109:269::-;19202:4;19219:129;5443:10;19242:7;19251:96;19290:15;19251:96;;;;;;;;;;;;;;;;;5443:10;19251:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19251:34:0;;;;;;;;;;;;:38;:96::i;16395:172::-;16475:4;16491:42;5443:10;16515:9;16526:6;16491:9;:42::i;26018:315::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;26104:9;-1:-1:-1;;;;;14546:25:0;::::1;14538:72;;;;-1:-1:-1::0;;;14538:72:0::1;;;;;;;:::i;:::-;26147:15:::2;::::0;-1:-1:-1;;;;;26134:28:0;;::::2;26147:15:::0;::::2;26134:28;;26126:85;;;::::0;-1:-1:-1;;;26126:85:0;;17825:2:1;26126:85:0::2;::::0;::::2;17807:21:1::0;17864:2;17844:18;;;17837:30;17903:34;17883:18;;;17876:62;-1:-1:-1;;;17954:18:1;;;17947:42;18006:19;;26126:85:0::2;17797:234:1::0;26126:85:0::2;26261:15;::::0;26227:50:::2;::::0;-1:-1:-1;;;;;26261:15:0;;::::2;::::0;26227:50;::::2;::::0;::::2;::::0;26261:15:::2;::::0;26227:50:::2;-1:-1:-1::0;26298:15:0::2;:27:::0;;-1:-1:-1;;;;;;26298:27:0::2;-1:-1:-1::0;;;;;26298:27:0;;;::::2;::::0;;;::::2;::::0;;26018:315::o;25200:130::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;25300:22:::1;:11:::0;25315:6:::1;25300:22;:::i;:::-;25279:18;:43:::0;-1:-1:-1;25200:130:0:o;27900:214::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;27974:14:::1;:29:::0;;-1:-1:-1;;27974:29:0::1;::::0;::::1;;::::0;;::::1;::::0;;;::::1;28017:14:::0;28014:89:::1;;;28067:20;:15;28085:2;28067:20;:::i;:::-;28047:17;:40:::0;27900:214;:::o;25088:100::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;25157:11:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;25157:23:0;;::::1;::::0;;;::::1;::::0;;25088:100::o;9498:244::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9587:22:0;::::1;9579:73;;;::::0;-1:-1:-1;;;9579:73:0;;8856:2:1;9579:73:0::1;::::0;::::1;8838:21:1::0;8895:2;8875:18;;;8868:30;8934:34;8914:18;;;8907:62;-1:-1:-1;;;8985:18:1;;;8978:36;9031:19;;9579:73:0::1;8828:228:1::0;9579:73:0::1;9689:6;::::0;;9668:38:::1;::::0;-1:-1:-1;;;;;9668:38:0;;::::1;::::0;9689:6;::::1;::::0;9668:38:::1;::::0;::::1;9717:6;:17:::0;;-1:-1:-1;;;;;;9717:17:0::1;-1:-1:-1::0;;;;;9717:17:0;;;::::1;::::0;;;::::1;::::0;;9498:244::o;35934:224::-;9251:6;;-1:-1:-1;;;;;9251:6:0;5443:10;9251:22;9243:67;;;;-1:-1:-1;;;9243:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36036:23:0;::::1;36028:85;;;::::0;-1:-1:-1;;;36028:85:0;;8027:2:1;36028:85:0::1;::::0;::::1;8009:21:1::0;8066:2;8046:18;;;8039:30;8105:34;8085:18;;;8078:62;-1:-1:-1;;;8156:18:1;;;8149:47;8213:19;;36028:85:0::1;7999:239:1::0;36028:85:0::1;36124:26;::::0;-1:-1:-1;;;;;36124:18:0;::::1;::::0;:26;::::1;;;::::0;36143:6;;36124:26:::1;::::0;;;36143:6;36124:18;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35934:224:::0;;:::o;2913:179::-;2971:7;;3003:5;3007:1;3003;:5;:::i;:::-;2991:17;;3032:1;3027;:6;;3019:46;;;;-1:-1:-1;;;3019:46:0;;9263:2:1;3019:46:0;;;9245:21:1;9302:2;9282:18;;;9275:30;9341:29;9321:18;;;9314:57;9388:18;;3019:46:0;9235:177:1;3496:153:0;3554:7;3586:1;3582;:5;3574:44;;;;-1:-1:-1;;;3574:44:0;;11893:2:1;3574:44:0;;;11875:21:1;11932:2;11912:18;;;11905:30;11971:28;11951:18;;;11944:56;12017:18;;3574:44:0;11865:176:1;3574:44:0;3636:5;3640:1;3636;:5;:::i;3100:158::-;3158:7;3191:1;3186;:6;;3178:49;;;;-1:-1:-1;;;3178:49:0;;10375:2:1;3178:49:0;;;10357:21:1;10414:2;10394:18;;;10387:30;10453:32;10433:18;;;10426:60;10503:18;;3178:49:0;10347:180:1;3178:49:0;3245:5;3249:1;3245;:5;:::i;19390:352::-;-1:-1:-1;;;;;19484:19:0;;19476:75;;;;-1:-1:-1;;;19476:75:0;;6806:2:1;19476:75:0;;;6788:21:1;6845:2;6825:18;;;6818:30;6884:34;6864:18;;;6857:62;-1:-1:-1;;;6935:18:1;;;6928:41;6986:19;;19476:75:0;6778:233:1;19476:75:0;-1:-1:-1;;;;;19570:21:0;;19562:75;;;;-1:-1:-1;;;19562:75:0;;18238:2:1;19562:75:0;;;18220:21:1;18277:2;18257:18;;;18250:30;18316:34;18296:18;;;18289:62;-1:-1:-1;;;18367:18:1;;;18360:39;18416:19;;19562:75:0;18210:231:1;19562:75:0;-1:-1:-1;;;;;19650:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19702:32;;19765:25:1;;;19702:32:0;;19738:18:1;19702:32:0;;;;;;;;19390:352;;;:::o;30826:1892::-;-1:-1:-1;;;;;30923:20:0;;30915:70;;;;-1:-1:-1;;;30915:70:0;;7218:2:1;30915:70:0;;;7200:21:1;7257:2;7237:18;;;7230:30;7296:34;7276:18;;;7269:62;-1:-1:-1;;;7347:18:1;;;7340:35;7392:19;;30915:70:0;7190:227:1;30915:70:0;-1:-1:-1;;;;;31004:23:0;;30996:71;;;;-1:-1:-1;;;30996:71:0;;11489:2:1;30996:71:0;;;11471:21:1;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;-1:-1:-1;;;11618:18:1;;;11611:33;11661:19;;30996:71:0;11461:225:1;30996:71:0;31104:11;;-1:-1:-1;;;;;31086:30:0;;;31104:11;;31086:30;;31078:80;;;;-1:-1:-1;;;31078:80:0;;16178:2:1;31078:80:0;;;16160:21:1;16217:2;16197:18;;;16190:30;16256:34;16236:18;;;16229:62;-1:-1:-1;;;16307:18:1;;;16300:35;16352:19;;31078:80:0;16150:227:1;31078:80:0;31186:1;31177:6;:10;31169:64;;;;-1:-1:-1;;;31169:64:0;;15768:2:1;31169:64:0;;;15750:21:1;15807:2;15787:18;;;15780:30;15846:34;15826:18;;;15819:62;-1:-1:-1;;;15897:18:1;;;15890:39;15946:19;;31169:64:0;15740:231:1;31169:64:0;31262:16;;;;;;;31254:85;;;;-1:-1:-1;;;31254:85:0;;17400:2:1;31254:85:0;;;17382:21:1;17439:2;17419:18;;;17412:30;17478:34;17458:18;;;17451:62;17549:26;17529:18;;;17522:54;17593:19;;31254:85:0;17372:246:1;31254:85:0;-1:-1:-1;;;;;31361:22:0;;;;;;:14;:22;;;;;;;;31360:23;:53;;;;-1:-1:-1;;;;;;31388:25:0;;;;;;:14;:25;;;;;;;;31387:26;31360:53;31352:85;;;;-1:-1:-1;;;31352:85:0;;13427:2:1;31352:85:0;;;13409:21:1;13466:2;13446:18;;;13439:30;-1:-1:-1;;;13485:18:1;;;13478:49;13544:18;;31352:85:0;13399:169:1;31352:85:0;31494:6;;-1:-1:-1;;;;;31476:25:0;;;31494:6;;31476:25;;;;:136;;-1:-1:-1;;;;;;31583:29:0;;;;;;:18;:29;;;;;;;;31582:30;31476:136;:218;;;;-1:-1:-1;;;;;;31668:26:0;;;;;;:18;:26;;;;;;;;31667:27;31476:218;31458:375;;;31740:11;;31730:6;:21;;31722:85;;;;-1:-1:-1;;;31722:85:0;;13775:2:1;31722:85:0;;;13757:21:1;13814:2;13794:18;;;13787:30;13853:34;13833:18;;;13826:62;-1:-1:-1;;;13904:18:1;;;13897:49;13963:19;;31722:85:0;13747:241:1;31722:85:0;31877:1;31858:16;;:20;:54;;;;-1:-1:-1;;;;;;31883:29:0;;;;;;:18;:29;;;;;;;;31882:30;31858:54;:85;;;;-1:-1:-1;;;;;;31917:26:0;;;;;;:18;:26;;;;;;;;31916:27;31858:85;:115;;;;-1:-1:-1;31968:4:0;;-1:-1:-1;;;;;31947:26:0;;;31968:4;;31947:26;;31858:115;31853:327;;;31995:24;32022:20;32032:9;32022;:20::i;:::-;32098:16;;31995:47;;-1:-1:-1;32069:25:0;32088:6;31995:47;32069:25;:::i;:::-;:45;;32061:103;;;;-1:-1:-1;;;32061:103:0;;16986:2:1;32061:103:0;;;16968:21:1;17025:2;17005:18;;;16998:30;17064:34;17044:18;;;17037:62;-1:-1:-1;;;17115:18:1;;;17108:43;17168:19;;32061:103:0;16958:235:1;32061:103:0;31976:204;31853:327;32301:14;;;;;;;32331:11;;;;32326:41;;;-1:-1:-1;32359:5:0;32326:41;-1:-1:-1;;;;;32476:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;32506:29:0;;;;;;:18;:29;;;;;;;;32476:59;32473:111;;;-1:-1:-1;32566:5:0;32473:111;32604:31;32625:9;32604:20;:31::i;:::-;32646:54;32662:6;32670:9;32681:6;32689:10;32646:15;:54::i;:::-;30904:1814;30826:1892;;;:::o;3818:200::-;3938:7;3974:12;3966:6;;;;3958:29;;;;-1:-1:-1;;;3958:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4005:5:0;4009:1;4005;:5;:::i;:::-;3998:12;3818:200;-1:-1:-1;;;;3818:200:0:o;22574:171::-;22623:7;22644:15;22661;22680:19;:17;:19::i;:::-;22643:56;;-1:-1:-1;22643:56:0;-1:-1:-1;22717:20:0;22643:56;;22717:11;:20::i;:::-;22710:27;;;;22574:171;:::o;3268:220::-;3326:7;3350:6;3346:20;;-1:-1:-1;3365:1:0;3358:8;;3346:20;3377:9;3389:5;3393:1;3389;:5;:::i;:::-;3377:17;-1:-1:-1;3422:1:0;3413:5;3417:1;3377:17;3413:5;:::i;:::-;:10;3405:56;;;;-1:-1:-1;;;3405:56:0;;14603:2:1;3405:56:0;;;14585:21:1;14642:2;14622:18;;;14615:30;14681:34;14661:18;;;14654:62;-1:-1:-1;;;14732:18:1;;;14725:31;14773:19;;3405:56:0;14575:223:1;18168:699:0;18544:11;;-1:-1:-1;;;;;18544:11:0;18525:31;;;;:18;:31;;;;;;:42;;18561:5;18525:35;:42::i;:::-;18510:11;;;-1:-1:-1;;;;;18510:11:0;;;18491:31;;;;:18;:31;;;;;;;;:76;;;;18605:11;;;;;18582:35;;;;;;;;;18578:112;;;18667:11;;-1:-1:-1;;;;;18667:11:0;18657:22;;;;:9;:22;;;;;;:33;;18684:5;18657:26;:33::i;:::-;18642:11;;-1:-1:-1;;;;;18642:11:0;18632:22;;;;:9;:22;;;;;:58;18578:112;18840:11;;18823:36;;19765:25:1;;;-1:-1:-1;;;;;18840:11:0;;;;18823:36;;;;;19753:2:1;19738:18;18823:36:0;19720:76:1;21977:585:0;22054:7;;;;;;22141:38;12774:5;22141:20;:7;22153;22141:11;:20::i;:::-;:24;;:38::i;:::-;22120:59;-1:-1:-1;22190:23:0;22216;:7;22120:59;22216:11;:23::i;:::-;22190:49;;22250:19;22272:17;:15;:17::i;:::-;22250:39;-1:-1:-1;22300:15:0;22318:24;:7;22250:39;22318:11;:24::i;:::-;22300:42;-1:-1:-1;22353:18:0;22374:27;:10;22389:11;22374:14;:27::i;:::-;22353:48;-1:-1:-1;22412:23:0;22438;:7;22353:48;22438:11;:23::i;:::-;22490:7;;;;22516;-1:-1:-1;22525:15:0;;-1:-1:-1;22542:11:0;;-1:-1:-1;21977:585:0;-1:-1:-1;;;;;;21977:585:0:o;21042:276::-;-1:-1:-1;;;;;21099:27:0;;21129:1;21099:27;;;:18;:27;;;;;;:31;21096:132;;-1:-1:-1;;;;;21188:27:0;;;;;;:18;:27;;;;;;21168:48;;:19;:48::i;:::-;-1:-1:-1;;;;;21147:18:0;;;;;;:9;:18;;;;;:69;21096:132;-1:-1:-1;;;;;21238:31:0;;;;;:22;:31;;;;;:38;;-1:-1:-1;;21238:38:0;21272:4;21238:38;;;;;;21287:9;:23;;;;;;;;;;;;;;-1:-1:-1;;;;;;21287:23:0;;;;;;21042:276::o;32730:537::-;32818:11;;;;;;;32812:448;;32846:28;32877:24;32895:4;32877:9;:24::i;:::-;32976:18;;33028:8;;32846:55;;-1:-1:-1;32952:42:0;;;;33028:8;;;;;33027:9;:20;;;;;33040:7;33027:20;:35;;;;-1:-1:-1;33051:11:0;;;;;;;33027:35;:56;;;;-1:-1:-1;33079:4:0;;-1:-1:-1;;;;;33066:17:0;;;33079:4;;33066:17;33027:56;33023:212;;;33104:8;:15;;-1:-1:-1;;33104:15:0;;;;;33156:10;:8;:10::i;:::-;33203:8;:16;;-1:-1:-1;;33203:16:0;;;32831:429;;32730:537;:::o;28624:556::-;28763:8;;28824:14;;;;:54;;;;;28861:17;;28842:15;:36;;28824:54;:79;;28894:9;28824:79;;;28881:10;;28824:79;28966:4;;28812:91;;-1:-1:-1;;;;;;28956:14:0;;;28966:4;;28956:14;;;;:35;;-1:-1:-1;28987:4:0;;-1:-1:-1;;;;;28974:17:0;;;28987:4;;28974:17;;28956:35;28953:80;;;-1:-1:-1;29020:1:0;28953:80;29059:7;29053:33;;-1:-1:-1;29082:1:0;29053:33;29106:57;29126:6;29134:9;29145:6;29153:9;29106:19;:57::i;:::-;28722:458;28624:556;;;;:::o;22757:916::-;22855:16;;22808:7;;;;12017:28;22808:7;23172:342;23196:9;:16;23192:20;;23172:342;;;23273:7;23238:18;:32;23257:9;23267:1;23257:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23257:12:0;23238:32;;;;;;;;;;;;;:42;;:79;;;23310:7;23284:9;:23;23294:9;23304:1;23294:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23294:12:0;23284:23;;;;;;;;;;;;;:33;23238:79;23234:137;;;-1:-1:-1;;23340:16:0;;;12017:28;;-1:-1:-1;22757:916:0;-1:-1:-1;;22757:916:0:o;23234:137::-;23396:45;23408:18;:32;23427:9;23437:1;23427:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23427:12:0;23408:32;;;;;;;;;;;;;23396:7;;:11;:45::i;:::-;23386:55;;23466:36;23478:9;:23;23488:9;23498:1;23488:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23488:12:0;23478:23;;;;;;;;;;;;;23466:7;;:11;:36::i;:::-;23456:46;-1:-1:-1;23214:3:0;;;;:::i;:::-;;;;23172:342;;;-1:-1:-1;23528:12:0;;;:60;;-1:-1:-1;23554:16:0;;:34;;12017:28;23554:20;:34::i;:::-;23544:7;:44;23528:60;23524:105;;;-1:-1:-1;;23598:16:0;;;12017:28;;-1:-1:-1;22757:916:0;-1:-1:-1;22757:916:0:o;23524:105::-;23648:7;;23657;;-1:-1:-1;22757:916:0;-1:-1:-1;22757:916:0:o;33279:1186::-;1034:1;1632:7;;:19;;1624:63;;;;-1:-1:-1;;;1624:63:0;;18648:2:1;1624:63:0;;;18630:21:1;18687:2;18667:18;;;18660:30;18726:33;18706:18;;;18699:61;18777:18;;1624:63:0;18620:181:1;1624:63:0;1034:1;1765:7;:18;;;33363:15:::1;::::0;33331:29:::1;::::0;33363:22:::1;::::0;:15;:19:::1;:22::i;:::-;33331:54;;33396:23;33422:69;12774:5;33422:51;33451:21;33422:24;33440:4;33422:9;:24::i;:::-;:28:::0;::::1;:51::i;:69::-;33396:95;;33502:20;33525:45;33554:15;33525:24;33543:4;33525:9;:24::i;:::-;:28:::0;::::1;:45::i;:::-;33502:68:::0;-1:-1:-1;33607:21:0::1;33649:30;33502:68:::0;33649:16:::1;:30::i;:::-;33692:17;33712:40;:21;33738:13:::0;33712:25:::1;:40::i;:::-;33692:60;;33773:26;33802:55;12774:5;33802:37;33816:22;;33802:9;:13;;:37;;;;:::i;:55::-;33773:84;;33868:20;33891:49;12774:5;33891:31;33905:16;;33891:9;:13;;:31;;;;:::i;:49::-;33868:72;;33951:21;33975:50;12774:5;33975:32;33989:17;;33975:9;:13;;:32;;;;:::i;:50::-;33951:74:::0;-1:-1:-1;34036:26:0::1;34065:54;12774:5;34065:36;:9:::0;34079:21;34065:13:::1;:36::i;:54::-;34197:15;::::0;34036:83;;-1:-1:-1;34171:63:0::1;::::0;-1:-1:-1;;;;;34197:15:0::1;34215:18:::0;34171:17:::1;:63::i;:::-;34271:9;::::0;34245:51:::1;::::0;-1:-1:-1;;;;;34271:9:0::1;34283:12:::0;34245:17:::1;:51::i;:::-;34333:10;::::0;34307:53:::1;::::0;-1:-1:-1;;;;;34333:10:0::1;34346:13:::0;34307:17:::1;:53::i;:::-;34407:50;34421:15;34438:18;34407:13;:50::i;:::-;-1:-1:-1::0;;990:1:0;1944:22;;-1:-1:-1;;;;;;;33279:1186:0:o;29192:528::-;29322:15;29339:23;29364:15;29391:23;29416:19;29440:29;29451:6;29459:9;29440:10;:29::i;:::-;29321:148;;;;;;;;;;29491:84;29505:6;29513:9;29524:7;29533:15;29550:7;29559:15;29491:13;:84::i;:::-;29597:41;29607:6;29615:11;29628:9;29597;:41::i;:::-;29681:9;-1:-1:-1;;;;;29664:44:0;29673:6;-1:-1:-1;;;;;29664:44:0;;29692:15;29664:44;;;;19765:25:1;;19753:2;19738:18;;19720:76;29664:44:0;;;;;;;;29300:420;;;;;29192:528;;;;:::o;35076:623::-;35226:16;;;35240:1;35226:16;;;;;;;;35202:21;;35226:16;;;;;;;;;;-1:-1:-1;35226:16:0;35202:40;;35271:4;35253;35258:1;35253:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35253:23:0;;;:7;;;;;;;;;;:23;;;;35297:6;;:13;;;-1:-1:-1;;;35297:13:0;;;;:6;;;;;:11;;:13;;;;;35253:7;;35297:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35287:4;35292:1;35287:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35287:23:0;;;:7;;;;;;;;;:23;35355:6;;35323:53;;35340:4;;35355:6;35364:11;35323:8;:53::i;:::-;35415:6;;:215;;-1:-1:-1;;;35415:215:0;;-1:-1:-1;;;;;35415:6:0;;;;:57;;:215;;35487:11;;35415:6;;35557:4;;35584;;35604:15;;35415:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35656:35;35673:11;35686:4;35656:35;;;;;;;:::i;:::-;;;;;;;;35131:568;35076:623;:::o;35711:211::-;-1:-1:-1;;;;;35808:23:0;;35800:77;;;;-1:-1:-1;;;35800:77:0;;19411:2:1;35800:77:0;;;19393:21:1;19450:2;19430:18;;;19423:30;19489:34;19469:18;;;19462:62;-1:-1:-1;;;19540:18:1;;;19533:39;19589:19;;35800:77:0;19383:231:1;34477:587:0;34658:6;;34626:53;;34643:4;;-1:-1:-1;;;;;34658:6:0;34667:11;34626:8;:53::i;:::-;34792:6;;34723:23;;;;;;-1:-1:-1;;;;;34792:6:0;:22;34822:9;34855:4;34875:11;34723:23;;34933:7;9155;9182:6;-1:-1:-1;;;;;9182:6:0;;9117:79;34933:7;34792:189;;;;;;-1:-1:-1;;;;;;34792:189:0;;;-1:-1:-1;;;;;5325:15:1;;;34792:189:0;;;5307:34:1;5357:18;;;5350:34;;;;5400:18;;;5393:34;;;;5443:18;;;5436:34;5507:15;;;5486:19;;;5479:44;34955:15:0;5539:19:1;;;5532:35;5241:19;;34792:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34999:57;;;20927:25:1;;;20983:2;20968:18;;20961:34;;;21011:18;;;21004:34;;;34722:259:0;;-1:-1:-1;34722:259:0;;-1:-1:-1;34722:259:0;-1:-1:-1;34999:57:0;;20915:2:1;20900:18;34999:57:0;;;;;;;34548:516;;;34477:587;;:::o;29732:685::-;-1:-1:-1;;;;;29946:26:0;;;;;;:18;:26;;;;;;:39;;29977:7;29946:30;:39::i;:::-;-1:-1:-1;;;;;29917:26:0;;;;;;;:18;:26;;;;;;:68;;;;30028:29;;;;;;;:50;;30062:15;30028:33;:50::i;:::-;-1:-1:-1;;;;;29996:29:0;;;;;;;:18;:29;;;;;;;;:82;;;;30204:30;;;;;;;;;;;;30200:91;;;-1:-1:-1;;;;;30258:17:0;;;;;;:9;:17;;;;;;:30;;30280:7;30258:21;:30::i;:::-;-1:-1:-1;;;;;30238:17:0;;;;;;:9;:17;;;;;:50;30200:91;-1:-1:-1;;;;;30305:33:0;;;;;;:22;:33;;;;;;;;30301:109;;;-1:-1:-1;;;;;30366:20:0;;;;;;:9;:20;;;;;;:41;;30391:15;30366:24;:41::i;:::-;-1:-1:-1;;;;;30343:20:0;;;;;;:9;:20;;;;;:64;30301:109;29732:685;;;;;;:::o;30435:379::-;30546:1;30534:9;:13;:29;;;;-1:-1:-1;30552:11:0;;;;;;;30551:12;30534:29;30529:278;;;30580:44;30595:6;30603:11;30616:6;;30580:13;:44::i;:::-;30681:17;30701:21;30715:6;;30701:9;:13;;:21;;;;:::i;:::-;30681:41;;30737:56;30747:6;30755:11;30768:9;30787:4;30737:8;:56::i;24015:321::-;24107:12;24122:33;12774:5;24122:15;:6;24133:3;24122:10;:15::i;:33::-;24107:48;-1:-1:-1;24166:12:0;24181:21;24107:48;24190:11;24181:8;:21::i;:::-;24234:16;;24166:36;;-1:-1:-1;24234:26:0;;24166:36;24234:20;:26::i;:::-;24215:16;:45;24301:17;;:27;;24323:4;24301:21;:27::i;:::-;24281:17;:47;-1:-1:-1;;;;;24015:321:0:o;28126:486::-;28232:15;28250:33;12774:5;28250:15;:6;28261:3;28250:10;:15::i;:33::-;28232:51;-1:-1:-1;28294:15:0;28312:24;28232:51;28324:11;28312;:24::i;:::-;-1:-1:-1;;;;;28381:29:0;;;;;;:18;:29;;;;;;28294:42;;-1:-1:-1;28381:42:0;;28294;28381:33;:42::i;:::-;-1:-1:-1;;;;;28349:29:0;;;;;;:18;:29;;;;;;;;:74;;;;28437:33;;;;;;28434:107;;;-1:-1:-1;;;;;28508:20:0;;;;;;:9;:20;;;;;;:33;;28533:7;28508:24;:33::i;:::-;-1:-1:-1;;;;;28485:20:0;;;;;;:9;:20;;;;;:56;28434:107;28574:17;;:30;;28596:7;28574:21;:30::i;:::-;28554:17;:50;-1:-1:-1;;;;;;28126:486:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;687:323::-;763:6;771;824:2;812:9;803:7;799:23;795:32;792:2;;;840:1;837;830:12;792:2;879:9;866:23;898:31;923:5;898:31;:::i;:::-;948:5;1000:2;985:18;;;;972:32;;-1:-1:-1;;;782:228:1:o;1015:388::-;1083:6;1091;1144:2;1132:9;1123:7;1119:23;1115:32;1112:2;;;1160:1;1157;1150:12;1112:2;1199:9;1186:23;1218:31;1243:5;1218:31;:::i;:::-;1268:5;-1:-1:-1;1325:2:1;1310:18;;1297:32;1338:33;1297:32;1338:33;:::i;:::-;1390:7;1380:17;;;1102:301;;;;;:::o;1408:456::-;1485:6;1493;1501;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1570:1;1567;1560:12;1522:2;1609:9;1596:23;1628:31;1653:5;1628:31;:::i;:::-;1678:5;-1:-1:-1;1735:2:1;1720:18;;1707:32;1748:33;1707:32;1748:33;:::i;:::-;1512:352;;1800:7;;-1:-1:-1;;;1854:2:1;1839:18;;;;1826:32;;1512:352::o;1869:315::-;1934:6;1942;1995:2;1983:9;1974:7;1970:23;1966:32;1963:2;;;2011:1;2008;2001:12;1963:2;2050:9;2037:23;2069:31;2094:5;2069:31;:::i;:::-;2119:5;-1:-1:-1;2143:35:1;2174:2;2159:18;;2143:35;:::i;:::-;2133:45;;1953:231;;;;;:::o;2509:180::-;2565:6;2618:2;2606:9;2597:7;2593:23;2589:32;2586:2;;;2634:1;2631;2624:12;2586:2;2657:26;2673:9;2657:26;:::i;2694:180::-;2753:6;2806:2;2794:9;2785:7;2781:23;2777:32;2774:2;;;2822:1;2819;2812:12;2774:2;-1:-1:-1;2845:23:1;;2764:110;-1:-1:-1;2764:110:1:o;2879:248::-;2944:6;2952;3005:2;2993:9;2984:7;2980:23;2976:32;2973:2;;;3021:1;3018;3011:12;2973:2;3057:9;3044:23;3034:33;;3086:35;3117:2;3106:9;3102:18;3086:35;:::i;3132:306::-;3220:6;3228;3236;3289:2;3277:9;3268:7;3264:23;3260:32;3257:2;;;3305:1;3302;3295:12;3257:2;3334:9;3328:16;3318:26;;3384:2;3373:9;3369:18;3363:25;3353:35;;3428:2;3417:9;3413:18;3407:25;3397:35;;3247:191;;;;;:::o;3443:385::-;3529:6;3537;3545;3553;3606:3;3594:9;3585:7;3581:23;3577:33;3574:2;;;3623:1;3620;3613:12;3574:2;-1:-1:-1;;3646:23:1;;;3716:2;3701:18;;3688:32;;-1:-1:-1;3767:2:1;3752:18;;3739:32;;3818:2;3803:18;3790:32;;-1:-1:-1;3564:264:1;-1:-1:-1;3564:264:1:o;3833:454::-;3928:6;3936;3944;3952;3960;4013:3;4001:9;3992:7;3988:23;3984:33;3981:2;;;4030:1;4027;4020:12;3981:2;-1:-1:-1;;4053:23:1;;;4123:2;4108:18;;4095:32;;-1:-1:-1;4174:2:1;4159:18;;4146:32;;4225:2;4210:18;;4197:32;;-1:-1:-1;4276:3:1;4261:19;4248:33;;-1:-1:-1;3971:316:1;-1:-1:-1;3971:316:1:o;4292:461::-;4345:3;4383:5;4377:12;4410:6;4405:3;4398:19;4436:4;4465:2;4460:3;4456:12;4449:19;;4502:2;4495:5;4491:14;4523:1;4533:195;4547:6;4544:1;4541:13;4533:195;;;4612:13;;-1:-1:-1;;;;;4608:39:1;4596:52;;4668:12;;;;4703:15;;;;4644:1;4562:9;4533:195;;;-1:-1:-1;4744:3:1;;4353:400;-1:-1:-1;;;;;4353:400:1:o;6002:597::-;6114:4;6143:2;6172;6161:9;6154:21;6204:6;6198:13;6247:6;6242:2;6231:9;6227:18;6220:34;6272:1;6282:140;6296:6;6293:1;6290:13;6282:140;;;6391:14;;;6387:23;;6381:30;6357:17;;;6376:2;6353:26;6346:66;6311:10;;6282:140;;;6440:6;6437:1;6434:13;6431:2;;;6510:1;6505:2;6496:6;6485:9;6481:22;6477:31;6470:42;6431:2;-1:-1:-1;6583:2:1;6562:15;-1:-1:-1;;6558:29:1;6543:45;;;;6590:2;6539:54;;6123:476;-1:-1:-1;;;6123:476:1:o;10532:398::-;10734:2;10716:21;;;10773:2;10753:18;;;10746:30;10812:34;10807:2;10792:18;;10785:62;-1:-1:-1;;;10878:2:1;10863:18;;10856:32;10920:3;10905:19;;10706:224::o;14803:356::-;15005:2;14987:21;;;15024:18;;;15017:30;15083:34;15078:2;15063:18;;15056:62;15150:2;15135:18;;14977:182::o;19801:332::-;20008:6;19997:9;19990:25;20051:2;20046;20035:9;20031:18;20024:30;19971:4;20071:56;20123:2;20112:9;20108:18;20100:6;20071:56;:::i;20138:582::-;20437:6;20426:9;20419:25;20480:6;20475:2;20464:9;20460:18;20453:34;20523:3;20518:2;20507:9;20503:18;20496:31;20400:4;20544:57;20596:3;20585:9;20581:19;20573:6;20544:57;:::i;:::-;-1:-1:-1;;;;;20637:32:1;;;;20632:2;20617:18;;20610:60;-1:-1:-1;20701:3:1;20686:19;20679:35;20536:65;20409:311;-1:-1:-1;;;20409:311:1:o;21238:128::-;21278:3;21309:1;21305:6;21302:1;21299:13;21296:2;;;21315:18;;:::i;:::-;-1:-1:-1;21351:9:1;;21286:80::o;21371:217::-;21411:1;21437;21427:2;;21481:10;21476:3;21472:20;21469:1;21462:31;21516:4;21513:1;21506:15;21544:4;21541:1;21534:15;21427:2;-1:-1:-1;21573:9:1;;21417:171::o;21593:168::-;21633:7;21699:1;21695;21691:6;21687:14;21684:1;21681:21;21676:1;21669:9;21662:17;21658:45;21655:2;;;21706:18;;:::i;:::-;-1:-1:-1;21746:9:1;;21645:116::o;21766:125::-;21806:4;21834:1;21831;21828:8;21825:2;;;21839:18;;:::i;:::-;-1:-1:-1;21876:9:1;;21815:76::o;21896:135::-;21935:3;-1:-1:-1;;21956:17:1;;21953:2;;;21976:18;;:::i;:::-;-1:-1:-1;22023:1:1;22012:13;;21943:88::o;22036:127::-;22097:10;22092:3;22088:20;22085:1;22078:31;22128:4;22125:1;22118:15;22152:4;22149:1;22142:15;22168:127;22229:10;22224:3;22220:20;22217:1;22210:31;22260:4;22257:1;22250:15;22284:4;22281:1;22274:15;22300:127;22361:10;22356:3;22352:20;22349:1;22342:31;22392:4;22389:1;22382:15;22416:4;22413:1;22406:15;22564:131;-1:-1:-1;;;;;22639:31:1;;22629:42;;22619:2;;22685:1;22682;22675:12

Swarm Source

ipfs://b25dde902c6f17b42cf9ebc0e494374ddffbb2c3600b189d655898949a62b3bb
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.