Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PawStar
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-11-09
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @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);
}
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
/**
* @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);
}
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
* @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;
}
}
/**
* @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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* 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}.
*
* 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 default value returned by this function, unless
* it's 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, allowance(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 = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* 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;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_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;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_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;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_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 Updates `owner` s allowance for `spender` based on spent `amount`.
*
* 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 {}
}
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
/**
* @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 Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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);
}
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function burn(
address to
) external returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(
uint256 amountIn,
address[] calldata path
) external view returns (uint256[] memory amounts);
function getAmountsIn(
uint256 amountOut,
address[] calldata path
) external view returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
//------------------------------------
// ERRORS
//------------------------------------
error PAWS__InvalidTransferFee();
error PAWS__InvalidBuyFees();
error PAWS__InvalidSellFees();
error PAWS__UnableToTransfer();
error PAWS__ReentrancyBlock();
//------------------------------------
// PawStar Token
//------------------------------------
contract PawStar is ERC20, Ownable {
//------------------------------------
// State Variables
//------------------------------------
mapping(address => bool) public isExcludedFromFee;
IUniswapV2Pair public immutable mainPair;
IUniswapV2Router02 public immutable router;
address public immutable WETH;
address payable public immutable marketingWallet;
address payable public charityWallet;
address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
uint128 public constant MAX_SUPPLY = 1_000_000_000_000 ether;
uint private constant PERCENTAGE = 1000;
uint8 public constant buyMarketing = 30; //3%
uint8 public buyCharity = 10;
uint8 public buyBurning = 5;
uint8 public buyLp = 10;
uint8 public constant sellMarketing = 30; //3%
uint8 public sellCharity = 10;
uint8 public sellBurning = 5;
uint8 public sellLp = 10;
uint8 public totalBuyFee = buyMarketing + buyCharity + buyBurning + buyLp;
uint8 public totalSellFee = sellMarketing + sellCharity + sellBurning + sellLp;
uint8 public walletToWallet = 20; // 2%
uint8 private swapping = 1;
uint128 public totalTokensMarketing;
uint128 public totalTokensCharity;
uint128 public totalTokensLp;
uint128 public threshold = MAX_SUPPLY / 10_000; // 0.01% of total supply
//------------------------------------
// EVENTS
//------------------------------------
event SetExclusionStatus(address indexed user, bool status);
event SetCharityStatus(address indexed chyAddress, bool status);
event SetBuyFees(
uint8 totalFee,
uint8 charityFee,
uint8 burnFee,
uint8 lpFee
);
event SetSellFees(
uint8 totalFee,
uint8 charityFee,
uint8 burnFee,
uint8 lpFee
);
event SetThreshold(uint128 _threshold);
event SetTransferFee(uint transferFee);
event FailTransfer(address indexed user, uint amount);
event SetCharityWallet(address indexed _prev, address indexed _new);
//------------------------------------
// Modifiers
//------------------------------------
modifier nonReentrant() {
if (swapping == 2) revert PAWS__ReentrancyBlock();
swapping = 2;
_;
swapping = 1;
}
//------------------------------------
// CONSTRUCTOR
//------------------------------------
constructor(address _mkt, address _chy, address _newOwner) ERC20("PawStars", "PAWS") {
transferOwnership(_newOwner);
_mint(owner(), MAX_SUPPLY);
marketingWallet = payable(_mkt);
charityWallet = payable(_chy);
router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
WETH = router.WETH();
address mp = IUniswapV2Factory(router.factory()).createPair(
address(this),
WETH
);
mainPair = IUniswapV2Pair(mp);
isExcludedFromFee[owner()] = true;
isExcludedFromFee[address(this)] = true;
_approve(address(this), address(router), type(uint256).max);
}
//------------------------------------
// External / Public Functions
//------------------------------------
receive() external payable {}
function swapAndDistributeBNB() public nonReentrant {
// get the LP balance and swap half for BNB.
uint bnbBalance = address(this).balance;
uint lpBalance = totalTokensLp;
uint amountToSwap = lpBalance / 2;
lpBalance -= amountToSwap;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
// Liquify lp allocated tokens
if (lpBalance > 0) {
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountToSwap,
0,
path,
address(this),
block.timestamp
);
// add liquidity with the bnb and lp
amountToSwap = address(this).balance - bnbBalance;
router.addLiquidityETH{value: amountToSwap}(
address(this),
lpBalance,
0,
0,
DEAD,
block.timestamp
);
totalTokensLp = 0;
}
bnbBalance = balanceOf(address(this));
amountToSwap = totalTokensCharity + totalTokensMarketing;
if (amountToSwap > 0) {
// swap rest of tokens for BNB entirely
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
bnbBalance,
0,
path,
address(this),
block.timestamp
);
// send BNB to marketing and charity wallets
bnbBalance = address(this).balance;
uint marketingAmount = (bnbBalance * totalTokensMarketing) /
amountToSwap;
uint charityAmount = bnbBalance - marketingAmount;
bool succ;
if (marketingAmount > 0) {
(succ, ) = marketingWallet.call{value: marketingAmount}("");
if (!succ) emit FailTransfer(marketingWallet, marketingAmount);
}
if (charityAmount > 0) {
(succ, ) = charityWallet.call{value: charityAmount}("");
if (!succ) emit FailTransfer(charityWallet, charityAmount);
}
totalTokensMarketing = 0;
totalTokensCharity = 0;
}
}
//------------------------------------
// Internal/Private Functions
//------------------------------------
function _transfer(
address from,
address to,
uint amount
) internal override {
bool isBuy = address(mainPair) == from;
bool isSell = address(mainPair) == to;
bool canSwap = balanceOf(address(this)) > threshold;
if (
swapping == 1 &&
canSwap &&
!isBuy &&
!isExcludedFromFee[from] &&
!isExcludedFromFee[to]
) {
swapAndDistributeBNB();
}
if (!isExcludedFromFee[from] && !isExcludedFromFee[to]) {
uint fee;
if (isBuy && totalBuyFee > 0) {
fee = (amount * totalBuyFee) / PERCENTAGE;
amount -= fee;
super._transfer(from, address(this), fee);
distributeBuy(fee);
} else if (isSell && totalSellFee > 0) {
fee = (amount * totalSellFee) / PERCENTAGE;
amount -= fee;
super._transfer(from, address(this), fee);
distributeSell(fee);
} else {
uint burnAmount = (amount * walletToWallet) / PERCENTAGE;
amount -= burnAmount;
if (burnAmount > 0) {
super._transfer(from, DEAD, burnAmount);
}
}
}
super._transfer(from, to, amount);
}
function distributeBuy(uint amount) internal {
uint fee = (amount * buyMarketing) / totalBuyFee;
uint accFee = fee;
totalTokensMarketing += uint128(fee);
fee = (amount * buyCharity) / totalBuyFee;
accFee += fee;
totalTokensCharity += uint128(fee);
fee = (amount * buyLp) / totalBuyFee;
accFee += fee;
totalTokensLp += uint128(fee);
amount -= accFee;
// if there are tokens to burn, do it
if (amount > 0) {
super._transfer(address(this), DEAD, amount);
}
}
function distributeSell(uint amount) internal {
uint fee = (amount * sellMarketing) / totalSellFee;
uint accFee = fee;
totalTokensMarketing += uint128(fee);
fee = (amount * sellCharity) / totalSellFee;
accFee += fee;
totalTokensCharity += uint128(fee);
fee = (amount * sellLp) / totalSellFee;
accFee += fee;
totalTokensLp += uint128(fee);
amount -= accFee;
// if there are tokens to burn, do it
if (amount > 0) {
super._transfer(address(this), DEAD, amount);
}
}
function setBuyFees(
uint8 _chyFee,
uint8 _lpFee,
uint8 _burnFee
) external onlyOwner {
uint8 totalFee = _chyFee + buyMarketing + _lpFee + _burnFee;
if (totalFee > PERCENTAGE / 4) revert PAWS__InvalidBuyFees();
buyBurning = _burnFee;
buyCharity = _chyFee;
buyLp = _lpFee;
totalBuyFee = totalFee;
emit SetBuyFees(totalFee, _chyFee, _burnFee, _lpFee);
}
function setSellFees(
uint8 _chyFee,
uint8 _lpFee,
uint8 _burnFee
) external onlyOwner {
uint8 totalFee = _chyFee + sellMarketing + _lpFee + _burnFee;
if (totalFee > PERCENTAGE / 4) revert PAWS__InvalidSellFees();
sellBurning = _burnFee;
sellCharity = _chyFee;
sellLp = _lpFee;
totalSellFee = totalFee;
emit SetSellFees(totalFee, _chyFee, _burnFee, _lpFee);
}
function setThreshold(
uint128 _threshold
) external onlyOwner {
threshold = _threshold;
emit SetThreshold(_threshold);
}
function setTransferFee(uint8 _transferFee) external onlyOwner {
if (_transferFee > PERCENTAGE / 10) revert PAWS__InvalidTransferFee();
walletToWallet = _transferFee;
emit SetTransferFee(_transferFee);
}
function setExcludedStatus(address user, bool status) external onlyOwner {
require(isExcludedFromFee[user] != status, "The wallet already has that value!");
isExcludedFromFee[user] = status;
emit SetExclusionStatus(user, status);
}
function setCharityWallet(address payable _cty) external onlyOwner{
require(_cty != address(0), "setCharityWallet: ZERO");
emit SetCharityWallet(charityWallet, _cty);
charityWallet = _cty;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_mkt","type":"address"},{"internalType":"address","name":"_chy","type":"address"},{"internalType":"address","name":"_newOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"PAWS__InvalidBuyFees","type":"error"},{"inputs":[],"name":"PAWS__InvalidSellFees","type":"error"},{"inputs":[],"name":"PAWS__InvalidTransferFee","type":"error"},{"inputs":[],"name":"PAWS__ReentrancyBlock","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FailTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"charityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"lpFee","type":"uint8"}],"name":"SetBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chyAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetCharityStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_prev","type":"address"},{"indexed":true,"internalType":"address","name":"_new","type":"address"}],"name":"SetCharityWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetExclusionStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"charityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"lpFee","type":"uint8"}],"name":"SetSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"_threshold","type":"uint128"}],"name":"SetThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"SetTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurning","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCharity","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLp","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketing","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurning","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCharity","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLp","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketing","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_chyFee","type":"uint8"},{"internalType":"uint8","name":"_lpFee","type":"uint8"},{"internalType":"uint8","name":"_burnFee","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_cty","type":"address"}],"name":"setCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcludedStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_chyFee","type":"uint8"},{"internalType":"uint8","name":"_lpFee","type":"uint8"},{"internalType":"uint8","name":"_burnFee","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_threshold","type":"uint128"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_transferFee","type":"uint8"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndDistributeBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensCharity","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensLp","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensMarketing","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletToWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6101006040526007805465ffffffffffff60a01b19166505028505028560a11b179081905560ff600160b01b8204811691600160a81b81048216916200004f91600160a01b900416601e6200077a565b6200005b91906200077a565b6200006791906200077a565b6007805460ff60d01b1916600160d01b60ff938416021790819055600160c81b8104821691600160c01b8204811691620000ac91600160b81b90910416601e6200077a565b620000b891906200077a565b620000c491906200077a565b60078054600160e81b61ffff60d81b19909116600160d81b60ff949094169390930260ff60e01b191692909217600560e21b1760ff60e81b19169190911790556200011f6127106c0c9f2c9cd04674edea400000006200079c565b600980546001600160801b03928316600160801b0292169190911790553480156200014957600080fd5b5060405162002b6b38038062002b6b8339810160408190526200016c91620007ee565b60405180604001604052806008815260200167506177537461727360c01b815250604051806040016040528060048152602001635041575360e01b8152508160039081620001bb9190620008dc565b506004620001ca8282620008dc565b505050620001e7620001e16200043d60201b60201c565b62000441565b620001f28162000493565b6200021d620002096005546001600160a01b031690565b6c0c9f2c9cd04674edea4000000062000516565b6001600160a01b0383811660e052600780546001600160a01b031916918416919091179055737a250d5630b4cf539739df2c5dacb4c659f2488d60a0819052604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be9190620009a8565b6001600160a01b031660c0816001600160a01b031681525050600060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003409190620009a8565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801562000392573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b89190620009a8565b6001600160a01b0381166080529050600160066000620003e06005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530808252600690935220805490921660011790915560a051620004339190600019620005d9565b50505050620009e3565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200049d62000701565b6001600160a01b038116620005085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620005138162000441565b50565b6001600160a01b0382166200056e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004ff565b8060026000828254620005829190620009cd565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166200063d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004ff565b6001600160a01b038216620006a05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004ff565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146200075d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004ff565b565b505050565b634e487b7160e01b600052601160045260246000fd5b60ff818116838216019081111562000796576200079662000764565b92915050565b60006001600160801b0383811680620007c557634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b80516001600160a01b0381168114620007e957600080fd5b919050565b6000806000606084860312156200080457600080fd5b6200080f84620007d1565b92506200081f60208501620007d1565b91506200082f60408501620007d1565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200086357607f821691505b6020821081036200088457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075f57600081815260208120601f850160051c81016020861015620008b35750805b601f850160051c820191505b81811015620008d457828155600101620008bf565b505050505050565b81516001600160401b03811115620008f857620008f862000838565b62000910816200090984546200084e565b846200088a565b602080601f8311600181146200094857600084156200092f5750858301515b600019600386901b1c1916600185901b178555620008d4565b600085815260208120601f198616915b82811015620009795788860151825594840194600190910190840162000958565b5085821015620009985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009bb57600080fd5b620009c682620007d1565b9392505050565b8082018082111562000796576200079662000764565b60805160a05160c05160e05161211d62000a4e6000396000818161058401528181610e3f0152610ead0152600081816107020152610b7501526000818161085901528181610bdc01528181610c9b0152610d820152600081816105f90152611630015261211d6000f3fe60806040526004361061026b5760003560e01c80637b20876911610144578063ad5c4648116100b6578063d64fea9c1161007a578063d64fea9c146107a6578063dd62ed3e146107c7578063e22b62de146107e7578063f2fde38b14610807578063f6c998a314610827578063f887ea401461084757600080fd5b8063ad5c4648146106f0578063aebbce3314610724578063b03e4dd514610745578063b4812f7214610765578063cba6c7d61461078657600080fd5b80638da5cb5b116101085780638da5cb5b1461065c57806395d89b411461067a5780639d9241ec1461068f578063a457c2d7146106b0578063a8b9f94d14610512578063a9059cbb146106d057600080fd5b80637b208769146105a657806381e26381146105c657806385af30c5146105e757806387c6e6911461061b5780638c2c24d51461063c57600080fd5b806342cde4e8116101dd57806359b107b9116101a157806359b107b9146104d057806365e3941c146104f15780636b41ae0c1461051257806370a0823114610527578063715018a61461055d57806375f0a8741461057257600080fd5b806342cde4e81461041d5780634e943d57146104445780634ef4d0801461045957806350be7cdb146104805780635342acb4146104a057600080fd5b8063283c51681161022f578063283c51681461033b57806330563bd71461036e578063313ce5671461039057806332cb6b0c146103a457806339509351146103dd5780634087b80c146103fd57600080fd5b806303fd2a451461027757806306fdde03146102aa578063095ea7b3146102cc57806318160ddd146102fc57806323b872dd1461031b57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028d61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b657600080fd5b506102bf61087b565b6040516102a19190611d46565b3480156102d857600080fd5b506102ec6102e7366004611da9565b61090d565b60405190151581526020016102a1565b34801561030857600080fd5b506002545b6040519081526020016102a1565b34801561032757600080fd5b506102ec610336366004611dd5565b610927565b34801561034757600080fd5b5060075461035c90600160c01b900460ff1681565b60405160ff90911681526020016102a1565b34801561037a57600080fd5b5061038e610389366004611e16565b61094b565b005b34801561039c57600080fd5b50601261035c565b3480156103b057600080fd5b506103c56c0c9f2c9cd04674edea4000000081565b6040516001600160801b0390911681526020016102a1565b3480156103e957600080fd5b506102ec6103f8366004611da9565b610a03565b34801561040957600080fd5b5061038e610418366004611e50565b610a25565b34801561042957600080fd5b506009546103c590600160801b90046001600160801b031681565b34801561045057600080fd5b5061038e610ab2565b34801561046557600080fd5b506008546103c590600160801b90046001600160801b031681565b34801561048c57600080fd5b5061038e61049b366004611e6b565b610fd7565b3480156104ac57600080fd5b506102ec6104bb366004611e16565b60066020526000908152604090205460ff1681565b3480156104dc57600080fd5b5060075461035c90600160d01b900460ff1681565b3480156104fd57600080fd5b5060075461035c90600160c81b900460ff1681565b34801561051e57600080fd5b5061035c601e81565b34801561053357600080fd5b5061030d610542366004611e16565b6001600160a01b031660009081526020819052604090205490565b34801561056957600080fd5b5061038e6110e5565b34801561057e57600080fd5b5061028d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b257600080fd5b5060075461028d906001600160a01b031681565b3480156105d257600080fd5b5060075461035c90600160a81b900460ff1681565b3480156105f357600080fd5b5061028d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561062757600080fd5b5060075461035c90600160b81b900460ff1681565b34801561064857600080fd5b5061038e610657366004611eae565b6110f9565b34801561066857600080fd5b506005546001600160a01b031661028d565b34801561068657600080fd5b506102bf6111db565b34801561069b57600080fd5b5060075461035c90600160d81b900460ff1681565b3480156106bc57600080fd5b506102ec6106cb366004611da9565b6111ea565b3480156106dc57600080fd5b506102ec6106eb366004611da9565b611265565b3480156106fc57600080fd5b5061028d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073057600080fd5b5060075461035c90600160a01b900460ff1681565b34801561075157600080fd5b5061038e610760366004611eec565b611273565b34801561077157600080fd5b5060075461035c90600160e01b900460ff1681565b34801561079257600080fd5b506008546103c5906001600160801b031681565b3480156107b257600080fd5b5060075461035c90600160b01b900460ff1681565b3480156107d357600080fd5b5061030d6107e2366004611f15565b6112c9565b3480156107f357600080fd5b5061038e610802366004611e6b565b6112f4565b34801561081357600080fd5b5061038e610822366004611e16565b6113f6565b34801561083357600080fd5b506009546103c5906001600160801b031681565b34801561085357600080fd5b5061028d7f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461088a90611f43565b80601f01602080910402602001604051908101604052809291908181526020018280546108b690611f43565b80156109035780601f106108d857610100808354040283529160200191610903565b820191906000526020600020905b8154815290600101906020018083116108e657829003601f168201915b5050505050905090565b60003361091b81858561146f565b60019150505b92915050565b600033610935858285611593565b61094085858561160d565b506001949350505050565b61095361185a565b6001600160a01b0381166109a75760405162461bcd60e51b81526020600482015260166024820152757365744368617269747957616c6c65743a205a45524f60501b60448201526064015b60405180910390fd5b6007546040516001600160a01b038084169216907f4bbab2c7903c2ce19a641879a0d9eef91264b513aac38fbad32bdfc4a467e0cc90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60003361091b818585610a1683836112c9565b610a209190611f93565b61146f565b610a2d61185a565b610a3a600a6103e8611fa6565b8160ff161115610a5d57604051634396231960e11b815260040160405180910390fd5b6007805460ff60e01b1916600160e01b60ff8416908102919091179091556040519081527f7a85e8a0c3f3d4bafa6ac516212f769dfdb9bbf7c6f058d391aa03b059621243906020015b60405180910390a150565b600754600160e81b900460ff16600203610adf57604051637cd0459760e01b815260040160405180910390fd5b6007805460ff60e81b1916600160e91b17905560095447906001600160801b03166000610b0d600283611fa6565b9050610b198183611fc8565b60408051600280825260608201835292945060009290916020830190803683370190505090503081600081518110610b5357610b53611fdb565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110610ba757610ba7611fdb565b6001600160a01b03909216602092830291909101909101528215610d275760405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790610c1a908590600090869030904290600401611ff1565b600060405180830381600087803b158015610c3457600080fd5b505af1158015610c48573d6000803e3d6000fd5b505050508347610c589190611fc8565b60405163f305d71960e01b815230600482015260248101859052600060448201819052606482015261dead60848201524260a48201529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f305d71990849060c40160606040518083038185885af1158015610ce5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d0a9190612062565b5050600980546fffffffffffffffffffffffffffffffff19169055505b30600090815260208190526040902054600854909450610d5a906001600160801b0380821691600160801b900416612090565b6001600160801b031691508115610fbe5760405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790610dc0908790600090869030904290600401611ff1565b600060405180830381600087803b158015610dda57600080fd5b505af1158015610dee573d6000803e3d6000fd5b505060085447965060009250849150610e10906001600160801b0316876120b7565b610e1a9190611fa6565b90506000610e288287611fc8565b905060008215610f0f576040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908490600081818185875af1925050503d8060008114610e9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ea0565b606091505b50508091505080610f0f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f11e717e1448fb29602b166d1efdb1695d9c5e1160a8001f0a431532ca6d1544984604051610f0691815260200190565b60405180910390a25b8115610fb5576007546040516001600160a01b03909116908390600081818185875af1925050503d8060008114610f62576040519150601f19603f3d011682016040523d82523d6000602084013e610f67565b606091505b50508091505080610fb5576007546040518381526001600160a01b03909116907f11e717e1448fb29602b166d1efdb1695d9c5e1160a8001f0a431532ca6d154499060200160405180910390a25b50506000600855505b50506007805460ff60e81b1916600160e81b1790555050565b610fdf61185a565b60008183610fee601e876120ce565b610ff891906120ce565b61100291906120ce565b905061101160046103e8611fa6565b8160ff16111561103457604051639b6c75dd60e01b815260040160405180910390fd5b6007805461ffff60a01b1916600160a81b60ff85811691820260ff60a01b191692909217600160a01b8884169081029190911764ff000000ff60b01b1916600160b01b88851690810260ff60d01b191691909117600160d01b9487169485021790945560408051938452602084019190915282015260608101919091527fd7d0ea851e57a89302ff02384f1191c6a46f2164f7c6195648b50fe4e3de48ed906080015b60405180910390a150505050565b6110ed61185a565b6110f760006118b4565b565b61110161185a565b6001600160a01b03821660009081526006602052604090205481151560ff90911615150361117c5760405162461bcd60e51b815260206004820152602260248201527f5468652077616c6c657420616c72656164792068617320746861742076616c75604482015261652160f01b606482015260840161099e565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527f926aa5b668417cf93f5146a62276c847038f033b1ec9452fef4a3297036d4452910160405180910390a25050565b60606004805461088a90611f43565b600033816111f882866112c9565b9050838110156112585760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161099e565b610940828686840361146f565b60003361091b81858561160d565b61127b61185a565b600980546001600160801b03908116600160801b918416918202179091556040519081527fb9adf918e09b42b3fa12366dd5ed9d3a6779ff5019fc742497739fee7dfd1df290602001610aa7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112fc61185a565b6000818361130b601e876120ce565b61131591906120ce565b61131f91906120ce565b905061132e60046103e8611fa6565b8160ff16111561135157604051631148ffd960e11b815260040160405180910390fd5b6007805461ffff60b81b1916600160c01b60ff85811691820260ff60b81b191692909217600160b81b8884169081029190911762ff00ff60c81b1916600160c81b88851690810260ff60d81b191691909117600160d81b9487169485021790945560408051938452602084019190915282015260608101919091527f570b3433de94dd089022d45a581327f2030010b256cdb65ca99693cec5eeb7f5906080016110d7565b6113fe61185a565b6001600160a01b0381166114635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099e565b61146c816118b4565b50565b6001600160a01b0383166114d15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099e565b6001600160a01b0382166115325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061159f84846112c9565b9050600019811461160757818110156115fa5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161099e565b611607848484840361146f565b50505050565b600954306000908152602081905260409020546007546001600160a01b038681167f00000000000000000000000000000000000000000000000000000000000000008216908114949187161492600160801b9091046001600160801b03161090600160e81b900460ff1660011480156116835750805b801561168d575082155b80156116b257506001600160a01b03861660009081526006602052604090205460ff16155b80156116d757506001600160a01b03851660009081526006602052604090205460ff16155b156116e4576116e4610ab2565b6001600160a01b03861660009081526006602052604090205460ff1615801561172657506001600160a01b03851660009081526006602052604090205460ff16155b156118475760008380156117455750600754600160d01b900460ff1615155b15611796576007546103e89061176590600160d01b900460ff16876120b7565b61176f9190611fa6565b905061177b8186611fc8565b9450611788873083611906565b61179181611aaa565b611845565b8280156117ae5750600754600160d81b900460ff1615155b156117fa576007546103e8906117ce90600160d81b900460ff16876120b7565b6117d89190611fa6565b90506117e48186611fc8565b94506117f1873083611906565b61179181611c38565b6007546000906103e89061181890600160e01b900460ff16886120b7565b6118229190611fa6565b905061182e8187611fc8565b95508015611843576118438861dead83611906565b505b505b611852868686611906565b505050505050565b6005546001600160a01b031633146110f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831661196a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161099e565b6001600160a01b0382166119cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161099e565b6001600160a01b03831660009081526020819052604090205481811015611a445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161099e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611607565b600754600090600160d01b900460ff16611ac5601e846120b7565b611acf9190611fa6565b600880549192508291829190600090611af29084906001600160801b0316612090565b82546001600160801b039182166101009390930a92830291909202199091161790555060075460ff600160d01b8204811691611b3791600160a01b90910416856120b7565b611b419190611fa6565b9150611b4d8282611f93565b905081600860108282829054906101000a90046001600160801b0316611b739190612090565b82546001600160801b039182166101009390930a92830291909202199091161790555060075460ff600160d01b8204811691611bb891600160b01b90910416856120b7565b611bc29190611fa6565b9150611bce8282611f93565b600980549192508391600090611bee9084906001600160801b0316612090565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508083611c1e9190611fc8565b92508215611c3357611c333061dead85611906565b505050565b600754600090600160d81b900460ff16611c53601e846120b7565b611c5d9190611fa6565b600880549192508291829190600090611c809084906001600160801b0316612090565b82546001600160801b039182166101009390930a92830291909202199091161790555060075460ff600160d81b8204811691611cc591600160b81b90910416856120b7565b611ccf9190611fa6565b9150611cdb8282611f93565b905081600860108282829054906101000a90046001600160801b0316611d019190612090565b82546001600160801b039182166101009390930a92830291909202199091161790555060075460ff600160d81b8204811691611bb891600160c81b90910416856120b7565b600060208083528351808285015260005b81811015611d7357858101830151858201604001528201611d57565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461146c57600080fd5b60008060408385031215611dbc57600080fd5b8235611dc781611d94565b946020939093013593505050565b600080600060608486031215611dea57600080fd5b8335611df581611d94565b92506020840135611e0581611d94565b929592945050506040919091013590565b600060208284031215611e2857600080fd5b8135611e3381611d94565b9392505050565b803560ff81168114611e4b57600080fd5b919050565b600060208284031215611e6257600080fd5b611e3382611e3a565b600080600060608486031215611e8057600080fd5b611e8984611e3a565b9250611e9760208501611e3a565b9150611ea560408501611e3a565b90509250925092565b60008060408385031215611ec157600080fd5b8235611ecc81611d94565b915060208301358015158114611ee157600080fd5b809150509250929050565b600060208284031215611efe57600080fd5b81356001600160801b0381168114611e3357600080fd5b60008060408385031215611f2857600080fd5b8235611f3381611d94565b91506020830135611ee181611d94565b600181811c90821680611f5757607f821691505b602082108103611f7757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092157610921611f7d565b600082611fc357634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561092157610921611f7d565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120415784516001600160a01b03168352938301939183019160010161201c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561207757600080fd5b8351925060208401519150604084015190509250925092565b6001600160801b038181168382160190808211156120b0576120b0611f7d565b5092915050565b808202811582820484141761092157610921611f7d565b60ff818116838216019081111561092157610921611f7d56fea26469706673582212206b7e0f8443b1a8a95714a7271459788170134908a2db2e70f7a3f11f12e34d6b64736f6c6343000813003300000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f000000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f000000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f0
Deployed Bytecode
0x60806040526004361061026b5760003560e01c80637b20876911610144578063ad5c4648116100b6578063d64fea9c1161007a578063d64fea9c146107a6578063dd62ed3e146107c7578063e22b62de146107e7578063f2fde38b14610807578063f6c998a314610827578063f887ea401461084757600080fd5b8063ad5c4648146106f0578063aebbce3314610724578063b03e4dd514610745578063b4812f7214610765578063cba6c7d61461078657600080fd5b80638da5cb5b116101085780638da5cb5b1461065c57806395d89b411461067a5780639d9241ec1461068f578063a457c2d7146106b0578063a8b9f94d14610512578063a9059cbb146106d057600080fd5b80637b208769146105a657806381e26381146105c657806385af30c5146105e757806387c6e6911461061b5780638c2c24d51461063c57600080fd5b806342cde4e8116101dd57806359b107b9116101a157806359b107b9146104d057806365e3941c146104f15780636b41ae0c1461051257806370a0823114610527578063715018a61461055d57806375f0a8741461057257600080fd5b806342cde4e81461041d5780634e943d57146104445780634ef4d0801461045957806350be7cdb146104805780635342acb4146104a057600080fd5b8063283c51681161022f578063283c51681461033b57806330563bd71461036e578063313ce5671461039057806332cb6b0c146103a457806339509351146103dd5780634087b80c146103fd57600080fd5b806303fd2a451461027757806306fdde03146102aa578063095ea7b3146102cc57806318160ddd146102fc57806323b872dd1461031b57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028d61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b657600080fd5b506102bf61087b565b6040516102a19190611d46565b3480156102d857600080fd5b506102ec6102e7366004611da9565b61090d565b60405190151581526020016102a1565b34801561030857600080fd5b506002545b6040519081526020016102a1565b34801561032757600080fd5b506102ec610336366004611dd5565b610927565b34801561034757600080fd5b5060075461035c90600160c01b900460ff1681565b60405160ff90911681526020016102a1565b34801561037a57600080fd5b5061038e610389366004611e16565b61094b565b005b34801561039c57600080fd5b50601261035c565b3480156103b057600080fd5b506103c56c0c9f2c9cd04674edea4000000081565b6040516001600160801b0390911681526020016102a1565b3480156103e957600080fd5b506102ec6103f8366004611da9565b610a03565b34801561040957600080fd5b5061038e610418366004611e50565b610a25565b34801561042957600080fd5b506009546103c590600160801b90046001600160801b031681565b34801561045057600080fd5b5061038e610ab2565b34801561046557600080fd5b506008546103c590600160801b90046001600160801b031681565b34801561048c57600080fd5b5061038e61049b366004611e6b565b610fd7565b3480156104ac57600080fd5b506102ec6104bb366004611e16565b60066020526000908152604090205460ff1681565b3480156104dc57600080fd5b5060075461035c90600160d01b900460ff1681565b3480156104fd57600080fd5b5060075461035c90600160c81b900460ff1681565b34801561051e57600080fd5b5061035c601e81565b34801561053357600080fd5b5061030d610542366004611e16565b6001600160a01b031660009081526020819052604090205490565b34801561056957600080fd5b5061038e6110e5565b34801561057e57600080fd5b5061028d7f00000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f081565b3480156105b257600080fd5b5060075461028d906001600160a01b031681565b3480156105d257600080fd5b5060075461035c90600160a81b900460ff1681565b3480156105f357600080fd5b5061028d7f000000000000000000000000cd39983bcb3d6502b94c40f2e30693c05640235981565b34801561062757600080fd5b5060075461035c90600160b81b900460ff1681565b34801561064857600080fd5b5061038e610657366004611eae565b6110f9565b34801561066857600080fd5b506005546001600160a01b031661028d565b34801561068657600080fd5b506102bf6111db565b34801561069b57600080fd5b5060075461035c90600160d81b900460ff1681565b3480156106bc57600080fd5b506102ec6106cb366004611da9565b6111ea565b3480156106dc57600080fd5b506102ec6106eb366004611da9565b611265565b3480156106fc57600080fd5b5061028d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561073057600080fd5b5060075461035c90600160a01b900460ff1681565b34801561075157600080fd5b5061038e610760366004611eec565b611273565b34801561077157600080fd5b5060075461035c90600160e01b900460ff1681565b34801561079257600080fd5b506008546103c5906001600160801b031681565b3480156107b257600080fd5b5060075461035c90600160b01b900460ff1681565b3480156107d357600080fd5b5061030d6107e2366004611f15565b6112c9565b3480156107f357600080fd5b5061038e610802366004611e6b565b6112f4565b34801561081357600080fd5b5061038e610822366004611e16565b6113f6565b34801561083357600080fd5b506009546103c5906001600160801b031681565b34801561085357600080fd5b5061028d7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60606003805461088a90611f43565b80601f01602080910402602001604051908101604052809291908181526020018280546108b690611f43565b80156109035780601f106108d857610100808354040283529160200191610903565b820191906000526020600020905b8154815290600101906020018083116108e657829003601f168201915b5050505050905090565b60003361091b81858561146f565b60019150505b92915050565b600033610935858285611593565b61094085858561160d565b506001949350505050565b61095361185a565b6001600160a01b0381166109a75760405162461bcd60e51b81526020600482015260166024820152757365744368617269747957616c6c65743a205a45524f60501b60448201526064015b60405180910390fd5b6007546040516001600160a01b038084169216907f4bbab2c7903c2ce19a641879a0d9eef91264b513aac38fbad32bdfc4a467e0cc90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60003361091b818585610a1683836112c9565b610a209190611f93565b61146f565b610a2d61185a565b610a3a600a6103e8611fa6565b8160ff161115610a5d57604051634396231960e11b815260040160405180910390fd5b6007805460ff60e01b1916600160e01b60ff8416908102919091179091556040519081527f7a85e8a0c3f3d4bafa6ac516212f769dfdb9bbf7c6f058d391aa03b059621243906020015b60405180910390a150565b600754600160e81b900460ff16600203610adf57604051637cd0459760e01b815260040160405180910390fd5b6007805460ff60e81b1916600160e91b17905560095447906001600160801b03166000610b0d600283611fa6565b9050610b198183611fc8565b60408051600280825260608201835292945060009290916020830190803683370190505090503081600081518110610b5357610b53611fdb565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110610ba757610ba7611fdb565b6001600160a01b03909216602092830291909101909101528215610d275760405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790610c1a908590600090869030904290600401611ff1565b600060405180830381600087803b158015610c3457600080fd5b505af1158015610c48573d6000803e3d6000fd5b505050508347610c589190611fc8565b60405163f305d71960e01b815230600482015260248101859052600060448201819052606482015261dead60848201524260a48201529092506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990849060c40160606040518083038185885af1158015610ce5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d0a9190612062565b5050600980546fffffffffffffffffffffffffffffffff19169055505b30600090815260208190526040902054600854909450610d5a906001600160801b0380821691600160801b900416612090565b6001600160801b031691508115610fbe5760405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790610dc0908790600090869030904290600401611ff1565b600060405180830381600087803b158015610dda57600080fd5b505af1158015610dee573d6000803e3d6000fd5b505060085447965060009250849150610e10906001600160801b0316876120b7565b610e1a9190611fa6565b90506000610e288287611fc8565b905060008215610f0f576040516001600160a01b037f00000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f016908490600081818185875af1925050503d8060008114610e9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ea0565b606091505b50508091505080610f0f577f00000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f06001600160a01b03167f11e717e1448fb29602b166d1efdb1695d9c5e1160a8001f0a431532ca6d1544984604051610f0691815260200190565b60405180910390a25b8115610fb5576007546040516001600160a01b03909116908390600081818185875af1925050503d8060008114610f62576040519150601f19603f3d011682016040523d82523d6000602084013e610f67565b606091505b50508091505080610fb5576007546040518381526001600160a01b03909116907f11e717e1448fb29602b166d1efdb1695d9c5e1160a8001f0a431532ca6d154499060200160405180910390a25b50506000600855505b50506007805460ff60e81b1916600160e81b1790555050565b610fdf61185a565b60008183610fee601e876120ce565b610ff891906120ce565b61100291906120ce565b905061101160046103e8611fa6565b8160ff16111561103457604051639b6c75dd60e01b815260040160405180910390fd5b6007805461ffff60a01b1916600160a81b60ff85811691820260ff60a01b191692909217600160a01b8884169081029190911764ff000000ff60b01b1916600160b01b88851690810260ff60d01b191691909117600160d01b9487169485021790945560408051938452602084019190915282015260608101919091527fd7d0ea851e57a89302ff02384f1191c6a46f2164f7c6195648b50fe4e3de48ed906080015b60405180910390a150505050565b6110ed61185a565b6110f760006118b4565b565b61110161185a565b6001600160a01b03821660009081526006602052604090205481151560ff90911615150361117c5760405162461bcd60e51b815260206004820152602260248201527f5468652077616c6c657420616c72656164792068617320746861742076616c75604482015261652160f01b606482015260840161099e565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527f926aa5b668417cf93f5146a62276c847038f033b1ec9452fef4a3297036d4452910160405180910390a25050565b60606004805461088a90611f43565b600033816111f882866112c9565b9050838110156112585760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161099e565b610940828686840361146f565b60003361091b81858561160d565b61127b61185a565b600980546001600160801b03908116600160801b918416918202179091556040519081527fb9adf918e09b42b3fa12366dd5ed9d3a6779ff5019fc742497739fee7dfd1df290602001610aa7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112fc61185a565b6000818361130b601e876120ce565b61131591906120ce565b61131f91906120ce565b905061132e60046103e8611fa6565b8160ff16111561135157604051631148ffd960e11b815260040160405180910390fd5b6007805461ffff60b81b1916600160c01b60ff85811691820260ff60b81b191692909217600160b81b8884169081029190911762ff00ff60c81b1916600160c81b88851690810260ff60d81b191691909117600160d81b9487169485021790945560408051938452602084019190915282015260608101919091527f570b3433de94dd089022d45a581327f2030010b256cdb65ca99693cec5eeb7f5906080016110d7565b6113fe61185a565b6001600160a01b0381166114635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099e565b61146c816118b4565b50565b6001600160a01b0383166114d15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099e565b6001600160a01b0382166115325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061159f84846112c9565b9050600019811461160757818110156115fa5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161099e565b611607848484840361146f565b50505050565b600954306000908152602081905260409020546007546001600160a01b038681167f000000000000000000000000cd39983bcb3d6502b94c40f2e30693c0564023598216908114949187161492600160801b9091046001600160801b03161090600160e81b900460ff1660011480156116835750805b801561168d575082155b80156116b257506001600160a01b03861660009081526006602052604090205460ff16155b80156116d757506001600160a01b03851660009081526006602052604090205460ff16155b156116e4576116e4610ab2565b6001600160a01b03861660009081526006602052604090205460ff1615801561172657506001600160a01b03851660009081526006602052604090205460ff16155b156118475760008380156117455750600754600160d01b900460ff1615155b15611796576007546103e89061176590600160d01b900460ff16876120b7565b61176f9190611fa6565b905061177b8186611fc8565b9450611788873083611906565b61179181611aaa565b611845565b8280156117ae5750600754600160d81b900460ff1615155b156117fa576007546103e8906117ce90600160d81b900460ff16876120b7565b6117d89190611fa6565b90506117e48186611fc8565b94506117f1873083611906565b61179181611c38565b6007546000906103e89061181890600160e01b900460ff16886120b7565b6118229190611fa6565b905061182e8187611fc8565b95508015611843576118438861dead83611906565b505b505b611852868686611906565b505050505050565b6005546001600160a01b031633146110f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831661196a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161099e565b6001600160a01b0382166119cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161099e565b6001600160a01b03831660009081526020819052604090205481811015611a445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161099e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611607565b600754600090600160d01b900460ff16611ac5601e846120b7565b611acf9190611fa6565b600880549192508291829190600090611af29084906001600160801b0316612090565b82546001600160801b039182166101009390930a92830291909202199091161790555060075460ff600160d01b8204811691611b3791600160a01b90910416856120b7565b611b419190611fa6565b9150611b4d8282611f93565b905081600860108282829054906101000a90046001600160801b0316611b739190612090565b82546001600160801b039182166101009390930a92830291909202199091161790555060075460ff600160d01b8204811691611bb891600160b01b90910416856120b7565b611bc29190611fa6565b9150611bce8282611f93565b600980549192508391600090611bee9084906001600160801b0316612090565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508083611c1e9190611fc8565b92508215611c3357611c333061dead85611906565b505050565b600754600090600160d81b900460ff16611c53601e846120b7565b611c5d9190611fa6565b600880549192508291829190600090611c809084906001600160801b0316612090565b82546001600160801b039182166101009390930a92830291909202199091161790555060075460ff600160d81b8204811691611cc591600160b81b90910416856120b7565b611ccf9190611fa6565b9150611cdb8282611f93565b905081600860108282829054906101000a90046001600160801b0316611d019190612090565b82546001600160801b039182166101009390930a92830291909202199091161790555060075460ff600160d81b8204811691611bb891600160c81b90910416856120b7565b600060208083528351808285015260005b81811015611d7357858101830151858201604001528201611d57565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461146c57600080fd5b60008060408385031215611dbc57600080fd5b8235611dc781611d94565b946020939093013593505050565b600080600060608486031215611dea57600080fd5b8335611df581611d94565b92506020840135611e0581611d94565b929592945050506040919091013590565b600060208284031215611e2857600080fd5b8135611e3381611d94565b9392505050565b803560ff81168114611e4b57600080fd5b919050565b600060208284031215611e6257600080fd5b611e3382611e3a565b600080600060608486031215611e8057600080fd5b611e8984611e3a565b9250611e9760208501611e3a565b9150611ea560408501611e3a565b90509250925092565b60008060408385031215611ec157600080fd5b8235611ecc81611d94565b915060208301358015158114611ee157600080fd5b809150509250929050565b600060208284031215611efe57600080fd5b81356001600160801b0381168114611e3357600080fd5b60008060408385031215611f2857600080fd5b8235611f3381611d94565b91506020830135611ee181611d94565b600181811c90821680611f5757607f821691505b602082108103611f7757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092157610921611f7d565b600082611fc357634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561092157610921611f7d565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120415784516001600160a01b03168352938301939183019160010161201c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561207757600080fd5b8351925060208401519150604084015190509250925092565b6001600160801b038181168382160190808211156120b0576120b0611f7d565b5092915050565b808202811582820484141761092157610921611f7d565b60ff818116838216019081111561092157610921611f7d56fea26469706673582212206b7e0f8443b1a8a95714a7271459788170134908a2db2e70f7a3f11f12e34d6b64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f000000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f000000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f0
-----Decoded View---------------
Arg [0] : _mkt (address): 0x54C83626c9A1190dE1829Cc4b141b0B65FCc36f0
Arg [1] : _chy (address): 0x54C83626c9A1190dE1829Cc4b141b0B65FCc36f0
Arg [2] : _newOwner (address): 0x54C83626c9A1190dE1829Cc4b141b0B65FCc36f0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f0
Arg [1] : 00000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f0
Arg [2] : 00000000000000000000000054c83626c9a1190de1829cc4b141b0b65fcc36f0
Deployed Bytecode Sourcemap
29321:10280:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29768:73;;;;;;;;;;;;29799:42;29768:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;29768:73:0;;;;;;;;6308:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8668:201::-;;;;;;;;;;-1:-1:-1;8668:201:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;8668:201:0;1231:187:1;7437:108:0;;;;;;;;;;-1:-1:-1;7525:12:0;;7437:108;;;1569:25:1;;;1557:2;1542:18;7437:108:0;1423:177:1;9449:261:0;;;;;;;;;;-1:-1:-1;9449:261:0;;;;;:::i;:::-;;:::i;30205:28::-;;;;;;;;;;-1:-1:-1;30205:28:0;;;;-1:-1:-1;;;30205:28:0;;;;;;;;;2238:4:1;2226:17;;;2208:36;;2196:2;2181:18;30205:28:0;2066:184:1;39376:222:0;;;;;;;;;;-1:-1:-1;39376:222:0;;;;;:::i;:::-;;:::i;:::-;;7279:93;;;;;;;;;;-1:-1:-1;7362:2:0;7279:93;;29850:60;;;;;;;;;;;;29887:23;29850:60;;;;;-1:-1:-1;;;;;2679:47:1;;;2661:66;;2649:2;2634:18;29850:60:0;2515:218:1;10119:238:0;;;;;;;;;;-1:-1:-1;10119:238:0;;;;;:::i;:::-;;:::i;38862:235::-;;;;;;;;;;-1:-1:-1;38862:235:0;;;;;:::i;:::-;;:::i;30641:46::-;;;;;;;;;;-1:-1:-1;30641:46:0;;;;-1:-1:-1;;;30641:46:0;;-1:-1:-1;;;;;30641:46:0;;;32694:2314;;;;;;;;;;;;;:::i;30564:33::-;;;;;;;;;;-1:-1:-1;30564:33:0;;;;-1:-1:-1;;;30564:33:0;;-1:-1:-1;;;;;30564:33:0;;;37770:451;;;;;;;;;;-1:-1:-1;37770:451:0;;;;;:::i;:::-;;:::i;29476:49::-;;;;;;;;;;-1:-1:-1;29476:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30273:73;;;;;;;;;;-1:-1:-1;30273:73:0;;;;-1:-1:-1;;;30273:73:0;;;;;;30240:24;;;;;;;;;;-1:-1:-1;30240:24:0;;;;-1:-1:-1;;;30240:24:0;;;;;;30117:40;;;;;;;;;;;;30155:2;30117:40;;7608:127;;;;;;;;;;-1:-1:-1;7608:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7709:18:0;7682:7;7709:18;;;;;;;;;;;;7608:127;19091:103;;;;;;;;;;;;;:::i;29670:48::-;;;;;;;;;;;;;;;29725:36;;;;;;;;;;-1:-1:-1;29725:36:0;;;;-1:-1:-1;;;;;29725:36:0;;;30051:27;;;;;;;;;;-1:-1:-1;30051:27:0;;;;-1:-1:-1;;;30051:27:0;;;;;;29534:40;;;;;;;;;;;;;;;30169:29;;;;;;;;;;-1:-1:-1;30169:29:0;;;;-1:-1:-1;;;30169:29:0;;;;;;39105:263;;;;;;;;;;-1:-1:-1;39105:263:0;;;;;:::i;:::-;;:::i;18450:87::-;;;;;;;;;;-1:-1:-1;18523:6:0;;-1:-1:-1;;;;;18523:6:0;18450:87;;6527:104;;;;;;;;;;;;;:::i;30353:78::-;;;;;;;;;;-1:-1:-1;30353:78:0;;;;-1:-1:-1;;;30353:78:0;;;;;;10860:436;;;;;;;;;;-1:-1:-1;10860:436:0;;;;;:::i;:::-;;:::i;7941:193::-;;;;;;;;;;-1:-1:-1;7941:193:0;;;;;:::i;:::-;;:::i;29632:29::-;;;;;;;;;;;;;;;30016:28;;;;;;;;;;-1:-1:-1;30016:28:0;;;;-1:-1:-1;;;30016:28:0;;;;;;38696:158;;;;;;;;;;-1:-1:-1;38696:158:0;;;;;:::i;:::-;;:::i;30440:32::-;;;;;;;;;;-1:-1:-1;30440:32:0;;;;-1:-1:-1;;;30440:32:0;;;;;;30522:35;;;;;;;;;;-1:-1:-1;30522:35:0;;;;-1:-1:-1;;;;;30522:35:0;;;30085:23;;;;;;;;;;-1:-1:-1;30085:23:0;;;;-1:-1:-1;;;30085:23:0;;;;;;8197:151;;;;;;;;;;-1:-1:-1;8197:151:0;;;;;:::i;:::-;;:::i;38229:459::-;;;;;;;;;;-1:-1:-1;38229:459:0;;;;;:::i;:::-;;:::i;19349:201::-;;;;;;;;;;-1:-1:-1;19349:201:0;;;;;:::i;:::-;;:::i;30604:28::-;;;;;;;;;;-1:-1:-1;30604:28:0;;;;-1:-1:-1;;;;;30604:28:0;;;29581:42;;;;;;;;;;;;;;;6308:100;6362:13;6395:5;6388:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6308:100;:::o;8668:201::-;8751:4;4194:10;8807:32;4194:10;8823:7;8832:6;8807:8;:32::i;:::-;8857:4;8850:11;;;8668:201;;;;;:::o;9449:261::-;9546:4;4194:10;9604:38;9620:4;4194:10;9635:6;9604:15;:38::i;:::-;9653:27;9663:4;9669:2;9673:6;9653:9;:27::i;:::-;-1:-1:-1;9698:4:0;;9449:261;-1:-1:-1;;;;9449:261:0:o;39376:222::-;18336:13;:11;:13::i;:::-;-1:-1:-1;;;;;39461:18:0;::::1;39453:53;;;::::0;-1:-1:-1;;;39453:53:0;;6062:2:1;39453:53:0::1;::::0;::::1;6044:21:1::0;6101:2;6081:18;;;6074:30;-1:-1:-1;;;6120:18:1;;;6113:52;6182:18;;39453:53:0::1;;;;;;;;;39539:13;::::0;39522:37:::1;::::0;-1:-1:-1;;;;;39522:37:0;;::::1;::::0;39539:13:::1;::::0;39522:37:::1;::::0;39539:13:::1;::::0;39522:37:::1;39570:13;:20:::0;;-1:-1:-1;;;;;;39570:20:0::1;-1:-1:-1::0;;;;;39570:20:0;;;::::1;::::0;;;::::1;::::0;;39376:222::o;10119:238::-;10207:4;4194:10;10263:64;4194:10;10279:7;10316:10;10288:25;4194:10;10279:7;10288:9;:25::i;:::-;:38;;;;:::i;:::-;10263:8;:64::i;38862:235::-;18336:13;:11;:13::i;:::-;38955:15:::1;38968:2;29952:4;38955:15;:::i;:::-;38940:12;:30;;;38936:69;;;38979:26;;-1:-1:-1::0;;;38979:26:0::1;;;;;;;;;;;38936:69;39016:14;:29:::0;;-1:-1:-1;;;;39016:29:0::1;-1:-1:-1::0;;;39016:29:0::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;39061:28:::1;::::0;2208:36:1;;;39061:28:0::1;::::0;2196:2:1;2181:18;39061:28:0::1;;;;;;;;38862:235:::0;:::o;32694:2314::-;31592:8;;-1:-1:-1;;;31592:8:0;;;;31604:1;31592:13;31588:49;;31614:23;;-1:-1:-1;;;31614:23:0;;;;;;;;;;;31588:49;31648:8;:12;;-1:-1:-1;;;;31648:12:0;-1:-1:-1;;;31648:12:0;;;32878:13:::1;::::0;32829:21:::1;::::0;-1:-1:-1;;;;;32878:13:0::1;-1:-1:-1::0;32922:13:0::1;31659:1:::0;32878:13;32922::::1;:::i;:::-;32902:33:::0;-1:-1:-1;32946:25:0::1;32902:33:::0;32946:25;::::1;:::i;:::-;33008:16;::::0;;33022:1:::1;33008:16:::0;;;;;::::1;::::0;;32946:25;;-1:-1:-1;32984:21:0::1;::::0;33008:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33008:16:0::1;32984:40;;33053:4;33035;33040:1;33035:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;33035:23:0::1;;;-1:-1:-1::0;;;;;33035:23:0::1;;;::::0;::::1;33079:4;33069;33074:1;33069:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33069:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:14;33138:13;;33134:636:::1;;33168:212;::::0;-1:-1:-1;;;33168:212:0;;-1:-1:-1;;;;;33168:6:0::1;:57;::::0;::::1;::::0;:212:::1;::::0;33244:12;;33275:1:::1;::::0;33295:4;;33326::::1;::::0;33350:15:::1;::::0;33168:212:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33484:10;33460:21;:34;;;;:::i;:::-;33509:215;::::0;-1:-1:-1;;;33509:215:0;;33579:4:::1;33509:215;::::0;::::1;8609:34:1::0;8659:18;;;8652:34;;;33631:1:0::1;8702:18:1::0;;;8695:34;;;8745:18;;;8738:34;29799:42:0::1;8788:19:1::0;;;8781:44;33694:15:0::1;8841:19:1::0;;;8834:35;33445:49:0;;-1:-1:-1;;;;;;33509:6:0::1;:22;::::0;::::1;::::0;33445:49;;8543:19:1;;33509:215:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;33741:13:0::1;:17:::0;;-1:-1:-1;;33741:17:0::1;::::0;;-1:-1:-1;33134:636:0::1;33811:4;7682:7:::0;7709:18;;;;;;;;;;;33864:20:::1;::::0;33780:37;;-1:-1:-1;33843:41:0::1;::::0;-1:-1:-1;;;;;33864:20:0;;::::1;::::0;-1:-1:-1;;;33843:18:0;::::1;;:41;:::i;:::-;-1:-1:-1::0;;;;;33828:56:0::1;::::0;-1:-1:-1;33899:16:0;;33895:1106:::1;;33985:210;::::0;-1:-1:-1;;;33985:210:0;;-1:-1:-1;;;;;33985:6:0::1;:57;::::0;::::1;::::0;:210:::1;::::0;34061:10;;34090:1:::1;::::0;34110:4;;34141::::1;::::0;34165:15:::1;::::0;33985:210:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34354:20:0::1;::::0;34281:21:::1;::::0;-1:-1:-1;34317:20:0::1;::::0;-1:-1:-1;34395:12:0;;-1:-1:-1;34341:33:0::1;::::0;-1:-1:-1;;;;;34354:20:0::1;34281:21:::0;34341:33:::1;:::i;:::-;34340:67;;;;:::i;:::-;34317:90:::0;-1:-1:-1;34422:18:0::1;34443:28;34317:90:::0;34443:10;:28:::1;:::i;:::-;34422:49:::0;-1:-1:-1;34486:9:0::1;34514:19:::0;;34510:200:::1;;34565:48;::::0;-1:-1:-1;;;;;34565:15:0::1;:20;::::0;34593:15;;34565:48:::1;::::0;;;34593:15;34565:20;:48:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34554:59;;;;;34637:4;34632:62;;34661:15;-1:-1:-1::0;;;;;34648:46:0::1;;34678:15;34648:46;;;;1569:25:1::0;;1557:2;1542:18;;1423:177;34648:46:0::1;;;;;;;;34632:62;34728:17:::0;;34724:190:::1;;34777:13;::::0;:44:::1;::::0;-1:-1:-1;;;;;34777:13:0;;::::1;::::0;34803;;34777:44:::1;::::0;;;34803:13;34777;:44:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34766:55;;;;;34845:4;34840:58;;34869:13;::::0;34856:42:::1;::::0;1569:25:1;;;-1:-1:-1;;;;;34869:13:0;;::::1;::::0;34856:42:::1;::::0;1557:2:1;1542:18;34856:42:0::1;;;;;;;34840:58;-1:-1:-1::0;;34951:1:0::1;34928:20;34967:22:::0;-1:-1:-1;33895:1106:0::1;-1:-1:-1::0;;31683:8:0;:12;;-1:-1:-1;;;;31683:12:0;-1:-1:-1;;;31683:12:0;;;-1:-1:-1;;32694:2314:0:o;37770:451::-;18336:13;:11;:13::i;:::-;37899:14:::1;37950:8:::0;37941:6;37916:22:::1;30002:2;37916:7:::0;:22:::1;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;37899:59:::0;-1:-1:-1;37984:14:0::1;37997:1;29952:4;37984:14;:::i;:::-;37973:8;:25;;;37969:60;;;38007:22;;-1:-1:-1::0;;;38007:22:0::1;;;;;;;;;;;37969:60;38040:10;:21:::0;;-1:-1:-1;;;;38072:20:0;-1:-1:-1;;;38040:21:0::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;38072:20:0;;;;;-1:-1:-1;;;38072:20:0;;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;38128:22:0;-1:-1:-1;;;38103:14:0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;38128:22:0;;;;;-1:-1:-1;;;38128:22:0;;::::1;::::0;;::::1;;::::0;;;38166:47:::1;::::0;;10144:36:1;;;10211:2;10196:18;;10189:45;;;;10250:18;;10243:45;10319:2;10304:18;;10297:45;;;;38166:47:0::1;::::0;10131:3:1;10116:19;38166:47:0::1;;;;;;;;37888:333;37770:451:::0;;;:::o;19091:103::-;18336:13;:11;:13::i;:::-;19156:30:::1;19183:1;19156:18;:30::i;:::-;19091:103::o:0;39105:263::-;18336:13;:11;:13::i;:::-;-1:-1:-1;;;;;39197:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;:33;::::1;;:23;::::0;;::::1;:33;;::::0;39189:80:::1;;;::::0;-1:-1:-1;;;39189:80:0;;10555:2:1;39189:80:0::1;::::0;::::1;10537:21:1::0;10594:2;10574:18;;;10567:30;10633:34;10613:18;;;10606:62;-1:-1:-1;;;10684:18:1;;;10677:32;10726:19;;39189:80:0::1;10353:398:1::0;39189:80:0::1;-1:-1:-1::0;;;;;39280:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;39280:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;39328;;1371:41:1;;;39328:32:0::1;::::0;1344:18:1;39328:32:0::1;;;;;;;39105:263:::0;;:::o;6527:104::-;6583:13;6616:7;6609:14;;;;;:::i;10860:436::-;10953:4;4194:10;10953:4;11036:25;4194:10;11053:7;11036:9;:25::i;:::-;11009:52;;11100:15;11080:16;:35;;11072:85;;;;-1:-1:-1;;;11072:85:0;;10958:2:1;11072:85:0;;;10940:21:1;10997:2;10977:18;;;10970:30;11036:34;11016:18;;;11009:62;-1:-1:-1;;;11087:18:1;;;11080:35;11132:19;;11072:85:0;10756:401:1;11072:85:0;11193:60;11202:5;11209:7;11237:15;11218:16;:34;11193:8;:60::i;7941:193::-;8020:4;4194:10;8076:28;4194:10;8093:2;8097:6;8076:9;:28::i;38696:158::-;18336:13;:11;:13::i;:::-;38784:9:::1;:22:::0;;-1:-1:-1;;;;;38784:22:0;;::::1;-1:-1:-1::0;;;38784:22:0;;::::1;::::0;;::::1;;::::0;;;38822:24:::1;::::0;2661:66:1;;;38822:24:0::1;::::0;2649:2:1;2634:18;38822:24:0::1;2515:218:1::0;8197:151:0;-1:-1:-1;;;;;8313:18:0;;;8286:7;8313:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8197:151::o;38229:459::-;18336:13;:11;:13::i;:::-;38359:14:::1;38411:8:::0;38402:6;38376:23:::1;30155:2;38376:7:::0;:23:::1;:::i;:::-;:32;;;;:::i;:::-;:43;;;;:::i;:::-;38359:60:::0;-1:-1:-1;38445:14:0::1;38458:1;29952:4;38445:14;:::i;:::-;38434:8;:25;;;38430:61;;;38468:23;;-1:-1:-1::0;;;38468:23:0::1;;;;;;;;;;;38430:61;38502:11;:22:::0;;-1:-1:-1;;;;38535:21:0;-1:-1:-1;;;38502:22:0::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;38535:21:0;;;;;-1:-1:-1;;;38535:21:0;;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;38593:23:0;-1:-1:-1;;;38567:15:0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;38593:23:0;;;;;-1:-1:-1;;;38593:23:0;;::::1;::::0;;::::1;;::::0;;;38632:48:::1;::::0;;10144:36:1;;;10211:2;10196:18;;10189:45;;;;10250:18;;10243:45;10319:2;10304:18;;10297:45;;;;38632:48:0::1;::::0;10131:3:1;10116:19;38632:48:0::1;9929:419:1::0;19349:201:0;18336:13;:11;:13::i;:::-;-1:-1:-1;;;;;19438:22:0;::::1;19430:73;;;::::0;-1:-1:-1;;;19430:73:0;;11364:2:1;19430:73:0::1;::::0;::::1;11346:21:1::0;11403:2;11383:18;;;11376:30;11442:34;11422:18;;;11415:62;-1:-1:-1;;;11493:18:1;;;11486:36;11539:19;;19430:73:0::1;11162:402:1::0;19430:73:0::1;19514:28;19533:8;19514:18;:28::i;:::-;19349:201:::0;:::o;14853:346::-;-1:-1:-1;;;;;14955:19:0;;14947:68;;;;-1:-1:-1;;;14947:68:0;;11771:2:1;14947:68:0;;;11753:21:1;11810:2;11790:18;;;11783:30;11849:34;11829:18;;;11822:62;-1:-1:-1;;;11900:18:1;;;11893:34;11944:19;;14947:68:0;11569:400:1;14947:68:0;-1:-1:-1;;;;;15034:21:0;;15026:68;;;;-1:-1:-1;;;15026:68:0;;12176:2:1;15026:68:0;;;12158:21:1;12215:2;12195:18;;;12188:30;12254:34;12234:18;;;12227:62;-1:-1:-1;;;12305:18:1;;;12298:32;12347:19;;15026:68:0;11974:398:1;15026:68:0;-1:-1:-1;;;;;15107:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15159:32;;1569:25:1;;;15159:32:0;;1542:18:1;15159:32:0;;;;;;;14853:346;;;:::o;15490:419::-;15591:24;15618:25;15628:5;15635:7;15618:9;:25::i;:::-;15591:52;;-1:-1:-1;;15658:16:0;:37;15654:248;;15740:6;15720:16;:26;;15712:68;;;;-1:-1:-1;;;15712:68:0;;12579:2:1;15712:68:0;;;12561:21:1;12618:2;12598:18;;;12591:30;12657:31;12637:18;;;12630:59;12706:18;;15712:68:0;12377:353:1;15712:68:0;15824:51;15833:5;15840:7;15868:6;15849:16;:25;15824:8;:51::i;:::-;15580:329;15490:419;;;:::o;35142:1405::-;35402:9;;35393:4;35263:10;7709:18;;;;;;;;;;;35442:8;;-1:-1:-1;;;;;35276:25:0;;;35284:8;35276:25;;;;;;35326:23;;;;;-1:-1:-1;;;35402:9:0;;;-1:-1:-1;;;;;35402:9:0;-1:-1:-1;;;;;35442:8:0;;;;35454:1;35442:13;:37;;;;;35472:7;35442:37;:60;;;;;35497:5;35496:6;35442:60;:101;;;;-1:-1:-1;;;;;;35520:23:0;;;;;;:17;:23;;;;;;;;35519:24;35442:101;:140;;;;-1:-1:-1;;;;;;35561:21:0;;;;;;:17;:21;;;;;;;;35560:22;35442:140;35424:219;;;35609:22;:20;:22::i;:::-;-1:-1:-1;;;;;35660:23:0;;;;;;:17;:23;;;;;;;;35659:24;:50;;;;-1:-1:-1;;;;;;35688:21:0;;;;;;:17;:21;;;;;;;;35687:22;35659:50;35655:841;;;35726:8;35753:5;:24;;;;-1:-1:-1;35762:11:0;;-1:-1:-1;;;35762:11:0;;;;:15;;35753:24;35749:736;;;35814:11;;29952:4;;35805:20;;-1:-1:-1;;;35814:11:0;;;;35805:6;:20;:::i;:::-;35804:35;;;;:::i;:::-;35798:41;-1:-1:-1;35858:13:0;35798:41;35858:13;;:::i;:::-;;;35890:41;35906:4;35920;35927:3;35890:15;:41::i;:::-;35950:18;35964:3;35950:13;:18::i;:::-;35749:736;;;35994:6;:26;;;;-1:-1:-1;36004:12:0;;-1:-1:-1;;;36004:12:0;;;;:16;;35994:26;35990:495;;;36057:12;;29952:4;;36048:21;;-1:-1:-1;;;36057:12:0;;;;36048:6;:21;:::i;:::-;36047:36;;;;:::i;:::-;36041:42;-1:-1:-1;36102:13:0;36041:42;36102:13;;:::i;:::-;;;36134:41;36150:4;36164;36171:3;36134:15;:41::i;:::-;36194:19;36209:3;36194:14;:19::i;35990:495::-;36282:14;;36254:15;;29952:4;;36273:23;;-1:-1:-1;;;36282:14:0;;;;36273:6;:23;:::i;:::-;36272:38;;;;:::i;:::-;36254:56;-1:-1:-1;36329:20:0;36254:56;36329:20;;:::i;:::-;;-1:-1:-1;36372:14:0;;36368:102;;36411:39;36427:4;29799:42;36439:10;36411:15;:39::i;:::-;36235:250;35990:495;35711:785;35655:841;36506:33;36522:4;36528:2;36532:6;36506:15;:33::i;:::-;35252:1295;;;35142:1405;;;:::o;18615:132::-;18523:6;;-1:-1:-1;;;;;18523:6:0;4194:10;18679:23;18671:68;;;;-1:-1:-1;;;18671:68:0;;12937:2:1;18671:68:0;;;12919:21:1;;;12956:18;;;12949:30;13015:34;12995:18;;;12988:62;13067:18;;18671:68:0;12735:356:1;19710:191:0;19803:6;;;-1:-1:-1;;;;;19820:17:0;;;-1:-1:-1;;;;;;19820:17:0;;;;;;;19853:40;;19803:6;;;19820:17;19803:6;;19853:40;;19784:16;;19853:40;19773:128;19710:191;:::o;11766:806::-;-1:-1:-1;;;;;11863:18:0;;11855:68;;;;-1:-1:-1;;;11855:68:0;;13298:2:1;11855:68:0;;;13280:21:1;13337:2;13317:18;;;13310:30;13376:34;13356:18;;;13349:62;-1:-1:-1;;;13427:18:1;;;13420:35;13472:19;;11855:68:0;13096:401:1;11855:68:0;-1:-1:-1;;;;;11942:16:0;;11934:64;;;;-1:-1:-1;;;11934:64:0;;13704:2:1;11934:64:0;;;13686:21:1;13743:2;13723:18;;;13716:30;13782:34;13762:18;;;13755:62;-1:-1:-1;;;13833:18:1;;;13826:33;13876:19;;11934:64:0;13502:399:1;11934:64:0;-1:-1:-1;;;;;12084:15:0;;12062:19;12084:15;;;;;;;;;;;12118:21;;;;12110:72;;;;-1:-1:-1;;;12110:72:0;;14108:2:1;12110:72:0;;;14090:21:1;14147:2;14127:18;;;14120:30;14186:34;14166:18;;;14159:62;-1:-1:-1;;;14237:18:1;;;14230:36;14283:19;;12110:72:0;13906:402:1;12110:72:0;-1:-1:-1;;;;;12218:15:0;;;:9;:15;;;;;;;;;;;12236:20;;;12218:38;;12436:13;;;;;;;;;;:23;;;;;;12488:26;;1569:25:1;;;12436:13:0;;12488:26;;1542:18:1;12488:26:0;;;;;;;12527:37;36555:596;;36648:11;;36611:8;;-1:-1:-1;;;36648:11:0;;;;36623:21;30002:2;36623:6;:21;:::i;:::-;36622:37;;;;:::i;:::-;36698:20;:36;;36611:48;;-1:-1:-1;36611:48:0;;;;36698:20;36670:11;;36698:36;;36611:48;;-1:-1:-1;;;;;36698:36:0;;:::i;:::-;;;-1:-1:-1;;;;;36698:36:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36777:11:0;;;-1:-1:-1;;;36777:11:0;;;;;36754:19;;-1:-1:-1;;;36763:10:0;;;;36754:6;:19;:::i;:::-;36753:35;;;;:::i;:::-;36747:41;-1:-1:-1;36799:13:0;36747:41;36799:13;;:::i;:::-;;;36853:3;36823:18;;:34;;;;;;;;;;-1:-1:-1;;;;;36823:34:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;36823:34:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36895:11:0;;;-1:-1:-1;;;36895:11:0;;;;;36877:14;;-1:-1:-1;;;36886:5:0;;;;36877:6;:14;:::i;:::-;36876:30;;;;:::i;:::-;36870:36;-1:-1:-1;36917:13:0;36870:36;36917:13;;:::i;:::-;36941;:29;;36917:13;;-1:-1:-1;36966:3:0;;36941:13;;:29;;36966:3;;-1:-1:-1;;;;;36941:29:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;36941:29:0;;;;;-1:-1:-1;;;;;36941:29:0;;;;;;36993:6;36983:16;;;;;:::i;:::-;;-1:-1:-1;37061:10:0;;37057:87;;37088:44;37112:4;29799:42;37125:6;37088:15;:44::i;:::-;36600:551;;36555:596;:::o;37159:603::-;37254:12;;37216:8;;-1:-1:-1;;;37254:12:0;;;;37228:22;30155:2;37228:6;:22;:::i;:::-;37227:39;;;;:::i;:::-;37305:20;:36;;37216:50;;-1:-1:-1;37216:50:0;;;;37305:20;37277:11;;37305:36;;37216:50;;-1:-1:-1;;;;;37305:36:0;;:::i;:::-;;;-1:-1:-1;;;;;37305:36:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37385:12:0;;;-1:-1:-1;;;37385:12:0;;;;;37361:20;;-1:-1:-1;;;37370:11:0;;;;37361:6;:20;:::i;:::-;37360:37;;;;:::i;:::-;37354:43;-1:-1:-1;37408:13:0;37354:43;37408:13;;:::i;:::-;;;37462:3;37432:18;;:34;;;;;;;;;;-1:-1:-1;;;;;37432:34:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;37432:34:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37505:12:0;;;-1:-1:-1;;;37505:12:0;;;;;37486:15;;-1:-1:-1;;;37495:6:0;;;;37486;:15;:::i;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1605:456::-;1682:6;1690;1698;1751:2;1739:9;1730:7;1726:23;1722:32;1719:52;;;1767:1;1764;1757:12;1719:52;1806:9;1793:23;1825:31;1850:5;1825:31;:::i;:::-;1875:5;-1:-1:-1;1932:2:1;1917:18;;1904:32;1945:33;1904:32;1945:33;:::i;:::-;1605:456;;1997:7;;-1:-1:-1;;;2051:2:1;2036:18;;;;2023:32;;1605:456::o;2255:255::-;2322:6;2375:2;2363:9;2354:7;2350:23;2346:32;2343:52;;;2391:1;2388;2381:12;2343:52;2430:9;2417:23;2449:31;2474:5;2449:31;:::i;:::-;2499:5;2255:255;-1:-1:-1;;;2255:255:1:o;2738:156::-;2804:20;;2864:4;2853:16;;2843:27;;2833:55;;2884:1;2881;2874:12;2833:55;2738:156;;;:::o;2899:182::-;2956:6;3009:2;2997:9;2988:7;2984:23;2980:32;2977:52;;;3025:1;3022;3015:12;2977:52;3048:27;3065:9;3048:27;:::i;3086:322::-;3157:6;3165;3173;3226:2;3214:9;3205:7;3201:23;3197:32;3194:52;;;3242:1;3239;3232:12;3194:52;3265:27;3282:9;3265:27;:::i;:::-;3255:37;;3311:36;3343:2;3332:9;3328:18;3311:36;:::i;:::-;3301:46;;3366:36;3398:2;3387:9;3383:18;3366:36;:::i;:::-;3356:46;;3086:322;;;;;:::o;4120:416::-;4185:6;4193;4246:2;4234:9;4225:7;4221:23;4217:32;4214:52;;;4262:1;4259;4252:12;4214:52;4301:9;4288:23;4320:31;4345:5;4320:31;:::i;:::-;4370:5;-1:-1:-1;4427:2:1;4412:18;;4399:32;4469:15;;4462:23;4450:36;;4440:64;;4500:1;4497;4490:12;4440:64;4523:7;4513:17;;;4120:416;;;;;:::o;4541:301::-;4600:6;4653:2;4641:9;4632:7;4628:23;4624:32;4621:52;;;4669:1;4666;4659:12;4621:52;4708:9;4695:23;-1:-1:-1;;;;;4751:5:1;4747:46;4740:5;4737:57;4727:85;;4808:1;4805;4798:12;4847:388;4915:6;4923;4976:2;4964:9;4955:7;4951:23;4947:32;4944:52;;;4992:1;4989;4982:12;4944:52;5031:9;5018:23;5050:31;5075:5;5050:31;:::i;:::-;5100:5;-1:-1:-1;5157:2:1;5142:18;;5129:32;5170:33;5129:32;5170:33;:::i;5475:380::-;5554:1;5550:12;;;;5597;;;5618:61;;5672:4;5664:6;5660:17;5650:27;;5618:61;5725:2;5717:6;5714:14;5694:18;5691:38;5688:161;;5771:10;5766:3;5762:20;5759:1;5752:31;5806:4;5803:1;5796:15;5834:4;5831:1;5824:15;5688:161;;5475:380;;;:::o;6211:127::-;6272:10;6267:3;6263:20;6260:1;6253:31;6303:4;6300:1;6293:15;6327:4;6324:1;6317:15;6343:125;6408:9;;;6429:10;;;6426:36;;;6442:18;;:::i;6473:217::-;6513:1;6539;6529:132;;6583:10;6578:3;6574:20;6571:1;6564:31;6618:4;6615:1;6608:15;6646:4;6643:1;6636:15;6529:132;-1:-1:-1;6675:9:1;;6473:217::o;6886:128::-;6953:9;;;6974:11;;;6971:37;;;6988:18;;:::i;7151:127::-;7212:10;7207:3;7203:20;7200:1;7193:31;7243:4;7240:1;7233:15;7267:4;7264:1;7257:15;7283:980;7545:4;7593:3;7582:9;7578:19;7624:6;7613:9;7606:25;7650:2;7688:6;7683:2;7672:9;7668:18;7661:34;7731:3;7726:2;7715:9;7711:18;7704:31;7755:6;7790;7784:13;7821:6;7813;7806:22;7859:3;7848:9;7844:19;7837:26;;7898:2;7890:6;7886:15;7872:29;;7919:1;7929:195;7943:6;7940:1;7937:13;7929:195;;;8008:13;;-1:-1:-1;;;;;8004:39:1;7992:52;;8099:15;;;;8064:12;;;;8040:1;7958:9;7929:195;;;-1:-1:-1;;;;;;;8180:32:1;;;;8175:2;8160:18;;8153:60;-1:-1:-1;;;8244:3:1;8229:19;8222:35;8141:3;7283:980;-1:-1:-1;;;7283:980:1:o;8880:306::-;8968:6;8976;8984;9037:2;9025:9;9016:7;9012:23;9008:32;9005:52;;;9053:1;9050;9043:12;9005:52;9082:9;9076:16;9066:26;;9132:2;9121:9;9117:18;9111:25;9101:35;;9176:2;9165:9;9161:18;9155:25;9145:35;;8880:306;;;;;:::o;9191:197::-;-1:-1:-1;;;;;9313:10:1;;;9325;;;9309:27;;9348:11;;;9345:37;;;9362:18;;:::i;:::-;9345:37;9191:197;;;;:::o;9393:168::-;9466:9;;;9497;;9514:15;;;9508:22;;9494:37;9484:71;;9535:18;;:::i;9776:148::-;9864:4;9843:12;;;9857;;;9839:31;;9882:13;;9879:39;;;9898:18;;:::i
Swarm Source
ipfs://6b7e0f8443b1a8a95714a7271459788170134908a2db2e70f7a3f11f12e34d6b
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.