Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 149 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17504916 | 435 days ago | IN | 0 ETH | 0.00070407 | ||||
Approve | 16067988 | 637 days ago | IN | 0 ETH | 0.0003131 | ||||
Approve | 15891998 | 662 days ago | IN | 0 ETH | 0.0009889 | ||||
Approve | 15817894 | 672 days ago | IN | 0 ETH | 0.00064187 | ||||
Approve | 15808073 | 673 days ago | IN | 0 ETH | 0.00067061 | ||||
Approve | 15803702 | 674 days ago | IN | 0 ETH | 0.00080248 | ||||
Approve | 15803678 | 674 days ago | IN | 0 ETH | 0.00082563 | ||||
Approve | 15803504 | 674 days ago | IN | 0 ETH | 0.00083772 | ||||
Approve | 15803398 | 674 days ago | IN | 0 ETH | 0.0007735 | ||||
Approve | 15801621 | 674 days ago | IN | 0 ETH | 0.00081188 | ||||
Approve | 15800435 | 674 days ago | IN | 0 ETH | 0.00084469 | ||||
Approve | 15800228 | 674 days ago | IN | 0 ETH | 0.0008167 | ||||
Approve | 15800208 | 674 days ago | IN | 0 ETH | 0.00091745 | ||||
Approve | 15799941 | 674 days ago | IN | 0 ETH | 0.00088192 | ||||
Approve | 15799843 | 674 days ago | IN | 0 ETH | 0.00099641 | ||||
Approve | 15799692 | 674 days ago | IN | 0 ETH | 0.00105982 | ||||
Approve | 15799658 | 674 days ago | IN | 0 ETH | 0.00103914 | ||||
Approve | 15799652 | 674 days ago | IN | 0 ETH | 0.00129634 | ||||
Approve | 15799643 | 674 days ago | IN | 0 ETH | 0.00148815 | ||||
Approve | 15799639 | 674 days ago | IN | 0 ETH | 0.00119762 | ||||
Approve | 15799638 | 674 days ago | IN | 0 ETH | 0.00119479 | ||||
Approve | 15799616 | 674 days ago | IN | 0 ETH | 0.00123826 | ||||
Approve | 15799614 | 674 days ago | IN | 0 ETH | 0.00100306 | ||||
Approve | 15799597 | 674 days ago | IN | 0 ETH | 0.00121202 | ||||
Approve | 15799595 | 674 days ago | IN | 0 ETH | 0.0012975 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17504657 | 435 days ago | 0.00095994 ETH | ||||
17504657 | 435 days ago | 0.00031884 ETH | ||||
17504657 | 435 days ago | 0.00095994 ETH | ||||
17504657 | 435 days ago | 0.00191989 ETH | ||||
16183675 | 621 days ago | 0.00049997 ETH | ||||
16183675 | 621 days ago | 0.00016588 ETH | ||||
16183675 | 621 days ago | 0.00049997 ETH | ||||
16183675 | 621 days ago | 0.00099995 ETH | ||||
15848912 | 668 days ago | 0.00038954 ETH | ||||
15848912 | 668 days ago | 0.00012919 ETH | ||||
15848912 | 668 days ago | 0.00038954 ETH | ||||
15848912 | 668 days ago | 0.00077909 ETH | ||||
15806335 | 674 days ago | 0.00039752 ETH | ||||
15806335 | 674 days ago | 0.00013184 ETH | ||||
15806335 | 674 days ago | 0.00039752 ETH | ||||
15806335 | 674 days ago | 0.00079505 ETH | ||||
15803509 | 674 days ago | 0.00091322 ETH | ||||
15803509 | 674 days ago | 0.00030324 ETH | ||||
15803509 | 674 days ago | 0.00091322 ETH | ||||
15803509 | 674 days ago | 0.00182644 ETH | ||||
15801623 | 674 days ago | 0.00073427 ETH | ||||
15801623 | 674 days ago | 0.00024368 ETH | ||||
15801623 | 674 days ago | 0.00073427 ETH | ||||
15801623 | 674 days ago | 0.00146855 ETH | ||||
15800463 | 674 days ago | 0.00073487 ETH |
Loading...
Loading
Contract Name:
AFAIK
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-21 */ /*********BE THE FIRST ONE********/ // SPDX-License-Identifier: MIT pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0; pragma experimental ABIEncoderV2; 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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } 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); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ 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 substraction 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 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 IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface 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 swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract AFAIK is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private immutable uniswapV2Router; address private immutable uniswapV2Pair; address private constant deadAddress = address(0xdead); bool private swapping; // Wallet holding project funds address public projectWallet; // Transaction limits uint256 public maxTransactionAmount; uint256 public maxWallet; // When to swap tokens for liquidity and project funds uint256 private swapTokensAtAmount; bool private limitsInEffect = true; bool private tradingActive = true; bool private swapEnabled = true; uint256 public buyTotalFees; uint256 private buyLiquidityFee; uint256 private buyProjectFee; uint256 public sellTotalFees; uint256 private sellLiquidityFee; uint256 private sellProjectFee; uint256 private tokensForLiquidity; uint256 private tokensForProject; // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) private automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event ProjectWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("FIRST", "AFAIK") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); _excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); _excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 1_000_000_000 * 1e18; maxWallet = 20_000_000 * 1e18; // 2% from total supply maxTransactionAmount = 20_000_000 * 1e18; // 2% from total supply swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap tokens in ca at this supply buyLiquidityFee = 0; buyProjectFee = 15; buyTotalFees = buyLiquidityFee + buyProjectFee; sellLiquidityFee = 0; sellProjectFee = 25; sellTotalFees = sellLiquidityFee + sellProjectFee; projectWallet = address(owner()); // set owner as project wallet // exclude from paying fees or having max transaction amount _excludeFromFees(owner(), true); _excludeFromFees(address(this), true); _excludeFromFees(address(0xdead), true); _excludeFromMaxTransaction(owner(), true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), totalSupply); } receive() external payable {} function _excludeFromMaxTransaction(address updAds, bool isEx) private { _isExcludedMaxTransactionAmount[updAds] = isEx; } function _excludeFromFees(address account, bool excluded) private { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForProject += (fees * sellProjectFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForProject += (fees * buyProjectFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, // liquidity added is burned, no bullshit block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForProject; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForProject = ethBalance.mul(tokensForProject).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForProject; tokensForLiquidity = 0; tokensForProject = 0; // Add liquidity now if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } // Transfer eth for project (success, ) = address(projectWallet).call{value: ethForProject}(""); } /**************************************************/ /****************Public Functions******************/ /**************************************************/ function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function updateProjectWallet(address newProjectWallet) external onlyOwner { emit ProjectWalletUpdated(newProjectWallet, projectWallet); projectWallet = newProjectWallet; } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // Update buy fees by owner function updateBuyFees( uint256 _liquidityFee, uint256 _projectFee ) external onlyOwner { buyLiquidityFee = _liquidityFee; buyProjectFee = _projectFee; buyTotalFees = buyLiquidityFee + buyProjectFee; require(buyTotalFees <= 5, "Must keep fees at 5% or less"); } // Update sell fees by owner function updateSellFees( uint256 _liquidityFee, uint256 _projectFee ) external onlyOwner { sellLiquidityFee = _liquidityFee; sellProjectFee = _projectFee; sellTotalFees = sellLiquidityFee + sellProjectFee; require(sellTotalFees <= 5, "Must keep fees at 5% or less"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProjectWallet","type":"address"}],"name":"updateProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600581526020017f46495253540000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f414641494b0000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e79291906200091d565b508060049080519060200190620001009291906200091d565b5050506200012362000117620004fb60201b60201c565b6200050360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014f816001620005c960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000a37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000a37565b6040518363ffffffff1660e01b8152600401620002a292919062000a7a565b6020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000a37565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033060a0516001620005c960201b60201c565b6200034560a05160016200062460201b60201c565b60006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c280290940000006007819055506127106005826200038c919062000ae0565b62000398919062000b70565b6009819055506000600c81905550600f600d81905550600d54600c54620003c0919062000ba8565b600b819055506000600f819055506019601081905550601054600f54620003e8919062000ba8565b600e81905550620003fe620006c560201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200046062000452620006c560201b60201c565b6001620006ef60201b60201c565b62000473306001620006ef60201b60201c565b6200048861dead6001620006ef60201b60201c565b620004aa6200049c620006c560201b60201c565b6001620005c960201b60201c565b620004bd306001620005c960201b60201c565b620004d261dead6001620005c960201b60201c565b620004f3620004e6620006c560201b60201c565b826200079a60201b60201c565b505062000d55565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200078e919062000c22565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200080d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008049062000ca0565b60405180910390fd5b62000821600083836200091360201b60201c565b806002600082825462000835919062000ba8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200088c919062000ba8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f3919062000cd3565b60405180910390a36200090f600083836200091860201b60201c565b5050565b505050565b505050565b8280546200092b9062000d1f565b90600052602060002090601f0160209004810192826200094f57600085556200099b565b82601f106200096a57805160ff19168380011785556200099b565b828001600101855582156200099b579182015b828111156200099a5782518255916020019190600101906200097d565b5b509050620009aa9190620009ae565b5090565b5b80821115620009c9576000816000905550600101620009af565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009ff82620009d2565b9050919050565b62000a1181620009f2565b811462000a1d57600080fd5b50565b60008151905062000a318162000a06565b92915050565b60006020828403121562000a505762000a4f620009cd565b5b600062000a608482850162000a20565b91505092915050565b62000a7481620009f2565b82525050565b600060408201905062000a91600083018562000a69565b62000aa0602083018462000a69565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aed8262000aa7565b915062000afa8362000aa7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b365762000b3562000ab1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000b7d8262000aa7565b915062000b8a8362000aa7565b92508262000b9d5762000b9c62000b41565b5b828204905092915050565b600062000bb58262000aa7565b915062000bc28362000aa7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000bfa5762000bf962000ab1565b5b828201905092915050565b60008115159050919050565b62000c1c8162000c05565b82525050565b600060208201905062000c39600083018462000c11565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c88601f8362000c3f565b915062000c958262000c50565b602082019050919050565b6000602082019050818103600083015262000cbb8162000c79565b9050919050565b62000ccd8162000aa7565b82525050565b600060208201905062000cea600083018462000cc2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d3857607f821691505b6020821081141562000d4f5762000d4e62000cf0565b5b50919050565b60805160a05161367a62000d9460003960005050600081816123fa015281816124db015281816125020152818161259e01526125c5015261367a6000f3fe60806040526004361061016a5760003560e01c806371927628116100d1578063a9059cbb1161008a578063d85ba06311610064578063d85ba0631461054d578063dd62ed3e14610578578063f2fde38b146105b5578063f8b45b05146105de57610171565b8063a9059cbb146104ba578063beb08ab9146104f7578063c8c8ebe41461052257610171565b806371927628146103bc578063751039fc146103e55780638a8c523c146104105780638da5cb5b1461042757806395d89b4114610452578063a457c2d71461047d57610171565b80633950935111610123578063395093511461029a5780634fbee193146102d757806366ca9b83146103145780636a486a8e1461033d57806370a0823114610368578063715018a6146103a557610171565b806302dbd8f81461017657806306fdde031461019f578063095ea7b3146101ca57806318160ddd1461020757806323b872dd14610232578063313ce5671461026f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d600480360381019061019891906126af565b610609565b005b3480156101ab57600080fd5b506101b46106f3565b6040516101c19190612788565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec9190612808565b610785565b6040516101fe9190612863565b60405180910390f35b34801561021357600080fd5b5061021c6107a3565b604051610229919061288d565b60405180910390f35b34801561023e57600080fd5b50610259600480360381019061025491906128a8565b6107ad565b6040516102669190612863565b60405180910390f35b34801561027b57600080fd5b506102846108a5565b6040516102919190612917565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612808565b6108ae565b6040516102ce9190612863565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612932565b61095a565b60405161030b9190612863565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906126af565b6109b0565b005b34801561034957600080fd5b50610352610a9a565b60405161035f919061288d565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190612932565b610aa0565b60405161039c919061288d565b60405180910390f35b3480156103b157600080fd5b506103ba610ae8565b005b3480156103c857600080fd5b506103e360048036038101906103de9190612932565b610b70565b005b3480156103f157600080fd5b506103fa610cac565b6040516104079190612863565b60405180910390f35b34801561041c57600080fd5b50610425610d4c565b005b34801561043357600080fd5b5061043c610e00565b604051610449919061296e565b60405180910390f35b34801561045e57600080fd5b50610467610e2a565b6040516104749190612788565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190612808565b610ebc565b6040516104b19190612863565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190612808565b610fa7565b6040516104ee9190612863565b60405180910390f35b34801561050357600080fd5b5061050c610fc5565b604051610519919061296e565b60405180910390f35b34801561052e57600080fd5b50610537610feb565b604051610544919061288d565b60405180910390f35b34801561055957600080fd5b50610562610ff1565b60405161056f919061288d565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190612989565b610ff7565b6040516105ac919061288d565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190612932565b61107e565b005b3480156105ea57600080fd5b506105f3611176565b604051610600919061288d565b60405180910390f35b61061161117c565b73ffffffffffffffffffffffffffffffffffffffff1661062f610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90612a15565b60405180910390fd5b81600f8190555080601081905550601054600f546106a39190612a64565b600e819055506005600e5411156106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690612b06565b60405180910390fd5b5050565b60606003805461070290612b55565b80601f016020809104026020016040519081016040528092919081815260200182805461072e90612b55565b801561077b5780601f106107505761010080835404028352916020019161077b565b820191906000526020600020905b81548152906001019060200180831161075e57829003601f168201915b5050505050905090565b600061079961079261117c565b8484611184565b6001905092915050565b6000600254905090565b60006107ba84848461134f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061080561117c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90612bf9565b60405180910390fd5b6108998561089161117c565b858403611184565b60019150509392505050565b60006012905090565b60006109506108bb61117c565b8484600160006108c961117c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461094b9190612a64565b611184565b6001905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6109b861117c565b73ffffffffffffffffffffffffffffffffffffffff166109d6610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2390612a15565b60405180910390fd5b81600c8190555080600d81905550600d54600c54610a4a9190612a64565b600b819055506005600b541115610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90612b06565b60405180910390fd5b5050565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610af061117c565b73ffffffffffffffffffffffffffffffffffffffff16610b0e610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b90612a15565b60405180910390fd5b610b6e6000611dbb565b565b610b7861117c565b73ffffffffffffffffffffffffffffffffffffffff16610b96610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612a15565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610cb661117c565b73ffffffffffffffffffffffffffffffffffffffff16610cd4610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2190612a15565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b610d5461117c565b73ffffffffffffffffffffffffffffffffffffffff16610d72610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90612a15565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e3990612b55565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6590612b55565b8015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050505050905090565b60008060016000610ecb61117c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90612c8b565b60405180910390fd5b610f9c610f9361117c565b85858403611184565b600191505092915050565b6000610fbb610fb461117c565b848461134f565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61108661117c565b73ffffffffffffffffffffffffffffffffffffffff166110a4610e00565b73ffffffffffffffffffffffffffffffffffffffff16146110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190612a15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190612d1d565b60405180910390fd5b61117381611dbb565b50565b60085481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb90612daf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90612e41565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611342919061288d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690612ed3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690612f65565b60405180910390fd5b60008114156114495761144483836000611e81565b611db6565b600a60009054906101000a900460ff161561194457611466610e00565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114d457506114a4610e00565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561150d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611547575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115605750600560149054906101000a900460ff16155b1561194357600a60019054906101000a900460ff1661165a57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061161a5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165090612fd1565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156116fd5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117a457600754811115611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173e90613063565b60405180910390fd5b60085461175383610aa0565b8261175e9190612a64565b111561179f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611796906130cf565b60405180910390fd5b611942565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156118475750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561189657600754811115611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613161565b60405180910390fd5b611941565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611940576008546118f383610aa0565b826118fe9190612a64565b111561193f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611936906130cf565b60405180910390fd5b5b5b5b5b5b600061194f30610aa0565b9050600060095482101590508080156119745750600a60029054906101000a900460ff165b801561198d5750600560149054906101000a900460ff16155b80156119e35750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a395750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a8f5750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ad3576001600560146101000a81548160ff021916908315150217905550611ab7612102565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b895750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b9357600090505b60008115611da657601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611bf657506000600e54115b15611c9057611c236064611c15600e548861230f90919063ffffffff16565b61232590919063ffffffff16565b9050600e54600f5482611c369190613181565b611c40919061320a565b60116000828254611c519190612a64565b92505081905550600e5460105482611c699190613181565b611c73919061320a565b60126000828254611c849190612a64565b92505081905550611d82565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ceb57506000600b54115b15611d8157611d186064611d0a600b548861230f90919063ffffffff16565b61232590919063ffffffff16565b9050600b54600c5482611d2b9190613181565b611d35919061320a565b60116000828254611d469190612a64565b92505081905550600b54600d5482611d5e9190613181565b611d68919061320a565b60126000828254611d799190612a64565b925050819055505b5b6000811115611d9757611d96873083611e81565b5b8085611da3919061323b565b94505b611db1878787611e81565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890612ed3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890612f65565b60405180910390fd5b611f6c83838361233b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe9906132e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120859190612a64565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120e9919061288d565b60405180910390a36120fc848484612340565b50505050565b600061210d30610aa0565b905060006012546011546121219190612a64565b90506000808314806121335750600082145b156121405750505061230d565b601460095461214f9190613181565b8311156121685760146009546121659190613181565b92505b60006002836011548661217b9190613181565b612185919061320a565b61218f919061320a565b905060006121a6828661234590919063ffffffff16565b905060004790506121b68261235b565b60006121cb824761234590919063ffffffff16565b905060006121f6876121e86012548561230f90919063ffffffff16565b61232590919063ffffffff16565b905060008183612206919061323b565b9050600060118190555060006012819055506000861180156122285750600081115b15612275576122378682612598565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260115460405161226c93929190613301565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516122bb90613369565b60006040518083038185875af1925050503d80600081146122f8576040519150601f19603f3d011682016040523d82523d6000602084013e6122fd565b606091505b5050809750505050505050505050505b565b6000818361231d9190613181565b905092915050565b60008183612333919061320a565b905092915050565b505050565b505050565b60008183612353919061323b565b905092915050565b6000600267ffffffffffffffff8111156123785761237761337e565b5b6040519080825280602002602001820160405280156123a65781602001602082028036833780820191505090505b50905030816000815181106123be576123bd6133ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612463573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248791906133f1565b8160018151811061249b5761249a6133ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612500307f000000000000000000000000000000000000000000000000000000000000000084611184565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612562959493929190613521565b600060405180830381600087803b15801561257c57600080fd5b505af1158015612590573d6000803e3d6000fd5b505050505050565b6125c3307f000000000000000000000000000000000000000000000000000000000000000084611184565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161262a9695949392919061357b565b60606040518083038185885af1158015612648573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061266d91906135f1565b5050505050565b600080fd5b6000819050919050565b61268c81612679565b811461269757600080fd5b50565b6000813590506126a981612683565b92915050565b600080604083850312156126c6576126c5612674565b5b60006126d48582860161269a565b92505060206126e58582860161269a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272957808201518184015260208101905061270e565b83811115612738576000848401525b50505050565b6000601f19601f8301169050919050565b600061275a826126ef565b61276481856126fa565b935061277481856020860161270b565b61277d8161273e565b840191505092915050565b600060208201905081810360008301526127a2818461274f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d5826127aa565b9050919050565b6127e5816127ca565b81146127f057600080fd5b50565b600081359050612802816127dc565b92915050565b6000806040838503121561281f5761281e612674565b5b600061282d858286016127f3565b925050602061283e8582860161269a565b9150509250929050565b60008115159050919050565b61285d81612848565b82525050565b60006020820190506128786000830184612854565b92915050565b61288781612679565b82525050565b60006020820190506128a2600083018461287e565b92915050565b6000806000606084860312156128c1576128c0612674565b5b60006128cf868287016127f3565b93505060206128e0868287016127f3565b92505060406128f18682870161269a565b9150509250925092565b600060ff82169050919050565b612911816128fb565b82525050565b600060208201905061292c6000830184612908565b92915050565b60006020828403121561294857612947612674565b5b6000612956848285016127f3565b91505092915050565b612968816127ca565b82525050565b6000602082019050612983600083018461295f565b92915050565b600080604083850312156129a05761299f612674565b5b60006129ae858286016127f3565b92505060206129bf858286016127f3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006129ff6020836126fa565b9150612a0a826129c9565b602082019050919050565b60006020820190508181036000830152612a2e816129f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a6f82612679565b9150612a7a83612679565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612aaf57612aae612a35565b5b828201905092915050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000612af0601c836126fa565b9150612afb82612aba565b602082019050919050565b60006020820190508181036000830152612b1f81612ae3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b6d57607f821691505b60208210811415612b8157612b80612b26565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612be36028836126fa565b9150612bee82612b87565b604082019050919050565b60006020820190508181036000830152612c1281612bd6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c756025836126fa565b9150612c8082612c19565b604082019050919050565b60006020820190508181036000830152612ca481612c68565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d076026836126fa565b9150612d1282612cab565b604082019050919050565b60006020820190508181036000830152612d3681612cfa565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612d996024836126fa565b9150612da482612d3d565b604082019050919050565b60006020820190508181036000830152612dc881612d8c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e2b6022836126fa565b9150612e3682612dcf565b604082019050919050565b60006020820190508181036000830152612e5a81612e1e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612ebd6025836126fa565b9150612ec882612e61565b604082019050919050565b60006020820190508181036000830152612eec81612eb0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612f4f6023836126fa565b9150612f5a82612ef3565b604082019050919050565b60006020820190508181036000830152612f7e81612f42565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000612fbb6016836126fa565b9150612fc682612f85565b602082019050919050565b60006020820190508181036000830152612fea81612fae565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061304d6035836126fa565b915061305882612ff1565b604082019050919050565b6000602082019050818103600083015261307c81613040565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006130b96013836126fa565b91506130c482613083565b602082019050919050565b600060208201905081810360008301526130e8816130ac565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061314b6036836126fa565b9150613156826130ef565b604082019050919050565b6000602082019050818103600083015261317a8161313e565b9050919050565b600061318c82612679565b915061319783612679565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131d0576131cf612a35565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061321582612679565b915061322083612679565b9250826132305761322f6131db565b5b828204905092915050565b600061324682612679565b915061325183612679565b92508282101561326457613263612a35565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132cb6026836126fa565b91506132d68261326f565b604082019050919050565b600060208201905081810360008301526132fa816132be565b9050919050565b6000606082019050613316600083018661287e565b613323602083018561287e565b613330604083018461287e565b949350505050565b600081905092915050565b50565b6000613353600083613338565b915061335e82613343565b600082019050919050565b600061337482613346565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506133eb816127dc565b92915050565b60006020828403121561340757613406612674565b5b6000613415848285016133dc565b91505092915050565b6000819050919050565b6000819050919050565b600061344d6134486134438461341e565b613428565b612679565b9050919050565b61345d81613432565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613498816127ca565b82525050565b60006134aa838361348f565b60208301905092915050565b6000602082019050919050565b60006134ce82613463565b6134d8818561346e565b93506134e38361347f565b8060005b838110156135145781516134fb888261349e565b9750613506836134b6565b9250506001810190506134e7565b5085935050505092915050565b600060a082019050613536600083018861287e565b6135436020830187613454565b818103604083015261355581866134c3565b9050613564606083018561295f565b613571608083018461287e565b9695505050505050565b600060c082019050613590600083018961295f565b61359d602083018861287e565b6135aa6040830187613454565b6135b76060830186613454565b6135c4608083018561295f565b6135d160a083018461287e565b979650505050505050565b6000815190506135eb81612683565b92915050565b60008060006060848603121561360a57613609612674565b5b6000613618868287016135dc565b9350506020613629868287016135dc565b925050604061363a868287016135dc565b915050925092509256fea2646970667358221220967724bafc9bc2d6a6e613c83944389557df22a65dd3fe7e95788c53d0dd391e64736f6c634300080a0033
Deployed Bytecode
0x60806040526004361061016a5760003560e01c806371927628116100d1578063a9059cbb1161008a578063d85ba06311610064578063d85ba0631461054d578063dd62ed3e14610578578063f2fde38b146105b5578063f8b45b05146105de57610171565b8063a9059cbb146104ba578063beb08ab9146104f7578063c8c8ebe41461052257610171565b806371927628146103bc578063751039fc146103e55780638a8c523c146104105780638da5cb5b1461042757806395d89b4114610452578063a457c2d71461047d57610171565b80633950935111610123578063395093511461029a5780634fbee193146102d757806366ca9b83146103145780636a486a8e1461033d57806370a0823114610368578063715018a6146103a557610171565b806302dbd8f81461017657806306fdde031461019f578063095ea7b3146101ca57806318160ddd1461020757806323b872dd14610232578063313ce5671461026f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d600480360381019061019891906126af565b610609565b005b3480156101ab57600080fd5b506101b46106f3565b6040516101c19190612788565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec9190612808565b610785565b6040516101fe9190612863565b60405180910390f35b34801561021357600080fd5b5061021c6107a3565b604051610229919061288d565b60405180910390f35b34801561023e57600080fd5b50610259600480360381019061025491906128a8565b6107ad565b6040516102669190612863565b60405180910390f35b34801561027b57600080fd5b506102846108a5565b6040516102919190612917565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612808565b6108ae565b6040516102ce9190612863565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612932565b61095a565b60405161030b9190612863565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906126af565b6109b0565b005b34801561034957600080fd5b50610352610a9a565b60405161035f919061288d565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190612932565b610aa0565b60405161039c919061288d565b60405180910390f35b3480156103b157600080fd5b506103ba610ae8565b005b3480156103c857600080fd5b506103e360048036038101906103de9190612932565b610b70565b005b3480156103f157600080fd5b506103fa610cac565b6040516104079190612863565b60405180910390f35b34801561041c57600080fd5b50610425610d4c565b005b34801561043357600080fd5b5061043c610e00565b604051610449919061296e565b60405180910390f35b34801561045e57600080fd5b50610467610e2a565b6040516104749190612788565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190612808565b610ebc565b6040516104b19190612863565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190612808565b610fa7565b6040516104ee9190612863565b60405180910390f35b34801561050357600080fd5b5061050c610fc5565b604051610519919061296e565b60405180910390f35b34801561052e57600080fd5b50610537610feb565b604051610544919061288d565b60405180910390f35b34801561055957600080fd5b50610562610ff1565b60405161056f919061288d565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190612989565b610ff7565b6040516105ac919061288d565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190612932565b61107e565b005b3480156105ea57600080fd5b506105f3611176565b604051610600919061288d565b60405180910390f35b61061161117c565b73ffffffffffffffffffffffffffffffffffffffff1661062f610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90612a15565b60405180910390fd5b81600f8190555080601081905550601054600f546106a39190612a64565b600e819055506005600e5411156106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690612b06565b60405180910390fd5b5050565b60606003805461070290612b55565b80601f016020809104026020016040519081016040528092919081815260200182805461072e90612b55565b801561077b5780601f106107505761010080835404028352916020019161077b565b820191906000526020600020905b81548152906001019060200180831161075e57829003601f168201915b5050505050905090565b600061079961079261117c565b8484611184565b6001905092915050565b6000600254905090565b60006107ba84848461134f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061080561117c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90612bf9565b60405180910390fd5b6108998561089161117c565b858403611184565b60019150509392505050565b60006012905090565b60006109506108bb61117c565b8484600160006108c961117c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461094b9190612a64565b611184565b6001905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6109b861117c565b73ffffffffffffffffffffffffffffffffffffffff166109d6610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2390612a15565b60405180910390fd5b81600c8190555080600d81905550600d54600c54610a4a9190612a64565b600b819055506005600b541115610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90612b06565b60405180910390fd5b5050565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610af061117c565b73ffffffffffffffffffffffffffffffffffffffff16610b0e610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b90612a15565b60405180910390fd5b610b6e6000611dbb565b565b610b7861117c565b73ffffffffffffffffffffffffffffffffffffffff16610b96610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612a15565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610cb661117c565b73ffffffffffffffffffffffffffffffffffffffff16610cd4610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2190612a15565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b610d5461117c565b73ffffffffffffffffffffffffffffffffffffffff16610d72610e00565b73ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90612a15565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e3990612b55565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6590612b55565b8015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050505050905090565b60008060016000610ecb61117c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90612c8b565b60405180910390fd5b610f9c610f9361117c565b85858403611184565b600191505092915050565b6000610fbb610fb461117c565b848461134f565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61108661117c565b73ffffffffffffffffffffffffffffffffffffffff166110a4610e00565b73ffffffffffffffffffffffffffffffffffffffff16146110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190612a15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190612d1d565b60405180910390fd5b61117381611dbb565b50565b60085481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb90612daf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90612e41565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611342919061288d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690612ed3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690612f65565b60405180910390fd5b60008114156114495761144483836000611e81565b611db6565b600a60009054906101000a900460ff161561194457611466610e00565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114d457506114a4610e00565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561150d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611547575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115605750600560149054906101000a900460ff16155b1561194357600a60019054906101000a900460ff1661165a57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061161a5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165090612fd1565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156116fd5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117a457600754811115611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173e90613063565b60405180910390fd5b60085461175383610aa0565b8261175e9190612a64565b111561179f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611796906130cf565b60405180910390fd5b611942565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156118475750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561189657600754811115611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613161565b60405180910390fd5b611941565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611940576008546118f383610aa0565b826118fe9190612a64565b111561193f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611936906130cf565b60405180910390fd5b5b5b5b5b5b600061194f30610aa0565b9050600060095482101590508080156119745750600a60029054906101000a900460ff165b801561198d5750600560149054906101000a900460ff16155b80156119e35750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a395750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a8f5750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ad3576001600560146101000a81548160ff021916908315150217905550611ab7612102565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b895750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b9357600090505b60008115611da657601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611bf657506000600e54115b15611c9057611c236064611c15600e548861230f90919063ffffffff16565b61232590919063ffffffff16565b9050600e54600f5482611c369190613181565b611c40919061320a565b60116000828254611c519190612a64565b92505081905550600e5460105482611c699190613181565b611c73919061320a565b60126000828254611c849190612a64565b92505081905550611d82565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ceb57506000600b54115b15611d8157611d186064611d0a600b548861230f90919063ffffffff16565b61232590919063ffffffff16565b9050600b54600c5482611d2b9190613181565b611d35919061320a565b60116000828254611d469190612a64565b92505081905550600b54600d5482611d5e9190613181565b611d68919061320a565b60126000828254611d799190612a64565b925050819055505b5b6000811115611d9757611d96873083611e81565b5b8085611da3919061323b565b94505b611db1878787611e81565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890612ed3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890612f65565b60405180910390fd5b611f6c83838361233b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe9906132e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120859190612a64565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120e9919061288d565b60405180910390a36120fc848484612340565b50505050565b600061210d30610aa0565b905060006012546011546121219190612a64565b90506000808314806121335750600082145b156121405750505061230d565b601460095461214f9190613181565b8311156121685760146009546121659190613181565b92505b60006002836011548661217b9190613181565b612185919061320a565b61218f919061320a565b905060006121a6828661234590919063ffffffff16565b905060004790506121b68261235b565b60006121cb824761234590919063ffffffff16565b905060006121f6876121e86012548561230f90919063ffffffff16565b61232590919063ffffffff16565b905060008183612206919061323b565b9050600060118190555060006012819055506000861180156122285750600081115b15612275576122378682612598565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260115460405161226c93929190613301565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516122bb90613369565b60006040518083038185875af1925050503d80600081146122f8576040519150601f19603f3d011682016040523d82523d6000602084013e6122fd565b606091505b5050809750505050505050505050505b565b6000818361231d9190613181565b905092915050565b60008183612333919061320a565b905092915050565b505050565b505050565b60008183612353919061323b565b905092915050565b6000600267ffffffffffffffff8111156123785761237761337e565b5b6040519080825280602002602001820160405280156123a65781602001602082028036833780820191505090505b50905030816000815181106123be576123bd6133ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612463573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248791906133f1565b8160018151811061249b5761249a6133ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612500307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611184565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612562959493929190613521565b600060405180830381600087803b15801561257c57600080fd5b505af1158015612590573d6000803e3d6000fd5b505050505050565b6125c3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611184565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161262a9695949392919061357b565b60606040518083038185885af1158015612648573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061266d91906135f1565b5050505050565b600080fd5b6000819050919050565b61268c81612679565b811461269757600080fd5b50565b6000813590506126a981612683565b92915050565b600080604083850312156126c6576126c5612674565b5b60006126d48582860161269a565b92505060206126e58582860161269a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272957808201518184015260208101905061270e565b83811115612738576000848401525b50505050565b6000601f19601f8301169050919050565b600061275a826126ef565b61276481856126fa565b935061277481856020860161270b565b61277d8161273e565b840191505092915050565b600060208201905081810360008301526127a2818461274f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d5826127aa565b9050919050565b6127e5816127ca565b81146127f057600080fd5b50565b600081359050612802816127dc565b92915050565b6000806040838503121561281f5761281e612674565b5b600061282d858286016127f3565b925050602061283e8582860161269a565b9150509250929050565b60008115159050919050565b61285d81612848565b82525050565b60006020820190506128786000830184612854565b92915050565b61288781612679565b82525050565b60006020820190506128a2600083018461287e565b92915050565b6000806000606084860312156128c1576128c0612674565b5b60006128cf868287016127f3565b93505060206128e0868287016127f3565b92505060406128f18682870161269a565b9150509250925092565b600060ff82169050919050565b612911816128fb565b82525050565b600060208201905061292c6000830184612908565b92915050565b60006020828403121561294857612947612674565b5b6000612956848285016127f3565b91505092915050565b612968816127ca565b82525050565b6000602082019050612983600083018461295f565b92915050565b600080604083850312156129a05761299f612674565b5b60006129ae858286016127f3565b92505060206129bf858286016127f3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006129ff6020836126fa565b9150612a0a826129c9565b602082019050919050565b60006020820190508181036000830152612a2e816129f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a6f82612679565b9150612a7a83612679565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612aaf57612aae612a35565b5b828201905092915050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000612af0601c836126fa565b9150612afb82612aba565b602082019050919050565b60006020820190508181036000830152612b1f81612ae3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b6d57607f821691505b60208210811415612b8157612b80612b26565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612be36028836126fa565b9150612bee82612b87565b604082019050919050565b60006020820190508181036000830152612c1281612bd6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c756025836126fa565b9150612c8082612c19565b604082019050919050565b60006020820190508181036000830152612ca481612c68565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d076026836126fa565b9150612d1282612cab565b604082019050919050565b60006020820190508181036000830152612d3681612cfa565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612d996024836126fa565b9150612da482612d3d565b604082019050919050565b60006020820190508181036000830152612dc881612d8c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e2b6022836126fa565b9150612e3682612dcf565b604082019050919050565b60006020820190508181036000830152612e5a81612e1e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612ebd6025836126fa565b9150612ec882612e61565b604082019050919050565b60006020820190508181036000830152612eec81612eb0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612f4f6023836126fa565b9150612f5a82612ef3565b604082019050919050565b60006020820190508181036000830152612f7e81612f42565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000612fbb6016836126fa565b9150612fc682612f85565b602082019050919050565b60006020820190508181036000830152612fea81612fae565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061304d6035836126fa565b915061305882612ff1565b604082019050919050565b6000602082019050818103600083015261307c81613040565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006130b96013836126fa565b91506130c482613083565b602082019050919050565b600060208201905081810360008301526130e8816130ac565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061314b6036836126fa565b9150613156826130ef565b604082019050919050565b6000602082019050818103600083015261317a8161313e565b9050919050565b600061318c82612679565b915061319783612679565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131d0576131cf612a35565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061321582612679565b915061322083612679565b9250826132305761322f6131db565b5b828204905092915050565b600061324682612679565b915061325183612679565b92508282101561326457613263612a35565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132cb6026836126fa565b91506132d68261326f565b604082019050919050565b600060208201905081810360008301526132fa816132be565b9050919050565b6000606082019050613316600083018661287e565b613323602083018561287e565b613330604083018461287e565b949350505050565b600081905092915050565b50565b6000613353600083613338565b915061335e82613343565b600082019050919050565b600061337482613346565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506133eb816127dc565b92915050565b60006020828403121561340757613406612674565b5b6000613415848285016133dc565b91505092915050565b6000819050919050565b6000819050919050565b600061344d6134486134438461341e565b613428565b612679565b9050919050565b61345d81613432565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613498816127ca565b82525050565b60006134aa838361348f565b60208301905092915050565b6000602082019050919050565b60006134ce82613463565b6134d8818561346e565b93506134e38361347f565b8060005b838110156135145781516134fb888261349e565b9750613506836134b6565b9250506001810190506134e7565b5085935050505092915050565b600060a082019050613536600083018861287e565b6135436020830187613454565b818103604083015261355581866134c3565b9050613564606083018561295f565b613571608083018461287e565b9695505050505050565b600060c082019050613590600083018961295f565b61359d602083018861287e565b6135aa6040830187613454565b6135b76060830186613454565b6135c4608083018561295f565b6135d160a083018461287e565b979650505050505050565b6000815190506135eb81612683565b92915050565b60008060006060848603121561360a57613609612674565b5b6000613618868287016135dc565b9350506020613629868287016135dc565b925050604061363a868287016135dc565b915050925092509256fea2646970667358221220967724bafc9bc2d6a6e613c83944389557df22a65dd3fe7e95788c53d0dd391e64736f6c634300080a0033
Deployed Bytecode Sourcemap
29150:12337:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41152:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7214:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9381:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8334:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10032:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8176:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10933:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40054:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40785:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29933:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8505:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1126:103;;;;;;;;;;;;;:::i;:::-;;40188:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40623:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40459:112;;;;;;;;;;;;;:::i;:::-;;818:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7433:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11651:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8845:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29460:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29524:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29823:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9083:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1384:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29566:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41152:332;1049:12;:10;:12::i;:::-;1038:23;;:7;:5;:7::i;:::-;:23;;;1030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41294:13:::1;41275:16;:32;;;;41335:11;41318:14;:28;;;;41392:14;;41373:16;;:33;;;;:::i;:::-;41357:13;:49;;;;41442:1;41425:13;;:18;;41417:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41152:332:::0;;:::o;7214:100::-;7268:13;7301:5;7294:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7214:100;:::o;9381:169::-;9464:4;9481:39;9490:12;:10;:12::i;:::-;9504:7;9513:6;9481:8;:39::i;:::-;9538:4;9531:11;;9381:169;;;;:::o;8334:108::-;8395:7;8422:12;;8415:19;;8334:108;:::o;10032:492::-;10172:4;10189:36;10199:6;10207:9;10218:6;10189:9;:36::i;:::-;10238:24;10265:11;:19;10277:6;10265:19;;;;;;;;;;;;;;;:33;10285:12;:10;:12::i;:::-;10265:33;;;;;;;;;;;;;;;;10238:60;;10337:6;10317:16;:26;;10309:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;10424:57;10433:6;10441:12;:10;:12::i;:::-;10474:6;10455:16;:25;10424:8;:57::i;:::-;10512:4;10505:11;;;10032:492;;;;;:::o;8176:93::-;8234:5;8259:2;8252:9;;8176:93;:::o;10933:215::-;11021:4;11038:80;11047:12;:10;:12::i;:::-;11061:7;11107:10;11070:11;:25;11082:12;:10;:12::i;:::-;11070:25;;;;;;;;;;;;;;;:34;11096:7;11070:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;11038:8;:80::i;:::-;11136:4;11129:11;;10933:215;;;;:::o;40054:126::-;40120:4;40144:19;:28;40164:7;40144:28;;;;;;;;;;;;;;;;;;;;;;;;;40137:35;;40054:126;;;:::o;40785:325::-;1049:12;:10;:12::i;:::-;1038:23;;:7;:5;:7::i;:::-;:23;;;1030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40925:13:::1;40907:15;:31;;;;40965:11;40949:13;:27;;;;41020:13;;41002:15;;:31;;;;:::i;:::-;40987:12;:46;;;;41068:1;41052:12;;:17;;41044:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40785:325:::0;;:::o;29933:28::-;;;;:::o;8505:127::-;8579:7;8606:9;:18;8616:7;8606:18;;;;;;;;;;;;;;;;8599:25;;8505:127;;;:::o;1126:103::-;1049:12;:10;:12::i;:::-;1038:23;;:7;:5;:7::i;:::-;:23;;;1030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1191:30:::1;1218:1;1191:18;:30::i;:::-;1126:103::o:0;40188:217::-;1049:12;:10;:12::i;:::-;1038:23;;:7;:5;:7::i;:::-;:23;;;1030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40340:13:::1;;;;;;;;;;;40301:53;;40322:16;40301:53;;;;;;;;;;;;40381:16;40365:13;;:32;;;;;;;;;;;;;;;;;;40188:217:::0;:::o;40623:121::-;40675:4;1049:12;:10;:12::i;:::-;1038:23;;:7;:5;:7::i;:::-;:23;;;1030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40709:5:::1;40692:14;;:22;;;;;;;;;;;;;;;;;;40732:4;40725:11;;40623:121:::0;:::o;40459:112::-;1049:12;:10;:12::i;:::-;1038:23;;:7;:5;:7::i;:::-;:23;;;1030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40530:4:::1;40514:13;;:20;;;;;;;;;;;;;;;;;;40559:4;40545:11;;:18;;;;;;;;;;;;;;;;;;40459:112::o:0;818:87::-;864:7;891:6;;;;;;;;;;;884:13;;818:87;:::o;7433:104::-;7489:13;7522:7;7515:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7433:104;:::o;11651:413::-;11744:4;11761:24;11788:11;:25;11800:12;:10;:12::i;:::-;11788:25;;;;;;;;;;;;;;;:34;11814:7;11788:34;;;;;;;;;;;;;;;;11761:61;;11861:15;11841:16;:35;;11833:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11954:67;11963:12;:10;:12::i;:::-;11977:7;12005:15;11986:16;:34;11954:8;:67::i;:::-;12052:4;12045:11;;;11651:413;;;;:::o;8845:175::-;8931:4;8948:42;8958:12;:10;:12::i;:::-;8972:9;8983:6;8948:9;:42::i;:::-;9008:4;9001:11;;8845:175;;;;:::o;29460:28::-;;;;;;;;;;;;;:::o;29524:35::-;;;;:::o;29823:27::-;;;;:::o;9083:151::-;9172:7;9199:11;:18;9211:5;9199:18;;;;;;;;;;;;;;;:27;9218:7;9199:27;;;;;;;;;;;;;;;;9192:34;;9083:151;;;;:::o;1384:201::-;1049:12;:10;:12::i;:::-;1038:23;;:7;:5;:7::i;:::-;:23;;;1030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1493:1:::1;1473:22;;:8;:22;;;;1465:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1549:28;1568:8;1549:18;:28::i;:::-;1384:201:::0;:::o;29566:24::-;;;;:::o;192:98::-;245:7;272:10;265:17;;192:98;:::o;15335:380::-;15488:1;15471:19;;:5;:19;;;;15463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15569:1;15550:21;;:7;:21;;;;15542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15653:6;15623:11;:18;15635:5;15623:18;;;;;;;;;;;;;;;:27;15642:7;15623:27;;;;;;;;;;;;;;;:36;;;;15691:7;15675:32;;15684:5;15675:32;;;15700:6;15675:32;;;;;;:::i;:::-;;;;;;;;15335:380;;;:::o;33402:3778::-;33550:1;33534:18;;:4;:18;;;;33526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33627:1;33613:16;;:2;:16;;;;33605:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33696:1;33686:6;:11;33682:93;;;33714:28;33730:4;33736:2;33740:1;33714:15;:28::i;:::-;33757:7;;33682:93;33791:14;;;;;;;;;;;33787:1694;;;33852:7;:5;:7::i;:::-;33844:15;;:4;:15;;;;:49;;;;;33886:7;:5;:7::i;:::-;33880:13;;:2;:13;;;;33844:49;:86;;;;;33928:1;33914:16;;:2;:16;;;;33844:86;:128;;;;;33965:6;33951:21;;:2;:21;;;;33844:128;:158;;;;;33994:8;;;;;;;;;;;33993:9;33844:158;33822:1648;;;34042:13;;;;;;;;;;;34037:223;;34114:19;:25;34134:4;34114:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34143:19;:23;34163:2;34143:23;;;;;;;;;;;;;;;;;;;;;;;;;34114:52;34080:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;34037:223;34334:25;:31;34360:4;34334:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34391:31;:35;34423:2;34391:35;;;;;;;;;;;;;;;;;;;;;;;;;34390:36;34334:92;34308:1147;;;34513:20;;34503:6;:30;;34469:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34721:9;;34704:13;34714:2;34704:9;:13::i;:::-;34695:6;:22;;;;:::i;:::-;:35;;34661:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34308:1147;;;34899:25;:29;34925:2;34899:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34954:31;:37;34986:4;34954:37;;;;;;;;;;;;;;;;;;;;;;;;;34953:38;34899:92;34873:582;;;35078:20;;35068:6;:30;;35034:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;34873:582;;;35235:31;:35;35267:2;35235:35;;;;;;;;;;;;;;;;;;;;;;;;;35230:225;;35355:9;;35338:13;35348:2;35338:9;:13::i;:::-;35329:6;:22;;;;:::i;:::-;:35;;35295:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35230:225;34873:582;34308:1147;33822:1648;33787:1694;35493:28;35524:24;35542:4;35524:9;:24::i;:::-;35493:55;;35561:12;35600:18;;35576:20;:42;;35561:57;;35649:7;:35;;;;;35673:11;;;;;;;;;;;35649:35;:61;;;;;35702:8;;;;;;;;;;;35701:9;35649:61;:110;;;;;35728:25;:31;35754:4;35728:31;;;;;;;;;;;;;;;;;;;;;;;;;35727:32;35649:110;:153;;;;;35777:19;:25;35797:4;35777:25;;;;;;;;;;;;;;;;;;;;;;;;;35776:26;35649:153;:194;;;;;35820:19;:23;35840:2;35820:23;;;;;;;;;;;;;;;;;;;;;;;;;35819:24;35649:194;35631:326;;;35881:4;35870:8;;:15;;;;;;;;;;;;;;;;;;35902:10;:8;:10::i;:::-;35940:5;35929:8;;:16;;;;;;;;;;;;;;;;;;35631:326;35969:12;35985:8;;;;;;;;;;;35984:9;35969:24;;36095:19;:25;36115:4;36095:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36124:19;:23;36144:2;36124:23;;;;;;;;;;;;;;;;;;;;;;;;;36095:52;36091:100;;;36174:5;36164:15;;36091:100;36203:12;36308:7;36304:823;;;36360:25;:29;36386:2;36360:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;36409:1;36393:13;;:17;36360:50;36356:622;;;36438:34;36468:3;36438:25;36449:13;;36438:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36431:41;;36541:13;;36521:16;;36514:4;:23;;;;:::i;:::-;36513:41;;;;:::i;:::-;36491:18;;:63;;;;;;;:::i;:::-;;;;;;;;36619:13;;36601:14;;36594:4;:21;;;;:::i;:::-;36593:39;;;;:::i;:::-;36573:16;;:59;;;;;;;:::i;:::-;;;;;;;;36356:622;;;36694:25;:31;36720:4;36694:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36744:1;36729:12;;:16;36694:51;36690:288;;;36773:33;36802:3;36773:24;36784:12;;36773:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36766:40;;36874:12;;36855:15;;36848:4;:22;;;;:::i;:::-;36847:39;;;;:::i;:::-;36825:18;;:61;;;;;;;:::i;:::-;;;;;;;;36950:12;;36933:13;;36926:4;:20;;;;:::i;:::-;36925:37;;;;:::i;:::-;36905:16;;:57;;;;;;;:::i;:::-;;;;;;;;36690:288;36356:622;37005:1;36998:4;:8;36994:91;;;37027:42;37043:4;37057;37064;37027:15;:42::i;:::-;36994:91;37111:4;37101:14;;;;;:::i;:::-;;;36304:823;37139:33;37155:4;37161:2;37165:6;37139:15;:33::i;:::-;33515:3665;;;;33402:3778;;;;:::o;1745:191::-;1819:16;1838:6;;;;;;;;;;;1819:25;;1864:8;1855:6;;:17;;;;;;;;;;;;;;;;;;1919:8;1888:40;;1909:8;1888:40;;;;;;;;;;;;1808:128;1745:191;:::o;12554:733::-;12712:1;12694:20;;:6;:20;;;;12686:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12796:1;12775:23;;:9;:23;;;;12767:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12851:47;12872:6;12880:9;12891:6;12851:20;:47::i;:::-;12911:21;12935:9;:17;12945:6;12935:17;;;;;;;;;;;;;;;;12911:41;;12988:6;12971:13;:23;;12963:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13109:6;13093:13;:22;13073:9;:17;13083:6;13073:17;;;;;;;;;;;;;;;:42;;;;13161:6;13137:9;:20;13147:9;13137:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13202:9;13185:35;;13194:6;13185:35;;;13213:6;13185:35;;;;;;:::i;:::-;;;;;;;;13233:46;13253:6;13261:9;13272:6;13233:19;:46::i;:::-;12675:612;12554:733;;;:::o;38355:1515::-;38394:23;38420:24;38438:4;38420:9;:24::i;:::-;38394:50;;38455:25;38504:16;;38483:18;;:37;;;;:::i;:::-;38455:65;;38531:12;38579:1;38560:15;:20;:46;;;;38605:1;38584:17;:22;38560:46;38556:85;;;38623:7;;;;;38556:85;38696:2;38675:18;;:23;;;;:::i;:::-;38657:15;:41;38653:115;;;38754:2;38733:18;;:23;;;;:::i;:::-;38715:41;;38653:115;38829:23;38942:1;38909:17;38874:18;;38856:15;:36;;;;:::i;:::-;38855:71;;;;:::i;:::-;:88;;;;:::i;:::-;38829:114;;38954:26;38983:36;39003:15;38983;:19;;:36;;;;:::i;:::-;38954:65;;39032:25;39060:21;39032:49;;39094:36;39111:18;39094:16;:36::i;:::-;39143:18;39164:44;39190:17;39164:21;:25;;:44;;;;:::i;:::-;39143:65;;39219:21;39243:55;39280:17;39243:32;39258:16;;39243:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;39219:79;;39309:23;39348:13;39335:10;:26;;;;:::i;:::-;39309:52;;39395:1;39374:18;:22;;;;39426:1;39407:16;:20;;;;39492:1;39474:15;:19;:42;;;;;39515:1;39497:15;:19;39474:42;39470:278;;;39533:46;39546:15;39563;39533:12;:46::i;:::-;39599:137;39632:18;39669:15;39703:18;;39599:137;;;;;;;;:::i;:::-;;;;;;;;39470:278;39817:13;;;;;;;;;;;39809:27;;39844:13;39809:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39795:67;;;;;38383:1487;;;;;;;;;38355:1515;:::o;20467:98::-;20525:7;20556:1;20552;:5;;;;:::i;:::-;20545:12;;20467:98;;;;:::o;20866:::-;20924:7;20955:1;20951;:5;;;;:::i;:::-;20944:12;;20866:98;;;;:::o;16315:125::-;;;;:::o;17044:124::-;;;;:::o;20110:98::-;20168:7;20199:1;20195;:5;;;;:::i;:::-;20188:12;;20110:98;;;;:::o;37188:589::-;37314:21;37352:1;37338:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37314:40;;37383:4;37365;37370:1;37365:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37409:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37399:4;37404:1;37399:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37444:62;37461:4;37476:15;37494:11;37444:8;:62::i;:::-;37545:15;:66;;;37626:11;37652:1;37696:4;37723;37743:15;37545:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37243:534;37188:589;:::o;37785:562::-;37933:62;37950:4;37965:15;37983:11;37933:8;:62::i;:::-;38038:15;:31;;;38077:9;38110:4;38130:11;38156:1;38199;29377:6;38313:15;38038:301;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37785:562;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:118::-;4061:24;4079:5;4061:24;:::i;:::-;4056:3;4049:37;3974:118;;:::o;4098:222::-;4191:4;4229:2;4218:9;4214:18;4206:26;;4242:71;4310:1;4299:9;4295:17;4286:6;4242:71;:::i;:::-;4098:222;;;;:::o;4326:619::-;4403:6;4411;4419;4468:2;4456:9;4447:7;4443:23;4439:32;4436:119;;;4474:79;;:::i;:::-;4436:119;4594:1;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4565:117;4721:2;4747:53;4792:7;4783:6;4772:9;4768:22;4747:53;:::i;:::-;4737:63;;4692:118;4849:2;4875:53;4920:7;4911:6;4900:9;4896:22;4875:53;:::i;:::-;4865:63;;4820:118;4326:619;;;;;:::o;4951:86::-;4986:7;5026:4;5019:5;5015:16;5004:27;;4951:86;;;:::o;5043:112::-;5126:22;5142:5;5126:22;:::i;:::-;5121:3;5114:35;5043:112;;:::o;5161:214::-;5250:4;5288:2;5277:9;5273:18;5265:26;;5301:67;5365:1;5354:9;5350:17;5341:6;5301:67;:::i;:::-;5161:214;;;;:::o;5381:329::-;5440:6;5489:2;5477:9;5468:7;5464:23;5460:32;5457:119;;;5495:79;;:::i;:::-;5457:119;5615:1;5640:53;5685:7;5676:6;5665:9;5661:22;5640:53;:::i;:::-;5630:63;;5586:117;5381:329;;;;:::o;5716:118::-;5803:24;5821:5;5803:24;:::i;:::-;5798:3;5791:37;5716:118;;:::o;5840:222::-;5933:4;5971:2;5960:9;5956:18;5948:26;;5984:71;6052:1;6041:9;6037:17;6028:6;5984:71;:::i;:::-;5840:222;;;;:::o;6068:474::-;6136:6;6144;6193:2;6181:9;6172:7;6168:23;6164:32;6161:119;;;6199:79;;:::i;:::-;6161:119;6319:1;6344:53;6389:7;6380:6;6369:9;6365:22;6344:53;:::i;:::-;6334:63;;6290:117;6446:2;6472:53;6517:7;6508:6;6497:9;6493:22;6472:53;:::i;:::-;6462:63;;6417:118;6068:474;;;;;:::o;6548:182::-;6688:34;6684:1;6676:6;6672:14;6665:58;6548:182;:::o;6736:366::-;6878:3;6899:67;6963:2;6958:3;6899:67;:::i;:::-;6892:74;;6975:93;7064:3;6975:93;:::i;:::-;7093:2;7088:3;7084:12;7077:19;;6736:366;;;:::o;7108:419::-;7274:4;7312:2;7301:9;7297:18;7289:26;;7361:9;7355:4;7351:20;7347:1;7336:9;7332:17;7325:47;7389:131;7515:4;7389:131;:::i;:::-;7381:139;;7108:419;;;:::o;7533:180::-;7581:77;7578:1;7571:88;7678:4;7675:1;7668:15;7702:4;7699:1;7692:15;7719:305;7759:3;7778:20;7796:1;7778:20;:::i;:::-;7773:25;;7812:20;7830:1;7812:20;:::i;:::-;7807:25;;7966:1;7898:66;7894:74;7891:1;7888:81;7885:107;;;7972:18;;:::i;:::-;7885:107;8016:1;8013;8009:9;8002:16;;7719:305;;;;:::o;8030:178::-;8170:30;8166:1;8158:6;8154:14;8147:54;8030:178;:::o;8214:366::-;8356:3;8377:67;8441:2;8436:3;8377:67;:::i;:::-;8370:74;;8453:93;8542:3;8453:93;:::i;:::-;8571:2;8566:3;8562:12;8555:19;;8214:366;;;:::o;8586:419::-;8752:4;8790:2;8779:9;8775:18;8767:26;;8839:9;8833:4;8829:20;8825:1;8814:9;8810:17;8803:47;8867:131;8993:4;8867:131;:::i;:::-;8859:139;;8586:419;;;:::o;9011:180::-;9059:77;9056:1;9049:88;9156:4;9153:1;9146:15;9180:4;9177:1;9170:15;9197:320;9241:6;9278:1;9272:4;9268:12;9258:22;;9325:1;9319:4;9315:12;9346:18;9336:81;;9402:4;9394:6;9390:17;9380:27;;9336:81;9464:2;9456:6;9453:14;9433:18;9430:38;9427:84;;;9483:18;;:::i;:::-;9427:84;9248:269;9197:320;;;:::o;9523:227::-;9663:34;9659:1;9651:6;9647:14;9640:58;9732:10;9727:2;9719:6;9715:15;9708:35;9523:227;:::o;9756:366::-;9898:3;9919:67;9983:2;9978:3;9919:67;:::i;:::-;9912:74;;9995:93;10084:3;9995:93;:::i;:::-;10113:2;10108:3;10104:12;10097:19;;9756:366;;;:::o;10128:419::-;10294:4;10332:2;10321:9;10317:18;10309:26;;10381:9;10375:4;10371:20;10367:1;10356:9;10352:17;10345:47;10409:131;10535:4;10409:131;:::i;:::-;10401:139;;10128:419;;;:::o;10553:224::-;10693:34;10689:1;10681:6;10677:14;10670:58;10762:7;10757:2;10749:6;10745:15;10738:32;10553:224;:::o;10783:366::-;10925:3;10946:67;11010:2;11005:3;10946:67;:::i;:::-;10939:74;;11022:93;11111:3;11022:93;:::i;:::-;11140:2;11135:3;11131:12;11124:19;;10783:366;;;:::o;11155:419::-;11321:4;11359:2;11348:9;11344:18;11336:26;;11408:9;11402:4;11398:20;11394:1;11383:9;11379:17;11372:47;11436:131;11562:4;11436:131;:::i;:::-;11428:139;;11155:419;;;:::o;11580:225::-;11720:34;11716:1;11708:6;11704:14;11697:58;11789:8;11784:2;11776:6;11772:15;11765:33;11580:225;:::o;11811:366::-;11953:3;11974:67;12038:2;12033:3;11974:67;:::i;:::-;11967:74;;12050:93;12139:3;12050:93;:::i;:::-;12168:2;12163:3;12159:12;12152:19;;11811:366;;;:::o;12183:419::-;12349:4;12387:2;12376:9;12372:18;12364:26;;12436:9;12430:4;12426:20;12422:1;12411:9;12407:17;12400:47;12464:131;12590:4;12464:131;:::i;:::-;12456:139;;12183:419;;;:::o;12608:223::-;12748:34;12744:1;12736:6;12732:14;12725:58;12817:6;12812:2;12804:6;12800:15;12793:31;12608:223;:::o;12837:366::-;12979:3;13000:67;13064:2;13059:3;13000:67;:::i;:::-;12993:74;;13076:93;13165:3;13076:93;:::i;:::-;13194:2;13189:3;13185:12;13178:19;;12837:366;;;:::o;13209:419::-;13375:4;13413:2;13402:9;13398:18;13390:26;;13462:9;13456:4;13452:20;13448:1;13437:9;13433:17;13426:47;13490:131;13616:4;13490:131;:::i;:::-;13482:139;;13209:419;;;:::o;13634:221::-;13774:34;13770:1;13762:6;13758:14;13751:58;13843:4;13838:2;13830:6;13826:15;13819:29;13634:221;:::o;13861:366::-;14003:3;14024:67;14088:2;14083:3;14024:67;:::i;:::-;14017:74;;14100:93;14189:3;14100:93;:::i;:::-;14218:2;14213:3;14209:12;14202:19;;13861:366;;;:::o;14233:419::-;14399:4;14437:2;14426:9;14422:18;14414:26;;14486:9;14480:4;14476:20;14472:1;14461:9;14457:17;14450:47;14514:131;14640:4;14514:131;:::i;:::-;14506:139;;14233:419;;;:::o;14658:224::-;14798:34;14794:1;14786:6;14782:14;14775:58;14867:7;14862:2;14854:6;14850:15;14843:32;14658:224;:::o;14888:366::-;15030:3;15051:67;15115:2;15110:3;15051:67;:::i;:::-;15044:74;;15127:93;15216:3;15127:93;:::i;:::-;15245:2;15240:3;15236:12;15229:19;;14888:366;;;:::o;15260:419::-;15426:4;15464:2;15453:9;15449:18;15441:26;;15513:9;15507:4;15503:20;15499:1;15488:9;15484:17;15477:47;15541:131;15667:4;15541:131;:::i;:::-;15533:139;;15260:419;;;:::o;15685:222::-;15825:34;15821:1;15813:6;15809:14;15802:58;15894:5;15889:2;15881:6;15877:15;15870:30;15685:222;:::o;15913:366::-;16055:3;16076:67;16140:2;16135:3;16076:67;:::i;:::-;16069:74;;16152:93;16241:3;16152:93;:::i;:::-;16270:2;16265:3;16261:12;16254:19;;15913:366;;;:::o;16285:419::-;16451:4;16489:2;16478:9;16474:18;16466:26;;16538:9;16532:4;16528:20;16524:1;16513:9;16509:17;16502:47;16566:131;16692:4;16566:131;:::i;:::-;16558:139;;16285:419;;;:::o;16710:172::-;16850:24;16846:1;16838:6;16834:14;16827:48;16710:172;:::o;16888:366::-;17030:3;17051:67;17115:2;17110:3;17051:67;:::i;:::-;17044:74;;17127:93;17216:3;17127:93;:::i;:::-;17245:2;17240:3;17236:12;17229:19;;16888:366;;;:::o;17260:419::-;17426:4;17464:2;17453:9;17449:18;17441:26;;17513:9;17507:4;17503:20;17499:1;17488:9;17484:17;17477:47;17541:131;17667:4;17541:131;:::i;:::-;17533:139;;17260:419;;;:::o;17685:240::-;17825:34;17821:1;17813:6;17809:14;17802:58;17894:23;17889:2;17881:6;17877:15;17870:48;17685:240;:::o;17931:366::-;18073:3;18094:67;18158:2;18153:3;18094:67;:::i;:::-;18087:74;;18170:93;18259:3;18170:93;:::i;:::-;18288:2;18283:3;18279:12;18272:19;;17931:366;;;:::o;18303:419::-;18469:4;18507:2;18496:9;18492:18;18484:26;;18556:9;18550:4;18546:20;18542:1;18531:9;18527:17;18520:47;18584:131;18710:4;18584:131;:::i;:::-;18576:139;;18303:419;;;:::o;18728:169::-;18868:21;18864:1;18856:6;18852:14;18845:45;18728:169;:::o;18903:366::-;19045:3;19066:67;19130:2;19125:3;19066:67;:::i;:::-;19059:74;;19142:93;19231:3;19142:93;:::i;:::-;19260:2;19255:3;19251:12;19244:19;;18903:366;;;:::o;19275:419::-;19441:4;19479:2;19468:9;19464:18;19456:26;;19528:9;19522:4;19518:20;19514:1;19503:9;19499:17;19492:47;19556:131;19682:4;19556:131;:::i;:::-;19548:139;;19275:419;;;:::o;19700:241::-;19840:34;19836:1;19828:6;19824:14;19817:58;19909:24;19904:2;19896:6;19892:15;19885:49;19700:241;:::o;19947:366::-;20089:3;20110:67;20174:2;20169:3;20110:67;:::i;:::-;20103:74;;20186:93;20275:3;20186:93;:::i;:::-;20304:2;20299:3;20295:12;20288:19;;19947:366;;;:::o;20319:419::-;20485:4;20523:2;20512:9;20508:18;20500:26;;20572:9;20566:4;20562:20;20558:1;20547:9;20543:17;20536:47;20600:131;20726:4;20600:131;:::i;:::-;20592:139;;20319:419;;;:::o;20744:348::-;20784:7;20807:20;20825:1;20807:20;:::i;:::-;20802:25;;20841:20;20859:1;20841:20;:::i;:::-;20836:25;;21029:1;20961:66;20957:74;20954:1;20951:81;20946:1;20939:9;20932:17;20928:105;20925:131;;;21036:18;;:::i;:::-;20925:131;21084:1;21081;21077:9;21066:20;;20744:348;;;;:::o;21098:180::-;21146:77;21143:1;21136:88;21243:4;21240:1;21233:15;21267:4;21264:1;21257:15;21284:185;21324:1;21341:20;21359:1;21341:20;:::i;:::-;21336:25;;21375:20;21393:1;21375:20;:::i;:::-;21370:25;;21414:1;21404:35;;21419:18;;:::i;:::-;21404:35;21461:1;21458;21454:9;21449:14;;21284:185;;;;:::o;21475:191::-;21515:4;21535:20;21553:1;21535:20;:::i;:::-;21530:25;;21569:20;21587:1;21569:20;:::i;:::-;21564:25;;21608:1;21605;21602:8;21599:34;;;21613:18;;:::i;:::-;21599:34;21658:1;21655;21651:9;21643:17;;21475:191;;;;:::o;21672:225::-;21812:34;21808:1;21800:6;21796:14;21789:58;21881:8;21876:2;21868:6;21864:15;21857:33;21672:225;:::o;21903:366::-;22045:3;22066:67;22130:2;22125:3;22066:67;:::i;:::-;22059:74;;22142:93;22231:3;22142:93;:::i;:::-;22260:2;22255:3;22251:12;22244:19;;21903:366;;;:::o;22275:419::-;22441:4;22479:2;22468:9;22464:18;22456:26;;22528:9;22522:4;22518:20;22514:1;22503:9;22499:17;22492:47;22556:131;22682:4;22556:131;:::i;:::-;22548:139;;22275:419;;;:::o;22700:442::-;22849:4;22887:2;22876:9;22872:18;22864:26;;22900:71;22968:1;22957:9;22953:17;22944:6;22900:71;:::i;:::-;22981:72;23049:2;23038:9;23034:18;23025:6;22981:72;:::i;:::-;23063;23131:2;23120:9;23116:18;23107:6;23063:72;:::i;:::-;22700:442;;;;;;:::o;23148:147::-;23249:11;23286:3;23271:18;;23148:147;;;;:::o;23301:114::-;;:::o;23421:398::-;23580:3;23601:83;23682:1;23677:3;23601:83;:::i;:::-;23594:90;;23693:93;23782:3;23693:93;:::i;:::-;23811:1;23806:3;23802:11;23795:18;;23421:398;;;:::o;23825:379::-;24009:3;24031:147;24174:3;24031:147;:::i;:::-;24024:154;;24195:3;24188:10;;23825:379;;;:::o;24210:180::-;24258:77;24255:1;24248:88;24355:4;24352:1;24345:15;24379:4;24376:1;24369:15;24396:180;24444:77;24441:1;24434:88;24541:4;24538:1;24531:15;24565:4;24562:1;24555:15;24582:143;24639:5;24670:6;24664:13;24655:22;;24686:33;24713:5;24686:33;:::i;:::-;24582:143;;;;:::o;24731:351::-;24801:6;24850:2;24838:9;24829:7;24825:23;24821:32;24818:119;;;24856:79;;:::i;:::-;24818:119;24976:1;25001:64;25057:7;25048:6;25037:9;25033:22;25001:64;:::i;:::-;24991:74;;24947:128;24731:351;;;;:::o;25088:85::-;25133:7;25162:5;25151:16;;25088:85;;;:::o;25179:60::-;25207:3;25228:5;25221:12;;25179:60;;;:::o;25245:158::-;25303:9;25336:61;25354:42;25363:32;25389:5;25363:32;:::i;:::-;25354:42;:::i;:::-;25336:61;:::i;:::-;25323:74;;25245:158;;;:::o;25409:147::-;25504:45;25543:5;25504:45;:::i;:::-;25499:3;25492:58;25409:147;;:::o;25562:114::-;25629:6;25663:5;25657:12;25647:22;;25562:114;;;:::o;25682:184::-;25781:11;25815:6;25810:3;25803:19;25855:4;25850:3;25846:14;25831:29;;25682:184;;;;:::o;25872:132::-;25939:4;25962:3;25954:11;;25992:4;25987:3;25983:14;25975:22;;25872:132;;;:::o;26010:108::-;26087:24;26105:5;26087:24;:::i;:::-;26082:3;26075:37;26010:108;;:::o;26124:179::-;26193:10;26214:46;26256:3;26248:6;26214:46;:::i;:::-;26292:4;26287:3;26283:14;26269:28;;26124:179;;;;:::o;26309:113::-;26379:4;26411;26406:3;26402:14;26394:22;;26309:113;;;:::o;26458:732::-;26577:3;26606:54;26654:5;26606:54;:::i;:::-;26676:86;26755:6;26750:3;26676:86;:::i;:::-;26669:93;;26786:56;26836:5;26786:56;:::i;:::-;26865:7;26896:1;26881:284;26906:6;26903:1;26900:13;26881:284;;;26982:6;26976:13;27009:63;27068:3;27053:13;27009:63;:::i;:::-;27002:70;;27095:60;27148:6;27095:60;:::i;:::-;27085:70;;26941:224;26928:1;26925;26921:9;26916:14;;26881:284;;;26885:14;27181:3;27174:10;;26582:608;;;26458:732;;;;:::o;27196:831::-;27459:4;27497:3;27486:9;27482:19;27474:27;;27511:71;27579:1;27568:9;27564:17;27555:6;27511:71;:::i;:::-;27592:80;27668:2;27657:9;27653:18;27644:6;27592:80;:::i;:::-;27719:9;27713:4;27709:20;27704:2;27693:9;27689:18;27682:48;27747:108;27850:4;27841:6;27747:108;:::i;:::-;27739:116;;27865:72;27933:2;27922:9;27918:18;27909:6;27865:72;:::i;:::-;27947:73;28015:3;28004:9;28000:19;27991:6;27947:73;:::i;:::-;27196:831;;;;;;;;:::o;28033:807::-;28282:4;28320:3;28309:9;28305:19;28297:27;;28334:71;28402:1;28391:9;28387:17;28378:6;28334:71;:::i;:::-;28415:72;28483:2;28472:9;28468:18;28459:6;28415:72;:::i;:::-;28497:80;28573:2;28562:9;28558:18;28549:6;28497:80;:::i;:::-;28587;28663:2;28652:9;28648:18;28639:6;28587:80;:::i;:::-;28677:73;28745:3;28734:9;28730:19;28721:6;28677:73;:::i;:::-;28760;28828:3;28817:9;28813:19;28804:6;28760:73;:::i;:::-;28033:807;;;;;;;;;:::o;28846:143::-;28903:5;28934:6;28928:13;28919:22;;28950:33;28977:5;28950:33;:::i;:::-;28846:143;;;;:::o;28995:663::-;29083:6;29091;29099;29148:2;29136:9;29127:7;29123:23;29119:32;29116:119;;;29154:79;;:::i;:::-;29116:119;29274:1;29299:64;29355:7;29346:6;29335:9;29331:22;29299:64;:::i;:::-;29289:74;;29245:128;29412:2;29438:64;29494:7;29485:6;29474:9;29470:22;29438:64;:::i;:::-;29428:74;;29383:129;29551:2;29577:64;29633:7;29624:6;29613:9;29609:22;29577:64;:::i;:::-;29567:74;;29522:129;28995:663;;;;;:::o
Swarm Source
ipfs://967724bafc9bc2d6a6e613c83944389557df22a65dd3fe7e95788c53d0dd391e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,684.79 | 0.3 | $805.45 |
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.