Token BitGem

Overview ERC-20

Total Supply:
34,530,005 BGEM

Holders:
16 addresses

Profile Summary

 
Contract:
0x8e17c0c92e6aa017235edba649d0fa9fb42d784c0x8e17c0C92E6AA017235eDBA649D0Fa9Fb42d784c

Decimals:
18
Balance
2,796,333.62499999999999375 BGEM
0x3120e153e89b7850b158d1a93d4289066a14ccd5
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BitGem

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-30
*/

// File: @openzeppelin/[email protected]/utils/Context.sol


// 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/[email protected]/access/Ownable.sol


// 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: @openzeppelin/[email protected]/token/ERC20/IERC20.sol


// 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/[email protected]/token/ERC20/extensions/IERC20Metadata.sol


// 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/[email protected]/token/ERC20/ERC20.sol


// 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/[email protected]/token/ERC20/extensions/ERC20Burnable.sol


// 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: BitGem.sol


pragma solidity ^0.8.4;




/**
 * @title Blacklist
 * @dev The Blacklist contract has a blacklist of addresses, and provides basic authorization control functions.
 * @dev This simplifies the implementation of "user permissions".
 */
contract Blacklist is Ownable {
  mapping(address => bool) blacklist;
  address[] public blacklistAddresses;

  event BlacklistedAddressAdded(address addr);
  event BlacklistedAddressRemoved(address addr);

  /**
   * @dev Throws if called by any account that's whitelist (a.k.a not blacklist)
   */
  modifier isBlacklisted() {
    require(blacklist[msg.sender]);
    _;
  }

  /**
   * @dev Throws if called by any account that's blacklist.
   */
  modifier isNotBlacklisted() {
    require(!blacklist[msg.sender]);
    _;
  }

  /**
   * @dev Add an address to the blacklist
   * @param addr address
   * @return success true if the address was added to the blacklist, false if the address was already in the blacklist
   */
  function addAddressToBlacklist(address addr) onlyOwner public returns(bool success) {
    if (!blacklist[addr]) {
      blacklistAddresses.push(addr);
      blacklist[addr] = true;
      emit BlacklistedAddressAdded(addr);
      success = true;
    }
  }

  /**
   * @dev Add addresses to the blacklist
   * @param addrs addresses
   * @return success true if at least one address was added to the blacklist,
   * false if all addresses were already in the blacklist
   */
  function addAddressesToBlacklist( address[] memory addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (addAddressToBlacklist(addrs[i])) {
        success = true;
      }
    }
  }

  /**
   * @dev Remove an address from the blacklist
   * @param addr address
   * @return success true if the address was removed from the blacklist,
   * false if the address wasn't in the blacklist in the first place
   */
  function removeAddressFromBlacklist(address addr) onlyOwner public returns(bool success) {
    if (blacklist[addr]) {
      blacklist[addr] = false;
      for (uint i = 0; i < blacklistAddresses.length; i++) {
        if (addr == blacklistAddresses[i]) {
          delete blacklistAddresses[i];
        }
      }
      emit BlacklistedAddressRemoved(addr);
      success = true;
    }
  }

  /**
   * @dev Remove addresses from the blacklist
   * @param addrs addresses
   * @return success true if at least one address was removed from the blacklist,
   * false if all addresses weren't in the blacklist in the first place
   */
  function removeAddressesFromBlacklist(address[] memory addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (removeAddressFromBlacklist(addrs[i])) {
        success = true;
      }
    }
  }

  /**
   * @dev Get all blacklist wallet addresses
   */
  function getBlacklist() public view returns (address[] memory) {
    return blacklistAddresses;
  }
}

contract BitGem is ERC20, ERC20Burnable, Ownable, Blacklist {
    constructor() ERC20("BitGem", "BGEM") {}

    function transfer(
      address to, 
      uint256 amount
    ) public override returns(bool success) {
      require(!blacklist[msg.sender], "Sender is blacklisted");
      require(!blacklist[to], "Receiver is blacklisted");

      return super.transfer(to, amount);
    }

    function transferFrom(
      address from, 
      address to, 
      uint256 amount
    ) public override returns(bool success) {
      require(!blacklist[from], "Sender is blacklisted");
      require(!blacklist[to], "Receiver is blacklisted");

      return super.transferFrom(from, to, amount);
    }

    function approve(
      address spender, 
      uint256 amount
    ) public override returns(bool success) {
      require(!blacklist[msg.sender], "Caller is blacklisted");
      require(!blacklist[spender], "Spender is blacklisted");

      return super.approve(spender, amount);
    }

    function increaseAllowance(
      address spender, 
      uint256 addedValue
    ) public override returns(bool success) {
      require(!blacklist[msg.sender], "Caller is blacklisted");
      require(!blacklist[spender], "Spender is blacklisted");

      return super.increaseAllowance(spender, addedValue);
    }

    function decreaseAllowance(
      address spender, 
      uint256 subtractedValue
    ) public override returns(bool success) {
      require(!blacklist[msg.sender], "Caller is blacklisted");
      require(!blacklist[spender], "Spender is blacklisted");

      return super.decreaseAllowance(spender, subtractedValue);
    }

    function burn(uint256 amount) public override {
      require(!blacklist[msg.sender], "Caller is blacklisted");

      super.burn(amount);
    } 

    function burnFrom(address account, uint256 amount) public override {
      require(!blacklist[msg.sender], "Caller is blacklisted");
      require(!blacklist[account], "Token owner is blacklisted");

      super.burnFrom(account, amount);
    }

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"BlacklistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"BlacklistedAddressRemoved","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":"addr","type":"address"}],"name":"addAddressToBlacklist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addAddressesToBlacklist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"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":"success","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":"","type":"uint256"}],"name":"blacklistAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"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":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlacklist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAddressFromBlacklist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"removeAddressesFromBlacklist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"success","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":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600681526020017f42697447656d00000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4247454d00000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620001a6565b508060049080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61325380620002cb6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806342966c68116100c3578063a457c2d71161007c578063a457c2d7146103b4578063a9059cbb146103e4578063ca73419e14610414578063dd62ed3e14610444578063f2c816ae14610474578063f2fde38b146104a45761014d565b806342966c681461030657806370a0823114610322578063715018a61461035257806379cc67901461035c5780638da5cb5b1461037857806395d89b41146103965761014d565b8063313ce56711610115578063313ce5671461021e578063322587941461023c578063338d6c301461026c57806335e82f3a1461028a57806339509351146102ba57806340c10f19146102ea5761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a05780631e55a376146101be57806323b872dd146101ee575b600080fd5b61015a6104c0565b6040516101679190612823565b60405180910390f35b61018a600480360381019061018591906123c8565b610552565b6040516101979190612808565b60405180910390f35b6101a8610680565b6040516101b59190612a65565b60405180910390f35b6101d860048036038101906101d39190612451565b61068a565b6040516101e591906127cb565b60405180910390f35b61020860048036038101906102039190612375565b6106c9565b6040516102159190612808565b60405180910390f35b6102266107f9565b6040516102339190612a80565b60405180910390f35b61025660048036038101906102519190612408565b610802565b6040516102639190612808565b60405180910390f35b6102746108d2565b60405161028191906127e6565b60405180910390f35b6102a4600480360381019061029f9190612308565b610960565b6040516102b19190612808565b60405180910390f35b6102d460048036038101906102cf91906123c8565b610ba1565b6040516102e19190612808565b60405180910390f35b61030460048036038101906102ff91906123c8565b610ccf565b005b610320600480360381019061031b9190612451565b610d59565b005b61033c60048036038101906103379190612308565b610df2565b6040516103499190612a65565b60405180910390f35b61035a610e3a565b005b610376600480360381019061037191906123c8565b610ec2565b005b610380610fea565b60405161038d91906127cb565b60405180910390f35b61039e611014565b6040516103ab9190612823565b60405180910390f35b6103ce60048036038101906103c991906123c8565b6110a6565b6040516103db9190612808565b60405180910390f35b6103fe60048036038101906103f991906123c8565b6111d4565b60405161040b9190612808565b60405180910390f35b61042e60048036038101906104299190612408565b611302565b60405161043b9190612808565b60405180910390f35b61045e60048036038101906104599190612335565b6113d2565b60405161046b9190612a65565b60405180910390f35b61048e60048036038101906104899190612308565b611459565b60405161049b9190612808565b60405180910390f35b6104be60048036038101906104b99190612308565b611624565b005b6060600380546104cf90612c53565b80601f01602080910402602001604051908101604052809291908181526020018280546104fb90612c53565b80156105485780601f1061051d57610100808354040283529160200191610548565b820191906000526020600020905b81548152906001019060200180831161052b57829003601f168201915b5050505050905090565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d890612a05565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066590612885565b60405180910390fd5b610678838361171c565b905092915050565b6000600254905090565b6007818154811061069a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074f90612945565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156107e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dc90612925565b60405180910390fd5b6107f084848461173f565b90509392505050565b60006012905090565b600061080c61176e565b73ffffffffffffffffffffffffffffffffffffffff1661082a610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087790612965565b60405180910390fd5b60005b82518110156108cc576108af8382815181106108a2576108a1612d5d565b5b6020026020010151610960565b156108b957600191505b80806108c490612cb6565b915050610883565b50919050565b6060600780548060200260200160405190810160405280929190818152602001828054801561095657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161090c575b5050505050905090565b600061096a61176e565b73ffffffffffffffffffffffffffffffffffffffff16610988610fea565b73ffffffffffffffffffffffffffffffffffffffff16146109de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590612965565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b9c576000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b600780549050811015610b5f5760078181548110610aac57610aab612d5d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4c5760078181548110610b1e57610b1d612d5d565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b8080610b5790612cb6565b915050610a8b565b507fb9b02d6ef3069c468ac99865bad0d84ec0cf34671cb26053e5e47d415ae1756482604051610b8f91906127cb565b60405180910390a1600190505b919050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790612a05565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490612885565b60405180910390fd5b610cc78383611776565b905092915050565b610cd761176e565b73ffffffffffffffffffffffffffffffffffffffff16610cf5610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290612965565b60405180910390fd5b610d558282611820565b5050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd90612a05565b60405180910390fd5b610def81611980565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e4261176e565b73ffffffffffffffffffffffffffffffffffffffff16610e60610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90612965565b60405180910390fd5b610ec06000611994565b565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690612a05565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906129e5565b60405180910390fd5b610fe68282611a5a565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461102390612c53565b80601f016020809104026020016040519081016040528092919081815260200182805461104f90612c53565b801561109c5780601f106110715761010080835404028352916020019161109c565b820191906000526020600020905b81548152906001019060200180831161107f57829003601f168201915b5050505050905090565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612a05565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990612885565b60405180910390fd5b6111cc8383611a7a565b905092915050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90612945565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790612925565b60405180910390fd5b6112fa8383611b64565b905092915050565b600061130c61176e565b73ffffffffffffffffffffffffffffffffffffffff1661132a610fea565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790612965565b60405180910390fd5b60005b82518110156113cc576113af8382815181106113a2576113a1612d5d565b5b6020026020010151611459565b156113b957600191505b80806113c490612cb6565b915050611383565b50919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061146361176e565b73ffffffffffffffffffffffffffffffffffffffff16611481610fea565b73ffffffffffffffffffffffffffffffffffffffff16146114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce90612965565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661161f576007829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fee71faa2d1e96ac74ee4023d6ffa8abfa43b7648f51e3dbd8ec561823e9df1328260405161161291906127cb565b60405180910390a1600190505b919050565b61162c61176e565b73ffffffffffffffffffffffffffffffffffffffff1661164a610fea565b73ffffffffffffffffffffffffffffffffffffffff16146116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169790612965565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611710576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611707906128a5565b60405180910390fd5b61171981611994565b50565b60008061172761176e565b9050611734818585611b87565b600191505092915050565b60008061174a61176e565b9050611757858285611d52565b611762858585611dde565b60019150509392505050565b600033905090565b60008061178161176e565b9050611815818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118109190612b41565b611b87565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790612a45565b60405180910390fd5b61189c6000838361205f565b80600260008282546118ae9190612b41565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119039190612b41565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119689190612a65565b60405180910390a361197c60008383612064565b5050565b61199161198b61176e565b82612069565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a6c82611a6661176e565b83611d52565b611a768282612069565b5050565b600080611a8561176e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4290612a25565b60405180910390fd5b611b588286868403611b87565b60019250505092915050565b600080611b6f61176e565b9050611b7c818585611dde565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee906129c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e906128c5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d459190612a65565b60405180910390a3505050565b6000611d5e84846113d2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611dd85781811015611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc1906128e5565b60405180910390fd5b611dd78484848403611b87565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e45906129a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590612845565b60405180910390fd5b611ec983838361205f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690612905565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fe29190612b41565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120469190612a65565b60405180910390a3612059848484612064565b50505050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d090612985565b60405180910390fd5b6120e58260008361205f565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290612865565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546121c29190612b97565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122279190612a65565b60405180910390a361223b83600084612064565b505050565b600061225361224e84612ac0565b612a9b565b9050808382526020820190508285602086028201111561227657612275612dc0565b5b60005b858110156122a6578161228c88826122b0565b845260208401935060208301925050600181019050612279565b5050509392505050565b6000813590506122bf816131ef565b92915050565b600082601f8301126122da576122d9612dbb565b5b81356122ea848260208601612240565b91505092915050565b60008135905061230281613206565b92915050565b60006020828403121561231e5761231d612dca565b5b600061232c848285016122b0565b91505092915050565b6000806040838503121561234c5761234b612dca565b5b600061235a858286016122b0565b925050602061236b858286016122b0565b9150509250929050565b60008060006060848603121561238e5761238d612dca565b5b600061239c868287016122b0565b93505060206123ad868287016122b0565b92505060406123be868287016122f3565b9150509250925092565b600080604083850312156123df576123de612dca565b5b60006123ed858286016122b0565b92505060206123fe858286016122f3565b9150509250929050565b60006020828403121561241e5761241d612dca565b5b600082013567ffffffffffffffff81111561243c5761243b612dc5565b5b612448848285016122c5565b91505092915050565b60006020828403121561246757612466612dca565b5b6000612475848285016122f3565b91505092915050565b600061248a8383612496565b60208301905092915050565b61249f81612bcb565b82525050565b6124ae81612bcb565b82525050565b60006124bf82612afc565b6124c98185612b1f565b93506124d483612aec565b8060005b838110156125055781516124ec888261247e565b97506124f783612b12565b9250506001810190506124d8565b5085935050505092915050565b61251b81612bdd565b82525050565b600061252c82612b07565b6125368185612b30565b9350612546818560208601612c20565b61254f81612dcf565b840191505092915050565b6000612567602383612b30565b915061257282612de0565b604082019050919050565b600061258a602283612b30565b915061259582612e2f565b604082019050919050565b60006125ad601683612b30565b91506125b882612e7e565b602082019050919050565b60006125d0602683612b30565b91506125db82612ea7565b604082019050919050565b60006125f3602283612b30565b91506125fe82612ef6565b604082019050919050565b6000612616601d83612b30565b915061262182612f45565b602082019050919050565b6000612639602683612b30565b915061264482612f6e565b604082019050919050565b600061265c601783612b30565b915061266782612fbd565b602082019050919050565b600061267f601583612b30565b915061268a82612fe6565b602082019050919050565b60006126a2602083612b30565b91506126ad8261300f565b602082019050919050565b60006126c5602183612b30565b91506126d082613038565b604082019050919050565b60006126e8602583612b30565b91506126f382613087565b604082019050919050565b600061270b602483612b30565b9150612716826130d6565b604082019050919050565b600061272e601a83612b30565b915061273982613125565b602082019050919050565b6000612751601583612b30565b915061275c8261314e565b602082019050919050565b6000612774602583612b30565b915061277f82613177565b604082019050919050565b6000612797601f83612b30565b91506127a2826131c6565b602082019050919050565b6127b681612c09565b82525050565b6127c581612c13565b82525050565b60006020820190506127e060008301846124a5565b92915050565b6000602082019050818103600083015261280081846124b4565b905092915050565b600060208201905061281d6000830184612512565b92915050565b6000602082019050818103600083015261283d8184612521565b905092915050565b6000602082019050818103600083015261285e8161255a565b9050919050565b6000602082019050818103600083015261287e8161257d565b9050919050565b6000602082019050818103600083015261289e816125a0565b9050919050565b600060208201905081810360008301526128be816125c3565b9050919050565b600060208201905081810360008301526128de816125e6565b9050919050565b600060208201905081810360008301526128fe81612609565b9050919050565b6000602082019050818103600083015261291e8161262c565b9050919050565b6000602082019050818103600083015261293e8161264f565b9050919050565b6000602082019050818103600083015261295e81612672565b9050919050565b6000602082019050818103600083015261297e81612695565b9050919050565b6000602082019050818103600083015261299e816126b8565b9050919050565b600060208201905081810360008301526129be816126db565b9050919050565b600060208201905081810360008301526129de816126fe565b9050919050565b600060208201905081810360008301526129fe81612721565b9050919050565b60006020820190508181036000830152612a1e81612744565b9050919050565b60006020820190508181036000830152612a3e81612767565b9050919050565b60006020820190508181036000830152612a5e8161278a565b9050919050565b6000602082019050612a7a60008301846127ad565b92915050565b6000602082019050612a9560008301846127bc565b92915050565b6000612aa5612ab6565b9050612ab18282612c85565b919050565b6000604051905090565b600067ffffffffffffffff821115612adb57612ada612d8c565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b4c82612c09565b9150612b5783612c09565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b8c57612b8b612cff565b5b828201905092915050565b6000612ba282612c09565b9150612bad83612c09565b925082821015612bc057612bbf612cff565b5b828203905092915050565b6000612bd682612be9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612c3e578082015181840152602081019050612c23565b83811115612c4d576000848401525b50505050565b60006002820490506001821680612c6b57607f821691505b60208210811415612c7f57612c7e612d2e565b5b50919050565b612c8e82612dcf565b810181811067ffffffffffffffff82111715612cad57612cac612d8c565b5b80604052505050565b6000612cc182612c09565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cf457612cf3612cff565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f5370656e64657220697320626c61636b6c697374656400000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f526563656976657220697320626c61636b6c6973746564000000000000000000600082015250565b7f53656e64657220697320626c61636b6c69737465640000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206f776e657220697320626c61636b6c6973746564000000000000600082015250565b7f43616c6c657220697320626c61636b6c69737465640000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6131f881612bcb565b811461320357600080fd5b50565b61320f81612c09565b811461321a57600080fd5b5056fea2646970667358221220a5741b4d3a3ef3a999e160216d1f950dea74a52ef0075d1925a24c2c6069091c64736f6c63430008070033

Deployed ByteCode Sourcemap

24248:2209:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9213:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24973:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10333:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21522:35;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24653:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10175:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23825:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24140:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23174:399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25275:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26359:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25945:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10504:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2618:103;;;:::i;:::-;;26102:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1967:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9432:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25605:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24363:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22696:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11093:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22206:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2876:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9213:100;9267:13;9300:5;9293:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9213:100;:::o;24973:294::-;25069:12;25101:9;:21;25111:10;25101:21;;;;;;;;;;;;;;;;;;;;;;;;;25100:22;25092:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25166:9;:18;25176:7;25166:18;;;;;;;;;;;;;;;;;;;;;;;;;25165:19;25157:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25229:30;25243:7;25252:6;25229:13;:30::i;:::-;25222:37;;24973:294;;;;:::o;10333:108::-;10394:7;10421:12;;10414:19;;10333:108;:::o;21522:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24653:312::-;24771:12;24803:9;:15;24813:4;24803:15;;;;;;;;;;;;;;;;;;;;;;;;;24802:16;24794:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;24862:9;:13;24872:2;24862:13;;;;;;;;;;;;;;;;;;;;;;;;;24861:14;24853:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;24921:36;24940:4;24946:2;24950:6;24921:18;:36::i;:::-;24914:43;;24653:312;;;;;:::o;10175:93::-;10233:5;10258:2;10251:9;;10175:93;:::o;23825:249::-;23912:12;2198;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23938:9:::1;23933:136;23957:5;:12;23953:1;:16;23933:136;;;23989:36;24016:5;24022:1;24016:8;;;;;;;;:::i;:::-;;;;;;;;23989:26;:36::i;:::-;23985:77;;;24048:4;24038:14;;23985:77;23971:3;;;;;:::i;:::-;;;;23933:136;;;;23825:249:::0;;;:::o;24140:101::-;24185:16;24217:18;24210:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24140:101;:::o;23174:399::-;23249:12;2198;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23274:9:::1;:15;23284:4;23274:15;;;;;;;;;;;;;;;;;;;;;;;;;23270:298;;;23318:5;23300:9;:15;23310:4;23300:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;23337:6;23332:161;23353:18;:25;;;;23349:1;:29;23332:161;;;23408:18;23427:1;23408:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23400:29;;:4;:29;;;23396:88;;;23451:18;23470:1;23451:21;;;;;;;;:::i;:::-;;;;;;;;;;23444:28;;;;;;;;;;;23396:88;23380:3;;;;;:::i;:::-;;;;23332:161;;;;23506:31;23532:4;23506:31;;;;;;:::i;:::-;;;;;;;;23556:4;23546:14;;23270:298;23174:399:::0;;;:::o;25275:322::-;25385:12;25417:9;:21;25427:10;25417:21;;;;;;;;;;;;;;;;;;;;;;;;;25416:22;25408:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25482:9;:18;25492:7;25482:18;;;;;;;;;;;;;;;;;;;;;;;;;25481:19;25473:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25545:44;25569:7;25578:10;25545:23;:44::i;:::-;25538:51;;25275:322;;;;:::o;26359:95::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26429:17:::1;26435:2;26439:6;26429:5;:17::i;:::-;26359:95:::0;;:::o;25945:148::-;26009:9;:21;26019:10;26009:21;;;;;;;;;;;;;;;;;;;;;;;;;26008:22;26000:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26067:18;26078:6;26067:10;:18::i;:::-;25945:148;:::o;10504:127::-;10578:7;10605:9;:18;10615:7;10605:18;;;;;;;;;;;;;;;;10598:25;;10504:127;;;:::o;2618:103::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2683:30:::1;2710:1;2683:18;:30::i;:::-;2618:103::o:0;26102:249::-;26187:9;:21;26197:10;26187:21;;;;;;;;;;;;;;;;;;;;;;;;;26186:22;26178:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26252:9;:18;26262:7;26252:18;;;;;;;;;;;;;;;;;;;;;;;;;26251:19;26243:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26312:31;26327:7;26336:6;26312:14;:31::i;:::-;26102:249;;:::o;1967:87::-;2013:7;2040:6;;;;;;;;;;;2033:13;;1967:87;:::o;9432:104::-;9488:13;9521:7;9514:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9432:104;:::o;25605:332::-;25720:12;25752:9;:21;25762:10;25752:21;;;;;;;;;;;;;;;;;;;;;;;;;25751:22;25743:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25817:9;:18;25827:7;25817:18;;;;;;;;;;;;;;;;;;;;;;;;;25816:19;25808:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25880:49;25904:7;25913:15;25880:23;:49::i;:::-;25873:56;;25605:332;;;;:::o;24363:282::-;24455:12;24487:9;:21;24497:10;24487:21;;;;;;;;;;;;;;;;;;;;;;;;;24486:22;24478:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24552:9;:13;24562:2;24552:13;;;;;;;;;;;;;;;;;;;;;;;;;24551:14;24543:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;24611:26;24626:2;24630:6;24611:14;:26::i;:::-;24604:33;;24363:282;;;;:::o;22696:240::-;22779:12;2198;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22805:9:::1;22800:131;22824:5;:12;22820:1;:16;22800:131;;;22856:31;22878:5;22884:1;22878:8;;;;;;;;:::i;:::-;;;;;;;;22856:21;:31::i;:::-;22852:72;;;22910:4;22900:14;;22852:72;22838:3;;;;;:::i;:::-;;;;22800:131;;;;22696:240:::0;;;:::o;11093:151::-;11182:7;11209:11;:18;11221:5;11209:18;;;;;;;;;;;;;;;:27;11228:7;11209:27;;;;;;;;;;;;;;;;11202:34;;11093:151;;;;:::o;22206:261::-;22276:12;2198;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22302:9:::1;:15;22312:4;22302:15;;;;;;;;;;;;;;;;;;;;;;;;;22297:165;;22328:18;22352:4;22328:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22384:4;22366:9;:15;22376:4;22366:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;22402:29;22426:4;22402:29;;;;;;:::i;:::-;;;;;;;;22450:4;22440:14;;22297:165;22206:261:::0;;;:::o;2876:201::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2985:1:::1;2965:22;;:8;:22;;;;2957:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3041:28;3060:8;3041:18;:28::i;:::-;2876:201:::0;:::o;11564:::-;11647:4;11664:13;11680:12;:10;:12::i;:::-;11664:28;;11703:32;11712:5;11719:7;11728:6;11703:8;:32::i;:::-;11753:4;11746:11;;;11564:201;;;;:::o;12345:295::-;12476:4;12493:15;12511:12;:10;:12::i;:::-;12493:30;;12534:38;12550:4;12556:7;12565:6;12534:15;:38::i;:::-;12583:27;12593:4;12599:2;12603:6;12583:9;:27::i;:::-;12628:4;12621:11;;;12345:295;;;;;:::o;685:98::-;738:7;765:10;758:17;;685:98;:::o;13049:240::-;13137:4;13154:13;13170:12;:10;:12::i;:::-;13154:28;;13193:66;13202:5;13209:7;13248:10;13218:11;:18;13230:5;13218:18;;;;;;;;;;;;;;;:27;13237:7;13218:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;13193:8;:66::i;:::-;13277:4;13270:11;;;13049:240;;;;:::o;15667:399::-;15770:1;15751:21;;:7;:21;;;;15743:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15821:49;15850:1;15854:7;15863:6;15821:20;:49::i;:::-;15899:6;15883:12;;:22;;;;;;;:::i;:::-;;;;;;;;15938:6;15916:9;:18;15926:7;15916:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;15981:7;15960:37;;15977:1;15960:37;;;15990:6;15960:37;;;;;;:::i;:::-;;;;;;;;16010:48;16038:1;16042:7;16051:6;16010:19;:48::i;:::-;15667:399;;:::o;20597:91::-;20653:27;20659:12;:10;:12::i;:::-;20673:6;20653:5;:27::i;:::-;20597:91;:::o;3237:191::-;3311:16;3330:6;;;;;;;;;;;3311:25;;3356:8;3347:6;;:17;;;;;;;;;;;;;;;;;;3411:8;3380:40;;3401:8;3380:40;;;;;;;;;;;;3300:128;3237:191;:::o;21007:164::-;21084:46;21100:7;21109:12;:10;:12::i;:::-;21123:6;21084:15;:46::i;:::-;21141:22;21147:7;21156:6;21141:5;:22::i;:::-;21007:164;;:::o;13792:438::-;13885:4;13902:13;13918:12;:10;:12::i;:::-;13902:28;;13941:24;13968:11;:18;13980:5;13968:18;;;;;;;;;;;;;;;:27;13987:7;13968:27;;;;;;;;;;;;;;;;13941:54;;14034:15;14014:16;:35;;14006:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14127:60;14136:5;14143:7;14171:15;14152:16;:34;14127:8;:60::i;:::-;14218:4;14211:11;;;;13792:438;;;;:::o;10837:193::-;10916:4;10933:13;10949:12;:10;:12::i;:::-;10933:28;;10972;10982:5;10989:2;10993:6;10972:9;:28::i;:::-;11018:4;11011:11;;;10837:193;;;;:::o;17428:380::-;17581:1;17564:19;;:5;:19;;;;17556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17662:1;17643:21;;:7;:21;;;;17635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17746:6;17716:11;:18;17728:5;17716:18;;;;;;;;;;;;;;;:27;17735:7;17716:27;;;;;;;;;;;;;;;:36;;;;17784:7;17768:32;;17777:5;17768:32;;;17793:6;17768:32;;;;;;:::i;:::-;;;;;;;;17428:380;;;:::o;18095:453::-;18230:24;18257:25;18267:5;18274:7;18257:9;:25::i;:::-;18230:52;;18317:17;18297:16;:37;18293:248;;18379:6;18359:16;:26;;18351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18463:51;18472:5;18479:7;18507:6;18488:16;:25;18463:8;:51::i;:::-;18293:248;18219:329;18095:453;;;:::o;14709:671::-;14856:1;14840:18;;:4;:18;;;;14832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14933:1;14919:16;;:2;:16;;;;14911:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14988:38;15009:4;15015:2;15019:6;14988:20;:38::i;:::-;15039:19;15061:9;:15;15071:4;15061:15;;;;;;;;;;;;;;;;15039:37;;15110:6;15095:11;:21;;15087:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15227:6;15213:11;:20;15195:9;:15;15205:4;15195:15;;;;;;;;;;;;;;;:38;;;;15272:6;15255:9;:13;15265:2;15255:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15311:2;15296:26;;15305:4;15296:26;;;15315:6;15296:26;;;;;;:::i;:::-;;;;;;;;15335:37;15355:4;15361:2;15365:6;15335:19;:37::i;:::-;14821:559;14709:671;;;:::o;19148:125::-;;;;:::o;19877:124::-;;;;:::o;16399:591::-;16502:1;16483:21;;:7;:21;;;;16475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16555:49;16576:7;16593:1;16597:6;16555:20;:49::i;:::-;16617:22;16642:9;:18;16652:7;16642:18;;;;;;;;;;;;;;;;16617:43;;16697:6;16679:14;:24;;16671:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16816:6;16799:14;:23;16778:9;:18;16788:7;16778:18;;;;;;;;;;;;;;;:44;;;;16860:6;16844:12;;:22;;;;;;;:::i;:::-;;;;;;;;16910:1;16884:37;;16893:7;16884:37;;;16914:6;16884:37;;;;;;:::i;:::-;;;;;;;;16934:48;16954:7;16971:1;16975:6;16934:19;:48::i;:::-;16464:526;16399:591;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;914:370::-;985:5;1034:3;1027:4;1019:6;1015:17;1011:27;1001:122;;1042:79;;:::i;:::-;1001:122;1159:6;1146:20;1184:94;1274:3;1266:6;1259:4;1251:6;1247:17;1184:94;:::i;:::-;1175:103;;991:293;914:370;;;;:::o;1290:139::-;1336:5;1374:6;1361:20;1352:29;;1390:33;1417:5;1390:33;:::i;:::-;1290:139;;;;:::o;1435:329::-;1494:6;1543:2;1531:9;1522:7;1518:23;1514:32;1511:119;;;1549:79;;:::i;:::-;1511:119;1669:1;1694:53;1739:7;1730:6;1719:9;1715:22;1694:53;:::i;:::-;1684:63;;1640:117;1435:329;;;;:::o;1770:474::-;1838:6;1846;1895:2;1883:9;1874:7;1870:23;1866:32;1863:119;;;1901:79;;:::i;:::-;1863:119;2021:1;2046:53;2091:7;2082:6;2071:9;2067:22;2046:53;:::i;:::-;2036:63;;1992:117;2148:2;2174:53;2219:7;2210:6;2199:9;2195:22;2174:53;:::i;:::-;2164:63;;2119:118;1770:474;;;;;:::o;2250:619::-;2327:6;2335;2343;2392:2;2380:9;2371:7;2367:23;2363:32;2360:119;;;2398:79;;:::i;:::-;2360:119;2518:1;2543:53;2588:7;2579:6;2568:9;2564:22;2543:53;:::i;:::-;2533:63;;2489:117;2645:2;2671:53;2716:7;2707:6;2696:9;2692:22;2671:53;:::i;:::-;2661:63;;2616:118;2773:2;2799:53;2844:7;2835:6;2824:9;2820:22;2799:53;:::i;:::-;2789:63;;2744:118;2250:619;;;;;:::o;2875:474::-;2943:6;2951;3000:2;2988:9;2979:7;2975:23;2971:32;2968:119;;;3006:79;;:::i;:::-;2968:119;3126:1;3151:53;3196:7;3187:6;3176:9;3172:22;3151:53;:::i;:::-;3141:63;;3097:117;3253:2;3279:53;3324:7;3315:6;3304:9;3300:22;3279:53;:::i;:::-;3269:63;;3224:118;2875:474;;;;;:::o;3355:539::-;3439:6;3488:2;3476:9;3467:7;3463:23;3459:32;3456:119;;;3494:79;;:::i;:::-;3456:119;3642:1;3631:9;3627:17;3614:31;3672:18;3664:6;3661:30;3658:117;;;3694:79;;:::i;:::-;3658:117;3799:78;3869:7;3860:6;3849:9;3845:22;3799:78;:::i;:::-;3789:88;;3585:302;3355:539;;;;:::o;3900:329::-;3959:6;4008:2;3996:9;3987:7;3983:23;3979:32;3976:119;;;4014:79;;:::i;:::-;3976:119;4134:1;4159:53;4204:7;4195:6;4184:9;4180:22;4159:53;:::i;:::-;4149:63;;4105:117;3900:329;;;;:::o;4235:179::-;4304:10;4325:46;4367:3;4359:6;4325:46;:::i;:::-;4403:4;4398:3;4394:14;4380:28;;4235:179;;;;:::o;4420:108::-;4497:24;4515:5;4497:24;:::i;:::-;4492:3;4485:37;4420:108;;:::o;4534:118::-;4621:24;4639:5;4621:24;:::i;:::-;4616:3;4609:37;4534:118;;:::o;4688:732::-;4807:3;4836:54;4884:5;4836:54;:::i;:::-;4906:86;4985:6;4980:3;4906:86;:::i;:::-;4899:93;;5016:56;5066:5;5016:56;:::i;:::-;5095:7;5126:1;5111:284;5136:6;5133:1;5130:13;5111:284;;;5212:6;5206:13;5239:63;5298:3;5283:13;5239:63;:::i;:::-;5232:70;;5325:60;5378:6;5325:60;:::i;:::-;5315:70;;5171:224;5158:1;5155;5151:9;5146:14;;5111:284;;;5115:14;5411:3;5404:10;;4812:608;;;4688:732;;;;:::o;5426:109::-;5507:21;5522:5;5507:21;:::i;:::-;5502:3;5495:34;5426:109;;:::o;5541:364::-;5629:3;5657:39;5690:5;5657:39;:::i;:::-;5712:71;5776:6;5771:3;5712:71;:::i;:::-;5705:78;;5792:52;5837:6;5832:3;5825:4;5818:5;5814:16;5792:52;:::i;:::-;5869:29;5891:6;5869:29;:::i;:::-;5864:3;5860:39;5853:46;;5633:272;5541:364;;;;:::o;5911:366::-;6053:3;6074:67;6138:2;6133:3;6074:67;:::i;:::-;6067:74;;6150:93;6239:3;6150:93;:::i;:::-;6268:2;6263:3;6259:12;6252:19;;5911:366;;;:::o;6283:::-;6425:3;6446:67;6510:2;6505:3;6446:67;:::i;:::-;6439:74;;6522:93;6611:3;6522:93;:::i;:::-;6640:2;6635:3;6631:12;6624:19;;6283:366;;;:::o;6655:::-;6797:3;6818:67;6882:2;6877:3;6818:67;:::i;:::-;6811:74;;6894:93;6983:3;6894:93;:::i;:::-;7012:2;7007:3;7003:12;6996:19;;6655:366;;;:::o;7027:::-;7169:3;7190:67;7254:2;7249:3;7190:67;:::i;:::-;7183:74;;7266:93;7355:3;7266:93;:::i;:::-;7384:2;7379:3;7375:12;7368:19;;7027:366;;;:::o;7399:::-;7541:3;7562:67;7626:2;7621:3;7562:67;:::i;:::-;7555:74;;7638:93;7727:3;7638:93;:::i;:::-;7756:2;7751:3;7747:12;7740:19;;7399:366;;;:::o;7771:::-;7913:3;7934:67;7998:2;7993:3;7934:67;:::i;:::-;7927:74;;8010:93;8099:3;8010:93;:::i;:::-;8128:2;8123:3;8119:12;8112:19;;7771:366;;;:::o;8143:::-;8285:3;8306:67;8370:2;8365:3;8306:67;:::i;:::-;8299:74;;8382:93;8471:3;8382:93;:::i;:::-;8500:2;8495:3;8491:12;8484:19;;8143:366;;;:::o;8515:::-;8657:3;8678:67;8742:2;8737:3;8678:67;:::i;:::-;8671:74;;8754:93;8843:3;8754:93;:::i;:::-;8872:2;8867:3;8863:12;8856:19;;8515:366;;;:::o;8887:::-;9029:3;9050:67;9114:2;9109:3;9050:67;:::i;:::-;9043:74;;9126:93;9215:3;9126:93;:::i;:::-;9244:2;9239:3;9235:12;9228:19;;8887:366;;;:::o;9259:::-;9401:3;9422:67;9486:2;9481:3;9422:67;:::i;:::-;9415:74;;9498:93;9587:3;9498:93;:::i;:::-;9616:2;9611:3;9607:12;9600:19;;9259:366;;;:::o;9631:::-;9773:3;9794:67;9858:2;9853:3;9794:67;:::i;:::-;9787:74;;9870:93;9959:3;9870:93;:::i;:::-;9988:2;9983:3;9979:12;9972:19;;9631:366;;;:::o;10003:::-;10145:3;10166:67;10230:2;10225:3;10166:67;:::i;:::-;10159:74;;10242:93;10331:3;10242:93;:::i;:::-;10360:2;10355:3;10351:12;10344:19;;10003:366;;;:::o;10375:::-;10517:3;10538:67;10602:2;10597:3;10538:67;:::i;:::-;10531:74;;10614:93;10703:3;10614:93;:::i;:::-;10732:2;10727:3;10723:12;10716:19;;10375:366;;;:::o;10747:::-;10889:3;10910:67;10974:2;10969:3;10910:67;:::i;:::-;10903:74;;10986:93;11075:3;10986:93;:::i;:::-;11104:2;11099:3;11095:12;11088:19;;10747:366;;;:::o;11119:::-;11261:3;11282:67;11346:2;11341:3;11282:67;:::i;:::-;11275:74;;11358:93;11447:3;11358:93;:::i;:::-;11476:2;11471:3;11467:12;11460:19;;11119:366;;;:::o;11491:::-;11633:3;11654:67;11718:2;11713:3;11654:67;:::i;:::-;11647:74;;11730:93;11819:3;11730:93;:::i;:::-;11848:2;11843:3;11839:12;11832:19;;11491:366;;;:::o;11863:::-;12005:3;12026:67;12090:2;12085:3;12026:67;:::i;:::-;12019:74;;12102:93;12191:3;12102:93;:::i;:::-;12220:2;12215:3;12211:12;12204:19;;11863:366;;;:::o;12235:118::-;12322:24;12340:5;12322:24;:::i;:::-;12317:3;12310:37;12235:118;;:::o;12359:112::-;12442:22;12458:5;12442:22;:::i;:::-;12437:3;12430:35;12359:112;;:::o;12477:222::-;12570:4;12608:2;12597:9;12593:18;12585:26;;12621:71;12689:1;12678:9;12674:17;12665:6;12621:71;:::i;:::-;12477:222;;;;:::o;12705:373::-;12848:4;12886:2;12875:9;12871:18;12863:26;;12935:9;12929:4;12925:20;12921:1;12910:9;12906:17;12899:47;12963:108;13066:4;13057:6;12963:108;:::i;:::-;12955:116;;12705:373;;;;:::o;13084:210::-;13171:4;13209:2;13198:9;13194:18;13186:26;;13222:65;13284:1;13273:9;13269:17;13260:6;13222:65;:::i;:::-;13084:210;;;;:::o;13300:313::-;13413:4;13451:2;13440:9;13436:18;13428:26;;13500:9;13494:4;13490:20;13486:1;13475:9;13471:17;13464:47;13528:78;13601:4;13592:6;13528:78;:::i;:::-;13520:86;;13300:313;;;;:::o;13619:419::-;13785:4;13823:2;13812:9;13808:18;13800:26;;13872:9;13866:4;13862:20;13858:1;13847:9;13843:17;13836:47;13900:131;14026:4;13900:131;:::i;:::-;13892:139;;13619:419;;;:::o;14044:::-;14210:4;14248:2;14237:9;14233:18;14225:26;;14297:9;14291:4;14287:20;14283:1;14272:9;14268:17;14261:47;14325:131;14451:4;14325:131;:::i;:::-;14317:139;;14044:419;;;:::o;14469:::-;14635:4;14673:2;14662:9;14658:18;14650:26;;14722:9;14716:4;14712:20;14708:1;14697:9;14693:17;14686:47;14750:131;14876:4;14750:131;:::i;:::-;14742:139;;14469:419;;;:::o;14894:::-;15060:4;15098:2;15087:9;15083:18;15075:26;;15147:9;15141:4;15137:20;15133:1;15122:9;15118:17;15111:47;15175:131;15301:4;15175:131;:::i;:::-;15167:139;;14894:419;;;:::o;15319:::-;15485:4;15523:2;15512:9;15508:18;15500:26;;15572:9;15566:4;15562:20;15558:1;15547:9;15543:17;15536:47;15600:131;15726:4;15600:131;:::i;:::-;15592:139;;15319:419;;;:::o;15744:::-;15910:4;15948:2;15937:9;15933:18;15925:26;;15997:9;15991:4;15987:20;15983:1;15972:9;15968:17;15961:47;16025:131;16151:4;16025:131;:::i;:::-;16017:139;;15744:419;;;:::o;16169:::-;16335:4;16373:2;16362:9;16358:18;16350:26;;16422:9;16416:4;16412:20;16408:1;16397:9;16393:17;16386:47;16450:131;16576:4;16450:131;:::i;:::-;16442:139;;16169:419;;;:::o;16594:::-;16760:4;16798:2;16787:9;16783:18;16775:26;;16847:9;16841:4;16837:20;16833:1;16822:9;16818:17;16811:47;16875:131;17001:4;16875:131;:::i;:::-;16867:139;;16594:419;;;:::o;17019:::-;17185:4;17223:2;17212:9;17208:18;17200:26;;17272:9;17266:4;17262:20;17258:1;17247:9;17243:17;17236:47;17300:131;17426:4;17300:131;:::i;:::-;17292:139;;17019:419;;;:::o;17444:::-;17610:4;17648:2;17637:9;17633:18;17625:26;;17697:9;17691:4;17687:20;17683:1;17672:9;17668:17;17661:47;17725:131;17851:4;17725:131;:::i;:::-;17717:139;;17444:419;;;:::o;17869:::-;18035:4;18073:2;18062:9;18058:18;18050:26;;18122:9;18116:4;18112:20;18108:1;18097:9;18093:17;18086:47;18150:131;18276:4;18150:131;:::i;:::-;18142:139;;17869:419;;;:::o;18294:::-;18460:4;18498:2;18487:9;18483:18;18475:26;;18547:9;18541:4;18537:20;18533:1;18522:9;18518:17;18511:47;18575:131;18701:4;18575:131;:::i;:::-;18567:139;;18294:419;;;:::o;18719:::-;18885:4;18923:2;18912:9;18908:18;18900:26;;18972:9;18966:4;18962:20;18958:1;18947:9;18943:17;18936:47;19000:131;19126:4;19000:131;:::i;:::-;18992:139;;18719:419;;;:::o;19144:::-;19310:4;19348:2;19337:9;19333:18;19325:26;;19397:9;19391:4;19387:20;19383:1;19372:9;19368:17;19361:47;19425:131;19551:4;19425:131;:::i;:::-;19417:139;;19144:419;;;:::o;19569:::-;19735:4;19773:2;19762:9;19758:18;19750:26;;19822:9;19816:4;19812:20;19808:1;19797:9;19793:17;19786:47;19850:131;19976:4;19850:131;:::i;:::-;19842:139;;19569:419;;;:::o;19994:::-;20160:4;20198:2;20187:9;20183:18;20175:26;;20247:9;20241:4;20237:20;20233:1;20222:9;20218:17;20211:47;20275:131;20401:4;20275:131;:::i;:::-;20267:139;;19994:419;;;:::o;20419:::-;20585:4;20623:2;20612:9;20608:18;20600:26;;20672:9;20666:4;20662:20;20658:1;20647:9;20643:17;20636:47;20700:131;20826:4;20700:131;:::i;:::-;20692:139;;20419:419;;;:::o;20844:222::-;20937:4;20975:2;20964:9;20960:18;20952:26;;20988:71;21056:1;21045:9;21041:17;21032:6;20988:71;:::i;:::-;20844:222;;;;:::o;21072:214::-;21161:4;21199:2;21188:9;21184:18;21176:26;;21212:67;21276:1;21265:9;21261:17;21252:6;21212:67;:::i;:::-;21072:214;;;;:::o;21292:129::-;21326:6;21353:20;;:::i;:::-;21343:30;;21382:33;21410:4;21402:6;21382:33;:::i;:::-;21292:129;;;:::o;21427:75::-;21460:6;21493:2;21487:9;21477:19;;21427:75;:::o;21508:311::-;21585:4;21675:18;21667:6;21664:30;21661:56;;;21697:18;;:::i;:::-;21661:56;21747:4;21739:6;21735:17;21727:25;;21807:4;21801;21797:15;21789:23;;21508:311;;;:::o;21825:132::-;21892:4;21915:3;21907:11;;21945:4;21940:3;21936:14;21928:22;;21825:132;;;:::o;21963:114::-;22030:6;22064:5;22058:12;22048:22;;21963:114;;;:::o;22083:99::-;22135:6;22169:5;22163:12;22153:22;;22083:99;;;:::o;22188:113::-;22258:4;22290;22285:3;22281:14;22273:22;;22188:113;;;:::o;22307:184::-;22406:11;22440:6;22435:3;22428:19;22480:4;22475:3;22471:14;22456:29;;22307:184;;;;:::o;22497:169::-;22581:11;22615:6;22610:3;22603:19;22655:4;22650:3;22646:14;22631:29;;22497:169;;;;:::o;22672:305::-;22712:3;22731:20;22749:1;22731:20;:::i;:::-;22726:25;;22765:20;22783:1;22765:20;:::i;:::-;22760:25;;22919:1;22851:66;22847:74;22844:1;22841:81;22838:107;;;22925:18;;:::i;:::-;22838:107;22969:1;22966;22962:9;22955:16;;22672:305;;;;:::o;22983:191::-;23023:4;23043:20;23061:1;23043:20;:::i;:::-;23038:25;;23077:20;23095:1;23077:20;:::i;:::-;23072:25;;23116:1;23113;23110:8;23107:34;;;23121:18;;:::i;:::-;23107:34;23166:1;23163;23159:9;23151:17;;22983:191;;;;:::o;23180:96::-;23217:7;23246:24;23264:5;23246:24;:::i;:::-;23235:35;;23180:96;;;:::o;23282:90::-;23316:7;23359:5;23352:13;23345:21;23334:32;;23282:90;;;:::o;23378:126::-;23415:7;23455:42;23448:5;23444:54;23433:65;;23378:126;;;:::o;23510:77::-;23547:7;23576:5;23565:16;;23510:77;;;:::o;23593:86::-;23628:7;23668:4;23661:5;23657:16;23646:27;;23593:86;;;:::o;23685:307::-;23753:1;23763:113;23777:6;23774:1;23771:13;23763:113;;;23862:1;23857:3;23853:11;23847:18;23843:1;23838:3;23834:11;23827:39;23799:2;23796:1;23792:10;23787:15;;23763:113;;;23894:6;23891:1;23888:13;23885:101;;;23974:1;23965:6;23960:3;23956:16;23949:27;23885:101;23734:258;23685:307;;;:::o;23998:320::-;24042:6;24079:1;24073:4;24069:12;24059:22;;24126:1;24120:4;24116:12;24147:18;24137:81;;24203:4;24195:6;24191:17;24181:27;;24137:81;24265:2;24257:6;24254:14;24234:18;24231:38;24228:84;;;24284:18;;:::i;:::-;24228:84;24049:269;23998:320;;;:::o;24324:281::-;24407:27;24429:4;24407:27;:::i;:::-;24399:6;24395:40;24537:6;24525:10;24522:22;24501:18;24489:10;24486:34;24483:62;24480:88;;;24548:18;;:::i;:::-;24480:88;24588:10;24584:2;24577:22;24367:238;24324:281;;:::o;24611:233::-;24650:3;24673:24;24691:5;24673:24;:::i;:::-;24664:33;;24719:66;24712:5;24709:77;24706:103;;;24789:18;;:::i;:::-;24706:103;24836:1;24829:5;24825:13;24818:20;;24611:233;;;:::o;24850:180::-;24898:77;24895:1;24888:88;24995:4;24992:1;24985:15;25019:4;25016:1;25009:15;25036:180;25084:77;25081:1;25074:88;25181:4;25178:1;25171:15;25205:4;25202:1;25195:15;25222:180;25270:77;25267:1;25260:88;25367:4;25364:1;25357:15;25391:4;25388:1;25381:15;25408:180;25456:77;25453:1;25446:88;25553:4;25550:1;25543:15;25577:4;25574:1;25567:15;25594:117;25703:1;25700;25693:12;25717:117;25826:1;25823;25816:12;25840:117;25949:1;25946;25939:12;25963:117;26072:1;26069;26062:12;26086:102;26127:6;26178:2;26174:7;26169:2;26162:5;26158:14;26154:28;26144:38;;26086:102;;;:::o;26194:222::-;26334:34;26330:1;26322:6;26318:14;26311:58;26403:5;26398:2;26390:6;26386:15;26379:30;26194:222;:::o;26422:221::-;26562:34;26558:1;26550:6;26546:14;26539:58;26631:4;26626:2;26618:6;26614:15;26607:29;26422:221;:::o;26649:172::-;26789:24;26785:1;26777:6;26773:14;26766:48;26649:172;:::o;26827:225::-;26967:34;26963:1;26955:6;26951:14;26944:58;27036:8;27031:2;27023:6;27019:15;27012:33;26827:225;:::o;27058:221::-;27198:34;27194:1;27186:6;27182:14;27175:58;27267:4;27262:2;27254:6;27250:15;27243:29;27058:221;:::o;27285:179::-;27425:31;27421:1;27413:6;27409:14;27402:55;27285:179;:::o;27470:225::-;27610:34;27606:1;27598:6;27594:14;27587:58;27679:8;27674:2;27666:6;27662:15;27655:33;27470:225;:::o;27701:173::-;27841:25;27837:1;27829:6;27825:14;27818:49;27701:173;:::o;27880:171::-;28020:23;28016:1;28008:6;28004:14;27997:47;27880:171;:::o;28057:182::-;28197:34;28193:1;28185:6;28181:14;28174:58;28057:182;:::o;28245:220::-;28385:34;28381:1;28373:6;28369:14;28362:58;28454:3;28449:2;28441:6;28437:15;28430:28;28245:220;:::o;28471:224::-;28611:34;28607:1;28599:6;28595:14;28588:58;28680:7;28675:2;28667:6;28663:15;28656:32;28471:224;:::o;28701:223::-;28841:34;28837:1;28829:6;28825:14;28818:58;28910:6;28905:2;28897:6;28893:15;28886:31;28701:223;:::o;28930:176::-;29070:28;29066:1;29058:6;29054:14;29047:52;28930:176;:::o;29112:171::-;29252:23;29248:1;29240:6;29236:14;29229:47;29112:171;:::o;29289:224::-;29429:34;29425:1;29417:6;29413:14;29406:58;29498:7;29493:2;29485:6;29481:15;29474:32;29289:224;:::o;29519:181::-;29659:33;29655:1;29647:6;29643:14;29636:57;29519:181;:::o;29706:122::-;29779:24;29797:5;29779:24;:::i;:::-;29772:5;29769:35;29759:63;;29818:1;29815;29808:12;29759:63;29706:122;:::o;29834:::-;29907:24;29925:5;29907:24;:::i;:::-;29900:5;29897:35;29887:63;;29946:1;29943;29936:12;29887:63;29834:122;:::o

Swarm Source

ipfs://a5741b4d3a3ef3a999e160216d1f950dea74a52ef0075d1925a24c2c6069091c
Loading