Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
VLXPAD
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-20 */ // File: @openzeppelin/contracts-ethereum-package/contracts/utils/SafeCast.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's uintXX casting operators with added overflow * checks. * * Downcasting from uint256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} to extend it to smaller types, by performing * all math on `uint256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { require(value < 2**255, "SafeCast: value doesn't fit in an int256"); return int256(value); } } // File: @openzeppelin/contracts-ethereum-package/contracts/Initializable.sol pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract LGEWhitelisted is ContextUpgradeSafe { using SafeMath for uint256; struct WhitelistRound { uint256 duration; uint256 amountMax; mapping(address => bool) addresses; mapping(address => uint256) purchased; } WhitelistRound[] public _lgeWhitelistRounds; uint256 public _lgeTimestamp; address public _lgePairAddress; address public _whitelister; event WhitelisterTransferred(address indexed previousWhitelister, address indexed newWhitelister); function __LGEWhitelisted_init() internal initializer { __Context_init_unchained(); __LGEWhitelisted_init_unchained(); } function __LGEWhitelisted_init_unchained() internal initializer { _whitelister = _msgSender(); } modifier onlyWhitelister() { require(_whitelister == _msgSender(), "Caller is not the whitelister"); _; } function renounceWhitelister() external onlyWhitelister { emit WhitelisterTransferred(_whitelister, address(0)); _whitelister = address(0); } function transferWhitelister(address newWhitelister) external onlyWhitelister { _transferWhitelister(newWhitelister); } function _transferWhitelister(address newWhitelister) internal { require(newWhitelister != address(0), "New whitelister is the zero address"); emit WhitelisterTransferred(_whitelister, newWhitelister); _whitelister = newWhitelister; } /* * createLGEWhitelist - Call this after initial Token Generation Event (TGE) * * pairAddress - address generated from createPair() event on DEX * durations - array of durations (seconds) for each whitelist rounds * amountsMax - array of max amounts (TOKEN decimals) for each whitelist round * */ function createLGEWhitelist(address pairAddress, uint256[] calldata durations, uint256[] calldata amountsMax) external onlyWhitelister() { require(durations.length == amountsMax.length, "Invalid whitelist(s)"); _lgePairAddress = pairAddress; if(durations.length > 0) { delete _lgeWhitelistRounds; for (uint256 i = 0; i < durations.length; i++) { _lgeWhitelistRounds.push(WhitelistRound(durations[i], amountsMax[i])); } } } /* * modifyLGEWhitelistAddresses - Define what addresses are included/excluded from a whitelist round * * index - 0-based index of round to modify whitelist * duration - period in seconds from LGE event or previous whitelist round * amountMax - max amount (TOKEN decimals) for each whitelist round * */ function modifyLGEWhitelist(uint256 index, uint256 duration, uint256 amountMax, address[] calldata addresses, bool enabled) external onlyWhitelister() { require(index < _lgeWhitelistRounds.length, "Invalid index"); require(amountMax > 0, "Invalid amountMax"); if(duration != _lgeWhitelistRounds[index].duration) _lgeWhitelistRounds[index].duration = duration; if(amountMax != _lgeWhitelistRounds[index].amountMax) _lgeWhitelistRounds[index].amountMax = amountMax; for (uint256 i = 0; i < addresses.length; i++) { _lgeWhitelistRounds[index].addresses[addresses[i]] = enabled; } } /* * getLGEWhitelistRound * * returns: * * 1. whitelist round number ( 0 = no active round now ) * 2. duration, in seconds, current whitelist round is active for * 3. timestamp current whitelist round closes at * 4. maximum amount a whitelister can purchase in this round * 5. is caller whitelisted * 6. how much caller has purchased in current whitelist round * */ function getLGEWhitelistRound() public view returns (uint256, uint256, uint256, uint256, bool, uint256) { if(_lgeTimestamp > 0) { uint256 wlCloseTimestampLast = _lgeTimestamp; for (uint256 i = 0; i < _lgeWhitelistRounds.length; i++) { WhitelistRound storage wlRound = _lgeWhitelistRounds[i]; wlCloseTimestampLast = wlCloseTimestampLast.add(wlRound.duration); if(now <= wlCloseTimestampLast) return (i.add(1), wlRound.duration, wlCloseTimestampLast, wlRound.amountMax, wlRound.addresses[_msgSender()], wlRound.purchased[_msgSender()]); } } return (0, 0, 0, 0, false, 0); } /* * _applyLGEWhitelist - internal function to be called initially before any transfers * */ function _applyLGEWhitelist(address sender, address recipient, uint256 amount) internal { if(_lgePairAddress == address(0) || _lgeWhitelistRounds.length == 0) return; if(_lgeTimestamp == 0 && sender != _lgePairAddress && recipient == _lgePairAddress && amount > 0) _lgeTimestamp = now; if(sender == _lgePairAddress && recipient != _lgePairAddress) { //buying (uint256 wlRoundNumber,,,,,) = getLGEWhitelistRound(); if(wlRoundNumber > 0) { WhitelistRound storage wlRound = _lgeWhitelistRounds[wlRoundNumber.sub(1)]; require(wlRound.addresses[recipient], "LGE - Buyer is not whitelisted"); uint256 amountRemaining = 0; if(wlRound.purchased[recipient] < wlRound.amountMax) amountRemaining = wlRound.amountMax.sub(wlRound.purchased[recipient]); require(amount <= amountRemaining, "LGE - Amount exceeds whitelist maximum"); wlRound.purchased[recipient] = wlRound.purchased[recipient].add(amount); } } } } contract VLXPAD is IERC20, OwnableUpgradeSafe, LGEWhitelisted { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; uint256 private _cap; string private _name; string private _symbol; uint8 private _decimals; mapping(address => bool) public _feeExcluded; uint256 public _feeBurnPct; uint256 public _feeRewardPct; address public _feeRewardAddress; mapping(address => bool) public _pair; address public _router; address[] public _feeRewardSwapPath; function initialize(uint256 cap, uint256 feeBurnPct, uint256 feeRewardPct, address feeRewardAddress, address router) public initializer { require(cap > 0, "ERC20Capped: cap is 0"); _name = "VELASPAD.io"; _symbol = "VLXPAD"; _decimals = 18; _cap = cap; __Ownable_init(); __LGEWhitelisted_init(); IUniswapV2Router02 r = IUniswapV2Router02(router); IUniswapV2Factory f = IUniswapV2Factory(r.factory()); setPair(f.createPair(address(this), r.WETH()), true); address[] memory feeRewardSwapPath = new address[](2); feeRewardSwapPath[0] = address(this); feeRewardSwapPath[1] = r.WETH(); setFees(feeBurnPct, feeRewardPct, feeRewardSwapPath, feeRewardAddress); _router = router; setFeeExcluded(_msgSender(), true); setFeeExcluded(address(this), true); } function setRouter(address r) public onlyOwner { _router = r; } function setFees(uint256 feeBurnPct, uint256 feeRewardPct, address[] memory feeRewardSwapPath, address feeRewardAddress) public onlyOwner { require(feeBurnPct.add(feeRewardPct) <= 10000, "Fees must not total more than 100%"); require(feeRewardSwapPath.length > 1, "Invalid path"); require(feeRewardAddress != address(0), "Fee reward address must not be zero address"); _feeBurnPct = feeBurnPct; _feeRewardPct = feeRewardPct; _feeRewardSwapPath = feeRewardSwapPath; _feeRewardAddress = feeRewardAddress; } function setPair(address a, bool pair) public onlyOwner { _pair[a] = pair; } function setFeeExcluded(address a, bool excluded) public onlyOwner { _feeExcluded[a] = excluded; } function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); } function _beforeTokenTransfer(address sender, address recipient, uint256 amount) internal { LGEWhitelisted._applyLGEWhitelist(sender, recipient, amount); if (sender == address(0)) { // When minting tokens require(totalSupply().add(amount) <= _cap, "ERC20Capped: cap exceeded"); } } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); if(_pair[recipient] && !_feeExcluded[sender]) { uint256 feeBurnAmount = 0; if(_feeBurnPct > 0) { feeBurnAmount = amount.mul(_feeBurnPct).div(10000); _cap = _cap.sub(feeBurnAmount); _totalSupply = _totalSupply.sub(feeBurnAmount); emit Transfer(sender, address(0), feeBurnAmount); } uint256 feeRewardAmount = 0; if(_feeRewardPct > 0 && _feeRewardAddress != address(0)) { feeRewardAmount = amount.mul(_feeRewardPct).div(10000); if(_router != address(0)) { _balances[address(this)] = _balances[address(this)].add(feeRewardAmount); emit Transfer(sender, address(this), feeRewardAmount); IUniswapV2Router02 r = IUniswapV2Router02(_router); _approve(address(this), _router, feeRewardAmount); r.swapExactTokensForTokensSupportingFeeOnTransferTokens( feeRewardAmount, 0, _feeRewardSwapPath, _feeRewardAddress, block.timestamp ); } else { _balances[_feeRewardAddress] = _balances[_feeRewardAddress].add(feeRewardAmount); emit Transfer(sender, _feeRewardAddress, feeRewardAmount); } } amount = amount.sub(feeBurnAmount).sub(feeRewardAmount); } _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function burn(uint256 amount) external { _cap=_cap.sub(amount); _burn(_msgSender(), amount); } function name() public view override returns (string memory) { return _name; } function symbol() public view override returns (string memory) { return _symbol; } function cap() public view returns (uint256) { return _cap; } function decimals() public view override returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"previousWhitelister","type":"address"},{"indexed":true,"internalType":"address","name":"newWhitelister","type":"address"}],"name":"WhitelisterTransferred","type":"event"},{"inputs":[],"name":"_feeBurnPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRewardPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_feeRewardSwapPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lgePairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lgeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_lgeWhitelistRounds","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_pair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whitelister","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"},{"internalType":"uint256[]","name":"durations","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsMax","type":"uint256[]"}],"name":"createLGEWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLGEWhitelistRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"},{"internalType":"uint256","name":"feeBurnPct","type":"uint256"},{"internalType":"uint256","name":"feeRewardPct","type":"uint256"},{"internalType":"address","name":"feeRewardAddress","type":"address"},{"internalType":"address","name":"router","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"modifyLGEWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setFeeExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeBurnPct","type":"uint256"},{"internalType":"uint256","name":"feeRewardPct","type":"uint256"},{"internalType":"address[]","name":"feeRewardSwapPath","type":"address[]"},{"internalType":"address","name":"feeRewardAddress","type":"address"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"pair","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"address","name":"newWhitelister","type":"address"}],"name":"transferWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50612f8a806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063771a0b2811610130578063c0d78655116100b8578063e3f4f30c1161007c578063e3f4f30c146107e0578063eba116d814610898578063edae876f146108be578063f2fde38b146108c6578063ffc877d8146108ec57610232565b8063c0d786551461074e578063c9f1f47f14610774578063d5215d11146107a2578063da91b76e146107aa578063dd62ed3e146107b257610232565b80639ad3a7ba116100ff5780639ad3a7ba14610678578063a457c2d714610680578063a77cac7a146106ac578063a9059cbb146106e2578063aab954d01461070e57610232565b8063771a0b281461063257806386a22eff1461063a5780638da5cb5b1461066857806395d89b411461067057610232565b806340c10f19116101be57806363c6b3d71161018257806363c6b3d7146105b9578063688a0942146105d657806370a08231146105de57806371088c6d14610604578063715018a61461062a57610232565b806340c10f19146103fb57806342966c681461042757806344ade3c51461044457806349448898146104c7578063532f1fed146104eb57610232565b806323b872dd1161020557806323b872dd1461034b5780632e15e5c714610381578063313ce567146103a9578063355274ea146103c757806339509351146103cf57610232565b806306fdde0314610237578063095ea7b3146102b457806318160ddd146102f45780631b29b0cd1461030e575b600080fd5b61023f6108f4565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b03813516906020013561098a565b604080519115158252519081900360200190f35b6102fc6109a8565b60408051918252519081900360200190f35b6103166109ae565b6040805196875260208701959095528585019390935260608501919091521515608084015260a0830152519081900360c00190f35b6102e06004803603606081101561036157600080fd5b506001600160a01b03813581169160208101359091169060400135610abc565b6103a76004803603602081101561039757600080fd5b50356001600160a01b0316610b43565b005b6103b1610ba7565b6040805160ff9092168252519081900360200190f35b6102fc610bb0565b6102e0600480360360408110156103e557600080fd5b506001600160a01b038135169060200135610bb6565b6103a76004803603604081101561041157600080fd5b506001600160a01b038135169060200135610c04565b6103a76004803603602081101561043d57600080fd5b5035610c6a565b6103a7600480360360a081101561045a57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561048757600080fd5b82018360208201111561049957600080fd5b803590602001918460208302840111600160201b831117156104ba57600080fd5b9193509150351515610c8b565b6104cf610e7a565b604080516001600160a01b039092168252519081900360200190f35b6103a76004803603606081101561050157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561052b57600080fd5b82018360208201111561053d57600080fd5b803590602001918460208302840111600160201b8311171561055e57600080fd5b919390929091602081019035600160201b81111561057b57600080fd5b82018360208201111561058d57600080fd5b803590602001918460208302840111600160201b831117156105ae57600080fd5b509092509050610e89565b6104cf600480360360208110156105cf57600080fd5b5035610fd9565b6102fc611000565b6102fc600480360360208110156105f457600080fd5b50356001600160a01b0316611006565b6102e06004803603602081101561061a57600080fd5b50356001600160a01b0316611021565b6103a7611036565b6102fc6110d8565b6103a76004803603604081101561065057600080fd5b506001600160a01b03813516906020013515156110de565b6104cf611161565b61023f611170565b6103a76111d1565b6102e06004803603604081101561069657600080fd5b506001600160a01b038135169060200135611273565b6106c9600480360360208110156106c257600080fd5b50356112db565b6040805192835260208301919091528051918290030190f35b6102e0600480360360408110156106f857600080fd5b506001600160a01b038135169060200135611306565b6103a7600480360360a081101561072457600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661131a565b6103a76004803603602081101561076457600080fd5b50356001600160a01b0316611727565b6103a76004803603604081101561078a57600080fd5b506001600160a01b03813516906020013515156117a1565b6104cf611824565b6102fc611833565b6102fc600480360360408110156107c857600080fd5b506001600160a01b0381358116916020013516611839565b6103a7600480360360808110156107f657600080fd5b813591602081013591810190606081016040820135600160201b81111561081c57600080fd5b82018360208201111561082e57600080fd5b803590602001918460208302840111600160201b8311171561084f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b031691506118649050565b6102e0600480360360208110156108ae57600080fd5b50356001600160a01b03166119d3565b6104cf6119e8565b6103a7600480360360208110156108dc57600080fd5b50356001600160a01b03166119f7565b6104cf611af0565b609f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109805780601f1061095557610100808354040283529160200191610980565b820191906000526020600020905b81548152906001019060200180831161096357829003601f168201915b5050505050905090565b600061099e610997611aff565b8484611b03565b5060015b92915050565b609d5490565b60008060008060008060006098541115610aa15760985460005b609754811015610a9e576000609782815481106109e157fe5b90600052602060002090600402019050610a08816000015484611bef90919063ffffffff16565b9250824211610a9557610a1c826001611bef565b815460018301548590600285016000610a33611aff565b6001600160a01b03168152602081019190915260400160009081205460ff16906003870190610a60611aff565b6001600160a01b03166001600160a01b0316815260200190815260200160002054985098509850985098509850505050610ab4565b506001016109c8565b50505b5060009450849350839250829150819050805b909192939495565b6000610ac9848484611c50565b610b3984610ad5611aff565b610b3485604051806060016040528060288152602001612deb602891396001600160a01b038a166000908152609c6020526040812090610b13611aff565b6001600160a01b0316815260208101919091526040016000205491906120a4565b611b03565b5060019392505050565b610b4b611aff565b609a546001600160a01b03908116911614610b9b576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d84833981519152604482015290519081900360640190fd5b610ba48161213b565b50565b60a15460ff1690565b609e5490565b600061099e610bc3611aff565b84610b3485609c6000610bd4611aff565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611bef565b610c0c611aff565b6065546001600160a01b03908116911614610c5c576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b610c6682826121dc565b5050565b609e54610c7790826122bc565b609e55610ba4610c85611aff565b826122fe565b610c93611aff565b609a546001600160a01b03908116911614610ce3576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d84833981519152604482015290519081900360640190fd5b6097548610610d29576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b60008411610d72576040805162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840c2dadeeadce89ac2f607b1b604482015290519081900360640190fd5b60978681548110610d7f57fe5b9060005260206000209060040201600001548514610db7578460978781548110610da557fe5b60009182526020909120600490910201555b60978681548110610dc457fe5b9060005260206000209060040201600101548414610e00578360978781548110610dea57fe5b9060005260206000209060040201600101819055505b60005b82811015610e71578160978881548110610e1957fe5b90600052602060002090600402016002016000868685818110610e3857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610e03565b50505050505050565b6099546001600160a01b031681565b610e91611aff565b609a546001600160a01b03908116911614610ee1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d84833981519152604482015290519081900360640190fd5b828114610f2c576040805162461bcd60e51b8152602060048201526014602482015273496e76616c69642077686974656c69737428732960601b604482015290519081900360640190fd5b609980546001600160a01b0319166001600160a01b0387161790558215610fd257610f5960976000612b56565b60005b83811015610fd05760976040518060400160405280878785818110610f7d57fe5b905060200201358152602001858585818110610f9557fe5b602090810292909201359092528354600181810186556000958652948290208451600490920201908155920151918301919091555001610f5c565b505b5050505050565b60a88181548110610fe657fe5b6000918252602090912001546001600160a01b0316905081565b60a45481565b6001600160a01b03166000908152609b602052604090205490565b60a26020526000908152604090205460ff1681565b61103e611aff565b6065546001600160a01b0390811691161461108e576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b60a35481565b6110e6611aff565b6065546001600160a01b03908116911614611136576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a660205260409020805460ff1916911515919091179055565b6065546001600160a01b031690565b60a08054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109805780601f1061095557610100808354040283529160200191610980565b6111d9611aff565b609a546001600160a01b03908116911614611229576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d84833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b4908390a3609a80546001600160a01b0319169055565b600061099e611280611aff565b84610b3485604051806060016040528060258152602001612f3060259139609c60006112aa611aff565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906120a4565b609781815481106112e857fe5b60009182526020909120600490910201805460019091015490915082565b600061099e611313611aff565b8484611c50565b600054610100900460ff168061133357506113336123e8565b80611341575060005460ff16155b61137c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff161580156113a7576000805460ff1961ff0019909116610100171660011790555b600086116113f4576040805162461bcd60e51b8152602060048201526015602482015274045524332304361707065643a20636170206973203605c1b604482015290519081900360640190fd5b60408051808201909152600b8082526a56454c41535041442e696f60a81b602090920191825261142691609f91612b77565b506040805180820190915260068082526515931614105160d21b60209092019182526114549160a091612b77565b5060a1805460ff19166012179055609e86905561146f6123ee565b61147761249f565b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b757600080fd5b505afa1580156114cb573d6000803e3d6000fd5b505050506040513d60208110156114e157600080fd5b5051604080516315ab88c960e31b815290519192506115e5916001600160a01b038085169263c9c6539692309288169163ad5c4648916004808301926020929190829003018186803b15801561153657600080fd5b505afa15801561154a573d6000803e3d6000fd5b505050506040513d602081101561156057600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156115b257600080fd5b505af11580156115c6573d6000803e3d6000fd5b505050506040513d60208110156115dc57600080fd5b505160016110de565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061161357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050826001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561166c57600080fd5b505afa158015611680573d6000803e3d6000fd5b505050506040513d602081101561169657600080fd5b50518151829060019081106116a757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d388888389611864565b60a780546001600160a01b0319166001600160a01b0387161790556117006116f9611aff565b60016117a1565b61170b3060016117a1565b5050508015610fd0576000805461ff0019169055505050505050565b61172f611aff565b6065546001600160a01b0390811691161461177f576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b60a780546001600160a01b0319166001600160a01b0392909216919091179055565b6117a9611aff565b6065546001600160a01b039081169116146117f9576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a260205260409020805460ff1916911515919091179055565b609a546001600160a01b031681565b60985481565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205490565b61186c611aff565b6065546001600160a01b039081169116146118bc576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6127106118c98585611bef565b11156119065760405162461bcd60e51b8152600401808060200182810382526022815260200180612f0e6022913960400191505060405180910390fd5b600182511161194b576040805162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b604482015290519081900360640190fd5b6001600160a01b0381166119905760405162461bcd60e51b815260040180806020018281038252602b815260200180612d33602b913960400191505060405180910390fd5b60a384905560a483905581516119ad9060a8906020850190612bf5565b5060a580546001600160a01b0319166001600160a01b0392909216919091179055505050565b60a66020526000908152604090205460ff1681565b60a7546001600160a01b031681565b6119ff611aff565b6065546001600160a01b03908116911614611a4f576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6001600160a01b038116611a945760405162461bcd60e51b8152600401808060200182810382526026815260200180612ceb6026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60a5546001600160a01b031681565b3390565b6001600160a01b038316611b485760405162461bcd60e51b8152600401808060200182810382526024815260200180612eea6024913960400191505060405180910390fd5b6001600160a01b038216611b8d5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d116022913960400191505060405180910390fd5b6001600160a01b038084166000818152609c6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015611c49576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316611c955760405162461bcd60e51b8152600401808060200182810382526025815260200180612ea26025913960400191505060405180910390fd5b6001600160a01b038216611cda5760405162461bcd60e51b8152600401808060200182810382526023815260200180612ca66023913960400191505060405180910390fd5b611ce583838361253c565b611d2281604051806060016040528060268152602001612d5e602691396001600160a01b0386166000908152609b602052604090205491906120a4565b6001600160a01b038085166000908152609b6020908152604080832094909455918516815260a6909152205460ff168015611d7657506001600160a01b038316600090815260a2602052604090205460ff16155b156120375760a35460009015611dfa57611da7612710611da160a354856125c290919063ffffffff16565b9061261b565b609e54909150611db790826122bc565b609e55609d54611dc790826122bc565b609d556040805182815290516000916001600160a01b03871691600080516020612e618339815191529181900360200190a35b60008060a454118015611e17575060a5546001600160a01b031615155b1561201e57611e37612710611da160a454866125c290919063ffffffff16565b60a7549091506001600160a01b031615611fab57306000908152609b6020526040902054611e659082611bef565b306000818152609b6020908152604091829020939093558051848152905191926001600160a01b03891692600080516020612e618339815191529281900390910190a360a7546001600160a01b0316611ebf308284611b03565b806001600160a01b0316635c11d79583600060a860a560009054906101000a90046001600160a01b0316426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b031681526020018381526020018281038252858181548152602001915080548015611f6957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f4b575b50509650505050505050600060405180830381600087803b158015611f8d57600080fd5b505af1158015611fa1573d6000803e3d6000fd5b505050505061201e565b60a5546001600160a01b03166000908152609b6020526040902054611fd09082611bef565b60a580546001600160a01b039081166000908152609b6020908152604091829020949094559154825185815292519082169391891692600080516020612e6183398151915292908290030190a35b6120328161202c85856122bc565b906122bc565b925050505b6001600160a01b0382166000908152609b602052604090205461205a9082611bef565b6001600160a01b038084166000818152609b60209081526040918290209490945580518581529051919392871692600080516020612e6183398151915292918290030190a3505050565b600081848411156121335760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120f85781810151838201526020016120e0565b50505050905090810190601f1680156121255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0381166121805760405162461bcd60e51b8152600401808060200182810382526023815260200180612ec76023913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b490600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216612237576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6122436000838361253c565b609d546122509082611bef565b609d556001600160a01b0382166000908152609b60205260409020546122769082611bef565b6001600160a01b0383166000818152609b60209081526040808320949094558351858152935192939192600080516020612e618339815191529281900390910190a35050565b6000611c4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120a4565b6001600160a01b0382166123435760405162461bcd60e51b8152600401808060200182810382526021815260200180612e816021913960400191505060405180910390fd5b61234f8260008361253c565b61238c81604051806060016040528060228152602001612cc9602291396001600160a01b0385166000908152609b602052604090205491906120a4565b6001600160a01b0383166000908152609b6020526040902055609d546123b290826122bc565b609d556040805182815290516000916001600160a01b03851691600080516020612e618339815191529181900360200190a35050565b303b1590565b600054610100900460ff168061240757506124076123e8565b80612415575060005460ff16155b6124505760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff1615801561247b576000805460ff1961ff0019909116610100171660011790555b61248361265d565b61248b6126fd565b8015610ba4576000805461ff001916905550565b600054610100900460ff16806124b857506124b86123e8565b806124c6575060005460ff16155b6125015760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff1615801561252c576000805460ff1961ff0019909116610100171660011790555b61253461265d565b61248b6127f6565b6125478383836128bf565b6001600160a01b0383166125bd57609e5461256a826125646109a8565b90611bef565b11156125bd576040805162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a2063617020657863656564656400000000000000604482015290519081900360640190fd5b505050565b6000826125d1575060006109a2565b828202828482816125de57fe5b0414611c495760405162461bcd60e51b8152600401808060200182810382526021815260200180612dca6021913960400191505060405180910390fd5b6000611c4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af1565b600054610100900460ff168061267657506126766123e8565b80612684575060005460ff16155b6126bf5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff1615801561248b576000805460ff1961ff0019909116610100171660011790558015610ba4576000805461ff001916905550565b600054610100900460ff168061271657506127166123e8565b80612724575060005460ff16155b61275f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff1615801561278a576000805460ff1961ff0019909116610100171660011790555b6000612794611aff565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ba4576000805461ff001916905550565b600054610100900460ff168061280f575061280f6123e8565b8061281d575060005460ff16155b6128585760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff16158015612883576000805460ff1961ff0019909116610100171660011790555b61288b611aff565b609a80546001600160a01b0319166001600160a01b03929092169190911790558015610ba4576000805461ff001916905550565b6099546001600160a01b031615806128d75750609754155b156128e1576125bd565b6098541580156128ff57506099546001600160a01b03848116911614155b801561291857506099546001600160a01b038381169116145b80156129245750600081115b1561292e57426098555b6099546001600160a01b03848116911614801561295957506099546001600160a01b03838116911614155b156125bd5760006129686109ae565b505050505090506000811115612aeb57600060976129878360016122bc565b8154811061299157fe5b600091825260208083206001600160a01b03881684526002600490930201918201905260409091205490915060ff16612a11576040805162461bcd60e51b815260206004820152601e60248201527f4c4745202d204275796572206973206e6f742077686974656c69737465640000604482015290519081900360640190fd5b60018101546001600160a01b038516600090815260038301602052604081205490911115612a65576001600160a01b03851660009081526003830160205260409020546001830154612a62916122bc565b90505b80841115612aa45760405162461bcd60e51b8152600401808060200182810382526026815260200180612da46026913960400191505060405180910390fd5b6001600160a01b0385166000908152600383016020526040902054612ac99085611bef565b6001600160a01b03861660009081526003909301602052604090922091909155505b50505050565b60008183612b405760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120f85781810151838201526020016120e0565b506000838581612b4c57fe5b0495945050505050565b5080546000825560040290600052602060002090810190610ba49190612c56565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612bb857805160ff1916838001178555612be5565b82800160010185558215612be5579182015b82811115612be5578251825591602001919060010190612bca565b50612bf1929150612c71565b5090565b828054828255906000526020600020908101928215612c4a579160200282015b82811115612c4a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612c15565b50612bf1929150612c86565b5b80821115612bf15760008082556001820155600401612c57565b5b80821115612bf15760008155600101612c72565b5b80821115612bf15780546001600160a01b0319168155600101612c8756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373466565207265776172642061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543616c6c6572206973206e6f74207468652077686974656c69737465720000004c4745202d20416d6f756e7420657863656564732077686974656c697374206d6178696d756d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e65772077686974656c697374657220697320746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346656573206d757374206e6f7420746f74616c206d6f7265207468616e203130302545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220071233ad11852289f28318930a03bad4d3499d269e1cf68f675321cfa4f2ac3964736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063771a0b2811610130578063c0d78655116100b8578063e3f4f30c1161007c578063e3f4f30c146107e0578063eba116d814610898578063edae876f146108be578063f2fde38b146108c6578063ffc877d8146108ec57610232565b8063c0d786551461074e578063c9f1f47f14610774578063d5215d11146107a2578063da91b76e146107aa578063dd62ed3e146107b257610232565b80639ad3a7ba116100ff5780639ad3a7ba14610678578063a457c2d714610680578063a77cac7a146106ac578063a9059cbb146106e2578063aab954d01461070e57610232565b8063771a0b281461063257806386a22eff1461063a5780638da5cb5b1461066857806395d89b411461067057610232565b806340c10f19116101be57806363c6b3d71161018257806363c6b3d7146105b9578063688a0942146105d657806370a08231146105de57806371088c6d14610604578063715018a61461062a57610232565b806340c10f19146103fb57806342966c681461042757806344ade3c51461044457806349448898146104c7578063532f1fed146104eb57610232565b806323b872dd1161020557806323b872dd1461034b5780632e15e5c714610381578063313ce567146103a9578063355274ea146103c757806339509351146103cf57610232565b806306fdde0314610237578063095ea7b3146102b457806318160ddd146102f45780631b29b0cd1461030e575b600080fd5b61023f6108f4565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b03813516906020013561098a565b604080519115158252519081900360200190f35b6102fc6109a8565b60408051918252519081900360200190f35b6103166109ae565b6040805196875260208701959095528585019390935260608501919091521515608084015260a0830152519081900360c00190f35b6102e06004803603606081101561036157600080fd5b506001600160a01b03813581169160208101359091169060400135610abc565b6103a76004803603602081101561039757600080fd5b50356001600160a01b0316610b43565b005b6103b1610ba7565b6040805160ff9092168252519081900360200190f35b6102fc610bb0565b6102e0600480360360408110156103e557600080fd5b506001600160a01b038135169060200135610bb6565b6103a76004803603604081101561041157600080fd5b506001600160a01b038135169060200135610c04565b6103a76004803603602081101561043d57600080fd5b5035610c6a565b6103a7600480360360a081101561045a57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561048757600080fd5b82018360208201111561049957600080fd5b803590602001918460208302840111600160201b831117156104ba57600080fd5b9193509150351515610c8b565b6104cf610e7a565b604080516001600160a01b039092168252519081900360200190f35b6103a76004803603606081101561050157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561052b57600080fd5b82018360208201111561053d57600080fd5b803590602001918460208302840111600160201b8311171561055e57600080fd5b919390929091602081019035600160201b81111561057b57600080fd5b82018360208201111561058d57600080fd5b803590602001918460208302840111600160201b831117156105ae57600080fd5b509092509050610e89565b6104cf600480360360208110156105cf57600080fd5b5035610fd9565b6102fc611000565b6102fc600480360360208110156105f457600080fd5b50356001600160a01b0316611006565b6102e06004803603602081101561061a57600080fd5b50356001600160a01b0316611021565b6103a7611036565b6102fc6110d8565b6103a76004803603604081101561065057600080fd5b506001600160a01b03813516906020013515156110de565b6104cf611161565b61023f611170565b6103a76111d1565b6102e06004803603604081101561069657600080fd5b506001600160a01b038135169060200135611273565b6106c9600480360360208110156106c257600080fd5b50356112db565b6040805192835260208301919091528051918290030190f35b6102e0600480360360408110156106f857600080fd5b506001600160a01b038135169060200135611306565b6103a7600480360360a081101561072457600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661131a565b6103a76004803603602081101561076457600080fd5b50356001600160a01b0316611727565b6103a76004803603604081101561078a57600080fd5b506001600160a01b03813516906020013515156117a1565b6104cf611824565b6102fc611833565b6102fc600480360360408110156107c857600080fd5b506001600160a01b0381358116916020013516611839565b6103a7600480360360808110156107f657600080fd5b813591602081013591810190606081016040820135600160201b81111561081c57600080fd5b82018360208201111561082e57600080fd5b803590602001918460208302840111600160201b8311171561084f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b031691506118649050565b6102e0600480360360208110156108ae57600080fd5b50356001600160a01b03166119d3565b6104cf6119e8565b6103a7600480360360208110156108dc57600080fd5b50356001600160a01b03166119f7565b6104cf611af0565b609f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109805780601f1061095557610100808354040283529160200191610980565b820191906000526020600020905b81548152906001019060200180831161096357829003601f168201915b5050505050905090565b600061099e610997611aff565b8484611b03565b5060015b92915050565b609d5490565b60008060008060008060006098541115610aa15760985460005b609754811015610a9e576000609782815481106109e157fe5b90600052602060002090600402019050610a08816000015484611bef90919063ffffffff16565b9250824211610a9557610a1c826001611bef565b815460018301548590600285016000610a33611aff565b6001600160a01b03168152602081019190915260400160009081205460ff16906003870190610a60611aff565b6001600160a01b03166001600160a01b0316815260200190815260200160002054985098509850985098509850505050610ab4565b506001016109c8565b50505b5060009450849350839250829150819050805b909192939495565b6000610ac9848484611c50565b610b3984610ad5611aff565b610b3485604051806060016040528060288152602001612deb602891396001600160a01b038a166000908152609c6020526040812090610b13611aff565b6001600160a01b0316815260208101919091526040016000205491906120a4565b611b03565b5060019392505050565b610b4b611aff565b609a546001600160a01b03908116911614610b9b576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d84833981519152604482015290519081900360640190fd5b610ba48161213b565b50565b60a15460ff1690565b609e5490565b600061099e610bc3611aff565b84610b3485609c6000610bd4611aff565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611bef565b610c0c611aff565b6065546001600160a01b03908116911614610c5c576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b610c6682826121dc565b5050565b609e54610c7790826122bc565b609e55610ba4610c85611aff565b826122fe565b610c93611aff565b609a546001600160a01b03908116911614610ce3576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d84833981519152604482015290519081900360640190fd5b6097548610610d29576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b60008411610d72576040805162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840c2dadeeadce89ac2f607b1b604482015290519081900360640190fd5b60978681548110610d7f57fe5b9060005260206000209060040201600001548514610db7578460978781548110610da557fe5b60009182526020909120600490910201555b60978681548110610dc457fe5b9060005260206000209060040201600101548414610e00578360978781548110610dea57fe5b9060005260206000209060040201600101819055505b60005b82811015610e71578160978881548110610e1957fe5b90600052602060002090600402016002016000868685818110610e3857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610e03565b50505050505050565b6099546001600160a01b031681565b610e91611aff565b609a546001600160a01b03908116911614610ee1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d84833981519152604482015290519081900360640190fd5b828114610f2c576040805162461bcd60e51b8152602060048201526014602482015273496e76616c69642077686974656c69737428732960601b604482015290519081900360640190fd5b609980546001600160a01b0319166001600160a01b0387161790558215610fd257610f5960976000612b56565b60005b83811015610fd05760976040518060400160405280878785818110610f7d57fe5b905060200201358152602001858585818110610f9557fe5b602090810292909201359092528354600181810186556000958652948290208451600490920201908155920151918301919091555001610f5c565b505b5050505050565b60a88181548110610fe657fe5b6000918252602090912001546001600160a01b0316905081565b60a45481565b6001600160a01b03166000908152609b602052604090205490565b60a26020526000908152604090205460ff1681565b61103e611aff565b6065546001600160a01b0390811691161461108e576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b60a35481565b6110e6611aff565b6065546001600160a01b03908116911614611136576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a660205260409020805460ff1916911515919091179055565b6065546001600160a01b031690565b60a08054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109805780601f1061095557610100808354040283529160200191610980565b6111d9611aff565b609a546001600160a01b03908116911614611229576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d84833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b4908390a3609a80546001600160a01b0319169055565b600061099e611280611aff565b84610b3485604051806060016040528060258152602001612f3060259139609c60006112aa611aff565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906120a4565b609781815481106112e857fe5b60009182526020909120600490910201805460019091015490915082565b600061099e611313611aff565b8484611c50565b600054610100900460ff168061133357506113336123e8565b80611341575060005460ff16155b61137c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff161580156113a7576000805460ff1961ff0019909116610100171660011790555b600086116113f4576040805162461bcd60e51b8152602060048201526015602482015274045524332304361707065643a20636170206973203605c1b604482015290519081900360640190fd5b60408051808201909152600b8082526a56454c41535041442e696f60a81b602090920191825261142691609f91612b77565b506040805180820190915260068082526515931614105160d21b60209092019182526114549160a091612b77565b5060a1805460ff19166012179055609e86905561146f6123ee565b61147761249f565b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b757600080fd5b505afa1580156114cb573d6000803e3d6000fd5b505050506040513d60208110156114e157600080fd5b5051604080516315ab88c960e31b815290519192506115e5916001600160a01b038085169263c9c6539692309288169163ad5c4648916004808301926020929190829003018186803b15801561153657600080fd5b505afa15801561154a573d6000803e3d6000fd5b505050506040513d602081101561156057600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156115b257600080fd5b505af11580156115c6573d6000803e3d6000fd5b505050506040513d60208110156115dc57600080fd5b505160016110de565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061161357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050826001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561166c57600080fd5b505afa158015611680573d6000803e3d6000fd5b505050506040513d602081101561169657600080fd5b50518151829060019081106116a757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d388888389611864565b60a780546001600160a01b0319166001600160a01b0387161790556117006116f9611aff565b60016117a1565b61170b3060016117a1565b5050508015610fd0576000805461ff0019169055505050505050565b61172f611aff565b6065546001600160a01b0390811691161461177f576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b60a780546001600160a01b0319166001600160a01b0392909216919091179055565b6117a9611aff565b6065546001600160a01b039081169116146117f9576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a260205260409020805460ff1916911515919091179055565b609a546001600160a01b031681565b60985481565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205490565b61186c611aff565b6065546001600160a01b039081169116146118bc576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6127106118c98585611bef565b11156119065760405162461bcd60e51b8152600401808060200182810382526022815260200180612f0e6022913960400191505060405180910390fd5b600182511161194b576040805162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b604482015290519081900360640190fd5b6001600160a01b0381166119905760405162461bcd60e51b815260040180806020018281038252602b815260200180612d33602b913960400191505060405180910390fd5b60a384905560a483905581516119ad9060a8906020850190612bf5565b5060a580546001600160a01b0319166001600160a01b0392909216919091179055505050565b60a66020526000908152604090205460ff1681565b60a7546001600160a01b031681565b6119ff611aff565b6065546001600160a01b03908116911614611a4f576040805162461bcd60e51b81526020600482018190526024820152600080516020612e13833981519152604482015290519081900360640190fd5b6001600160a01b038116611a945760405162461bcd60e51b8152600401808060200182810382526026815260200180612ceb6026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60a5546001600160a01b031681565b3390565b6001600160a01b038316611b485760405162461bcd60e51b8152600401808060200182810382526024815260200180612eea6024913960400191505060405180910390fd5b6001600160a01b038216611b8d5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d116022913960400191505060405180910390fd5b6001600160a01b038084166000818152609c6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015611c49576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316611c955760405162461bcd60e51b8152600401808060200182810382526025815260200180612ea26025913960400191505060405180910390fd5b6001600160a01b038216611cda5760405162461bcd60e51b8152600401808060200182810382526023815260200180612ca66023913960400191505060405180910390fd5b611ce583838361253c565b611d2281604051806060016040528060268152602001612d5e602691396001600160a01b0386166000908152609b602052604090205491906120a4565b6001600160a01b038085166000908152609b6020908152604080832094909455918516815260a6909152205460ff168015611d7657506001600160a01b038316600090815260a2602052604090205460ff16155b156120375760a35460009015611dfa57611da7612710611da160a354856125c290919063ffffffff16565b9061261b565b609e54909150611db790826122bc565b609e55609d54611dc790826122bc565b609d556040805182815290516000916001600160a01b03871691600080516020612e618339815191529181900360200190a35b60008060a454118015611e17575060a5546001600160a01b031615155b1561201e57611e37612710611da160a454866125c290919063ffffffff16565b60a7549091506001600160a01b031615611fab57306000908152609b6020526040902054611e659082611bef565b306000818152609b6020908152604091829020939093558051848152905191926001600160a01b03891692600080516020612e618339815191529281900390910190a360a7546001600160a01b0316611ebf308284611b03565b806001600160a01b0316635c11d79583600060a860a560009054906101000a90046001600160a01b0316426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b031681526020018381526020018281038252858181548152602001915080548015611f6957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f4b575b50509650505050505050600060405180830381600087803b158015611f8d57600080fd5b505af1158015611fa1573d6000803e3d6000fd5b505050505061201e565b60a5546001600160a01b03166000908152609b6020526040902054611fd09082611bef565b60a580546001600160a01b039081166000908152609b6020908152604091829020949094559154825185815292519082169391891692600080516020612e6183398151915292908290030190a35b6120328161202c85856122bc565b906122bc565b925050505b6001600160a01b0382166000908152609b602052604090205461205a9082611bef565b6001600160a01b038084166000818152609b60209081526040918290209490945580518581529051919392871692600080516020612e6183398151915292918290030190a3505050565b600081848411156121335760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120f85781810151838201526020016120e0565b50505050905090810190601f1680156121255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0381166121805760405162461bcd60e51b8152600401808060200182810382526023815260200180612ec76023913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b490600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216612237576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6122436000838361253c565b609d546122509082611bef565b609d556001600160a01b0382166000908152609b60205260409020546122769082611bef565b6001600160a01b0383166000818152609b60209081526040808320949094558351858152935192939192600080516020612e618339815191529281900390910190a35050565b6000611c4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120a4565b6001600160a01b0382166123435760405162461bcd60e51b8152600401808060200182810382526021815260200180612e816021913960400191505060405180910390fd5b61234f8260008361253c565b61238c81604051806060016040528060228152602001612cc9602291396001600160a01b0385166000908152609b602052604090205491906120a4565b6001600160a01b0383166000908152609b6020526040902055609d546123b290826122bc565b609d556040805182815290516000916001600160a01b03851691600080516020612e618339815191529181900360200190a35050565b303b1590565b600054610100900460ff168061240757506124076123e8565b80612415575060005460ff16155b6124505760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff1615801561247b576000805460ff1961ff0019909116610100171660011790555b61248361265d565b61248b6126fd565b8015610ba4576000805461ff001916905550565b600054610100900460ff16806124b857506124b86123e8565b806124c6575060005460ff16155b6125015760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff1615801561252c576000805460ff1961ff0019909116610100171660011790555b61253461265d565b61248b6127f6565b6125478383836128bf565b6001600160a01b0383166125bd57609e5461256a826125646109a8565b90611bef565b11156125bd576040805162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a2063617020657863656564656400000000000000604482015290519081900360640190fd5b505050565b6000826125d1575060006109a2565b828202828482816125de57fe5b0414611c495760405162461bcd60e51b8152600401808060200182810382526021815260200180612dca6021913960400191505060405180910390fd5b6000611c4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af1565b600054610100900460ff168061267657506126766123e8565b80612684575060005460ff16155b6126bf5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff1615801561248b576000805460ff1961ff0019909116610100171660011790558015610ba4576000805461ff001916905550565b600054610100900460ff168061271657506127166123e8565b80612724575060005460ff16155b61275f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff1615801561278a576000805460ff1961ff0019909116610100171660011790555b6000612794611aff565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ba4576000805461ff001916905550565b600054610100900460ff168061280f575061280f6123e8565b8061281d575060005460ff16155b6128585760405162461bcd60e51b815260040180806020018281038252602e815260200180612e33602e913960400191505060405180910390fd5b600054610100900460ff16158015612883576000805460ff1961ff0019909116610100171660011790555b61288b611aff565b609a80546001600160a01b0319166001600160a01b03929092169190911790558015610ba4576000805461ff001916905550565b6099546001600160a01b031615806128d75750609754155b156128e1576125bd565b6098541580156128ff57506099546001600160a01b03848116911614155b801561291857506099546001600160a01b038381169116145b80156129245750600081115b1561292e57426098555b6099546001600160a01b03848116911614801561295957506099546001600160a01b03838116911614155b156125bd5760006129686109ae565b505050505090506000811115612aeb57600060976129878360016122bc565b8154811061299157fe5b600091825260208083206001600160a01b03881684526002600490930201918201905260409091205490915060ff16612a11576040805162461bcd60e51b815260206004820152601e60248201527f4c4745202d204275796572206973206e6f742077686974656c69737465640000604482015290519081900360640190fd5b60018101546001600160a01b038516600090815260038301602052604081205490911115612a65576001600160a01b03851660009081526003830160205260409020546001830154612a62916122bc565b90505b80841115612aa45760405162461bcd60e51b8152600401808060200182810382526026815260200180612da46026913960400191505060405180910390fd5b6001600160a01b0385166000908152600383016020526040902054612ac99085611bef565b6001600160a01b03861660009081526003909301602052604090922091909155505b50505050565b60008183612b405760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120f85781810151838201526020016120e0565b506000838581612b4c57fe5b0495945050505050565b5080546000825560040290600052602060002090810190610ba49190612c56565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612bb857805160ff1916838001178555612be5565b82800160010185558215612be5579182015b82811115612be5578251825591602001919060010190612bca565b50612bf1929150612c71565b5090565b828054828255906000526020600020908101928215612c4a579160200282015b82811115612c4a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612c15565b50612bf1929150612c86565b5b80821115612bf15760008082556001820155600401612c57565b5b80821115612bf15760008155600101612c72565b5b80821115612bf15780546001600160a01b0319168155600101612c8756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373466565207265776172642061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543616c6c6572206973206e6f74207468652077686974656c69737465720000004c4745202d20416d6f756e7420657863656564732077686974656c697374206d6178696d756d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e65772077686974656c697374657220697320746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346656573206d757374206e6f7420746f74616c206d6f7265207468616e203130302545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220071233ad11852289f28318930a03bad4d3499d269e1cf68f675321cfa4f2ac3964736f6c634300060c0033
Deployed Bytecode Sourcemap
30937:8278:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36078:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37042:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37042:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;36465:100;;;:::i;:::-;;;;;;;;;;;;;;;;28673:804;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37219:321;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37219:321:0;;;;;;;;;;;;;;;;;:::i;25786:133::-;;;;;;;;;;;;;;;;-1:-1:-1;25786:133:0;-1:-1:-1;;;;;25786:133:0;;:::i;:::-;;36365:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36282:75;;;:::i;37548:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37548:218:0;;;;;;;;:::i;33476:99::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33476:99:0;;;;;;;;:::i;35953:117::-;;;;;;;;;;;;;;;;-1:-1:-1;35953:117:0;;:::i;27504:700::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27504:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27504:700:0;;;;;;;;;;;;-1:-1:-1;27504:700:0;-1:-1:-1;27504:700:0;;;;:::i;25013:30::-;;;:::i;:::-;;;;-1:-1:-1;;;;;25013:30:0;;;;;;;;;;;;;;26561:573;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26561:573:0;;;;;;;;;;;;;;;-1:-1:-1;;;26561:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26561:573:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26561:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26561:573:0;;;;;;;;;;-1:-1:-1;26561:573:0;;-1:-1:-1;26561:573:0;-1:-1:-1;26561:573:0;:::i;31600:35::-;;;;;;;;;;;;;;;;-1:-1:-1;31600:35:0;;:::i;31454:28::-;;;:::i;36573:119::-;;;;;;;;;;;;;;;;-1:-1:-1;36573:119:0;-1:-1:-1;;;;;36573:119:0;;:::i;31374:44::-;;;;;;;;;;;;;;;;-1:-1:-1;31374:44:0;-1:-1:-1;;;;;31374:44:0;;:::i;9455:148::-;;;:::i;31424:26::-;;;:::i;33257:90::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33257:90:0;;;;;;;;;;:::i;8813:79::-;;;:::i;36178:96::-;;;:::i;25610:164::-;;;:::i;37774:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37774:269:0;;;;;;;;:::i;24922:43::-;;;;;;;;;;;;;;;;-1:-1:-1;24922:43:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36700:175;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36700:175:0;;;;;;;;:::i;31648:957::-;;;;;;;;;;;;;;;;-1:-1:-1;31648:957:0;;;;;;;;;;;;;-1:-1:-1;;;;;31648:957:0;;;;;;;;;;;;:::i;32613:77::-;;;;;;;;;;;;;;;;-1:-1:-1;32613:77:0;-1:-1:-1;;;;;32613:77:0;;:::i;33352:112::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33352:112:0;;;;;;;;;;:::i;25056:27::-;;;:::i;24978:28::-;;;:::i;36883:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36883:151:0;;;;;;;;;;:::i;32702:550::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32702:550:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32702:550:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32702:550:0;;-1:-1:-1;;;32702:550:0;;-1:-1:-1;;;;;32702:550:0;;-1:-1:-1;32702:550:0;;-1:-1:-1;32702:550:0:i;31527:37::-;;;;;;;;;;;;;;;;-1:-1:-1;31527:37:0;-1:-1:-1;;;;;31527:37:0;;:::i;31571:22::-;;;:::i;9758:244::-;;;;;;;;;;;;;;;;-1:-1:-1;9758:244:0;-1:-1:-1;;;;;9758:244:0;;:::i;31489:32::-;;;:::i;36078:92::-;36157:5;36150:12;;;;;;;;-1:-1:-1;;36150:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36124:13;;36150:12;;36157:5;;36150:12;;36157:5;36150:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36078:92;:::o;37042:169::-;37125:4;37142:39;37151:12;:10;:12::i;:::-;37165:7;37174:6;37142:8;:39::i;:::-;-1:-1:-1;37199:4:0;37042:169;;;;;:::o;36465:100::-;36545:12;;36465:100;:::o;28673:804::-;28726:7;28735;28744;28753;28762:4;28768:7;28817:1;28801:13;;:17;28798:622;;;28880:13;;28849:28;28918:481;28942:19;:26;28938:30;;28918:481;;;29012:30;29045:19;29065:1;29045:22;;;;;;;;;;;;;;;;;;29012:55;;29127:42;29152:7;:16;;;29127:20;:24;;:42;;;;:::i;:::-;29104:65;;29198:20;29191:3;:27;29188:195;;29249:8;:1;29255;29249:5;:8::i;:::-;29259:16;;29299:17;;;;29277:20;;29318:17;;;29259:16;29336:12;:10;:12::i;:::-;-1:-1:-1;;;;;29318:31:0;;;;;;;;;;;;-1:-1:-1;29318:31:0;;;;;;;29351:17;;;;29369:12;:10;:12::i;:::-;-1:-1:-1;;;;;29351:31:0;-1:-1:-1;;;;;29351:31:0;;;;;;;;;;;;;29241:142;;;;;;;;;;;;;;;;;29188:195;-1:-1:-1;28970:3:0;;28918:481;;;;28798:622;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;28673:804;;;;;;;:::o;37219:321::-;37325:4;37342:36;37352:6;37360:9;37371:6;37342:9;:36::i;:::-;37389:121;37398:6;37406:12;:10;:12::i;:::-;37420:89;37458:6;37420:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37420:19:0;;;;;;:11;:19;;;;;;37440:12;:10;:12::i;:::-;-1:-1:-1;;;;;37420:33:0;;;;;;;;;;;;-1:-1:-1;37420:33:0;;;:89;:37;:89::i;:::-;37389:8;:121::i;:::-;-1:-1:-1;37528:4:0;37219:321;;;;;:::o;25786:133::-;25532:12;:10;:12::i;:::-;25516;;-1:-1:-1;;;;;25516:12:0;;;:28;;;25508:70;;;;;-1:-1:-1;;;25508:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25508:70:0;;;;;;;;;;;;;;;25875:36:::1;25896:14;25875:20;:36::i;:::-;25786:133:::0;:::o;36365:92::-;36440:9;;;;36365:92;:::o;36282:75::-;36345:4;;36282:75;:::o;37548:218::-;37636:4;37653:83;37662:12;:10;:12::i;:::-;37676:7;37685:50;37724:10;37685:11;:25;37697:12;:10;:12::i;:::-;-1:-1:-1;;;;;37685:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37685:25:0;;;:34;;;;;;;;;;;:38;:50::i;33476:99::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;33548:19:::1;33554:3;33559:7;33548:5;:19::i;:::-;33476:99:::0;;:::o;35953:117::-;36008:4;;:16;;36017:6;36008:8;:16::i;:::-;36003:4;:21;36035:27;36041:12;:10;:12::i;:::-;36055:6;36035:5;:27::i;27504:700::-;25532:12;:10;:12::i;:::-;25516;;-1:-1:-1;;;;;25516:12:0;;;:28;;;25508:70;;;;;-1:-1:-1;;;25508:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25508:70:0;;;;;;;;;;;;;;;27682:19:::1;:26:::0;27674:34;::::1;27666:60;;;::::0;;-1:-1:-1;;;27666:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27666:60:0;;;;;;;;;;;;;::::1;;27757:1;27745:9;:13;27737:43;;;::::0;;-1:-1:-1;;;27737:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27737:43:0;;;;;;;;;;;;;::::1;;27808:19;27828:5;27808:26;;;;;;;;;;;;;;;;;;:35;;;27796:8;:47;27793:111;;27896:8;27858:19;27878:5;27858:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:46:::0;27793:111:::1;27941:19;27961:5;27941:26;;;;;;;;;;;;;;;;;;:36;;;27928:9;:49;27925:117;;28033:9;27994:19;28014:5;27994:26;;;;;;;;;;;;;;;;;;:36;;:48;;;;27925:117;28068:9;28063:134;28083:20:::0;;::::1;28063:134;;;28178:7;28125:19;28145:5;28125:26;;;;;;;;;;;;;;;;;;:36;;:50;28162:9;;28172:1;28162:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;28162:12:0::1;28125:50:::0;;-1:-1:-1;28125:50:0;::::1;::::0;;;;;;-1:-1:-1;28125:50:0;:60;;-1:-1:-1;;28125:60:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;28105:3:0::1;28063:134;;;;27504:700:::0;;;;;;:::o;25013:30::-;;;-1:-1:-1;;;;;25013:30:0;;:::o;26561:573::-;25532:12;:10;:12::i;:::-;25516;;-1:-1:-1;;;;;25516:12:0;;;:28;;;25508:70;;;;;-1:-1:-1;;;25508:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25508:70:0;;;;;;;;;;;;;;;26717:37;;::::1;26709:70;;;::::0;;-1:-1:-1;;;26709:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26709:70:0;;;;;;;;;;;;;::::1;;26800:15;:29:::0;;-1:-1:-1;;;;;;26800:29:0::1;-1:-1:-1::0;;;;;26800:29:0;::::1;;::::0;;26853:20;;26850:277:::1;;26904:26;26911:19;;26904:26;:::i;:::-;26960:9;26955:151;26975:20:::0;;::::1;26955:151;;;27021:19;27046:43;;;;;;;;27061:9;;27071:1;27061:12;;;;;;;;;;;;;27046:43;;;;27075:10;;27086:1;27075:13;;;;;;;;::::0;;::::1;::::0;;;::::1;;27046:43:::0;;;27021:69;;::::1;::::0;;::::1;::::0;;-1:-1:-1;27021:69:0;;;;;;;;;::::1;::::0;;::::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;26997:3:0::1;26955:151;;;;26850:277;26561:573:::0;;;;;:::o;31600:35::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31600:35:0;;-1:-1:-1;31600:35:0;:::o;31454:28::-;;;;:::o;36573:119::-;-1:-1:-1;;;;;36666:18:0;36639:7;36666:18;;;:9;:18;;;;;;;36573:119::o;31374:44::-;;;;;;;;;;;;;;;:::o;9455:148::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;9546:6:::1;::::0;9525:40:::1;::::0;9562:1:::1;::::0;-1:-1:-1;;;;;9546:6:0::1;::::0;9525:40:::1;::::0;9562:1;;9525:40:::1;9576:6;:19:::0;;-1:-1:-1;;;;;;9576:19:0::1;::::0;;9455:148::o;31424:26::-;;;;:::o;33257:90::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33324:8:0;;;::::1;;::::0;;;:5:::1;:8;::::0;;;;:15;;-1:-1:-1;;33324:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33257:90::o;8813:79::-;8878:6;;-1:-1:-1;;;;;8878:6:0;8813:79;:::o;36178:96::-;36259:7;36252:14;;;;;;;;-1:-1:-1;;36252:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36226:13;;36252:14;;36259:7;;36252:14;;36259:7;36252:14;;;;;;;;;;;;;;;;;;;;;;;;25610:164;25532:12;:10;:12::i;:::-;25516;;-1:-1:-1;;;;;25516:12:0;;;:28;;;25508:70;;;;;-1:-1:-1;;;25508:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25508:70:0;;;;;;;;;;;;;;;25705:12:::1;::::0;25682:48:::1;::::0;25727:1:::1;::::0;-1:-1:-1;;;;;25705:12:0::1;::::0;25682:48:::1;::::0;25727:1;;25682:48:::1;25741:12;:25:::0;;-1:-1:-1;;;;;;25741:25:0::1;::::0;;25610:164::o;37774:269::-;37867:4;37884:129;37893:12;:10;:12::i;:::-;37907:7;37916:96;37955:15;37916:96;;;;;;;;;;;;;;;;;:11;:25;37928:12;:10;:12::i;:::-;-1:-1:-1;;;;;37916:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37916:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;24922:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24922:43:0;:::o;36700:175::-;36786:4;36803:42;36813:12;:10;:12::i;:::-;36827:9;36838:6;36803:9;:42::i;31648:957::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;31832:1:::1;31826:3;:7;31818:41;;;::::0;;-1:-1:-1;;;31818:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31818:41:0;;;;;;;;;;;;;::::1;;31880:21;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;31880:21:0::1;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:21:::1;:::i;:::-;-1:-1:-1::0;31912:18:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;31912:18:0::1;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:18:::1;:::i;:::-;-1:-1:-1::0;31941:9:0::1;:14:::0;;-1:-1:-1;;31941:14:0::1;31953:2;31941:14;::::0;;31976:4:::1;:10:::0;;;32007:16:::1;:14;:16::i;:::-;32028:23;:21;:23::i;:::-;32060:20;32102:6;32060:49;;32114:19;32154:1;-1:-1:-1::0;;;;;32154:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32154:11:0;32217:8:::1;::::0;;-1:-1:-1;;;32217:8:0;;;;32154:11;;-1:-1:-1;32181:52:0::1;::::0;-1:-1:-1;;;;;32189:12:0;;::::1;::::0;::::1;::::0;32210:4:::1;::::0;32217:6;::::1;::::0;::::1;::::0;:8:::1;::::0;;::::1;::::0;32154:11:::1;::::0;32217:8;;;;;;;:6;:8;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32217:8:0;32189:37:::1;::::0;;-1:-1:-1;;;;;;32189:37:0::1;::::0;;;;;;-1:-1:-1;;;;;32189:37:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;32217:8:::1;::::0;32189:37;;;;;;;-1:-1:-1;32189:37:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32189:37:0;32228:4:::1;32181:7;:52::i;:::-;32291:16;::::0;;32305:1:::1;32291:16:::0;;;32254:34:::1;32291:16:::0;;::::1;::::0;;32254:34;32291:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;32291:16:0::1;32254:53;;32363:4;32332:17;32350:1;32332:20;;;;;;;;;;;;;:36;-1:-1:-1::0;;;;;32332:36:0::1;;;-1:-1:-1::0;;;;;32332:36:0::1;;;::::0;::::1;32402:1;-1:-1:-1::0;;;;;32402:6:0::1;;:8;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32402:8:0;32379:20;;:17;;32397:1:::1;::::0;32379:20;::::1;;;;;;;;;;:31;-1:-1:-1::0;;;;;32379:31:0::1;;;-1:-1:-1::0;;;;;32379:31:0::1;;;::::0;::::1;32419:70;32427:10;32439:12;32453:17;32472:16;32419:7;:70::i;:::-;32498:7;:16:::0;;-1:-1:-1;;;;;;32498:16:0::1;-1:-1:-1::0;;;;;32498:16:0;::::1;;::::0;;32523:34:::1;32538:12;:10;:12::i;:::-;32552:4;32523:14;:34::i;:::-;32562:35;32585:4;32592;32562:14;:35::i;:::-;5298:1;;;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;31648:957;;;;;;:::o;32613:77::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;32671:7:::1;:11:::0;;-1:-1:-1;;;;;;32671:11:0::1;-1:-1:-1::0;;;;;32671:11:0;;;::::1;::::0;;;::::1;::::0;;32613:77::o;33352:112::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33430:15:0;;;::::1;;::::0;;;:12:::1;:15;::::0;;;;:26;;-1:-1:-1;;33430:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33352:112::o;25056:27::-;;;-1:-1:-1;;;;;25056:27:0;;:::o;24978:28::-;;;;:::o;36883:151::-;-1:-1:-1;;;;;36999:18:0;;;36972:7;36999:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36883:151::o;32702:550::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;32891:5:::1;32859:28;:10:::0;32874:12;32859:14:::1;:28::i;:::-;:37;;32851:84;;;;-1:-1:-1::0;;;32851:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32981:1;32954:17;:24;:28;32946:53;;;::::0;;-1:-1:-1;;;32946:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32946:53:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;33012:30:0;::::1;33004:86;;;;-1:-1:-1::0;;;33004:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33099:11;:24:::0;;;33128:13:::1;:28:::0;;;33161:38;;::::1;::::0;:18:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;33204:17:0::1;:36:::0;;-1:-1:-1;;;;;;33204:36:0::1;-1:-1:-1::0;;;;;33204:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;32702:550:0:o;31527:37::-;;;;;;;;;;;;;;;:::o;31571:22::-;;;-1:-1:-1;;;;;31571:22:0;;:::o;9758:244::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9847:22:0;::::1;9839:73;;;;-1:-1:-1::0;;;9839:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9949:6;::::0;9928:38:::1;::::0;-1:-1:-1;;;;;9928:38:0;;::::1;::::0;9949:6:::1;::::0;9928:38:::1;::::0;9949:6:::1;::::0;9928:38:::1;9977:6;:17:::0;;-1:-1:-1;;;;;;9977:17:0::1;-1:-1:-1::0;;;;;9977:17:0;;;::::1;::::0;;;::::1;::::0;;9758:244::o;31489:32::-;;;-1:-1:-1;;;;;31489:32:0;;:::o;7089:106::-;7177:10;7089:106;:::o;38863:346::-;-1:-1:-1;;;;;38965:19:0;;38957:68;;;;-1:-1:-1;;;38957:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39044:21:0;;39036:68;;;;-1:-1:-1;;;39036:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39117:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39169:32;;;;;;;;;;;;;;;;;38863:346;;;:::o;10983:181::-;11041:7;11073:5;;;11097:6;;;;11089:46;;;;;-1:-1:-1;;;11089:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11155:1;10983:181;-1:-1:-1;;;10983:181:0:o;33927:2020::-;-1:-1:-1;;;;;34025:20:0;;34017:70;;;;-1:-1:-1;;;34017:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34106:23:0;;34098:71;;;;-1:-1:-1;;;34098:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34184:47;34205:6;34213:9;34224:6;34184:20;:47::i;:::-;34260:71;34282:6;34260:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34260:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;34240:17:0;;;;;;;:9;:17;;;;;;;;:91;;;;34343:16;;;;;:5;:16;;;;;;;:41;;;;-1:-1:-1;;;;;;34364:20:0;;;;;;:12;:20;;;;;;;;34363:21;34343:41;34340:1481;;;34436:11;;34397:21;;34436:15;34433:246;;34481:34;34509:5;34481:23;34492:11;;34481:6;:10;;:23;;;;:::i;:::-;:27;;:34::i;:::-;34535:4;;34465:50;;-1:-1:-1;34535:23:0;;34465:50;34535:8;:23::i;:::-;34528:4;:30;34580:12;;:31;;34597:13;34580:16;:31::i;:::-;34565:12;:46;34623:43;;;;;;;;34648:1;;-1:-1:-1;;;;;34623:43:0;;;-1:-1:-1;;;;;;;;;;;34623:43:0;;;;;;;;34433:246;34689:23;34746:1;34730:13;;:17;:52;;;;-1:-1:-1;34751:17:0;;-1:-1:-1;;;;;34751:17:0;:31;;34730:52;34727:1018;;;34819:36;34849:5;34819:25;34830:13;;34819:6;:10;;:25;;;;:::i;:36::-;34871:7;;34801:54;;-1:-1:-1;;;;;;34871:7:0;:21;34868:865;;34960:4;34942:24;;;;:9;:24;;;;;;:45;;34971:15;34942:28;:45::i;:::-;34933:4;34915:24;;;;:9;:24;;;;;;;;;:72;;;;35013:48;;;;;;;34933:4;;-1:-1:-1;;;;;35013:48:0;;;-1:-1:-1;;;;;;;;;;;35013:48:0;;;;;;;;;35124:7;;-1:-1:-1;;;;;35124:7:0;35177:49;35194:4;35124:7;35210:15;35177:8;:49::i;:::-;35255:1;-1:-1:-1;;;;;35255:55:0;;35337:15;35379:1;35407:18;35452:17;;;;;;;;;-1:-1:-1;;;;;35452:17:0;35496:15;35255:279;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35255:279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35255:279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34868:865;;;;35618:17;;-1:-1:-1;;;;;35618:17:0;35608:28;;;;:9;:28;;;;;;:49;;35641:15;35608:32;:49::i;:::-;35587:17;;;-1:-1:-1;;;;;35587:17:0;;;35577:28;;;;:9;:28;;;;;;;;;:80;;;;35690:17;;35673:52;;;;;;;35690:17;;;;35673:52;;;;-1:-1:-1;;;;;;;;;;;35673:52:0;;;;;;;;34868:865;35764:46;35794:15;35764:25;:6;35775:13;35764:10;:25::i;:::-;:29;;:46::i;:::-;35755:55;;34340:1481;;;-1:-1:-1;;;;;35856:20:0;;;;;;:9;:20;;;;;;:32;;35881:6;35856:24;:32::i;:::-;-1:-1:-1;;;;;35833:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;35904:35;;;;;;;35833:20;;35904:35;;;;-1:-1:-1;;;;;;;;;;;35904:35:0;;;;;;;;33927:2020;;;:::o;11870:192::-;11956:7;11992:12;11984:6;;;;11976:29;;;;-1:-1:-1;;;11976:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12028:5:0;;;11870:192::o;25931:266::-;-1:-1:-1;;;;;26013:28:0;;26005:76;;;;-1:-1:-1;;;26005:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26120:12;;26097:52;;-1:-1:-1;;;;;26097:52:0;;;;26120:12;;26097:52;;26120:12;;26097:52;26160:12;:29;;-1:-1:-1;;;;;;26160:29:0;-1:-1:-1;;;;;26160:29:0;;;;;;;;;;25931:266::o;38051:378::-;-1:-1:-1;;;;;38135:21:0;;38127:65;;;;;-1:-1:-1;;;38127:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38205:49;38234:1;38238:7;38247:6;38205:20;:49::i;:::-;38282:12;;:24;;38299:6;38282:16;:24::i;:::-;38267:12;:39;-1:-1:-1;;;;;38338:18:0;;;;;;:9;:18;;;;;;:30;;38361:6;38338:22;:30::i;:::-;-1:-1:-1;;;;;38317:18:0;;;;;;:9;:18;;;;;;;;:51;;;;38384:37;;;;;;;38317:18;;;;-1:-1:-1;;;;;;;;;;;38384:37:0;;;;;;;;;38051:378;;:::o;11439:136::-;11497:7;11524:43;11528:1;11531;11524:43;;;;;;;;;;;;;;;;;:3;:43::i;38437:418::-;-1:-1:-1;;;;;38521:21:0;;38513:67;;;;-1:-1:-1;;;38513:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38593:49;38614:7;38631:1;38635:6;38593:20;:49::i;:::-;38676:68;38699:6;38676:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38676:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;38655:18:0;;;;;;:9;:18;;;;;:89;38770:12;;:24;;38787:6;38770:16;:24::i;:::-;38755:12;:39;38810:37;;;;;;;;38836:1;;-1:-1:-1;;;;;38810:37:0;;;-1:-1:-1;;;;;;;;;;;38810:37:0;;;;;;;;38437:418;;:::o;5459:508::-;5876:4;5922:17;5954:7;5459:508;:::o;8391:129::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;8449:26:::1;:24;:26::i;:::-;8486;:24;:26::i;:::-;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;8391:129;:::o;25203:143::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;25268:26:::1;:24;:26::i;:::-;25305:33;:31;:33::i;33587:334::-:0;33692:60;33726:6;33734:9;33745:6;33692:33;:60::i;:::-;-1:-1:-1;;;;;33771:20:0;;33767:147;;33868:4;;33839:25;33857:6;33839:13;:11;:13::i;:::-;:17;;:25::i;:::-;:33;;33831:71;;;;;-1:-1:-1;;;33831:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33587:334;;;:::o;12313:471::-;12371:7;12616:6;12612:47;;-1:-1:-1;12646:1:0;12639:8;;12612:47;12683:5;;;12687:1;12683;:5;:1;12707:5;;;;;:10;12699:56;;;;-1:-1:-1;;;12699:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13252:132;13310:7;13337:39;13341:1;13344;13337:39;;;;;;;;;;;;;;;;;:3;:39::i;7010:69::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5312:14;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;7010:69;:::o;8528:202::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;8600:17:::1;8620:12;:10;:12::i;:::-;8643:6;:18:::0;;-1:-1:-1;;;;;;8643:18:0::1;-1:-1:-1::0;;;;;8643:18:0;::::1;::::0;;::::1;::::0;;;8677:43:::1;::::0;8643:18;;-1:-1:-1;8643:18:0;-1:-1:-1;;8677:43:0::1;::::0;-1:-1:-1;;8677:43:0::1;5298:1;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;8528:202;:::o;25352:106::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;25436:12:::1;:10;:12::i;:::-;25421;:27:::0;;-1:-1:-1;;;;;;25421:27:0::1;-1:-1:-1::0;;;;;25421:27:0;;;::::1;::::0;;;::::1;::::0;;5308:57;;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;25352:106;:::o;29612:1312::-;29724:15;;-1:-1:-1;;;;;29724:15:0;:29;;:64;;-1:-1:-1;29757:19:0;:26;:31;29724:64;29721:89;;;29803:7;;29721:89;29833:13;;:18;:47;;;;-1:-1:-1;29865:15:0;;-1:-1:-1;;;;;29855:25:0;;;29865:15;;29855:25;;29833:47;:79;;;;-1:-1:-1;29897:15:0;;-1:-1:-1;;;;;29884:28:0;;;29897:15;;29884:28;29833:79;:93;;;;;29925:1;29916:6;:10;29833:93;29830:130;;;29957:3;29941:13;:19;29830:130;29994:15;;-1:-1:-1;;;;;29984:25:0;;;29994:15;;29984:25;:57;;;;-1:-1:-1;30026:15:0;;-1:-1:-1;;;;;30013:28:0;;;30026:15;;30013:28;;29984:57;29981:926;;;30095:21;30125:22;:20;:22::i;:::-;30094:53;;;;;;;30191:1;30175:13;:17;30172:710;;;30231:30;30264:19;30284:20;:13;30302:1;30284:17;:20::i;:::-;30264:41;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30350:28:0;;;;:17;30264:41;;;;;30350:17;;;:28;;;;;;;30264:41;;-1:-1:-1;30350:28:0;;30342:71;;;;;-1:-1:-1;;;30342:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30548:17;;;;-1:-1:-1;;;;;30517:28:0;;30450:23;30517:28;;;:17;;;:28;;;;;;30450:23;;-1:-1:-1;30514:143:0;;;-1:-1:-1;;;;;30628:28:0;;;;;;:17;;;:28;;;;;;30606:17;;;;:51;;:21;:51::i;:::-;30588:69;;30514:143;30700:15;30690:6;:25;;30682:76;;;;-1:-1:-1;;;30682:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30808:28:0;;;;;;:17;;;:28;;;;;;:40;;30841:6;30808:32;:40::i;:::-;-1:-1:-1;;;;;30777:28:0;;;;;;:17;;;;:28;;;;;;:71;;;;-1:-1:-1;30172:710:0;29981:926;29612:1312;;;:::o;13872:345::-;13958:7;14060:12;14053:5;14045:28;;;;-1:-1:-1;;;14045:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14084:9;14100:1;14096;:5;;;;;;;13872:345;-1:-1:-1;;;;;13872:345:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://071233ad11852289f28318930a03bad4d3499d269e1cf68f675321cfa4f2ac39
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.