ETH Price: $2,677.01 (-2.54%)
Gas: 0.8 Gwei

Token

ChadToken (CHAD)
 

Overview

Max Total Supply

11,055,517.75182218133175 CHAD

Holders

150 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$504.95

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: CHAD 5
Balance
1,806,051.166803078750604807 CHAD

Value
$82.49 ( ~0.0308142449395287 Eth) [16.3362%]
0xcea2352536763095c9f628bf530b8b7de6597cd3
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

ChadSquad is a platform for completing NFT sticker albums. Users can participate in leaderboards competition by providing trading liquidity or try out luck in a weekly lottery draw.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChadToken

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
byzantium EvmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-04
*/

/*                                    
  .g8"""bgd `7MMF'  `7MMF'      db      `7MM"""Yb.                             
.dP'     `M   MM      MM       ;MM:       MM    `Yb.                           
dM'       `   MM      MM      ,V^MM.      MM     `Mb                           
MM            MMmmmmmmMM     ,M  `MM      MM      MM                           
MM.           MM      MM     AbmmmqMA     MM     ,MP                           
`Mb.     ,'   MM      MM    A'     VML    MM    ,dP'                           
  `"bmmmd'  .JMML.  .JMML..AMA.   .AMMA..JMMmmmdP'                             
                                                                               
`7MM"""YMM `7MMF'`7MN.   `7MF'     db      `7MN.   `7MF' .g8"""bgd `7MM"""YMM  
  MM    `7   MM    MMN.    M      ;MM:       MMN.    M .dP'     `M   MM    `7  
  MM   d     MM    M YMb   M     ,V^MM.      M YMb   M dM'       `   MM   d    
  MM""MM     MM    M  `MN. M    ,M  `MM      M  `MN. M MM            MMmmMM    
  MM   Y     MM    M   `MM.M    AbmmmqMA     M   `MM.M MM.           MM   Y  , 
  MM         MM    M     YMM   A'     VML    M     YMM `Mb.     ,'   MM     ,M 
.JMML.     .JMML..JML.    YM .AMA.   .AMMA..JML.    YM   `"bmmmd'  .JMMmmmmMMM 
*/

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/GSN/Context.sol



pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol



pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/math/SafeMath.sol



pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/utils/Address.sol



pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol



pragma solidity ^0.6.0;





/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol



pragma solidity ^0.6.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/ChadToken.sol

pragma solidity ^0.6.6;




contract ChadToken is ERC20{
    
    using SafeERC20 for IERC20;
    using SafeMath for uint256;


    struct stakeTracker {
        uint256 lastBlockChecked;
        uint256 rewards;
        uint256 mangasPoolTokens;
        uint256 chadPoolTokens;
    }
    
    mapping(address => stakeTracker) private stakedBalances;

    address private owner;
    address private devAddress;
    address private bossAddress;
    address private boss2Address;

    address public fundVotingAddress;
    
    bool public isSendingFunds = false;
    
    uint256 private lastBlockSent;
    
    uint256 public liquidityMultiplier = 70;
    uint256 public miningDifficulty = 40000;
    
    IERC20 private mangas;
    IERC20 private chad;
    
    IERC20 private mangasV2;
    address public mangasUniswapV2Pair;
    
    IERC20 private chadV2;
    address public chadUniswapV2Pair;
    uint256 public start_block;

    uint256 totalLiquidityStaked;


    modifier _onlyOwner() {
        require(msg.sender == owner);
        _;
    }
    
    
    modifier updateStakingReward(address _account) {
        uint256 liquidityBonus;
        if (block.number >= start_block && stakedBalances[_account].chadPoolTokens > 0) {
            liquidityBonus = stakedBalances[_account].chadPoolTokens.div(liquidityMultiplier);
        }
        if (block.number >= start_block && block.number > stakedBalances[_account].lastBlockChecked) {

            uint256 lastBlockChecked = stakedBalances[_account].lastBlockChecked;
            if(stakedBalances[_account].lastBlockChecked == 0) {
                lastBlockChecked = block.number < start_block ? block.number : start_block;
            }
            uint256 rewardBlocks = block.number.sub(lastBlockChecked);

            if (stakedBalances[_account].mangasPoolTokens > 0) {
                stakedBalances[_account].rewards = stakedBalances[_account].rewards.add((stakedBalances[_account].mangasPoolTokens.add(liquidityBonus)).mul(rewardBlocks).div(miningDifficulty));
                stakedBalances[_account].lastBlockChecked = block.number;
                emit Rewards(_account, stakedBalances[_account].rewards);                                                     
            }
        }
        _;
    }
    
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    event mangasUniStaked(address indexed user, uint256 amount, uint256 totalLiquidityStaked);
    
    event chadUniStaked(address indexed user, uint256 amount, uint256 totalLiquidityStaked);
    
    event mangasUniWithdrawn(address indexed user, uint256 amount, uint256 totalLiquidityStaked);
    
    event chadUniWithdrawn(address indexed user, uint256 amount, uint256 totalLiquidityStaked);
    
    event Rewards(address indexed user, uint256 reward);
    
    event FundsSentToFundingAddress(address indexed user, uint256 amount);
    
    event votingAddressChanged(address indexed user, address votingAddress);
    
    event mangasPairAddressChanged(address indexed user, address mangasPairAddress);
    
    event chadPairAddressChanged(address indexed user, address chadPairAddress);
    
    event difficultyChanged(address indexed user, uint256 difficulty);


    constructor(address _devAddress, address _bossAddress, address _boss2Address, address _mangasLP, uint256 _start_block) public payable ERC20("ChadToken", "CHAD") {
        owner = msg.sender;
        devAddress = _devAddress;
        bossAddress = _bossAddress;
        boss2Address = _boss2Address;
        setManGasPairAddress(_mangasLP);        
        uint256 supply = 100;
        _mint(msg.sender, supply.mul(10 ** 18));
        lastBlockSent = block.number;
        start_block = _start_block;
    }
    
    function transferOwnership(address newOwner) external _onlyOwner {
        assert(newOwner != address(0)/*, "Ownable: new owner is the zero address"*/);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
    
    function setVotingAddress(address _account) public _onlyOwner {
        fundVotingAddress = _account;
        emit votingAddressChanged(msg.sender, fundVotingAddress);
    }
    
    function setManGasPairAddress(address _uniV2address) public _onlyOwner {
        mangasUniswapV2Pair = _uniV2address;
        mangasV2 = IERC20(mangasUniswapV2Pair);
        emit mangasPairAddressChanged(msg.sender, mangasUniswapV2Pair);
    }

    function setChadPairAddress(address _uniV2address) public _onlyOwner {
        chadUniswapV2Pair = _uniV2address;
        chadV2 = IERC20(chadUniswapV2Pair);
        emit chadPairAddressChanged(msg.sender, chadUniswapV2Pair);
    }
    
     function setMiningDifficulty(uint256 amount) public _onlyOwner {
       miningDifficulty = amount;
       emit difficultyChanged(msg.sender, miningDifficulty);
   }
    
    function stake(uint256 amount) public updateStakingReward(msg.sender) {
        mangasV2.safeTransferFrom(msg.sender, address(this), amount);
        stakedBalances[msg.sender].mangasPoolTokens = stakedBalances[msg.sender].mangasPoolTokens.add(amount);
        totalLiquidityStaked = totalLiquidityStaked.add(amount);                                                                              
        emit mangasUniStaked(msg.sender, stakedBalances[msg.sender].mangasPoolTokens, totalLiquidityStaked);
    }
    
    function withdraw(uint256 amount) public updateStakingReward(msg.sender) {
        mangasV2.safeTransfer(msg.sender, amount);
        stakedBalances[msg.sender].mangasPoolTokens = stakedBalances[msg.sender].mangasPoolTokens.sub(amount);
        totalLiquidityStaked = totalLiquidityStaked.sub(amount);                                                                              
        emit mangasUniWithdrawn(msg.sender, amount, totalLiquidityStaked);
    }
    
    
    
    function stakeChadUni(uint256 amount) public updateStakingReward(msg.sender) {
        chadV2.safeTransferFrom(msg.sender, address(this), amount);
        stakedBalances[msg.sender].chadPoolTokens = stakedBalances[msg.sender].chadPoolTokens.add(amount);
        totalLiquidityStaked = totalLiquidityStaked.add(amount);                                                                              
        emit chadUniStaked(msg.sender, amount, totalLiquidityStaked);
    }
    
    function withdrawChadUni(uint256 amount) public updateStakingReward(msg.sender) {
        chadV2.safeTransfer(msg.sender, amount);
        stakedBalances[msg.sender].chadPoolTokens = stakedBalances[msg.sender].chadPoolTokens.sub(amount);
        totalLiquidityStaked = totalLiquidityStaked.sub(amount);                                                                              
        emit chadUniWithdrawn(msg.sender, amount, totalLiquidityStaked);
    }
    
    function getAddressStakeAmount(address _account) public view returns (uint256) {
        return stakedBalances[_account].mangasPoolTokens;
    }
    
    function getAddressStakeAmountLP(address _account) public view returns (uint256) {
        return stakedBalances[_account].chadPoolTokens;
    }
    
    function myRewardsBalance(address _account) public view returns(uint256) {
        uint256 liquidityBonus;
        if (block.number >= start_block && stakedBalances[_account].chadPoolTokens > 0) {
            liquidityBonus = stakedBalances[_account].chadPoolTokens.div(liquidityMultiplier);
        }
        if (block.number >= start_block && block.number > stakedBalances[_account].lastBlockChecked) {

            uint256 lastBlockChecked = stakedBalances[_account].lastBlockChecked;
            if(stakedBalances[_account].lastBlockChecked == 0) {
                lastBlockChecked = block.number < start_block ? block.number : start_block;
            }
            uint256 rewardBlocks = block.number.sub(lastBlockChecked);

            if (stakedBalances[_account].mangasPoolTokens > 0) {
                return stakedBalances[_account].rewards.add((stakedBalances[_account].mangasPoolTokens.add(liquidityBonus)).mul(rewardBlocks).div(miningDifficulty));
            } else {
                return 0;
            }
        }
    }
    
    function setDevAddress(address _devAddress) public _onlyOwner returns(uint256) {
        devAddress = _devAddress;
    }

    function setBossAddress(address _addr) public _onlyOwner returns(uint256) {
        bossAddress = _addr;
    }

    function setBoss2Address(address _addr) public _onlyOwner returns(uint256) {
        boss2Address = _addr;
    }

    function getReward() public updateStakingReward(msg.sender) {
        require(0 < stakedBalances[msg.sender].rewards, "More than 0");
        uint256 reward = stakedBalances[msg.sender].rewards;

        stakedBalances[msg.sender].rewards = 0;

        // 75% to User 
        _mint(msg.sender, reward.div(20).mul(15));

        // 20% to Funding pool
        _mint(address(this), reward.div(20).mul(4));

        // 5% to Dev address
        uint256 devfee = reward.div(20).mul(1);

        // Boss
       _mint(bossAddress, devfee.div(100).mul(35));
        // CoWorker
       _mint(boss2Address, devfee.div(100).mul(35));
        // Dev
       _mint(devAddress, devfee.div(100).mul(30));

        emit Rewards(msg.sender, reward);
    }
    
    function toggleFundsTransfer() public _onlyOwner {
        isSendingFunds = !isSendingFunds;
    }
    
    function sendChadToFund(uint256 amount) public {
        if (!isSendingFunds) {
            return;
        }
        lastBlockSent = block.number;
        IERC20(address(this)).safeTransfer(fundVotingAddress, amount);
        emit FundsSentToFundingAddress(msg.sender, amount);
    }    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"},{"internalType":"address","name":"_bossAddress","type":"address"},{"internalType":"address","name":"_boss2Address","type":"address"},{"internalType":"address","name":"_mangasLP","type":"address"},{"internalType":"uint256","name":"_start_block","type":"uint256"}],"stateMutability":"payable","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsSentToFundingAddress","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Rewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"chadPairAddress","type":"address"}],"name":"chadPairAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalLiquidityStaked","type":"uint256"}],"name":"chadUniStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalLiquidityStaked","type":"uint256"}],"name":"chadUniWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"difficulty","type":"uint256"}],"name":"difficultyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"mangasPairAddress","type":"address"}],"name":"mangasPairAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalLiquidityStaked","type":"uint256"}],"name":"mangasUniStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalLiquidityStaked","type":"uint256"}],"name":"mangasUniWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"votingAddress","type":"address"}],"name":"votingAddressChanged","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chadUniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"fundVotingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAddressStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAddressStakeAmountLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","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":"isSendingFunds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mangasUniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"myRewardsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendChadToFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setBoss2Address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setBossAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniV2address","type":"address"}],"name":"setChadPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniV2address","type":"address"}],"name":"setManGasPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMiningDifficulty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"setVotingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeChadUni","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleFundsTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawChadUni","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040819052600b805460a060020a60ff02191690556046600d55619c40600e556200340a38819003908190833981810160405260a08110156200004357600080fd5b508051602080830151604080850151606086015160809096015182518084018452600981527f43686164546f6b656e00000000000000000000000000000000000000000000008187019081528451808601909552600485527f4348414400000000000000000000000000000000000000000000000000000000968501969096528051969794969295919390929091620000e091600391906200045c565b508051620000f69060049060208401906200045c565b505060058054601260ff19909116179055506007805433600160a060020a031991821617909155600880548216600160a060020a0388811691909117909155600980548316878316179055600a80549092169085161790556200016282640100000000620001ad810204565b60646200019a336200018b83670de0b6b3a7640000640100000000620023616200022b82021704565b640100000000620002ac810204565b5043600c55601555506200050192505050565b600754600160a060020a03163314620001c557600080fd5b60128054600160a060020a03808416600160a060020a031992831617928390556011805490921692169182179055604080519182525133917fad65e488ba1f64138d88583d41aa5e765f2e3769ae5f59646dd9a9889b3858a1919081900360200190a250565b6000826200023c57506000620002a6565b828202828482816200024a57fe5b0414620002a3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620033e96021913960400191505060405180910390fd5b90505b92915050565b600160a060020a0382166200032257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200033960008383640100000000620003e2810204565b600254620003569082640100000000620022ed620003e782021704565b600255600160a060020a0382166000908152602081905260409020546200038c9082640100000000620022ed620003e782021704565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b600082820183811015620002a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200049f57805160ff1916838001178555620004cf565b82800160010185558215620004cf579182015b82811115620004cf578251825591602001919060010190620004b2565b50620004dd929150620004e1565b5090565b620004fe91905b80821115620004dd5760008155600101620004e8565b90565b612ed880620005116000396000f3fe608060405234801561001057600080fd5b5060043610610279576000357c010000000000000000000000000000000000000000000000000000000090048063740f737c11610162578063b40b9bb6116100da578063c59fd923116100a9578063dd62ed3e1161008e578063dd62ed3e1461078d578063ee02b3c7146107c8578063f2fde38b146107d057610279565b8063c59fd9231461073d578063d0d41fe11461075a57610279565b8063b40b9bb6146106f2578063b6541945146106fa578063b87fb3db14610702578063be35ef141461070a57610279565b806395d89b4111610131578063a57306dc11610116578063a57306dc14610669578063a694fc3a1461069c578063a9059cbb146106b957610279565b806395d89b4114610628578063a457c2d71461063057610279565b8063740f737c146105875780637490403a146105ba578063780fa434146105c25780637a6cfcab146105f557610279565b80632a1072b3116101f55780633d18b912116101c45780634f620536116101a95780634f620536146105195780635a666d251461054c57806370a082311461055457610279565b80633d18b912146104de5780634a1528f8146104e657610279565b80632a1072b3146104375780632e1a7d4d1461046a578063313ce5671461048757806339509351146104a557610279565b8063095ea7b31161024c57806315b239011161023157806315b23901146103a957806318160ddd146103da57806323b872dd146103f457610279565b8063095ea7b3146103535780630a4cb9391461038c57610279565b806303acf1591461027e57806304f0ca551461029d578063069c8a04146102ba57806306fdde03146102d6575b600080fd5b61029b6004803603602081101561029457600080fd5b5035610803565b005b61029b600480360360208110156102b357600080fd5b5035610afc565b6102c2610da9565b604080519115158252519081900360200190f35b6102de610dca565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610318578181015183820152602001610300565b50505050905090810190601f1680156103455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c26004803603604081101561036957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e7e565b61029b600480360360208110156103a257600080fd5b5035610e9c565b6103b1610efe565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103e2610f1a565b60408051918252519081900360200190f35b6102c26004803603606081101561040a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610f20565b61029b6004803603602081101561044d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fc7565b61029b6004803603602081101561048057600080fd5b5035611076565b61048f611322565b6040805160ff9092168252519081900360200190f35b6102c2600480360360408110156104bb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561132b565b61029b61138c565b61029b600480360360208110156104fc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661173e565b6103e26004803603602081101561052f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117ed565b6103b161185d565b6103e26004803603602081101561056a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611879565b6103e26004803603602081101561059d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118a5565b6103b1611915565b6103e2600480360360208110156105d857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611931565b61029b6004803603602081101561060b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661195c565b6102de611a03565b6102c26004803603604081101561064657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611a82565b6103e26004803603602081101561067f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611afd565b61029b600480360360208110156106b257600080fd5b5035611cd6565b6102c2600480360360408110156106cf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611f99565b6103e2611fad565b6103e2611fb3565b6103e2611fb9565b6103e26004803603602081101561072057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611fbf565b61029b6004803603602081101561075357600080fd5b5035611fea565b6103e26004803603602081101561077057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661207a565b6103e2600480360360408110156107a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166120ea565b61029b612122565b61029b600480360360208110156107e657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612193565b336000601554431015801561083f575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b1561088257600d5473ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090206003015461087f9163ffffffff61226216565b90505b60155443101580156108b8575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b15610a435773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054806108fe5760155443106108f9576015546108fb565b435b90505b6000610910438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602052604090206002015490915015610a4057600e5473ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600201546109d8916109a39161099790859061098b908963ffffffff6122ed16565b9063ffffffff61236116565b9063ffffffff61226216565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600660205260409020600101549063ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b601354610a6d9073ffffffffffffffffffffffffffffffffffffffff16338563ffffffff6123d416565b33600090815260066020526040902060030154610a90908463ffffffff6122ab16565b33600090815260066020526040902060030155601654610ab6908463ffffffff6122ab16565b6016819055604080518581526020810192909252805133927f911571e5bafde6a5c622b035056841d863214cc3fed5f14d864905a63917e84e92908290030190a2505050565b3360006015544310158015610b38575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b15610b7b57600d5473ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040902060030154610b789163ffffffff61226216565b90505b6015544310158015610bb1575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b15610cef5773ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205480610bf7576015544310610bf257601554610bf4565b435b90505b6000610c09438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602052604090206002015490915015610cec57600e5473ffffffffffffffffffffffffffffffffffffffff8516600090815260066020526040902060020154610c84916109a39161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b601354610d1a9073ffffffffffffffffffffffffffffffffffffffff1633308663ffffffff61246616565b33600090815260066020526040902060030154610d3d908463ffffffff6122ed16565b33600090815260066020526040902060030155601654610d63908463ffffffff6122ed16565b6016819055604080518581526020810192909252805133927fb60b1ca45624277f380a49eddfe74b0203ab3918920f31eba50a15b88fe50ae192908290030190a2505050565b600b5474010000000000000000000000000000000000000000900460ff1681565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e745780601f10610e4957610100808354040283529160200191610e74565b820191906000526020600020905b815481529060010190602001808311610e5757829003601f168201915b5050505050905090565b6000610e92610e8b612501565b8484612505565b5060015b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610ec057600080fd5b600e81905560408051828152905133917f694487741fda3a05899e5ccf8286720c2e1152708453a1a35c016249befc5fcd919081900360200190a250565b600b5473ffffffffffffffffffffffffffffffffffffffff1681565b60025490565b6000610f2d84848461264c565b610fbd84610f39612501565b610fb885604051806060016040528060288152602001612de36028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610f84612501565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054919063ffffffff61282816565b612505565b5060019392505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610feb57600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617928390556011805490921692169182179055604080519182525133917fad65e488ba1f64138d88583d41aa5e765f2e3769ae5f59646dd9a9889b3858a1919081900360200190a250565b33600060155443101580156110b2575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b156110f557600d5473ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260409020600301546110f29163ffffffff61226216565b90505b601554431015801561112b575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b156112695773ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020548061117157601554431061116c5760155461116e565b435b90505b6000611183438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600201549091501561126657600e5473ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600201546111fe916109a39161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b6011546112939073ffffffffffffffffffffffffffffffffffffffff16338563ffffffff6123d416565b336000908152600660205260409020600201546112b6908463ffffffff6122ab16565b336000908152600660205260409020600201556016546112dc908463ffffffff6122ab16565b6016819055604080518581526020810192909252805133927f095ebebac70e70c3c2866beb969e3e682d89048dc038878b78c57101e802a0a192908290030190a2505050565b60055460ff1690565b6000610e92611338612501565b84610fb88560016000611349612501565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6122ed16565b33600060155443101580156113c8575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b1561140b57600d5473ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260409020600301546114089163ffffffff61226216565b90505b6015544310158015611441575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b1561157f5773ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020548061148757601554431061148257601554611484565b435b90505b6000611499438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600201549091501561157c57600e5473ffffffffffffffffffffffffffffffffffffffff8516600090815260066020526040902060020154611514916109a39161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b336000908152600660205260409020600101546115fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4d6f7265207468616e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360008181526006602052604081206001018054919055906116349061162f600f61098b85601463ffffffff61226216565b6128d9565b61164e3061162f600461098b85601463ffffffff61226216565b6000611666600161098b84601463ffffffff61226216565b60095490915061169c9073ffffffffffffffffffffffffffffffffffffffff1661162f602361098b85606463ffffffff61226216565b600a546116cf9073ffffffffffffffffffffffffffffffffffffffff1661162f602361098b85606463ffffffff61226216565b6008546117029073ffffffffffffffffffffffffffffffffffffffff1661162f601e61098b85606463ffffffff61226216565b60408051838152905133917fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a919081900360200190a250505050565b60075473ffffffffffffffffffffffffffffffffffffffff16331461176257600080fd5b6014805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617928390556013805490921692169182179055604080519182525133917f6503dcbc3f180d80ed1bba05a71a7f1a1a2ab1b2ebfadec7d5e750e1812809b2919081900360200190a250565b60075460009073ffffffffffffffffffffffffffffffffffffffff16331461181457600080fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60145473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60075460009073ffffffffffffffffffffffffffffffffffffffff1633146118cc57600080fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60125473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090206003015490565b60075473ffffffffffffffffffffffffffffffffffffffff16331461198057600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911791829055604080519290911682525133917f62a51664e003fa1af643b4857cc1abcee4cd6b54791027e0fbe33bc924e41eac919081900360200190a250565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e745780601f10610e4957610100808354040283529160200191610e74565b6000610e92611a8f612501565b84610fb885604051806060016040528060258152602001612e7e6025913960016000611ab9612501565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61282816565b6000806015544310158015611b39575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090206003015415155b15611b7c57600d5473ffffffffffffffffffffffffffffffffffffffff8416600090815260066020526040902060030154611b799163ffffffff61226216565b90505b6015544310158015611bb2575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205443115b15611cd05773ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205480611bf8576015544310611bf357601554611bf5565b435b90505b6000611c0a438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff861660009081526006602052604090206002015490915015611cc457600e5473ffffffffffffffffffffffffffffffffffffffff8616600090815260066020526040902060020154611cba91611c859161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600660205260409020600101549063ffffffff6122ed16565b93505050506118a0565b600093505050506118a0565b50919050565b3360006015544310158015611d12575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b15611d5557600d5473ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040902060030154611d529163ffffffff61226216565b90505b6015544310158015611d8b575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b15611ec95773ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205480611dd1576015544310611dcc57601554611dce565b435b90505b6000611de3438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602052604090206002015490915015611ec657600e5473ffffffffffffffffffffffffffffffffffffffff8516600090815260066020526040902060020154611e5e916109a39161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b601154611ef49073ffffffffffffffffffffffffffffffffffffffff1633308663ffffffff61246616565b33600090815260066020526040902060020154611f17908463ffffffff6122ed16565b33600090815260066020526040902060020155601654611f3d908463ffffffff6122ed16565b60168190553360008181526006602090815260409182902060020154825190815290810193909352805191927f4c9e6061bb5935938c69f8a57540f7f70cf2189b884727665b84eebdecaee7b9929081900390910190a2505050565b6000610e92611fa6612501565b848461264c565b600e5481565b600d5481565b60155481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090206002015490565b600b5474010000000000000000000000000000000000000000900460ff1661201157612077565b43600c55600b5461204090309073ffffffffffffffffffffffffffffffffffffffff168363ffffffff6123d416565b60408051828152905133917f9d7222da2cc210705445b483f242802ea957473cdd2257aacf02466f2e663482919081900360200190a25b50565b60075460009073ffffffffffffffffffffffffffffffffffffffff1633146120a157600080fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60075473ffffffffffffffffffffffffffffffffffffffff16331461214657600080fd5b600b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116740100000000000000000000000000000000000000009182900460ff1615909102179055565b60075473ffffffffffffffffffffffffffffffffffffffff1633146121b757600080fd5b73ffffffffffffffffffffffffffffffffffffffff81166121d457fe5b60075460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006122a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a16565b9392505050565b60006122a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612828565b6000828201838110156122a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261237057506000610e96565b8282028284828161237d57fe5b04146122a4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612dc26021913960400191505060405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612461908490612a95565b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526124fb908590612a95565b50505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316612571576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612e306024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166125dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d7a6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166126b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612e0b6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216612724576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612d576023913960400191505060405180910390fd5b61272f838383612461565b61277f81604051806060016040528060268152602001612d9c6026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff61282816565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822093909355908416815220546127c1908263ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561289657818101518382015260200161287e565b50505050905090810190601f1680156128c35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff821661295b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61296760008383612461565b60025461297a908263ffffffff6122ed16565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546129b3908263ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183612a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561289657818101518382015260200161287e565b506000838581612a8b57fe5b0495945050505050565b6060612af7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b6d9092919063ffffffff16565b80519091501561246157808060200190516020811015612b1657600080fd5b5051612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612e54602a913960400191505060405180910390fd5b6060612b7c8484600085612b84565b949350505050565b6060612b8f85612d50565b612bfa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310612c6457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612c27565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612cc6576040519150601f19603f3d011682016040523d82523d6000602084013e612ccb565b606091505b50915091508115612cdf579150612b7c9050565b805115612cef5780518082602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815286516024840152865187939192839260440191908501908083836000831561289657818101518382015260200161287e565b3b15159056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb1ff342366966c81b827b8e51b79f5c99070edef90d947dee71c87ba39b854864736f6c63430006060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000deccf98e9ac979595eb59947e060ebd2665a48bc0000000000000000000000009cdecbbe94e37f4dd52f1577be15959c0c45758e0000000000000000000000006b147ade06b13cb6d13cd18e5f61959ad64615e40000000000000000000000005602b452f691143e7029a100c2889bf6d533c12a0000000000000000000000000000000000000000000000000000000000a7cd08

Deployed Bytecode

0x608060405234801561001057600080fd5b5060043610610279576000357c010000000000000000000000000000000000000000000000000000000090048063740f737c11610162578063b40b9bb6116100da578063c59fd923116100a9578063dd62ed3e1161008e578063dd62ed3e1461078d578063ee02b3c7146107c8578063f2fde38b146107d057610279565b8063c59fd9231461073d578063d0d41fe11461075a57610279565b8063b40b9bb6146106f2578063b6541945146106fa578063b87fb3db14610702578063be35ef141461070a57610279565b806395d89b4111610131578063a57306dc11610116578063a57306dc14610669578063a694fc3a1461069c578063a9059cbb146106b957610279565b806395d89b4114610628578063a457c2d71461063057610279565b8063740f737c146105875780637490403a146105ba578063780fa434146105c25780637a6cfcab146105f557610279565b80632a1072b3116101f55780633d18b912116101c45780634f620536116101a95780634f620536146105195780635a666d251461054c57806370a082311461055457610279565b80633d18b912146104de5780634a1528f8146104e657610279565b80632a1072b3146104375780632e1a7d4d1461046a578063313ce5671461048757806339509351146104a557610279565b8063095ea7b31161024c57806315b239011161023157806315b23901146103a957806318160ddd146103da57806323b872dd146103f457610279565b8063095ea7b3146103535780630a4cb9391461038c57610279565b806303acf1591461027e57806304f0ca551461029d578063069c8a04146102ba57806306fdde03146102d6575b600080fd5b61029b6004803603602081101561029457600080fd5b5035610803565b005b61029b600480360360208110156102b357600080fd5b5035610afc565b6102c2610da9565b604080519115158252519081900360200190f35b6102de610dca565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610318578181015183820152602001610300565b50505050905090810190601f1680156103455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c26004803603604081101561036957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e7e565b61029b600480360360208110156103a257600080fd5b5035610e9c565b6103b1610efe565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103e2610f1a565b60408051918252519081900360200190f35b6102c26004803603606081101561040a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610f20565b61029b6004803603602081101561044d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fc7565b61029b6004803603602081101561048057600080fd5b5035611076565b61048f611322565b6040805160ff9092168252519081900360200190f35b6102c2600480360360408110156104bb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561132b565b61029b61138c565b61029b600480360360208110156104fc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661173e565b6103e26004803603602081101561052f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117ed565b6103b161185d565b6103e26004803603602081101561056a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611879565b6103e26004803603602081101561059d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118a5565b6103b1611915565b6103e2600480360360208110156105d857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611931565b61029b6004803603602081101561060b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661195c565b6102de611a03565b6102c26004803603604081101561064657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611a82565b6103e26004803603602081101561067f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611afd565b61029b600480360360208110156106b257600080fd5b5035611cd6565b6102c2600480360360408110156106cf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611f99565b6103e2611fad565b6103e2611fb3565b6103e2611fb9565b6103e26004803603602081101561072057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611fbf565b61029b6004803603602081101561075357600080fd5b5035611fea565b6103e26004803603602081101561077057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661207a565b6103e2600480360360408110156107a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166120ea565b61029b612122565b61029b600480360360208110156107e657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612193565b336000601554431015801561083f575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b1561088257600d5473ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090206003015461087f9163ffffffff61226216565b90505b60155443101580156108b8575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b15610a435773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054806108fe5760155443106108f9576015546108fb565b435b90505b6000610910438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602052604090206002015490915015610a4057600e5473ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600201546109d8916109a39161099790859061098b908963ffffffff6122ed16565b9063ffffffff61236116565b9063ffffffff61226216565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600660205260409020600101549063ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b601354610a6d9073ffffffffffffffffffffffffffffffffffffffff16338563ffffffff6123d416565b33600090815260066020526040902060030154610a90908463ffffffff6122ab16565b33600090815260066020526040902060030155601654610ab6908463ffffffff6122ab16565b6016819055604080518581526020810192909252805133927f911571e5bafde6a5c622b035056841d863214cc3fed5f14d864905a63917e84e92908290030190a2505050565b3360006015544310158015610b38575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b15610b7b57600d5473ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040902060030154610b789163ffffffff61226216565b90505b6015544310158015610bb1575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b15610cef5773ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205480610bf7576015544310610bf257601554610bf4565b435b90505b6000610c09438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602052604090206002015490915015610cec57600e5473ffffffffffffffffffffffffffffffffffffffff8516600090815260066020526040902060020154610c84916109a39161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b601354610d1a9073ffffffffffffffffffffffffffffffffffffffff1633308663ffffffff61246616565b33600090815260066020526040902060030154610d3d908463ffffffff6122ed16565b33600090815260066020526040902060030155601654610d63908463ffffffff6122ed16565b6016819055604080518581526020810192909252805133927fb60b1ca45624277f380a49eddfe74b0203ab3918920f31eba50a15b88fe50ae192908290030190a2505050565b600b5474010000000000000000000000000000000000000000900460ff1681565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e745780601f10610e4957610100808354040283529160200191610e74565b820191906000526020600020905b815481529060010190602001808311610e5757829003601f168201915b5050505050905090565b6000610e92610e8b612501565b8484612505565b5060015b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610ec057600080fd5b600e81905560408051828152905133917f694487741fda3a05899e5ccf8286720c2e1152708453a1a35c016249befc5fcd919081900360200190a250565b600b5473ffffffffffffffffffffffffffffffffffffffff1681565b60025490565b6000610f2d84848461264c565b610fbd84610f39612501565b610fb885604051806060016040528060288152602001612de36028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610f84612501565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054919063ffffffff61282816565b612505565b5060019392505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610feb57600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617928390556011805490921692169182179055604080519182525133917fad65e488ba1f64138d88583d41aa5e765f2e3769ae5f59646dd9a9889b3858a1919081900360200190a250565b33600060155443101580156110b2575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b156110f557600d5473ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260409020600301546110f29163ffffffff61226216565b90505b601554431015801561112b575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b156112695773ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020548061117157601554431061116c5760155461116e565b435b90505b6000611183438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600201549091501561126657600e5473ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600201546111fe916109a39161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b6011546112939073ffffffffffffffffffffffffffffffffffffffff16338563ffffffff6123d416565b336000908152600660205260409020600201546112b6908463ffffffff6122ab16565b336000908152600660205260409020600201556016546112dc908463ffffffff6122ab16565b6016819055604080518581526020810192909252805133927f095ebebac70e70c3c2866beb969e3e682d89048dc038878b78c57101e802a0a192908290030190a2505050565b60055460ff1690565b6000610e92611338612501565b84610fb88560016000611349612501565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6122ed16565b33600060155443101580156113c8575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b1561140b57600d5473ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260409020600301546114089163ffffffff61226216565b90505b6015544310158015611441575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b1561157f5773ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020548061148757601554431061148257601554611484565b435b90505b6000611499438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600201549091501561157c57600e5473ffffffffffffffffffffffffffffffffffffffff8516600090815260066020526040902060020154611514916109a39161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b336000908152600660205260409020600101546115fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4d6f7265207468616e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360008181526006602052604081206001018054919055906116349061162f600f61098b85601463ffffffff61226216565b6128d9565b61164e3061162f600461098b85601463ffffffff61226216565b6000611666600161098b84601463ffffffff61226216565b60095490915061169c9073ffffffffffffffffffffffffffffffffffffffff1661162f602361098b85606463ffffffff61226216565b600a546116cf9073ffffffffffffffffffffffffffffffffffffffff1661162f602361098b85606463ffffffff61226216565b6008546117029073ffffffffffffffffffffffffffffffffffffffff1661162f601e61098b85606463ffffffff61226216565b60408051838152905133917fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a919081900360200190a250505050565b60075473ffffffffffffffffffffffffffffffffffffffff16331461176257600080fd5b6014805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617928390556013805490921692169182179055604080519182525133917f6503dcbc3f180d80ed1bba05a71a7f1a1a2ab1b2ebfadec7d5e750e1812809b2919081900360200190a250565b60075460009073ffffffffffffffffffffffffffffffffffffffff16331461181457600080fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60145473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60075460009073ffffffffffffffffffffffffffffffffffffffff1633146118cc57600080fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60125473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090206003015490565b60075473ffffffffffffffffffffffffffffffffffffffff16331461198057600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911791829055604080519290911682525133917f62a51664e003fa1af643b4857cc1abcee4cd6b54791027e0fbe33bc924e41eac919081900360200190a250565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e745780601f10610e4957610100808354040283529160200191610e74565b6000610e92611a8f612501565b84610fb885604051806060016040528060258152602001612e7e6025913960016000611ab9612501565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61282816565b6000806015544310158015611b39575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090206003015415155b15611b7c57600d5473ffffffffffffffffffffffffffffffffffffffff8416600090815260066020526040902060030154611b799163ffffffff61226216565b90505b6015544310158015611bb2575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205443115b15611cd05773ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205480611bf8576015544310611bf357601554611bf5565b435b90505b6000611c0a438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff861660009081526006602052604090206002015490915015611cc457600e5473ffffffffffffffffffffffffffffffffffffffff8616600090815260066020526040902060020154611cba91611c859161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600660205260409020600101549063ffffffff6122ed16565b93505050506118a0565b600093505050506118a0565b50919050565b3360006015544310158015611d12575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015415155b15611d5557600d5473ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040902060030154611d529163ffffffff61226216565b90505b6015544310158015611d8b575073ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205443115b15611ec95773ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090205480611dd1576015544310611dcc57601554611dce565b435b90505b6000611de3438363ffffffff6122ab16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602052604090206002015490915015611ec657600e5473ffffffffffffffffffffffffffffffffffffffff8516600090815260066020526040902060020154611e5e916109a39161099790859061098b908963ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260066020908152604091829020600181018590554390558151938452905191927fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a929081900390910190a25b50505b601154611ef49073ffffffffffffffffffffffffffffffffffffffff1633308663ffffffff61246616565b33600090815260066020526040902060020154611f17908463ffffffff6122ed16565b33600090815260066020526040902060020155601654611f3d908463ffffffff6122ed16565b60168190553360008181526006602090815260409182902060020154825190815290810193909352805191927f4c9e6061bb5935938c69f8a57540f7f70cf2189b884727665b84eebdecaee7b9929081900390910190a2505050565b6000610e92611fa6612501565b848461264c565b600e5481565b600d5481565b60155481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090206002015490565b600b5474010000000000000000000000000000000000000000900460ff1661201157612077565b43600c55600b5461204090309073ffffffffffffffffffffffffffffffffffffffff168363ffffffff6123d416565b60408051828152905133917f9d7222da2cc210705445b483f242802ea957473cdd2257aacf02466f2e663482919081900360200190a25b50565b60075460009073ffffffffffffffffffffffffffffffffffffffff1633146120a157600080fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60075473ffffffffffffffffffffffffffffffffffffffff16331461214657600080fd5b600b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116740100000000000000000000000000000000000000009182900460ff1615909102179055565b60075473ffffffffffffffffffffffffffffffffffffffff1633146121b757600080fd5b73ffffffffffffffffffffffffffffffffffffffff81166121d457fe5b60075460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006122a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a16565b9392505050565b60006122a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612828565b6000828201838110156122a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261237057506000610e96565b8282028284828161237d57fe5b04146122a4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612dc26021913960400191505060405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612461908490612a95565b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526124fb908590612a95565b50505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316612571576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612e306024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166125dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d7a6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166126b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612e0b6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216612724576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612d576023913960400191505060405180910390fd5b61272f838383612461565b61277f81604051806060016040528060268152602001612d9c6026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff61282816565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822093909355908416815220546127c1908263ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561289657818101518382015260200161287e565b50505050905090810190601f1680156128c35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff821661295b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61296760008383612461565b60025461297a908263ffffffff6122ed16565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546129b3908263ffffffff6122ed16565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183612a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561289657818101518382015260200161287e565b506000838581612a8b57fe5b0495945050505050565b6060612af7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b6d9092919063ffffffff16565b80519091501561246157808060200190516020811015612b1657600080fd5b5051612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612e54602a913960400191505060405180910390fd5b6060612b7c8484600085612b84565b949350505050565b6060612b8f85612d50565b612bfa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310612c6457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612c27565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612cc6576040519150601f19603f3d011682016040523d82523d6000602084013e612ccb565b606091505b50915091508115612cdf579150612b7c9050565b805115612cef5780518082602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815286516024840152865187939192839260440191908501908083836000831561289657818101518382015260200161287e565b3b15159056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb1ff342366966c81b827b8e51b79f5c99070edef90d947dee71c87ba39b854864736f6c63430006060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000deccf98e9ac979595eb59947e060ebd2665a48bc0000000000000000000000009cdecbbe94e37f4dd52f1577be15959c0c45758e0000000000000000000000006b147ade06b13cb6d13cd18e5f61959ad64615e40000000000000000000000005602b452f691143e7029a100c2889bf6d533c12a0000000000000000000000000000000000000000000000000000000000a7cd08

-----Decoded View---------------
Arg [0] : _devAddress (address): 0xDEcCf98e9AC979595EB59947E060EBd2665a48bc
Arg [1] : _bossAddress (address): 0x9CdeCBBE94e37F4dD52f1577be15959c0c45758E
Arg [2] : _boss2Address (address): 0x6B147ade06b13Cb6D13CD18e5F61959AD64615e4
Arg [3] : _mangasLP (address): 0x5602B452F691143e7029a100c2889bf6d533C12A
Arg [4] : _start_block (uint256): 10997000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000deccf98e9ac979595eb59947e060ebd2665a48bc
Arg [1] : 0000000000000000000000009cdecbbe94e37f4dd52f1577be15959c0c45758e
Arg [2] : 0000000000000000000000006b147ade06b13cb6d13cd18e5f61959ad64615e4
Arg [3] : 0000000000000000000000005602b452f691143e7029a100c2889bf6d533c12a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000a7cd08


Deployed Bytecode Sourcemap

31316:9891:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31316:9891:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;37790:464:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37790:464:0;;:::i;:::-;;37301:477;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37301:477:0;;:::i;31836:34::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;18701:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18701:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20807:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20807:169:0;;;;;;;;;:::i;36106:167::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36106:167:0;;:::i;31791:32::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19776:100;;;:::i;:::-;;;;;;;;;;;;;;;;21450:321;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21450:321:0;;;;;;;;;;;;;;;;;;:::i;35603:247::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35603:247:0;;;;:::i;36812:465::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36812:465:0;;:::i;19628:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22180:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22180:218:0;;;;;;;;;:::i;40023:762::-;;;:::i;35858:235::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35858:235:0;;;;:::i;39901:114::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39901:114:0;;;;:::i;32188:32::-;;;:::i;19939:119::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19939:119:0;;;;:::i;39781:112::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39781:112:0;;;;:::i;32113:34::-;;;:::i;38424:146::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38424:146:0;;;;:::i;35415:176::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35415:176:0;;;;:::i;18903:87::-;;;:::i;22901:269::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22901:269:0;;;;;;;;;:::i;38582:1057::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38582:1057:0;;;;:::i;36285:515::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36285:515:0;;:::i;20271:175::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20271:175:0;;;;;;;;;:::i;31971:39::-;;;:::i;31925:::-;;;:::i;32227:26::-;;;:::i;38266:146::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38266:146:0;;;;:::i;40909:291::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40909:291:0;;:::i;39651:122::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39651:122:0;;;;:::i;20509:151::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20509:151:0;;;;;;;;;;;:::i;40797:100::-;;;:::i;35163:240::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35163:240:0;;;;:::i;37790:464::-;37858:10;32458:22;32511:11;;32495:12;:27;;:74;;;;-1:-1:-1;32526:24:0;;;32568:1;32526:24;;;:14;:24;;;;;:39;;;:43;;32495:74;32491:188;;;32647:19;;32603:24;;;;;;;:14;:24;;;;;:39;;;:64;;;:43;:64;:::i;:::-;32586:81;;32491:188;32709:11;;32693:12;:27;;:87;;;;-1:-1:-1;32739:24:0;;;;;;;:14;:24;;;;;:41;32724:12;:56;32693:87;32689:917;;;32826:24;;;32799;32826;;;:14;:24;;;;;:41;32885:46;32882:160;;32986:11;;32971:12;:26;:55;;33015:11;;32971:55;;;33000:12;32971:55;32952:74;;32882:160;33056:20;33079:34;:12;33096:16;33079:34;:16;:34;:::i;:::-;33134:24;;;33178:1;33134:24;;;:14;:24;;;;;:41;;;33056:57;;-1:-1:-1;33134:45:0;33130:465;;33358:16;;33273:24;;;;;;;:14;:24;;;;;:41;;;33235:141;;33272:103;;:81;;33340:12;;33273:61;;33319:14;33273:61;:45;:61;:::i;:::-;33272:67;:81;:67;:81;:::i;:::-;:85;:103;:85;:103;:::i;:::-;33235:24;;;;;;;:14;:24;;;;;:32;;;;:141;:36;:141;:::i;:::-;33200:24;;;;;;;:14;:24;;;;;;;;;:32;;;:176;;;33439:12;33395:56;;33475:51;;;;;;;33200:24;;33475:51;;;;;;;;;;;33130:465;32689:917;;;37881:6:::1;::::0;:39:::1;::::0;:6:::1;;37901:10;37913:6:::0;37881:39:::1;:19;:39;:::i;:::-;37990:10;37975:26;::::0;;;:14:::1;:26;::::0;;;;:41:::1;;::::0;:53:::1;::::0;38021:6;37975:53:::1;:45;:53;:::i;:::-;37946:10;37931:26;::::0;;;:14:::1;:26;::::0;;;;:41:::1;;:97:::0;38062:20:::1;::::0;:32:::1;::::0;38087:6;38062:32:::1;:24;:32;:::i;:::-;38039:20;:55:::0;;;38188:58:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;38205:10:::1;::::0;38188:58:::1;::::0;;;;;;;::::1;37790:464:::0;;;:::o;37301:477::-;37366:10;32458:22;32511:11;;32495:12;:27;;:74;;;;-1:-1:-1;32526:24:0;;;32568:1;32526:24;;;:14;:24;;;;;:39;;;:43;;32495:74;32491:188;;;32647:19;;32603:24;;;;;;;:14;:24;;;;;:39;;;:64;;;:43;:64;:::i;:::-;32586:81;;32491:188;32709:11;;32693:12;:27;;:87;;;;-1:-1:-1;32739:24:0;;;;;;;:14;:24;;;;;:41;32724:12;:56;32693:87;32689:917;;;32826:24;;;32799;32826;;;:14;:24;;;;;:41;32885:46;32882:160;;32986:11;;32971:12;:26;:55;;33015:11;;32971:55;;;33000:12;32971:55;32952:74;;32882:160;33056:20;33079:34;:12;33096:16;33079:34;:16;:34;:::i;:::-;33134:24;;;33178:1;33134:24;;;:14;:24;;;;;:41;;;33056:57;;-1:-1:-1;33134:45:0;33130:465;;33358:16;;33273:24;;;;;;;:14;:24;;;;;:41;;;33235:141;;33272:103;;:81;;33340:12;;33273:61;;33319:14;33273:61;:45;:61;:::i;33235:141::-;33200:24;;;;;;;:14;:24;;;;;;;;;:32;;;:176;;;33439:12;33395:56;;33475:51;;;;;;;33200:24;;33475:51;;;;;;;;;;;33130:465;32689:917;;;37389:6:::1;::::0;:58:::1;::::0;:6:::1;;37413:10;37433:4;37440:6:::0;37389:58:::1;:23;:58;:::i;:::-;37517:10;37502:26;::::0;;;:14:::1;:26;::::0;;;;:41:::1;;::::0;:53:::1;::::0;37548:6;37502:53:::1;:45;:53;:::i;:::-;37473:10;37458:26;::::0;;;:14:::1;:26;::::0;;;;:41:::1;;:97:::0;37589:20:::1;::::0;:32:::1;::::0;37614:6;37589:32:::1;:24;:32;:::i;:::-;37566:20;:55:::0;;;37715::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;37729:10:::1;::::0;37715:55:::1;::::0;;;;;;;::::1;37301:477:::0;;;:::o;31836:34::-;;;;;;;;;:::o;18701:83::-;18771:5;18764:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18738:13;;18764:12;;18771:5;;18764:12;;18771:5;18764:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18701:83;:::o;20807:169::-;20890:4;20907:39;20916:12;:10;:12::i;:::-;20930:7;20939:6;20907:8;:39::i;:::-;-1:-1:-1;20964:4:0;20807:169;;;;;:::o;36106:167::-;32356:5;;;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;36179:16:::1;:25:::0;;;36219:47:::1;::::0;;;;;;;36237:10:::1;::::0;36219:47:::1;::::0;;;;;::::1;::::0;;::::1;36106:167:::0;:::o;31791:32::-;;;;;;:::o;19776:100::-;19856:12;;19776:100;:::o;21450:321::-;21556:4;21573:36;21583:6;21591:9;21602:6;21573:9;:36::i;:::-;21620:121;21629:6;21637:12;:10;:12::i;:::-;21651:89;21689:6;21651:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;21671:12;:10;:12::i;:::-;21651:33;;;;;;;;;;;;;-1:-1:-1;21651:33:0;;;:89;;:37;:89;:::i;:::-;21620:8;:121::i;:::-;-1:-1:-1;21759:4:0;21450:321;;;;;:::o;35603:247::-;32356:5;;;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;35685:19:::1;:35:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;;35731:8:::1;:38:::0;;;;::::1;35749:19:::0;::::1;35731:38:::0;;::::1;::::0;;35785:57:::1;::::0;;;;;;35810:10:::1;::::0;35785:57:::1;::::0;;;;;::::1;::::0;;::::1;35603:247:::0;:::o;36812:465::-;36873:10;32458:22;32511:11;;32495:12;:27;;:74;;;;-1:-1:-1;32526:24:0;;;32568:1;32526:24;;;:14;:24;;;;;:39;;;:43;;32495:74;32491:188;;;32647:19;;32603:24;;;;;;;:14;:24;;;;;:39;;;:64;;;:43;:64;:::i;:::-;32586:81;;32491:188;32709:11;;32693:12;:27;;:87;;;;-1:-1:-1;32739:24:0;;;;;;;:14;:24;;;;;:41;32724:12;:56;32693:87;32689:917;;;32826:24;;;32799;32826;;;:14;:24;;;;;:41;32885:46;32882:160;;32986:11;;32971:12;:26;:55;;33015:11;;32971:55;;;33000:12;32971:55;32952:74;;32882:160;33056:20;33079:34;:12;33096:16;33079:34;:16;:34;:::i;:::-;33134:24;;;33178:1;33134:24;;;:14;:24;;;;;:41;;;33056:57;;-1:-1:-1;33134:45:0;33130:465;;33358:16;;33273:24;;;;;;;:14;:24;;;;;:41;;;33235:141;;33272:103;;:81;;33340:12;;33273:61;;33319:14;33273:61;:45;:61;:::i;33235:141::-;33200:24;;;;;;;:14;:24;;;;;;;;;:32;;;:176;;;33439:12;33395:56;;33475:51;;;;;;;33200:24;;33475:51;;;;;;;;;;;33130:465;32689:917;;;36896:8:::1;::::0;:41:::1;::::0;:8:::1;;36918:10;36930:6:::0;36896:41:::1;:21;:41;:::i;:::-;37009:10;36994:26;::::0;;;:14:::1;:26;::::0;;;;:43:::1;;::::0;:55:::1;::::0;37042:6;36994:55:::1;:47;:55;:::i;:::-;36963:10;36948:26;::::0;;;:14:::1;:26;::::0;;;;:43:::1;;:101:::0;37083:20:::1;::::0;:32:::1;::::0;37108:6;37083:32:::1;:24;:32;:::i;:::-;37060:20;:55:::0;;;37209:60:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;37228:10:::1;::::0;37209:60:::1;::::0;;;;;;;::::1;36812:465:::0;;;:::o;19628:83::-;19694:9;;;;19628:83;:::o;22180:218::-;22268:4;22285:83;22294:12;:10;:12::i;:::-;22308:7;22317:50;22356:10;22317:11;:25;22329:12;:10;:12::i;:::-;22317:25;;;;;;;;;;;;;;;;;;-1:-1:-1;22317:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;40023:762::-;40071:10;32458:22;32511:11;;32495:12;:27;;:74;;;;-1:-1:-1;32526:24:0;;;32568:1;32526:24;;;:14;:24;;;;;:39;;;:43;;32495:74;32491:188;;;32647:19;;32603:24;;;;;;;:14;:24;;;;;:39;;;:64;;;:43;:64;:::i;:::-;32586:81;;32491:188;32709:11;;32693:12;:27;;:87;;;;-1:-1:-1;32739:24:0;;;;;;;:14;:24;;;;;:41;32724:12;:56;32693:87;32689:917;;;32826:24;;;32799;32826;;;:14;:24;;;;;:41;32885:46;32882:160;;32986:11;;32971:12;:26;:55;;33015:11;;32971:55;;;33000:12;32971:55;32952:74;;32882:160;33056:20;33079:34;:12;33096:16;33079:34;:16;:34;:::i;:::-;33134:24;;;33178:1;33134:24;;;:14;:24;;;;;:41;;;33056:57;;-1:-1:-1;33134:45:0;33130:465;;33358:16;;33273:24;;;;;;;:14;:24;;;;;:41;;;33235:141;;33272:103;;:81;;33340:12;;33273:61;;33319:14;33273:61;:45;:61;:::i;33235:141::-;33200:24;;;;;;;:14;:24;;;;;;;;;:32;;;:176;;;33439:12;33395:56;;33475:51;;;;;;;33200:24;;33475:51;;;;;;;;;;;33130:465;32689:917;;;40121:10:::1;40106:26;::::0;;;:14:::1;:26;::::0;;;;:34:::1;;::::0;40094:62:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;40199:10;40167:14;40184:26:::0;;;:14:::1;:26;::::0;;;;:34:::1;;::::0;;40231:38;;;40184:34;40307:41:::1;::::0;40325:22:::1;40344:2;40325:14;40184:34:::0;40336:2:::1;40325:14;:10;:14;:::i;:22::-;40307:5;:41::i;:::-;40393:43;40407:4;40414:21;40433:1;40414:14;:6:::0;40425:2:::1;40414:14;:10;:14;:::i;40393:43::-;40479:14;40496:21;40515:1;40496:14;:6:::0;40507:2:::1;40496:14;:10;:14;:::i;:21::-;40552:11;::::0;40479:38;;-1:-1:-1;40546:43:0::1;::::0;40552:11:::1;;40565:23;40585:2;40565:15;40479:38:::0;40576:3:::1;40565:15;:10;:15;:::i;40546:43::-;40626:12;::::0;40620:44:::1;::::0;40626:12:::1;;40640:23;40660:2;40640:15;:6:::0;40651:3:::1;40640:15;:10;:15;:::i;40620:44::-;40696:10;::::0;40690:42:::1;::::0;40696:10:::1;;40708:23;40728:2;40708:15;:6:::0;40719:3:::1;40708:15;:10;:15;:::i;40690:42::-;40750:27;::::0;;;;;;;40758:10:::1;::::0;40750:27:::1;::::0;;;;;::::1;::::0;;::::1;33616:1;;40023:762:::0;;:::o;35858:235::-;32356:5;;;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;35938:17:::1;:33:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;;35982:6:::1;:34:::0;;;;::::1;35998:17:::0;::::1;35982:34:::0;;::::1;::::0;;36032:53:::1;::::0;;;;;;36055:10:::1;::::0;36032:53:::1;::::0;;;;;::::1;::::0;;::::1;35858:235:::0;:::o;39901:114::-;32356:5;;39967:7;;32356:5;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;39987:12:::1;:20:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;;39901:114::o;32188:32::-;;;;;;:::o;19939:119::-;20032:18;;;20005:7;20032:18;;;;;;;;;;;19939:119;;;;:::o;39781:112::-;32356:5;;39846:7;;32356:5;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;39866:11:::1;:19:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;;39781:112::o;32113:34::-;;;;;;:::o;38424:146::-;38523:24;;38496:7;38523:24;;;:14;:24;;;;;:39;;;;38424:146::o;35415:176::-;32356:5;;;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;35488:17:::1;:28:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;35532:51:::1;::::0;;35565:17;;;::::1;35532:51:::0;;;35553:10:::1;::::0;35532:51:::1;::::0;;;;;::::1;::::0;;::::1;35415:176:::0;:::o;18903:87::-;18975:7;18968:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18942:13;;18968:14;;18975:7;;18968:14;;18975:7;18968:14;;;;;;;;;;;;;;;;;;;;;;;;22901:269;22994:4;23011:129;23020:12;:10;:12::i;:::-;23034:7;23043:96;23082:15;23043:96;;;;;;;;;;;;;;;;;:11;:25;23055:12;:10;:12::i;:::-;23043:25;;;;;;;;;;;;;;;;;;-1:-1:-1;23043:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;38582:1057::-;38646:7;38666:22;38719:11;;38703:12;:27;;:74;;;;-1:-1:-1;38734:24:0;;;38776:1;38734:24;;;:14;:24;;;;;:39;;;:43;;38703:74;38699:188;;;38855:19;;38811:24;;;;;;;:14;:24;;;;;:39;;;:64;;;:43;:64;:::i;:::-;38794:81;;38699:188;38917:11;;38901:12;:27;;:87;;;;-1:-1:-1;38947:24:0;;;;;;;:14;:24;;;;;:41;38932:12;:56;38901:87;38897:735;;;39034:24;;;39007;39034;;;:14;:24;;;;;:41;39093:46;39090:160;;39194:11;;39179:12;:26;:55;;39223:11;;39179:55;;;39208:12;39179:55;39160:74;;39090:160;39264:20;39287:34;:12;39304:16;39287:34;:16;:34;:::i;:::-;39342:24;;;39386:1;39342:24;;;:14;:24;;;;;:41;;;39264:57;;-1:-1:-1;39342:45:0;39338:283;;39538:16;;39453:24;;;;;;;:14;:24;;;;;:41;;;39415:141;;39452:103;;:81;;39520:12;;39453:61;;39499:14;39453:61;:45;:61;:::i;39452:103::-;39415:24;;;;;;;:14;:24;;;;;:32;;;;:141;:36;:141;:::i;:::-;39408:148;;;;;;;39338:283;39604:1;39597:8;;;;;;;38897:735;38582:1057;;;;:::o;36285:515::-;36343:10;32458:22;32511:11;;32495:12;:27;;:74;;;;-1:-1:-1;32526:24:0;;;32568:1;32526:24;;;:14;:24;;;;;:39;;;:43;;32495:74;32491:188;;;32647:19;;32603:24;;;;;;;:14;:24;;;;;:39;;;:64;;;:43;:64;:::i;:::-;32586:81;;32491:188;32709:11;;32693:12;:27;;:87;;;;-1:-1:-1;32739:24:0;;;;;;;:14;:24;;;;;:41;32724:12;:56;32693:87;32689:917;;;32826:24;;;32799;32826;;;:14;:24;;;;;:41;32885:46;32882:160;;32986:11;;32971:12;:26;:55;;33015:11;;32971:55;;;33000:12;32971:55;32952:74;;32882:160;33056:20;33079:34;:12;33096:16;33079:34;:16;:34;:::i;:::-;33134:24;;;33178:1;33134:24;;;:14;:24;;;;;:41;;;33056:57;;-1:-1:-1;33134:45:0;33130:465;;33358:16;;33273:24;;;;;;;:14;:24;;;;;:41;;;33235:141;;33272:103;;:81;;33340:12;;33273:61;;33319:14;33273:61;:45;:61;:::i;33235:141::-;33200:24;;;;;;;:14;:24;;;;;;;;;:32;;;:176;;;33439:12;33395:56;;33475:51;;;;;;;33200:24;;33475:51;;;;;;;;;;;33130:465;32689:917;;;36366:8:::1;::::0;:60:::1;::::0;:8:::1;;36392:10;36412:4;36419:6:::0;36366:60:::1;:25;:60;:::i;:::-;36498:10;36483:26;::::0;;;:14:::1;:26;::::0;;;;:43:::1;;::::0;:55:::1;::::0;36531:6;36483:55:::1;:47;:55;:::i;:::-;36452:10;36437:26;::::0;;;:14:::1;:26;::::0;;;;:43:::1;;:101:::0;36572:20:::1;::::0;:32:::1;::::0;36597:6;36572:32:::1;:24;:32;:::i;:::-;36549:20;:55:::0;;;36714:10:::1;36726:26;::::0;;;:14:::1;:26;::::0;;;;;;;;:43:::1;;::::0;36698:94;;;;;;;::::1;::::0;;;;;;36714:10;;36698:94:::1;::::0;;;;;;;;;::::1;36285:515:::0;;;:::o;20271:175::-;20357:4;20374:42;20384:12;:10;:12::i;:::-;20398:9;20409:6;20374:9;:42::i;31971:39::-;;;;:::o;31925:::-;;;;:::o;32227:26::-;;;;:::o;38266:146::-;38363:24;;38336:7;38363:24;;;:14;:24;;;;;:41;;;;38266:146::o;40909:291::-;40972:14;;;;;;;40967:54;;41003:7;;40967:54;41047:12;41031:13;:28;41105:17;;41070:61;;41085:4;;41105:17;;41124:6;41070:61;:34;:61;:::i;:::-;41147:45;;;;;;;;41173:10;;41147:45;;;;;;;;;;40909:291;;:::o;39651:122::-;32356:5;;39721:7;;32356:5;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;39741:10:::1;:24:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;;39651:122::o;20509:151::-;20625:18;;;;20598:7;20625:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20509:151::o;40797:100::-;32356:5;;;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;40875:14:::1;::::0;;40857:32;;::::1;40875:14:::0;;;;::::1;;;40874:15;40857:32:::0;;::::1;;::::0;;40797:100::o;35163:240::-;32356:5;;;;32342:10;:19;32334:28;;12:1:-1;9;2:12;32334:28:0;35246:22:::1;::::0;::::1;35239:76;;;;35352:5;::::0;35331:37:::1;::::0;::::1;::::0;;::::1;::::0;35352:5:::1;::::0;35331:37:::1;::::0;35352:5:::1;::::0;35331:37:::1;35379:5;:16:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;35163:240::o;8305:132::-;8363:7;8390:39;8394:1;8397;8390:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8383:46;8305:132;-1:-1:-1;;;8305:132:0:o;6468:136::-;6526:7;6553:43;6557:1;6560;6553:43;;;;;;;;;;;;;;;;;:3;:43::i;6004:181::-;6062:7;6094:5;;;6118:6;;;;6110:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7358:471;7416:7;7661:6;7657:47;;-1:-1:-1;7691:1:0;7684:8;;7657:47;7728:5;;;7732:1;7728;:5;:1;7752:5;;;;;:10;7744:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28174:177;28284:58;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28284:58:0;;;;;;;;25:18:-1;;61:17;;28284:58:0;182:15:-1;28307:23:0;179:29:-1;160:49;;28257:86:0;;28277:5;;28257:19;:86::i;:::-;28174:177;;;:::o;28359:205::-;28487:68;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28487:68:0;;;;;;;;25:18:-1;;61:17;;28487:68:0;182:15:-1;28510:27:0;179:29:-1;160:49;;28460:96:0;;28480:5;;28460:19;:96::i;:::-;28359:205;;;;:::o;1922:106::-;2010:10;1922:106;:::o;26046:346::-;26148:19;;;26140:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26227:21;;;26219:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26300:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26352:32;;;;;;;;;;;;;;;;;26046:346;;;:::o;23660:539::-;23766:20;;;23758:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23847:23;;;23839:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23923:47;23944:6;23952:9;23963:6;23923:20;:47::i;:::-;24003:71;24025:6;24003:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;23983:17;;;;:9;:17;;;;;;;;;;;:91;;;;24108:20;;;;;;;:32;;24133:6;24108:32;:24;:32;:::i;:::-;24085:20;;;;:9;:20;;;;;;;;;;;;:55;;;;24156:35;;;;;;;24085:20;;24156:35;;;;;;;;;;;;;23660:539;;;:::o;6907:192::-;6993:7;7029:12;7021:6;;;;7013:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7013:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7065:5:0;;;6907:192::o;24480:378::-;24564:21;;;24556:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24634:49;24663:1;24667:7;24676:6;24634:20;:49::i;:::-;24711:12;;:24;;24728:6;24711:24;:16;:24;:::i;:::-;24696:12;:39;24767:18;;;:9;:18;;;;;;;;;;;:30;;24790:6;24767:30;:22;:30;:::i;:::-;24746:18;;;:9;:18;;;;;;;;;;;:51;;;;24813:37;;;;;;;24746:18;;:9;;24813:37;;;;;;;;;;24480:378;;:::o;8933:278::-;9019:7;9054:12;9047:5;9039:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;9039:28:0;;9078:9;9094:1;9090;:5;;;;;;;8933:278;-1:-1:-1;;;;;8933:278:0:o;30479:761::-;30903:23;30929:69;30957:4;30929:69;;;;;;;;;;;;;;;;;30937:5;30929:27;;;;:69;;;;;:::i;:::-;31013:17;;30903:95;;-1:-1:-1;31013:21:0;31009:224;;31155:10;31144:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31144:30:0;31136:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14148:196;14251:12;14283:53;14306:6;14314:4;14320:1;14323:12;14283:22;:53::i;:::-;14276:60;14148:196;-1:-1:-1;;;;14148:196:0:o;15525:979::-;15655:12;15688:18;15699:6;15688:10;:18::i;:::-;15680:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15814:12;15828:23;15855:6;:11;;15875:8;15886:4;15855:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15855:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;15813:78:0;;;;15906:7;15902:595;;;15937:10;-1:-1:-1;15930:17:0;;-1:-1:-1;15930:17:0;15902:595;16051:17;;:21;16047:439;;16314:10;16308:17;16375:15;16362:10;16358:2;16354:19;16347:44;16262:148;16450:20;;;;;;;;;;;;;;;;;;;;16457:12;;16450:20;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;11230:422:0;11597:20;11636:8;;;11230:422::o

Swarm Source

ipfs://eb1ff342366966c81b827b8e51b79f5c99070edef90d947dee71c87ba39b8548
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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