POL Price: $0.311522 (-3.41%)
 

Overview

Max Total Supply

679,849,326.251771000000000001 CLHC

Holders

4,034

Market

Price

$0.00 @ 0.000000 POL

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000…000
Balance
0 CLHC

Value
$0.00
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
TokenCLCH

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2024-06-24
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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) {
    // Solidity only automatically asserts when dividing by 0
    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;
  }
}

contract Ownable is Context {
  address public _owner;

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

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

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

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

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

  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);


    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}


contract Authorized is Ownable {
  mapping(uint8 => mapping(address => bool)) public permissions;
  string[] public permissionIndex;

  constructor() {
    permissionIndex.push("admin");
    permissionIndex.push("financial");
    permissionIndex.push("controller");
    permissionIndex.push("operator");

    permissions[0][_msgSender()] = true;
  }

  modifier isAuthorized(uint8 index) {
    if (!permissions[index][_msgSender()]) {
      revert(string(abi.encodePacked("Account ",Strings.toHexString(uint160(_msgSender()), 20)," does not have ", permissionIndex[index], " permission")));
    }
    _;
  }

  function safeApprove(address token, address spender, uint256 amount) external isAuthorized(0) {
    IERC20(token).approve(spender, amount);
  }

  function safeWithdraw() external isAuthorized(0) {
    uint256 contractBalance = address(this).balance;
    payable(_msgSender()).transfer(contractBalance);
  }

  function grantPermission(address operator, uint8[] memory grantedPermissions) external isAuthorized(0) {
    for (uint8 i = 0; i < grantedPermissions.length; i++) permissions[grantedPermissions[i]][operator] = true;
  }

  function revokePermission(address operator, uint8[] memory revokedPermissions) external isAuthorized(0) {
    for (uint8 i = 0; i < revokedPermissions.length; i++) permissions[revokedPermissions[i]][operator]  = false;
  }

  function grantAllPermissions(address operator) public isAuthorized(0) {
    for (uint8 i = 0; i < permissionIndex.length; i++) permissions[i][operator]  = true;
  }

  function revokeAllPermissions(address operator) external isAuthorized(0) {
    for (uint8 i = 0; i < permissionIndex.length; i++) permissions[i][operator]  = false;
  }

}


interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata, Authorized {

    using SafeMath for uint;
    
    mapping(address => uint256) private _balances;

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

    mapping (address => bool) public exemptFee;
    
    mapping (address => bool) public exemptFeeReceiver;


    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    address _ownerMint;

    //CLASHNODE
    address public walletADM;
    address public walletBURN;

    mapping(address => bool) public blackList;

    bool public paused;

    bool private _noReentrancy = false;

    receive() external payable { }


    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }


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


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


    function decimals() public view virtual override returns (uint8) {
        return 18;
    }


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


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


    function transfer(address to, uint256 amount) public virtual override returns (bool) {

        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }


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


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


    function setWalletADM(address account) public isAuthorized(0) { 
      walletADM = account; 
      exemptFee[walletADM] = true; 
      exemptFeeReceiver[walletADM] = true; 
      }

    function setWalletBURN(address account) public isAuthorized(0) { 
      walletBURN = account; 
      exemptFee[walletBURN] = true;
      exemptFeeReceiver[walletBURN] = true; 
      }

    function setExemptFee(address account, bool operation) public isAuthorized(2) { 
        exemptFee[account] = operation; 
    }
    
    function setExemptFeeReceiver(address account, bool operation) public isAuthorized(2) {
         exemptFeeReceiver[account] = operation; 
    } 

    function safeOtherTokens(address token, address payable receiv, uint amount) external isAuthorized(0) {
      if(token == address(0)) { receiv.transfer(amount); } else { IERC20(token).transfer(receiv, amount); }
    }    

    function entrancy(bool operation) external isAuthorized(0) {
      _noReentrancy = operation;
    }


    function pause(bool state) public isAuthorized(0) {
        paused = state;
    }

    function setBlackList(address account, bool operation) public isAuthorized(0) {
        blackList[account] = operation;
    }


    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }


    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }


    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(!_noReentrancy, "ReentrancyGuard: reentrant call happens");

        // blacklist
        if (!permissions[2][_msgSender()]) {
            require(!blackList[from], string(abi.encodePacked("Address ", toAsciiString(from), " is blacklisted")));
            require(!blackList[to], string(abi.encodePacked("Address ", toAsciiString(to), " is blacklisted")));
        }

        _noReentrancy = true;
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = balanceOf(from);
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }

        uint256 feeAmount = 0;
        if (!paused && !exemptFee[from] && !exemptFeeReceiver[to]) {
            feeAmount = amount / 100; // 1% fee
            amount -= feeAmount;
            _balances[to] += amount; // 99%
            _balances[walletADM] += feeAmount; // 1%
            emit Transfer(from, to, amount);
            emit Transfer(from, walletADM, feeAmount);
        } else {
            _balances[to] += amount; // 100%
            emit Transfer(from, to, amount);
        }

        _noReentrancy = false;
        _afterTokenTransfer(from, to, amount);
    }

    function toAsciiString(address x) internal pure returns (string memory) {
        bytes memory s = new bytes(42);
        s[0] = '0';
        s[1] = 'x';
        for (uint i = 0; i < 20; i++) {
            uint8 b = uint8(uint(uint160(x)) / (2 ** (8 * (19 - i))));
            uint8 hi = uint8(b) / 16;
            uint8 lo = uint8(b) - 16 * hi;
            s[2 + i * 2] = char(hi);
            s[3 + i * 2] = char(lo);
        }
        return string(s);
    }

    function char(uint8 b) internal pure returns (bytes1 c) {
        if (b < 10) return bytes1(b + 0x30);
        else return bytes1(b + 0x57);
    }


    function toString(address account) internal pure returns (string memory) {
        return toAsciiString(account);
    }



    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }


    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }


    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }


    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}


    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {

        from = from;
        amount = amount;
        if (to == walletBURN) {
            _burn(walletBURN,_balances[walletBURN]);
        }
    }
}




contract TokenCLCH is ERC20 {
    constructor(
    ) ERC20("ClashHub Coin", "CLHC") {
        _mint(msg.sender, 1000000000 * (10 ** 18));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","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":"bool","name":"operation","type":"bool"}],"name":"entrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFeeReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"grantAllPermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint8[]","name":"grantedPermissions","type":"uint8[]"}],"name":"grantPermission","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"permissionIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"permissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"revokeAllPermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint8[]","name":"revokedPermissions","type":"uint8[]"}],"name":"revokePermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"safeApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable","name":"receiv","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"safeOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"operation","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"operation","type":"bool"}],"name":"setExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"operation","type":"bool"}],"name":"setExemptFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setWalletADM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setWalletBURN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"walletADM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletBURN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e805461ff001916905534801561001a575f80fd5b506040518060400160405280600d81526020016c21b630b9b4243ab11021b7b4b760991b81525060405180604001604052806004815260200163434c484360e01b8152505f61006d61025760201b60201c565b5f80546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001810182555f9190915260408051808201909152600581526430b236b4b760d91b60208201525f80516020613634833981519152909101906100fd908261053a565b50600280546001810182555f91909152604080518082019091526009815268199a5b985b98da585b60ba1b60208201525f8051602061363483398151915290910190610149908261053a565b50600280546001810182555f9190915260408051808201909152600a81526931b7b73a3937b63632b960b11b60208201525f8051602061363483398151915290910190610196908261053a565b50600280546001810182555f9190915260408051808201909152600881526737b832b930ba37b960c11b60208201525f80516020613634833981519152909101906101e1908261053a565b50335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260409020805460ff191660011790556008610226838261053a565b506009610233828261053a565b505050610252336b033b2e3c9fd0803ce800000061025b60201b60201c565b610639565b3390565b6001600160a01b0382166102b65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060075f8282546102c7919061060d565b90915550506001600160a01b0382165f90815260036020526040812080548392906102f390849061060d565b90915550506040518181526001600160a01b038316905f905f805160206136548339815191529060200160405180910390a36103305f8383610339565b5050565b505050565b600c546001600160a01b039081169083160361033457600c546001600160a01b03165f818152600360205260409020546103349190816103c55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016102ad565b6001600160a01b0382165f90815260036020526040902054818110156104385760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016102ad565b6001600160a01b0383165f908152600360205260408120838303905560078054849290610466908490610626565b90915550506040518281525f906001600160a01b038516905f805160206136548339815191529060200160405180910390a3610334835f84610339565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806104cb57607f821691505b6020821081036104e957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561033457805f5260205f20601f840160051c810160208510156105145750805b601f840160051c820191505b81811015610533575f8155600101610520565b5050505050565b81516001600160401b03811115610553576105536104a3565b6105678161056184546104b7565b846104ef565b602080601f83116001811461059a575f84156105835750858301515b5f19600386901b1c1916600185901b1785556105f1565b5f85815260208120601f198616915b828110156105c8578886015182559484019460019091019084016105a9565b50858210156105e557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610620576106206105f9565b92915050565b81810381811115610620576106206105f9565b612fee806106465f395ff3fe608060405260043610610260575f3560e01c806368092bd91161014b578063a9059cbb116100c6578063dd62ed3e1161007c578063f2280d3111610062578063f2280d311461075b578063f2fde38b1461077a578063f808a27d14610799575f80fd5b8063dd62ed3e146106eb578063eb5625d91461073c575f80fd5b8063b2bdfa7b116100ac578063b2bdfa7b14610666578063c5d32bb214610691578063d62caa2c146106bf575f80fd5b8063a9059cbb14610628578063ac3bb88414610647575f80fd5b80637fd426171161011b5780638f84aa09116101015780638f84aa09146105cc57806395d89b41146105f5578063a457c2d714610609575f80fd5b80637fd426171461059957806388ab836a146105ad575f80fd5b806368092bd91461050657806370a0823114610525578063715018a6146105665780637e3cf9e01461057a575f80fd5b8063313ce567116101db5780634838d165116101ab5780634b0c0058116101915780634b0c0058146104af5780634d8d8702146104ce5780635c975abb146104ed575f80fd5b80634838d165146104625780634a14c4c614610490575f80fd5b8063313ce567146103d0578063330dd345146103eb578063346e2e2f146104245780633950935114610443575f80fd5b806312dfe61f116102305780631b1ea605116102165780631b1ea605146103415780631f41eb621461036057806323b872dd146103b1575f80fd5b806312dfe61f1461030457806318160ddd14610323575f80fd5b806302329a291461026b57806306fdde031461028c5780630898f4f5146102b6578063095ea7b3146102d5575f80fd5b3661026757005b5f80fd5b348015610276575f80fd5b5061028a6102853660046127db565b6107c7565b005b348015610297575f80fd5b506102a06108e6565b6040516102ad91906127f6565b60405180910390f35b3480156102c1575f80fd5b5061028a6102d036600461286a565b610976565b3480156102e0575f80fd5b506102f46102ef3660046128a8565b610ab4565b60405190151581526020016102ad565b34801561030f575f80fd5b5061028a61031e3660046128d2565b610acd565b34801561032e575f80fd5b506007545b6040519081526020016102ad565b34801561034c575f80fd5b5061028a61035b3660046127db565b610b89565b34801561036b575f80fd5b50600c5461038c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ad565b3480156103bc575f80fd5b506102f46103cb36600461286a565b610bff565b3480156103db575f80fd5b50604051601281526020016102ad565b3480156103f6575f80fd5b506102f46104053660046128fd565b600160209081525f928352604080842090915290825290205460ff1681565b34801561042f575f80fd5b5061028a61043e36600461295f565b610c22565b34801561044e575f80fd5b506102f461045d3660046128a8565b610d05565b34801561046d575f80fd5b506102f461047c3660046128d2565b600d6020525f908152604090205460ff1681565b34801561049b575f80fd5b5061028a6104aa366004612a52565b610d50565b3480156104ba575f80fd5b5061028a6104c93660046128d2565b610de7565b3480156104d9575f80fd5b5061028a6104e83660046128d2565b610ea2565b3480156104f8575f80fd5b50600e546102f49060ff1681565b348015610511575f80fd5b5061028a610520366004612a52565b610f7c565b348015610530575f80fd5b5061033361053f3660046128d2565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b348015610571575f80fd5b5061028a611010565b348015610585575f80fd5b5061028a6105943660046128d2565b6110fd565b3480156105a4575f80fd5b5061028a6111d7565b3480156105b8575f80fd5b506102a06105c7366004612a7e565b611241565b3480156105d7575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038c565b348015610600575f80fd5b506102a06112e7565b348015610614575f80fd5b506102f46106233660046128a8565b6112f6565b348015610633575f80fd5b506102f46106423660046128a8565b6113c6565b348015610652575f80fd5b5061028a61066136600461295f565b6113d3565b348015610671575f80fd5b505f5461038c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561069c575f80fd5b506102f46106ab3660046128d2565b60056020525f908152604090205460ff1681565b3480156106ca575f80fd5b50600b5461038c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f6575f80fd5b50610333610705366004612a95565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260046020908152604080832093909416825291909152205490565b348015610747575f80fd5b5061028a61075636600461286a565b6114b6565b348015610766575f80fd5b5061028a610775366004612a52565b61154f565b348015610785575f80fd5b5061028a6107943660046128d2565b6115e6565b3480156107a4575f80fd5b506102f46107b33660046128d2565b60066020525f908152604090205460ff1681565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166108b45761081e335b73ffffffffffffffffffffffffffffffffffffffff166014611672565b60028260ff168154811061083457610834612ab1565b905f5260205f200160405160200161084d929190612b46565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108ab916004016127f6565b60405180910390fd5b50600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6060600880546108f590612af5565b80601f016020809104026020016040519081016040528092919081815260200182805461092190612af5565b801561096c5780601f106109435761010080835404028352916020019161096c565b820191905f5260205f20905b81548152906001019060200180831161094f57829003601f168201915b5050505050905090565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166109b45761081e33610801565b73ffffffffffffffffffffffffffffffffffffffff8416610a155760405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084905f818181858888f19350505050158015610a0f573d5f803e3d5ffd5b50610aae565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063a9059cbb906044015b6020604051808303815f875af1158015610a88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aac9190612cab565b505b50505050565b5f33610ac18185856118b6565b60019150505b92915050565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610b0b5761081e33610801565b5f5b60025460ff82161015610b845760ff81165f90815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580610b7c81612cf3565b915050610b0d565b505050565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610bc75761081e33610801565b50600e8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b5f33610c0c858285611a68565b610c17858585611b38565b506001949350505050565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610c605761081e33610801565b5f5b82518160ff161015610aae576001805f858460ff1681518110610c8757610c87612ab1565b60209081029190910181015160ff1682528181019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff89168252909252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580610cfd81612cf3565b915050610c62565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190610ac19082908690610d4b908790612d11565b6118b6565b335f9081527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f602052604090205460029060ff16610d915761081e33610801565b5073ffffffffffffffffffffffffffffffffffffffff919091165f90815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610e255761081e33610801565b5f5b60025460ff82161015610b845760ff81165f90815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8816855290915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905580610e9a81612cf3565b915050610e27565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610ee05761081e33610801565b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811782555f90815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001908117909255945490951683526006909152902080549091169091179055565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610fba5761081e33610801565b5073ffffffffffffffffffffffffffffffffffffffff919091165f908152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ab565b5f805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff1661113b5761081e33610801565b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811782555f90815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001908117909255945490951683526006909152902080549091169091179055565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166112155761081e33610801565b6040514790339082156108fc029083905f818181858888f19350505050158015610b84573d5f803e3d5ffd5b60028181548110611250575f80fd5b905f5260205f20015f91509050805461126890612af5565b80601f016020809104026020016040519081016040528092919081815260200182805461129490612af5565b80156112df5780601f106112b6576101008083540402835291602001916112df565b820191905f5260205f20905b8154815290600101906020018083116112c257829003601f168201915b505050505081565b6060600980546108f590612af5565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156113b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016108ab565b610c1782868684036118b6565b5f33610ac1818585611b38565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166114115761081e33610801565b5f5b82518160ff161015610aae575f60015f858460ff168151811061143857611438612ab1565b60209081029190910181015160ff1682528181019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff89168252909252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806114ae81612cf3565b915050611413565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166114f45761081e33610801565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063095ea7b390604401610a6c565b335f9081527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f602052604090205460029060ff166115905761081e33610801565b5073ffffffffffffffffffffffffffffffffffffffff919091165f90815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ab565b61166f816121fe565b50565b60605f611680836002612d24565b61168b906002612d11565b67ffffffffffffffff8111156116a3576116a3612932565b6040519080825280601f01601f1916602001820160405280156116cd576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f8151811061170357611703612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061176557611765612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f61179f846002612d24565b6117aa906001612d11565b90505b6001811115611846577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106117eb576117eb612ab1565b1a60f81b82828151811061180157611801612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c9361183f81612d3b565b90506117ad565b5083156118af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108ab565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8316611958576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff82166119fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aae5781811015611b2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108ab565b610aae84848484036118b6565b600e54610100900460ff1615611bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c2060448201527f68617070656e730000000000000000000000000000000000000000000000000060648201526084016108ab565b335f9081527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f602052604090205460ff16611d1a5773ffffffffffffffffffffffffffffffffffffffff83165f908152600d602052604090205460ff1615611c378461232c565b604051602001611c479190612d6f565b60405160208183030381529060405290611c8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ab91906127f6565b5073ffffffffffffffffffffffffffffffffffffffff82165f908152600d602052604090205460ff1615611cc18361232c565b604051602001611cd19190612d6f565b60405160208183030381529060405290611d18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ab91906127f6565b505b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905573ffffffffffffffffffffffffffffffffffffffff8316611de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff8216611e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526003602052604090205481811015611f41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526003602052604081208383039055600e5460ff16158015611fa2575073ffffffffffffffffffffffffffffffffffffffff85165f9081526005602052604090205460ff16155b8015611fd3575073ffffffffffffffffffffffffffffffffffffffff84165f9081526006602052604090205460ff16155b1561212857611fe3606484612dfa565b9050611fef8184612e0d565b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080549295508592909190612028908490612d11565b9091555050600b5473ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604081208054839290612063908490612d11565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120c991815260200190565b60405180910390a3600b5460405182815273ffffffffffffffffffffffffffffffffffffffff918216918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36121cb565b73ffffffffffffffffffffffffffffffffffffffff84165f908152600360205260408120805485929061215c908490612d11565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121c291815260200190565b60405180910390a35b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055610aac858585612559565b73ffffffffffffffffffffffffffffffffffffffff81166122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108ab565b5f805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60408051602a80825260608281019093525f91906020820181803683370190505090507f3000000000000000000000000000000000000000000000000000000000000000815f8151811061238257612382612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106123e4576123e4612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b6014811015612552575f612429826013612e0d565b612434906008612d24565b61243f906002612f3e565b61245f9073ffffffffffffffffffffffffffffffffffffffff8716612dfa565b90505f61246d601083612f49565b90505f61247b826010612f6a565b6124859084612f86565b9050612490826125ad565b8561249c866002612d24565b6124a7906002612d11565b815181106124b7576124b7612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506124ee816125ad565b856124fa866002612d24565b612505906003612d11565b8151811061251557612515612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535050600190920191506124149050565b5092915050565b600c5473ffffffffffffffffffffffffffffffffffffffff90811690831603610b8457600c5473ffffffffffffffffffffffffffffffffffffffff165f81815260036020526040902054610b8491906125de565b5f600a8260ff1610156125ce576125c5826030612f9f565b60f81b92915050565b6125c5826057612f9f565b919050565b73ffffffffffffffffffffffffffffffffffffffff8216612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526003602052604090205481811015612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600360205260408120838303905560078054849290612771908490612e0d565b90915550506040518281525f9073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b84835f84612559565b801515811461166f575f80fd5b5f602082840312156127eb575f80fd5b81356118af816127ce565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461166f575f80fd5b5f805f6060848603121561287c575f80fd5b833561288781612849565b9250602084013561289781612849565b929592945050506040919091013590565b5f80604083850312156128b9575f80fd5b82356128c481612849565b946020939093013593505050565b5f602082840312156128e2575f80fd5b81356118af81612849565b803560ff811681146125d9575f80fd5b5f806040838503121561290e575f80fd5b612917836128ed565b9150602083013561292781612849565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215612970575f80fd5b823561297b81612849565b915060208381013567ffffffffffffffff80821115612998575f80fd5b818601915086601f8301126129ab575f80fd5b8135818111156129bd576129bd612932565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715612a0057612a00612932565b604052918252848201925083810185019189831115612a1d575f80fd5b938501935b82851015612a4257612a33856128ed565b84529385019392850192612a22565b8096505050505050509250929050565b5f8060408385031215612a63575f80fd5b8235612a6e81612849565b91506020830135612927816127ce565b5f60208284031215612a8e575f80fd5b5035919050565b5f8060408385031215612aa6575f80fd5b823561291781612849565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b600181811c90821680612b0957607f821691505b602082108103612b40577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4163636f756e742000000000000000000000000000000000000000000000000081525f612b776008830185612ade565b7f20646f6573206e6f7420686176652000000000000000000000000000000000008152600f5f85545f60018260011c91506001831680612bb857607f831692505b60208084108203612bf0577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b818015612c045760018114612c3d57612c6d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616600f8a0152600f85151586028a01019650612c6d565b5f8c8152602090205f5b86811015612c625781548b82018b0152908501908301612c47565b5050600f858a010196505b505050505050612ca0817f207065726d697373696f6e0000000000000000000000000000000000000000008152600b0190565b979650505050505050565b5f60208284031215612cbb575f80fd5b81516118af816127ce565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60ff821660ff8103612d0857612d08612cc6565b60010192915050565b80820180821115610ac757610ac7612cc6565b8082028115828204841417610ac757610ac7612cc6565b5f81612d4957612d49612cc6565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f416464726573732000000000000000000000000000000000000000000000000081525f612da06008830184612ade565b7f20697320626c61636b6c697374656400000000000000000000000000000000008152600f019392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612e0857612e08612dcd565b500490565b81810381811115610ac757610ac7612cc6565b600181815b80851115612e7957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612e5f57612e5f612cc6565b80851615612e6c57918102915b93841c9390800290612e25565b509250929050565b5f82612e8f57506001610ac7565b81612e9b57505f610ac7565b8160018114612eb15760028114612ebb57612ed7565b6001915050610ac7565b60ff841115612ecc57612ecc612cc6565b50506001821b610ac7565b5060208310610133831016604e8410600b8410161715612efa575081810a610ac7565b612f048383612e20565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f3657612f36612cc6565b029392505050565b5f6118af8383612e81565b5f60ff831680612f5b57612f5b612dcd565b8060ff84160491505092915050565b60ff818116838216029081169081811461255257612552612cc6565b60ff8281168282160390811115610ac757610ac7612cc6565b60ff8181168382160190811115610ac757610ac7612cc656fea2646970667358221220b7bc60bde9f44e585f5be7a2984a67a6cb3a224b13eeef713a5450aa2b093e7364736f6c63430008190033405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5aceddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x608060405260043610610260575f3560e01c806368092bd91161014b578063a9059cbb116100c6578063dd62ed3e1161007c578063f2280d3111610062578063f2280d311461075b578063f2fde38b1461077a578063f808a27d14610799575f80fd5b8063dd62ed3e146106eb578063eb5625d91461073c575f80fd5b8063b2bdfa7b116100ac578063b2bdfa7b14610666578063c5d32bb214610691578063d62caa2c146106bf575f80fd5b8063a9059cbb14610628578063ac3bb88414610647575f80fd5b80637fd426171161011b5780638f84aa09116101015780638f84aa09146105cc57806395d89b41146105f5578063a457c2d714610609575f80fd5b80637fd426171461059957806388ab836a146105ad575f80fd5b806368092bd91461050657806370a0823114610525578063715018a6146105665780637e3cf9e01461057a575f80fd5b8063313ce567116101db5780634838d165116101ab5780634b0c0058116101915780634b0c0058146104af5780634d8d8702146104ce5780635c975abb146104ed575f80fd5b80634838d165146104625780634a14c4c614610490575f80fd5b8063313ce567146103d0578063330dd345146103eb578063346e2e2f146104245780633950935114610443575f80fd5b806312dfe61f116102305780631b1ea605116102165780631b1ea605146103415780631f41eb621461036057806323b872dd146103b1575f80fd5b806312dfe61f1461030457806318160ddd14610323575f80fd5b806302329a291461026b57806306fdde031461028c5780630898f4f5146102b6578063095ea7b3146102d5575f80fd5b3661026757005b5f80fd5b348015610276575f80fd5b5061028a6102853660046127db565b6107c7565b005b348015610297575f80fd5b506102a06108e6565b6040516102ad91906127f6565b60405180910390f35b3480156102c1575f80fd5b5061028a6102d036600461286a565b610976565b3480156102e0575f80fd5b506102f46102ef3660046128a8565b610ab4565b60405190151581526020016102ad565b34801561030f575f80fd5b5061028a61031e3660046128d2565b610acd565b34801561032e575f80fd5b506007545b6040519081526020016102ad565b34801561034c575f80fd5b5061028a61035b3660046127db565b610b89565b34801561036b575f80fd5b50600c5461038c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ad565b3480156103bc575f80fd5b506102f46103cb36600461286a565b610bff565b3480156103db575f80fd5b50604051601281526020016102ad565b3480156103f6575f80fd5b506102f46104053660046128fd565b600160209081525f928352604080842090915290825290205460ff1681565b34801561042f575f80fd5b5061028a61043e36600461295f565b610c22565b34801561044e575f80fd5b506102f461045d3660046128a8565b610d05565b34801561046d575f80fd5b506102f461047c3660046128d2565b600d6020525f908152604090205460ff1681565b34801561049b575f80fd5b5061028a6104aa366004612a52565b610d50565b3480156104ba575f80fd5b5061028a6104c93660046128d2565b610de7565b3480156104d9575f80fd5b5061028a6104e83660046128d2565b610ea2565b3480156104f8575f80fd5b50600e546102f49060ff1681565b348015610511575f80fd5b5061028a610520366004612a52565b610f7c565b348015610530575f80fd5b5061033361053f3660046128d2565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b348015610571575f80fd5b5061028a611010565b348015610585575f80fd5b5061028a6105943660046128d2565b6110fd565b3480156105a4575f80fd5b5061028a6111d7565b3480156105b8575f80fd5b506102a06105c7366004612a7e565b611241565b3480156105d7575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038c565b348015610600575f80fd5b506102a06112e7565b348015610614575f80fd5b506102f46106233660046128a8565b6112f6565b348015610633575f80fd5b506102f46106423660046128a8565b6113c6565b348015610652575f80fd5b5061028a61066136600461295f565b6113d3565b348015610671575f80fd5b505f5461038c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561069c575f80fd5b506102f46106ab3660046128d2565b60056020525f908152604090205460ff1681565b3480156106ca575f80fd5b50600b5461038c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f6575f80fd5b50610333610705366004612a95565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260046020908152604080832093909416825291909152205490565b348015610747575f80fd5b5061028a61075636600461286a565b6114b6565b348015610766575f80fd5b5061028a610775366004612a52565b61154f565b348015610785575f80fd5b5061028a6107943660046128d2565b6115e6565b3480156107a4575f80fd5b506102f46107b33660046128d2565b60066020525f908152604090205460ff1681565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166108b45761081e335b73ffffffffffffffffffffffffffffffffffffffff166014611672565b60028260ff168154811061083457610834612ab1565b905f5260205f200160405160200161084d929190612b46565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108ab916004016127f6565b60405180910390fd5b50600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6060600880546108f590612af5565b80601f016020809104026020016040519081016040528092919081815260200182805461092190612af5565b801561096c5780601f106109435761010080835404028352916020019161096c565b820191905f5260205f20905b81548152906001019060200180831161094f57829003601f168201915b5050505050905090565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166109b45761081e33610801565b73ffffffffffffffffffffffffffffffffffffffff8416610a155760405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084905f818181858888f19350505050158015610a0f573d5f803e3d5ffd5b50610aae565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063a9059cbb906044015b6020604051808303815f875af1158015610a88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aac9190612cab565b505b50505050565b5f33610ac18185856118b6565b60019150505b92915050565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610b0b5761081e33610801565b5f5b60025460ff82161015610b845760ff81165f90815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580610b7c81612cf3565b915050610b0d565b505050565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610bc75761081e33610801565b50600e8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b5f33610c0c858285611a68565b610c17858585611b38565b506001949350505050565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610c605761081e33610801565b5f5b82518160ff161015610aae576001805f858460ff1681518110610c8757610c87612ab1565b60209081029190910181015160ff1682528181019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff89168252909252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580610cfd81612cf3565b915050610c62565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190610ac19082908690610d4b908790612d11565b6118b6565b335f9081527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f602052604090205460029060ff16610d915761081e33610801565b5073ffffffffffffffffffffffffffffffffffffffff919091165f90815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610e255761081e33610801565b5f5b60025460ff82161015610b845760ff81165f90815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8816855290915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905580610e9a81612cf3565b915050610e27565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610ee05761081e33610801565b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811782555f90815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001908117909255945490951683526006909152902080549091169091179055565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff16610fba5761081e33610801565b5073ffffffffffffffffffffffffffffffffffffffff919091165f908152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ab565b5f805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff1661113b5761081e33610801565b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811782555f90815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001908117909255945490951683526006909152902080549091169091179055565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166112155761081e33610801565b6040514790339082156108fc029083905f818181858888f19350505050158015610b84573d5f803e3d5ffd5b60028181548110611250575f80fd5b905f5260205f20015f91509050805461126890612af5565b80601f016020809104026020016040519081016040528092919081815260200182805461129490612af5565b80156112df5780601f106112b6576101008083540402835291602001916112df565b820191905f5260205f20905b8154815290600101906020018083116112c257829003601f168201915b505050505081565b6060600980546108f590612af5565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156113b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016108ab565b610c1782868684036118b6565b5f33610ac1818585611b38565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166114115761081e33610801565b5f5b82518160ff161015610aae575f60015f858460ff168151811061143857611438612ab1565b60209081029190910181015160ff1682528181019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff89168252909252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806114ae81612cf3565b915050611413565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081205460ff166114f45761081e33610801565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063095ea7b390604401610a6c565b335f9081527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f602052604090205460029060ff166115905761081e33610801565b5073ffffffffffffffffffffffffffffffffffffffff919091165f90815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ab565b61166f816121fe565b50565b60605f611680836002612d24565b61168b906002612d11565b67ffffffffffffffff8111156116a3576116a3612932565b6040519080825280601f01601f1916602001820160405280156116cd576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f8151811061170357611703612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061176557611765612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f61179f846002612d24565b6117aa906001612d11565b90505b6001811115611846577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106117eb576117eb612ab1565b1a60f81b82828151811061180157611801612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c9361183f81612d3b565b90506117ad565b5083156118af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108ab565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8316611958576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff82166119fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aae5781811015611b2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108ab565b610aae84848484036118b6565b600e54610100900460ff1615611bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c2060448201527f68617070656e730000000000000000000000000000000000000000000000000060648201526084016108ab565b335f9081527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f602052604090205460ff16611d1a5773ffffffffffffffffffffffffffffffffffffffff83165f908152600d602052604090205460ff1615611c378461232c565b604051602001611c479190612d6f565b60405160208183030381529060405290611c8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ab91906127f6565b5073ffffffffffffffffffffffffffffffffffffffff82165f908152600d602052604090205460ff1615611cc18361232c565b604051602001611cd19190612d6f565b60405160208183030381529060405290611d18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ab91906127f6565b505b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905573ffffffffffffffffffffffffffffffffffffffff8316611de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff8216611e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526003602052604090205481811015611f41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526003602052604081208383039055600e5460ff16158015611fa2575073ffffffffffffffffffffffffffffffffffffffff85165f9081526005602052604090205460ff16155b8015611fd3575073ffffffffffffffffffffffffffffffffffffffff84165f9081526006602052604090205460ff16155b1561212857611fe3606484612dfa565b9050611fef8184612e0d565b73ffffffffffffffffffffffffffffffffffffffff85165f90815260036020526040812080549295508592909190612028908490612d11565b9091555050600b5473ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604081208054839290612063908490612d11565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120c991815260200190565b60405180910390a3600b5460405182815273ffffffffffffffffffffffffffffffffffffffff918216918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36121cb565b73ffffffffffffffffffffffffffffffffffffffff84165f908152600360205260408120805485929061215c908490612d11565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121c291815260200190565b60405180910390a35b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055610aac858585612559565b73ffffffffffffffffffffffffffffffffffffffff81166122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108ab565b5f805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60408051602a80825260608281019093525f91906020820181803683370190505090507f3000000000000000000000000000000000000000000000000000000000000000815f8151811061238257612382612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106123e4576123e4612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b6014811015612552575f612429826013612e0d565b612434906008612d24565b61243f906002612f3e565b61245f9073ffffffffffffffffffffffffffffffffffffffff8716612dfa565b90505f61246d601083612f49565b90505f61247b826010612f6a565b6124859084612f86565b9050612490826125ad565b8561249c866002612d24565b6124a7906002612d11565b815181106124b7576124b7612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506124ee816125ad565b856124fa866002612d24565b612505906003612d11565b8151811061251557612515612ab1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535050600190920191506124149050565b5092915050565b600c5473ffffffffffffffffffffffffffffffffffffffff90811690831603610b8457600c5473ffffffffffffffffffffffffffffffffffffffff165f81815260036020526040902054610b8491906125de565b5f600a8260ff1610156125ce576125c5826030612f9f565b60f81b92915050565b6125c5826057612f9f565b919050565b73ffffffffffffffffffffffffffffffffffffffff8216612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526003602052604090205481811015612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016108ab565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600360205260408120838303905560078054849290612771908490612e0d565b90915550506040518281525f9073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b84835f84612559565b801515811461166f575f80fd5b5f602082840312156127eb575f80fd5b81356118af816127ce565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461166f575f80fd5b5f805f6060848603121561287c575f80fd5b833561288781612849565b9250602084013561289781612849565b929592945050506040919091013590565b5f80604083850312156128b9575f80fd5b82356128c481612849565b946020939093013593505050565b5f602082840312156128e2575f80fd5b81356118af81612849565b803560ff811681146125d9575f80fd5b5f806040838503121561290e575f80fd5b612917836128ed565b9150602083013561292781612849565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215612970575f80fd5b823561297b81612849565b915060208381013567ffffffffffffffff80821115612998575f80fd5b818601915086601f8301126129ab575f80fd5b8135818111156129bd576129bd612932565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715612a0057612a00612932565b604052918252848201925083810185019189831115612a1d575f80fd5b938501935b82851015612a4257612a33856128ed565b84529385019392850192612a22565b8096505050505050509250929050565b5f8060408385031215612a63575f80fd5b8235612a6e81612849565b91506020830135612927816127ce565b5f60208284031215612a8e575f80fd5b5035919050565b5f8060408385031215612aa6575f80fd5b823561291781612849565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b600181811c90821680612b0957607f821691505b602082108103612b40577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4163636f756e742000000000000000000000000000000000000000000000000081525f612b776008830185612ade565b7f20646f6573206e6f7420686176652000000000000000000000000000000000008152600f5f85545f60018260011c91506001831680612bb857607f831692505b60208084108203612bf0577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b818015612c045760018114612c3d57612c6d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616600f8a0152600f85151586028a01019650612c6d565b5f8c8152602090205f5b86811015612c625781548b82018b0152908501908301612c47565b5050600f858a010196505b505050505050612ca0817f207065726d697373696f6e0000000000000000000000000000000000000000008152600b0190565b979650505050505050565b5f60208284031215612cbb575f80fd5b81516118af816127ce565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60ff821660ff8103612d0857612d08612cc6565b60010192915050565b80820180821115610ac757610ac7612cc6565b8082028115828204841417610ac757610ac7612cc6565b5f81612d4957612d49612cc6565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f416464726573732000000000000000000000000000000000000000000000000081525f612da06008830184612ade565b7f20697320626c61636b6c697374656400000000000000000000000000000000008152600f019392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612e0857612e08612dcd565b500490565b81810381811115610ac757610ac7612cc6565b600181815b80851115612e7957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612e5f57612e5f612cc6565b80851615612e6c57918102915b93841c9390800290612e25565b509250929050565b5f82612e8f57506001610ac7565b81612e9b57505f610ac7565b8160018114612eb15760028114612ebb57612ed7565b6001915050610ac7565b60ff841115612ecc57612ecc612cc6565b50506001821b610ac7565b5060208310610133831016604e8410600b8410161715612efa575081810a610ac7565b612f048383612e20565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f3657612f36612cc6565b029392505050565b5f6118af8383612e81565b5f60ff831680612f5b57612f5b612dcd565b8060ff84160491505092915050565b60ff818116838216029081169081811461255257612552612cc6565b60ff8281168282160390811115610ac757610ac7612cc6565b60ff8181168382160190811115610ac757610ac7612cc656fea2646970667358221220b7bc60bde9f44e585f5be7a2984a67a6cb3a224b13eeef713a5450aa2b093e7364736f6c63430008190033

Deployed Bytecode Sourcemap

16599:150:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10745:83;;;;;;;;;;-1:-1:-1;10745:83:0;;;;;:::i;:::-;;:::i;:::-;;8562:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10403:219;;;;;;;;;;-1:-1:-1;10403:219:0;;;;;:::i;:::-;;:::i;9510:201::-;;;;;;;;;;-1:-1:-1;9510:201:0;;;;;:::i;:::-;;:::i;:::-;;;1978:14:1;;1971:22;1953:41;;1941:2;1926:18;9510:201:0;1813:187:1;7114:170:0;;;;;;;;;;-1:-1:-1;7114:170:0;;;;;:::i;:::-;;:::i;8889:108::-;;;;;;;;;;-1:-1:-1;8977:12:0;;8889:108;;;2403:25:1;;;2391:2;2376:18;8889:108:0;2257:177:1;10634:101:0;;;;;;;;;;-1:-1:-1;10634:101:0;;;;;:::i;:::-;;:::i;8242:25::-;;;;;;;;;;-1:-1:-1;8242:25:0;;;;;;;;;;;2615:42:1;2603:55;;;2585:74;;2573:2;2558:18;8242:25:0;2439:226:1;10973:295:0;;;;;;;;;;-1:-1:-1;10973:295:0;;;;;:::i;:::-;;:::i;8786:93::-;;;;;;;;;;-1:-1:-1;8786:93:0;;8869:2;3273:36:1;;3261:2;3246:18;8786:93:0;3131:184:1;5570:61:0;;;;;;;;;;-1:-1:-1;5570:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6485:221;;;;;;;;;;-1:-1:-1;6485:221:0;;;;;:::i;:::-;;:::i;11278:238::-;;;;;;;;;;-1:-1:-1;11278:238:0;;;;;:::i;:::-;;:::i;8276:41::-;;;;;;;;;;-1:-1:-1;8276:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10108:129;;;;;;;;;;-1:-1:-1;10108:129:0;;;;;:::i;:::-;;:::i;6942:166::-;;;;;;;;;;-1:-1:-1;6942:166:0;;;;;:::i;:::-;;:::i;9721:184::-;;;;;;;;;;-1:-1:-1;9721:184:0;;;;;:::i;:::-;;:::i;8326:18::-;;;;;;;;;;-1:-1:-1;8326:18:0;;;;;;;;10836:127;;;;;;;;;;-1:-1:-1;10836:127:0;;;;;:::i;:::-;;:::i;9007:::-;;;;;;;;;;-1:-1:-1;9007:127:0;;;;;:::i;:::-;9108:18;;9081:7;9108:18;;;:9;:18;;;;;;;9007:127;4272:130;;;;;;;;;;;;;:::i;9913:187::-;;;;;;;;;;-1:-1:-1;9913:187:0;;;;;:::i;:::-;;:::i;6316:163::-;;;;;;;;;;;;;:::i;5636:31::-;;;;;;;;;;-1:-1:-1;5636:31:0;;;;;:::i;:::-;;:::i;4071:80::-;;;;;;;;;;-1:-1:-1;4116:7:0;4139:6;;;4071:80;;8672:104;;;;;;;;;;;;;:::i;11526:436::-;;;;;;;;;;-1:-1:-1;11526:436:0;;;;;:::i;:::-;;:::i;9144:195::-;;;;;;;;;;-1:-1:-1;9144:195:0;;;;;:::i;:::-;;:::i;6712:224::-;;;;;;;;;;-1:-1:-1;6712:224:0;;;;;:::i;:::-;;:::i;3806:21::-;;;;;;;;;;-1:-1:-1;3806:21:0;;;;;;;;7958:42;;;;;;;;;;-1:-1:-1;7958:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8211:24;;;;;;;;;;-1:-1:-1;8211:24:0;;;;;;;;9349:151;;;;;;;;;;-1:-1:-1;9349:151:0;;;;;:::i;:::-;9465:18;;;;9438:7;9465:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9349:151;6165:145;;;;;;;;;;-1:-1:-1;6165:145:0;;;;;:::i;:::-;;:::i;10249:::-;;;;;;;;;;-1:-1:-1;10249:145:0;;;;;:::i;:::-;;:::i;4408:103::-;;;;;;;;;;-1:-1:-1;4408:103:0;;;;;:::i;:::-;;:::i;8013:50::-;;;;;;;;;;-1:-1:-1;8013:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10745:83;175:10;10792:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;6032:46;;6075:2;6032:19;:46::i;:::-;6098:15;6114:5;6098:22;;;;;;;;;;:::i;:::-;;;;;;;;6004:132;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;5990:148;;;;;;;;:::i;:::-;;;;;;;;5942:204;-1:-1:-1;10806:6:0::1;:14:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;10745:83::o;8562:100::-;8616:13;8649:5;8642:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8562:100;:::o;10403:219::-;175:10;10502:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;10517:19:::1;::::0;::::1;10514:101;;10540:23;::::0;:15:::1;::::0;::::1;::::0;:23;::::1;;;::::0;10556:6;;10540:23:::1;::::0;;;10556:6;10540:15;:23;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;10514:101;;;10574:38;::::0;;;;:22:::1;9379:55:1::0;;;10574:38:0::1;::::0;::::1;9361:74:1::0;9451:18;;;9444:34;;;10574:22:0;::::1;::::0;::::1;::::0;9334:18:1;;10574:38:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10514:101;10403:219:::0;;;;:::o;9510:201::-;9593:4;175:10;9649:32;175:10;9665:7;9674:6;9649:8;:32::i;:::-;9699:4;9692:11;;;9510:201;;;;;:::o;7114:170::-;175:10;7184:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;7199:7:::1;7194:84;7216:15;:22:::0;7212:26:::1;::::0;::::1;;7194:84;;;7245:14;::::0;::::1;7273:5;7245:14:::0;;;:11:::1;:14;::::0;;;;;;;:24:::1;::::0;::::1;::::0;;;;;;;:33;;;::::1;::::0;;7257:1;7240:3:::1;7257:1:::0;7240:3:::1;:::i;:::-;;;;7194:84;;;;7114:170:::0;;:::o;10634:101::-;175:10;10690:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;-1:-1:-1;10702:13:0::1;:25:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;10634:101::o;10973:295::-;11104:4;175:10;11162:38;11178:4;175:10;11193:6;11162:15;:38::i;:::-;11211:27;11221:4;11227:2;11231:6;11211:9;:27::i;:::-;-1:-1:-1;11256:4:0;;10973:295;-1:-1:-1;;;;10973:295:0:o;6485:221::-;175:10;6585:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;6600:7:::1;6595:105;6617:18;:25;6613:1;:29;;;6595:105;;;6696:4;6649:11:::0;:34:::1;6661:18;6680:1;6661:21;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;6649:34:::1;;::::0;;;;::::1;::::0;;;;;;;;-1:-1:-1;6649:34:0;;;:44:::1;::::0;::::1;::::0;;;;;;;:51;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;6644:3;::::1;::::0;::::1;:::i;:::-;;;;6595:105;;11278:238:::0;175:10;11366:4;9465:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;11366:4;;175:10;11422:64;;175:10;;9465:27;;11447:38;;11475:10;;11447:38;:::i;:::-;11422:8;:64::i;10108:129::-;175:10;5947:18;:32;;;:18;;:32;;;;;10183:1;;5947:32;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;-1:-1:-1;10198:18:0::1;::::0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:30;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;10108:129::o;6942:166::-;175:10;7009:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;7024:7:::1;7019:83;7041:15;:22:::0;7037:26:::1;::::0;::::1;;7019:83;;;7070:14;::::0;::::1;;::::0;;;7098:4:::1;7070:14;::::0;;;;;;;:24:::1;::::0;::::1;::::0;;;;;;;;:32;;;::::1;::::0;;::::1;::::0;;7082:1;7065:3:::1;7082:1:::0;7065:3:::1;:::i;:::-;;;;7019:83;;9721:184:::0;175:10;9780:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;-1:-1:-1;9793:9:0::1;:19:::0;;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;9822:20:0;;;:9:::1;:20;::::0;;;;;;;:27;;;;;::::1;-1:-1:-1::0;9822:27:0;;::::1;::::0;;;9877:9;;;;::::1;9859:28:::0;;:17:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;9721:184::o;10836:127::-;175:10;10911:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;-1:-1:-1;10925:18:0::1;::::0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:30;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;10836:127::o;4272:130::-;4193:6;;:22;:6;175:10;4193:22;4185:67;;;;;;;10440:2:1;4185:67:0;;;10422:21:1;;;10459:18;;;10452:30;10518:34;10498:18;;;10491:62;10570:18;;4185:67:0;10238:356:1;4185:67:0;4367:1:::1;4351:6:::0;;4330:40:::1;::::0;::::1;4351:6:::0;;::::1;::::0;4330:40:::1;::::0;4367:1;;4330:40:::1;4394:1;4377:19:::0;;;::::1;::::0;;4272:130::o;9913:187::-;175:10;9973:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;-1:-1:-1;9986:10:0::1;:20:::0;;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;10016:21:0;;;:9:::1;:21;::::0;;;;;;;:28;;;;;::::1;-1:-1:-1::0;10016:28:0;;::::1;::::0;;;10071:10;;;;::::1;10053:29:::0;;:17:::1;:29:::0;;;;;:36;;;;::::1;::::0;;::::1;::::0;;9913:187::o;6316:163::-;175:10;6362:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;6426:47:::1;::::0;6398:21:::1;::::0;175:10;;6426:47;::::1;;;::::0;6398:21;;6426:47:::1;::::0;;;6398:21;175:10;6426:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;5636:31:::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8672:104::-;8728:13;8761:7;8754:14;;;;;:::i;11526:436::-;175:10;11619:4;9465:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;11619:4;;175:10;11766:15;11746:16;:35;;11738:85;;;;;;;10801:2:1;11738:85:0;;;10783:21:1;10840:2;10820:18;;;10813:30;10879:34;10859:18;;;10852:62;10950:7;10930:18;;;10923:35;10975:19;;11738:85:0;10599:401:1;11738:85:0;11859:60;11868:5;11875:7;11903:15;11884:16;:34;11859:8;:60::i;9144:195::-;9223:4;175:10;9281:28;175:10;9298:2;9302:6;9281:9;:28::i;6712:224::-;175:10;6813:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;6828:7:::1;6823:107;6845:18;:25;6841:1;:29;;;6823:107;;;6925:5;6877:11;:34;6889:18;6908:1;6889:21;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;6877:34:::1;;::::0;;;;::::1;::::0;;;;;;;;-1:-1:-1;6877:34:0;;;:44:::1;::::0;::::1;::::0;;;;;;;:53;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;6872:3;::::1;::::0;::::1;:::i;:::-;;;;6823:107;;6165:145:::0;175:10;6256:1;5947:32;;;:18;;:32;;;;;;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;6266:38:::1;::::0;;;;:21:::1;9379:55:1::0;;;6266:38:0::1;::::0;::::1;9361:74:1::0;9451:18;;;9444:34;;;6266:21:0;::::1;::::0;::::1;::::0;9334:18:1;;6266:38:0::1;9179:305:1::0;10249:145:0;175:10;5947:18;:32;;;:18;;:32;;;;;10332:1;;5947:32;;5942:204;;6032:46;175:10;6060:12;95:98;5942:204;-1:-1:-1;10347:26:0::1;::::0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:38;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;10249:145::o;4408:103::-;4193:6;;:22;:6;175:10;4193:22;4185:67;;;;;;;10440:2:1;4185:67:0;;;10422:21:1;;;10459:18;;;10452:30;10518:34;10498:18;;;10491:62;10570:18;;4185:67:0;10238:356:1;4185:67:0;4477:28:::1;4496:8;4477:18;:28::i;:::-;4408:103:::0;:::o;1838:451::-;1913:13;1939:19;1971:10;1975:6;1971:1;:10;:::i;:::-;:14;;1984:1;1971:14;:::i;:::-;1961:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1961:25:0;;1939:47;;1997:15;:6;2004:1;1997:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;;2023;:6;2030:1;2023:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;-1:-1:-1;2054:9:0;2066:10;2070:6;2066:1;:10;:::i;:::-;:14;;2079:1;2066:14;:::i;:::-;2054:26;;2049:135;2086:1;2082;:5;2049:135;;;2121:12;2134:5;2142:3;2134:11;2121:25;;;;;;;:::i;:::-;;;;2109:6;2116:1;2109:9;;;;;;;;:::i;:::-;;;;:37;;;;;;;;;;-1:-1:-1;2171:1:0;2161:11;;;;;2089:3;;;:::i;:::-;;;2049:135;;;-1:-1:-1;2202:10:0;;2194:55;;;;;;;11883:2:1;2194:55:0;;;11865:21:1;;;11902:18;;;11895:30;11961:34;11941:18;;;11934:62;12013:18;;2194:55:0;11681:356:1;2194:55:0;2274:6;1838:451;-1:-1:-1;;;1838:451:0:o;15320:380::-;15456:19;;;15448:68;;;;;;;12244:2:1;15448:68:0;;;12226:21:1;12283:2;12263:18;;;12256:30;12322:34;12302:18;;;12295:62;12393:6;12373:18;;;12366:34;12417:19;;15448:68:0;12042:400:1;15448:68:0;15535:21;;;15527:68;;;;;;;12649:2:1;15527:68:0;;;12631:21:1;12688:2;12668:18;;;12661:30;12727:34;12707:18;;;12700:62;12798:4;12778:18;;;12771:32;12820:19;;15527:68:0;12447:398:1;15527:68:0;15608:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15660:32;;2403:25:1;;;15660:32:0;;2376:18:1;15660:32:0;;;;;;;15320:380;;;:::o;15710:453::-;9465:18;;;;15845:24;9465:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;15932:17;15912:37;;15908:248;;15994:6;15974:16;:26;;15966:68;;;;;;;13052:2:1;15966:68:0;;;13034:21:1;13091:2;13071:18;;;13064:30;13130:31;13110:18;;;13103:59;13179:18;;15966:68:0;12850:353:1;15966:68:0;16078:51;16087:5;16094:7;16122:6;16103:16;:25;16078:8;:51::i;11972:1557::-;12104:13;;;;;;;12103:14;12095:66;;;;;;;13410:2:1;12095:66:0;;;13392:21:1;13449:2;13429:18;;;13422:30;13488:34;13468:18;;;13461:62;13559:9;13539:18;;;13532:37;13586:19;;12095:66:0;13208:403:1;12095:66:0;175:10;12201:14;:28;;;:14;;:28;;;;;;;12196:279;;12255:15;;;;;;;:9;:15;;;;;;;;12254:16;12308:19;12265:4;12308:13;:19::i;:::-;12279:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;12246:103;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12373:13:0;;;;;;;:9;:13;;;;;;;;12372:14;12424:17;12383:2;12424:13;:17::i;:::-;12395:66;;;;;;;;:::i;:::-;;;;;;;;;;;;;12364:99;;;;;;;;;;;;;;:::i;:::-;;12196:279;12487:13;:20;;;;;;;;12526:18;;;12518:68;;;;;;;14325:2:1;12518:68:0;;;14307:21:1;14364:2;14344:18;;;14337:30;14403:34;14383:18;;;14376:62;14474:7;14454:18;;;14447:35;14499:19;;12518:68:0;14123:401:1;12518:68:0;12605:16;;;12597:64;;;;;;;14731:2:1;12597:64:0;;;14713:21:1;14770:2;14750:18;;;14743:30;14809:34;14789:18;;;14782:62;14880:5;14860:18;;;14853:33;14903:19;;12597:64:0;14529:399:1;12597:64:0;9108:18;;;12725:19;9108:18;;;:9;:18;;;;;;12781:21;;;;12773:72;;;;;;;15135:2:1;12773:72:0;;;15117:21:1;15174:2;15154:18;;;15147:30;15213:34;15193:18;;;15186:62;15284:8;15264:18;;;15257:36;15310:19;;12773:72:0;14933:402:1;12773:72:0;12881:15;;;;;;;:9;:15;;;;;12899:20;;;12881:38;;12980:6;;;;12979:7;:27;;;;-1:-1:-1;12991:15:0;;;;;;;:9;:15;;;;;;;;12990:16;12979:27;:53;;;;-1:-1:-1;13011:21:0;;;;;;;:17;:21;;;;;;;;13010:22;12979:53;12975:465;;;13061:12;13070:3;13061:6;:12;:::i;:::-;13049:24;-1:-1:-1;13098:19:0;13049:24;13098:19;;:::i;:::-;13132:13;;;;;;;:9;:13;;;;;:23;;13098:19;;-1:-1:-1;13098:19:0;;13132:13;;;:23;;13098:19;;13132:23;:::i;:::-;;;;-1:-1:-1;;13187:9:0;;;;13177:20;;;;:9;:20;;;;;:33;;13201:9;;13177:20;:33;;13201:9;;13177:33;:::i;:::-;;;;;;;;13251:2;13236:26;;13245:4;13236:26;;;13255:6;13236:26;;;;2403:25:1;;2391:2;2376:18;;2257:177;13236:26:0;;;;;;;;13297:9;;13282:36;;2403:25:1;;;13297:9:0;;;;;13282:36;;;;;2391:2:1;2376:18;13282:36:0;;;;;;;12975:465;;;13351:13;;;;;;;:9;:13;;;;;:23;;13368:6;;13351:13;:23;;13368:6;;13351:23;:::i;:::-;;;;;;;;13417:2;13402:26;;13411:4;13402:26;;;13421:6;13402:26;;;;2403:25:1;;2391:2;2376:18;;2257:177;13402:26:0;;;;;;;;12975:465;13452:13;:21;;;;;;13484:37;13504:4;13510:2;13514:6;13484:19;:37::i;4517:215::-;4587:22;;;4579:73;;;;;;;15989:2:1;4579:73:0;;;15971:21:1;16028:2;16008:18;;;16001:30;16067:34;16047:18;;;16040:62;16138:8;16118:18;;;16111:36;16164:19;;4579:73:0;15787:402:1;4579:73:0;4685:6;;;4664:38;;;;;;;4685:6;;;4664:38;;;4709:6;:17;;;;;;;;;;;;;;;4517:215::o;13537:473::-;13637:13;;;13647:2;13637:13;;;13594;13637;;;;;;13620:14;;13637:13;;;;;;;;;;;-1:-1:-1;13637:13:0;13620:30;;13661:10;:1;13663;13661:4;;;;;;;;:::i;:::-;;;;:10;;;;;;;;;;;13682;:1;13684;13682:4;;;;;;;;:::i;:::-;;;;:10;;;;;;;;;;;13708:6;13703:273;13724:2;13720:1;:6;13703:273;;;13748:7;13795:6;13800:1;13795:2;:6;:::i;:::-;13790:12;;:1;:12;:::i;:::-;13784:19;;:1;:19;:::i;:::-;13764:40;;:16;;;:40;:::i;:::-;13748:57;-1:-1:-1;13820:8:0;13831:13;13842:2;13748:57;13831:13;:::i;:::-;13820:24;-1:-1:-1;13859:8:0;13881:7;13820:24;13881:2;:7;:::i;:::-;13870:18;;13876:1;13870:18;:::i;:::-;13859:29;;13918:8;13923:2;13918:4;:8::i;:::-;13903:1;13909:5;:1;13913;13909:5;:::i;:::-;13905:9;;:1;:9;:::i;:::-;13903:12;;;;;;;;:::i;:::-;;;;:23;;;;;;;;;;;13956:8;13961:2;13956:4;:8::i;:::-;13941:1;13947:5;:1;13951;13947:5;:::i;:::-;13943:9;;:1;:9;:::i;:::-;13941:12;;;;;;;;:::i;:::-;;;;:23;;;;;;;;;;-1:-1:-1;;13728:3:0;;;;;-1:-1:-1;13703:273:0;;-1:-1:-1;13703:273:0;;-1:-1:-1;14000:1:0;13537:473;-1:-1:-1;;13537:473:0:o;16308:278::-;16501:10;;;;;;16495:16;;;;16491:88;;16534:10;;;;;16545:21;;;:9;:21;;;;;;16528:39;;16534:10;16528:5;:39::i;14018:149::-;14064:8;14093:2;14089:1;:6;;;14085:74;;;14111:8;:1;14115:4;14111:8;:::i;:::-;14104:16;;;14018:149;-1:-1:-1;;14018:149:0:o;14085:74::-;14150:8;:1;14154:4;14150:8;:::i;14085:74::-;14018:149;;;:::o;14719:591::-;14803:21;;;14795:67;;;;;;;18593:2:1;14795:67:0;;;18575:21:1;18632:2;18612:18;;;18605:30;18671:34;18651:18;;;18644:62;18742:3;18722:18;;;18715:31;18763:19;;14795:67:0;18391:397:1;14795:67:0;14962:18;;;14937:22;14962:18;;;:9;:18;;;;;;14999:24;;;;14991:71;;;;;;;18995:2:1;14991:71:0;;;18977:21:1;19034:2;19014:18;;;19007:30;19073:34;19053:18;;;19046:62;19144:4;19124:18;;;19117:32;19166:19;;14991:71:0;18793:398:1;14991:71:0;15098:18;;;;;;;:9;:18;;;;;15119:23;;;15098:44;;15164:12;:22;;15136:6;;15098:18;15164:22;;15136:6;;15164:22;:::i;:::-;;;;-1:-1:-1;;15204:37:0;;2403:25:1;;;15230:1:0;;15204:37;;;;;;2391:2:1;2376:18;15204:37:0;;;;;;;15254:48;15274:7;15291:1;15295:6;15254:19;:48::i;14:118:1:-;100:5;93:13;86:21;79:5;76:32;66:60;;122:1;119;112:12;137:241;193:6;246:2;234:9;225:7;221:23;217:32;214:52;;;262:1;259;252:12;214:52;301:9;288:23;320:28;342:5;320:28;:::i;383:477::-;532:2;521:9;514:21;495:4;564:6;558:13;607:6;602:2;591:9;587:18;580:34;666:6;661:2;653:6;649:15;644:2;633:9;629:18;623:50;722:1;717:2;708:6;697:9;693:22;689:31;682:42;851:2;781:66;776:2;768:6;764:15;760:88;749:9;745:104;741:113;733:121;;;383:477;;;;:::o;865:154::-;951:42;944:5;940:54;933:5;930:65;920:93;;1009:1;1006;999:12;1024:464;1109:6;1117;1125;1178:2;1166:9;1157:7;1153:23;1149:32;1146:52;;;1194:1;1191;1184:12;1146:52;1233:9;1220:23;1252:31;1277:5;1252:31;:::i;:::-;1302:5;-1:-1:-1;1359:2:1;1344:18;;1331:32;1372:33;1331:32;1372:33;:::i;:::-;1024:464;;1424:7;;-1:-1:-1;;;1478:2:1;1463:18;;;;1450:32;;1024:464::o;1493:315::-;1561:6;1569;1622:2;1610:9;1601:7;1597:23;1593:32;1590:52;;;1638:1;1635;1628:12;1590:52;1677:9;1664:23;1696:31;1721:5;1696:31;:::i;:::-;1746:5;1798:2;1783:18;;;;1770:32;;-1:-1:-1;;;1493:315:1:o;2005:247::-;2064:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:52;;;2133:1;2130;2123:12;2085:52;2172:9;2159:23;2191:31;2216:5;2191:31;:::i;3320:156::-;3386:20;;3446:4;3435:16;;3425:27;;3415:55;;3466:1;3463;3456:12;3481:317;3547:6;3555;3608:2;3596:9;3587:7;3583:23;3579:32;3576:52;;;3624:1;3621;3614:12;3576:52;3647:27;3664:9;3647:27;:::i;:::-;3637:37;;3724:2;3713:9;3709:18;3696:32;3737:31;3762:5;3737:31;:::i;:::-;3787:5;3777:15;;;3481:317;;;;;:::o;3803:184::-;3855:77;3852:1;3845:88;3952:4;3949:1;3942:15;3976:4;3973:1;3966:15;3992:1311;4083:6;4091;4144:2;4132:9;4123:7;4119:23;4115:32;4112:52;;;4160:1;4157;4150:12;4112:52;4199:9;4186:23;4218:31;4243:5;4218:31;:::i;:::-;4268:5;-1:-1:-1;4292:2:1;4330:18;;;4317:32;4368:18;4398:14;;;4395:34;;;4425:1;4422;4415:12;4395:34;4463:6;4452:9;4448:22;4438:32;;4508:7;4501:4;4497:2;4493:13;4489:27;4479:55;;4530:1;4527;4520:12;4479:55;4566:2;4553:16;4588:2;4584;4581:10;4578:36;;;4594:18;;:::i;:::-;4640:2;4637:1;4633:10;4672:2;4666:9;4731:66;4726:2;4722;4718:11;4714:84;4706:6;4702:97;4849:6;4837:10;4834:22;4829:2;4817:10;4814:18;4811:46;4808:72;;;4860:18;;:::i;:::-;4896:2;4889:22;4946:18;;;4980:15;;;;-1:-1:-1;5022:11:1;;;5018:20;;;5050:19;;;5047:39;;;5082:1;5079;5072:12;5047:39;5106:11;;;;5126:146;5142:6;5137:3;5134:15;5126:146;;;5208:21;5225:3;5208:21;:::i;:::-;5196:34;;5159:12;;;;5250;;;;5126:146;;;5291:6;5281:16;;;;;;;;3992:1311;;;;;:::o;5308:382::-;5373:6;5381;5434:2;5422:9;5413:7;5409:23;5405:32;5402:52;;;5450:1;5447;5440:12;5402:52;5489:9;5476:23;5508:31;5533:5;5508:31;:::i;:::-;5558:5;-1:-1:-1;5615:2:1;5600:18;;5587:32;5628:30;5587:32;5628:30;:::i;5695:180::-;5754:6;5807:2;5795:9;5786:7;5782:23;5778:32;5775:52;;;5823:1;5820;5813:12;5775:52;-1:-1:-1;5846:23:1;;5695:180;-1:-1:-1;5695:180:1:o;5880:388::-;5948:6;5956;6009:2;5997:9;5988:7;5984:23;5980:32;5977:52;;;6025:1;6022;6015:12;5977:52;6064:9;6051:23;6083:31;6108:5;6083:31;:::i;6273:184::-;6325:77;6322:1;6315:88;6422:4;6419:1;6412:15;6446:4;6443:1;6436:15;6462:212;6504:3;6542:5;6536:12;6586:6;6579:4;6572:5;6568:16;6563:3;6557:36;6648:1;6612:16;;6637:13;;;-1:-1:-1;6612:16:1;;6462:212;-1:-1:-1;6462:212:1:o;6679:437::-;6758:1;6754:12;;;;6801;;;6822:61;;6876:4;6868:6;6864:17;6854:27;;6822:61;6929:2;6921:6;6918:14;6898:18;6895:38;6892:218;;6966:77;6963:1;6956:88;7067:4;7064:1;7057:15;7095:4;7092:1;7085:15;6892:218;;6679:437;;;:::o;7377:1797::-;7886:10;7881:3;7874:23;7856:3;7916:38;7951:1;7946:3;7942:11;7934:6;7916:38;:::i;:::-;7974:17;7970:2;7963:29;8011:2;8033:1;8066:6;8060:13;8096:1;8116;8143:9;8140:1;8136:17;8126:27;;8203:1;8192:9;8188:17;8224:18;8214:61;;8268:4;8260:6;8256:17;8246:27;;8214:61;8294:2;8342;8334:6;8331:14;8311:18;8308:38;8305:218;;8379:77;8376:1;8369:88;8480:4;8477:1;8470:15;8508:4;8505:1;8498:15;8305:218;8539:18;8566:207;;;;8787:1;8782:336;;;;8532:586;;8566:207;8622:66;8611:9;8607:82;8602:2;8598;8594:11;8587:103;8760:2;8748:6;8741:14;8734:22;8726:6;8722:35;8718:2;8714:44;8710:53;8703:60;;8566:207;;8782:336;7194:1;7187:14;;;7231:4;7218:18;;8877:1;8891:173;8905:6;8902:1;8899:13;8891:173;;;8991:14;;8974:10;;;8970:19;;8963:43;9034:16;;;;8920:10;;8891:173;;;8895:3;;9105:2;9096:6;9092:2;9088:15;9084:24;9077:31;;8532:586;;;;;;;9134:34;9164:3;7324:13;7312:26;;7363:2;7354:12;;7247:125;9134:34;9127:41;7377:1797;-1:-1:-1;;;;;;;7377:1797:1:o;9489:245::-;9556:6;9609:2;9597:9;9588:7;9584:23;9580:32;9577:52;;;9625:1;9622;9615:12;9577:52;9657:9;9651:16;9676:28;9698:5;9676:28;:::i;9739:184::-;9791:77;9788:1;9781:88;9888:4;9885:1;9878:15;9912:4;9909:1;9902:15;9928:175;9965:3;10009:4;10002:5;9998:16;10038:4;10029:7;10026:17;10023:43;;10046:18;;:::i;:::-;10095:1;10082:15;;9928:175;-1:-1:-1;;9928:175:1:o;10108:125::-;10173:9;;;10194:10;;;10191:36;;;10207:18;;:::i;11307:168::-;11380:9;;;11411;;11428:15;;;11422:22;;11408:37;11398:71;;11449:18;;:::i;11480:196::-;11519:3;11547:5;11537:39;;11556:18;;:::i;:::-;-1:-1:-1;11603:66:1;11592:78;;11480:196::o;13616:502::-;13979:10;13974:3;13967:23;13949:3;14009:38;14044:1;14039:3;14035:11;14027:6;14009:38;:::i;:::-;14067:17;14056:29;;14109:2;14101:11;;13616:502;-1:-1:-1;;;13616:502:1:o;15340:184::-;15392:77;15389:1;15382:88;15489:4;15486:1;15479:15;15513:4;15510:1;15503:15;15529:120;15569:1;15595;15585:35;;15600:18;;:::i;:::-;-1:-1:-1;15634:9:1;;15529:120::o;15654:128::-;15721:9;;;15742:11;;;15739:37;;;15756:18;;:::i;16194:476::-;16283:1;16320:5;16283:1;16334:330;16355:7;16345:8;16342:21;16334:330;;;16474:4;16406:66;16402:77;16396:4;16393:87;16390:113;;;16483:18;;:::i;:::-;16533:7;16523:8;16519:22;16516:55;;;16553:16;;;;16516:55;16632:22;;;;16592:15;;;;16334:330;;;16338:3;16194:476;;;;;:::o;16675:866::-;16724:5;16754:8;16744:80;;-1:-1:-1;16795:1:1;16809:5;;16744:80;16843:4;16833:76;;-1:-1:-1;16880:1:1;16894:5;;16833:76;16925:4;16943:1;16938:59;;;;17011:1;17006:130;;;;16918:218;;16938:59;16968:1;16959:10;;16982:5;;;17006:130;17043:3;17033:8;17030:17;17027:43;;;17050:18;;:::i;:::-;-1:-1:-1;;17106:1:1;17092:16;;17121:5;;16918:218;;17220:2;17210:8;17207:16;17201:3;17195:4;17192:13;17188:36;17182:2;17172:8;17169:16;17164:2;17158:4;17155:12;17151:35;17148:77;17145:159;;;-1:-1:-1;17257:19:1;;;17289:5;;17145:159;17336:34;17361:8;17355:4;17336:34;:::i;:::-;17466:6;17398:66;17394:79;17385:7;17382:92;17379:118;;;17477:18;;:::i;:::-;17515:20;;16675:866;-1:-1:-1;;;16675:866:1:o;17546:131::-;17606:5;17635:36;17662:8;17656:4;17635:36;:::i;17682:165::-;17720:1;17754:4;17751:1;17747:12;17778:3;17768:37;;17785:18;;:::i;:::-;17837:3;17830:4;17827:1;17823:12;17819:22;17814:27;;;17682:165;;;;:::o;17852:225::-;17956:4;17935:12;;;17949;;;17931:31;17982:22;;;;18023:24;;;18013:58;;18051:18;;:::i;18082:151::-;18172:4;18165:12;;;18151;;;18147:31;;18190:14;;18187:40;;;18207:18;;:::i;18238:148::-;18326:4;18305:12;;;18319;;;18301:31;;18344:13;;18341:39;;;18360:18;;:::i

Swarm Source

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