Contract 0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a

Contract Overview

Balance:
0 MATIC
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x922a3a0bc094b36231f0d799272c42f0838e3657fb8d7b2727a95096f99a54e3Transfer253661792022-03-03 21:43:09164 days 41 mins ago0x9518dca3296d22ffc6860e65659023c7857721be IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000095595 1.500000011
0x32babae461803ec5fc8e2d4ce4db906bc87b891fe6c23ddca0589ff0a4294db4Transfer253660962022-03-03 21:33:13164 days 51 mins ago0x9518dca3296d22ffc6860e65659023c7857721be IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000095631 1.500000008
0x57fdcbe142b6f882cc4717b1ce777bdba3baaee68afa3b0e8a1a985eae4db474Transfer253660772022-03-03 21:31:27164 days 53 mins ago0x9518dca3296d22ffc6860e65659023c7857721be IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000146931001 1.500000011
0xa9f008b2237a44f41fd73c23749f0da37aeffa7b2e2e87ecf8bad120472b6b7eTransfer253650532022-03-03 19:07:21164 days 3 hrs ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00363897 45
0x98feb53debb5e17dbbc98a68b1ba034fcf83af5548a6d0d28a6a791142d6c20cApprove253604782022-03-03 11:24:55164 days 10 hrs ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.001984635 45
0x3d561018dbfd3ec400c693806c9b8af55821ee7bdfb6aaca965f6203f028a4dfApprove253604502022-03-03 11:22:35164 days 11 hrs ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.002753595 45
0xfaf2826729af02ddc9f8aa6fc221fbaa713f011ad92be8bbcec65ebbedf3054eApprove253603622022-03-03 11:15:13164 days 11 hrs ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.002753595 45
0xe8fb0be92e747fb5016070669ab6413d3299d6b5bf81e7b89f1b9626197cb7b1Approve253603192022-03-03 11:11:37164 days 11 hrs ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.003524715 45
0xbe8bc4b14854a956b291f166f2805735ba6adea0b7d34242a8bd7d1aa3637903Transfer253602102022-03-03 11:02:31164 days 11 hrs ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00363897 45
0x0c3a8d12d34d82c9ff8bb6135e6a97efc02d45e45483f9148b89a4f8a93817b8Transfer253588212022-03-03 9:06:24164 days 13 hrs ago0x4a6f93c278427f4dd72bc65f4a2a00ea9c00431d IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00019610005 2.425000009
0xcd9bc364e76029e7ce6a840274ca9f06397e99721362cb161a253f08faa254c3Transfer253549542022-03-03 3:12:04164 days 19 hrs ago0x4a6f93c278427f4dd72bc65f4a2a00ea9c00431d IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000172257001 1.500000013
0xf7692dc3872ebe21eed4da5e30cb04e400f79c86c3a18afbe214193ef59ff1feTransfer253548802022-03-03 3:04:58164 days 19 hrs ago0xda74d761c9af47c7718aca85ee49f0be02d49e31 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000146931 1.50000001
0x9cfc5a61d5021ee201820ff90ec9c14b45d812a8b97f9bfcc0f5a763cb022d87Transfer253548422022-03-03 3:01:47164 days 19 hrs ago0x147a0b6e848109d438445ba750645bcc37cba825 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000172599001 1.500000009
0xfc0e418ce303c56382af2c1a9a98833ae0fab4aa1445deba77b99b47805884b1Transfer253531982022-03-03 0:17:41164 days 22 hrs ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00363897 45
0xc15bf3b7eb1405bc8d454bd61840fd45d2bf55d38476903e6b0abe3d515e60e3Transfer253521282022-03-02 22:32:20164 days 23 hrs ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00363789 45
0xfdadf835e2b2e02c5a016ee0a557400117e6c293ffdb902cf309a61a4ed1fb03Transfer253520722022-03-02 22:27:34164 days 23 hrs ago0xa2e52f63662b34103fd92d1e865d6191171e7f84 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00517743 45
0x0f36419460b511cd7111baaeb61c2570715f8b746e6d6b8315a8b88bbd861ba7Transfer253520252022-03-02 22:23:38165 days 1 min ago0xd9cacc43be8dc29ff0c82ae4ffd199fe09582ae5 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00286893 45
0xf947ae8f4f4ab0618e128f7ffd508df496ec6fe8cb35cad7570439da57a0803cTransfer253519262022-03-02 22:15:21165 days 9 mins ago0xd9cacc43be8dc29ff0c82ae4ffd199fe09582ae5 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00440793 45
0x59a4f9ea2d84e6ad64b41e104a2c7375cb810eca8a59ef99f0763c42ac18ae5cTransfer253519142022-03-02 22:14:21165 days 10 mins ago0x5d0c592bbad075fdf94f8328eaf4af4dcd0e796a IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.00272358 45
0x8f7f6fe3762a0f1d7dfd175dd7dfcdeadd73df076c0eab9f437d40aa47d1456cAdd Exempt Addre...253518642022-03-02 22:09:35165 days 15 mins ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000046753003 1.000000078
0x6734292c7dcb40b9ff28d8eae54c0a747a2f1af2c9ec4ed348180c160ca0244bTransfer253518642022-03-02 22:09:35165 days 15 mins ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000080866006 1.000000078
0x9cc054f8efab190e8fc14d7b6fbfd2082ef5131bf9a345d7f5b849b0f6ea7e42Transfer253518642022-03-02 22:09:35165 days 15 mins ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000161732 2.000000003
0x59966501623eb6de233fbb5321e99403d2fd23d3fa28d092fa56d981fc7efbefTransfer253518622022-03-02 22:09:15165 days 15 mins ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000161732 2.000000001
0x1e399140c0a7af347a07bdb5847fe4fb1453bf1861904774c74f21ea787ecf16Transfer253518622022-03-02 22:09:15165 days 15 mins ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000161732 2.000000001
0x9a6d1042bddf87348cd4005605b34ede181ca2371f05cf62fec4793c2ff5acdaTransfer253518622022-03-02 22:09:15165 days 15 mins ago0xec342afd0d31d6543b5d749a690906979b153af8 IN  0x70e4a39e46695c42f5dd7821b3c32af4b4a8253a0 MATIC0.000161732 2.000000001
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ComradeToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-03-02
*/

// Sources flattened with hardhat v2.8.4 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.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 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) {
        return msg.sender;
    }

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.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 Contracts guidelines: functions revert
 * instead 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, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override 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 this function is
     * overridden;
     *
     * 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 virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @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) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + 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) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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:
     *
     * - `account` 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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

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

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

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

    /**
     * @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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}


// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/ComradeToken.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract ComradeToken is ERC20, ERC20Burnable, Ownable {
    uint16 private protocolDenomenator = 10 ** 4;
    uint16 private protocolPerc;
    address payable private protocolWallet;
    mapping(address => uint256) allowanceHolding;

    struct addressStatistic {
        uint256 totalFeesPaid;
        uint256 totalTokensSent;
        bool exemptStatus;
    }
    mapping(address => addressStatistic) private addressStats;

    constructor(
        uint16 _protocolPerc,
        address payable _protocolWallet,
        string memory _tokenName,
        string memory _tokenSymbol
    ) ERC20(_tokenName, _tokenSymbol) {
        require(_protocolPerc <= protocolDenomenator, "Cannot set protocol greater than 100%");
        _mint(msg.sender, 1000000000 * 18 ** decimals());
        protocolPerc = _protocolPerc; // protocol percentage is ( protocalPerc / 10 ** 4)
        protocolWallet = _protocolWallet;
    }

    modifier requireProtocolFee(
        address _from,
        uint256 _amount
    ) {
        require(balanceOf(_from) >= _amount, "ERC20: transfer amount exceeds balance");
        if(!addressStats[_from].exemptStatus) {
            require(checkProtocolFee(_from, _amount), "COMRADE: Cannot pay protocol fee");
        }
        _;
    }

    function getAllowanceHolding(address _user) public view returns (uint256) {
        return allowanceHolding[_user];
    }

    function getTotalFeesPaid(address _user) public view returns (uint256) {
        return addressStats[_user].totalFeesPaid;
    }

    function getTotalTokensSent(address _user) public view returns (uint256) {
        return addressStats[_user].totalTokensSent;
    }

    function getProtocolPerc() public view returns (uint16) {
        return protocolPerc;
    }

    function getProtocolWallet() public view returns (address) {
        return protocolWallet;
    }

    function getExemptStatus(address _user) public view returns (bool) {
        return addressStats[_user].exemptStatus;
    }

    function setProtocolPerc(uint16 _newProtocolPerc) external onlyOwner {
        require(_newProtocolPerc <= protocolDenomenator, "Cannot set protocol greater than 100%");
        protocolPerc = _newProtocolPerc;
    }

    function setProtocolWallet(address payable _newProtocolWallet) external onlyOwner {
        protocolWallet = _newProtocolWallet;
    }

    function addExemptAddress(address _user) external onlyOwner {
        require(!addressStats[_user].exemptStatus, "Account is already exempt");
        addressStats[_user].exemptStatus = true;
    }

    function removeExemptAddress(address _user) external onlyOwner {
        require(addressStats[_user].exemptStatus, "Account is not exempt");
        addressStats[_user].exemptStatus = false;
    }

    function calculateProtocolFee(
        uint256 _amount
    ) public view returns (uint256) {
        return (_amount * protocolPerc) / protocolDenomenator;
    }

    function checkProtocolFee(
        address _sender,
        uint256 _amount
    ) private view returns (bool) {
        // Check if there is enough money in the account to be able
        // To pay for the Protocol Fee
        uint256 amountPlusProtocolFee = _amount + calculateProtocolFee(_amount);
        return balanceOf(_sender) >= amountPlusProtocolFee;
    }

    function transfer(
        address _to,
        uint256 _amount
    ) public override requireProtocolFee(_msgSender(), _amount) returns (bool) {
        address owner = _msgSender();

        if(!addressStats[owner].exemptStatus) {
            uint256 protocolFee = calculateProtocolFee(_amount);
            addressStats[owner].totalFeesPaid += protocolFee;
            _transfer(owner, protocolWallet, calculateProtocolFee(_amount));
        }

        addressStats[owner].totalTokensSent += _amount;
        _transfer(owner, _to, _amount);
        return true;
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _amount
    ) public override returns (bool) {
        address spender = _msgSender();
        uint256 protocolFee = calculateProtocolFee(_amount);

        if(!addressStats[_from].exemptStatus) {
            addressStats[_from].totalFeesPaid += protocolFee;
            allowanceHolding[_from] -= protocolFee;
            _transfer(_from, protocolWallet, protocolFee);
        }

        addressStats[_from].totalTokensSent += _amount;
        _spendAllowance(_from, spender, _amount);
        _transfer(_from, _to, _amount);
        return true;
    }

    function approve(
        address _spender,
        uint256 _amount
    ) public override requireProtocolFee(_msgSender(), _amount) returns (bool) {
        address owner = _msgSender();
        if(!addressStats[owner].exemptStatus) {
            allowanceHolding[owner] += calculateProtocolFee(_amount);
        }
        _approve(owner, _spender, _amount);
        return true;
    }

    function increaseAllowance(
        address _spender,
        uint256 _addedValue
    ) public override requireProtocolFee(_msgSender(), _addedValue) returns (bool) {
        address owner = _msgSender();
        if(!addressStats[owner].exemptStatus) {
            allowanceHolding[owner] += calculateProtocolFee(_addedValue);
        }
        _approve(owner, _spender, allowance(owner, _spender) + _addedValue);
        return true;
    }

    function decreaseAllowance(
        address _spender,
        uint256 _subtractedValue
    ) public override returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, _spender);
        require(currentAllowance >= _subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            if(!addressStats[owner].exemptStatus) {
                allowanceHolding[owner] -= calculateProtocolFee(_subtractedValue);
            }
            _approve(owner, _spender, currentAllowance - _subtractedValue);
        }
        return true;
    }

}

Contract ABI

[{"inputs":[{"internalType":"uint16","name":"_protocolPerc","type":"uint16"},{"internalType":"address payable","name":"_protocolWallet","type":"address"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addExemptAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calculateProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getAllowanceHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getExemptStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolPerc","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getTotalFeesPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getTotalTokensSent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeExemptAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newProtocolPerc","type":"uint16"}],"name":"setProtocolPerc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newProtocolWallet","type":"address"}],"name":"setProtocolWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052612710600560146101000a81548161ffff021916908361ffff1602179055503480156200003057600080fd5b5060405162003a4238038062003a4283398181016040528101906200005691906200055c565b81818160039080519060200190620000709291906200040c565b508060049080519060200190620000899291906200040c565b505050620000ac620000a0620001b260201b60201c565b620001ba60201b60201c565b600560149054906101000a900461ffff1661ffff168461ffff1611156200010a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001019062000659565b60405180910390fd5b6200014a336200011f6200028060201b60201c565b60126200012d9190620007e2565b633b9aca006200013e91906200091f565b6200028960201b60201c565b83600560166101000a81548161ffff021916908361ffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000bd2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f3906200067b565b60405180910390fd5b62000310600083836200040260201b60201c565b80600260008282546200032491906200072a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200037b91906200072a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003e291906200069d565b60405180910390a3620003fe600083836200040760201b60201c565b5050565b505050565b505050565b8280546200041a9062000a0f565b90600052602060002090601f0160209004810192826200043e57600085556200048a565b82601f106200045957805160ff19168380011785556200048a565b828001600101855582156200048a579182015b82811115620004895782518255916020019190600101906200046c565b5b5090506200049991906200049d565b5090565b5b80821115620004b85760008160009055506001016200049e565b5090565b6000620004d3620004cd84620006e3565b620006ba565b905082815260208101848484011115620004ec57600080fd5b620004f9848285620009d9565b509392505050565b600081519050620005128162000b9e565b92915050565b600082601f8301126200052a57600080fd5b81516200053c848260208601620004bc565b91505092915050565b600081519050620005568162000bb8565b92915050565b600080600080608085870312156200057357600080fd5b6000620005838782880162000545565b9450506020620005968782880162000501565b935050604085015167ffffffffffffffff811115620005b457600080fd5b620005c28782880162000518565b925050606085015167ffffffffffffffff811115620005e057600080fd5b620005ee8782880162000518565b91505092959194509250565b60006200060960258362000719565b9150620006168262000b26565b604082019050919050565b600062000630601f8362000719565b91506200063d8262000b75565b602082019050919050565b6200065381620009c2565b82525050565b600060208201905081810360008301526200067481620005fa565b9050919050565b60006020820190508181036000830152620006968162000621565b9050919050565b6000602082019050620006b4600083018462000648565b92915050565b6000620006c6620006d9565b9050620006d4828262000a45565b919050565b6000604051905090565b600067ffffffffffffffff82111562000701576200070062000ad9565b5b6200070c8262000b08565b9050602081019050919050565b600082825260208201905092915050565b60006200073782620009c2565b91506200074483620009c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200077c576200077b62000a7b565b5b828201905092915050565b6000808291508390505b6001851115620007d957808604811115620007b157620007b062000a7b565b5b6001851615620007c15780820291505b8081029050620007d18562000b19565b945062000791565b94509492505050565b6000620007ef82620009c2565b9150620007fc83620009cc565b92506200082b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000833565b905092915050565b60008262000845576001905062000918565b8162000855576000905062000918565b81600181146200086e57600281146200087957620008af565b600191505062000918565b60ff8411156200088e576200088d62000a7b565b5b8360020a915084821115620008a857620008a762000a7b565b5b5062000918565b5060208310610133831016604e8410600b8410161715620008e95782820a905083811115620008e357620008e262000a7b565b5b62000918565b620008f8848484600162000787565b9250905081840481111562000912576200091162000a7b565b5b81810290505b9392505050565b60006200092c82620009c2565b91506200093983620009c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000975576200097462000a7b565b5b828202905092915050565b60006200098d82620009a2565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620009f9578082015181840152602081019050620009dc565b8381111562000a09576000848401525b50505050565b6000600282049050600182168062000a2857607f821691505b6020821081141562000a3f5762000a3e62000aaa565b5b50919050565b62000a508262000b08565b810181811067ffffffffffffffff8211171562000a725762000a7162000ad9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f43616e6e6f74207365742070726f746f636f6c2067726561746572207468616e60008201527f2031303025000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000ba98162000980565b811462000bb557600080fd5b50565b62000bc38162000994565b811462000bcf57600080fd5b50565b612e608062000be26000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f95780639c7c270c11610097578063dd62ed3e11610071578063dd62ed3e146104f6578063ed84566614610526578063f01e9a8b14610556578063f2fde38b14610572576101a9565b80639c7c270c14610466578063a457c2d714610496578063a9059cbb146104c6576101a9565b80637b1c359c116100d35780637b1c359c146103de5780638da5cb5b146103fa57806395d89b4114610418578063961b621914610436576101a9565b806370a0823114610388578063715018a6146103b857806379cc6790146103c2576101a9565b8063195c07c711610166578063395093511161014057806339509351146102f057806342966c68146103205780635e8c4d761461033c5780636078c0f91461036c576101a9565b8063195c07c71461028457806323b872dd146102a2578063313ce567146102d2576101a9565b806306fdde03146101ae578063095ea7b3146101cc5780630e70e64e146101fc5780630f554be614610218578063117964341461024857806318160ddd14610266575b600080fd5b6101b661058e565b6040516101c391906124ef565b60405180910390f35b6101e660048036038101906101e1919061219a565b610620565b6040516101f391906124d4565b60405180910390f35b610216600480360381019061021191906121d6565b6107eb565b005b610232600480360381019061022d91906120bd565b6108e2565b60405161023f919061270c565b60405180910390f35b61025061092e565b60405161025d91906124b9565b60405180910390f35b61026e610958565b60405161027b919061270c565b60405180910390f35b61028c610962565b60405161029991906126f1565b60405180910390f35b6102bc60048036038101906102b7919061214b565b61097a565b6040516102c991906124d4565b60405180910390f35b6102da610b41565b6040516102e79190612727565b60405180910390f35b61030a6004803603810190610305919061219a565b610b4a565b60405161031791906124d4565b60405180910390f35b61033a600480360381019061033591906121ff565b610d29565b005b610356600480360381019061035191906120bd565b610d3d565b60405161036391906124d4565b60405180910390f35b610386600480360381019061038191906120bd565b610d96565b005b6103a2600480360381019061039d91906120bd565b610f00565b6040516103af919061270c565b60405180910390f35b6103c0610f48565b005b6103dc60048036038101906103d7919061219a565b610fd0565b005b6103f860048036038101906103f391906120bd565b610ff0565b005b610402611159565b60405161040f91906124b9565b60405180910390f35b610420611183565b60405161042d91906124ef565b60405180910390f35b610450600480360381019061044b91906120bd565b611215565b60405161045d919061270c565b60405180910390f35b610480600480360381019061047b91906121ff565b611261565b60405161048d919061270c565b60405180910390f35b6104b060048036038101906104ab919061219a565b6112a9565b6040516104bd91906124d4565b60405180910390f35b6104e060048036038101906104db919061219a565b6113ca565b6040516104ed91906124d4565b60405180910390f35b610510600480360381019061050b919061210f565b61162c565b60405161051d919061270c565b60405180910390f35b610540600480360381019061053b91906120bd565b6116b3565b60405161054d919061270c565b60405180910390f35b610570600480360381019061056b91906120e6565b6116fc565b005b61058c600480360381019061058791906120bd565b6117bc565b005b60606003805461059d9061291b565b80601f01602080910402602001604051908101604052809291908181526020018280546105c99061291b565b80156106165780601f106105eb57610100808354040283529160200191610616565b820191906000526020600020905b8154815290600101906020018083116105f957829003601f168201915b5050505050905090565b600061062a6118b4565b828061063583610f00565b1015610676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066d906125b1565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16610714576106d482826118bc565b610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90612671565b60405180910390fd5b5b600061071e6118b4565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166107d35761077d85611261565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107cb919061275e565b925050819055505b6107de8187876118ea565b6001935050505092915050565b6107f36118b4565b73ffffffffffffffffffffffffffffffffffffffff16610811611159565b73ffffffffffffffffffffffffffffffffffffffff1614610867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085e90612611565b60405180910390fd5b600560149054906101000a900461ffff1661ffff168161ffff1611156108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b9906125d1565b60405180910390fd5b80600560166101000a81548161ffff021916908361ffff16021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600254905090565b6000600560169054906101000a900461ffff16905090565b6000806109856118b4565b9050600061099284611261565b9050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16610ac55780600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610a3a919061275e565b9250508190555080600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a90919061283f565b92505081905550610ac486600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ab5565b5b83600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254610b17919061275e565b92505081905550610b29868386611d36565b610b34868686611ab5565b6001925050509392505050565b60006012905090565b6000610b546118b4565b8280610b5f83610f00565b1015610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b97906125b1565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16610c3e57610bfe82826118bc565b610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490612671565b60405180910390fd5b5b6000610c486118b4565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16610cfd57610ca785611261565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cf5919061275e565b925050819055505b610d1c818787610d0d858b61162c565b610d17919061275e565b6118ea565b6001935050505092915050565b610d3a610d346118b4565b82611dc2565b50565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050919050565b610d9e6118b4565b73ffffffffffffffffffffffffffffffffffffffff16610dbc611159565b73ffffffffffffffffffffffffffffffffffffffff1614610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0990612611565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e99906125f1565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f506118b4565b73ffffffffffffffffffffffffffffffffffffffff16610f6e611159565b73ffffffffffffffffffffffffffffffffffffffff1614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90612611565b60405180910390fd5b610fce6000611f99565b565b610fe282610fdc6118b4565b83611d36565b610fec8282611dc2565b5050565b610ff86118b4565b73ffffffffffffffffffffffffffffffffffffffff16611016611159565b73ffffffffffffffffffffffffffffffffffffffff161461106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390612611565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f290612691565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111929061291b565b80601f01602080910402602001604051908101604052809291908181526020018280546111be9061291b565b801561120b5780601f106111e05761010080835404028352916020019161120b565b820191906000526020600020905b8154815290600101906020018083116111ee57829003601f168201915b5050505050905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6000600560149054906101000a900461ffff1661ffff16600560169054906101000a900461ffff1661ffff168361129891906127e5565b6112a291906127b4565b9050919050565b6000806112b46118b4565b905060006112c2828661162c565b905083811015611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe906126d1565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166113b15761136484611261565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b6113be82868684036118ea565b60019250505092915050565b60006113d46118b4565b82806113df83610f00565b1015611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906125b1565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166114be5761147e82826118bc565b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b490612671565b60405180910390fd5b5b60006114c86118b4565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166115bb57600061152986611261565b905080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461157d919061275e565b925050819055506115b982600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115b489611261565b611ab5565b505b84600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600082825461160d919061275e565b9250508190555061161f818787611ab5565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117046118b4565b73ffffffffffffffffffffffffffffffffffffffff16611722611159565b73ffffffffffffffffffffffffffffffffffffffff1614611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90612611565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117c46118b4565b73ffffffffffffffffffffffffffffffffffffffff166117e2611159565b73ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90612611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90612551565b60405180910390fd5b6118b181611f99565b50565b600033905090565b6000806118c883611261565b836118d3919061275e565b9050806118df85610f00565b101591505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561195a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611951906126b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190612571565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aa8919061270c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90612651565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90612511565b60405180910390fd5b611ba083838361205f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d906125b1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb9919061275e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d1d919061270c565b60405180910390a3611d30848484612064565b50505050565b6000611d42848461162c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611dbc5781811015611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590612591565b60405180910390fd5b611dbb84848484036118ea565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2990612631565b60405180910390fd5b611e3e8260008361205f565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90612531565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611f1b919061283f565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f80919061270c565b60405180910390a3611f9483600084612064565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b60008135905061207881612dce565b92915050565b60008135905061208d81612de5565b92915050565b6000813590506120a281612dfc565b92915050565b6000813590506120b781612e13565b92915050565b6000602082840312156120cf57600080fd5b60006120dd84828501612069565b91505092915050565b6000602082840312156120f857600080fd5b60006121068482850161207e565b91505092915050565b6000806040838503121561212257600080fd5b600061213085828601612069565b925050602061214185828601612069565b9150509250929050565b60008060006060848603121561216057600080fd5b600061216e86828701612069565b935050602061217f86828701612069565b9250506040612190868287016120a8565b9150509250925092565b600080604083850312156121ad57600080fd5b60006121bb85828601612069565b92505060206121cc858286016120a8565b9150509250929050565b6000602082840312156121e857600080fd5b60006121f684828501612093565b91505092915050565b60006020828403121561221157600080fd5b600061221f848285016120a8565b91505092915050565b61223181612873565b82525050565b61224081612897565b82525050565b600061225182612742565b61225b818561274d565b935061226b8185602086016128e8565b612274816129da565b840191505092915050565b600061228c60238361274d565b9150612297826129eb565b604082019050919050565b60006122af60228361274d565b91506122ba82612a3a565b604082019050919050565b60006122d260268361274d565b91506122dd82612a89565b604082019050919050565b60006122f560228361274d565b915061230082612ad8565b604082019050919050565b6000612318601d8361274d565b915061232382612b27565b602082019050919050565b600061233b60268361274d565b915061234682612b50565b604082019050919050565b600061235e60258361274d565b915061236982612b9f565b604082019050919050565b600061238160198361274d565b915061238c82612bee565b602082019050919050565b60006123a460208361274d565b91506123af82612c17565b602082019050919050565b60006123c760218361274d565b91506123d282612c40565b604082019050919050565b60006123ea60258361274d565b91506123f582612c8f565b604082019050919050565b600061240d60208361274d565b915061241882612cde565b602082019050919050565b600061243060158361274d565b915061243b82612d07565b602082019050919050565b600061245360248361274d565b915061245e82612d30565b604082019050919050565b600061247660258361274d565b915061248182612d7f565b604082019050919050565b612495816128a3565b82525050565b6124a4816128d1565b82525050565b6124b3816128db565b82525050565b60006020820190506124ce6000830184612228565b92915050565b60006020820190506124e96000830184612237565b92915050565b600060208201905081810360008301526125098184612246565b905092915050565b6000602082019050818103600083015261252a8161227f565b9050919050565b6000602082019050818103600083015261254a816122a2565b9050919050565b6000602082019050818103600083015261256a816122c5565b9050919050565b6000602082019050818103600083015261258a816122e8565b9050919050565b600060208201905081810360008301526125aa8161230b565b9050919050565b600060208201905081810360008301526125ca8161232e565b9050919050565b600060208201905081810360008301526125ea81612351565b9050919050565b6000602082019050818103600083015261260a81612374565b9050919050565b6000602082019050818103600083015261262a81612397565b9050919050565b6000602082019050818103600083015261264a816123ba565b9050919050565b6000602082019050818103600083015261266a816123dd565b9050919050565b6000602082019050818103600083015261268a81612400565b9050919050565b600060208201905081810360008301526126aa81612423565b9050919050565b600060208201905081810360008301526126ca81612446565b9050919050565b600060208201905081810360008301526126ea81612469565b9050919050565b6000602082019050612706600083018461248c565b92915050565b6000602082019050612721600083018461249b565b92915050565b600060208201905061273c60008301846124aa565b92915050565b600081519050919050565b600082825260208201905092915050565b6000612769826128d1565b9150612774836128d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127a9576127a861294d565b5b828201905092915050565b60006127bf826128d1565b91506127ca836128d1565b9250826127da576127d961297c565b5b828204905092915050565b60006127f0826128d1565b91506127fb836128d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128345761283361294d565b5b828202905092915050565b600061284a826128d1565b9150612855836128d1565b9250828210156128685761286761294d565b5b828203905092915050565b600061287e826128b1565b9050919050565b6000612890826128b1565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156129065780820151818401526020810190506128eb565b83811115612915576000848401525b50505050565b6000600282049050600182168061293357607f821691505b60208210811415612947576129466129ab565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207365742070726f746f636f6c2067726561746572207468616e60008201527f2031303025000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578656d707400000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f434f4d524144453a2043616e6e6f74207061792070726f746f636f6c20666565600082015250565b7f4163636f756e74206973206e6f74206578656d70740000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b612dd781612873565b8114612de257600080fd5b50565b612dee81612885565b8114612df957600080fd5b50565b612e05816128a3565b8114612e1057600080fd5b50565b612e1c816128d1565b8114612e2757600080fd5b5056fea26469706673582212209de9a0c1d7400a9cfcabb982bddd1385979022b3e72407247e31c0191c99591364736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000640000000000000000000000005d0c592bbad075fdf94f8328eaf4af4dcd0e796a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000d436f6d7261646520546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007434f4d5241444500000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000640000000000000000000000005d0c592bbad075fdf94f8328eaf4af4dcd0e796a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000d436f6d7261646520546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007434f4d5241444500000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _protocolPerc (uint16): 100
Arg [1] : _protocolWallet (address): 0x5d0c592bbad075fdf94f8328eaf4af4dcd0e796a
Arg [2] : _tokenName (string): Comrade Token
Arg [3] : _tokenSymbol (string): COMRADE

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [1] : 0000000000000000000000005d0c592bbad075fdf94f8328eaf4af4dcd0e796a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [5] : 436f6d7261646520546f6b656e00000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 434f4d5241444500000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

21330:6130:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6735:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25976:395;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23382:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22760:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23142:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7855:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23040:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25314:654;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7697:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26379:450;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18117:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23249:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23753:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8026:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20415:103;;;:::i;:::-;;18527:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23961:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19764:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6954:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22898:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24168:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26837:618;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24722:584;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8615:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22629:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23609:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20673:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6735:100;6789:13;6822:5;6815:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6735:100;:::o;25976:395::-;26120:4;26088:12;:10;:12::i;:::-;26102:7;22399;22379:16;22389:5;22379:9;:16::i;:::-;:27;;22371:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22464:12;:19;22477:5;22464:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;22460:142;;22521:32;22538:5;22545:7;22521:16;:32::i;:::-;22513:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22460:142;26137:13:::1;26153:12;:10;:12::i;:::-;26137:28;;26180:12;:19;26193:5;26180:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;26176:121;;26256:29;26277:7;26256:20;:29::i;:::-;26229:16;:23;26246:5;26229:23;;;;;;;;;;;;;;;;:56;;;;;;;:::i;:::-;;;;;;;;26176:121;26307:34;26316:5;26323:8;26333:7;26307:8;:34::i;:::-;26359:4;26352:11;;;25976:395:::0;;;;;;:::o;23382:219::-;19995:12;:10;:12::i;:::-;19984:23;;:7;:5;:7::i;:::-;:23;;;19976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23490:19:::1;;;;;;;;;;;23470:39;;:16;:39;;;;23462:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23577:16;23562:12;;:31;;;;;;;;;;;;;;;;;;23382:219:::0;:::o;22760:130::-;22822:7;22849:12;:19;22862:5;22849:19;;;;;;;;;;;;;;;:33;;;22842:40;;22760:130;;;:::o;23142:99::-;23192:7;23219:14;;;;;;;;;;;23212:21;;23142:99;:::o;7855:108::-;7916:7;7943:12;;7936:19;;7855:108;:::o;23040:94::-;23088:6;23114:12;;;;;;;;;;;23107:19;;23040:94;:::o;25314:654::-;25440:4;25457:15;25475:12;:10;:12::i;:::-;25457:30;;25498:19;25520:29;25541:7;25520:20;:29::i;:::-;25498:51;;25566:12;:19;25579:5;25566:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;25562:226;;25652:11;25615:12;:19;25628:5;25615:19;;;;;;;;;;;;;;;:33;;;:48;;;;;;;:::i;:::-;;;;;;;;25705:11;25678:16;:23;25695:5;25678:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;25731:45;25741:5;25748:14;;;;;;;;;;;25764:11;25731:9;:45::i;:::-;25562:226;25839:7;25800:12;:19;25813:5;25800:19;;;;;;;;;;;;;;;:35;;;:46;;;;;;;:::i;:::-;;;;;;;;25857:40;25873:5;25880:7;25889;25857:15;:40::i;:::-;25908:30;25918:5;25925:3;25930:7;25908:9;:30::i;:::-;25956:4;25949:11;;;;25314:654;;;;;:::o;7697:93::-;7755:5;7780:2;7773:9;;7697:93;:::o;26379:450::-;26541:4;26505:12;:10;:12::i;:::-;26519:11;22399:7;22379:16;22389:5;22379:9;:16::i;:::-;:27;;22371:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22464:12;:19;22477:5;22464:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;22460:142;;22521:32;22538:5;22545:7;22521:16;:32::i;:::-;22513:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22460:142;26558:13:::1;26574:12;:10;:12::i;:::-;26558:28;;26601:12;:19;26614:5;26601:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;26597:125;;26677:33;26698:11;26677:20;:33::i;:::-;26650:16;:23;26667:5;26650:23;;;;;;;;;;;;;;;;:60;;;;;;;:::i;:::-;;;;;;;;26597:125;26732:67;26741:5;26748:8;26787:11;26758:26;26768:5;26775:8;26758:9;:26::i;:::-;:40;;;;:::i;:::-;26732:8;:67::i;:::-;26817:4;26810:11;;;26379:450:::0;;;;;;:::o;18117:91::-;18173:27;18179:12;:10;:12::i;:::-;18193:6;18173:5;:27::i;:::-;18117:91;:::o;23249:125::-;23310:4;23334:12;:19;23347:5;23334:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;23327:39;;23249:125;;;:::o;23753:200::-;19995:12;:10;:12::i;:::-;19984:23;;:7;:5;:7::i;:::-;:23;;;19976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23833:12:::1;:19;23846:5;23833:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;23832:33;23824:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23941:4;23906:12;:19;23919:5;23906:19;;;;;;;;;;;;;;;:32;;;:39;;;;;;;;;;;;;;;;;;23753:200:::0;:::o;8026:127::-;8100:7;8127:9;:18;8137:7;8127:18;;;;;;;;;;;;;;;;8120:25;;8026:127;;;:::o;20415:103::-;19995:12;:10;:12::i;:::-;19984:23;;:7;:5;:7::i;:::-;:23;;;19976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20480:30:::1;20507:1;20480:18;:30::i;:::-;20415:103::o:0;18527:164::-;18604:46;18620:7;18629:12;:10;:12::i;:::-;18643:6;18604:15;:46::i;:::-;18661:22;18667:7;18676:6;18661:5;:22::i;:::-;18527:164;;:::o;23961:199::-;19995:12;:10;:12::i;:::-;19984:23;;:7;:5;:7::i;:::-;:23;;;19976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24043:12:::1;:19;24056:5;24043:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;24035:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24147:5;24112:12;:19;24125:5;24112:19;;;;;;;;;;;;;;;:32;;;:40;;;;;;;;;;;;;;;;;;23961:199:::0;:::o;19764:87::-;19810:7;19837:6;;;;;;;;;;;19830:13;;19764:87;:::o;6954:104::-;7010:13;7043:7;7036:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6954:104;:::o;22898:134::-;22962:7;22989:12;:19;23002:5;22989:19;;;;;;;;;;;;;;;:35;;;22982:42;;22898:134;;;:::o;24168:165::-;24252:7;24306:19;;;;;;;;;;;24279:46;;24290:12;;;;;;;;;;;24280:22;;:7;:22;;;;:::i;:::-;24279:46;;;;:::i;:::-;24272:53;;24168:165;;;:::o;26837:618::-;26958:4;26975:13;26991:12;:10;:12::i;:::-;26975:28;;27014:24;27041:26;27051:5;27058:8;27041:9;:26::i;:::-;27014:53;;27106:16;27086;:36;;27078:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;27204:12;:19;27217:5;27204:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;27200:138;;27284:38;27305:16;27284:20;:38::i;:::-;27257:16;:23;27274:5;27257:23;;;;;;;;;;;;;;;;:65;;;;;;;;;;;27200:138;27352:62;27361:5;27368:8;27397:16;27378;:35;27352:8;:62::i;:::-;27443:4;27436:11;;;;26837:618;;;;:::o;24722:584::-;24862:4;24830:12;:10;:12::i;:::-;24844:7;22399;22379:16;22389:5;22379:9;:16::i;:::-;:27;;22371:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22464:12;:19;22477:5;22464:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;22460:142;;22521:32;22538:5;22545:7;22521:16;:32::i;:::-;22513:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22460:142;24879:13:::1;24895:12;:10;:12::i;:::-;24879:28;;24924:12;:19;24937:5;24924:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;24920:257;;24973:19;24995:29;25016:7;24995:20;:29::i;:::-;24973:51;;25076:11;25039:12;:19;25052:5;25039:19;;;;;;;;;;;;;;;:33;;;:48;;;;;;;:::i;:::-;;;;;;;;25102:63;25112:5;25119:14;;;;;;;;;;;25135:29;25156:7;25135:20;:29::i;:::-;25102:9;:63::i;:::-;24920:257;;25228:7;25189:12;:19;25202:5;25189:19;;;;;;;;;;;;;;;:35;;;:46;;;;;;;:::i;:::-;;;;;;;;25246:30;25256:5;25263:3;25268:7;25246:9;:30::i;:::-;25294:4;25287:11;;;24722:584:::0;;;;;;:::o;8615:151::-;8704:7;8731:11;:18;8743:5;8731:18;;;;;;;;;;;;;;;:27;8750:7;8731:27;;;;;;;;;;;;;;;;8724:34;;8615:151;;;;:::o;22629:123::-;22694:7;22721:16;:23;22738:5;22721:23;;;;;;;;;;;;;;;;22714:30;;22629:123;;;:::o;23609:136::-;19995:12;:10;:12::i;:::-;19984:23;;:7;:5;:7::i;:::-;:23;;;19976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23719:18:::1;23702:14;;:35;;;;;;;;;;;;;;;;;;23609:136:::0;:::o;20673:201::-;19995:12;:10;:12::i;:::-;19984:23;;:7;:5;:7::i;:::-;:23;;;19976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20782:1:::1;20762:22;;:8;:22;;;;20754:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20838:28;20857:8;20838:18;:28::i;:::-;20673:201:::0;:::o;4371:98::-;4424:7;4451:10;4444:17;;4371:98;:::o;24341:373::-;24448:4;24574:29;24616;24637:7;24616:20;:29::i;:::-;24606:7;:39;;;;:::i;:::-;24574:71;;24685:21;24663:18;24673:7;24663:9;:18::i;:::-;:43;;24656:50;;;24341:373;;;;:::o;14950:380::-;15103:1;15086:19;;:5;:19;;;;15078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15184:1;15165:21;;:7;:21;;;;15157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15268:6;15238:11;:18;15250:5;15238:18;;;;;;;;;;;;;;;:27;15257:7;15238:27;;;;;;;;;;;;;;;:36;;;;15306:7;15290:32;;15299:5;15290:32;;;15315:6;15290:32;;;;;;:::i;:::-;;;;;;;;14950:380;;;:::o;12231:671::-;12378:1;12362:18;;:4;:18;;;;12354:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12455:1;12441:16;;:2;:16;;;;12433:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12510:38;12531:4;12537:2;12541:6;12510:20;:38::i;:::-;12561:19;12583:9;:15;12593:4;12583:15;;;;;;;;;;;;;;;;12561:37;;12632:6;12617:11;:21;;12609:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12749:6;12735:11;:20;12717:9;:15;12727:4;12717:15;;;;;;;;;;;;;;;:38;;;;12794:6;12777:9;:13;12787:2;12777:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;12833:2;12818:26;;12827:4;12818:26;;;12837:6;12818:26;;;;;;:::i;:::-;;;;;;;;12857:37;12877:4;12883:2;12887:6;12857:19;:37::i;:::-;12231:671;;;;:::o;15617:453::-;15752:24;15779:25;15789:5;15796:7;15779:9;:25::i;:::-;15752:52;;15839:17;15819:16;:37;15815:248;;15901:6;15881:16;:26;;15873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15985:51;15994:5;16001:7;16029:6;16010:16;:25;15985:8;:51::i;:::-;15815:248;15617:453;;;;:::o;13921:591::-;14024:1;14005:21;;:7;:21;;;;13997:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14077:49;14098:7;14115:1;14119:6;14077:20;:49::i;:::-;14139:22;14164:9;:18;14174:7;14164:18;;;;;;;;;;;;;;;;14139:43;;14219:6;14201:14;:24;;14193:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14338:6;14321:14;:23;14300:9;:18;14310:7;14300:18;;;;;;;;;;;;;;;:44;;;;14382:6;14366:12;;:22;;;;;;;:::i;:::-;;;;;;;;14432:1;14406:37;;14415:7;14406:37;;;14436:6;14406:37;;;;;;:::i;:::-;;;;;;;;14456:48;14476:7;14493:1;14497:6;14456:19;:48::i;:::-;13921:591;;;:::o;21034:191::-;21108:16;21127:6;;;;;;;;;;;21108:25;;21153:8;21144:6;;:17;;;;;;;;;;;;;;;;;;21208:8;21177:40;;21198:8;21177:40;;;;;;;;;;;;21034:191;;:::o;16670:125::-;;;;:::o;17399:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:155::-;206:5;244:6;231:20;222:29;;260:41;295:5;260:41;:::i;:::-;212:95;;;;:::o;313:137::-;358:5;396:6;383:20;374:29;;412:32;438:5;412:32;:::i;:::-;364:86;;;;:::o;456:139::-;502:5;540:6;527:20;518:29;;556:33;583:5;556:33;:::i;:::-;508:87;;;;:::o;601:262::-;660:6;709:2;697:9;688:7;684:23;680:32;677:2;;;725:1;722;715:12;677:2;768:1;793:53;838:7;829:6;818:9;814:22;793:53;:::i;:::-;783:63;;739:117;667:196;;;;:::o;869:278::-;936:6;985:2;973:9;964:7;960:23;956:32;953:2;;;1001:1;998;991:12;953:2;1044:1;1069:61;1122:7;1113:6;1102:9;1098:22;1069:61;:::i;:::-;1059:71;;1015:125;943:204;;;;:::o;1153:407::-;1221:6;1229;1278:2;1266:9;1257:7;1253:23;1249:32;1246:2;;;1294:1;1291;1284:12;1246:2;1337:1;1362:53;1407:7;1398:6;1387:9;1383:22;1362:53;:::i;:::-;1352:63;;1308:117;1464:2;1490:53;1535:7;1526:6;1515:9;1511:22;1490:53;:::i;:::-;1480:63;;1435:118;1236:324;;;;;:::o;1566:552::-;1643:6;1651;1659;1708:2;1696:9;1687:7;1683:23;1679:32;1676:2;;;1724:1;1721;1714:12;1676:2;1767:1;1792:53;1837:7;1828:6;1817:9;1813:22;1792:53;:::i;:::-;1782:63;;1738:117;1894:2;1920:53;1965:7;1956:6;1945:9;1941:22;1920:53;:::i;:::-;1910:63;;1865:118;2022:2;2048:53;2093:7;2084:6;2073:9;2069:22;2048:53;:::i;:::-;2038:63;;1993:118;1666:452;;;;;:::o;2124:407::-;2192:6;2200;2249:2;2237:9;2228:7;2224:23;2220:32;2217:2;;;2265:1;2262;2255:12;2217:2;2308:1;2333:53;2378:7;2369:6;2358:9;2354:22;2333:53;:::i;:::-;2323:63;;2279:117;2435:2;2461:53;2506:7;2497:6;2486:9;2482:22;2461:53;:::i;:::-;2451:63;;2406:118;2207:324;;;;;:::o;2537:260::-;2595:6;2644:2;2632:9;2623:7;2619:23;2615:32;2612:2;;;2660:1;2657;2650:12;2612:2;2703:1;2728:52;2772:7;2763:6;2752:9;2748:22;2728:52;:::i;:::-;2718:62;;2674:116;2602:195;;;;:::o;2803:262::-;2862:6;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2927:1;2924;2917:12;2879:2;2970:1;2995:53;3040:7;3031:6;3020:9;3016:22;2995:53;:::i;:::-;2985:63;;2941:117;2869:196;;;;:::o;3071:118::-;3158:24;3176:5;3158:24;:::i;:::-;3153:3;3146:37;3136:53;;:::o;3195:109::-;3276:21;3291:5;3276:21;:::i;:::-;3271:3;3264:34;3254:50;;:::o;3310:364::-;3398:3;3426:39;3459:5;3426:39;:::i;:::-;3481:71;3545:6;3540:3;3481:71;:::i;:::-;3474:78;;3561:52;3606:6;3601:3;3594:4;3587:5;3583:16;3561:52;:::i;:::-;3638:29;3660:6;3638:29;:::i;:::-;3633:3;3629:39;3622:46;;3402:272;;;;;:::o;3680:366::-;3822:3;3843:67;3907:2;3902:3;3843:67;:::i;:::-;3836:74;;3919:93;4008:3;3919:93;:::i;:::-;4037:2;4032:3;4028:12;4021:19;;3826:220;;;:::o;4052:366::-;4194:3;4215:67;4279:2;4274:3;4215:67;:::i;:::-;4208:74;;4291:93;4380:3;4291:93;:::i;:::-;4409:2;4404:3;4400:12;4393:19;;4198:220;;;:::o;4424:366::-;4566:3;4587:67;4651:2;4646:3;4587:67;:::i;:::-;4580:74;;4663:93;4752:3;4663:93;:::i;:::-;4781:2;4776:3;4772:12;4765:19;;4570:220;;;:::o;4796:366::-;4938:3;4959:67;5023:2;5018:3;4959:67;:::i;:::-;4952:74;;5035:93;5124:3;5035:93;:::i;:::-;5153:2;5148:3;5144:12;5137:19;;4942:220;;;:::o;5168:366::-;5310:3;5331:67;5395:2;5390:3;5331:67;:::i;:::-;5324:74;;5407:93;5496:3;5407:93;:::i;:::-;5525:2;5520:3;5516:12;5509:19;;5314:220;;;:::o;5540:366::-;5682:3;5703:67;5767:2;5762:3;5703:67;:::i;:::-;5696:74;;5779:93;5868:3;5779:93;:::i;:::-;5897:2;5892:3;5888:12;5881:19;;5686:220;;;:::o;5912:366::-;6054:3;6075:67;6139:2;6134:3;6075:67;:::i;:::-;6068:74;;6151:93;6240:3;6151:93;:::i;:::-;6269:2;6264:3;6260:12;6253:19;;6058:220;;;:::o;6284:366::-;6426:3;6447:67;6511:2;6506:3;6447:67;:::i;:::-;6440:74;;6523:93;6612:3;6523:93;:::i;:::-;6641:2;6636:3;6632:12;6625:19;;6430:220;;;:::o;6656:366::-;6798:3;6819:67;6883:2;6878:3;6819:67;:::i;:::-;6812:74;;6895:93;6984:3;6895:93;:::i;:::-;7013:2;7008:3;7004:12;6997:19;;6802:220;;;:::o;7028:366::-;7170:3;7191:67;7255:2;7250:3;7191:67;:::i;:::-;7184:74;;7267:93;7356:3;7267:93;:::i;:::-;7385:2;7380:3;7376:12;7369:19;;7174:220;;;:::o;7400:366::-;7542:3;7563:67;7627:2;7622:3;7563:67;:::i;:::-;7556:74;;7639:93;7728:3;7639:93;:::i;:::-;7757:2;7752:3;7748:12;7741:19;;7546:220;;;:::o;7772:366::-;7914:3;7935:67;7999:2;7994:3;7935:67;:::i;:::-;7928:74;;8011:93;8100:3;8011:93;:::i;:::-;8129:2;8124:3;8120:12;8113:19;;7918:220;;;:::o;8144:366::-;8286:3;8307:67;8371:2;8366:3;8307:67;:::i;:::-;8300:74;;8383:93;8472:3;8383:93;:::i;:::-;8501:2;8496:3;8492:12;8485:19;;8290:220;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8662:220;;;:::o;8888:366::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;9034:220;;;:::o;9260:115::-;9345:23;9362:5;9345:23;:::i;:::-;9340:3;9333:36;9323:52;;:::o;9381:118::-;9468:24;9486:5;9468:24;:::i;:::-;9463:3;9456:37;9446:53;;:::o;9505:112::-;9588:22;9604:5;9588:22;:::i;:::-;9583:3;9576:35;9566:51;;:::o;9623:222::-;9716:4;9754:2;9743:9;9739:18;9731:26;;9767:71;9835:1;9824:9;9820:17;9811:6;9767:71;:::i;:::-;9721:124;;;;:::o;9851:210::-;9938:4;9976:2;9965:9;9961:18;9953:26;;9989:65;10051:1;10040:9;10036:17;10027:6;9989:65;:::i;:::-;9943:118;;;;:::o;10067:313::-;10180:4;10218:2;10207:9;10203:18;10195:26;;10267:9;10261:4;10257:20;10253:1;10242:9;10238:17;10231:47;10295:78;10368:4;10359:6;10295:78;:::i;:::-;10287:86;;10185:195;;;;:::o;10386:419::-;10552:4;10590:2;10579:9;10575:18;10567:26;;10639:9;10633:4;10629:20;10625:1;10614:9;10610:17;10603:47;10667:131;10793:4;10667:131;:::i;:::-;10659:139;;10557:248;;;:::o;10811:419::-;10977:4;11015:2;11004:9;11000:18;10992:26;;11064:9;11058:4;11054:20;11050:1;11039:9;11035:17;11028:47;11092:131;11218:4;11092:131;:::i;:::-;11084:139;;10982:248;;;:::o;11236:419::-;11402:4;11440:2;11429:9;11425:18;11417:26;;11489:9;11483:4;11479:20;11475:1;11464:9;11460:17;11453:47;11517:131;11643:4;11517:131;:::i;:::-;11509:139;;11407:248;;;:::o;11661:419::-;11827:4;11865:2;11854:9;11850:18;11842:26;;11914:9;11908:4;11904:20;11900:1;11889:9;11885:17;11878:47;11942:131;12068:4;11942:131;:::i;:::-;11934:139;;11832:248;;;:::o;12086:419::-;12252:4;12290:2;12279:9;12275:18;12267:26;;12339:9;12333:4;12329:20;12325:1;12314:9;12310:17;12303:47;12367:131;12493:4;12367:131;:::i;:::-;12359:139;;12257:248;;;:::o;12511:419::-;12677:4;12715:2;12704:9;12700:18;12692:26;;12764:9;12758:4;12754:20;12750:1;12739:9;12735:17;12728:47;12792:131;12918:4;12792:131;:::i;:::-;12784:139;;12682:248;;;:::o;12936:419::-;13102:4;13140:2;13129:9;13125:18;13117:26;;13189:9;13183:4;13179:20;13175:1;13164:9;13160:17;13153:47;13217:131;13343:4;13217:131;:::i;:::-;13209:139;;13107:248;;;:::o;13361:419::-;13527:4;13565:2;13554:9;13550:18;13542:26;;13614:9;13608:4;13604:20;13600:1;13589:9;13585:17;13578:47;13642:131;13768:4;13642:131;:::i;:::-;13634:139;;13532:248;;;:::o;13786:419::-;13952:4;13990:2;13979:9;13975:18;13967:26;;14039:9;14033:4;14029:20;14025:1;14014:9;14010:17;14003:47;14067:131;14193:4;14067:131;:::i;:::-;14059:139;;13957:248;;;:::o;14211:419::-;14377:4;14415:2;14404:9;14400:18;14392:26;;14464:9;14458:4;14454:20;14450:1;14439:9;14435:17;14428:47;14492:131;14618:4;14492:131;:::i;:::-;14484:139;;14382:248;;;:::o;14636:419::-;14802:4;14840:2;14829:9;14825:18;14817:26;;14889:9;14883:4;14879:20;14875:1;14864:9;14860:17;14853:47;14917:131;15043:4;14917:131;:::i;:::-;14909:139;;14807:248;;;:::o;15061:419::-;15227:4;15265:2;15254:9;15250:18;15242:26;;15314:9;15308:4;15304:20;15300:1;15289:9;15285:17;15278:47;15342:131;15468:4;15342:131;:::i;:::-;15334:139;;15232:248;;;:::o;15486:419::-;15652:4;15690:2;15679:9;15675:18;15667:26;;15739:9;15733:4;15729:20;15725:1;15714:9;15710:17;15703:47;15767:131;15893:4;15767:131;:::i;:::-;15759:139;;15657:248;;;:::o;15911:419::-;16077:4;16115:2;16104:9;16100:18;16092:26;;16164:9;16158:4;16154:20;16150:1;16139:9;16135:17;16128:47;16192:131;16318:4;16192:131;:::i;:::-;16184:139;;16082:248;;;:::o;16336:419::-;16502:4;16540:2;16529:9;16525:18;16517:26;;16589:9;16583:4;16579:20;16575:1;16564:9;16560:17;16553:47;16617:131;16743:4;16617:131;:::i;:::-;16609:139;;16507:248;;;:::o;16761:218::-;16852:4;16890:2;16879:9;16875:18;16867:26;;16903:69;16969:1;16958:9;16954:17;16945:6;16903:69;:::i;:::-;16857:122;;;;:::o;16985:222::-;17078:4;17116:2;17105:9;17101:18;17093:26;;17129:71;17197:1;17186:9;17182:17;17173:6;17129:71;:::i;:::-;17083:124;;;;:::o;17213:214::-;17302:4;17340:2;17329:9;17325:18;17317:26;;17353:67;17417:1;17406:9;17402:17;17393:6;17353:67;:::i;:::-;17307:120;;;;:::o;17433:99::-;17485:6;17519:5;17513:12;17503:22;;17492:40;;;:::o;17538:169::-;17622:11;17656:6;17651:3;17644:19;17696:4;17691:3;17687:14;17672:29;;17634:73;;;;:::o;17713:305::-;17753:3;17772:20;17790:1;17772:20;:::i;:::-;17767:25;;17806:20;17824:1;17806:20;:::i;:::-;17801:25;;17960:1;17892:66;17888:74;17885:1;17882:81;17879:2;;;17966:18;;:::i;:::-;17879:2;18010:1;18007;18003:9;17996:16;;17757:261;;;;:::o;18024:185::-;18064:1;18081:20;18099:1;18081:20;:::i;:::-;18076:25;;18115:20;18133:1;18115:20;:::i;:::-;18110:25;;18154:1;18144:2;;18159:18;;:::i;:::-;18144:2;18201:1;18198;18194:9;18189:14;;18066:143;;;;:::o;18215:348::-;18255:7;18278:20;18296:1;18278:20;:::i;:::-;18273:25;;18312:20;18330:1;18312:20;:::i;:::-;18307:25;;18500:1;18432:66;18428:74;18425:1;18422:81;18417:1;18410:9;18403:17;18399:105;18396:2;;;18507:18;;:::i;:::-;18396:2;18555:1;18552;18548:9;18537:20;;18263:300;;;;:::o;18569:191::-;18609:4;18629:20;18647:1;18629:20;:::i;:::-;18624:25;;18663:20;18681:1;18663:20;:::i;:::-;18658:25;;18702:1;18699;18696:8;18693:2;;;18707:18;;:::i;:::-;18693:2;18752:1;18749;18745:9;18737:17;;18614:146;;;;:::o;18766:96::-;18803:7;18832:24;18850:5;18832:24;:::i;:::-;18821:35;;18811:51;;;:::o;18868:104::-;18913:7;18942:24;18960:5;18942:24;:::i;:::-;18931:35;;18921:51;;;:::o;18978:90::-;19012:7;19055:5;19048:13;19041:21;19030:32;;19020:48;;;:::o;19074:89::-;19110:7;19150:6;19143:5;19139:18;19128:29;;19118:45;;;:::o;19169:126::-;19206:7;19246:42;19239:5;19235:54;19224:65;;19214:81;;;:::o;19301:77::-;19338:7;19367:5;19356:16;;19346:32;;;:::o;19384:86::-;19419:7;19459:4;19452:5;19448:16;19437:27;;19427:43;;;:::o;19476:307::-;19544:1;19554:113;19568:6;19565:1;19562:13;19554:113;;;19653:1;19648:3;19644:11;19638:18;19634:1;19629:3;19625:11;19618:39;19590:2;19587:1;19583:10;19578:15;;19554:113;;;19685:6;19682:1;19679:13;19676:2;;;19765:1;19756:6;19751:3;19747:16;19740:27;19676:2;19525:258;;;;:::o;19789:320::-;19833:6;19870:1;19864:4;19860:12;19850:22;;19917:1;19911:4;19907:12;19938:18;19928:2;;19994:4;19986:6;19982:17;19972:27;;19928:2;20056;20048:6;20045:14;20025:18;20022:38;20019:2;;;20075:18;;:::i;:::-;20019:2;19840:269;;;;:::o;20115:180::-;20163:77;20160:1;20153:88;20260:4;20257:1;20250:15;20284:4;20281:1;20274:15;20301:180;20349:77;20346:1;20339:88;20446:4;20443:1;20436:15;20470:4;20467:1;20460:15;20487:180;20535:77;20532:1;20525:88;20632:4;20629:1;20622:15;20656:4;20653:1;20646:15;20673:102;20714:6;20765:2;20761:7;20756:2;20749:5;20745:14;20741:28;20731:38;;20721:54;;;:::o;20781:222::-;20921:34;20917:1;20909:6;20905:14;20898:58;20990:5;20985:2;20977:6;20973:15;20966:30;20887:116;:::o;21009:221::-;21149:34;21145:1;21137:6;21133:14;21126:58;21218:4;21213:2;21205:6;21201:15;21194:29;21115:115;:::o;21236:225::-;21376:34;21372:1;21364:6;21360:14;21353:58;21445:8;21440:2;21432:6;21428:15;21421:33;21342:119;:::o;21467:221::-;21607:34;21603:1;21595:6;21591:14;21584:58;21676:4;21671:2;21663:6;21659:15;21652:29;21573:115;:::o;21694:179::-;21834:31;21830:1;21822:6;21818:14;21811:55;21800:73;:::o;21879:225::-;22019:34;22015:1;22007:6;22003:14;21996:58;22088:8;22083:2;22075:6;22071:15;22064:33;21985:119;:::o;22110:224::-;22250:34;22246:1;22238:6;22234:14;22227:58;22319:7;22314:2;22306:6;22302:15;22295:32;22216:118;:::o;22340:175::-;22480:27;22476:1;22468:6;22464:14;22457:51;22446:69;:::o;22521:182::-;22661:34;22657:1;22649:6;22645:14;22638:58;22627:76;:::o;22709:220::-;22849:34;22845:1;22837:6;22833:14;22826:58;22918:3;22913:2;22905:6;22901:15;22894:28;22815:114;:::o;22935:224::-;23075:34;23071:1;23063:6;23059:14;23052:58;23144:7;23139:2;23131:6;23127:15;23120:32;23041:118;:::o;23165:182::-;23305:34;23301:1;23293:6;23289:14;23282:58;23271:76;:::o;23353:171::-;23493:23;23489:1;23481:6;23477:14;23470:47;23459:65;:::o;23530:223::-;23670:34;23666:1;23658:6;23654:14;23647:58;23739:6;23734:2;23726:6;23722:15;23715:31;23636:117;:::o;23759:224::-;23899:34;23895:1;23887:6;23883:14;23876:58;23968:7;23963:2;23955:6;23951:15;23944:32;23865:118;:::o;23989:122::-;24062:24;24080:5;24062:24;:::i;:::-;24055:5;24052:35;24042:2;;24101:1;24098;24091:12;24042:2;24032:79;:::o;24117:138::-;24198:32;24224:5;24198:32;:::i;:::-;24191:5;24188:43;24178:2;;24245:1;24242;24235:12;24178:2;24168:87;:::o;24261:120::-;24333:23;24350:5;24333:23;:::i;:::-;24326:5;24323:34;24313:2;;24371:1;24368;24361:12;24313:2;24303:78;:::o;24387:122::-;24460:24;24478:5;24460:24;:::i;:::-;24453:5;24450:35;24440:2;;24499:1;24496;24489:12;24440:2;24430:79;:::o

Swarm Source

ipfs://9de9a0c1d7400a9cfcabb982bddd1385979022b3e72407247e31c0191c995913
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading