Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 22 from a total of 22 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer Ownersh... | 23746041 | 3 days ago | IN | 0 ETH | 0.00007219 | ||||
| Set Sell Tax | 23674615 | 13 days ago | IN | 0 ETH | 0.00007459 | ||||
| Set Buy Tax | 23674611 | 13 days ago | IN | 0 ETH | 0.00007477 | ||||
| Set Sell Tax | 23503951 | 36 days ago | IN | 0 ETH | 0.00005113 | ||||
| Set Buy Tax | 23503947 | 36 days ago | IN | 0 ETH | 0.00005168 | ||||
| Disable Tax | 23503299 | 37 days ago | IN | 0 ETH | 0.00003222 | ||||
| Transfer | 23502989 | 37 days ago | IN | 0 ETH | 0.00006001 | ||||
| Set Buy Tax | 23502940 | 37 days ago | IN | 0 ETH | 0.0000498 | ||||
| Set Sell Tax | 23502937 | 37 days ago | IN | 0 ETH | 0.00004973 | ||||
| Approve | 23502921 | 37 days ago | IN | 0 ETH | 0.00020436 | ||||
| Set Sell Tax | 23502899 | 37 days ago | IN | 0 ETH | 0.00004937 | ||||
| Enable Tax | 23502883 | 37 days ago | IN | 0 ETH | 0.00003189 | ||||
| Set Buy Tax | 23502880 | 37 days ago | IN | 0 ETH | 0.00004971 | ||||
| Disable Tax | 23502851 | 37 days ago | IN | 0 ETH | 0.00003162 | ||||
| Set Slippage Bps | 23502772 | 37 days ago | IN | 0 ETH | 0.00003236 | ||||
| Transfer | 23502698 | 37 days ago | IN | 0 ETH | 0.00008407 | ||||
| Set Slippage Bps | 23502649 | 37 days ago | IN | 0 ETH | 0.00003195 | ||||
| Enable Tax | 23498323 | 37 days ago | IN | 0 ETH | 0.00008428 | ||||
| Disable Tax | 23498293 | 37 days ago | IN | 0 ETH | 0.0000603 | ||||
| Approve | 23498195 | 37 days ago | IN | 0 ETH | 0.00008232 | ||||
| Approve | 23498170 | 37 days ago | IN | 0 ETH | 0.00013706 | ||||
| Transfer | 23498136 | 37 days ago | IN | 0 ETH | 0.00013073 |
Latest 13 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
To
|
|||
|---|---|---|---|---|---|---|---|
| Transfer | 23502954 | 37 days ago | 0.00002455 ETH | ||||
| Transfer | 23502954 | 37 days ago | 0.0000491 ETH | ||||
| Transfer | 23502954 | 37 days ago | 0.0000491 ETH | ||||
| Transfer | 23502954 | 37 days ago | 0.0000491 ETH | ||||
| Add Liquidity ET... | 23502954 | 37 days ago | 0.00002455 ETH | ||||
| Transfer | 23502954 | 37 days ago | 0.00019643 ETH | ||||
| Transfer | 23502923 | 37 days ago | 0.00458501 ETH | ||||
| Transfer | 23502923 | 37 days ago | 0.00917002 ETH | ||||
| Transfer | 23502923 | 37 days ago | 0.00917002 ETH | ||||
| Transfer | 23502923 | 37 days ago | 0.00917002 ETH | ||||
| Add Liquidity ET... | 23502923 | 37 days ago | 0.00458501 ETH | ||||
| Transfer | 23502923 | 37 days ago | 0.0366801 ETH | ||||
| Transfer | 23496453 | 38 days ago | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CoinToken
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-10-03
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount)
external
returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender)
external
view
returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
/**
* @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);
}
/*
* @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account)
public
view
virtual
override
returns (uint256)
{
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount)
public
virtual
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender)
public
view
virtual
override
returns (uint256)
{
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
unchecked {
_approve(sender, _msgSender(), currentAllowance - 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)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][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)
{
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(
senderBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev 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 {}
}
/**
* @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() {}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(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"
);
_setOwner(newOwner);
}
function _setOwner(address newOwner) internal {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
modifier nonReentrant() {
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
}
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
require(!paused(), "Pausable: paused");
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
require(paused(), "Pausable: not paused");
_;
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
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 Mint(address indexed sender, uint256 amount0, uint256 amount1);
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 mint(address to) external returns (uint256 liquidity);
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;
}
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 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;
}
contract CoinToken is ERC20, Ownable, Pausable, ReentrancyGuard {
// CONFIG START
bool private _inSwap;
uint256 public slippageBps = 500; // default 5%
uint256 private initialSupply;
uint256 private denominator = 100;
uint256 private swapThreshold = 0.0000005 ether; // The contract will only swap to ETH, once the fee tokens reach the specified threshold
uint256 private devTaxBuy;
uint256 private marketingTaxBuy;
uint256 private liquidityTaxBuy;
uint256 private charityTaxBuy;
uint256 private devTaxSell;
uint256 private marketingTaxSell;
uint256 private liquidityTaxSell;
uint256 private charityTaxSell;
address private devTaxWallet;
address private marketingTaxWallet;
address private liquidityTaxWallet;
address private charityTaxWallet;
// CONFIG END
mapping(address => bool) private blacklist;
mapping(address => bool) private excludeList;
mapping(string => uint256) private buyTaxes;
mapping(string => uint256) private sellTaxes;
mapping(string => address) private taxWallets;
bool public taxStatus = true;
IUniswapV2Router02 private uniswapV2Router02;
IUniswapV2Factory private uniswapV2Factory;
IUniswapV2Pair private uniswapV2Pair;
constructor(
string memory _tokenName,
string memory _tokenSymbol,
uint256 _supply,
address[6] memory _addr,
uint256[8] memory _value
) payable ERC20(_tokenName, _tokenSymbol) {
initialSupply = _supply * (10**18);
_setOwner(_addr[5]);
uniswapV2Router02 = IUniswapV2Router02(_addr[1]);
uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
uniswapV2Pair = IUniswapV2Pair(
uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH())
);
taxWallets["liquidity"] = _addr[0];
setBuyTax(_value[0], _value[1], _value[2], _value[3]);
setSellTax(_value[4], _value[5], _value[7], _value[6]);
setTaxWallets(_addr[2], _addr[3], _addr[4]);
exclude(msg.sender);
exclude(address(this));
payable(_addr[0]).transfer(msg.value);
_mint(msg.sender, initialSupply);
}
uint256 private marketingTokens;
uint256 private devTokens;
uint256 private liquidityTokens;
uint256 private charityTokens;
/**
* @dev Calculates the tax, transfer it to the contract. If the user is selling, and the swap threshold is met, it executes the tax.
*/
function handleTax(
address from,
address to,
uint256 amount
) private returns (uint256) {
address[] memory sellPath = new address[](2);
sellPath[0] = address(this);
sellPath[1] = uniswapV2Router02.WETH();
if (!isExcluded(from) && !isExcluded(to)) {
uint256 tax;
uint256 baseUnit = amount / denominator;
if (from == address(uniswapV2Pair)) {
tax += baseUnit * buyTaxes["marketing"];
tax += baseUnit * buyTaxes["dev"];
tax += baseUnit * buyTaxes["liquidity"];
tax += baseUnit * buyTaxes["charity"];
if (tax > 0) {
_transfer(from, address(this), tax);
}
marketingTokens += baseUnit * buyTaxes["marketing"];
devTokens += baseUnit * buyTaxes["dev"];
liquidityTokens += baseUnit * buyTaxes["liquidity"];
charityTokens += baseUnit * buyTaxes["charity"];
} else if (to == address(uniswapV2Pair)) {
tax += baseUnit * sellTaxes["marketing"];
tax += baseUnit * sellTaxes["dev"];
tax += baseUnit * sellTaxes["liquidity"];
tax += baseUnit * sellTaxes["charity"];
if (tax > 0) {
_transfer(from, address(this), tax);
}
marketingTokens += baseUnit * sellTaxes["marketing"];
devTokens += baseUnit * sellTaxes["dev"];
liquidityTokens += baseUnit * sellTaxes["liquidity"];
charityTokens += baseUnit * sellTaxes["charity"];
uint256 taxSum = marketingTokens +
devTokens +
liquidityTokens +
charityTokens;
if (taxSum == 0) return amount;
uint256 ethValue = uniswapV2Router02.getAmountsOut(
marketingTokens +
devTokens +
liquidityTokens +
charityTokens,
sellPath
)[1];
if (ethValue >= swapThreshold) {
// amountOutMin = quote * (1 - slippageBps/10_000)
uint256 minOut = (ethValue * (10_000 - slippageBps)) /
10_000;
_swapAndDistribute(sellPath, taxSum, minOut);
}
}
amount -= tax;
}
return amount;
}
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual override {
require(!paused(), "CoinToken: token transfer while paused");
require(!isBlacklisted(msg.sender), "CoinToken: sender blacklisted");
require(!isBlacklisted(recipient), "CoinToken: recipient blacklisted");
if (taxStatus && !_inSwap) {
amount = handleTax(sender, recipient, amount);
}
super._transfer(sender, recipient, amount);
}
/**
* @dev Triggers the tax handling functionality
*/
function triggerTax() public onlyOwner {
handleTax(address(0), address(uniswapV2Pair), 0);
}
/**
* @dev Pauses transfers on the token.
*/
function pause() public onlyOwner {
require(!paused(), "CoinToken: Contract is already paused");
_pause();
}
/**
* @dev Unpauses transfers on the token.
*/
function unpause() public onlyOwner {
require(paused(), "CoinToken: Contract is not paused");
_unpause();
}
/**
* @dev Burns tokens from caller address.
*/
function burn(uint256 amount) public onlyOwner {
_burn(msg.sender, amount);
}
/**
* @dev Blacklists the specified account (Disables transfers to and from the account).
*/
function enableBlacklist(address account) public onlyOwner {
require(
!blacklist[account],
"CoinToken: Account is already blacklisted"
);
blacklist[account] = true;
}
/**
* @dev Remove the specified account from the blacklist.
*/
function disableBlacklist(address account) public onlyOwner {
require(blacklist[account], "CoinToken: Account is not blacklisted");
blacklist[account] = false;
}
/**
* @dev Excludes the specified account from tax.
*/
function exclude(address account) public onlyOwner {
require(!isExcluded(account), "CoinToken: Account is already excluded");
excludeList[account] = true;
}
/**
* @dev Re-enables tax on the specified account.
*/
function removeExclude(address account) public onlyOwner {
require(isExcluded(account), "CoinToken: Account is not excluded");
excludeList[account] = false;
}
/**
* @dev Sets tax for buys.
*/
function setBuyTax(
uint256 dev,
uint256 marketing,
uint256 liquidity,
uint256 charity
) public onlyOwner {
buyTaxes["dev"] = dev;
buyTaxes["marketing"] = marketing;
buyTaxes["liquidity"] = liquidity;
buyTaxes["charity"] = charity;
}
/**
* @dev Sets slippage
*/
function setSlippageBps(uint256 bps) external onlyOwner {
require(bps <= 10_000, "Slippage: invalid bps");
slippageBps = bps;
}
/**
* @dev Sets swap Threshold
*/
function setSwapThreshold(uint256 _newAmount) external onlyOwner{
require(_newAmount > 0, "Invalid Amount");
swapThreshold = _newAmount;
}
/**
* @dev Sets tax for sells.
*/
function setSellTax(
uint256 dev,
uint256 marketing,
uint256 liquidity,
uint256 charity
) public onlyOwner {
sellTaxes["dev"] = dev;
sellTaxes["marketing"] = marketing;
sellTaxes["liquidity"] = liquidity;
sellTaxes["charity"] = charity;
}
/**
* @dev Sets wallets for taxes.
*/
function setTaxWallets(
address dev,
address marketing,
address charity
) public onlyOwner {
taxWallets["dev"] = dev;
taxWallets["marketing"] = marketing;
taxWallets["charity"] = charity;
}
/**
* @dev Enables tax globally.
*/
function enableTax() public onlyOwner {
require(!taxStatus, "CoinToken: Tax is already enabled");
taxStatus = true;
}
/**
* @dev Disables tax globally.
*/
function disableTax() public onlyOwner {
require(taxStatus, "CoinToken: Tax is already disabled");
taxStatus = false;
}
/**
* @dev Returns true if the account is blacklisted, and false otherwise.
*/
function isBlacklisted(address account) public view returns (bool) {
return blacklist[account];
}
/**
* @dev Returns true if the account is excluded, and false otherwise.
*/
function isExcluded(address account) public view returns (bool) {
return excludeList[account];
}
function _swapAndDistribute(
address[] memory sellPath,
uint256 taxSum,
uint256 amountOutMin
) internal nonReentrant {
// enter mutex to prevent handleTax from running during router callbacks
_inSwap = true;
uint256 startBalance = address(this).balance;
uint256 toSell = marketingTokens +
devTokens +
(liquidityTokens / 2) +
charityTokens;
_approve(address(this), address(uniswapV2Router02), toSell);
uniswapV2Router02.swapExactTokensForETH(
toSell,
amountOutMin,
sellPath,
address(this),
block.timestamp
);
uint256 ethGained = address(this).balance - startBalance;
uint256 liquidityToken = liquidityTokens / 2;
uint256 liquidityETH = (ethGained *
(((liquidityTokens / 2) * 10**18) / taxSum)) / 10**18;
uint256 marketingETH = (ethGained *
((marketingTokens * 10**18) / taxSum)) / 10**18;
uint256 devETH = (ethGained * ((devTokens * 10**18) / taxSum)) / 10**18;
uint256 charityETH = (ethGained * ((charityTokens * 10**18) / taxSum)) /
10**18;
_approve(address(this), address(uniswapV2Router02), liquidityToken);
(uint256 amountToken, , ) = uniswapV2Router02.addLiquidityETH{
value: liquidityETH
}(
address(this),
liquidityToken,
0,
0,
taxWallets["liquidity"],
block.timestamp
);
uint256 remainingTokens = (marketingTokens +
devTokens +
liquidityTokens +
charityTokens) - (toSell + amountToken);
if (remainingTokens > 0) {
_transfer(address(this), taxWallets["dev"], remainingTokens);
}
(bool s1, ) = taxWallets["marketing"].call{value: marketingETH}("");
require(s1, "Marketing ETH transfer failed");
(bool s2, ) = taxWallets["dev"].call{value: devETH}("");
require(s2, "Dev ETH transfer failed");
(bool s3, ) = taxWallets["charity"].call{value: charityETH}("");
require(s3, "Charity ETH transfer failed");
uint256 dust = ethGained -
(marketingETH + devETH + liquidityETH + charityETH);
if (dust > 0) {
(bool s4, ) = taxWallets["marketing"].call{value: dust}("");
require(s4, "Dust ETH transfer failed");
}
// reset accumulators
marketingTokens = 0;
devTokens = 0;
liquidityTokens = 0;
charityTokens = 0;
// leave mutex
_inSwap = false;
}
function rescueETH(uint256 amount, address payable to) external onlyOwner {
require(to != address(0), "Rescue: zero address");
uint256 bal = address(this).balance;
uint256 sendAmt = (amount == 0 || amount > bal) ? bal : amount;
(bool ok, ) = to.call{value: sendAmt}("");
require(ok, "Rescue: ETH transfer failed");
}
function rescueTokens(
address token,
uint256 amount,
address to
) external onlyOwner {
require(to != address(0), "Rescue: zero address");
require(token != address(this), "Rescue: cannot rescue this token");
uint256 bal = IERC20(token).balanceOf(address(this));
uint256 sendAmt = (amount == 0 || amount > bal) ? bal : amount;
require(sendAmt > 0, "Rescue: zero balance");
bool ok = IERC20(token).transfer(to, sendAmt);
require(ok, "Rescue: token transfer failed");
}
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"address[6]","name":"_addr","type":"address[6]"},{"internalType":"uint256[8]","name":"_value","type":"uint256[8]"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"enableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"setSlippageBps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"charity","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slippageBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060408190526101f46008556064600a5564746a528800600b55601d805460ff19166001179055613c3a388190039081908339810160408190526100439161090e565b848460036100518382610a66565b50600461005e8282610a66565b50506005805460ff60a01b1916905550600160065561008583670de0b6b3a7640000610b34565b60095560a08201516100969061032c565b602082810151601d8054610100600160a81b0319166101006001600160a01b03938416810291909117918290556040805163c45a015560e01b81529051919092049092169263c45a0155926004808401938290030181865afa1580156100fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101229190610b51565b601e80546001600160a01b0319166001600160a01b03928316908117909155601d54604080516315ab88c960e31b81529051929363c9c6539693309361010090049091169163ad5c46489160048083019260209291908290030181865afa15801561018f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b39190610b51565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156101fd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102219190610b51565b601f80546001600160a01b039283166001600160a01b031991821617909155835160408051686c697175696469747960b81b8152601c600982015281519081900360290190208054909316919093161790558151602083015191830151606084015161028e93919061037d565b608081015160a082015160e083015160c08401516102ae9392919061046c565b6040820151606083015160808401516102c8929190610544565b6102d133610632565b6102da30610632565b81516040516001600160a01b03909116903480156108fc02915f818181858888f1935050505015801561030f573d5f5f3e3d5ffd5b506103223360095461071360201b60201c565b5050505050610b84565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b031633146103c95760405162461bcd60e51b815260206004820181905260248201525f516020613c1a5f395f51905f5260448201526064015b60405180910390fd5b83601a6040516103e290623232bb60e91b815260030190565b9081526040805191829003602001822092909255686d61726b6574696e6760b81b8152601a600980830182905283519283900360299081018420889055686c697175696469747960b81b84529083018290529251918290039092018120849055666368617269747960c81b81528291906007015b9081526040519081900360200190205550505050565b6005546001600160a01b031633146104b35760405162461bcd60e51b815260206004820181905260248201525f516020613c1a5f395f51905f5260448201526064016103c0565b83601b6040516104cc90623232bb60e91b815260030190565b9081526040805191829003602001822092909255686d61726b6574696e6760b81b8152601b600980830182905283519283900360299081018420889055686c697175696469747960b81b84529083018290529251918290039092018120849055666368617269747960c81b8152829190600701610456565b6005546001600160a01b0316331461058b5760405162461bcd60e51b815260206004820181905260248201525f516020613c1a5f395f51905f5260448201526064016103c0565b82601c6040516105a490623232bb60e91b815260030190565b9081526040805191829003602001822080546001600160a01b039485166001600160a01b031991821617909155686d61726b6574696e6760b81b8352601c600984018190528251938490036029018420805497861697831697909717909655666368617269747960c81b83526007830195909552519081900360270190208054929091169190921617905550565b6005546001600160a01b031633146106795760405162461bcd60e51b815260206004820181905260248201525f516020613c1a5f395f51905f5260448201526064016103c0565b6001600160a01b0381165f9081526019602052604090205460ff16156106f05760405162461bcd60e51b815260206004820152602660248201527f436f696e546f6b656e3a204163636f756e7420697320616c726561647920657860448201526518db1d59195960d21b60648201526084016103c0565b6001600160a01b03165f908152601960205260409020805460ff19166001179055565b6001600160a01b0382166107695760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c0565b8060025f82825461077a9190610b71565b90915550506001600160a01b0382165f90815260208190526040812080548392906107a6908490610b71565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610830576108306107f4565b604052919050565b5f82601f830112610847575f5ffd5b81516001600160401b03811115610860576108606107f4565b610873601f8201601f1916602001610808565b818152846020838601011115610887575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146108b9575f5ffd5b919050565b5f82601f8301126108cd575f5ffd5b6101006108d981610808565b9083019080858311156108ea575f5ffd5b845b838110156109045780518352602092830192016108ec565b5095945050505050565b5f5f5f5f5f6102208688031215610923575f5ffd5b85516001600160401b03811115610938575f5ffd5b61094488828901610838565b602088015190965090506001600160401b03811115610961575f5ffd5b61096d88828901610838565b6040880151909550935050607f86018713610986575f5ffd5b61099060c0610808565b806101208801898111156109a2575f5ffd5b606089015b818110156109c6576109b8816108a3565b8452602093840193016109a7565b508194506109d48a826108be565b93505050509295509295909350565b600181811c908216806109f757607f821691505b602082108103610a1557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156107ef57805f5260205f20601f840160051c81016020851015610a405750805b601f840160051c820191505b81811015610a5f575f8155600101610a4c565b5050505050565b81516001600160401b03811115610a7f57610a7f6107f4565b610a9381610a8d84546109e3565b84610a1b565b6020601f821160018114610ac5575f8315610aae5750848201515b5f19600385901b1c1916600184901b178455610a5f565b5f84815260208120601f198516915b82811015610af45787850151825560209485019460019092019101610ad4565b5084821015610b1157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b4b57610b4b610b20565b92915050565b5f60208284031215610b61575f5ffd5b610b6a826108a3565b9392505050565b80820180821115610b4b57610b4b610b20565b61308980610b915f395ff3fe60806040526004361061020a575f3560e01c80638456cb5911610113578063a9059cbb1161009d578063ced695a41161006d578063ced695a4146105d0578063cfefd79e146105e4578063dd62ed3e14610603578063f2fde38b14610647578063fe575a8714610666575f5ffd5b8063a9059cbb1461053c578063abe4f11d1461055b578063b37fd1901461057a578063cba0e99614610599575f5ffd5b80639d0014b1116100e35780639d0014b1146104a15780639fda0581146104c0578063a0558c3f146104df578063a457c2d7146104fe578063a82cfe8b1461051d575f5ffd5b80638456cb591461043357806384666b08146104475780638da5cb5b1461046657806395d89b411461048d575f5ffd5b80633f4ba83a11610194578063578c71d911610164578063578c71d9146103995780635c975abb146103ae57806370a08231146103cc578063715018a614610400578063717a865114610414575f5ffd5b80633f4ba83a1461033357806342966c68146103475780634febf53d1461036657806353eb3bcf14610385575f5ffd5b806323a38a38116101da57806323a38a38146102ad57806323b872dd146102c65780632c32abc2146102e5578063313ce567146102f95780633950935114610314575f5ffd5b806306fdde0314610215578063095ea7b31461023f57806318160ddd1461026e5780631a3ce4e61461028c575f5ffd5b3661021157005b5f5ffd5b348015610220575f5ffd5b5061022961069d565b6040516102369190612b38565b60405180910390f35b34801561024a575f5ffd5b5061025e610259366004612b81565b61072d565b6040519015158152602001610236565b348015610279575f5ffd5b506002545b604051908152602001610236565b348015610297575f5ffd5b506102ab6102a6366004612bab565b610743565b005b3480156102b8575f5ffd5b50601d5461025e9060ff1681565b3480156102d1575f5ffd5b5061025e6102e0366004612bc2565b6107c5565b3480156102f0575f5ffd5b506102ab61086f565b348015610304575f5ffd5b5060405160128152602001610236565b34801561031f575f5ffd5b5061025e61032e366004612b81565b6108b4565b34801561033e575f5ffd5b506102ab6108ef565b348015610352575f5ffd5b506102ab610361366004612bab565b610986565b348015610371575f5ffd5b506102ab610380366004612c00565b6109ba565b348015610390575f5ffd5b506102ab610a7e565b3480156103a4575f5ffd5b5061027e60085481565b3480156103b9575f5ffd5b50600554600160a01b900460ff1661025e565b3480156103d7575f5ffd5b5061027e6103e6366004612c00565b6001600160a01b03165f9081526020819052604090205490565b34801561040b575f5ffd5b506102ab610b14565b34801561041f575f5ffd5b506102ab61042e366004612c00565b610b47565b34801561043e575f5ffd5b506102ab610c0e565b348015610452575f5ffd5b506102ab610461366004612c1b565b610ca8565b348015610471575f5ffd5b506005546040516001600160a01b039091168152602001610236565b348015610498575f5ffd5b50610229610d5a565b3480156104ac575f5ffd5b506102ab6104bb366004612bab565b610d69565b3480156104cb575f5ffd5b506102ab6104da366004612c4a565b610dd8565b3480156104ea575f5ffd5b506102ab6104f9366004612c92565b610ec5565b348015610509575f5ffd5b5061025e610518366004612b81565b610ffe565b348015610528575f5ffd5b506102ab610537366004612c1b565b611096565b348015610547575f5ffd5b5061025e610556366004612b81565b611132565b348015610566575f5ffd5b506102ab610575366004612c00565b61113e565b348015610585575f5ffd5b506102ab610594366004612cc0565b6111fa565b3480156105a4575f5ffd5b5061025e6105b3366004612c00565b6001600160a01b03165f9081526019602052604090205460ff1690565b3480156105db575f5ffd5b506102ab61145e565b3480156105ef575f5ffd5b506102ab6105fe366004612c00565b6114f1565b34801561060e575f5ffd5b5061027e61061d366004612cf4565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610652575f5ffd5b506102ab610661366004612c00565b6115b0565b348015610671575f5ffd5b5061025e610680366004612c00565b6001600160a01b03165f9081526018602052604090205460ff1690565b6060600380546106ac90612d20565b80601f01602080910402602001604051908101604052809291908181526020018280546106d890612d20565b80156107235780601f106106fa57610100808354040283529160200191610723565b820191905f5260205f20905b81548152906001019060200180831161070657829003601f168201915b5050505050905090565b5f610739338484611648565b5060015b92915050565b6005546001600160a01b031633146107765760405162461bcd60e51b815260040161076d90612d58565b60405180910390fd5b6127108111156107c05760405162461bcd60e51b8152602060048201526015602482015274536c6970706167653a20696e76616c69642062707360581b604482015260640161076d565b600855565b5f6107d184848461176b565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156108555760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161076d565b6108628533858403611648565b60019150505b9392505050565b6005546001600160a01b031633146108995760405162461bcd60e51b815260040161076d90612d58565b601f546108b1905f906001600160a01b0316816118d3565b50565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107399185906108ea908690612da1565b611648565b6005546001600160a01b031633146109195760405162461bcd60e51b815260040161076d90612d58565b600554600160a01b900460ff1661097c5760405162461bcd60e51b815260206004820152602160248201527f436f696e546f6b656e3a20436f6e7472616374206973206e6f742070617573656044820152601960fa1b606482015260840161076d565b610984611f79565b565b6005546001600160a01b031633146109b05760405162461bcd60e51b815260040161076d90612d58565b6108b13382612016565b6005546001600160a01b031633146109e45760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381165f9081526019602052604090205460ff1615610a5b5760405162461bcd60e51b815260206004820152602660248201527f436f696e546f6b656e3a204163636f756e7420697320616c726561647920657860448201526518db1d59195960d21b606482015260840161076d565b6001600160a01b03165f908152601960205260409020805460ff19166001179055565b6005546001600160a01b03163314610aa85760405162461bcd60e51b815260040161076d90612d58565b601d5460ff1615610b055760405162461bcd60e51b815260206004820152602160248201527f436f696e546f6b656e3a2054617820697320616c726561647920656e61626c656044820152601960fa1b606482015260840161076d565b601d805460ff19166001179055565b6005546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161076d90612d58565b6109845f612161565b6005546001600160a01b03163314610b715760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381165f9081526018602052604090205460ff1615610beb5760405162461bcd60e51b815260206004820152602960248201527f436f696e546f6b656e3a204163636f756e7420697320616c726561647920626c6044820152681858dadb1a5cdd195960ba1b606482015260840161076d565b6001600160a01b03165f908152601860205260409020805460ff19166001179055565b6005546001600160a01b03163314610c385760405162461bcd60e51b815260040161076d90612d58565b600554600160a01b900460ff1615610ca05760405162461bcd60e51b815260206004820152602560248201527f436f696e546f6b656e3a20436f6e747261637420697320616c72656164792070604482015264185d5cd95960da1b606482015260840161076d565b6109846121b2565b6005546001600160a01b03163314610cd25760405162461bcd60e51b815260040161076d90612d58565b83601b604051610ce190612db4565b90815260200160405180910390208190555082601b604051610d0290612dc3565b90815260200160405180910390208190555081601b604051610d2390612dd8565b90815260200160405180910390208190555080601b604051610d4490612ded565b9081526040519081900360200190205550505050565b6060600480546106ac90612d20565b6005546001600160a01b03163314610d935760405162461bcd60e51b815260040161076d90612d58565b5f8111610dd35760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b604482015260640161076d565b600b55565b6005546001600160a01b03163314610e025760405162461bcd60e51b815260040161076d90612d58565b82601c604051610e1190612db4565b90815260200160405180910390205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555081601c604051610e5190612dc3565b90815260200160405180910390205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555080601c604051610e9190612ded565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b6005546001600160a01b03163314610eef5760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b038116610f3c5760405162461bcd60e51b81526020600482015260146024820152735265736375653a207a65726f206164647265737360601b604482015260640161076d565b475f831580610f4a57508184115b610f545783610f56565b815b90505f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610fa1576040519150601f19603f3d011682016040523d82523d5f602084013e610fa6565b606091505b5050905080610ff75760405162461bcd60e51b815260206004820152601b60248201527f5265736375653a20455448207472616e73666572206661696c65640000000000604482015260640161076d565b5050505050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561107f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161076d565b61108c3385858403611648565b5060019392505050565b6005546001600160a01b031633146110c05760405162461bcd60e51b815260040161076d90612d58565b83601a6040516110cf90612db4565b90815260200160405180910390208190555082601a6040516110f090612dc3565b90815260200160405180910390208190555081601a60405161111190612dd8565b90815260200160405180910390208190555080601a604051610d4490612ded565b5f61073933848461176b565b6005546001600160a01b031633146111685760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381165f9081526019602052604090205460ff166111da5760405162461bcd60e51b815260206004820152602260248201527f436f696e546f6b656e3a204163636f756e74206973206e6f74206578636c7564604482015261195960f21b606482015260840161076d565b6001600160a01b03165f908152601960205260409020805460ff19169055565b6005546001600160a01b031633146112245760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381166112715760405162461bcd60e51b81526020600482015260146024820152735265736375653a207a65726f206164647265737360601b604482015260640161076d565b306001600160a01b038416036112c95760405162461bcd60e51b815260206004820181905260248201527f5265736375653a2063616e6e6f7420726573637565207468697320746f6b656e604482015260640161076d565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561130d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113319190612e00565b90505f83158061134057508184115b61134a578361134c565b815b90505f81116113945760405162461bcd60e51b81526020600482015260146024820152735265736375653a207a65726f2062616c616e636560601b604482015260640161076d565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390525f919087169063a9059cbb906044016020604051808303815f875af11580156113e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114079190612e17565b9050806114565760405162461bcd60e51b815260206004820152601d60248201527f5265736375653a20746f6b656e207472616e73666572206661696c6564000000604482015260640161076d565b505050505050565b6005546001600160a01b031633146114885760405162461bcd60e51b815260040161076d90612d58565b601d5460ff166114e55760405162461bcd60e51b815260206004820152602260248201527f436f696e546f6b656e3a2054617820697320616c72656164792064697361626c604482015261195960f21b606482015260840161076d565b601d805460ff19169055565b6005546001600160a01b0316331461151b5760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381165f9081526018602052604090205460ff166115905760405162461bcd60e51b815260206004820152602560248201527f436f696e546f6b656e3a204163636f756e74206973206e6f7420626c61636b6c6044820152641a5cdd195960da1b606482015260840161076d565b6001600160a01b03165f908152601860205260409020805460ff19169055565b6005546001600160a01b031633146115da5760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b03811661163f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076d565b6108b181612161565b6001600160a01b0383166116aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076d565b6001600160a01b03821661170b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076d565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600554600160a01b900460ff16156117d45760405162461bcd60e51b815260206004820152602660248201527f436f696e546f6b656e3a20746f6b656e207472616e73666572207768696c65206044820152651c185d5cd95960d21b606482015260840161076d565b335f9081526018602052604090205460ff16156118335760405162461bcd60e51b815260206004820152601d60248201527f436f696e546f6b656e3a2073656e64657220626c61636b6c6973746564000000604482015260640161076d565b6001600160a01b0382165f9081526018602052604090205460ff161561189b5760405162461bcd60e51b815260206004820181905260248201527f436f696e546f6b656e3a20726563697069656e7420626c61636b6c6973746564604482015260640161076d565b601d5460ff1680156118b0575060075460ff16155b156118c3576118c08383836118d3565b90505b6118ce83838361223a565b505050565b6040805160028082526060820183525f928392919060208301908036833701905050905030815f8151811061190a5761190a612e4a565b60200260200101906001600160a01b031690816001600160a01b031681525050601d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561197b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199f9190612e5e565b816001815181106119b2576119b2612e4a565b60200260200101906001600160a01b031690816001600160a01b0316815250506119f3856001600160a01b03165f9081526019602052604090205460ff1690565b158015611a1857506001600160a01b0384165f9081526019602052604090205460ff16155b15611f70575f5f600a5485611a2d9190612e79565b601f549091506001600160a01b0390811690881603611c2457601a604051611a5490612dc3565b90815260200160405180910390205481611a6e9190612e98565b611a789083612da1565b9150601a604051611a8890612db4565b90815260200160405180910390205481611aa29190612e98565b611aac9083612da1565b9150601a604051611abc90612dd8565b90815260200160405180910390205481611ad69190612e98565b611ae09083612da1565b9150601a604051611af090612ded565b90815260200160405180910390205481611b0a9190612e98565b611b149083612da1565b91508115611b2757611b2787308461176b565b601a604051611b3590612dc3565b90815260200160405180910390205481611b4f9190612e98565b60205f828254611b5f9190612da1565b9091555050604051601a90611b7390612db4565b90815260200160405180910390205481611b8d9190612e98565b60215f828254611b9d9190612da1565b9091555050604051601a90611bb190612dd8565b90815260200160405180910390205481611bcb9190612e98565b60225f828254611bdb9190612da1565b9091555050604051601a90611bef90612ded565b90815260200160405180910390205481611c099190612e98565b60235f828254611c199190612da1565b90915550611f619050565b601f546001600160a01b0390811690871603611f6157601b604051611c4890612dc3565b90815260200160405180910390205481611c629190612e98565b611c6c9083612da1565b9150601b604051611c7c90612db4565b90815260200160405180910390205481611c969190612e98565b611ca09083612da1565b9150601b604051611cb090612dd8565b90815260200160405180910390205481611cca9190612e98565b611cd49083612da1565b9150601b604051611ce490612ded565b90815260200160405180910390205481611cfe9190612e98565b611d089083612da1565b91508115611d1b57611d1b87308461176b565b601b604051611d2990612dc3565b90815260200160405180910390205481611d439190612e98565b60205f828254611d539190612da1565b9091555050604051601b90611d6790612db4565b90815260200160405180910390205481611d819190612e98565b60215f828254611d919190612da1565b9091555050604051601b90611da590612dd8565b90815260200160405180910390205481611dbf9190612e98565b60225f828254611dcf9190612da1565b9091555050604051601b90611de390612ded565b90815260200160405180910390205481611dfd9190612e98565b60235f828254611e0d9190612da1565b925050819055505f602354602254602154602054611e2b9190612da1565b611e359190612da1565b611e3f9190612da1565b9050805f03611e545785945050505050610868565b5f601d60019054906101000a90046001600160a01b03166001600160a01b031663d06ca61f602354602254602154602054611e8f9190612da1565b611e999190612da1565b611ea39190612da1565b876040518363ffffffff1660e01b8152600401611ec1929190612ef2565b5f60405180830381865afa158015611edb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f029190810190612f12565b600181518110611f1457611f14612e4a565b60200260200101519050600b548110611f5e575f612710600854612710611f3b9190612fda565b611f459084612e98565b611f4f9190612e79565b9050611f5c868483612407565b505b50505b611f6b8286612fda565b945050505b50909392505050565b600554600160a01b900460ff16611fc95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161076d565b6005805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166120765760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076d565b6001600160a01b0382165f90815260208190526040902054818110156120e95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161076d565b6001600160a01b0383165f908152602081905260408120838303905560028054849290612117908490612fda565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600554600160a01b900460ff16156121ff5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161076d565b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ff93390565b6001600160a01b03831661229e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161076d565b6001600160a01b0382166123005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161076d565b6001600160a01b0383165f90815260208190526040902054818110156123775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161076d565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906123ad908490612da1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123f991815260200190565b60405180910390a350505050565b6002600654036124595760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161076d565b600260068190556007805460ff1916600117905560235460225447925f92916124829190612e79565b6021546020546124929190612da1565b61249c9190612da1565b6124a69190612da1565b90506124c830601d60019054906101000a90046001600160a01b031683611648565b601d546040516318cbafe560e01b81526101009091046001600160a01b0316906318cbafe59061250490849087908a9030904290600401612fed565b5f604051808303815f875af115801561251f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125469190810190612f12565b505f6125528347612fda565b90505f60026022546125649190612e79565b90505f670de0b6b3a76400008760026022546125809190612e79565b61259290670de0b6b3a7640000612e98565b61259c9190612e79565b6125a69085612e98565b6125b09190612e79565b90505f670de0b6b3a764000088602054670de0b6b3a76400006125d39190612e98565b6125dd9190612e79565b6125e79086612e98565b6125f19190612e79565b90505f670de0b6b3a764000089602154670de0b6b3a76400006126149190612e98565b61261e9190612e79565b6126289087612e98565b6126329190612e79565b90505f670de0b6b3a76400008a602354670de0b6b3a76400006126559190612e98565b61265f9190612e79565b6126699088612e98565b6126739190612e79565b905061269530601d60019054906101000a90046001600160a01b031687611648565b5f601d60019054906101000a90046001600160a01b03166001600160a01b031663f305d7198630895f5f601c6040516126cd90612dd8565b908152604051908190036020018120546001600160e01b031960e089901b1682526001600160a01b039586166004830152602482019490945260448101929092526064820152911660848201524260a482015260c40160606040518083038185885af115801561273f573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906127649190613028565b505090505f81896127759190612da1565b60235460225460215460205461278b9190612da1565b6127959190612da1565b61279f9190612da1565b6127a99190612fda565b905080156127e2576127e230601c6040516127c390612db4565b908152604051908190036020019020546001600160a01b03168361176b565b5f601c6040516127f190612dc3565b908152604051908190036020018120546001600160a01b03169087905f6040518083038185875af1925050503d805f8114612847576040519150601f19603f3d011682016040523d82523d5f602084013e61284c565b606091505b505090508061289d5760405162461bcd60e51b815260206004820152601d60248201527f4d61726b6574696e6720455448207472616e73666572206661696c6564000000604482015260640161076d565b5f601c6040516128ac90612db4565b908152604051908190036020018120546001600160a01b03169087905f6040518083038185875af1925050503d805f8114612902576040519150601f19603f3d011682016040523d82523d5f602084013e612907565b606091505b50509050806129585760405162461bcd60e51b815260206004820152601760248201527f44657620455448207472616e73666572206661696c6564000000000000000000604482015260640161076d565b5f601c60405161296790612ded565b908152604051908190036020018120546001600160a01b03169087905f6040518083038185875af1925050503d805f81146129bd576040519150601f19603f3d011682016040523d82523d5f602084013e6129c2565b606091505b5050905080612a135760405162461bcd60e51b815260206004820152601b60248201527f4368617269747920455448207472616e73666572206661696c65640000000000604482015260640161076d565b5f868a612a208a8c612da1565b612a2a9190612da1565b612a349190612da1565b612a3e908d612fda565b90508015612b03575f601c604051612a5590612dc3565b908152604051908190036020018120546001600160a01b03169083905f6040518083038185875af1925050503d805f8114612aab576040519150601f19603f3d011682016040523d82523d5f602084013e612ab0565b606091505b5050905080612b015760405162461bcd60e51b815260206004820152601860248201527f4475737420455448207472616e73666572206661696c65640000000000000000604482015260640161076d565b505b50505f60208190556021819055602281905560235550506007805460ff19169055505060016006555050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03811681146108b1575f5ffd5b5f5f60408385031215612b92575f5ffd5b8235612b9d81612b6d565b946020939093013593505050565b5f60208284031215612bbb575f5ffd5b5035919050565b5f5f5f60608486031215612bd4575f5ffd5b8335612bdf81612b6d565b92506020840135612bef81612b6d565b929592945050506040919091013590565b5f60208284031215612c10575f5ffd5b813561086881612b6d565b5f5f5f5f60808587031215612c2e575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f5f5f60608486031215612c5c575f5ffd5b8335612c6781612b6d565b92506020840135612c7781612b6d565b91506040840135612c8781612b6d565b809150509250925092565b5f5f60408385031215612ca3575f5ffd5b823591506020830135612cb581612b6d565b809150509250929050565b5f5f5f60608486031215612cd2575f5ffd5b8335612cdd81612b6d565b9250602084013591506040840135612c8781612b6d565b5f5f60408385031215612d05575f5ffd5b8235612d1081612b6d565b91506020830135612cb581612b6d565b600181811c90821680612d3457607f821691505b602082108103612d5257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561073d5761073d612d8d565b623232bb60e91b815260030190565b686d61726b6574696e6760b81b815260090190565b686c697175696469747960b81b815260090190565b666368617269747960c81b815260070190565b5f60208284031215612e10575f5ffd5b5051919050565b5f60208284031215612e27575f5ffd5b81518015158114610868575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612e6e575f5ffd5b815161086881612b6d565b5f82612e9357634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761073d5761073d612d8d565b5f8151808452602084019350602083015f5b82811015612ee85781516001600160a01b0316865260209586019590910190600101612ec1565b5093949350505050565b828152604060208201525f612f0a6040830184612eaf565b949350505050565b5f60208284031215612f22575f5ffd5b815167ffffffffffffffff811115612f38575f5ffd5b8201601f81018413612f48575f5ffd5b805167ffffffffffffffff811115612f6257612f62612e36565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612f8f57612f8f612e36565b604052918252602081840181019290810187841115612fac575f5ffd5b6020850194505b83851015612fcf57845180825260209586019590935001612fb3565b509695505050505050565b8181038181111561073d5761073d612d8d565b85815284602082015260a060408201525f61300b60a0830186612eaf565b6001600160a01b0394909416606083015250608001529392505050565b5f5f5f6060848603121561303a575f5ffd5b505081516020830151604090930151909492935091905056fea26469706673582212209d0e6646df7e4821c24e1b6a7a9f5e31937672408b1feae43d2e9f3a04c6e1e564736f6c634300081e00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000004a34334b9d1c14e7cdd22b1fa74cc7aeb80c41030000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005cefaf29984b23ee907fb67f435a7e6eee9a83a3000000000000000000000000a881c71814d90125dbd6a915503d526efc3d509e0000000000000000000000001504591b2838850f54536ae91ca185319d42b270000000000000000000000000d83df0c3ebcb2cb3ae966877cea14c7e4c90e1a6000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c43616e6469646520436f696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034343430000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061020a575f3560e01c80638456cb5911610113578063a9059cbb1161009d578063ced695a41161006d578063ced695a4146105d0578063cfefd79e146105e4578063dd62ed3e14610603578063f2fde38b14610647578063fe575a8714610666575f5ffd5b8063a9059cbb1461053c578063abe4f11d1461055b578063b37fd1901461057a578063cba0e99614610599575f5ffd5b80639d0014b1116100e35780639d0014b1146104a15780639fda0581146104c0578063a0558c3f146104df578063a457c2d7146104fe578063a82cfe8b1461051d575f5ffd5b80638456cb591461043357806384666b08146104475780638da5cb5b1461046657806395d89b411461048d575f5ffd5b80633f4ba83a11610194578063578c71d911610164578063578c71d9146103995780635c975abb146103ae57806370a08231146103cc578063715018a614610400578063717a865114610414575f5ffd5b80633f4ba83a1461033357806342966c68146103475780634febf53d1461036657806353eb3bcf14610385575f5ffd5b806323a38a38116101da57806323a38a38146102ad57806323b872dd146102c65780632c32abc2146102e5578063313ce567146102f95780633950935114610314575f5ffd5b806306fdde0314610215578063095ea7b31461023f57806318160ddd1461026e5780631a3ce4e61461028c575f5ffd5b3661021157005b5f5ffd5b348015610220575f5ffd5b5061022961069d565b6040516102369190612b38565b60405180910390f35b34801561024a575f5ffd5b5061025e610259366004612b81565b61072d565b6040519015158152602001610236565b348015610279575f5ffd5b506002545b604051908152602001610236565b348015610297575f5ffd5b506102ab6102a6366004612bab565b610743565b005b3480156102b8575f5ffd5b50601d5461025e9060ff1681565b3480156102d1575f5ffd5b5061025e6102e0366004612bc2565b6107c5565b3480156102f0575f5ffd5b506102ab61086f565b348015610304575f5ffd5b5060405160128152602001610236565b34801561031f575f5ffd5b5061025e61032e366004612b81565b6108b4565b34801561033e575f5ffd5b506102ab6108ef565b348015610352575f5ffd5b506102ab610361366004612bab565b610986565b348015610371575f5ffd5b506102ab610380366004612c00565b6109ba565b348015610390575f5ffd5b506102ab610a7e565b3480156103a4575f5ffd5b5061027e60085481565b3480156103b9575f5ffd5b50600554600160a01b900460ff1661025e565b3480156103d7575f5ffd5b5061027e6103e6366004612c00565b6001600160a01b03165f9081526020819052604090205490565b34801561040b575f5ffd5b506102ab610b14565b34801561041f575f5ffd5b506102ab61042e366004612c00565b610b47565b34801561043e575f5ffd5b506102ab610c0e565b348015610452575f5ffd5b506102ab610461366004612c1b565b610ca8565b348015610471575f5ffd5b506005546040516001600160a01b039091168152602001610236565b348015610498575f5ffd5b50610229610d5a565b3480156104ac575f5ffd5b506102ab6104bb366004612bab565b610d69565b3480156104cb575f5ffd5b506102ab6104da366004612c4a565b610dd8565b3480156104ea575f5ffd5b506102ab6104f9366004612c92565b610ec5565b348015610509575f5ffd5b5061025e610518366004612b81565b610ffe565b348015610528575f5ffd5b506102ab610537366004612c1b565b611096565b348015610547575f5ffd5b5061025e610556366004612b81565b611132565b348015610566575f5ffd5b506102ab610575366004612c00565b61113e565b348015610585575f5ffd5b506102ab610594366004612cc0565b6111fa565b3480156105a4575f5ffd5b5061025e6105b3366004612c00565b6001600160a01b03165f9081526019602052604090205460ff1690565b3480156105db575f5ffd5b506102ab61145e565b3480156105ef575f5ffd5b506102ab6105fe366004612c00565b6114f1565b34801561060e575f5ffd5b5061027e61061d366004612cf4565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610652575f5ffd5b506102ab610661366004612c00565b6115b0565b348015610671575f5ffd5b5061025e610680366004612c00565b6001600160a01b03165f9081526018602052604090205460ff1690565b6060600380546106ac90612d20565b80601f01602080910402602001604051908101604052809291908181526020018280546106d890612d20565b80156107235780601f106106fa57610100808354040283529160200191610723565b820191905f5260205f20905b81548152906001019060200180831161070657829003601f168201915b5050505050905090565b5f610739338484611648565b5060015b92915050565b6005546001600160a01b031633146107765760405162461bcd60e51b815260040161076d90612d58565b60405180910390fd5b6127108111156107c05760405162461bcd60e51b8152602060048201526015602482015274536c6970706167653a20696e76616c69642062707360581b604482015260640161076d565b600855565b5f6107d184848461176b565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156108555760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161076d565b6108628533858403611648565b60019150505b9392505050565b6005546001600160a01b031633146108995760405162461bcd60e51b815260040161076d90612d58565b601f546108b1905f906001600160a01b0316816118d3565b50565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107399185906108ea908690612da1565b611648565b6005546001600160a01b031633146109195760405162461bcd60e51b815260040161076d90612d58565b600554600160a01b900460ff1661097c5760405162461bcd60e51b815260206004820152602160248201527f436f696e546f6b656e3a20436f6e7472616374206973206e6f742070617573656044820152601960fa1b606482015260840161076d565b610984611f79565b565b6005546001600160a01b031633146109b05760405162461bcd60e51b815260040161076d90612d58565b6108b13382612016565b6005546001600160a01b031633146109e45760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381165f9081526019602052604090205460ff1615610a5b5760405162461bcd60e51b815260206004820152602660248201527f436f696e546f6b656e3a204163636f756e7420697320616c726561647920657860448201526518db1d59195960d21b606482015260840161076d565b6001600160a01b03165f908152601960205260409020805460ff19166001179055565b6005546001600160a01b03163314610aa85760405162461bcd60e51b815260040161076d90612d58565b601d5460ff1615610b055760405162461bcd60e51b815260206004820152602160248201527f436f696e546f6b656e3a2054617820697320616c726561647920656e61626c656044820152601960fa1b606482015260840161076d565b601d805460ff19166001179055565b6005546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161076d90612d58565b6109845f612161565b6005546001600160a01b03163314610b715760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381165f9081526018602052604090205460ff1615610beb5760405162461bcd60e51b815260206004820152602960248201527f436f696e546f6b656e3a204163636f756e7420697320616c726561647920626c6044820152681858dadb1a5cdd195960ba1b606482015260840161076d565b6001600160a01b03165f908152601860205260409020805460ff19166001179055565b6005546001600160a01b03163314610c385760405162461bcd60e51b815260040161076d90612d58565b600554600160a01b900460ff1615610ca05760405162461bcd60e51b815260206004820152602560248201527f436f696e546f6b656e3a20436f6e747261637420697320616c72656164792070604482015264185d5cd95960da1b606482015260840161076d565b6109846121b2565b6005546001600160a01b03163314610cd25760405162461bcd60e51b815260040161076d90612d58565b83601b604051610ce190612db4565b90815260200160405180910390208190555082601b604051610d0290612dc3565b90815260200160405180910390208190555081601b604051610d2390612dd8565b90815260200160405180910390208190555080601b604051610d4490612ded565b9081526040519081900360200190205550505050565b6060600480546106ac90612d20565b6005546001600160a01b03163314610d935760405162461bcd60e51b815260040161076d90612d58565b5f8111610dd35760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b604482015260640161076d565b600b55565b6005546001600160a01b03163314610e025760405162461bcd60e51b815260040161076d90612d58565b82601c604051610e1190612db4565b90815260200160405180910390205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555081601c604051610e5190612dc3565b90815260200160405180910390205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555080601c604051610e9190612ded565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b6005546001600160a01b03163314610eef5760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b038116610f3c5760405162461bcd60e51b81526020600482015260146024820152735265736375653a207a65726f206164647265737360601b604482015260640161076d565b475f831580610f4a57508184115b610f545783610f56565b815b90505f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610fa1576040519150601f19603f3d011682016040523d82523d5f602084013e610fa6565b606091505b5050905080610ff75760405162461bcd60e51b815260206004820152601b60248201527f5265736375653a20455448207472616e73666572206661696c65640000000000604482015260640161076d565b5050505050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561107f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161076d565b61108c3385858403611648565b5060019392505050565b6005546001600160a01b031633146110c05760405162461bcd60e51b815260040161076d90612d58565b83601a6040516110cf90612db4565b90815260200160405180910390208190555082601a6040516110f090612dc3565b90815260200160405180910390208190555081601a60405161111190612dd8565b90815260200160405180910390208190555080601a604051610d4490612ded565b5f61073933848461176b565b6005546001600160a01b031633146111685760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381165f9081526019602052604090205460ff166111da5760405162461bcd60e51b815260206004820152602260248201527f436f696e546f6b656e3a204163636f756e74206973206e6f74206578636c7564604482015261195960f21b606482015260840161076d565b6001600160a01b03165f908152601960205260409020805460ff19169055565b6005546001600160a01b031633146112245760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381166112715760405162461bcd60e51b81526020600482015260146024820152735265736375653a207a65726f206164647265737360601b604482015260640161076d565b306001600160a01b038416036112c95760405162461bcd60e51b815260206004820181905260248201527f5265736375653a2063616e6e6f7420726573637565207468697320746f6b656e604482015260640161076d565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561130d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113319190612e00565b90505f83158061134057508184115b61134a578361134c565b815b90505f81116113945760405162461bcd60e51b81526020600482015260146024820152735265736375653a207a65726f2062616c616e636560601b604482015260640161076d565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390525f919087169063a9059cbb906044016020604051808303815f875af11580156113e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114079190612e17565b9050806114565760405162461bcd60e51b815260206004820152601d60248201527f5265736375653a20746f6b656e207472616e73666572206661696c6564000000604482015260640161076d565b505050505050565b6005546001600160a01b031633146114885760405162461bcd60e51b815260040161076d90612d58565b601d5460ff166114e55760405162461bcd60e51b815260206004820152602260248201527f436f696e546f6b656e3a2054617820697320616c72656164792064697361626c604482015261195960f21b606482015260840161076d565b601d805460ff19169055565b6005546001600160a01b0316331461151b5760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b0381165f9081526018602052604090205460ff166115905760405162461bcd60e51b815260206004820152602560248201527f436f696e546f6b656e3a204163636f756e74206973206e6f7420626c61636b6c6044820152641a5cdd195960da1b606482015260840161076d565b6001600160a01b03165f908152601860205260409020805460ff19169055565b6005546001600160a01b031633146115da5760405162461bcd60e51b815260040161076d90612d58565b6001600160a01b03811661163f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076d565b6108b181612161565b6001600160a01b0383166116aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076d565b6001600160a01b03821661170b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076d565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600554600160a01b900460ff16156117d45760405162461bcd60e51b815260206004820152602660248201527f436f696e546f6b656e3a20746f6b656e207472616e73666572207768696c65206044820152651c185d5cd95960d21b606482015260840161076d565b335f9081526018602052604090205460ff16156118335760405162461bcd60e51b815260206004820152601d60248201527f436f696e546f6b656e3a2073656e64657220626c61636b6c6973746564000000604482015260640161076d565b6001600160a01b0382165f9081526018602052604090205460ff161561189b5760405162461bcd60e51b815260206004820181905260248201527f436f696e546f6b656e3a20726563697069656e7420626c61636b6c6973746564604482015260640161076d565b601d5460ff1680156118b0575060075460ff16155b156118c3576118c08383836118d3565b90505b6118ce83838361223a565b505050565b6040805160028082526060820183525f928392919060208301908036833701905050905030815f8151811061190a5761190a612e4a565b60200260200101906001600160a01b031690816001600160a01b031681525050601d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561197b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199f9190612e5e565b816001815181106119b2576119b2612e4a565b60200260200101906001600160a01b031690816001600160a01b0316815250506119f3856001600160a01b03165f9081526019602052604090205460ff1690565b158015611a1857506001600160a01b0384165f9081526019602052604090205460ff16155b15611f70575f5f600a5485611a2d9190612e79565b601f549091506001600160a01b0390811690881603611c2457601a604051611a5490612dc3565b90815260200160405180910390205481611a6e9190612e98565b611a789083612da1565b9150601a604051611a8890612db4565b90815260200160405180910390205481611aa29190612e98565b611aac9083612da1565b9150601a604051611abc90612dd8565b90815260200160405180910390205481611ad69190612e98565b611ae09083612da1565b9150601a604051611af090612ded565b90815260200160405180910390205481611b0a9190612e98565b611b149083612da1565b91508115611b2757611b2787308461176b565b601a604051611b3590612dc3565b90815260200160405180910390205481611b4f9190612e98565b60205f828254611b5f9190612da1565b9091555050604051601a90611b7390612db4565b90815260200160405180910390205481611b8d9190612e98565b60215f828254611b9d9190612da1565b9091555050604051601a90611bb190612dd8565b90815260200160405180910390205481611bcb9190612e98565b60225f828254611bdb9190612da1565b9091555050604051601a90611bef90612ded565b90815260200160405180910390205481611c099190612e98565b60235f828254611c199190612da1565b90915550611f619050565b601f546001600160a01b0390811690871603611f6157601b604051611c4890612dc3565b90815260200160405180910390205481611c629190612e98565b611c6c9083612da1565b9150601b604051611c7c90612db4565b90815260200160405180910390205481611c969190612e98565b611ca09083612da1565b9150601b604051611cb090612dd8565b90815260200160405180910390205481611cca9190612e98565b611cd49083612da1565b9150601b604051611ce490612ded565b90815260200160405180910390205481611cfe9190612e98565b611d089083612da1565b91508115611d1b57611d1b87308461176b565b601b604051611d2990612dc3565b90815260200160405180910390205481611d439190612e98565b60205f828254611d539190612da1565b9091555050604051601b90611d6790612db4565b90815260200160405180910390205481611d819190612e98565b60215f828254611d919190612da1565b9091555050604051601b90611da590612dd8565b90815260200160405180910390205481611dbf9190612e98565b60225f828254611dcf9190612da1565b9091555050604051601b90611de390612ded565b90815260200160405180910390205481611dfd9190612e98565b60235f828254611e0d9190612da1565b925050819055505f602354602254602154602054611e2b9190612da1565b611e359190612da1565b611e3f9190612da1565b9050805f03611e545785945050505050610868565b5f601d60019054906101000a90046001600160a01b03166001600160a01b031663d06ca61f602354602254602154602054611e8f9190612da1565b611e999190612da1565b611ea39190612da1565b876040518363ffffffff1660e01b8152600401611ec1929190612ef2565b5f60405180830381865afa158015611edb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f029190810190612f12565b600181518110611f1457611f14612e4a565b60200260200101519050600b548110611f5e575f612710600854612710611f3b9190612fda565b611f459084612e98565b611f4f9190612e79565b9050611f5c868483612407565b505b50505b611f6b8286612fda565b945050505b50909392505050565b600554600160a01b900460ff16611fc95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161076d565b6005805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166120765760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076d565b6001600160a01b0382165f90815260208190526040902054818110156120e95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161076d565b6001600160a01b0383165f908152602081905260408120838303905560028054849290612117908490612fda565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600554600160a01b900460ff16156121ff5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161076d565b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ff93390565b6001600160a01b03831661229e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161076d565b6001600160a01b0382166123005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161076d565b6001600160a01b0383165f90815260208190526040902054818110156123775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161076d565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906123ad908490612da1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123f991815260200190565b60405180910390a350505050565b6002600654036124595760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161076d565b600260068190556007805460ff1916600117905560235460225447925f92916124829190612e79565b6021546020546124929190612da1565b61249c9190612da1565b6124a69190612da1565b90506124c830601d60019054906101000a90046001600160a01b031683611648565b601d546040516318cbafe560e01b81526101009091046001600160a01b0316906318cbafe59061250490849087908a9030904290600401612fed565b5f604051808303815f875af115801561251f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125469190810190612f12565b505f6125528347612fda565b90505f60026022546125649190612e79565b90505f670de0b6b3a76400008760026022546125809190612e79565b61259290670de0b6b3a7640000612e98565b61259c9190612e79565b6125a69085612e98565b6125b09190612e79565b90505f670de0b6b3a764000088602054670de0b6b3a76400006125d39190612e98565b6125dd9190612e79565b6125e79086612e98565b6125f19190612e79565b90505f670de0b6b3a764000089602154670de0b6b3a76400006126149190612e98565b61261e9190612e79565b6126289087612e98565b6126329190612e79565b90505f670de0b6b3a76400008a602354670de0b6b3a76400006126559190612e98565b61265f9190612e79565b6126699088612e98565b6126739190612e79565b905061269530601d60019054906101000a90046001600160a01b031687611648565b5f601d60019054906101000a90046001600160a01b03166001600160a01b031663f305d7198630895f5f601c6040516126cd90612dd8565b908152604051908190036020018120546001600160e01b031960e089901b1682526001600160a01b039586166004830152602482019490945260448101929092526064820152911660848201524260a482015260c40160606040518083038185885af115801561273f573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906127649190613028565b505090505f81896127759190612da1565b60235460225460215460205461278b9190612da1565b6127959190612da1565b61279f9190612da1565b6127a99190612fda565b905080156127e2576127e230601c6040516127c390612db4565b908152604051908190036020019020546001600160a01b03168361176b565b5f601c6040516127f190612dc3565b908152604051908190036020018120546001600160a01b03169087905f6040518083038185875af1925050503d805f8114612847576040519150601f19603f3d011682016040523d82523d5f602084013e61284c565b606091505b505090508061289d5760405162461bcd60e51b815260206004820152601d60248201527f4d61726b6574696e6720455448207472616e73666572206661696c6564000000604482015260640161076d565b5f601c6040516128ac90612db4565b908152604051908190036020018120546001600160a01b03169087905f6040518083038185875af1925050503d805f8114612902576040519150601f19603f3d011682016040523d82523d5f602084013e612907565b606091505b50509050806129585760405162461bcd60e51b815260206004820152601760248201527f44657620455448207472616e73666572206661696c6564000000000000000000604482015260640161076d565b5f601c60405161296790612ded565b908152604051908190036020018120546001600160a01b03169087905f6040518083038185875af1925050503d805f81146129bd576040519150601f19603f3d011682016040523d82523d5f602084013e6129c2565b606091505b5050905080612a135760405162461bcd60e51b815260206004820152601b60248201527f4368617269747920455448207472616e73666572206661696c65640000000000604482015260640161076d565b5f868a612a208a8c612da1565b612a2a9190612da1565b612a349190612da1565b612a3e908d612fda565b90508015612b03575f601c604051612a5590612dc3565b908152604051908190036020018120546001600160a01b03169083905f6040518083038185875af1925050503d805f8114612aab576040519150601f19603f3d011682016040523d82523d5f602084013e612ab0565b606091505b5050905080612b015760405162461bcd60e51b815260206004820152601860248201527f4475737420455448207472616e73666572206661696c65640000000000000000604482015260640161076d565b505b50505f60208190556021819055602281905560235550506007805460ff19169055505060016006555050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03811681146108b1575f5ffd5b5f5f60408385031215612b92575f5ffd5b8235612b9d81612b6d565b946020939093013593505050565b5f60208284031215612bbb575f5ffd5b5035919050565b5f5f5f60608486031215612bd4575f5ffd5b8335612bdf81612b6d565b92506020840135612bef81612b6d565b929592945050506040919091013590565b5f60208284031215612c10575f5ffd5b813561086881612b6d565b5f5f5f5f60808587031215612c2e575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f5f5f60608486031215612c5c575f5ffd5b8335612c6781612b6d565b92506020840135612c7781612b6d565b91506040840135612c8781612b6d565b809150509250925092565b5f5f60408385031215612ca3575f5ffd5b823591506020830135612cb581612b6d565b809150509250929050565b5f5f5f60608486031215612cd2575f5ffd5b8335612cdd81612b6d565b9250602084013591506040840135612c8781612b6d565b5f5f60408385031215612d05575f5ffd5b8235612d1081612b6d565b91506020830135612cb581612b6d565b600181811c90821680612d3457607f821691505b602082108103612d5257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561073d5761073d612d8d565b623232bb60e91b815260030190565b686d61726b6574696e6760b81b815260090190565b686c697175696469747960b81b815260090190565b666368617269747960c81b815260070190565b5f60208284031215612e10575f5ffd5b5051919050565b5f60208284031215612e27575f5ffd5b81518015158114610868575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612e6e575f5ffd5b815161086881612b6d565b5f82612e9357634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761073d5761073d612d8d565b5f8151808452602084019350602083015f5b82811015612ee85781516001600160a01b0316865260209586019590910190600101612ec1565b5093949350505050565b828152604060208201525f612f0a6040830184612eaf565b949350505050565b5f60208284031215612f22575f5ffd5b815167ffffffffffffffff811115612f38575f5ffd5b8201601f81018413612f48575f5ffd5b805167ffffffffffffffff811115612f6257612f62612e36565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612f8f57612f8f612e36565b604052918252602081840181019290810187841115612fac575f5ffd5b6020850194505b83851015612fcf57845180825260209586019590935001612fb3565b509695505050505050565b8181038181111561073d5761073d612d8d565b85815284602082015260a060408201525f61300b60a0830186612eaf565b6001600160a01b0394909416606083015250608001529392505050565b5f5f5f6060848603121561303a575f5ffd5b505081516020830151604090930151909492935091905056fea26469706673582212209d0e6646df7e4821c24e1b6a7a9f5e31937672408b1feae43d2e9f3a04c6e1e564736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000004a34334b9d1c14e7cdd22b1fa74cc7aeb80c41030000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005cefaf29984b23ee907fb67f435a7e6eee9a83a3000000000000000000000000a881c71814d90125dbd6a915503d526efc3d509e0000000000000000000000001504591b2838850f54536ae91ca185319d42b270000000000000000000000000d83df0c3ebcb2cb3ae966877cea14c7e4c90e1a6000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c43616e6469646520436f696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034343430000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): Candide Coin
Arg [1] : _tokenSymbol (string): CCC
Arg [2] : _supply (uint256): 1000000000
Arg [3] : _addr (address[6]): 0x4a34334b9D1C14E7cDD22b1Fa74Cc7aeB80C4103,0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,0x5CefAF29984b23eE907FB67F435A7e6EEe9a83A3,0xA881c71814D90125dBd6a915503d526Efc3D509E,0x1504591B2838850F54536AE91Ca185319d42B270,0xd83DF0C3ebcb2cB3ae966877cea14c7E4C90e1A6
Arg [4] : _value (uint256[8]): 10,10,10,10,10,10,10,10
-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [3] : 0000000000000000000000004a34334b9d1c14e7cdd22b1fa74cc7aeb80c4103
Arg [4] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [5] : 0000000000000000000000005cefaf29984b23ee907fb67f435a7e6eee9a83a3
Arg [6] : 000000000000000000000000a881c71814d90125dbd6a915503d526efc3d509e
Arg [7] : 0000000000000000000000001504591b2838850f54536ae91ca185319d42b270
Arg [8] : 000000000000000000000000d83df0c3ebcb2cb3ae966877cea14c7e4c90e1a6
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [12] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [13] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [14] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [15] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [16] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [17] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [18] : 43616e6469646520436f696e0000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [20] : 4343430000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
30665:13714:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8463:210;;;;;;;;;;-1:-1:-1;8463:210:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;8463:210:0;945:187:1;7275:108:0;;;;;;;;;;-1:-1:-1;7363:12:0;;7275:108;;;1283:25:1;;;1271:2;1256:18;7275:108:0;1137:177:1;38730:150:0;;;;;;;;;;-1:-1:-1;38730:150:0;;;;;:::i;:::-;;:::i;:::-;;31800:28;;;;;;;;;;-1:-1:-1;31800:28:0;;;;;;;;9155:529;;;;;;;;;;-1:-1:-1;9155:529:0;;;;;:::i;:::-;;:::i;36495:106::-;;;;;;;;;;;;;:::i;7117:93::-;;;;;;;;;;-1:-1:-1;7117:93:0;;7200:2;2205:36:1;;2193:2;2178:18;7117:93:0;2063:184:1;10093:297:0;;;;;;;;;;-1:-1:-1;10093:297:0;;;;;:::i;:::-;;:::i;36874:130::-;;;;;;;;;;;;;:::i;37077:91::-;;;;;;;;;;-1:-1:-1;37077:91:0;;;;;:::i;:::-;;:::i;37862:179::-;;;;;;;;;;-1:-1:-1;37862:179:0;;;;;:::i;:::-;;:::i;39858:140::-;;;;;;;;;;;;;:::i;30788:32::-;;;;;;;;;;;;;;;;20136:86;;;;;;;;;;-1:-1:-1;20207:7:0;;-1:-1:-1;;;20207:7:0;;;;20136:86;;7446:177;;;;;;;;;;-1:-1:-1;7446:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;7597:18:0;7565:7;7597:18;;;;;;;;;;;;7446:177;18069:94;;;;;;;;;;;;;:::i;37286:224::-;;;;;;;;;;-1:-1:-1;37286:224:0;;;;;:::i;:::-;;:::i;36671:131::-;;;;;;;;;;;;;:::i;39161:320::-;;;;;;;;;;-1:-1:-1;39161:320:0;;;;;:::i;:::-;;:::i;17418:87::-;;;;;;;;;;-1:-1:-1;17491:6:0;;17418:87;;-1:-1:-1;;;;;17491:6:0;;;3242:51:1;;3230:2;3215:18;17418:87:0;3096:203:1;6374:104:0;;;;;;;;;;;;;:::i;38943:161::-;;;;;;;;;;-1:-1:-1;38943:161:0;;;;;:::i;:::-;;:::i;39544:253::-;;;;;;;;;;-1:-1:-1;39544:253:0;;;;;:::i;:::-;;:::i;43399:366::-;;;;;;;;;;-1:-1:-1;43399:366:0;;;;;:::i;:::-;;:::i;10893:482::-;;;;;;;;;;-1:-1:-1;10893:482:0;;;;;:::i;:::-;;:::i;38360:315::-;;;;;;;;;;-1:-1:-1;38360:315:0;;;;;:::i;:::-;;:::i;7836:216::-;;;;;;;;;;-1:-1:-1;7836:216:0;;;;;:::i;:::-;;:::i;38121:181::-;;;;;;;;;;-1:-1:-1;38121:181:0;;;;;:::i;:::-;;:::i;43773:566::-;;;;;;;;;;-1:-1:-1;43773:566:0;;;;;:::i;:::-;;:::i;40518:110::-;;;;;;;;;;-1:-1:-1;40518:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;40600:20:0;40576:4;40600:20;;;:11;:20;;;;;;;;;40518:110;40060:142;;;;;;;;;;;;;:::i;37598:184::-;;;;;;;;;;-1:-1:-1;37598:184:0;;;;;:::i;:::-;;:::i;8115:201::-;;;;;;;;;;-1:-1:-1;8115:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;8281:18:0;;;8249:7;8281:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8115:201;18318:229;;;;;;;;;;-1:-1:-1;18318:229:0;;;;;:::i;:::-;;:::i;40306:111::-;;;;;;;;;;-1:-1:-1;40306:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;40391:18:0;40367:4;40391:18;;;:9;:18;;;;;;;;;40306:111;6155:100;6209:13;6242:5;6235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:100;:::o;8463:210::-;8582:4;8604:39;4054:10;8627:7;8636:6;8604:8;:39::i;:::-;-1:-1:-1;8661:4:0;8463:210;;;;;:::o;38730:150::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;;;;;;;;;38812:6:::1;38805:3;:13;;38797:47;;;::::0;-1:-1:-1;;;38797:47:0;;6072:2:1;38797:47:0::1;::::0;::::1;6054:21:1::0;6111:2;6091:18;;;6084:30;-1:-1:-1;;;6130:18:1;;;6123:51;6191:18;;38797:47:0::1;5870:345:1::0;38797:47:0::1;38855:11;:17:::0;38730:150::o;9155:529::-;9295:4;9312:36;9322:6;9330:9;9341:6;9312:9;:36::i;:::-;-1:-1:-1;;;;;9388:19:0;;9361:24;9388:19;;;:11;:19;;;;;;;;4054:10;9388:33;;;;;;;;9454:26;;;;9432:116;;;;-1:-1:-1;;;9432:116:0;;6422:2:1;9432:116:0;;;6404:21:1;6461:2;6441:18;;;6434:30;6500:34;6480:18;;;6473:62;-1:-1:-1;;;6551:18:1;;;6544:38;6599:19;;9432:116:0;6220:404:1;9432:116:0;9584:57;9593:6;4054:10;9634:6;9615:16;:25;9584:8;:57::i;:::-;9672:4;9665:11;;;9155:529;;;;;;:::o;36495:106::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;36575:13:::1;::::0;36545:48:::1;::::0;36563:1:::1;::::0;-1:-1:-1;;;;;36575:13:0::1;36563:1:::0;36545:9:::1;:48::i;:::-;;36495:106::o:0;10093:297::-;4054:10;10208:4;10302:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10302:34:0;;;;;;;;;;10208:4;;10230:130;;10280:7;;10302:47;;10339:10;;10302:47;:::i;:::-;10230:8;:130::i;36874:::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;20207:7;;-1:-1:-1;;;20207:7:0;;;;36921:54:::1;;;::::0;-1:-1:-1;;;36921:54:0;;7093:2:1;36921:54:0::1;::::0;::::1;7075:21:1::0;7132:2;7112:18;;;7105:30;7171:34;7151:18;;;7144:62;-1:-1:-1;;;7222:18:1;;;7215:31;7263:19;;36921:54:0::1;6891:397:1::0;36921:54:0::1;36986:10;:8;:10::i;:::-;36874:130::o:0;37077:91::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;37135:25:::1;37141:10;37153:6;37135:5;:25::i;37862:179::-:0;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40600:20:0;;40576:4;40600:20;;;:11;:20;;;;;;;;37932::::1;37924:71;;;::::0;-1:-1:-1;;;37924:71:0;;7495:2:1;37924:71:0::1;::::0;::::1;7477:21:1::0;7534:2;7514:18;;;7507:30;7573:34;7553:18;;;7546:62;-1:-1:-1;;;7624:18:1;;;7617:36;7670:19;;37924:71:0::1;7293:402:1::0;37924:71:0::1;-1:-1:-1::0;;;;;38006:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;38006:27:0::1;38029:4;38006:27;::::0;;37862:179::o;39858:140::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;39916:9:::1;::::0;::::1;;39915:10;39907:56;;;::::0;-1:-1:-1;;;39907:56:0;;7902:2:1;39907:56:0::1;::::0;::::1;7884:21:1::0;7941:2;7921:18;;;7914:30;7980:34;7960:18;;;7953:62;-1:-1:-1;;;8031:18:1;;;8024:31;8072:19;;39907:56:0::1;7700:397:1::0;39907:56:0::1;39974:9;:16:::0;;-1:-1:-1;;39974:16:0::1;39986:4;39974:16;::::0;;39858:140::o;18069:94::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;18134:21:::1;18152:1;18134:9;:21::i;37286:224::-:0;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37379:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;37378:19;37356:110;;;::::0;-1:-1:-1;;;37356:110:0;;8304:2:1;37356:110:0::1;::::0;::::1;8286:21:1::0;8343:2;8323:18;;;8316:30;8382:34;8362:18;;;8355:62;-1:-1:-1;;;8433:18:1;;;8426:39;8482:19;;37356:110:0::1;8102:405:1::0;37356:110:0::1;-1:-1:-1::0;;;;;37477:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;37477:25:0::1;37498:4;37477:25;::::0;;37286:224::o;36671:131::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;20207:7;;-1:-1:-1;;;20207:7:0;;;;36724:9:::1;36716:59;;;::::0;-1:-1:-1;;;36716:59:0;;8714:2:1;36716:59:0::1;::::0;::::1;8696:21:1::0;8753:2;8733:18;;;8726:30;8792:34;8772:18;;;8765:62;-1:-1:-1;;;8843:18:1;;;8836:35;8888:19;;36716:59:0::1;8512:401:1::0;36716:59:0::1;36786:8;:6;:8::i;39161:320::-:0;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;39339:3:::1;39320:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;:22;;;;39378:9;39353;:22;;;;;:::i;:::-;;;;;;;;;;;;;:34;;;;39423:9;39398;:22;;;;;:::i;:::-;;;;;;;;;;;;;:34;;;;39466:7;39443:9;:20;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:30;-1:-1:-1;;;;39161:320:0:o;6374:104::-;6430:13;6463:7;6456:14;;;;;:::i;38943:161::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;39039:1:::1;39026:10;:14;39018:41;;;::::0;-1:-1:-1;;;39018:41:0;;10168:2:1;39018:41:0::1;::::0;::::1;10150:21:1::0;10207:2;10187:18;;;10180:30;-1:-1:-1;;;10226:18:1;;;10219:44;10280:18;;39018:41:0::1;9966:338:1::0;39018:41:0::1;39070:13;:26:::0;38943:161::o;39544:253::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;39698:3:::1;39678:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;:23;;;;;-1:-1:-1::0;;;;;39678:23:0::1;;;;;-1:-1:-1::0;;;;;39678:23:0::1;;;;;;39738:9;39712:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;:35;;;;;-1:-1:-1::0;;;;;39712:35:0::1;;;;;-1:-1:-1::0;;;;;39712:35:0::1;;;;;;39782:7;39758:10;:21;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:31;;-1:-1:-1;;;;;39758:31:0;;;::::1;-1:-1:-1::0;;;;;;39758:31:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;39544:253:0:o;43399:366::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43492:16:0;::::1;43484:49;;;::::0;-1:-1:-1;;;43484:49:0;;10511:2:1;43484:49:0::1;::::0;::::1;10493:21:1::0;10550:2;10530:18;;;10523:30;-1:-1:-1;;;10569:18:1;;;10562:50;10629:18;;43484:49:0::1;10309:344:1::0;43484:49:0::1;43558:21;43544:11;43609::::0;;;:27:::1;;;43633:3;43624:6;:12;43609:27;43608:44;;43646:6;43608:44;;;43640:3;43608:44;43590:62;;43664:7;43677:2;-1:-1:-1::0;;;;;43677:7:0::1;43692;43677:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43663:41;;;43723:2;43715:42;;;::::0;-1:-1:-1;;;43715:42:0;;11070:2:1;43715:42:0::1;::::0;::::1;11052:21:1::0;11109:2;11089:18;;;11082:30;11148:29;11128:18;;;11121:57;11195:18;;43715:42:0::1;10868:351:1::0;43715:42:0::1;43473:292;;;43399:366:::0;;:::o;10893:482::-;4054:10;11013:4;11062:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11062:34:0;;;;;;;;;;11129:35;;;;11107:122;;;;-1:-1:-1;;;11107:122:0;;11426:2:1;11107:122:0;;;11408:21:1;11465:2;11445:18;;;11438:30;11504:34;11484:18;;;11477:62;-1:-1:-1;;;11555:18:1;;;11548:35;11600:19;;11107:122:0;11224:401:1;11107:122:0;11265:67;4054:10;11288:7;11316:15;11297:16;:34;11265:8;:67::i;:::-;-1:-1:-1;11363:4:0;;10893:482;-1:-1:-1;;;10893:482:0:o;38360:315::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;38536:3:::1;38518:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;;38574:9;38550:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;:33;;;;38618:9;38594:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;:33;;;;38660:7;38638:8;:19;;;;;:::i;7836:216::-:0;7958:4;7980:42;4054:10;8004:9;8015:6;7980:9;:42::i;38121:181::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40600:20:0;;40576:4;40600:20;;;:11;:20;;;;;;;;38189:66:::1;;;::::0;-1:-1:-1;;;38189:66:0;;11832:2:1;38189:66:0::1;::::0;::::1;11814:21:1::0;11871:2;11851:18;;;11844:30;11910:34;11890:18;;;11883:62;-1:-1:-1;;;11961:18:1;;;11954:32;12003:19;;38189:66:0::1;11630:398:1::0;38189:66:0::1;-1:-1:-1::0;;;;;38266:20:0::1;38289:5;38266:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;38266:28:0::1;::::0;;38121:181::o;43773:566::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43910:16:0;::::1;43902:49;;;::::0;-1:-1:-1;;;43902:49:0;;10511:2:1;43902:49:0::1;::::0;::::1;10493:21:1::0;10550:2;10530:18;;;10523:30;-1:-1:-1;;;10569:18:1;;;10562:50;10629:18;;43902:49:0::1;10309:344:1::0;43902:49:0::1;43987:4;-1:-1:-1::0;;;;;43970:22:0;::::1;::::0;43962:67:::1;;;::::0;-1:-1:-1;;;43962:67:0;;12235:2:1;43962:67:0::1;::::0;::::1;12217:21:1::0;;;12254:18;;;12247:30;12313:34;12293:18;;;12286:62;12365:18;;43962:67:0::1;12033:356:1::0;43962:67:0::1;44054:38;::::0;-1:-1:-1;;;44054:38:0;;44086:4:::1;44054:38;::::0;::::1;3242:51:1::0;44040:11:0::1;::::0;-1:-1:-1;;;;;44054:23:0;::::1;::::0;::::1;::::0;3215:18:1;;44054:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44040:52:::0;-1:-1:-1;44103:15:0::1;44122:11:::0;;;:27:::1;;;44146:3;44137:6;:12;44122:27;44121:44;;44159:6;44121:44;;;44153:3;44121:44;44103:62;;44194:1;44184:7;:11;44176:44;;;::::0;-1:-1:-1;;;44176:44:0;;12831:2:1;44176:44:0::1;::::0;::::1;12813:21:1::0;12870:2;12850:18;;;12843:30;-1:-1:-1;;;12889:18:1;;;12882:50;12949:18;;44176:44:0::1;12629:344:1::0;44176:44:0::1;44241:35;::::0;-1:-1:-1;;;44241:35:0;;-1:-1:-1;;;;;13170:32:1;;;44241:35:0::1;::::0;::::1;13152:51:1::0;13219:18;;;13212:34;;;44231:7:0::1;::::0;44241:22;;::::1;::::0;::::1;::::0;13125:18:1;;44241:35:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44231:45;;44295:2;44287:44;;;::::0;-1:-1:-1;;;44287:44:0;;13741:2:1;44287:44:0::1;::::0;::::1;13723:21:1::0;13780:2;13760:18;;;13753:30;13819:31;13799:18;;;13792:59;13868:18;;44287:44:0::1;13539:353:1::0;44287:44:0::1;43891:448;;;43773:566:::0;;;:::o;40060:142::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;40118:9:::1;::::0;::::1;;40110:56;;;::::0;-1:-1:-1;;;40110:56:0;;14099:2:1;40110:56:0::1;::::0;::::1;14081:21:1::0;14138:2;14118:18;;;14111:30;14177:34;14157:18;;;14150:62;-1:-1:-1;;;14228:18:1;;;14221:32;14270:19;;40110:56:0::1;13897:398:1::0;40110:56:0::1;40177:9;:17:::0;;-1:-1:-1;;40177:17:0::1;::::0;;40060:142::o;37598:184::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37677:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;37669:68;;;::::0;-1:-1:-1;;;37669:68:0;;14502:2:1;37669:68:0::1;::::0;::::1;14484:21:1::0;14541:2;14521:18;;;14514:30;14580:34;14560:18;;;14553:62;-1:-1:-1;;;14631:18:1;;;14624:35;14676:19;;37669:68:0::1;14300:401:1::0;37669:68:0::1;-1:-1:-1::0;;;;;37748:18:0::1;37769:5;37748:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;37748:26:0::1;::::0;;37598:184::o;18318:229::-;17491:6;;-1:-1:-1;;;;;17491:6:0;4054:10;17638:23;17630:68;;;;-1:-1:-1;;;17630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18421:22:0;::::1;18399:110;;;::::0;-1:-1:-1;;;18399:110:0;;14908:2:1;18399:110:0::1;::::0;::::1;14890:21:1::0;14947:2;14927:18;;;14920:30;14986:34;14966:18;;;14959:62;-1:-1:-1;;;15037:18:1;;;15030:36;15083:19;;18399:110:0::1;14706:402:1::0;18399:110:0::1;18520:19;18530:8;18520:9;:19::i;14683:380::-:0;-1:-1:-1;;;;;14819:19:0;;14811:68;;;;-1:-1:-1;;;14811:68:0;;15315:2:1;14811:68:0;;;15297:21:1;15354:2;15334:18;;;15327:30;15393:34;15373:18;;;15366:62;-1:-1:-1;;;15444:18:1;;;15437:34;15488:19;;14811:68:0;15113:400:1;14811:68:0;-1:-1:-1;;;;;14898:21:0;;14890:68;;;;-1:-1:-1;;;14890:68:0;;15720:2:1;14890:68:0;;;15702:21:1;15759:2;15739:18;;;15732:30;15798:34;15778:18;;;15771:62;-1:-1:-1;;;15849:18:1;;;15842:32;15891:19;;14890:68:0;15518:398:1;14890:68:0;-1:-1:-1;;;;;14971:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15023:32;;1283:25:1;;;15023:32:0;;1256:18:1;15023:32:0;;;;;;;14683:380;;;:::o;35881:535::-;20207:7;;-1:-1:-1;;;20207:7:0;;;;36030:9;36022:60;;;;-1:-1:-1;;;36022:60:0;;16123:2:1;36022:60:0;;;16105:21:1;16162:2;16142:18;;;16135:30;16201:34;16181:18;;;16174:62;-1:-1:-1;;;16252:18:1;;;16245:36;16298:19;;36022:60:0;15921:402:1;36022:60:0;36116:10;40367:4;40391:18;;;:9;:18;;;;;;;;36101:26;36093:68;;;;-1:-1:-1;;;36093:68:0;;16530:2:1;36093:68:0;;;16512:21:1;16569:2;16549:18;;;16542:30;16608:31;16588:18;;;16581:59;16657:18;;36093:68:0;16328:353:1;36093:68:0;-1:-1:-1;;;;;40391:18:0;;40367:4;40391:18;;;:9;:18;;;;;;;;36180:25;36172:70;;;;-1:-1:-1;;;36172:70:0;;16888:2:1;36172:70:0;;;16870:21:1;;;16907:18;;;16900:30;16966:34;16946:18;;;16939:62;17018:18;;36172:70:0;16686:356:1;36172:70:0;36259:9;;;;:21;;;;-1:-1:-1;36273:7:0;;;;36272:8;36259:21;36255:99;;;36306:36;36316:6;36324:9;36335:6;36306:9;:36::i;:::-;36297:45;;36255:99;36366:42;36382:6;36390:9;36401:6;36366:15;:42::i;:::-;35881:535;;;:::o;33253:2620::-;33413:16;;;33427:1;33413:16;;;;;;;;33365:7;;;;33413:16;33427:1;33413:16;;;;;;;;;;-1:-1:-1;33413:16:0;33385:44;;33462:4;33440:8;33449:1;33440:11;;;;;;;;:::i;:::-;;;;;;:27;-1:-1:-1;;;;;33440:27:0;;;-1:-1:-1;;;;;33440:27:0;;;;;33492:17;;;;;;;;;-1:-1:-1;;;;;33492:17:0;-1:-1:-1;;;;;33492:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33478:8;33487:1;33478:11;;;;;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;33478:38:0;;;-1:-1:-1;;;;;33478:38:0;;;;;33534:16;33545:4;-1:-1:-1;;;;;40600:20:0;40576:4;40600:20;;;:11;:20;;;;;;;;;40518:110;33534:16;33533:17;:36;;;;-1:-1:-1;;;;;;40600:20:0;;40576:4;40600:20;;;:11;:20;;;;;;;;33554:15;33533:36;33529:2311;;;33586:11;33612:16;33640:11;;33631:6;:20;;;;:::i;:::-;33686:13;;33612:39;;-1:-1:-1;;;;;;33686:13:0;;;33670:30;;;;33666:2133;;33739:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;33728:8;:32;;;;:::i;:::-;33721:39;;;;:::i;:::-;;;33797:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;;33786:8;:26;;;;:::i;:::-;33779:33;;;;:::i;:::-;;;33849:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;33838:8;:32;;;;:::i;:::-;33831:39;;;;:::i;:::-;;;33907:8;:19;;;;;:::i;:::-;;;;;;;;;;;;;;33896:8;:30;;;;:::i;:::-;33889:37;;;;:::i;:::-;;-1:-1:-1;33951:7:0;;33947:91;;33983:35;33993:4;34007;34014:3;33983:9;:35::i;:::-;34088:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;34077:8;:32;;;;:::i;:::-;34058:15;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;34152:15:0;;:8;;:15;;;:::i;:::-;;;;;;;;;;;;;;34141:8;:26;;;;:::i;:::-;34128:9;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;34216:21:0;;:8;;:21;;;:::i;:::-;;;;;;;;;;;;;;34205:8;:32;;;;:::i;:::-;34186:15;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;34284:19:0;;:8;;:19;;;:::i;:::-;;;;;;;;;;;;;;34273:8;:30;;;;:::i;:::-;34256:13;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;33666:2133:0;;-1:-1:-1;33666:2133:0;;34343:13;;-1:-1:-1;;;;;34343:13:0;;;34329:28;;;;34325:1474;;34396:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;34385:8;:33;;;;:::i;:::-;34378:40;;;;:::i;:::-;;;34455:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;;34444:8;:27;;;;:::i;:::-;34437:34;;;;:::i;:::-;;;34508:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;34497:8;:33;;;;:::i;:::-;34490:40;;;;:::i;:::-;;;34567:9;:20;;;;;:::i;:::-;;;;;;;;;;;;;;34556:8;:31;;;;:::i;:::-;34549:38;;;;:::i;:::-;;-1:-1:-1;34612:7:0;;34608:91;;34644:35;34654:4;34668;34675:3;34644:9;:35::i;:::-;34749:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;34738:8;:33;;;;:::i;:::-;34719:15;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;34814:16:0;;:9;;:16;;;:::i;:::-;;;;;;;;;;;;;;34803:8;:27;;;;:::i;:::-;34790:9;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;34879:22:0;;:9;;:22;;;:::i;:::-;;;;;;;;;;;;;;34868:8;:33;;;;:::i;:::-;34849:15;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;34948:20:0;;:9;;:20;;;:::i;:::-;;;;;;;;;;;;;;34937:8;:31;;;;:::i;:::-;34920:13;;:48;;;;;;;:::i;:::-;;;;;;;;34989:14;35117:13;;35078:15;;35045:9;;35006:15;;:48;;;;:::i;:::-;:87;;;;:::i;:::-;:124;;;;:::i;:::-;34989:141;;35155:6;35165:1;35155:11;35151:30;;35175:6;35168:13;;;;;;;;35151:30;35202:16;35221:17;;;;;;;;;-1:-1:-1;;;;;35221:17:0;-1:-1:-1;;;;;35221:31:0;;35398:13;;35355:15;;35318:9;;35275:15;;:52;;;;:::i;:::-;:95;;;;:::i;:::-;:136;;;;:::i;:::-;35434:8;35221:240;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35221:240:0;;;;;;;;;;;;:::i;:::-;35462:1;35221:243;;;;;;;;:::i;:::-;;;;;;;35202:262;;35501:13;;35489:8;:25;35485:299;;35611:14;35691:6;35650:11;;35641:6;:20;;;;:::i;:::-;35629:33;;:8;:33;:::i;:::-;35628:69;;;;:::i;:::-;35611:86;;35720:44;35739:8;35749:6;35757;35720:18;:44::i;:::-;35516:268;35485:299;34359:1440;;34325:1474;35815:13;35825:3;35815:13;;:::i;:::-;;;33571:2269;;33529:2311;-1:-1:-1;35859:6:0;;33253:2620;-1:-1:-1;;;33253:2620:0:o;21195:120::-;20207:7;;-1:-1:-1;;;20207:7:0;;;;20731:41;;;;-1:-1:-1;;;20731:41:0;;20255:2:1;20731:41:0;;;20237:21:1;20294:2;20274:18;;;20267:30;-1:-1:-1;;;20313:18:1;;;20306:50;20373:18;;20731:41:0;20053:344:1;20731:41:0;21254:7:::1;:15:::0;;-1:-1:-1;;;;21254:15:0::1;::::0;;21285:22:::1;4054:10:::0;21294:12:::1;21285:22;::::0;-1:-1:-1;;;;;3260:32:1;;;3242:51;;3230:2;3215:18;21285:22:0::1;;;;;;;21195:120::o:0;13654:591::-;-1:-1:-1;;;;;13738:21:0;;13730:67;;;;-1:-1:-1;;;13730:67:0;;20604:2:1;13730:67:0;;;20586:21:1;20643:2;20623:18;;;20616:30;20682:34;20662:18;;;20655:62;-1:-1:-1;;;20733:18:1;;;20726:31;20774:19;;13730:67:0;20402:397:1;13730:67:0;-1:-1:-1;;;;;13897:18:0;;13872:22;13897:18;;;;;;;;;;;13934:24;;;;13926:71;;;;-1:-1:-1;;;13926:71:0;;21006:2:1;13926:71:0;;;20988:21:1;21045:2;21025:18;;;21018:30;21084:34;21064:18;;;21057:62;-1:-1:-1;;;21135:18:1;;;21128:32;21177:19;;13926:71:0;20804:398:1;13926:71:0;-1:-1:-1;;;;;14033:18:0;;:9;:18;;;;;;;;;;14054:23;;;14033:44;;14099:12;:22;;14071:6;;14033:9;14099:22;;14071:6;;14099:22;:::i;:::-;;;;-1:-1:-1;;14139:37:0;;1283:25:1;;;14165:1:0;;-1:-1:-1;;;;;14139:37:0;;;;;1271:2:1;1256:18;14139:37:0;;;;;;;35881:535;;;:::o;18555:174::-;18631:6;;;-1:-1:-1;;;;;18648:17:0;;;-1:-1:-1;;;;;;18648:17:0;;;;;;;18681:40;;18631:6;;;18648:17;18631:6;;18681:40;;18612:16;;18681:40;18601:128;18555:174;:::o;20936:118::-;20207:7;;-1:-1:-1;;;20207:7:0;;;;20461:9;20453:38;;;;-1:-1:-1;;;20453:38:0;;21409:2:1;20453:38:0;;;21391:21:1;21448:2;21428:18;;;21421:30;-1:-1:-1;;;21467:18:1;;;21460:46;21523:18;;20453:38:0;21207:340:1;20453:38:0;20996:7:::1;:14:::0;;-1:-1:-1;;;;20996:14:0::1;-1:-1:-1::0;;;20996:14:0::1;::::0;;21026:20:::1;21033:12;4054:10:::0;;3974:98;11865:770;-1:-1:-1;;;;;12005:20:0;;11997:70;;;;-1:-1:-1;;;11997:70:0;;21754:2:1;11997:70:0;;;21736:21:1;21793:2;21773:18;;;21766:30;21832:34;21812:18;;;21805:62;-1:-1:-1;;;21883:18:1;;;21876:35;21928:19;;11997:70:0;21552:401:1;11997:70:0;-1:-1:-1;;;;;12086:23:0;;12078:71;;;;-1:-1:-1;;;12078:71:0;;22160:2:1;12078:71:0;;;22142:21:1;22199:2;22179:18;;;22172:30;22238:34;22218:18;;;22211:62;-1:-1:-1;;;22289:18:1;;;22282:33;22332:19;;12078:71:0;21958:399:1;12078:71:0;-1:-1:-1;;;;;12246:17:0;;12222:21;12246:17;;;;;;;;;;;12296:23;;;;12274:111;;;;-1:-1:-1;;;12274:111:0;;22564:2:1;12274:111:0;;;22546:21:1;22603:2;22583:18;;;22576:30;22642:34;22622:18;;;22615:62;-1:-1:-1;;;22693:18:1;;;22686:36;22739:19;;12274:111:0;22362:402:1;12274:111:0;-1:-1:-1;;;;;12421:17:0;;;:9;:17;;;;;;;;;;;12441:22;;;12421:42;;12485:20;;;;;;;;:30;;12457:6;;12421:9;12485:30;;12457:6;;12485:30;:::i;:::-;;;;;;;;12550:9;-1:-1:-1;;;;;12533:35:0;12542:6;-1:-1:-1;;;;;12533:35:0;;12561:6;12533:35;;;;1283:25:1;;1271:2;1256:18;;1137:177;12533:35:0;;;;;;;;11986:649;11865:770;;;:::o;40636:2755::-;19312:1;19458:7;;:19;19450:63;;;;-1:-1:-1;;;19450:63:0;;22971:2:1;19450:63:0;;;22953:21:1;23010:2;22990:18;;;22983:30;23049:33;23029:18;;;23022:61;23100:18;;19450:63:0;22769:355:1;19450:63:0;19312:1;19524:7;:18;;;40878:7:::1;:14:::0;;-1:-1:-1;;40878:14:0::1;40888:4;40878:14;::::0;;41072:13:::1;::::0;41036:15:::1;::::0;40928:21:::1;::::0;40878:7:::1;::::0;41072:13;41036:19:::1;::::0;19312:1;41036:19:::1;:::i;:::-;41010:9;;40979:15;;:40;;;;:::i;:::-;:77;;;;:::i;:::-;:106;;;;:::i;:::-;40962:123;;41098:59;41115:4;41130:17;;;;;;;;;-1:-1:-1::0;;;;;41130:17:0::1;41150:6;41098:8;:59::i;:::-;41170:17;::::0;:179:::1;::::0;-1:-1:-1;;;41170:179:0;;:17:::1;::::0;;::::1;-1:-1:-1::0;;;;;41170:17:0::1;::::0;:39:::1;::::0;:179:::1;::::0;41224:6;;41245:12;;41272:8;;41303:4:::1;::::0;41323:15:::1;::::0;41170:179:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;41170:179:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;41362:17:0::1;41382:36;41406:12:::0;41382:21:::1;:36;:::i;:::-;41362:56;;41431:22;41474:1;41456:15;;:19;;;;:::i;:::-;41431:44;;41486:20;41582:6;41571;41556:1;41538:15;;:19;;;;:::i;:::-;41537:30;::::0;41561:6:::1;41537:30;:::i;:::-;41536:41;;;;:::i;:::-;41510:68;::::0;:9;:68:::1;:::i;:::-;41509:79;;;;:::i;:::-;41486:102;;41601:20;41691:6;41680;41652:15;;41670:6;41652:24;;;;:::i;:::-;41651:35;;;;:::i;:::-;41625:62;::::0;:9;:62:::1;:::i;:::-;41624:73;;;;:::i;:::-;41601:96;;41708:14;41773:6;41762;41740:9;;41752:6;41740:18;;;;:::i;:::-;41739:29;;;;:::i;:::-;41726:43;::::0;:9;:43:::1;:::i;:::-;41725:54;;;;:::i;:::-;41708:71;;41790:18;41876:6;41852;41826:13;;41842:6;41826:22;;;;:::i;:::-;41825:33;;;;:::i;:::-;41812:47;::::0;:9;:47:::1;:::i;:::-;41811:71;;;;:::i;:::-;41790:92;;41895:67;41912:4;41927:17;;;;;;;;;-1:-1:-1::0;;;;;41927:17:0::1;41947:14;41895:8;:67::i;:::-;41976:19;42003:17;;;;;;;;;-1:-1:-1::0;;;;;42003:17:0::1;-1:-1:-1::0;;;;;42003:33:0::1;;42058:12;42104:4;42124:14;42153:1;42169;42185:10;:23;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;;42003:246:0::1;::::0;;;;;;-1:-1:-1;;;;;24029:32:1;;;42003:246:0::1;::::0;::::1;24011:51:1::0;24078:18;;;24071:34;;;;24121:18;;;24114:34;;;;24164:18;;;24157:34;42185:23:0;::::1;24207:19:1::0;;;24200:61;42223:15:0::1;24277:19:1::0;;;24270:35;23983:19;;42003:246:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41975:274;;;;42262:23;42403:11;42394:6;:20;;;;:::i;:::-;42376:13;;42345:15;;42320:9;;42289:15;;:40;;;;:::i;:::-;:71;;;;:::i;:::-;:100;;;;:::i;:::-;42288:127;;;;:::i;:::-;42262:153:::0;-1:-1:-1;42430:19:0;;42426:112:::1;;42466:60;42484:4;42491:10;:17;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;42491:17:0::1;42510:15:::0;42466:9:::1;:60::i;:::-;42551:7;42564:10;:23;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;42564:23:0::1;::::0;42600:12;;42564:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42550:67;;;42636:2;42628:44;;;::::0;-1:-1:-1;;;42628:44:0;;24979:2:1;42628:44:0::1;::::0;::::1;24961:21:1::0;25018:2;24998:18;;;24991:30;25057:31;25037:18;;;25030:59;25106:18;;42628:44:0::1;24777:353:1::0;42628:44:0::1;42686:7;42699:10;:17;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;42699:17:0::1;::::0;42729:6;;42699:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42685:55;;;42759:2;42751:38;;;::::0;-1:-1:-1;;;42751:38:0;;25337:2:1;42751:38:0::1;::::0;::::1;25319:21:1::0;25376:2;25356:18;;;25349:30;25415:25;25395:18;;;25388:53;25458:18;;42751:38:0::1;25135:347:1::0;42751:38:0::1;42803:7;42816:10;:21;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;42816:21:0::1;::::0;42850:10;;42816:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42802:63;;;42884:2;42876:42;;;::::0;-1:-1:-1;;;42876:42:0;;25689:2:1;42876:42:0::1;::::0;::::1;25671:21:1::0;25728:2;25708:18;;;25701:30;25767:29;25747:18;;;25740:57;25814:18;;42876:42:0::1;25487:351:1::0;42876:42:0::1;42931:12;43011:10:::0;42996:12;42972:21:::1;42987:6:::0;42972:12;:21:::1;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;42946:76;::::0;:9;:76:::1;:::i;:::-;42931:91:::0;-1:-1:-1;43037:8:0;;43033:154:::1;;43063:7;43076:10;:23;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;43076:23:0::1;::::0;43112:4;;43076:45:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43062:59;;;43144:2;43136:39;;;::::0;-1:-1:-1;;;43136:39:0;;26045:2:1;43136:39:0::1;::::0;::::1;26027:21:1::0;26084:2;26064:18;;;26057:30;26123:26;26103:18;;;26096:54;26167:18;;43136:39:0::1;25843:348:1::0;43136:39:0::1;43047:140;43033:154;-1:-1:-1::0;;43248:1:0::1;43230:15;:19:::0;;;43260:9:::1;:13:::0;;;43284:15:::1;:19:::0;;;43314:13:::1;:17:::0;-1:-1:-1;;43368:7:0::1;:15:::0;;-1:-1:-1;;43368:15:0::1;::::0;;-1:-1:-1;;43368:15:0;19565:7;:22;-1:-1:-1;;;;;;;;;;;40636:2755:0:o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:367;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1319:226::-;1378:6;1431:2;1419:9;1410:7;1406:23;1402:32;1399:52;;;1447:1;1444;1437:12;1399:52;-1:-1:-1;1492:23:1;;1319:226;-1:-1:-1;1319:226:1:o;1550:508::-;1627:6;1635;1643;1696:2;1684:9;1675:7;1671:23;1667:32;1664:52;;;1712:1;1709;1702:12;1664:52;1751:9;1738:23;1770:31;1795:5;1770:31;:::i;:::-;1820:5;-1:-1:-1;1877:2:1;1862:18;;1849:32;1890:33;1849:32;1890:33;:::i;:::-;1550:508;;1942:7;;-1:-1:-1;;;2022:2:1;2007:18;;;;1994:32;;1550:508::o;2252:247::-;2311:6;2364:2;2352:9;2343:7;2339:23;2335:32;2332:52;;;2380:1;2377;2370:12;2332:52;2419:9;2406:23;2438:31;2463:5;2438:31;:::i;2504:587::-;2590:6;2598;2606;2614;2667:3;2655:9;2646:7;2642:23;2638:33;2635:53;;;2684:1;2681;2674:12;2635:53;-1:-1:-1;;2729:23:1;;;2849:2;2834:18;;2821:32;;-1:-1:-1;2952:2:1;2937:18;;2924:32;;3055:2;3040:18;3027:32;;-1:-1:-1;2504:587:1;-1:-1:-1;2504:587:1:o;3304:529::-;3381:6;3389;3397;3450:2;3438:9;3429:7;3425:23;3421:32;3418:52;;;3466:1;3463;3456:12;3418:52;3505:9;3492:23;3524:31;3549:5;3524:31;:::i;:::-;3574:5;-1:-1:-1;3631:2:1;3616:18;;3603:32;3644:33;3603:32;3644:33;:::i;:::-;3696:7;-1:-1:-1;3755:2:1;3740:18;;3727:32;3768:33;3727:32;3768:33;:::i;:::-;3820:7;3810:17;;;3304:529;;;;;:::o;3838:375::-;3914:6;3922;3975:2;3963:9;3954:7;3950:23;3946:32;3943:52;;;3991:1;3988;3981:12;3943:52;4036:23;;;-1:-1:-1;4135:2:1;4120:18;;4107:32;4148:33;4107:32;4148:33;:::i;:::-;4200:7;4190:17;;;3838:375;;;;;:::o;4218:508::-;4295:6;4303;4311;4364:2;4352:9;4343:7;4339:23;4335:32;4332:52;;;4380:1;4377;4370:12;4332:52;4419:9;4406:23;4438:31;4463:5;4438:31;:::i;:::-;4488:5;-1:-1:-1;4566:2:1;4551:18;;4538:32;;-1:-1:-1;4648:2:1;4633:18;;4620:32;4661:33;4620:32;4661:33;:::i;4731:388::-;4799:6;4807;4860:2;4848:9;4839:7;4835:23;4831:32;4828:52;;;4876:1;4873;4866:12;4828:52;4915:9;4902:23;4934:31;4959:5;4934:31;:::i;:::-;4984:5;-1:-1:-1;5041:2:1;5026:18;;5013:32;5054:33;5013:32;5054:33;:::i;5124:380::-;5203:1;5199:12;;;;5246;;;5267:61;;5321:4;5313:6;5309:17;5299:27;;5267:61;5374:2;5366:6;5363:14;5343:18;5340:38;5337:161;;5420:10;5415:3;5411:20;5408:1;5401:31;5455:4;5452:1;5445:15;5483:4;5480:1;5473:15;5337:161;;5124:380;;;:::o;5509:356::-;5711:2;5693:21;;;5730:18;;;5723:30;5789:34;5784:2;5769:18;;5762:62;5856:2;5841:18;;5509:356::o;6629:127::-;6690:10;6685:3;6681:20;6678:1;6671:31;6721:4;6718:1;6711:15;6745:4;6742:1;6735:15;6761:125;6826:9;;;6847:10;;;6844:36;;;6860:18;;:::i;8918:253::-;-1:-1:-1;;;9120:18:1;;9163:1;9154:11;;8918:253::o;9176:259::-;-1:-1:-1;;;9378:24:1;;9427:1;9418:11;;9176:259::o;9440:::-;-1:-1:-1;;;9642:24:1;;9691:1;9682:11;;9440:259::o;9704:257::-;-1:-1:-1;;;9906:22:1;;9953:1;9944:11;;9704:257::o;12394:230::-;12464:6;12517:2;12505:9;12496:7;12492:23;12488:32;12485:52;;;12533:1;12530;12523:12;12485:52;-1:-1:-1;12578:16:1;;12394:230;-1:-1:-1;12394:230:1:o;13257:277::-;13324:6;13377:2;13365:9;13356:7;13352:23;13348:32;13345:52;;;13393:1;13390;13383:12;13345:52;13425:9;13419:16;13478:5;13471:13;13464:21;13457:5;13454:32;13444:60;;13500:1;13497;13490:12;17047:127;17108:10;17103:3;17099:20;17096:1;17089:31;17139:4;17136:1;17129:15;17163:4;17160:1;17153:15;17179:127;17240:10;17235:3;17231:20;17228:1;17221:31;17271:4;17268:1;17261:15;17295:4;17292:1;17285:15;17311:251;17381:6;17434:2;17422:9;17413:7;17409:23;17405:32;17402:52;;;17450:1;17447;17440:12;17402:52;17482:9;17476:16;17501:31;17526:5;17501:31;:::i;17567:217::-;17607:1;17633;17623:132;;17677:10;17672:3;17668:20;17665:1;17658:31;17712:4;17709:1;17702:15;17740:4;17737:1;17730:15;17623:132;-1:-1:-1;17769:9:1;;17567:217::o;17789:168::-;17862:9;;;17893;;17910:15;;;17904:22;;17890:37;17880:71;;17931:18;;:::i;17962:446::-;18015:3;18053:5;18047:12;18080:6;18075:3;18068:19;18112:4;18107:3;18103:14;18096:21;;18151:4;18144:5;18140:16;18174:1;18184:199;18198:6;18195:1;18192:13;18184:199;;;18263:13;;-1:-1:-1;;;;;18259:39:1;18247:52;;18328:4;18319:14;;;;18356:17;;;;18295:1;18213:9;18184:199;;;-1:-1:-1;18399:3:1;;17962:446;-1:-1:-1;;;;17962:446:1:o;18413:332::-;18620:6;18609:9;18602:25;18663:2;18658;18647:9;18643:18;18636:30;18583:4;18683:56;18735:2;18724:9;18720:18;18712:6;18683:56;:::i;:::-;18675:64;18413:332;-1:-1:-1;;;;18413:332:1:o;18750:1165::-;18845:6;18898:2;18886:9;18877:7;18873:23;18869:32;18866:52;;;18914:1;18911;18904:12;18866:52;18947:9;18941:16;18980:18;18972:6;18969:30;18966:50;;;19012:1;19009;19002:12;18966:50;19035:22;;19088:4;19080:13;;19076:27;-1:-1:-1;19066:55:1;;19117:1;19114;19107:12;19066:55;19150:2;19144:9;19176:18;19168:6;19165:30;19162:56;;;19198:18;;:::i;:::-;19244:6;19241:1;19237:14;19280:2;19274:9;19343:2;19339:7;19334:2;19330;19326:11;19322:25;19314:6;19310:38;19414:6;19402:10;19399:22;19378:18;19366:10;19363:34;19360:62;19357:88;;;19425:18;;:::i;:::-;19461:2;19454:22;19511;;;19561:2;19591:11;;;19587:20;;;19511:22;19549:15;;19619:19;;;19616:39;;;19651:1;19648;19641:12;19616:39;19683:2;19679;19675:11;19664:22;;19695:189;19711:6;19706:3;19703:15;19695:189;;;19801:10;;19824:18;;;19871:2;19728:12;;;;19801:10;;-1:-1:-1;19862:12:1;19695:189;;;-1:-1:-1;19903:6:1;18750:1165;-1:-1:-1;;;;;;18750:1165:1:o;19920:128::-;19987:9;;;20008:11;;;20005:37;;;20022:18;;:::i;23129:574::-;23420:6;23409:9;23402:25;23463:6;23458:2;23447:9;23443:18;23436:34;23506:3;23501:2;23490:9;23486:18;23479:31;23383:4;23527:57;23579:3;23568:9;23564:19;23556:6;23527:57;:::i;:::-;-1:-1:-1;;;;;23620:32:1;;;;23615:2;23600:18;;23593:60;-1:-1:-1;23684:3:1;23669:19;23662:35;23519:65;23129:574;-1:-1:-1;;;23129:574:1:o;24316:456::-;24404:6;24412;24420;24473:2;24461:9;24452:7;24448:23;24444:32;24441:52;;;24489:1;24486;24479:12;24441:52;-1:-1:-1;;24534:16:1;;24640:2;24625:18;;24619:25;24736:2;24721:18;;;24715:25;24534:16;;24619:25;;-1:-1:-1;24715:25:1;24316:456;-1:-1:-1;24316:456:1:o
Swarm Source
ipfs://9d0e6646df7e4821c24e1b6a7a9f5e31937672408b1feae43d2e9f3a04c6e1e5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.