ETH Price: $2,868.51 (-2.39%)

Token

Dogue (DOGUE)

Overview

Max Total Supply

10,000 DOGUE

Holders

35

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
DOGUE

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Arbiscan.io on 2021-09-10
*/

/**
DDDDDDDDDDDDD             OOOOOOOOO             GGGGGGGGGGGGGUUUUUUUU     UUUUUUUUEEEEEEEEEEEEEEEEEEEEEE
D::::::::::::DDD        OO:::::::::OO        GGG::::::::::::GU::::::U     U::::::UE::::::::::::::::::::E
D:::::::::::::::DD    OO:::::::::::::OO    GG:::::::::::::::GU::::::U     U::::::UE::::::::::::::::::::E
DDD:::::DDDDD:::::D  O:::::::OOO:::::::O  G:::::GGGGGGGG::::GUU:::::U     U:::::UUEE::::::EEEEEEEEE::::E
  D:::::D    D:::::D O::::::O   O::::::O G:::::G       GGGGGG U:::::U     U:::::U   E:::::E       EEEEEE
  D:::::D     D:::::DO:::::O     O:::::OG:::::G               U:::::D     D:::::U   E:::::E             
  D:::::D     D:::::DO:::::O     O:::::OG:::::G               U:::::D     D:::::U   E::::::EEEEEEEEEE             __
  D:::::D     D:::::DO:::::O     O:::::OG:::::G    GGGGGGGGGG U:::::D     D:::::U   E:::::::::::::::E            /  \
  D:::::D     D:::::DO:::::O     O:::::OG:::::G    G::::::::G U:::::D     D:::::U   E:::::::::::::::E           / ..|\
  D:::::D     D:::::DO:::::O     O:::::OG:::::G    GGGGG::::G U:::::D     D:::::U   E::::::EEEEEEEEEE          (_\  |_)
  D:::::D     D:::::DO:::::O     O:::::OG:::::G        G::::G U:::::D     D:::::U   E:::::E                    /  \@'   --Got any NFTs?
  D:::::D    D:::::D O::::::O   O::::::O G:::::G       G::::G U::::::U   U::::::U   E:::::E       EEEEEE      /     \
DDD:::::DDDDD:::::D  O:::::::OOO:::::::O  G:::::GGGGGGGG::::G U:::::::UUU:::::::U EE::::::EEEEEEEE:::::E  _  /  `   |
D:::::::::::::::DD    OO:::::::::::::OO    GG:::::::::::::::G  UU:::::::::::::UU  E::::::::::::::::::::E \\/  \  | _\
D::::::::::::DDD        OO:::::::::OO        GGG::::::GGG:::G    UU:::::::::UU    E::::::::::::::::::::E  \   /_ || \\_
DDDDDDDDDDDDD             OOOOOOOOO             GGGGGG   GGGG      UUUUUUUUU      EEEEEEEEEEEEEEEEEEEEEE   \____)|_) \_)


A DeFi NFT Ecosystem with glamour, operating across multiple chains
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

interface ERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

interface ERC721 is ERC165 {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () internal {
        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;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

/*
 _________
|D O G U E|
|,-.___,-.|
|\_/_ _\_/|
|  )O_O(  |
| { (_) } |
|  `-^-'  |
 ^^^^^^^^^
Implementation
 */

contract DOGUE is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;

    event ExcludeFromFee(address indexed account, bool isExcluded);

    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000 * 10**18;  //10,000
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'Dogue';
    string private _symbol = 'DOGUE'; //Woof woof
    uint8 private _decimals = 18;

    address private communityFund = address(0xA558142141C2f03e732642E70129f3db4EA491ff); //3% Community Fund for NFT drops, Raffles, Artist support and more.
    address private marketingWallet = address(0x974c0cC21847F833cD9a94Dc9E4C1Ba641F41ce3); //3% Marketing
    address private uniRouter = address(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
    address payable public _communityFund;
    address payable private _marketingWallet;

    uint256 public _taxFee = 2; //2% Frictionless yield to all holders
    uint256 private _dogueFee =  6; //Community Fund and Marketing
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousDogueFee = _dogueFee;

    address private _dogueNFTAddress = address(0); //Init

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;

    uint256 public _maxTxAmount = 10000 * 10**18;
    uint256 private _numOfTokensToExchangeForDogue = 5 * 10**15;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () public {
        _communityFund = payable(communityFund);
        _marketingWallet = payable(marketingWallet);
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniRouter); // Uniswap for Arbitrum network
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[uniRouter] = true;

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

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

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

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

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

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

    //////// Woof
    function setDogueNFTAddress(address dogueNFTContract) external onlyOwner() { //Feature eligibility check |Dogue benefits|
        _dogueNFTAddress = address(dogueNFTContract);
    }

    function dogueNFTAddress() public view returns (address) {
        return _dogueNFTAddress;
    }

    function checkDogueEligibility(address holderAddress, uint256 minimumTokensMul1000) public view returns (bool) { //1000 Multiple to enable 3 decimal points (= 0,001)
        if (balanceOf(holderAddress) >= (minimumTokensMul1000.mul(10**18).div(1000))){
            return true;
        }
        else return false;
    }

    function checkDogueNFTEligibility(address holderAddress, uint256 minimumNFT, address _dogueNFT) public view returns (bool) {
        if (ERC721(_dogueNFT).balanceOf(holderAddress) >= minimumNFT){
            return true;
        }
        else return false;
    }
    //////// Woof

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

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

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

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

    function 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 isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function isBlackListed(address account) public view returns (bool) {
        return _isBlackListedBot[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

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

    function totalFeesPercentage() public view returns (uint256) {
        return (_taxFee + _dogueFee);
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeAccount(address account) external onlyOwner() {
        require(account != uniRouter, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != uniRouter, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

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

        _previousTaxFee = _taxFee;
        _previousDogueFee = _dogueFee;

        _taxFee = 0;
        _dogueFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _dogueFee = _previousDogueFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2);
    }

    function setNumofTokensForExchange(uint256 numOfTokensToExchangeForDogue) external onlyOwner() {
    _numOfTokensToExchangeForDogue = numOfTokensToExchangeForDogue;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlackListedBot[sender], "You have no power here!");
        require(!_isBlackListedBot[msg.sender], "You have no power here!");

        if(sender != owner() && recipient != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the glamorous balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular swoooooop event woff woff.
        // also, don't swap if sender is uniswap pair. 
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForDogue;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // We need to swap the current tokens to ETH and send to the Dogue wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                sendETHToDogue(address(this).balance);
            }
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //transfer amount, it will take tax and Dogue fee woof
        _tokenTransfer(sender,recipient,amount,takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap woof
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToDogue(uint256 amount) private {
        _communityFund.transfer(amount.div(2));
        _marketingWallet.transfer(amount.div(2));
    }

    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToDogue(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

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

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

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

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

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

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

    function _takeDogue(uint256 tDogue) private {
        uint256 currentRate =  _getRate();
        uint256 rDogue = tDogue.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rDogue);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tDogue);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateDogueFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_dogueFee).div(10**2);
    }

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

    //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tDogue = calculateDogueFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tDogue);
        return (tTransferAmount, tFee, tDogue);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 0 && taxFee <= 10, 'Cant set an unreasonable fee');
        _taxFee = taxFee;
    }

    function _setFundFee(uint256 newFee) external onlyOwner() {
        require(newFee >= 0 && newFee <= 12, 'Cant set an unreasonable fee');
        _dogueFee = newFee;
    }

    function _setFundWallet(address payable newCommunityFund) external onlyOwner() {
        _communityFund = newCommunityFund;
    }

    function _setMarketingWallet(address payable newMarketing) external onlyOwner() {
        _marketingWallet = newMarketing;
    }
}

Contract Security Audit

Contract ABI

API
[{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFee","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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_communityFund","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"_setFundFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newCommunityFund","type":"address"}],"name":"_setFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketing","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holderAddress","type":"address"},{"internalType":"uint256","name":"minimumTokensMul1000","type":"uint256"}],"name":"checkDogueEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holderAddress","type":"address"},{"internalType":"uint256","name":"minimumNFT","type":"uint256"},{"internalType":"address","name":"_dogueNFT","type":"address"}],"name":"checkDogueNFTEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dogueNFTAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dogueNFTContract","type":"address"}],"name":"setDogueNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numOfTokensToExchangeForDogue","type":"uint256"}],"name":"setNumofTokensForExchange","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

69021e19e0c9bab2400000600b55690200b25812c4f53fffff19600c55610100604052600560c081905264446f67756560d81b60e09081526200004691600e91906200045b565b5060408051808201909152600580825264444f47554560d81b60209092019182526200007591600f916200045b565b5060108054601260ff199091168117610100600160a81b03191674a558142141c2f03e732642e70129f3db4ea491ff00179091556011805473974c0cc21847f833cd9a94dc9e4c1ba641f41ce36001600160a01b0319918216179091558154731b02da8cb0d097eb8d57a175b88c7d8b479975069116179055600260158190556006601681905560179190915560185560198054600160a81b6001600160b01b031990911617905569021e19e0c9bab2400000601a556611c37937e08000601b553480156200014357600080fd5b5060006200015062000448565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601054601380546001600160a01b03199081166001600160a01b03610100909404841617909155601154601480549092169216919091179055600c5460036000620001e462000448565b6001600160a01b039081168252602080830193909352604091820160002093909355601254815163c45a015560e01b81529151931692839263c45a01559260048082019391829003018186803b1580156200023e57600080fd5b505afa15801562000253573d6000803e3d6000fd5b505050506040513d60208110156200026a57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002bb57600080fd5b505afa158015620002d0573d6000803e3d6000fd5b505050506040513d6020811015620002e757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200033a57600080fd5b505af11580156200034f573d6000803e3d6000fd5b505050506040513d60208110156200036657600080fd5b50516001600160601b0319606091821b811660a0529082901b16608052600160066000620003936200044c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155601254909116835291208054909216179055620003f462000448565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a350620004f7565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200049e57805160ff1916838001178555620004ce565b82800160010185558215620004ce579182015b82811115620004ce578251825591602001919060010190620004b1565b50620004dc929150620004e0565b5090565b5b80821115620004dc5760008155600101620004e1565b60805160601c60a05160601c6135be62000535600039806111fa52806125e7525080610c6d52806128ed52806129a552806129cc52506135be6000f3fe6080604052600436106102cd5760003560e01c80637ded4d6a11610175578063d543dbeb116100dc578063ec26a00911610095578063f42938901161006f578063f429389014610b30578063f815a84214610b45578063f84354f114610b5a578063fee8f1a514610b8d576102d4565b8063ec26a00914610a87578063f2cc0c1814610aca578063f2fde38b14610afd576102d4565b8063d543dbeb14610960578063da3b16301461098a578063dd467064146109c3578063dd62ed3e146109ed578063e01af92c14610a28578063e47d606014610a54576102d4565b8063a69df4b51161012e578063a69df4b514610810578063a9059cbb14610825578063af9549e01461085e578063b6c5232414610899578063c492f046146108ae578063cba0e9961461092d576102d4565b80637ded4d6a1461071457806383f34f60146107475780638da5cb5b1461077a57806393e45d621461078f57806395d89b41146107c2578063a457c2d7146107d7576102d4565b80633bd5d173116102345780635342acb4116101ed5780636ddd1713116101c75780636ddd1713146106a257806370a08231146106b7578063715018a6146106ea5780637d1db4a5146106ff576102d4565b80635342acb4146106305780635880b873146106635780636166add31461068d576102d4565b80633bd5d173146105625780634303443d1461058c5780634549b039146105bf57806349bd5a5e146105f157806350b039661461060657806351bc3c851461061b576102d4565b806323b872dd1161028657806323b872dd1461045257806327770460146104955780632d838119146104bf578063313ce567146104e957806339509351146105145780633b124fe71461054d576102d4565b806306fdde03146102d9578063095ea7b3146103635780631694505e146103b057806318160ddd146103e1578063189981ef146104085780631ff53b601461041d576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bb7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036f57600080fd5b5061039c6004803603604081101561038657600080fd5b506001600160a01b038135169060200135610c4d565b604080519115158252519081900360200190f35b3480156103bc57600080fd5b506103c5610c6b565b604080516001600160a01b039092168252519081900360200190f35b3480156103ed57600080fd5b506103f6610c8f565b60408051918252519081900360200190f35b34801561041457600080fd5b506103f6610c95565b34801561042957600080fd5b506104506004803603602081101561044057600080fd5b50356001600160a01b0316610c9f565b005b34801561045e57600080fd5b5061039c6004803603606081101561047557600080fd5b506001600160a01b03813581169160208101359091169060400135610d19565b3480156104a157600080fd5b50610450600480360360208110156104b857600080fd5b5035610da1565b3480156104cb57600080fd5b506103f6600480360360208110156104e257600080fd5b5035610e54565b3480156104f557600080fd5b506104fe610eb6565b6040805160ff9092168252519081900360200190f35b34801561052057600080fd5b5061039c6004803603604081101561053757600080fd5b506001600160a01b038135169060200135610ebf565b34801561055957600080fd5b506103f6610f0d565b34801561056e57600080fd5b506104506004803603602081101561058557600080fd5b5035610f13565b34801561059857600080fd5b50610450600480360360208110156105af57600080fd5b50356001600160a01b0316610fed565b3480156105cb57600080fd5b506103f6600480360360408110156105e257600080fd5b50803590602001351515611166565b3480156105fd57600080fd5b506103c56111f8565b34801561061257600080fd5b506103c561121c565b34801561062757600080fd5b5061045061122b565b34801561063c57600080fd5b5061039c6004803603602081101561065357600080fd5b50356001600160a01b031661129c565b34801561066f57600080fd5b506104506004803603602081101561068657600080fd5b50356112ba565b34801561069957600080fd5b506103c561136d565b3480156106ae57600080fd5b5061039c61137c565b3480156106c357600080fd5b506103f6600480360360208110156106da57600080fd5b50356001600160a01b031661138c565b3480156106f657600080fd5b506104506113ee565b34801561070b57600080fd5b506103f661147e565b34801561072057600080fd5b506104506004803603602081101561073757600080fd5b50356001600160a01b0316611484565b34801561075357600080fd5b506104506004803603602081101561076a57600080fd5b50356001600160a01b031661163c565b34801561078657600080fd5b506103c56116b6565b34801561079b57600080fd5b50610450600480360360208110156107b257600080fd5b50356001600160a01b03166116c5565b3480156107ce57600080fd5b506102ee61173f565b3480156107e357600080fd5b5061039c600480360360408110156107fa57600080fd5b506001600160a01b0381351690602001356117a0565b34801561081c57600080fd5b50610450611808565b34801561083157600080fd5b5061039c6004803603604081101561084857600080fd5b506001600160a01b0381351690602001356118f6565b34801561086a57600080fd5b506104506004803603604081101561088157600080fd5b506001600160a01b038135169060200135151561190a565b3480156108a557600080fd5b506103f661198d565b3480156108ba57600080fd5b50610450600480360360408110156108d157600080fd5b8101906020810181356401000000008111156108ec57600080fd5b8201836020820111156108fe57600080fd5b8035906020019184602083028401116401000000008311171561092057600080fd5b9193509150351515611993565b34801561093957600080fd5b5061039c6004803603602081101561095057600080fd5b50356001600160a01b0316611ab3565b34801561096c57600080fd5b506104506004803603602081101561098357600080fd5b5035611ad1565b34801561099657600080fd5b5061039c600480360360408110156109ad57600080fd5b506001600160a01b038135169060200135611b4f565b3480156109cf57600080fd5b50610450600480360360208110156109e657600080fd5b5035611b87565b3480156109f957600080fd5b506103f660048036036040811015610a1057600080fd5b506001600160a01b0381358116916020013516611c25565b348015610a3457600080fd5b5061045060048036036020811015610a4b57600080fd5b50351515611c50565b348015610a6057600080fd5b5061039c60048036036020811015610a7757600080fd5b50356001600160a01b0316611cc6565b348015610a9357600080fd5b5061039c60048036036060811015610aaa57600080fd5b506001600160a01b03813581169160208101359160409091013516611ce4565b348015610ad657600080fd5b5061045060048036036020811015610aed57600080fd5b50356001600160a01b0316611d75565b348015610b0957600080fd5b5061045060048036036020811015610b2057600080fd5b50356001600160a01b0316611f48565b348015610b3c57600080fd5b5061045061202e565b348015610b5157600080fd5b506103f6612090565b348015610b6657600080fd5b5061045060048036036020811015610b7d57600080fd5b50356001600160a01b0316612094565b348015610b9957600080fd5b5061045060048036036020811015610bb057600080fd5b503561222a565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b5050505050905090565b6000610c61610c5a612287565b848461228b565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5490565b6016546015540190565b610ca7612287565b6000546001600160a01b03908116911614610cf7576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d26848484612377565b610d9684610d32612287565b610d91856040518060600160405280602881526020016133f5602891396001600160a01b038a16600090815260056020526040812090610d70612287565b6001600160a01b03168152602081019190915260400160002054919061269b565b61228b565b5060015b9392505050565b610da9612287565b6000546001600160a01b03908116911614610df9576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b600c811115610e4f576040805162461bcd60e51b815260206004820152601c60248201527f43616e742073657420616e20756e726561736f6e61626c652066656500000000604482015290519081900360640190fd5b601655565b6000600c54821115610e975760405162461bcd60e51b815260040180806020018281038252602a81526020018061333a602a913960400191505060405180910390fd5b6000610ea1612732565b9050610ead8382612755565b9150505b919050565b60105460ff1690565b6000610c61610ecc612287565b84610d918560056000610edd612287565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612797565b60155481565b6000610f1d612287565b6001600160a01b03811660009081526007602052604090205490915060ff1615610f785760405162461bcd60e51b815260040180806020018281038252602c815260200180613515602c913960400191505060405180910390fd5b6000610f83836127f1565b505050506001600160a01b038416600090815260036020526040902054919250610faf91905082612848565b6001600160a01b038316600090815260036020526040902055600c54610fd59082612848565b600c55600d54610fe59084612797565b600d55505050565b610ff5612287565b6000546001600160a01b03908116911614611045576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6012546001600160a01b03828116911614156110925760405162461bcd60e51b81526004018080602001828103825260248152602001806134866024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615611100576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600b548311156111bf576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816111de5760006111cf846127f1565b50939550610c65945050505050565b60006111e9846127f1565b50929550610c65945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6019546001600160a01b031690565b611233612287565b6000546001600160a01b03908116911614611283576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b600061128e3061138c565b90506112998161288a565b50565b6001600160a01b031660009081526006602052604090205460ff1690565b6112c2612287565b6000546001600160a01b03908116911614611312576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b600a811115611368576040805162461bcd60e51b815260206004820152601c60248201527f43616e742073657420616e20756e726561736f6e61626c652066656500000000604482015290519081900360640190fd5b601555565b6013546001600160a01b031681565b601954600160a81b900460ff1681565b6001600160a01b03811660009081526007602052604081205460ff16156113cc57506001600160a01b038116600090815260046020526040902054610eb1565b6001600160a01b038216600090815260036020526040902054610c6590610e54565b6113f6612287565b6000546001600160a01b03908116911614611446576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b039091169060008051602061343d833981519152908390a3600080546001600160a01b0319169055565b601a5481565b61148c612287565b6000546001600160a01b039081169116146114dc576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff16611549576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600a5481101561163857816001600160a01b0316600a828154811061156d57fe5b6000918252602090912001546001600160a01b0316141561163057600a8054600019810190811061159a57fe5b600091825260209091200154600a80546001600160a01b0390921691839081106115c057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600a80548061160957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611638565b60010161154c565b5050565b611644612287565b6000546001600160a01b03908116911614611694576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6116cd612287565b6000546001600160a01b0390811691161461171d576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c435780601f10610c1857610100808354040283529160200191610c43565b6000610c616117ad612287565b84610d918560405180606001604052806025815260200161356460259139600560006117d7612287565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061269b565b6001546001600160a01b031633146118515760405162461bcd60e51b81526004018080602001828103825260238152602001806135416023913960400191505060405180910390fd5b60025442116118a7576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061343d83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c61611903612287565b8484612377565b611912612287565b6000546001600160a01b03908116911614611962576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60025490565b61199b612287565b6000546001600160a01b039081169116146119eb576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b60005b82811015611a40578160066000868685818110611a0757fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016119ee565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6001600160a01b031660009081526007602052604090205460ff1690565b611ad9612287565b6000546001600160a01b03908116911614611b29576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b611b496064611b4383600b54612ac190919063ffffffff16565b90612755565b601a5550565b6000611b696103e8611b4384670de0b6b3a7640000612ac1565b611b728461138c565b10611b7f57506001610c65565b506000610c65565b611b8f612287565b6000546001600160a01b03908116911614611bdf576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b03841617909155168155428201600255604051819060008051602061343d833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611c58612287565b6000546001600160a01b03908116911614611ca8576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b60198054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b600082826001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611d3457600080fd5b505afa158015611d48573d6000803e3d6000fd5b505050506040513d6020811015611d5e57600080fd5b505110611d6d57506001610d9a565b506000610d9a565b611d7d612287565b6000546001600160a01b03908116911614611dcd576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6012546001600160a01b0382811691161415611e1a5760405162461bcd60e51b81526004018080602001828103825260228152602001806134f36022913960400191505060405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff1615611e88576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611ee2576001600160a01b038116600090815260036020526040902054611ec890610e54565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b611f50612287565b6000546001600160a01b03908116911614611fa0576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6001600160a01b038116611fe55760405162461bcd60e51b81526004018080602001828103825260268152602001806133646026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061343d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b612036612287565b6000546001600160a01b03908116911614612086576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b4761129981612b1a565b4790565b61209c612287565b6000546001600160a01b039081169116146120ec576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16612159576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60085481101561163857816001600160a01b03166008828154811061217d57fe5b6000918252602090912001546001600160a01b03161415612222576008805460001981019081106121aa57fe5b600091825260209091200154600880546001600160a01b0390921691839081106121d057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061160957fe5b60010161215c565b612232612287565b6000546001600160a01b03908116911614612282576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b601b55565b3390565b6001600160a01b0383166122d05760405162461bcd60e51b81526004018080602001828103825260248152602001806134cf6024913960400191505060405180910390fd5b6001600160a01b0382166123155760405162461bcd60e51b815260040180806020018281038252602281526020018061338a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166123bc5760405162461bcd60e51b81526004018080602001828103825260258152602001806134aa6025913960400191505060405180910390fd5b6001600160a01b0382166124015760405162461bcd60e51b81526004018080602001828103825260238152602001806133176023913960400191505060405180910390fd5b600081116124405760405162461bcd60e51b815260040180806020018281038252602981526020018061345d6029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff16156124a8576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b3360009081526009602052604090205460ff1615612507576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b61250f6116b6565b6001600160a01b0316836001600160a01b03161415801561254957506125336116b6565b6001600160a01b0316826001600160a01b031614155b1561258f57601a5481111561258f5760405162461bcd60e51b81526004018080602001828103825260288152602001806133ac6028913960400191505060405180910390fd5b600061259a3061138c565b9050601a5481106125aa5750601a545b601b546019549082101590600160a01b900460ff161580156125d55750601954600160a81b900460ff165b80156125de5750805b801561261c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b1561263c5761262a8261288a565b47801561263a5761263a47612b1a565b505b6001600160a01b03851660009081526006602052604090205460019060ff168061267e57506001600160a01b03851660009081526006602052604090205460ff165b15612687575060005b61269386868684612b9f565b505050505050565b6000818484111561272a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126ef5781810151838201526020016126d7565b50505050905090810190601f16801561271c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061273f612d13565b909250905061274e8282612755565b9250505090565b6000610d9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e76565b600082820183811015610d9a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006128088a612edb565b9250925092506000612818612732565b9050600080600061282b8e878787612f1d565b919e509c509a509598509396509194505050505091939550919395565b6000610d9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061269b565b6019805460ff60a01b1916600160a01b179055604080516002808252606080830184529260208301908036833701905050905030816000815181106128cb57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561294457600080fd5b505afa158015612958573d6000803e3d6000fd5b505050506040513d602081101561296e57600080fd5b505181518290600190811061297f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506129ca307f00000000000000000000000000000000000000000000000000000000000000008461228b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612a6f578181015183820152602001612a57565b505050509050019650505050505050600060405180830381600087803b158015612a9857600080fd5b505af1158015612aac573d6000803e3d6000fd5b50506019805460ff60a01b1916905550505050565b600082612ad057506000610c65565b82820282848281612add57fe5b0414610d9a5760405162461bcd60e51b81526004018080602001828103825260218152602001806133d46021913960400191505060405180910390fd5b6013546001600160a01b03166108fc612b34836002612755565b6040518115909202916000818181858888f19350505050158015612b5c573d6000803e3d6000fd5b506014546001600160a01b03166108fc612b77836002612755565b6040518115909202916000818181858888f19350505050158015611638573d6000803e3d6000fd5b80612bac57612bac612f6d565b6001600160a01b03841660009081526007602052604090205460ff168015612bed57506001600160a01b03831660009081526007602052604090205460ff16155b15612c0257612bfd848484612f9f565b612d00565b6001600160a01b03841660009081526007602052604090205460ff16158015612c4357506001600160a01b03831660009081526007602052604090205460ff165b15612c5357612bfd8484846130c3565b6001600160a01b03841660009081526007602052604090205460ff16158015612c9557506001600160a01b03831660009081526007602052604090205460ff16155b15612ca557612bfd84848461316c565b6001600160a01b03841660009081526007602052604090205460ff168015612ce557506001600160a01b03831660009081526007602052604090205460ff165b15612cf557612bfd8484846131b0565b612d0084848461316c565b80612d0d57612d0d613223565b50505050565b600c54600b546000918291825b600854811015612e4457826003600060088481548110612d3c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612da15750816004600060088481548110612d7a57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612db857600c54600b5494509450505050612e72565b612df86003600060088481548110612dcc57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612848565b9250612e3a6004600060088481548110612e0e57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612848565b9150600101612d20565b50600b54600c54612e5491612755565b821015612e6c57600c54600b54935093505050612e72565b90925090505b9091565b60008183612ec55760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126ef5781810151838201526020016126d7565b506000838581612ed157fe5b0495945050505050565b600080600080612eea85613231565b90506000612ef78661324d565b90506000612f0f82612f098986612848565b90612848565b979296509094509092505050565b6000808080612f2c8886612ac1565b90506000612f3a8887612ac1565b90506000612f488888612ac1565b90506000612f5a82612f098686612848565b939b939a50919850919650505050505050565b601554158015612f7d5750601654155b15612f8757612f9d565b6015805460175560168054601855600091829055555b565b600080600080600080612fb1876127f1565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fe39088612848565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130129087612848565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130419086612797565b6001600160a01b03891660009081526003602052604090205561306381613269565b61306d84836132f2565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806130d5876127f1565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131079087612848565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461313d9084612797565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130419086612797565b60008060008060008061317e876127f1565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130129087612848565b6000806000806000806131c2876127f1565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506131f49088612848565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131079087612848565b601754601555601854601655565b6000610c656064611b4360155485612ac190919063ffffffff16565b6000610c656064611b4360165485612ac190919063ffffffff16565b6000613273612732565b905060006132818383612ac1565b3060009081526003602052604090205490915061329e9082612797565b3060009081526003602090815260408083209390935560079052205460ff16156132ed57306000908152600460205260409020546132dc9084612797565b306000908152600460205260409020555b505050565b600c546132ff9083612848565b600c55600d5461330f9082612797565b600d55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209e99f9362cef4eadc1a9ac4c1b995998f358bbe9d4d27ff01a8a68b9c6aacd9a64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80637ded4d6a11610175578063d543dbeb116100dc578063ec26a00911610095578063f42938901161006f578063f429389014610b30578063f815a84214610b45578063f84354f114610b5a578063fee8f1a514610b8d576102d4565b8063ec26a00914610a87578063f2cc0c1814610aca578063f2fde38b14610afd576102d4565b8063d543dbeb14610960578063da3b16301461098a578063dd467064146109c3578063dd62ed3e146109ed578063e01af92c14610a28578063e47d606014610a54576102d4565b8063a69df4b51161012e578063a69df4b514610810578063a9059cbb14610825578063af9549e01461085e578063b6c5232414610899578063c492f046146108ae578063cba0e9961461092d576102d4565b80637ded4d6a1461071457806383f34f60146107475780638da5cb5b1461077a57806393e45d621461078f57806395d89b41146107c2578063a457c2d7146107d7576102d4565b80633bd5d173116102345780635342acb4116101ed5780636ddd1713116101c75780636ddd1713146106a257806370a08231146106b7578063715018a6146106ea5780637d1db4a5146106ff576102d4565b80635342acb4146106305780635880b873146106635780636166add31461068d576102d4565b80633bd5d173146105625780634303443d1461058c5780634549b039146105bf57806349bd5a5e146105f157806350b039661461060657806351bc3c851461061b576102d4565b806323b872dd1161028657806323b872dd1461045257806327770460146104955780632d838119146104bf578063313ce567146104e957806339509351146105145780633b124fe71461054d576102d4565b806306fdde03146102d9578063095ea7b3146103635780631694505e146103b057806318160ddd146103e1578063189981ef146104085780631ff53b601461041d576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bb7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036f57600080fd5b5061039c6004803603604081101561038657600080fd5b506001600160a01b038135169060200135610c4d565b604080519115158252519081900360200190f35b3480156103bc57600080fd5b506103c5610c6b565b604080516001600160a01b039092168252519081900360200190f35b3480156103ed57600080fd5b506103f6610c8f565b60408051918252519081900360200190f35b34801561041457600080fd5b506103f6610c95565b34801561042957600080fd5b506104506004803603602081101561044057600080fd5b50356001600160a01b0316610c9f565b005b34801561045e57600080fd5b5061039c6004803603606081101561047557600080fd5b506001600160a01b03813581169160208101359091169060400135610d19565b3480156104a157600080fd5b50610450600480360360208110156104b857600080fd5b5035610da1565b3480156104cb57600080fd5b506103f6600480360360208110156104e257600080fd5b5035610e54565b3480156104f557600080fd5b506104fe610eb6565b6040805160ff9092168252519081900360200190f35b34801561052057600080fd5b5061039c6004803603604081101561053757600080fd5b506001600160a01b038135169060200135610ebf565b34801561055957600080fd5b506103f6610f0d565b34801561056e57600080fd5b506104506004803603602081101561058557600080fd5b5035610f13565b34801561059857600080fd5b50610450600480360360208110156105af57600080fd5b50356001600160a01b0316610fed565b3480156105cb57600080fd5b506103f6600480360360408110156105e257600080fd5b50803590602001351515611166565b3480156105fd57600080fd5b506103c56111f8565b34801561061257600080fd5b506103c561121c565b34801561062757600080fd5b5061045061122b565b34801561063c57600080fd5b5061039c6004803603602081101561065357600080fd5b50356001600160a01b031661129c565b34801561066f57600080fd5b506104506004803603602081101561068657600080fd5b50356112ba565b34801561069957600080fd5b506103c561136d565b3480156106ae57600080fd5b5061039c61137c565b3480156106c357600080fd5b506103f6600480360360208110156106da57600080fd5b50356001600160a01b031661138c565b3480156106f657600080fd5b506104506113ee565b34801561070b57600080fd5b506103f661147e565b34801561072057600080fd5b506104506004803603602081101561073757600080fd5b50356001600160a01b0316611484565b34801561075357600080fd5b506104506004803603602081101561076a57600080fd5b50356001600160a01b031661163c565b34801561078657600080fd5b506103c56116b6565b34801561079b57600080fd5b50610450600480360360208110156107b257600080fd5b50356001600160a01b03166116c5565b3480156107ce57600080fd5b506102ee61173f565b3480156107e357600080fd5b5061039c600480360360408110156107fa57600080fd5b506001600160a01b0381351690602001356117a0565b34801561081c57600080fd5b50610450611808565b34801561083157600080fd5b5061039c6004803603604081101561084857600080fd5b506001600160a01b0381351690602001356118f6565b34801561086a57600080fd5b506104506004803603604081101561088157600080fd5b506001600160a01b038135169060200135151561190a565b3480156108a557600080fd5b506103f661198d565b3480156108ba57600080fd5b50610450600480360360408110156108d157600080fd5b8101906020810181356401000000008111156108ec57600080fd5b8201836020820111156108fe57600080fd5b8035906020019184602083028401116401000000008311171561092057600080fd5b9193509150351515611993565b34801561093957600080fd5b5061039c6004803603602081101561095057600080fd5b50356001600160a01b0316611ab3565b34801561096c57600080fd5b506104506004803603602081101561098357600080fd5b5035611ad1565b34801561099657600080fd5b5061039c600480360360408110156109ad57600080fd5b506001600160a01b038135169060200135611b4f565b3480156109cf57600080fd5b50610450600480360360208110156109e657600080fd5b5035611b87565b3480156109f957600080fd5b506103f660048036036040811015610a1057600080fd5b506001600160a01b0381358116916020013516611c25565b348015610a3457600080fd5b5061045060048036036020811015610a4b57600080fd5b50351515611c50565b348015610a6057600080fd5b5061039c60048036036020811015610a7757600080fd5b50356001600160a01b0316611cc6565b348015610a9357600080fd5b5061039c60048036036060811015610aaa57600080fd5b506001600160a01b03813581169160208101359160409091013516611ce4565b348015610ad657600080fd5b5061045060048036036020811015610aed57600080fd5b50356001600160a01b0316611d75565b348015610b0957600080fd5b5061045060048036036020811015610b2057600080fd5b50356001600160a01b0316611f48565b348015610b3c57600080fd5b5061045061202e565b348015610b5157600080fd5b506103f6612090565b348015610b6657600080fd5b5061045060048036036020811015610b7d57600080fd5b50356001600160a01b0316612094565b348015610b9957600080fd5b5061045060048036036020811015610bb057600080fd5b503561222a565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b5050505050905090565b6000610c61610c5a612287565b848461228b565b5060015b92915050565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750681565b600b5490565b6016546015540190565b610ca7612287565b6000546001600160a01b03908116911614610cf7576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d26848484612377565b610d9684610d32612287565b610d91856040518060600160405280602881526020016133f5602891396001600160a01b038a16600090815260056020526040812090610d70612287565b6001600160a01b03168152602081019190915260400160002054919061269b565b61228b565b5060015b9392505050565b610da9612287565b6000546001600160a01b03908116911614610df9576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b600c811115610e4f576040805162461bcd60e51b815260206004820152601c60248201527f43616e742073657420616e20756e726561736f6e61626c652066656500000000604482015290519081900360640190fd5b601655565b6000600c54821115610e975760405162461bcd60e51b815260040180806020018281038252602a81526020018061333a602a913960400191505060405180910390fd5b6000610ea1612732565b9050610ead8382612755565b9150505b919050565b60105460ff1690565b6000610c61610ecc612287565b84610d918560056000610edd612287565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612797565b60155481565b6000610f1d612287565b6001600160a01b03811660009081526007602052604090205490915060ff1615610f785760405162461bcd60e51b815260040180806020018281038252602c815260200180613515602c913960400191505060405180910390fd5b6000610f83836127f1565b505050506001600160a01b038416600090815260036020526040902054919250610faf91905082612848565b6001600160a01b038316600090815260036020526040902055600c54610fd59082612848565b600c55600d54610fe59084612797565b600d55505050565b610ff5612287565b6000546001600160a01b03908116911614611045576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6012546001600160a01b03828116911614156110925760405162461bcd60e51b81526004018080602001828103825260248152602001806134866024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615611100576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600b548311156111bf576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816111de5760006111cf846127f1565b50939550610c65945050505050565b60006111e9846127f1565b50929550610c65945050505050565b7f000000000000000000000000067fab8225515aa8b8675da68dcb073e89e29b0381565b6019546001600160a01b031690565b611233612287565b6000546001600160a01b03908116911614611283576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b600061128e3061138c565b90506112998161288a565b50565b6001600160a01b031660009081526006602052604090205460ff1690565b6112c2612287565b6000546001600160a01b03908116911614611312576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b600a811115611368576040805162461bcd60e51b815260206004820152601c60248201527f43616e742073657420616e20756e726561736f6e61626c652066656500000000604482015290519081900360640190fd5b601555565b6013546001600160a01b031681565b601954600160a81b900460ff1681565b6001600160a01b03811660009081526007602052604081205460ff16156113cc57506001600160a01b038116600090815260046020526040902054610eb1565b6001600160a01b038216600090815260036020526040902054610c6590610e54565b6113f6612287565b6000546001600160a01b03908116911614611446576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b039091169060008051602061343d833981519152908390a3600080546001600160a01b0319169055565b601a5481565b61148c612287565b6000546001600160a01b039081169116146114dc576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff16611549576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600a5481101561163857816001600160a01b0316600a828154811061156d57fe5b6000918252602090912001546001600160a01b0316141561163057600a8054600019810190811061159a57fe5b600091825260209091200154600a80546001600160a01b0390921691839081106115c057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600a80548061160957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611638565b60010161154c565b5050565b611644612287565b6000546001600160a01b03908116911614611694576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6116cd612287565b6000546001600160a01b0390811691161461171d576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c435780601f10610c1857610100808354040283529160200191610c43565b6000610c616117ad612287565b84610d918560405180606001604052806025815260200161356460259139600560006117d7612287565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061269b565b6001546001600160a01b031633146118515760405162461bcd60e51b81526004018080602001828103825260238152602001806135416023913960400191505060405180910390fd5b60025442116118a7576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061343d83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c61611903612287565b8484612377565b611912612287565b6000546001600160a01b03908116911614611962576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60025490565b61199b612287565b6000546001600160a01b039081169116146119eb576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b60005b82811015611a40578160066000868685818110611a0757fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016119ee565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6001600160a01b031660009081526007602052604090205460ff1690565b611ad9612287565b6000546001600160a01b03908116911614611b29576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b611b496064611b4383600b54612ac190919063ffffffff16565b90612755565b601a5550565b6000611b696103e8611b4384670de0b6b3a7640000612ac1565b611b728461138c565b10611b7f57506001610c65565b506000610c65565b611b8f612287565b6000546001600160a01b03908116911614611bdf576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b03841617909155168155428201600255604051819060008051602061343d833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611c58612287565b6000546001600160a01b03908116911614611ca8576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b60198054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b600082826001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611d3457600080fd5b505afa158015611d48573d6000803e3d6000fd5b505050506040513d6020811015611d5e57600080fd5b505110611d6d57506001610d9a565b506000610d9a565b611d7d612287565b6000546001600160a01b03908116911614611dcd576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6012546001600160a01b0382811691161415611e1a5760405162461bcd60e51b81526004018080602001828103825260228152602001806134f36022913960400191505060405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff1615611e88576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611ee2576001600160a01b038116600090815260036020526040902054611ec890610e54565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b611f50612287565b6000546001600160a01b03908116911614611fa0576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6001600160a01b038116611fe55760405162461bcd60e51b81526004018080602001828103825260268152602001806133646026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061343d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b612036612287565b6000546001600160a01b03908116911614612086576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b4761129981612b1a565b4790565b61209c612287565b6000546001600160a01b039081169116146120ec576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16612159576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60085481101561163857816001600160a01b03166008828154811061217d57fe5b6000918252602090912001546001600160a01b03161415612222576008805460001981019081106121aa57fe5b600091825260209091200154600880546001600160a01b0390921691839081106121d057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061160957fe5b60010161215c565b612232612287565b6000546001600160a01b03908116911614612282576040805162461bcd60e51b8152602060048201819052602482015260008051602061341d833981519152604482015290519081900360640190fd5b601b55565b3390565b6001600160a01b0383166122d05760405162461bcd60e51b81526004018080602001828103825260248152602001806134cf6024913960400191505060405180910390fd5b6001600160a01b0382166123155760405162461bcd60e51b815260040180806020018281038252602281526020018061338a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166123bc5760405162461bcd60e51b81526004018080602001828103825260258152602001806134aa6025913960400191505060405180910390fd5b6001600160a01b0382166124015760405162461bcd60e51b81526004018080602001828103825260238152602001806133176023913960400191505060405180910390fd5b600081116124405760405162461bcd60e51b815260040180806020018281038252602981526020018061345d6029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff16156124a8576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b3360009081526009602052604090205460ff1615612507576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b61250f6116b6565b6001600160a01b0316836001600160a01b03161415801561254957506125336116b6565b6001600160a01b0316826001600160a01b031614155b1561258f57601a5481111561258f5760405162461bcd60e51b81526004018080602001828103825260288152602001806133ac6028913960400191505060405180910390fd5b600061259a3061138c565b9050601a5481106125aa5750601a545b601b546019549082101590600160a01b900460ff161580156125d55750601954600160a81b900460ff165b80156125de5750805b801561261c57507f000000000000000000000000067fab8225515aa8b8675da68dcb073e89e29b036001600160a01b0316856001600160a01b031614155b1561263c5761262a8261288a565b47801561263a5761263a47612b1a565b505b6001600160a01b03851660009081526006602052604090205460019060ff168061267e57506001600160a01b03851660009081526006602052604090205460ff165b15612687575060005b61269386868684612b9f565b505050505050565b6000818484111561272a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126ef5781810151838201526020016126d7565b50505050905090810190601f16801561271c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061273f612d13565b909250905061274e8282612755565b9250505090565b6000610d9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e76565b600082820183811015610d9a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006128088a612edb565b9250925092506000612818612732565b9050600080600061282b8e878787612f1d565b919e509c509a509598509396509194505050505091939550919395565b6000610d9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061269b565b6019805460ff60a01b1916600160a01b179055604080516002808252606080830184529260208301908036833701905050905030816000815181106128cb57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b479975066001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561294457600080fd5b505afa158015612958573d6000803e3d6000fd5b505050506040513d602081101561296e57600080fd5b505181518290600190811061297f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506129ca307f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b479975068461228b565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b479975066001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612a6f578181015183820152602001612a57565b505050509050019650505050505050600060405180830381600087803b158015612a9857600080fd5b505af1158015612aac573d6000803e3d6000fd5b50506019805460ff60a01b1916905550505050565b600082612ad057506000610c65565b82820282848281612add57fe5b0414610d9a5760405162461bcd60e51b81526004018080602001828103825260218152602001806133d46021913960400191505060405180910390fd5b6013546001600160a01b03166108fc612b34836002612755565b6040518115909202916000818181858888f19350505050158015612b5c573d6000803e3d6000fd5b506014546001600160a01b03166108fc612b77836002612755565b6040518115909202916000818181858888f19350505050158015611638573d6000803e3d6000fd5b80612bac57612bac612f6d565b6001600160a01b03841660009081526007602052604090205460ff168015612bed57506001600160a01b03831660009081526007602052604090205460ff16155b15612c0257612bfd848484612f9f565b612d00565b6001600160a01b03841660009081526007602052604090205460ff16158015612c4357506001600160a01b03831660009081526007602052604090205460ff165b15612c5357612bfd8484846130c3565b6001600160a01b03841660009081526007602052604090205460ff16158015612c9557506001600160a01b03831660009081526007602052604090205460ff16155b15612ca557612bfd84848461316c565b6001600160a01b03841660009081526007602052604090205460ff168015612ce557506001600160a01b03831660009081526007602052604090205460ff165b15612cf557612bfd8484846131b0565b612d0084848461316c565b80612d0d57612d0d613223565b50505050565b600c54600b546000918291825b600854811015612e4457826003600060088481548110612d3c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612da15750816004600060088481548110612d7a57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612db857600c54600b5494509450505050612e72565b612df86003600060088481548110612dcc57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612848565b9250612e3a6004600060088481548110612e0e57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612848565b9150600101612d20565b50600b54600c54612e5491612755565b821015612e6c57600c54600b54935093505050612e72565b90925090505b9091565b60008183612ec55760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126ef5781810151838201526020016126d7565b506000838581612ed157fe5b0495945050505050565b600080600080612eea85613231565b90506000612ef78661324d565b90506000612f0f82612f098986612848565b90612848565b979296509094509092505050565b6000808080612f2c8886612ac1565b90506000612f3a8887612ac1565b90506000612f488888612ac1565b90506000612f5a82612f098686612848565b939b939a50919850919650505050505050565b601554158015612f7d5750601654155b15612f8757612f9d565b6015805460175560168054601855600091829055555b565b600080600080600080612fb1876127f1565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fe39088612848565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130129087612848565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130419086612797565b6001600160a01b03891660009081526003602052604090205561306381613269565b61306d84836132f2565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806130d5876127f1565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131079087612848565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461313d9084612797565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130419086612797565b60008060008060008061317e876127f1565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130129087612848565b6000806000806000806131c2876127f1565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506131f49088612848565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131079087612848565b601754601555601854601655565b6000610c656064611b4360155485612ac190919063ffffffff16565b6000610c656064611b4360165485612ac190919063ffffffff16565b6000613273612732565b905060006132818383612ac1565b3060009081526003602052604090205490915061329e9082612797565b3060009081526003602090815260408083209390935560079052205460ff16156132ed57306000908152600460205260409020546132dc9084612797565b306000908152600460205260409020555b505050565b600c546132ff9083612848565b600c55600d5461330f9082612797565b600d55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209e99f9362cef4eadc1a9ac4c1b995998f358bbe9d4d27ff01a8a68b9c6aacd9a64736f6c634300060c0033

Deployed Bytecode Sourcemap

18659:20832:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21773:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23630:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23630:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20428:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;20428:51:0;;;;;;;;;;;;;;22050:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25322:108;;;;;;;;;;;;;:::i;39358:130::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39358:130:0;-1:-1:-1;;;;;39358:130:0;;:::i;:::-;;23799:313;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23799:313:0;;;;;;;;;;;;;;;;;:::i;39037:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39037:174:0;;:::i;26267:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26267:253:0;;:::i;21959:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24120:218;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24120:218:0;;;;;;;;:::i;20125:26::-;;;;;;;;;;;;;:::i;25438:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25438:377:0;;:::i;27432:319::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27432:319:0;-1:-1:-1;;;;;27432:319:0;;:::i;25823:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25823:436:0;;;;;;;;;:::i;20486:38::-;;;;;;;;;;;;;:::i;22569:99::-;;;;;;;;;;;;;:::i;32220:156::-;;;;;;;;;;;;;:::i;28618:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28618:123:0;-1:-1:-1;;;;;28618:123:0;;:::i;38858:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38858:171:0;;:::i;20032:37::-;;;;;;;;;;;;;:::i;20559:30::-;;;;;;;;;;;;;:::i;22153:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22153:198:0;-1:-1:-1;;;;;22153:198:0;;:::i;9411:148::-;;;;;;;;;;;;;:::i;20598:44::-;;;;;;;;;;;;;:::i;27759:500::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27759:500:0;-1:-1:-1;;;;;27759:500:0;;:::i;22378:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22378:183:0;-1:-1:-1;;;;;22378:183:0;;:::i;9197:79::-;;;;;;;;;;;;;:::i;39219:131::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39219:131:0;-1:-1:-1;;;;;39219:131:0;;:::i;21864:87::-;;;;;;;;;;;;;:::i;24346:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24346:269:0;;;;;;;;:::i;10267:293::-;;;;;;;;;;;;;:::i;23304:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23304:167:0;;;;;;;;:::i;24868:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24868:137:0;;;;;;;;;;:::i;9819:89::-;;;;;;;;;;;;;:::i;25013:301::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25013:301:0;-1:-1:-1;25013:301:0;;;;:::i;24623:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24623:110:0;-1:-1:-1;;;;;24623:110:0;;:::i;28749:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28749:138:0;;:::i;22676:325::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22676:325:0;;;;;;;;:::i;9984:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9984:214:0;;:::i;23479:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23479:143:0;;;;;;;;;;:::i;32549:98::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32549:98:0;;;;:::i;24741:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24741:119:0;-1:-1:-1;;;;;24741:119:0;;:::i;23009:268::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23009:268:0;;;;;;;;;;;;;;;;;:::i;26528:410::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26528:410:0;-1:-1:-1;;;;;26528:410:0;;:::i;9567:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9567:244:0;-1:-1:-1;;;;;9567:244:0;;:::i;32384:157::-;;;;;;;;;;;;;:::i;38740:110::-;;;;;;;;;;;;;:::i;26946:478::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26946:478:0;-1:-1:-1;;;;;26946:478:0;;:::i;28895:172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28895:172:0;;:::i;21773:83::-;21843:5;21836:12;;;;;;;;-1:-1:-1;;21836:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21810:13;;21836:12;;21843:5;;21836:12;;21843:5;21836:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21773:83;:::o;23630:161::-;23705:4;23722:39;23731:12;:10;:12::i;:::-;23745:7;23754:6;23722:8;:39::i;:::-;-1:-1:-1;23779:4:0;23630:161;;;;;:::o;20428:51::-;;;:::o;22050:95::-;22130:7;;22050:95;:::o;25322:108::-;25412:9;;25402:7;;:19;25322:108;:::o;39358:130::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;39449:16:::1;:31:::0;;-1:-1:-1;;;;;;39449:31:0::1;-1:-1:-1::0;;;;;39449:31:0;;;::::1;::::0;;;::::1;::::0;;39358:130::o;23799:313::-;23897:4;23914:36;23924:6;23932:9;23943:6;23914:9;:36::i;:::-;23961:121;23970:6;23978:12;:10;:12::i;:::-;23992:89;24030:6;23992:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23992:19:0;;;;;;:11;:19;;;;;;24012:12;:10;:12::i;:::-;-1:-1:-1;;;;;23992:33:0;;;;;;;;;;;;-1:-1:-1;23992:33:0;;;:89;:37;:89::i;:::-;23961:8;:121::i;:::-;-1:-1:-1;24100:4:0;23799:313;;;;;;:::o;39037:174::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;39139:2:::1;39129:6;:12;;39106:68;;;::::0;;-1:-1:-1;;;39106:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;39185:9;:18:::0;39037:174::o;26267:253::-;26333:7;26372;;26361;:18;;26353:73;;;;-1:-1:-1;;;26353:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26437:19;26460:10;:8;:10::i;:::-;26437:33;-1:-1:-1;26488:24:0;:7;26437:33;26488:11;:24::i;:::-;26481:31;;;26267:253;;;;:::o;21959:83::-;22025:9;;;;21959:83;:::o;24120:218::-;24208:4;24225:83;24234:12;:10;:12::i;:::-;24248:7;24257:50;24296:10;24257:11;:25;24269:12;:10;:12::i;:::-;-1:-1:-1;;;;;24257:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;24257:25:0;;;:34;;;;;;;;;;;:38;:50::i;20125:26::-;;;;:::o;25438:377::-;25490:14;25507:12;:10;:12::i;:::-;-1:-1:-1;;;;;25539:19:0;;;;;;:11;:19;;;;;;25490:29;;-1:-1:-1;25539:19:0;;25538:20;25530:77;;;;-1:-1:-1;;;25530:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25619:15;25643:19;25654:7;25643:10;:19::i;:::-;-1:-1:-1;;;;;;;;;25691:15:0;;;;;;:7;:15;;;;;;25618:44;;-1:-1:-1;25691:28:0;;:15;-1:-1:-1;25618:44:0;25691:19;:28::i;:::-;-1:-1:-1;;;;;25673:15:0;;;;;;:7;:15;;;;;:46;25740:7;;:20;;25752:7;25740:11;:20::i;:::-;25730:7;:30;25784:10;;:23;;25799:7;25784:14;:23::i;:::-;25771:10;:36;-1:-1:-1;;;25438:377:0:o;27432:319::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;27527:9:::1;::::0;-1:-1:-1;;;;;27516:20:0;;::::1;27527:9:::0;::::1;27516:20;;27508:69;;;;-1:-1:-1::0;;;27508:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;27597:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;27596:27;27588:70;;;::::0;;-1:-1:-1;;;27588:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27669:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;27669:33:0::1;27698:4;27669:33:::0;;::::1;::::0;;;27713:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27713:30:0::1;::::0;;::::1;::::0;;27432:319::o;25823:436::-;25913:7;25952;;25941;:18;;25933:62;;;;;-1:-1:-1;;;25933:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26011:17;26006:246;;26046:15;26070:19;26081:7;26070:10;:19::i;:::-;-1:-1:-1;26045:44:0;;-1:-1:-1;26104:14:0;;-1:-1:-1;;;;;26104:14:0;26006:246;26153:23;26184:19;26195:7;26184:10;:19::i;:::-;-1:-1:-1;26151:52:0;;-1:-1:-1;26218:22:0;;-1:-1:-1;;;;;26218:22:0;20486:38;;;:::o;22569:99::-;22644:16;;-1:-1:-1;;;;;22644:16:0;22569:99;:::o;32220:156::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;32274:23:::1;32300:24;32318:4;32300:9;:24::i;:::-;32274:50;;32335:33;32352:15;32335:16;:33::i;:::-;9394:1;32220:156::o:0;28618:123::-;-1:-1:-1;;;;;28706:27:0;28682:4;28706:27;;;:18;:27;;;;;;;;;28618:123::o;38858:171::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;38959:2:::1;38949:6;:12;;38926:68;;;::::0;;-1:-1:-1;;;38926:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;39005:7;:16:::0;38858:171::o;20032:37::-;;;-1:-1:-1;;;;;20032:37:0;;:::o;20559:30::-;;;-1:-1:-1;;;20559:30:0;;;;;:::o;22153:198::-;-1:-1:-1;;;;;22243:20:0;;22219:7;22243:20;;;:11;:20;;;;;;;;22239:49;;;-1:-1:-1;;;;;;22272:16:0;;;;;;:7;:16;;;;;;22265:23;;22239:49;-1:-1:-1;;;;;22326:16:0;;;;;;:7;:16;;;;;;22306:37;;:19;:37::i;9411:148::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;9518:1:::1;9502:6:::0;;9481:40:::1;::::0;-1:-1:-1;;;;;9502:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9481:40:0;9518:1;;9481:40:::1;9549:1;9532:19:::0;;-1:-1:-1;;;;;;9532:19:0::1;::::0;;9411:148::o;20598:44::-;;;;:::o;27759:500::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27848:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;27840:65;;;::::0;;-1:-1:-1;;;27840:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27921:9;27916:336;27940:16;:23:::0;27936:27;::::1;27916:336;;;28012:7;-1:-1:-1::0;;;;;27989:30:0::1;:16;28006:1;27989:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27989:19:0::1;:30;27985:256;;;28062:16;28079:23:::0;;-1:-1:-1;;28079:27:0;;;28062:45;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;28040:16:::1;:19:::0;;-1:-1:-1;;;;;28062:45:0;;::::1;::::0;28057:1;;28040:19;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;28040:67:0::1;-1:-1:-1::0;;;;;28040:67:0;;::::1;;::::0;;28126:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;28126:34:0::1;::::0;;28179:16:::1;:22:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28179:22:0;;;;;-1:-1:-1;;;;;;28179:22:0::1;::::0;;;;;28220:5:::1;;27985:256;27965:3;;27916:336;;;;27759:500:::0;:::o;22378:183::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;22509:16:::1;:44:::0;;-1:-1:-1;;;;;;22509:44:0::1;-1:-1:-1::0;;;;;22509:44:0;;;::::1;::::0;;;::::1;::::0;;22378:183::o;9197:79::-;9235:7;9262:6;-1:-1:-1;;;;;9262:6:0;9197:79;:::o;39219:131::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;39309:14:::1;:33:::0;;-1:-1:-1;;;;;;39309:33:0::1;-1:-1:-1::0;;;;;39309:33:0;;;::::1;::::0;;;::::1;::::0;;39219:131::o;21864:87::-;21936:7;21929:14;;;;;;;;-1:-1:-1;;21929:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21903:13;;21929:14;;21936:7;;21929:14;;21936:7;21929:14;;;;;;;;;;;;;;;;;;;;;;;;24346:269;24439:4;24456:129;24465:12;:10;:12::i;:::-;24479:7;24488:96;24527:15;24488:96;;;;;;;;;;;;;;;;;:11;:25;24500:12;:10;:12::i;:::-;-1:-1:-1;;;;;24488:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;24488:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;10267:293::-;10319:14;;-1:-1:-1;;;;;10319:14:0;10337:10;10319:28;10311:76;;;;-1:-1:-1;;;10311:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10412:9;;10406:3;:15;10398:60;;;;;-1:-1:-1;;;10398:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10503:14;;;10495:6;;10474:44;;-1:-1:-1;;;;;10503:14:0;;;;10495:6;;;;-1:-1:-1;;;;;;;;;;;10474:44:0;;10538:14;;;10529:23;;-1:-1:-1;;;;;;10529:23:0;-1:-1:-1;;;;;10538:14:0;;;10529:23;;;;;;10267:293::o;23304:167::-;23382:4;23399:42;23409:12;:10;:12::i;:::-;23423:9;23434:6;23399:9;:42::i;24868:137::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24959:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;24959:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24868:137::o;9819:89::-;9891:9;;9819:89;:::o;25013:301::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;25130:9:::1;25126:114;25145:19:::0;;::::1;25126:114;;;25220:8;25186:18;:31;25205:8;;25214:1;25205:11;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;25205:11:0::1;25186:31:::0;;-1:-1:-1;25186:31:0;::::1;::::0;;;;;;-1:-1:-1;25186:31:0;:42;;-1:-1:-1;;25186:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;25166:3:0::1;25126:114;;;;25255:51;25287:8;;25297;25255:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;25255:51:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;25255:51:0;;-1:-1:-1;;;;;25255:51:0::1;25013:301:::0;;;:::o;24623:110::-;-1:-1:-1;;;;;24705:20:0;24681:4;24705:20;;;:11;:20;;;;;;;;;24623:110::o;28749:138::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;28843:36:::1;28873:5;28843:25;28855:12;28843:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:36::i;:::-;28828:12;:51:::0;-1:-1:-1;28749:138:0:o;22676:325::-;22781:4;22884:42;22921:4;22884:32;:20;22909:6;22884:24;:32::i;:42::-;22855:24;22865:13;22855:9;:24::i;:::-;:72;22851:142;;-1:-1:-1;22950:4:0;22943:11;;22851:142;-1:-1:-1;22988:5:0;22981:12;;9984:214;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;10065:6:::1;::::0;;;10048:23;;-1:-1:-1;;;;;;10048:23:0;;::::1;-1:-1:-1::0;;;;;10065:6:0;::::1;10048:23;::::0;;;10082:19:::1;::::0;;10124:3:::1;:10:::0;::::1;10112:9;:22:::0;10150:40:::1;::::0;10065:6;;-1:-1:-1;;;;;;;;;;;10150:40:0;10065:6;;10150:40:::1;9984:214:::0;:::o;23479:143::-;-1:-1:-1;;;;;23587:18:0;;;23560:7;23587:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23479:143::o;32549:98::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;32618:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;32618:21:0::1;-1:-1:-1::0;;;;32618:21:0;;::::1;::::0;;;::::1;::::0;;32549:98::o;24741:119::-;-1:-1:-1;;;;;24826:26:0;24802:4;24826:26;;;:17;:26;;;;;;;;;24741:119::o;23009:268::-;23126:4;23193:10;23154:9;-1:-1:-1;;;;;23147:27:0;;23175:13;23147:42;;;;;;;;;;;;;-1:-1:-1;;;;;23147:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23147:42:0;:56;23143:126;;-1:-1:-1;23226:4:0;23219:11;;23143:126;-1:-1:-1;23264:5:0;23257:12;;26528:410;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;26620:9:::1;::::0;-1:-1:-1;;;;;26609:20:0;;::::1;26620:9:::0;::::1;26609:20;;26601:67;;;;-1:-1:-1::0;;;26601:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26688:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26687:21;26679:61;;;::::0;;-1:-1:-1;;;26679:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;26754:16:0;::::1;26773:1;26754:16:::0;;;:7:::1;:16;::::0;;;;;:20;26751:108:::1;;-1:-1:-1::0;;;;;26830:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26810:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26791:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26751:108:::1;-1:-1:-1::0;;;;;26869:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26869:27:0::1;26892:4;26869:27:::0;;::::1;::::0;;;26907:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26907:23:0::1;::::0;;::::1;::::0;;26528:410::o;9567:244::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9656:22:0;::::1;9648:73;;;;-1:-1:-1::0;;;9648:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9758:6;::::0;;9737:38:::1;::::0;-1:-1:-1;;;;;9737:38:0;;::::1;::::0;9758:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;9737:38:0;::::1;9786:6;:17:::0;;-1:-1:-1;;;;;;9786:17:0::1;-1:-1:-1::0;;;;;9786:17:0;;;::::1;::::0;;;::::1;::::0;;9567:244::o;32384:157::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;32467:21:::1;32499:34;32467:21:::0;32499:14:::1;:34::i;38740:110::-:0;38821:21;38740:110;:::o;26946:478::-;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27027:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27019:60;;;::::0;;-1:-1:-1;;;27019:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27095:9;27090:327;27114:9;:16:::0;27110:20;::::1;27090:327;;;27172:7;-1:-1:-1::0;;;;;27156:23:0::1;:9;27166:1;27156:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27156:12:0::1;:23;27152:254;;;27215:9;27225:16:::0;;-1:-1:-1;;27225:20:0;;;27215:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;27200:9:::1;:12:::0;;-1:-1:-1;;;;;27215:31:0;;::::1;::::0;27210:1;;27200:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27200:46:0::1;-1:-1:-1::0;;;;;27200:46:0;;::::1;;::::0;;27265:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27304:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27304:28:0::1;::::0;;27351:9:::1;:15:::0;;;::::1;;;27152:254;27132:3;;27090:327;;28895:172:::0;9334:12;:10;:12::i;:::-;9324:6;;-1:-1:-1;;;;;9324:6:0;;;:22;;;9316:67;;;;;-1:-1:-1;;;9316:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9316:67:0;;;;;;;;;;;;;;;28997:30:::1;:62:::0;28895:172::o;2030:106::-;2118:10;2030:106;:::o;29075:337::-;-1:-1:-1;;;;;29168:19:0;;29160:68;;;;-1:-1:-1;;;29160:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29247:21:0;;29239:68;;;;-1:-1:-1;;;29239:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29320:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29372:32;;;;;;;;;;;;;;;;;29075:337;;;:::o;29420:2015::-;-1:-1:-1;;;;;29517:20:0;;29509:70;;;;-1:-1:-1;;;29509:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29598:23:0;;29590:71;;;;-1:-1:-1;;;29590:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29689:1;29680:6;:10;29672:64;;;;-1:-1:-1;;;29672:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29756:25:0;;;;;;:17;:25;;;;;;;;29755:26;29747:62;;;;;-1:-1:-1;;;29747:62:0;;;;;;;;;;;;-1:-1:-1;;;29747:62:0;;;;;;;;;;;;;;;29847:10;29829:29;;;;:17;:29;;;;;;;;29828:30;29820:66;;;;;-1:-1:-1;;;29820:66:0;;;;;;;;;;;;-1:-1:-1;;;29820:66:0;;;;;;;;;;;;;;;29912:7;:5;:7::i;:::-;-1:-1:-1;;;;;29902:17:0;:6;-1:-1:-1;;;;;29902:17:0;;;:41;;;;;29936:7;:5;:7::i;:::-;-1:-1:-1;;;;;29923:20:0;:9;-1:-1:-1;;;;;29923:20:0;;;29902:41;29899:134;;;29976:12;;29966:6;:22;;29958:75;;;;-1:-1:-1;;;29958:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30316:28;30347:24;30365:4;30347:9;:24::i;:::-;30316:55;;30411:12;;30387:20;:36;30384:112;;-1:-1:-1;30472:12:0;;30384:112;30559:30;;30605:6;;30535:54;;;;;-1:-1:-1;;;30605:6:0;;;;30604:7;:22;;;;-1:-1:-1;30615:11:0;;-1:-1:-1;;;30615:11:0;;;;30604:22;:45;;;;;30630:19;30604:45;:72;;;;;30663:13;-1:-1:-1;;;;;30653:23:0;:6;-1:-1:-1;;;;;30653:23:0;;;30604:72;30600:410;;;30780:38;30797:20;30780:16;:38::i;:::-;30864:21;30903:22;;30900:99;;30946:37;30961:21;30946:14;:37::i;:::-;30600:410;;-1:-1:-1;;;;;31202:26:0;;31083:12;31202:26;;;:18;:26;;;;;;31098:4;;31202:26;;;:59;;-1:-1:-1;;;;;;31232:29:0;;;;;;:18;:29;;;;;;;;31202:59;31199:105;;;-1:-1:-1;31287:5:0;31199:105;31380:47;31395:6;31402:9;31412:6;31419:7;31380:14;:47::i;:::-;29420:2015;;;;;;:::o;3422:192::-;3508:7;3544:12;3536:6;;;;3528:29;;;;-1:-1:-1;;;3528:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3580:5:0;;;3422:192::o;37810:163::-;37851:7;37872:15;37889;37908:19;:17;:19::i;:::-;37871:56;;-1:-1:-1;37871:56:0;-1:-1:-1;37945:20:0;37871:56;;37945:11;:20::i;:::-;37938:27;;;;37810:163;:::o;3880:132::-;3938:7;3965:39;3969:1;3972;3965:39;;;;;;;;;;;;;;;;;:3;:39::i;3085:181::-;3143:7;3175:5;;;3199:6;;;;3191:46;;;;;-1:-1:-1;;;3191:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;36608:452;36667:7;36676;36685;36694;36703;36712;36733:23;36758:12;36772:14;36790:20;36802:7;36790:11;:20::i;:::-;36732:78;;;;;;36821:19;36844:10;:8;:10::i;:::-;36821:33;;36866:15;36883:23;36908:12;36924:47;36936:7;36945:4;36951:6;36959:11;36924;:47::i;:::-;36865:106;;-1:-1:-1;36865:106:0;-1:-1:-1;36865:106:0;-1:-1:-1;37022:15:0;;-1:-1:-1;37039:4:0;;-1:-1:-1;37045:6:0;;-1:-1:-1;;;;;36608:452:0;;;;;;;:::o;3278:136::-;3336:7;3363:43;3367:1;3370;3363:43;;;;;;;;;;;;;;;;;:3;:43::i;31443:605::-;20864:6;:13;;-1:-1:-1;;;;20864:13:0;-1:-1:-1;;;20864:13:0;;;31604:16:::1;::::0;;31618:1:::1;31604:16:::0;;;31580:21:::1;31604:16:::0;;::::1;::::0;;31580:21;31604:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;31604:16:0::1;31580:40;;31649:4;31631;31636:1;31631:7;;;;;;;;;;;;;:23;-1:-1:-1::0;;;;;31631:23:0::1;;;-1:-1:-1::0;;;;;31631:23:0::1;;;::::0;::::1;31675:15;-1:-1:-1::0;;;;;31675:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31675:22:0;31665:7;;:4;;31670:1:::1;::::0;31665:7;::::1;;;;;;;;;;:32;-1:-1:-1::0;;;;;31665:32:0::1;;;-1:-1:-1::0;;;;;31665:32:0::1;;;::::0;::::1;31710:62;31727:4;31742:15;31760:11;31710:8;:62::i;:::-;31816:15;-1:-1:-1::0;;;;;31816:66:0::1;;31897:11;31923:1;31967:4;31994;32014:15;31816:224;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31816:224:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;20900:6:0;:14;;-1:-1:-1;;;;20900:14:0;;;-1:-1:-1;;;;31443:605:0:o;3622:250::-;3680:7;3704:6;3700:47;;-1:-1:-1;3734:1:0;3727:8;;3700:47;3771:5;;;3775:1;3771;:5;:1;3795:5;;;;;:10;3787:56;;;;-1:-1:-1;;;3787:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32056:156;32115:14;;-1:-1:-1;;;;;32115:14:0;:38;32139:13;:6;32150:1;32139:10;:13::i;:::-;32115:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32164:16:0;;-1:-1:-1;;;;;32164:16:0;:40;32190:13;:6;32201:1;32190:10;:13::i;:::-;32164:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32655:819;32767:7;32763:40;;32789:14;:12;:14::i;:::-;-1:-1:-1;;;;;32820:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32844:22:0;;;;;;:11;:22;;;;;;;;32843:23;32820:46;32816:597;;;32883:48;32905:6;32913:9;32924:6;32883:21;:48::i;:::-;32816:597;;;-1:-1:-1;;;;;32954:19:0;;;;;;:11;:19;;;;;;;;32953:20;:46;;;;-1:-1:-1;;;;;;32977:22:0;;;;;;:11;:22;;;;;;;;32953:46;32949:464;;;33016:46;33036:6;33044:9;33055:6;33016:19;:46::i;32949:464::-;-1:-1:-1;;;;;33085:19:0;;;;;;:11;:19;;;;;;;;33084:20;:47;;;;-1:-1:-1;;;;;;33109:22:0;;;;;;:11;:22;;;;;;;;33108:23;33084:47;33080:333;;;33148:44;33166:6;33174:9;33185:6;33148:17;:44::i;33080:333::-;-1:-1:-1;;;;;33214:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33237:22:0;;;;;;:11;:22;;;;;;;;33214:45;33210:203;;;33276:48;33298:6;33306:9;33317:6;33276:21;:48::i;33210:203::-;33357:44;33375:6;33383:9;33394:6;33357:17;:44::i;:::-;33429:7;33425:41;;33451:15;:13;:15::i;:::-;32655:819;;;;:::o;37981:555::-;38078:7;;38114;;38031;;;;;38132:289;38156:9;:16;38152:20;;38132:289;;;38222:7;38198;:21;38206:9;38216:1;38206:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38206:12:0;38198:21;;;;;;;;;;;;;:31;;:66;;;38257:7;38233;:21;38241:9;38251:1;38241:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38241:12:0;38233:21;;;;;;;;;;;;;:31;38198:66;38194:97;;;38274:7;;38283;;38266:25;;;;;;;;;38194:97;38316:34;38328:7;:21;38336:9;38346:1;38336:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38336:12:0;38328:21;;;;;;;;;;;;;38316:7;;:11;:34::i;:::-;38306:44;;38375:34;38387:7;:21;38395:9;38405:1;38395:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38395:12:0;38387:21;;;;;;;;;;;;;38375:7;;:11;:34::i;:::-;38365:44;-1:-1:-1;38174:3:0;;38132:289;;;-1:-1:-1;38457:7:0;;38445;;:20;;:11;:20::i;:::-;38435:7;:30;38431:61;;;38475:7;;38484;;38467:25;;;;;;;;38431:61;38511:7;;-1:-1:-1;38520:7:0;-1:-1:-1;37981:555:0;;;:::o;4020:278::-;4106:7;4141:12;4134:5;4126:28;;;;-1:-1:-1;;;4126:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4165:9;4181:1;4177;:5;;;;;;;4020:278;-1:-1:-1;;;;;4020:278:0:o;37068:314::-;37128:7;37137;37146;37166:12;37181:24;37197:7;37181:15;:24::i;:::-;37166:39;;37216:14;37233:26;37251:7;37233:17;:26::i;:::-;37216:43;-1:-1:-1;37270:23:0;37296:29;37216:43;37296:17;:7;37308:4;37296:11;:17::i;:::-;:21;;:29::i;:::-;37270:55;37361:4;;-1:-1:-1;37367:6:0;;-1:-1:-1;37068:314:0;;-1:-1:-1;;;37068:314:0:o;37390:412::-;37500:7;;;;37556:24;:7;37568:11;37556;:24::i;:::-;37538:42;-1:-1:-1;37591:12:0;37606:21;:4;37615:11;37606:8;:21::i;:::-;37591:36;-1:-1:-1;37638:14:0;37655:23;:6;37666:11;37655:10;:23::i;:::-;37638:40;-1:-1:-1;37689:23:0;37715:29;37638:40;37715:17;:7;37727:4;37715:11;:17::i;:29::-;37763:7;;;;-1:-1:-1;37789:4:0;;-1:-1:-1;37390:412:0;;-1:-1:-1;;;;;;;37390:412:0:o;28267:218::-;28313:7;;:12;:30;;;;-1:-1:-1;28329:9:0;;:14;28313:30;28310:42;;;28345:7;;28310:42;28382:7;;;28364:15;:25;28420:9;;;28400:17;:29;-1:-1:-1;28442:11:0;;;;28464:13;28267:218;:::o;34551:551::-;34654:15;34671:23;34696:12;34710:23;34735:12;34749:14;34767:19;34778:7;34767:10;:19::i;:::-;-1:-1:-1;;;;;34815:15:0;;;;;;:7;:15;;;;;;34653:133;;-1:-1:-1;34653:133:0;;-1:-1:-1;34653:133:0;;-1:-1:-1;34653:133:0;-1:-1:-1;34653:133:0;-1:-1:-1;34653:133:0;-1:-1:-1;34815:28:0;;34835:7;34815:19;:28::i;:::-;-1:-1:-1;;;;;34797:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34872:7;:15;;;;:28;;34892:7;34872:19;:28::i;:::-;-1:-1:-1;;;;;34854:15:0;;;;;;;:7;:15;;;;;;:46;;;;34932:18;;;;;;;:39;;34955:15;34932:22;:39::i;:::-;-1:-1:-1;;;;;34911:18:0;;;;;;:7;:18;;;;;:60;34982:18;34993:6;34982:10;:18::i;:::-;35011:23;35023:4;35029;35011:11;:23::i;:::-;35067:9;-1:-1:-1;;;;;35050:44:0;35059:6;-1:-1:-1;;;;;35050:44:0;;35078:15;35050:44;;;;;;;;;;;;;;;;;;34551:551;;;;;;;;;:::o;33980:563::-;34081:15;34098:23;34123:12;34137:23;34162:12;34176:14;34194:19;34205:7;34194:10;:19::i;:::-;-1:-1:-1;;;;;34242:15:0;;;;;;:7;:15;;;;;;34080:133;;-1:-1:-1;34080:133:0;;-1:-1:-1;34080:133:0;;-1:-1:-1;34080:133:0;-1:-1:-1;34080:133:0;-1:-1:-1;34080:133:0;-1:-1:-1;34242:28:0;;34080:133;34242:19;:28::i;:::-;-1:-1:-1;;;;;34224:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34302:18;;;;;:7;:18;;;;;:39;;34325:15;34302:22;:39::i;:::-;-1:-1:-1;;;;;34281:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34373:7;:18;;;;:39;;34396:15;34373:22;:39::i;33482:490::-;33581:15;33598:23;33623:12;33637:23;33662:12;33676:14;33694:19;33705:7;33694:10;:19::i;:::-;-1:-1:-1;;;;;33742:15:0;;;;;;:7;:15;;;;;;33580:133;;-1:-1:-1;33580:133:0;;-1:-1:-1;33580:133:0;;-1:-1:-1;33580:133:0;-1:-1:-1;33580:133:0;-1:-1:-1;33580:133:0;-1:-1:-1;33742:28:0;;33580:133;33742:19;:28::i;35110:622::-;35213:15;35230:23;35255:12;35269:23;35294:12;35308:14;35326:19;35337:7;35326:10;:19::i;:::-;-1:-1:-1;;;;;35374:15:0;;;;;;:7;:15;;;;;;35212:133;;-1:-1:-1;35212:133:0;;-1:-1:-1;35212:133:0;;-1:-1:-1;35212:133:0;-1:-1:-1;35212:133:0;-1:-1:-1;35212:133:0;-1:-1:-1;35374:28:0;;35394:7;35374:19;:28::i;:::-;-1:-1:-1;;;;;35356:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35431:7;:15;;;;:28;;35451:7;35431:19;:28::i;28493:117::-;28547:15;;28537:7;:25;28585:17;;28573:9;:29;28493:117::o;36079:130::-;36143:7;36170:31;36195:5;36170:20;36182:7;;36170;:11;;:20;;;;:::i;36217:134::-;36283:7;36310:33;36337:5;36310:22;36322:9;;36310:7;:11;;:22;;;;:::i;35740:331::-;35795:19;35818:10;:8;:10::i;:::-;35795:33;-1:-1:-1;35839:14:0;35856:23;:6;35795:33;35856:10;:23::i;:::-;35931:4;35915:22;;;;:7;:22;;;;;;35839:40;;-1:-1:-1;35915:34:0;;35839:40;35915:26;:34::i;:::-;35906:4;35890:22;;;;:7;:22;;;;;;;;:59;;;;35963:11;:26;;;;;;35960:103;;;36045:4;36029:22;;;;:7;:22;;;;;;:34;;36056:6;36029:26;:34::i;:::-;36020:4;36004:22;;;;:7;:22;;;;;:59;35960:103;35740:331;;;:::o;36359:147::-;36437:7;;:17;;36449:4;36437:11;:17::i;:::-;36427:7;:27;36478:10;;:20;;36493:4;36478:14;:20::i;:::-;36465:10;:33;-1:-1:-1;;36359:147:0:o

Swarm Source

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