More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 18,004 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17135258 | 2 days ago | IN | 0 CRO | 0.15718504 | ||||
Approve | 17082503 | 5 days ago | IN | 0 CRO | 0.161902 | ||||
Approve | 17075854 | 6 days ago | IN | 0 CRO | 0.15723175 | ||||
Approve | 17075853 | 6 days ago | IN | 0 CRO | 0.14309175 | ||||
Approve | 17074048 | 6 days ago | IN | 0 CRO | 0.15723175 | ||||
Approve | 17074002 | 6 days ago | IN | 0 CRO | 0.15723175 | ||||
Approve | 17015548 | 10 days ago | IN | 0 CRO | 0.15723175 | ||||
Approve | 17015547 | 10 days ago | IN | 0 CRO | 0.15723175 | ||||
Approve | 17015543 | 10 days ago | IN | 0 CRO | 0.15723175 | ||||
Approve | 16992388 | 11 days ago | IN | 0 CRO | 0.53025 | ||||
Approve | 16965226 | 13 days ago | IN | 0 CRO | 0.16509333 | ||||
Transfer | 16957950 | 14 days ago | IN | 0 CRO | 0.505 | ||||
Approve | 16950317 | 14 days ago | IN | 0 CRO | 0.24552595 | ||||
Approve | 16928131 | 16 days ago | IN | 0 CRO | 0.168129 | ||||
Approve | 16904886 | 17 days ago | IN | 0 CRO | 0.168129 | ||||
Approve | 16786266 | 25 days ago | IN | 0 CRO | 0.15723175 | ||||
Approve | 16786253 | 25 days ago | IN | 0 CRO | 0.15723175 | ||||
Approve | 16770477 | 26 days ago | IN | 0 CRO | 0.1576697 | ||||
Approve | 16683101 | 32 days ago | IN | 0 CRO | 0.24405963 | ||||
Approve | 16543294 | 41 days ago | IN | 0 CRO | 0.161902 | ||||
Approve | 16543283 | 41 days ago | IN | 0 CRO | 0.161902 | ||||
Approve | 16277660 | 58 days ago | IN | 0 CRO | 0.53025 | ||||
Approve | 16256789 | 60 days ago | IN | 0 CRO | 0.16509333 | ||||
Approve | 16032416 | 74 days ago | IN | 0 CRO | 0.53025 | ||||
Approve | 15885326 | 84 days ago | IN | 0 CRO | 0.24552595 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
6791177 | 678 days ago | 1,008 CRO | ||||
6086067 | 724 days ago | 1,102.12886382 CRO | ||||
6086067 | 724 days ago | 500.96766537 CRO | ||||
6086067 | 724 days ago | 1,603.09652919 CRO | ||||
6082959 | 725 days ago | 1,516.87945615 CRO | ||||
6082959 | 725 days ago | 689.49066188 CRO | ||||
6082959 | 725 days ago | 2,206.37011804 CRO | ||||
6080749 | 725 days ago | 1,179.12935191 CRO | ||||
6080749 | 725 days ago | 535.96788723 CRO | ||||
6080749 | 725 days ago | 1,715.09723915 CRO | ||||
6077314 | 725 days ago | 1,482.94291623 CRO | ||||
6077314 | 725 days ago | 674.06496192 CRO | ||||
6077314 | 725 days ago | 2,157.00787815 CRO | ||||
6076989 | 725 days ago | 1,357.73680516 CRO | ||||
6076989 | 725 days ago | 617.15309325 CRO | ||||
6076989 | 725 days ago | 1,974.88989842 CRO | ||||
6076880 | 725 days ago | 2,136.48386729 CRO | ||||
6076880 | 725 days ago | 971.12903058 CRO | ||||
6076880 | 725 days ago | 3,107.61289788 CRO | ||||
6075334 | 725 days ago | 1,187.53987839 CRO | ||||
6075334 | 725 days ago | 539.79085381 CRO | ||||
6075334 | 725 days ago | 1,727.3307322 CRO | ||||
6071982 | 725 days ago | 940.16659894 CRO | ||||
6071982 | 725 days ago | 427.34845406 CRO | ||||
6071982 | 725 days ago | 1,367.515053 CRO |
Loading...
Loading
Contract Name:
PhenixFinance
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-10-11 */ // File: contracts/InterfaceLP.sol pragma solidity ^0.7.4; interface InterfaceLP { function sync() external; } // File: contracts/SafeMathInt.sol pragma solidity ^0.7.4; library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { require(b != -1 || a != MIN_INT256); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } } // File: contracts/SafeMath.sol pragma solidity ^0.7.4; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: contracts/Ownable.sol pragma solidity ^0.7.4; contract Ownable { address private _owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _owner = msg.sender; } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(isOwner()); _; } function isOwner() public view returns (bool) { return msg.sender == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(_owner); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/IVVSRouter01.sol pragma solidity ^0.7.4; interface IVVSRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File: contracts/IVVSRouter.sol pragma solidity ^0.7.4; interface IVVSRouter is IVVSRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File: contracts/IVVSFactory.sol pragma solidity ^0.7.4; interface IVVSFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: contracts/IERC20.sol pragma solidity ^0.7.4; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/ERC20Detailed.sol pragma solidity ^0.7.4; abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor( string memory name, string memory symbol, uint8 decimals ) { _name = name; _symbol = symbol; _decimals = decimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } } // File: contracts/Phenix.sol pragma solidity ^0.7.4; contract PhenixFinance is ERC20Detailed, Ownable { using SafeMath for uint256; using SafeMathInt for int256; event Rebase(uint256 indexed totalSupply); address[] public pairAddresses; address public liquidityReceiver; address public phenixFundReserveReceiver; bool public initialDistributionFinished; mapping(address => bool) _allowTransfer; mapping(address => bool) _isFeeExempt; uint256 private constant FXP_BASE = 1000000; uint256 private constant DECIMALS = 18; uint256 private constant MAX_UINT256 = ~uint256(0); address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; uint256 private constant REBASE_INTERVAL = 86400; uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 300 * 10**6 * 10**DECIMALS; uint256 public liquidityFee = 2; uint256 public phenixVaultFee = 8; uint256 public sellFee = 15; uint256 public totalFee = liquidityFee.add(phenixVaultFee); uint256 public feeDenominator = 100; uint256 public lastRebaseTimestamp = block.timestamp; uint256 public lastRebaseDelta = 0; uint256 public rebasePercentDelta = (18 * FXP_BASE) / 1000; bool public rebaseRX3Enabled = true; uint256 public rebaseRX3Multiplier = FXP_BASE; uint256 public rebaseMaxRX3Multiplier = FXP_BASE + FXP_BASE / 2; uint256 public rebaseRX3MultiplierStep = (1 * FXP_BASE) / 1000; IVVSRouter public router; bool public swapEnabled = true; uint256 private gonSwapThreshold = (TOTAL_GONS * 10) / 10000; bool inSwap; uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY); uint256 private constant MAX_SUPPLY = ~uint128(0); uint256 private _totalSupply; uint256 private _gonsPerFragment; mapping(address => uint256) private _gonBalances; mapping(address => mapping(address => uint256)) private _allowedFragments; mapping(address => bool) public taxableAddress; mapping(address => bool) public authorizedRebaseAddress; constructor() ERC20Detailed("Phenix Finance", "PHNX", uint8(DECIMALS)) { router = IVVSRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30); address _pairAddress = address( IVVSFactory(router.factory()).createPair( router.WETH(), address(this) ) ); liquidityReceiver = address(msg.sender); phenixFundReserveReceiver = address(msg.sender); _allowedFragments[address(this)][address(router)] = uint256(-1); _totalSupply = INITIAL_FRAGMENTS_SUPPLY; _gonBalances[address(msg.sender)] = TOTAL_GONS; _gonsPerFragment = TOTAL_GONS.div(_totalSupply); _isFeeExempt[address(phenixFundReserveReceiver)] = true; _isFeeExempt[address(this)] = true; _isFeeExempt[address(msg.sender)] = true; taxableAddress[_pairAddress] = true; pairAddresses.push(_pairAddress); authorizedRebaseAddress[address(msg.sender)] = true; emit Transfer(address(0x0), address(msg.sender), _totalSupply); } /** * @dev Swapping switch used to mitigate any calculation * issues during swapBack. */ modifier noReentrancy() { inSwap = true; _; inSwap = false; } modifier initialDistributionLock() { require( initialDistributionFinished || isOwner() || _allowTransfer[msg.sender], "Initial distirbution not finalized." ); _; } modifier validRecipient(address to) { require(to != address(0x0)); _; } /** * @dev Returns the delta of the next rebase. * @return next rebase delta as uint256 value. */ function getNextRebase(uint256 _timestamp) public view returns (uint256) { uint256 rebaseTimestampDelta = _timestamp - lastRebaseTimestamp; uint256 nextScaledRebaseIntervalPercentage = rebaseTimestampDelta .mul(FXP_BASE) .div(REBASE_INTERVAL); uint256 nextRebaseDelta = _totalSupply .mul(rebasePercentDelta) .div(FXP_BASE) .mul(nextScaledRebaseIntervalPercentage) .div(FXP_BASE); if (rebaseRX3Enabled == true) { nextRebaseDelta = nextRebaseDelta .mul( rebaseRX3Multiplier < rebaseMaxRX3Multiplier ? rebaseRX3Multiplier : rebaseMaxRX3Multiplier ) .div(FXP_BASE); } return nextRebaseDelta; } /** * @dev Rebases total token supply based on the getNextRebase() * return result. Rebase is capped when MAX_SUPPLY is reached. */ function _rebase() internal { uint256 supplyDelta = getNextRebase(block.timestamp); _totalSupply = _totalSupply.add(uint256(supplyDelta)); if (_totalSupply > MAX_SUPPLY) { _totalSupply = MAX_SUPPLY; } _gonsPerFragment = TOTAL_GONS.div(_totalSupply); lastRebaseDelta = supplyDelta; lastRebaseTimestamp = block.timestamp; rebaseRX3Multiplier = FXP_BASE; emit Rebase(_totalSupply); } /** * @dev Executes the internal _rebase() function and then * performs the sync() call on all applicable pairAddresses */ function rebaseAndSync() external { require( authorizedRebaseAddress[msg.sender] == true, "Not authroized to execute rebase" ); _rebase(); for (uint256 i = 0; i < pairAddresses.length; i++) { if (taxableAddress[pairAddresses[i]] == true) { InterfaceLP(pairAddresses[i]).sync(); } } } /** * @dev Sets the last rebase time to the current block * timestamp as means to reset the value. */ function resetLastRebaseTimestamp() external { require( authorizedRebaseAddress[msg.sender] == true, "Not authroized to execute this function." ); lastRebaseTimestamp = block.timestamp; } /** * @dev Returns total token supply. Overrides ERC-20 * totalSupply() function to return elastic supply. */ function totalSupply() external view override returns (uint256) { return _totalSupply; } /** * @dev Transfers amount tokens to an address. * @param to Receiver of the transfered tokens. * @param value Amount of tokens that are received. * @return true */ function transfer(address to, uint256 value) external override validRecipient(to) initialDistributionLock returns (bool) { _transferFrom(msg.sender, to, value); return true; } /** * @dev Adds LP contract address and removes * fees from the given address. Added pair contract tested * sync() before adding to see if it is a pair address. * Addition will fail if sync() fails. * @param _address Update LP contract address. */ function addLPAddress(address _address) external onlyOwner { InterfaceLP(_address).sync(); for (uint256 i = 0; i < pairAddresses.length; i++) { require(pairAddresses[i] != _address, "Pair address already added"); } pairAddresses.push(_address); taxableAddress[_address] = true; } /** * @dev Returns array of all LP Addresses * @return address[] Array of LP Addresses. **/ function getLPAddresses() external view returns (address[] memory) { return pairAddresses; } /** * @dev Updates given address' taxable status. * @param _address Subject address of taxable state adjustment. * @param _status State if address should be taxed. */ function setTaxableAddress(address _address, bool _status) external onlyOwner { taxableAddress[_address] = _status; } /** * @dev Updates given address' Authorized Rebase status. * @param _address Subject address of Authorized Rebase state adjustment. * @param _status State if address should be allowed call rebaseAndSync(). */ function setAuthorizedRebaseAddress(address _address, bool _status) external onlyOwner { authorizedRebaseAddress[_address] = _status; } /** * @dev Returns spender alloance of an owner address. * Overides ERC-20 allowance(address, address) function * to return allowed fragments. * @param owner Owner address of tokens. * @param spender Spender address of tokens. * @return uint256 Amount of allowed tokens for the spender to use. */ function allowance(address owner, address spender) external view override returns (uint256) { return _allowedFragments[owner][spender]; } /** * @dev Returns balance of given address. Overrides * ERC-20 balanceOf(address) to provide balance based * on holder gons and gonsPerFragment. * @param who Balance of address. * @return uint256 value of address balance. */ function balanceOf(address who) external view override returns (uint256) { return _gonBalances[who].div(_gonsPerFragment); } /** * @dev Performs basic token transfer. Used as * internal function in _transferFrom(address, * address, uint256) function. * @param from sender address of transfer. * @param to receiver adddress of transfer. * @param amount amount of tokens for receiver. * @return true. */ function _basicTransfer( address from, address to, uint256 amount ) internal returns (bool) { uint256 gonAmount = amount.mul(_gonsPerFragment); _gonBalances[from] = _gonBalances[from].sub(gonAmount); _gonBalances[to] = _gonBalances[to].add(gonAmount); return true; } /** * @dev Transfers token from sender address * to receiver address. Performs token supply * rebase provided it is acceptable. Executes * _baseTransfer(address, address, uint256) if * swap is in progress. * @param sender sender address of transfer. * @param to receiver adddress of transfer. * @param amount amount of tokens for receiver. * @return true. */ function _transferFrom( address sender, address to, uint256 amount ) internal returns (bool) { if (inSwap) { return _basicTransfer(sender, to, amount); } uint256 gonAmount = amount.mul(_gonsPerFragment); if (_shouldSwapBack()) { _swapBack(); } if (rebaseRX3Enabled == true) { rebaseRX3Multiplier = rebaseRX3Multiplier.add( rebaseRX3MultiplierStep ); } _gonBalances[sender] = _gonBalances[sender].sub(gonAmount); uint256 gonAmountReceived = _shouldTakeFee(sender, to) ? _takeFee(sender, to, gonAmount) : gonAmount; _gonBalances[to] = _gonBalances[to].add(gonAmountReceived); emit Transfer(sender, to, gonAmountReceived.div(_gonsPerFragment)); return true; } /** * @dev Transfers token from sender address * to receiver address. Overrides ERC-20 * transferFrom(address, address, uint256) to * check value of allowed fragments that sender * can access from the owner (from address). * @param from sender address of transfer. * @param to receiver adddress of transfer. * @param value amount of tokens for receiver. * @return true. */ function transferFrom( address from, address to, uint256 value ) external override validRecipient(to) returns (bool) { if (_allowedFragments[from][msg.sender] != uint256(-1)) { _allowedFragments[from][msg.sender] = _allowedFragments[from][ msg.sender ].sub(value, "Insufficient Allowance"); } _transferFrom(from, to, value); return true; } /** * @dev Executes fee allocations and distributes tokens * to contract address, phenix vault receiver address, and * liquidity receiver address. */ function _swapBack() internal noReentrancy { uint256 contractTokenBalance = _gonBalances[address(this)].div( _gonsPerFragment ); uint256 amountToLiquify = contractTokenBalance .mul(liquidityFee) .div(totalFee) .div(2); uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance.sub(balanceBefore); uint256 totalETHFee = totalFee.sub(liquidityFee.div(2)); uint256 amountETHLiquidity = amountETH .mul(liquidityFee) .div(totalETHFee) .div(2); if (amountToLiquify > 0) { router.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, liquidityReceiver, block.timestamp ); } (bool success, ) = payable(phenixFundReserveReceiver).call{ value: address(this).balance }(""); } /** * @dev Calculates swap fee and returns new allocation * of swap based on swap conditions. Calculate is based * on liquidity fee and phenix vault fee. Sell fee will also * be taken into consideration if receiver is pair address. * @return uint256 gonAmount that is transfered in the swap. */ function _takeFee( address sender, address to, uint256 gonAmount ) internal returns (uint256) { uint256 _totalFee = totalFee; if (taxableAddress[to] == true) _totalFee = _totalFee.add(sellFee); uint256 feeAmount = gonAmount.mul(_totalFee).div(feeDenominator); _gonBalances[address(this)] = _gonBalances[address(this)].add( feeAmount ); emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment)); return gonAmount.sub(feeAmount); } /** * @dev Decreases spender allowance of sender address. * @param spender Spender address. * @param subtractedValue Amount to reduce spender allowance by. * @return bool */ function decreaseAllowance(address spender, uint256 subtractedValue) external initialDistributionLock returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub( subtractedValue ); } emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } /** * @dev Updates router address * @param _address address to set for the dex router */ function updateRouter(address _address) external onlyOwner { require(address(router) != _address, "Router address already set"); router = IVVSRouter(_address); } /** * @dev Increases spender allowance of sender address. * @param spender Spender address. * @param addedValue Amount to increase spender allowance by. * @return bool */ function increaseAllowance(address spender, uint256 addedValue) external initialDistributionLock returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][ spender ].add(addedValue); emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } /** * @dev Approves spender address to use sender tokens. * @param spender Spender address. * @param value Amount of tokens spender can access. * @return bool */ function approve(address spender, uint256 value) external override initialDistributionLock returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Checks if given address is exempt from swap fees. * @param _addr Address to check current exemption status. * @return bool */ function checkFeeExempt(address _addr) external view returns (bool) { return _isFeeExempt[_addr]; } /** * @dev Unlocks tokens and sets initialDistributedFinished * to true. Only callable from owner address. */ function setInitialDistributionFinished() external onlyOwner { initialDistributionFinished = true; } /** * @dev Enables transfers for a specific address. * Only callable from owner address. * @param _addr Address to enable transfers. */ function enableTransfer(address _addr) external onlyOwner { _allowTransfer[_addr] = true; } /** * @dev Sets given address to have exceptions from * swap fees. Only callable from owner address. * @param _addr Address to set fee exemptions. */ function setFeeExempt(address _addr) external onlyOwner { _isFeeExempt[_addr] = true; } /** * @dev Checks if a sender (from) and receiver * (to) need swap fees applied in transfer. Used * in _transferFrom(address, address, uint256) internal * function. Should only apply when user is interacting with * the pair (to or from) * @param from Sender address of swap * @param to Receiver address of swap. * @return bool True if fees apply on transfer. */ function _shouldTakeFee(address from, address to) internal view returns (bool) { return (taxableAddress[from] || taxableAddress[to]) && (!_isFeeExempt[from] && !_isFeeExempt[to]); } /** * @dev Updates swap back settings. * @param _enabled bool value to determine of swap back is enabled. * @param _num uint256 value for the swap back threshhold * @param _denom uint256 value used for the threshold deminator */ function setSwapBackSettings( bool _enabled, uint256 _num, uint256 _denom ) external onlyOwner { swapEnabled = _enabled; gonSwapThreshold = TOTAL_GONS.div(_denom).mul(_num); } /** * @dev Updates RX3 Rebase settings. * @param _enabled bool value to determine of RX3 Protocol is enabled. * @param _rebaseMaxRX3Multiplier uint256 value for the max RX3 Multiplier * @param _rebaseRX3MultiplierStep uint256 value used for the RX3 Multiplier Step */ function setRX3Settings( bool _enabled, uint256 _rebaseMaxRX3Multiplier, uint256 _rebaseRX3MultiplierStep ) external onlyOwner { rebaseRX3Enabled = _enabled; rebaseMaxRX3Multiplier = _rebaseMaxRX3Multiplier; rebaseRX3MultiplierStep = _rebaseRX3MultiplierStep; } /** * @dev Configures Rebase settings. Sets * RebasePercentDelta, and Accuracy. * @param _percentage value of rebase percent delta based on a daily interval (18) * @param _accuracy defines the value of the rebase delta percentage demoninator (1000) */ function setRebaseSettings(uint256 _percentage, uint256 _accuracy) external onlyOwner { rebasePercentDelta = (_percentage * FXP_BASE) / _accuracy; } /** * @dev Check whether the a swap back can be performed. * @return bool, true if swapBack is allowed to execute. */ function _shouldSwapBack() internal view returns (bool) { return taxableAddress[msg.sender] == false && !inSwap && swapEnabled && _gonBalances[address(this)] >= gonSwapThreshold; } /** * @dev Returns current circulating token supply * @return uint256, value of total circulating supply. */ function getCirculatingSupply() public view returns (uint256) { return (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div( _gonsPerFragment ); } function isNotInSwap() external view returns (bool) { return !inSwap; } function checkSwapThreshold() external view returns (uint256) { return gonSwapThreshold.div(_gonsPerFragment); } function setFeeReceivers( address _liquidityReceiver, address _phenixFundReserveReceiver ) external onlyOwner { liquidityReceiver = _liquidityReceiver; phenixFundReserveReceiver = _phenixFundReserveReceiver; } function setFees( uint256 _liquidityFee, uint256 _phenixVaultFee, uint256 _sellFee, uint256 _feeDenominator ) external onlyOwner { liquidityFee = _liquidityFee; phenixVaultFee = _phenixVaultFee; sellFee = _sellFee; totalFee = liquidityFee.add(phenixVaultFee); feeDenominator = _feeDenominator; require(totalFee < feeDenominator / 4); } function emergencyRecoverETH() external onlyOwner { require(address(this).balance > 0, "No ETH to recover."); (bool success, ) = address(msg.sender).call{ value: address(this).balance }(""); require(success, "Failed to recover ETH."); } function emergencyRecoverToken(address _tokenAddress) external onlyOwner { require( IERC20(_tokenAddress).balanceOf(address(this)) > 0, "No tokens to recover." ); IERC20(_tokenAddress).transfer( msg.sender, IERC20(_tokenAddress).balanceOf(address(this)) ); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":"uint256","name":"totalSupply","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addLPAddress","outputs":[],"stateMutability":"nonpayable","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedRebaseAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyRecoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"emergencyRecoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"enableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phenixFundReserveReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phenixVaultFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseAndSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaseMaxRX3Multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebasePercentDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3Enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3Multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3MultiplierStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetLastRebaseTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IVVSRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAuthorizedRebaseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_phenixFundReserveReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_phenixVaultFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_rebaseMaxRX3Multiplier","type":"uint256"},{"internalType":"uint256","name":"_rebaseRX3MultiplierStep","type":"uint256"}],"name":"setRX3Settings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"},{"internalType":"uint256","name":"_accuracy","type":"uint256"}],"name":"setRebaseSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTaxableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxableAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"_address","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260026008556008600955600f600a55620000316009546008546200045460201b62001e6e1790919060201c565b600b556064600c5542600d556000600e55614650600f556010805460ff19166001179055620f42406011556216e3606012556103e86013556014805460ff60a01b1916600160a01b1790557e068db8bac710cb295e9e1b089a027525460aa64c2f60beb15a6764b6a2339c601555348015620000ac57600080fd5b50604080518082018252600e81526d5068656e69782046696e616e636560901b6020808301918252835180850190945260048452630a0909cb60e31b908401528151919291601291620001039160009190620005a7565b50815162000119906001906020850190620005a7565b506002805460ff191660ff9290921691909117610100600160a81b031916610100330217905550506014805473145677fc4d9b8f19b5d56d1820c48e0443049a306001600160a01b031990911617908190556040805163c45a015560e01b815290516000926001600160a01b03169163c45a0155916004808301926020929190829003018186803b158015620001ae57600080fd5b505afa158015620001c3573d6000803e3d6000fd5b505050506040513d6020811015620001da57600080fd5b5051601454604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b1580156200022957600080fd5b505afa1580156200023e573d6000803e3d6000fd5b505050506040513d60208110156200025557600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002a557600080fd5b505af1158015620002ba573d6000803e3d6000fd5b505050506040513d6020811015620002d157600080fd5b505160048054336001600160a01b031991821681179092556005805490911682179055306000908152601a602090815260408083206014546001600160a01b03168452825280832060001990556af8277896582678ac0000006017908155938352601982529091206a87b0b4d075b8302fffffff19908190559154929350620003649290620004b6811b62001ecf17901c565b6018556005546001600160a01b0390811660009081526007602090815260408083208054600160ff1991821681179092553085528285208054821683179055338086528386208054831684179055958716808652601b85528386208054831684179055600380548085019091557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319169091179055858552601c845282852080549091169091179055601754815190815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35062000653565b600082820183811015620004af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000620004af83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200050060201b60201c565b60008183620005905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005545781810151838201526020016200053a565b50505050905090810190601f168015620005825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200059d57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005df57600085556200062a565b82601f10620005fa57805160ff19168380011785556200062a565b828001600101855582156200062a579182015b828111156200062a5782518255916020019190600101906200060d565b50620006389291506200063c565b5090565b5b808211156200063857600081556001016200063d565b61298280620006636000396000f3fe60806040526004361061037a5760003560e01c8063784d20b1116101d1578063b065406911610102578063d1fce264116100a0578063dd62ed3e1161006f578063dd62ed3e14610bd9578063f2fde38b14610c14578063f887ea4014610c47578063fff4348114610c5c57610381565b8063d1fce26414610b2b578063d439979014610b40578063d5938aac14610b73578063d780d4dc14610ba657610381565b8063bdb938e2116100dc578063bdb938e214610a70578063c851cc3214610aab578063c939a4f614610ade578063d088935814610af357610381565b8063b065406914610a1c578063b86a2fd714610a31578063bd94c8dd14610a4657610381565b806399e3b3bd1161016f578063a8688e2a11610149578063a8688e2a14610986578063a9059cbb146109b9578063a92558d0146109f2578063ab92c3f214610a0757610381565b806399e3b3bd146108fd578063a457c2d714610912578063a4b45c001461094b57610381565b80638da5cb5b116101ab5780638da5cb5b146108a95780638f32d59b146108be57806395d89b41146108d357806398118cb4146108e857610381565b8063784d20b11461083157806383b4ac681461086457806389e9616e1461087957610381565b80632d517fdc116102ab578063530ddf64116102495780636fcba377116102235780636fcba3771461077a57806370a08231146107b6578063715018a6146107e9578063749796a5146107fe57610381565b8063530ddf641461073b5780636d351d1a146107505780636ddd17131461076557610381565b8063395093511161028557806339509351146106735780634513e7d0146106ac5780634bfed05c146106c15780634c50855d146106d657610381565b80632d517fdc146105fb578063313ce567146106105780633751ed741461063b57610381565b806323b872dd116103185780632b112e49116102f25780632b112e49146105a75780632b14ca56146105bc5780632b28af1b146105d15780632be6937d146105e657610381565b806323b872dd146104f8578063264d26dd1461053b5780632abf77f51461056c57610381565b8063180b0d7e11610354578063180b0d7e1461049257806318160ddd146104b9578063186e2d77146104ce5780631df4ccfc146104e357610381565b806306fdde031461038657806307f594a314610410578063095ea7b31461044557610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610c86565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316610d1c565b005b34801561045157600080fd5b5061047e6004803603604081101561046857600080fd5b506001600160a01b038135169060200135610ef9565b604080519115158252519081900360200190f35b34801561049e57600080fd5b506104a7610fd4565b60408051918252519081900360200190f35b3480156104c557600080fd5b506104a7610fda565b3480156104da57600080fd5b50610443610fe0565b3480156104ef57600080fd5b506104a76110d4565b34801561050457600080fd5b5061047e6004803603606081101561051b57600080fd5b506001600160a01b038135811691602081013590911690604001356110da565b34801561054757600080fd5b506105506111b4565b604080516001600160a01b039092168252519081900360200190f35b34801561057857600080fd5b506104436004803603604081101561058f57600080fd5b506001600160a01b03813516906020013515156111c3565b3480156105b357600080fd5b506104a76111ff565b3480156105c857600080fd5b506104a7611288565b3480156105dd57600080fd5b506104a761128e565b3480156105f257600080fd5b50610443611294565b34801561060757600080fd5b506104a76112ba565b34801561061c57600080fd5b506106256112c0565b6040805160ff9092168252519081900360200190f35b34801561064757600080fd5b506104436004803603606081101561065e57600080fd5b508035151590602081013590604001356112c9565b34801561067f57600080fd5b5061047e6004803603604081101561069657600080fd5b506001600160a01b0381351690602001356112f4565b3480156106b857600080fd5b506104436113fa565b3480156106cd57600080fd5b506104a7611453565b3480156106e257600080fd5b506106eb611459565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561072757818101518382015260200161070f565b505050509050019250505060405180910390f35b34801561074757600080fd5b506104436114ba565b34801561075c57600080fd5b506104a76115f4565b34801561077157600080fd5b5061047e61160d565b34801561078657600080fd5b506104436004803603608081101561079d57600080fd5b508035906020810135906040810135906060013561161d565b3480156107c257600080fd5b506104a7600480360360208110156107d957600080fd5b50356001600160a01b0316611666565b3480156107f557600080fd5b5061044361168e565b34801561080a57600080fd5b506104436004803603602081101561082157600080fd5b50356001600160a01b03166116ee565b34801561083d57600080fd5b5061047e6004803603602081101561085457600080fd5b50356001600160a01b0316611723565b34801561087057600080fd5b5061047e611738565b34801561088557600080fd5b506104436004803603604081101561089c57600080fd5b5080359060200135611742565b3480156108b557600080fd5b50610550611769565b3480156108ca57600080fd5b5061047e61177d565b3480156108df57600080fd5b5061039b611793565b3480156108f457600080fd5b506104a76117f3565b34801561090957600080fd5b506105506117f9565b34801561091e57600080fd5b5061047e6004803603604081101561093557600080fd5b506001600160a01b038135169060200135611808565b34801561095757600080fd5b506104436004803603604081101561096e57600080fd5b506001600160a01b0381358116916020013516611964565b34801561099257600080fd5b50610443600480360360208110156109a957600080fd5b50356001600160a01b03166119a3565b3480156109c557600080fd5b5061047e600480360360408110156109dc57600080fd5b506001600160a01b038135169060200135611b03565b3480156109fe57600080fd5b506104a7611b9f565b348015610a1357600080fd5b506104a7611ba5565b348015610a2857600080fd5b506104a7611bab565b348015610a3d57600080fd5b506104a7611bb1565b348015610a5257600080fd5b506104a760048036036020811015610a6957600080fd5b5035611bb7565b348015610a7c57600080fd5b5061044360048036036040811015610a9357600080fd5b506001600160a01b0381351690602001351515611c4d565b348015610ab757600080fd5b5061044360048036036020811015610ace57600080fd5b50356001600160a01b0316611c89565b348015610aea57600080fd5b5061047e611d1f565b348015610aff57600080fd5b5061044360048036036060811015610b1657600080fd5b50803515159060208101359060400135611d28565b348015610b3757600080fd5b5061047e611d78565b348015610b4c57600080fd5b5061047e60048036036020811015610b6357600080fd5b50356001600160a01b0316611d88565b348015610b7f57600080fd5b5061044360048036036020811015610b9657600080fd5b50356001600160a01b0316611da6565b348015610bb257600080fd5b5061047e60048036036020811015610bc957600080fd5b50356001600160a01b0316611ddb565b348015610be557600080fd5b506104a760048036036040811015610bfc57600080fd5b506001600160a01b0381358116916020013516611df0565b348015610c2057600080fd5b5061044360048036036020811015610c3757600080fd5b50356001600160a01b0316611e1b565b348015610c5357600080fd5b50610550611e35565b348015610c6857600080fd5b5061055060048036036020811015610c7f57600080fd5b5035611e44565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b610d2461177d565b610d2d57600080fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d7c57600080fd5b505afa158015610d90573d6000803e3d6000fd5b505050506040513d6020811015610da657600080fd5b505111610df2576040805162461bcd60e51b81526020600482015260156024820152742737903a37b5b2b739903a37903932b1b7bb32b91760591b604482015290519081900360640190fd5b806001600160a01b031663a9059cbb33836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e4f57600080fd5b505afa158015610e63573d6000803e3d6000fd5b505050506040513d6020811015610e7957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610eca57600080fd5b505af1158015610ede573d6000803e3d6000fd5b505050506040513d6020811015610ef457600080fd5b505050565b600554600090600160a01b900460ff1680610f175750610f1761177d565b80610f3157503360009081526006602052604090205460ff165b610f6c5760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000818152601a602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600c5481565b60175490565b610fe861177d565b610ff157600080fd5b6000471161103b576040805162461bcd60e51b815260206004820152601260248201527127379022aa24103a37903932b1b7bb32b91760711b604482015290519081900360640190fd5b604051600090339047908381818185875af1925050503d806000811461107d576040519150601f19603f3d011682016040523d82523d6000602084013e611082565b606091505b50509050806110d1576040805162461bcd60e51b81526020600482015260166024820152752330b4b632b2103a37903932b1b7bb32b91022aa241760511b604482015290519081900360640190fd5b50565b600b5481565b6000826001600160a01b0381166110f057600080fd5b6001600160a01b0385166000908152601a602090815260408083203384529091529020546000191461119d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601a82528381203382529091529190912054611178918590611f11565b6001600160a01b0386166000908152601a602090815260408083203384529091529020555b6111a8858585611fa8565b50600195945050505050565b6004546001600160a01b031681565b6111cb61177d565b6111d457600080fd5b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b60185460196020527fd2ac945fcc0096878c763e37d6929b78378c1a2defabde8ba7ee5ed1d6e7a5b25461dead60009081527fc73b1d6eda13a615b81c31830292dbbbf5fbb07f472982e223002bd83d5c3dc454909261128392909161127d9190611277906a87b0b4d075b8302fffffff199061210b565b9061210b565b90611ecf565b905090565b600a5481565b600e5481565b61129c61177d565b6112a557600080fd5b6005805460ff60a01b1916600160a01b179055565b60115481565b60025460ff1690565b6112d161177d565b6112da57600080fd5b6010805460ff191693151593909317909255601255601355565b600554600090600160a01b900460ff1680611312575061131261177d565b8061132c57503360009081526006602052604090205460ff165b6113675760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000908152601a602090815260408083206001600160a01b03871684529091529020546113959083611e6e565b336000818152601a602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b336000908152601c602052604090205460ff16151560011461144d5760405162461bcd60e51b81526004018080602001828103825260288152602001806129256028913960400191505060405180910390fd5b42600d55565b600f5481565b60606003805480602002602001604051908101604052809291908181526020018280548015610d1257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611493575050505050905090565b336000908152601c602052604090205460ff161515600114611523576040805162461bcd60e51b815260206004820181905260248201527f4e6f742061757468726f697a656420746f206578656375746520726562617365604482015290519081900360640190fd5b61152b61214d565b60005b6003548110156110d157601b60006003838154811061154957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff161515600114156115ec576003818154811061158857fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b1580156115d357600080fd5b505af11580156115e7573d6000803e3d6000fd5b505050505b60010161152e565b6000611283601854601554611ecf90919063ffffffff16565b601454600160a01b900460ff1681565b61162561177d565b61162e57600080fd5b60088490556009839055600a8290556116478484611e6e565b600b55600c81905560048104600b541061166057600080fd5b50505050565b6018546001600160a01b0382166000908152601960205260408120549091610fce9190611ecf565b61169661177d565b61169f57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b6116f661177d565b6116ff57600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b601c6020526000908152604090205460ff1681565b60165460ff161590565b61174a61177d565b61175357600080fd5b80620f424083028161176157fe5b04600f555050565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d125780601f10610ce757610100808354040283529160200191610d12565b60085481565b6005546001600160a01b031681565b600554600090600160a01b900460ff1680611826575061182661177d565b8061184057503360009081526006602052604090205460ff165b61187b5760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000908152601a602090815260408083206001600160a01b03871684529091529020548083106118cf57336000908152601a602090815260408083206001600160a01b03881684529091528120556118fe565b6118d9818461210b565b336000908152601a602090815260408083206001600160a01b03891684529091529020555b336000818152601a602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61196c61177d565b61197557600080fd5b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6119ab61177d565b6119b457600080fd5b806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119ef57600080fd5b505af1158015611a03573d6000803e3d6000fd5b5050505060005b600354811015611a9b57816001600160a01b031660038281548110611a2b57fe5b6000918252602090912001546001600160a01b03161415611a93576040805162461bcd60e51b815260206004820152601a60248201527f50616972206164647265737320616c7265616479206164646564000000000000604482015290519081900360640190fd5b600101611a0a565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b039093166001600160a01b0319909316831790556000918252601b6020526040909120805460ff19169091179055565b6000826001600160a01b038116611b1957600080fd5b600554600160a01b900460ff1680611b345750611b3461177d565b80611b4e57503360009081526006602052604090205460ff165b611b895760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b611b94338585611fa8565b506001949350505050565b60135481565b60125481565b60095481565b600d5481565b600d54600090820381611bd46201518061127d84620f42406121e4565b90506000611c07620f424061127d84611c01620f424061127d600f546017546121e490919063ffffffff16565b906121e4565b60105490915060ff16151560011415611c4557611c42620f424061127d60125460115410611c3757601254611c3b565b6011545b84906121e4565b90505b949350505050565b611c5561177d565b611c5e57600080fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b611c9161177d565b611c9a57600080fd5b6014546001600160a01b0382811691161415611cfd576040805162461bcd60e51b815260206004820152601a60248201527f526f75746572206164647265737320616c726561647920736574000000000000604482015290519081900360640190fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60105460ff1681565b611d3061177d565b611d3957600080fd5b6014805460ff60a01b1916600160a01b85151502179055611d7082611c01836af8277896582678ac0000006000195b061990611ecf565b601555505050565b600554600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205460ff1690565b611dae61177d565b611db757600080fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b601b6020526000908152604090205460ff1681565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b611e2361177d565b611e2c57600080fd5b6110d18161223d565b6014546001600160a01b031681565b60038181548110611e5457600080fd5b6000918252602090912001546001600160a01b0316905081565b600082820183811015611ec8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000611ec883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122b7565b60008184841115611fa05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f65578181015183820152602001611f4d565b50505050905090810190601f168015611f925780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60165460009060ff1615611fc857611fc184848461231c565b9050611ec8565b6000611fdf601854846121e490919063ffffffff16565b9050611fe96123ae565b15611ff657611ff6612406565b60105460ff161515600114156120195760135460115461201591611e6e565b6011555b6001600160a01b03851660009081526019602052604090205461203c908261210b565b6001600160a01b0386166000908152601960205260408120919091556120628686612773565b61206c5781612077565b6120778686846127ff565b6001600160a01b03861660009081526019602052604090205490915061209d9082611e6e565b6001600160a01b03808716600081815260196020526040902092909255601854908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120ee908590611ecf565b60408051918252519081900360200190a350600195945050505050565b6000611ec883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f11565b600061215842611bb7565b6017549091506121689082611e6e565b60178190556001600160801b031015612187576001600160801b036017555b6017546121a2906af8277896582678ac000000600019611d68565b601855600e81905542600d55620f42406011556017546040517fafae32ce2847c13a56ab802c034c27d3c19f1d61be48c424c5df134145cd44d090600090a250565b6000826121f357506000610fce565b8282028284828161220057fe5b0414611ec85760405162461bcd60e51b81526004018080602001828103825260218152602001806128e16021913960400191505060405180910390fd5b6001600160a01b03811661225057600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836123065760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f65578181015183820152602001611f4d565b50600083858161231257fe5b0495945050505050565b600080612334601854846121e490919063ffffffff16565b6001600160a01b03861660009081526019602052604090205490915061235a908261210b565b6001600160a01b0380871660009081526019602052604080822093909355908616815220546123899082611e6e565b6001600160a01b03851660009081526019602052604090205550600190509392505050565b336000908152601b602052604081205460ff161580156123d1575060165460ff16155b80156123e65750601454600160a01b900460ff165b801561128357505060155430600090815260196020526040902054101590565b6016805460ff191660011790556018543060009081526019602052604081205490916124329190611ecf565b90506000612456600261127d600b5461127d600854876121e490919063ffffffff16565b90506000612464838361210b565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061249857fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156124ec57600080fd5b505afa158015612500573d6000803e3d6000fd5b505050506040513d602081101561251657600080fd5b505181518290600190811061252757fe5b6001600160a01b0392831660209182029290920181019190915260145460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b838110156125c15781810151838201526020016125a9565b505050509050019650505050505050600060405180830381600087803b1580156125ea57600080fd5b505af11580156125fe573d6000803e3d6000fd5b505050506000612617824761210b90919063ffffffff16565b9050600061263d6126346002600854611ecf90919063ffffffff16565b600b549061210b565b9050600061265f600261127d8461127d600854886121e490919063ffffffff16565b9050861561270957601454600480546040805163f305d71960e01b81523093810193909352602483018b905260006044840181905260648401526001600160a01b0391821660848401524260a48401525192169163f305d71991849160c480830192606092919082900301818588803b1580156126db57600080fd5b505af11580156126ef573d6000803e3d6000fd5b50505050506040513d606081101561270657600080fd5b50505b6005546040516000916001600160a01b03169047908381818185875af1925050503d8060008114612756576040519150601f19603f3d011682016040523d82523d6000602084013e61275b565b606091505b50506016805460ff1916905550505050505050505050565b6001600160a01b0382166000908152601b602052604081205460ff16806127b257506001600160a01b0382166000908152601b602052604090205460ff165b8015611ec857506001600160a01b03831660009081526007602052604090205460ff16158015611ec85750506001600160a01b031660009081526007602052604090205460ff1615919050565b600b546001600160a01b0383166000908152601b602052604081205490919060ff1615156001141561283c57600a54612839908290611e6e565b90505b600c546000906128509061127d86856121e4565b3060009081526019602052604090205490915061286d9082611e6e565b306000818152601960205260409020919091556018546001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906128bb908590611ecf565b60408051918252519081900360200190a36128d6848261210b565b969550505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e697469616c20646973746972627574696f6e206e6f742066696e616c697a65642e4e6f742061757468726f697a656420746f206578656375746520746869732066756e6374696f6e2ea2646970667358221220cfa5b583fae8087fd05d9fbb5b60f35867f6610e4ab8b6455287b79474eb04b164736f6c63430007060033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c8063784d20b1116101d1578063b065406911610102578063d1fce264116100a0578063dd62ed3e1161006f578063dd62ed3e14610bd9578063f2fde38b14610c14578063f887ea4014610c47578063fff4348114610c5c57610381565b8063d1fce26414610b2b578063d439979014610b40578063d5938aac14610b73578063d780d4dc14610ba657610381565b8063bdb938e2116100dc578063bdb938e214610a70578063c851cc3214610aab578063c939a4f614610ade578063d088935814610af357610381565b8063b065406914610a1c578063b86a2fd714610a31578063bd94c8dd14610a4657610381565b806399e3b3bd1161016f578063a8688e2a11610149578063a8688e2a14610986578063a9059cbb146109b9578063a92558d0146109f2578063ab92c3f214610a0757610381565b806399e3b3bd146108fd578063a457c2d714610912578063a4b45c001461094b57610381565b80638da5cb5b116101ab5780638da5cb5b146108a95780638f32d59b146108be57806395d89b41146108d357806398118cb4146108e857610381565b8063784d20b11461083157806383b4ac681461086457806389e9616e1461087957610381565b80632d517fdc116102ab578063530ddf64116102495780636fcba377116102235780636fcba3771461077a57806370a08231146107b6578063715018a6146107e9578063749796a5146107fe57610381565b8063530ddf641461073b5780636d351d1a146107505780636ddd17131461076557610381565b8063395093511161028557806339509351146106735780634513e7d0146106ac5780634bfed05c146106c15780634c50855d146106d657610381565b80632d517fdc146105fb578063313ce567146106105780633751ed741461063b57610381565b806323b872dd116103185780632b112e49116102f25780632b112e49146105a75780632b14ca56146105bc5780632b28af1b146105d15780632be6937d146105e657610381565b806323b872dd146104f8578063264d26dd1461053b5780632abf77f51461056c57610381565b8063180b0d7e11610354578063180b0d7e1461049257806318160ddd146104b9578063186e2d77146104ce5780631df4ccfc146104e357610381565b806306fdde031461038657806307f594a314610410578063095ea7b31461044557610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610c86565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316610d1c565b005b34801561045157600080fd5b5061047e6004803603604081101561046857600080fd5b506001600160a01b038135169060200135610ef9565b604080519115158252519081900360200190f35b34801561049e57600080fd5b506104a7610fd4565b60408051918252519081900360200190f35b3480156104c557600080fd5b506104a7610fda565b3480156104da57600080fd5b50610443610fe0565b3480156104ef57600080fd5b506104a76110d4565b34801561050457600080fd5b5061047e6004803603606081101561051b57600080fd5b506001600160a01b038135811691602081013590911690604001356110da565b34801561054757600080fd5b506105506111b4565b604080516001600160a01b039092168252519081900360200190f35b34801561057857600080fd5b506104436004803603604081101561058f57600080fd5b506001600160a01b03813516906020013515156111c3565b3480156105b357600080fd5b506104a76111ff565b3480156105c857600080fd5b506104a7611288565b3480156105dd57600080fd5b506104a761128e565b3480156105f257600080fd5b50610443611294565b34801561060757600080fd5b506104a76112ba565b34801561061c57600080fd5b506106256112c0565b6040805160ff9092168252519081900360200190f35b34801561064757600080fd5b506104436004803603606081101561065e57600080fd5b508035151590602081013590604001356112c9565b34801561067f57600080fd5b5061047e6004803603604081101561069657600080fd5b506001600160a01b0381351690602001356112f4565b3480156106b857600080fd5b506104436113fa565b3480156106cd57600080fd5b506104a7611453565b3480156106e257600080fd5b506106eb611459565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561072757818101518382015260200161070f565b505050509050019250505060405180910390f35b34801561074757600080fd5b506104436114ba565b34801561075c57600080fd5b506104a76115f4565b34801561077157600080fd5b5061047e61160d565b34801561078657600080fd5b506104436004803603608081101561079d57600080fd5b508035906020810135906040810135906060013561161d565b3480156107c257600080fd5b506104a7600480360360208110156107d957600080fd5b50356001600160a01b0316611666565b3480156107f557600080fd5b5061044361168e565b34801561080a57600080fd5b506104436004803603602081101561082157600080fd5b50356001600160a01b03166116ee565b34801561083d57600080fd5b5061047e6004803603602081101561085457600080fd5b50356001600160a01b0316611723565b34801561087057600080fd5b5061047e611738565b34801561088557600080fd5b506104436004803603604081101561089c57600080fd5b5080359060200135611742565b3480156108b557600080fd5b50610550611769565b3480156108ca57600080fd5b5061047e61177d565b3480156108df57600080fd5b5061039b611793565b3480156108f457600080fd5b506104a76117f3565b34801561090957600080fd5b506105506117f9565b34801561091e57600080fd5b5061047e6004803603604081101561093557600080fd5b506001600160a01b038135169060200135611808565b34801561095757600080fd5b506104436004803603604081101561096e57600080fd5b506001600160a01b0381358116916020013516611964565b34801561099257600080fd5b50610443600480360360208110156109a957600080fd5b50356001600160a01b03166119a3565b3480156109c557600080fd5b5061047e600480360360408110156109dc57600080fd5b506001600160a01b038135169060200135611b03565b3480156109fe57600080fd5b506104a7611b9f565b348015610a1357600080fd5b506104a7611ba5565b348015610a2857600080fd5b506104a7611bab565b348015610a3d57600080fd5b506104a7611bb1565b348015610a5257600080fd5b506104a760048036036020811015610a6957600080fd5b5035611bb7565b348015610a7c57600080fd5b5061044360048036036040811015610a9357600080fd5b506001600160a01b0381351690602001351515611c4d565b348015610ab757600080fd5b5061044360048036036020811015610ace57600080fd5b50356001600160a01b0316611c89565b348015610aea57600080fd5b5061047e611d1f565b348015610aff57600080fd5b5061044360048036036060811015610b1657600080fd5b50803515159060208101359060400135611d28565b348015610b3757600080fd5b5061047e611d78565b348015610b4c57600080fd5b5061047e60048036036020811015610b6357600080fd5b50356001600160a01b0316611d88565b348015610b7f57600080fd5b5061044360048036036020811015610b9657600080fd5b50356001600160a01b0316611da6565b348015610bb257600080fd5b5061047e60048036036020811015610bc957600080fd5b50356001600160a01b0316611ddb565b348015610be557600080fd5b506104a760048036036040811015610bfc57600080fd5b506001600160a01b0381358116916020013516611df0565b348015610c2057600080fd5b5061044360048036036020811015610c3757600080fd5b50356001600160a01b0316611e1b565b348015610c5357600080fd5b50610550611e35565b348015610c6857600080fd5b5061055060048036036020811015610c7f57600080fd5b5035611e44565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b610d2461177d565b610d2d57600080fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d7c57600080fd5b505afa158015610d90573d6000803e3d6000fd5b505050506040513d6020811015610da657600080fd5b505111610df2576040805162461bcd60e51b81526020600482015260156024820152742737903a37b5b2b739903a37903932b1b7bb32b91760591b604482015290519081900360640190fd5b806001600160a01b031663a9059cbb33836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e4f57600080fd5b505afa158015610e63573d6000803e3d6000fd5b505050506040513d6020811015610e7957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610eca57600080fd5b505af1158015610ede573d6000803e3d6000fd5b505050506040513d6020811015610ef457600080fd5b505050565b600554600090600160a01b900460ff1680610f175750610f1761177d565b80610f3157503360009081526006602052604090205460ff165b610f6c5760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000818152601a602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600c5481565b60175490565b610fe861177d565b610ff157600080fd5b6000471161103b576040805162461bcd60e51b815260206004820152601260248201527127379022aa24103a37903932b1b7bb32b91760711b604482015290519081900360640190fd5b604051600090339047908381818185875af1925050503d806000811461107d576040519150601f19603f3d011682016040523d82523d6000602084013e611082565b606091505b50509050806110d1576040805162461bcd60e51b81526020600482015260166024820152752330b4b632b2103a37903932b1b7bb32b91022aa241760511b604482015290519081900360640190fd5b50565b600b5481565b6000826001600160a01b0381166110f057600080fd5b6001600160a01b0385166000908152601a602090815260408083203384529091529020546000191461119d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601a82528381203382529091529190912054611178918590611f11565b6001600160a01b0386166000908152601a602090815260408083203384529091529020555b6111a8858585611fa8565b50600195945050505050565b6004546001600160a01b031681565b6111cb61177d565b6111d457600080fd5b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b60185460196020527fd2ac945fcc0096878c763e37d6929b78378c1a2defabde8ba7ee5ed1d6e7a5b25461dead60009081527fc73b1d6eda13a615b81c31830292dbbbf5fbb07f472982e223002bd83d5c3dc454909261128392909161127d9190611277906a87b0b4d075b8302fffffff199061210b565b9061210b565b90611ecf565b905090565b600a5481565b600e5481565b61129c61177d565b6112a557600080fd5b6005805460ff60a01b1916600160a01b179055565b60115481565b60025460ff1690565b6112d161177d565b6112da57600080fd5b6010805460ff191693151593909317909255601255601355565b600554600090600160a01b900460ff1680611312575061131261177d565b8061132c57503360009081526006602052604090205460ff165b6113675760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000908152601a602090815260408083206001600160a01b03871684529091529020546113959083611e6e565b336000818152601a602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b336000908152601c602052604090205460ff16151560011461144d5760405162461bcd60e51b81526004018080602001828103825260288152602001806129256028913960400191505060405180910390fd5b42600d55565b600f5481565b60606003805480602002602001604051908101604052809291908181526020018280548015610d1257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611493575050505050905090565b336000908152601c602052604090205460ff161515600114611523576040805162461bcd60e51b815260206004820181905260248201527f4e6f742061757468726f697a656420746f206578656375746520726562617365604482015290519081900360640190fd5b61152b61214d565b60005b6003548110156110d157601b60006003838154811061154957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff161515600114156115ec576003818154811061158857fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b1580156115d357600080fd5b505af11580156115e7573d6000803e3d6000fd5b505050505b60010161152e565b6000611283601854601554611ecf90919063ffffffff16565b601454600160a01b900460ff1681565b61162561177d565b61162e57600080fd5b60088490556009839055600a8290556116478484611e6e565b600b55600c81905560048104600b541061166057600080fd5b50505050565b6018546001600160a01b0382166000908152601960205260408120549091610fce9190611ecf565b61169661177d565b61169f57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b6116f661177d565b6116ff57600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b601c6020526000908152604090205460ff1681565b60165460ff161590565b61174a61177d565b61175357600080fd5b80620f424083028161176157fe5b04600f555050565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d125780601f10610ce757610100808354040283529160200191610d12565b60085481565b6005546001600160a01b031681565b600554600090600160a01b900460ff1680611826575061182661177d565b8061184057503360009081526006602052604090205460ff165b61187b5760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000908152601a602090815260408083206001600160a01b03871684529091529020548083106118cf57336000908152601a602090815260408083206001600160a01b03881684529091528120556118fe565b6118d9818461210b565b336000908152601a602090815260408083206001600160a01b03891684529091529020555b336000818152601a602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61196c61177d565b61197557600080fd5b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6119ab61177d565b6119b457600080fd5b806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119ef57600080fd5b505af1158015611a03573d6000803e3d6000fd5b5050505060005b600354811015611a9b57816001600160a01b031660038281548110611a2b57fe5b6000918252602090912001546001600160a01b03161415611a93576040805162461bcd60e51b815260206004820152601a60248201527f50616972206164647265737320616c7265616479206164646564000000000000604482015290519081900360640190fd5b600101611a0a565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b039093166001600160a01b0319909316831790556000918252601b6020526040909120805460ff19169091179055565b6000826001600160a01b038116611b1957600080fd5b600554600160a01b900460ff1680611b345750611b3461177d565b80611b4e57503360009081526006602052604090205460ff165b611b895760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b611b94338585611fa8565b506001949350505050565b60135481565b60125481565b60095481565b600d5481565b600d54600090820381611bd46201518061127d84620f42406121e4565b90506000611c07620f424061127d84611c01620f424061127d600f546017546121e490919063ffffffff16565b906121e4565b60105490915060ff16151560011415611c4557611c42620f424061127d60125460115410611c3757601254611c3b565b6011545b84906121e4565b90505b949350505050565b611c5561177d565b611c5e57600080fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b611c9161177d565b611c9a57600080fd5b6014546001600160a01b0382811691161415611cfd576040805162461bcd60e51b815260206004820152601a60248201527f526f75746572206164647265737320616c726561647920736574000000000000604482015290519081900360640190fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60105460ff1681565b611d3061177d565b611d3957600080fd5b6014805460ff60a01b1916600160a01b85151502179055611d7082611c01836af8277896582678ac0000006000195b061990611ecf565b601555505050565b600554600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205460ff1690565b611dae61177d565b611db757600080fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b601b6020526000908152604090205460ff1681565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b611e2361177d565b611e2c57600080fd5b6110d18161223d565b6014546001600160a01b031681565b60038181548110611e5457600080fd5b6000918252602090912001546001600160a01b0316905081565b600082820183811015611ec8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000611ec883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122b7565b60008184841115611fa05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f65578181015183820152602001611f4d565b50505050905090810190601f168015611f925780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60165460009060ff1615611fc857611fc184848461231c565b9050611ec8565b6000611fdf601854846121e490919063ffffffff16565b9050611fe96123ae565b15611ff657611ff6612406565b60105460ff161515600114156120195760135460115461201591611e6e565b6011555b6001600160a01b03851660009081526019602052604090205461203c908261210b565b6001600160a01b0386166000908152601960205260408120919091556120628686612773565b61206c5781612077565b6120778686846127ff565b6001600160a01b03861660009081526019602052604090205490915061209d9082611e6e565b6001600160a01b03808716600081815260196020526040902092909255601854908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120ee908590611ecf565b60408051918252519081900360200190a350600195945050505050565b6000611ec883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f11565b600061215842611bb7565b6017549091506121689082611e6e565b60178190556001600160801b031015612187576001600160801b036017555b6017546121a2906af8277896582678ac000000600019611d68565b601855600e81905542600d55620f42406011556017546040517fafae32ce2847c13a56ab802c034c27d3c19f1d61be48c424c5df134145cd44d090600090a250565b6000826121f357506000610fce565b8282028284828161220057fe5b0414611ec85760405162461bcd60e51b81526004018080602001828103825260218152602001806128e16021913960400191505060405180910390fd5b6001600160a01b03811661225057600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836123065760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f65578181015183820152602001611f4d565b50600083858161231257fe5b0495945050505050565b600080612334601854846121e490919063ffffffff16565b6001600160a01b03861660009081526019602052604090205490915061235a908261210b565b6001600160a01b0380871660009081526019602052604080822093909355908616815220546123899082611e6e565b6001600160a01b03851660009081526019602052604090205550600190509392505050565b336000908152601b602052604081205460ff161580156123d1575060165460ff16155b80156123e65750601454600160a01b900460ff165b801561128357505060155430600090815260196020526040902054101590565b6016805460ff191660011790556018543060009081526019602052604081205490916124329190611ecf565b90506000612456600261127d600b5461127d600854876121e490919063ffffffff16565b90506000612464838361210b565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061249857fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156124ec57600080fd5b505afa158015612500573d6000803e3d6000fd5b505050506040513d602081101561251657600080fd5b505181518290600190811061252757fe5b6001600160a01b0392831660209182029290920181019190915260145460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b838110156125c15781810151838201526020016125a9565b505050509050019650505050505050600060405180830381600087803b1580156125ea57600080fd5b505af11580156125fe573d6000803e3d6000fd5b505050506000612617824761210b90919063ffffffff16565b9050600061263d6126346002600854611ecf90919063ffffffff16565b600b549061210b565b9050600061265f600261127d8461127d600854886121e490919063ffffffff16565b9050861561270957601454600480546040805163f305d71960e01b81523093810193909352602483018b905260006044840181905260648401526001600160a01b0391821660848401524260a48401525192169163f305d71991849160c480830192606092919082900301818588803b1580156126db57600080fd5b505af11580156126ef573d6000803e3d6000fd5b50505050506040513d606081101561270657600080fd5b50505b6005546040516000916001600160a01b03169047908381818185875af1925050503d8060008114612756576040519150601f19603f3d011682016040523d82523d6000602084013e61275b565b606091505b50506016805460ff1916905550505050505050505050565b6001600160a01b0382166000908152601b602052604081205460ff16806127b257506001600160a01b0382166000908152601b602052604090205460ff165b8015611ec857506001600160a01b03831660009081526007602052604090205460ff16158015611ec85750506001600160a01b031660009081526007602052604090205460ff1615919050565b600b546001600160a01b0383166000908152601b602052604081205490919060ff1615156001141561283c57600a54612839908290611e6e565b90505b600c546000906128509061127d86856121e4565b3060009081526019602052604090205490915061286d9082611e6e565b306000818152601960205260409020919091556018546001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906128bb908590611ecf565b60408051918252519081900360200190a36128d6848261210b565b969550505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e697469616c20646973746972627574696f6e206e6f742066696e616c697a65642e4e6f742061757468726f697a656420746f206578656375746520746869732066756e6374696f6e2ea2646970667358221220cfa5b583fae8087fd05d9fbb5b60f35867f6610e4ab8b6455287b79474eb04b164736f6c63430007060033
Deployed Bytecode Sourcemap
11923:23291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34823:351;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34823:351:0;-1:-1:-1;;;;;34823:351:0;;:::i;:::-;;29140:286;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29140:286:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13004:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18488:102;;;;;;;;;;;;;:::i;34525:290::-;;;;;;;;;;;;;:::i;12939:58::-;;;;;;;;;;;;;:::i;24118:457::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24118:457:0;;;;;;;;;;;;;;;;;:::i;12136:32::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;12136:32:0;;;;;;;;;;;;;;20524:172;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20524:172:0;;;;;;;;;;:::i;33369:215::-;;;;;;;;;;;;;:::i;12905:27::-;;;;;;;;;;;;;:::i;13107:34::-;;;;;;;;;;;;;:::i;29854:114::-;;;;;;;;;;;;;:::i;13257:45::-;;;;;;;;;;;;;:::i;11755:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32029:325;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32029:325:0;;;;;;;;;;;;;;:::i;28496:439::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28496:439:0;;;;;;;;:::i;18100:247::-;;;;;;;;;;;;;:::i;13148:58::-;;;;;;;;;;;;;:::i;19813:106::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17561:406;;;;;;;;;;;;;:::i;33685:126::-;;;;;;;;;;;;;:::i;13481:30::-;;;;;;;;;;;;;:::i;34082:435::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34082:435:0;;;;;;;;;;;;;;;;;:::i;21515:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21515:138:0;-1:-1:-1;;;;;21515:138:0;;:::i;3290:126::-;;;;;;;;;;;;;:::i;30433:101::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30433:101:0;-1:-1:-1;;;;;30433:101:0;;:::i;14031:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14031:55:0;-1:-1:-1;;;;;14031:55:0;;:::i;33592:85::-;;;;;;;;;;;;;:::i;32649:185::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32649:185:0;;;;;;;:::i;3025:79::-;;;;;;;;;;;;;:::i;3190:92::-;;;;;;;;;;;;;:::i;11660:87::-;;;;;;;;;;;;;:::i;12827:31::-;;;;;;;;;;;;;:::i;12175:40::-;;;;;;;;;;;;;:::i;27349:629::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27349:629:0;;;;;;;;:::i;33819:255::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33819:255:0;;;;;;;;;;:::i;19344:346::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19344:346:0;-1:-1:-1;;;;;19344:346:0;;:::i;18799:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18799:248:0;;;;;;;;:::i;13379:62::-;;;;;;;;;;;;;:::i;13309:63::-;;;;;;;;;;;;;:::i;12865:33::-;;;;;;;;;;;;;:::i;13048:52::-;;;;;;;;;;;;;:::i;15888:869::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15888:869:0;;:::i;20123:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20123:154:0;;;;;;;;;;:::i;28098:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28098:184:0;-1:-1:-1;;;;;28098:184:0;;:::i;13215:35::-;;;;;;;;;;;;;:::i;31488:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31488:230:0;;;;;;;;;;;;;;:::i;12222:39::-;;;;;;;;;;;;;:::i;29600:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29600:113:0;-1:-1:-1;;;;;29600:113:0;;:::i;30141:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30141:105:0;-1:-1:-1;;;;;30141:105:0;;:::i;13978:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13978:46:0;-1:-1:-1;;;;;13978:46:0;;:::i;21048:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21048:192:0;;;;;;;;;;:::i;3424:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3424:109:0;-1:-1:-1;;;;;3424:109:0;;:::i;13450:24::-;;;;;;;;;;;;;:::i;12099:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12099:30:0;;:::i;11569:83::-;11639:5;11632:12;;;;;;;;-1:-1:-1;;11632:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11606:13;;11632:12;;11639:5;;11632:12;;11639:5;11632:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:83;:::o;34823:351::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34978:1:::1;34936:13;-1:-1:-1::0;;;;;34929:31:0::1;;34969:4;34929:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;34929:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34929:46:0;:50:::1;34907:121;;;::::0;;-1:-1:-1;;;34907:121:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34907:121:0;;;;;;;;;;;;;::::1;;35046:13;-1:-1:-1::0;;;;;35039:30:0::1;;35084:10;35116:13;-1:-1:-1::0;;;;;35109:31:0::1;;35149:4;35109:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;35109:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35109:46:0;35039:127:::1;::::0;;-1:-1:-1;;;;;;35039:127:0::1;::::0;;;;;;-1:-1:-1;;;;;35039:127:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;35109:46:::1;::::0;35039:127;;;;;;;-1:-1:-1;35039:127:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;34823:351:0:o;29140:286::-;15470:27;;29276:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29316:10:::1;29298:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;29298:38:0;::::1;::::0;;;;;;;;;;:46;;;29360:36;;;;;;;29298:38;;29316:10;29360:36:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;29414:4:0::1;15648:1;29140:286:::0;;;;:::o;13004:35::-;;;;:::o;18488:102::-;18570:12;;18488:102;:::o;34525:290::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34618:1:::1;34594:21;:25;34586:56;;;::::0;;-1:-1:-1;;;34586:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34586:56:0;;;;;;;;;;;;;::::1;;34672:82;::::0;34654:12:::1;::::0;34680:10:::1;::::0;34718:21:::1;::::0;34654:12;34672:82;34654:12;34672:82;34718:21;34680:10;34672:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34653:101;;;34773:7;34765:42;;;::::0;;-1:-1:-1;;;34765:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34765:42:0;;;;;;;;;;;;;::::1;;3173:1;34525:290::o:0;12939:58::-;;;;:::o;24118:457::-;24261:4;24248:2;-1:-1:-1;;;;;15720:18:0;;15712:27;;;;;;-1:-1:-1;;;;;24282:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;24306:10:::1;24282:35:::0;;;;;;;;-1:-1:-1;;24282:50:0::1;24278:225;;24387:104;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;24387:104:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;24387:23:0;::::1;-1:-1:-1::0;24387:23:0;;;:17:::1;:23:::0;;;;;24429:10:::1;24387:67:::0;;;;;;;;;;:104:::1;::::0;24459:5;;24387:71:::1;:104::i;:::-;-1:-1:-1::0;;;;;24349:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;24373:10:::1;24349:35:::0;;;;;;;:142;24278:225:::1;24515:30;24529:4;24535:2;24539:5;24515:13;:30::i;:::-;-1:-1:-1::0;24563:4:0::1;::::0;24118:457;-1:-1:-1;;;;;24118:457:0:o;12136:32::-;;;-1:-1:-1;;;;;12136:32:0;;:::o;20524:172::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;20645:33:0;;;::::1;;::::0;;;:23:::1;:33;::::0;;;;:43;;-1:-1:-1;;20645:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20524:172::o;33369:215::-;33545:16;;33502:12;:18;;;;12546:42;33422:7;33478:18;;;;;33422:7;;33462:114;;33545:16;;33463:58;;33502:18;33463:34;;-1:-1:-1;;13652:54:0;33463:14;:34::i;:::-;:38;;:58::i;:::-;33462:64;;:114::i;:::-;33442:134;;33369:215;:::o;12905:27::-;;;;:::o;13107:34::-;;;;:::o;29854:114::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;29926:27:::1;:34:::0;;-1:-1:-1;;;;29926:34:0::1;-1:-1:-1::0;;;29926:34:0::1;::::0;;29854:114::o;13257:45::-;;;;:::o;11755:83::-;11821:9;;;;11755:83;:::o;32029:325::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;32199:16:::1;:27:::0;;-1:-1:-1;;32199:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;32237:22:::1;:48:::0;32296:23:::1;:50:::0;32029:325::o;28496:439::-;15470:27;;28629:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28710:10:::1;28692:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;28692:62:0;::::1;::::0;;;;;;;;:78:::1;::::0;28759:10;28692:66:::1;:78::i;:::-;28669:10;28651:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;28651:38:0;::::1;::::0;;;;;;;;;;:119;;;28786;;;;;;28651:38;;28786:119:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;28923:4:0::1;28496:439:::0;;;;:::o;18100:247::-;18202:10;18178:35;;;;:23;:35;;;;;;;;:43;;:35;:43;18156:133;;;;-1:-1:-1;;;18156:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18324:15;18302:19;:37;18100:247::o;13148:58::-;;;;:::o;19813:106::-;19862:16;19898:13;19891:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19891:20:0;;;;;;;;;;;;;;;;;;;;;;19813:106;:::o;17561:406::-;17652:10;17628:35;;;;:23;:35;;;;;;;;:43;;:35;:43;17606:125;;;;;-1:-1:-1;;;17606:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17744:9;:7;:9::i;:::-;17771;17766:194;17790:13;:20;17786:24;;17766:194;;;17836:14;:32;17851:13;17865:1;17851:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17851:16:0;17836:32;;;;;;;;;;;;;;;:40;;17851:16;17836:40;17832:117;;;17909:13;17923:1;17909:16;;;;;;;;;;;;;;;;;17897:36;;;-1:-1:-1;;;;;;17897:36:0;;;;-1:-1:-1;;;;;17909:16:0;;;;17897:34;;:36;;;;;;;;;;17909:16;;17897:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17832:117;17812:3;;17766:194;;33685:126;33738:7;33765:38;33786:16;;33765;;:20;;:38;;;;:::i;13481:30::-;;;-1:-1:-1;;;13481:30:0;;;;;:::o;34082:435::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34263:12:::1;:28:::0;;;34302:14:::1;:32:::0;;;34345:7:::1;:18:::0;;;34385:32:::1;34278:13:::0;34319:15;34385:16:::1;:32::i;:::-;34374:8;:43:::0;34428:14:::1;:32:::0;;;34507:1:::1;34445:15:::0;34490:18:::1;34479:8;;:29;34471:38;;;::::0;::::1;;34082:435:::0;;;;:::o;21515:138::-;21628:16;;-1:-1:-1;;;;;21606:17:0;;21579:7;21606:17;;;:12;:17;;;;;;21579:7;;21606:39;;:17;:21;:39::i;3290:126::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;3371:6:::1;::::0;3352:26:::1;::::0;3371:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;3371:6:0::1;::::0;3352:26:::1;::::0;;;::::1;3389:6;:19:::0;;-1:-1:-1;;;;;;3389:19:0::1;::::0;;3290:126::o;30433:101::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;30500:19:0::1;;::::0;;;:12:::1;:19;::::0;;;;:26;;-1:-1:-1;;30500:26:0::1;30522:4;30500:26;::::0;;30433:101::o;14031:55::-;;;;;;;;;;;;;;;:::o;33592:85::-;33663:6;;;;33662:7;33592:85;:::o;32649:185::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;32817:9:::1;12398:7;32791:11;:22;32790:36;;;;;;32769:18;:57:::0;-1:-1:-1;;32649:185:0:o;3025:79::-;3090:6;;;;;-1:-1:-1;;;;;3090:6:0;;3025:79::o;3190:92::-;3268:6;;;;;-1:-1:-1;;;;;3268:6:0;3254:10;:20;;3190:92::o;11660:87::-;11732:7;11725:14;;;;;;;;-1:-1:-1;;11725:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11699:13;;11725:14;;11732:7;;11725:14;;11732:7;11725:14;;;;;;;;;;;;;;;;;;;;;;;;12827:31;;;;:::o;12175:40::-;;;-1:-1:-1;;;;;12175:40:0;;:::o;27349:629::-;15470:27;;27487:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27546:10:::1;27509:16;27528:29:::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27528:38:0;::::1;::::0;;;;;;;;27581:27;;::::1;27577:237;;27643:10;27666:1;27625:29:::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27625:38:0;::::1;::::0;;;;;;;:42;27577:237:::1;;;27741:61;:8:::0;27772:15;27741:12:::1;:61::i;:::-;27718:10;27700:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27700:38:0;::::1;::::0;;;;;;;:102;27577:237:::1;27852:10;27899:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27829:119:0;::::1;27899:38:::0;;;;;;;;;;;27829:119;;;;;;;;;27852:10;27829:119:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;27966:4:0::1;::::0;27349:629;-1:-1:-1;;;27349:629:0:o;33819:255::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;33963:17:::1;:38:::0;;-1:-1:-1;;;;;33963:38:0;;::::1;-1:-1:-1::0;;;;;;33963:38:0;;::::1;;::::0;;;34012:25:::1;:54:::0;;;;;::::1;::::0;::::1;;::::0;;33819:255::o;19344:346::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;19426:8:::1;-1:-1:-1::0;;;;;19414:26:0::1;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19460:9;19455:145;19479:13;:20:::0;19475:24;::::1;19455:145;;;19549:8;-1:-1:-1::0;;;;;19529:28:0::1;:13;19543:1;19529:16;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19529:16:0::1;:28;;19521:67;;;::::0;;-1:-1:-1;;;19521:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;19501:3;;19455:145;;;-1:-1:-1::0;19612:13:0::1;:28:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;19612:28:0;;::::1;-1:-1:-1::0;;;;;;19612:28:0;;::::1;::::0;::::1;::::0;;-1:-1:-1;19651:24:0;;;:14:::1;19612:28;19651:24:::0;;;;;:31;;-1:-1:-1;;19651:31:0::1;::::0;;::::1;::::0;;19344:346::o;18799:248::-;18959:4;18904:2;-1:-1:-1;;;;;15720:18:0;;15712:27;;;;;;15470::::1;::::0;-1:-1:-1;;;15470:27:0;::::1;;;::::0;:57:::1;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1::0;15563:10:0::1;15548:26;::::0;;;:14:::1;:26;::::0;;;;;::::1;;15470:104;15448:189;;;;-1:-1:-1::0;;;15448:189:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18981:36:::2;18995:10;19007:2;19011:5;18981:13;:36::i;:::-;-1:-1:-1::0;19035:4:0::2;::::0;18799:248;-1:-1:-1;;;;18799:248:0:o;13379:62::-;;;;:::o;13309:63::-;;;;:::o;12865:33::-;;;;:::o;13048:52::-;;;;:::o;15888:869::-;16016:19;;15952:7;;16003:32;;15952:7;16093:83;12719:5;16093:48;16003:32;12398:7;16093:38;:48::i;:83::-;16048:128;;16189:23;16215:160;12398:7;16215:132;16312:34;16215:78;12398:7;16215:50;16246:18;;16215:12;;:30;;:50;;;;:::i;:78::-;:96;;:132::i;:160::-;16392:16;;16189:186;;-1:-1:-1;16392:16:0;;:24;;:16;:24;16388:327;;;16451:252;12398:7;16451:220;16533:22;;16511:19;;:44;:141;;16630:22;;16511:141;;;16583:19;;16511:141;16451:15;;:37;:220::i;:252::-;16433:270;;16388:327;16734:15;15888:869;-1:-1:-1;;;;15888:869:0:o;20123:154::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;20235:24:0;;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:34;;-1:-1:-1;;20235:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20123:154::o;28098:184::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;28184:6:::1;::::0;-1:-1:-1;;;;;28176:27:0;;::::1;28184:6:::0;::::1;28176:27;;28168:66;;;::::0;;-1:-1:-1;;;28168:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28245:6;:29:::0;;-1:-1:-1;;;;;;28245:29:0::1;-1:-1:-1::0;;;;;28245:29:0;;;::::1;::::0;;;::::1;::::0;;28098:184::o;13215:35::-;;;;;;:::o;31488:230::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;31626:11:::1;:22:::0;;-1:-1:-1;;;;31626:22:0::1;-1:-1:-1::0;;;31626:22:0;::::1;;;;::::0;;31678:32:::1;31705:4:::0;31678:22:::1;31693:6:::0;12792:26;-1:-1:-1;;13667:38:0::1;;13652:54:::0;;31678:14:::1;:22::i;:32::-;31659:16;:51:::0;-1:-1:-1;;;31488:230:0:o;12222:39::-;;;-1:-1:-1;;;12222:39:0;;;;;:::o;29600:113::-;-1:-1:-1;;;;;29686:19:0;29662:4;29686:19;;;:12;:19;;;;;;;;;29600:113::o;30141:105::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;30210:21:0::1;;::::0;;;:14:::1;:21;::::0;;;;:28;;-1:-1:-1;;30210:28:0::1;30234:4;30210:28;::::0;;30141:105::o;13978:46::-;;;;;;;;;;;;;;;:::o;21048:192::-;-1:-1:-1;;;;;21199:24:0;;;21167:7;21199:24;;;:17;:24;;;;;;;;:33;;;;;;;;;;;;;21048:192::o;3424:109::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;3497:28:::1;3516:8;3497:18;:28::i;13450:24::-:0;;;-1:-1:-1;;;;;13450:24:0;;:::o;12099:30::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12099:30:0;;-1:-1:-1;12099:30:0;:::o;1337:181::-;1395:7;1427:5;;;1451:6;;;;1443:46;;;;;-1:-1:-1;;;1443:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1509:1;1337:181;-1:-1:-1;;;1337:181:0:o;2162:132::-;2220:7;2247:39;2251:1;2254;2247:39;;;;;;;;;;;;;;;;;:3;:39::i;1670:226::-;1790:7;1826:12;1818:6;;;;1810:29;;;;-1:-1:-1;;;1810:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1862:5:0;;;1670:226::o;22762:910::-;22902:6;;22881:4;;22902:6;;22898:80;;;22932:34;22947:6;22955:2;22959:6;22932:14;:34::i;:::-;22925:41;;;;22898:80;22990:17;23010:28;23021:16;;23010:6;:10;;:28;;;;:::i;:::-;22990:48;;23055:17;:15;:17::i;:::-;23051:61;;;23089:11;:9;:11::i;:::-;23128:16;;;;:24;;:16;:24;23124:159;;;23233:23;;23191:19;;:80;;:23;:80::i;:::-;23169:19;:102;23124:159;-1:-1:-1;;;;;23318:20:0;;;;;;:12;:20;;;;;;:35;;23343:9;23318:24;:35::i;:::-;-1:-1:-1;;;;;23295:20:0;;;;;;:12;:20;;;;;:58;;;;23394:26;23308:6;23417:2;23394:14;:26::i;:::-;:98;;23483:9;23394:98;;;23436:31;23445:6;23453:2;23457:9;23436:8;:31::i;:::-;-1:-1:-1;;;;;23522:16:0;;;;;;:12;:16;;;;;;23366:126;;-1:-1:-1;23522:39:0;;23366:126;23522:20;:39::i;:::-;-1:-1:-1;;;;;23503:16:0;;;;;;;:12;:16;;;;;:58;;;;23622:16;;23579:61;;;;;;23600:39;;:17;;:21;:39::i;:::-;23579:61;;;;;;;;;;;;;;;-1:-1:-1;23660:4:0;;22762:910;-1:-1:-1;;;;;22762:910:0:o;1526:136::-;1584:7;1611:43;1615:1;1618;1611:43;;;;;;;;;;;;;;;;;:3;:43::i;16920:487::-;16959:19;16981:30;16995:15;16981:13;:30::i;:::-;17037:12;;16959:52;;-1:-1:-1;17037:38:0;;16959:52;17037:16;:38::i;:::-;17022:12;:53;;;-1:-1:-1;;;;;;17088:83:0;;;-1:-1:-1;;;;;17134:12:0;:25;17088:83;17217:12;;17202:28;;12792:26;-1:-1:-1;;13667:38:0;;17202:28;17183:16;:47;17243:15;:29;;;17305:15;17283:19;:37;12398:7;17331:19;:30;17386:12;;17379:20;;;;-1:-1:-1;;17379:20:0;16920:487;:::o;1904:250::-;1962:7;1986:6;1982:47;;-1:-1:-1;2016:1:0;2009:8;;1982:47;2053:5;;;2057:1;2053;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3541:187;-1:-1:-1;;;;;3615:22:0;;3607:31;;;;;;3675:6;;3654:38;;-1:-1:-1;;;;;3654:38:0;;;;3675:6;;;;;3654:38;;;;;3703:6;:17;;-1:-1:-1;;;;;3703:17:0;;;;;-1:-1:-1;;;;;;3703:17:0;;;;;;;;;3541:187::o;2302:225::-;2422:7;2457:12;2450:5;2442:28;;;;-1:-1:-1;;;2442:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:9;2497:1;2493;:5;;;;;;;2302:225;-1:-1:-1;;;;;2302:225:0:o;21991:339::-;22109:4;22126:17;22146:28;22157:16;;22146:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;22206:18:0;;;;;;:12;:18;;;;;;22126:48;;-1:-1:-1;22206:33:0;;22126:48;22206:22;:33::i;:::-;-1:-1:-1;;;;;22185:18:0;;;;;;;:12;:18;;;;;;:54;;;;22269:16;;;;;;;:31;;22290:9;22269:20;:31::i;:::-;-1:-1:-1;;;;;22250:16:0;;;;;;:12;:16;;;;;:50;-1:-1:-1;22318:4:0;;-1:-1:-1;21991:339:0;;;;;:::o;32983:246::-;33085:10;33033:4;33070:26;;;:14;:26;;;;;;;;:35;;;:59;;-1:-1:-1;33123:6:0;;;;33122:7;33070:59;:87;;;;-1:-1:-1;33146:11:0;;-1:-1:-1;;;33146:11:0;;;;33070:87;:151;;;;-1:-1:-1;;33205:16:0;;33195:4;33174:27;;;;:12;:27;;;;;;:47;;;32983:246::o;24762:1466::-;15336:6;:13;;-1:-1:-1;;15336:13:0;15345:4;15336:13;;;24893:16:::1;::::0;24868:4:::1;15336:6:::0;24847:27;;;:12:::1;:27;::::0;;;;;15336:6;;24847:73:::1;::::0;:27;:31:::1;:73::i;:::-;24816:104;;24931:23;24957:101;25056:1;24957:80;25028:8;;24957:52;24996:12;;24957:20;:38;;:52;;;;:::i;:101::-;24931:127:::0;-1:-1:-1;25069:20:0::1;25092:41;:20:::0;24931:127;25092:24:::1;:41::i;:::-;25170:16;::::0;;25184:1:::1;25170:16:::0;;;;;::::1;::::0;;25069:64;;-1:-1:-1;25146:21:0::1;::::0;25170:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25170:16:0::1;25146:40;;25215:4;25197;25202:1;25197:7;;;;;;;;-1:-1:-1::0;;;;;25197:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25241:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;25241:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;25197:7;;25241:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25241:13:0;25231:7;;:4;;25236:1:::1;::::0;25231:7;::::1;;;;;-1:-1:-1::0;;;;;25231:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25325:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;25325:188:0;;::::1;::::0;::::1;::::0;;;25267:21:::1;25325:188:::0;;;;;;25467:4:::1;25325:188:::0;;;;;;25487:15:::1;25325:188:::0;;;;;;;;;;;;;;;;;;;;;25291:21:::1;::::0;25325:6;;;::::1;::::0;:57:::1;::::0;25397:12;;25267:21;;25440:4;;25325:188;;;;;;;;;;::::1;::::0;::::1;::::0;;;25267:21;25325:188:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25526:17;25546:40;25572:13;25546:21;:25;;:40;;;;:::i;:::-;25526:60;;25597:19;25619:33;25632:19;25649:1;25632:12;;:16;;:19;;;;:::i;:::-;25619:8;::::0;;:12:::1;:33::i;:::-;25597:55;;25665:26;25694:93;25785:1;25694:72;25754:11;25694:41;25722:12;;25694:9;:27;;:41;;;;:::i;:93::-;25665:122:::0;-1:-1:-1;25804:19:0;;25800:292:::1;;25840:6;::::0;26014:17:::1;::::0;;25840:240:::1;::::0;;-1:-1:-1;;;25840:240:0;;25916:4:::1;25840:240:::0;;::::1;::::0;;;;;;;;;;:6:::1;:240:::0;;;;;;;;;;-1:-1:-1;;;;;26014:17:0;;::::1;25840:240:::0;;;;26050:15:::1;25840:240:::0;;;;;:6;::::1;::::0;:22:::1;::::0;25870:18;;25840:240;;;;;::::1;::::0;;;;;;;;25870:18;25840:6;:240;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;25800:292:0::1;26131:25;::::0;26123:97:::1;::::0;26105:12:::1;::::0;-1:-1:-1;;;;;26131:25:0::1;::::0;26184:21:::1;::::0;26105:12;26123:97;26105:12;26123:97;26184:21;26131:25;26123:97:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;15372:6:0;:14;;-1:-1:-1;;15372:14:0;;;-1:-1:-1;;;;;;;;;;24762:1466:0:o;30963:253::-;-1:-1:-1;;;;;31106:20:0;;31063:4;31106:20;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;31130:18:0;;;;;;:14;:18;;;;;;;;31106:42;31105:103;;;;-1:-1:-1;;;;;;31168:18:0;;;;;;:12;:18;;;;;;;;31167:19;:40;;;;-1:-1:-1;;;;;;;31191:16:0;;;;;:12;:16;;;;;;;;31190:17;;30963:253;-1:-1:-1;30963:253:0:o;26572:560::-;26729:8;;-1:-1:-1;;;;;26752:18:0;;26689:7;26752:18;;;:14;:18;;;;;;26689:7;;26729:8;26752:18;;:26;;:18;:26;26748:66;;;26806:7;;26792:22;;:9;;:13;:22::i;:::-;26780:34;;26748:66;26876:14;;26827:17;;26847:44;;:24;:9;26861;26847:13;:24::i;:44::-;26955:4;26934:27;;;;:12;:27;;;;;;26827:64;;-1:-1:-1;26934:66:0;;26827:64;26934:31;:66::i;:::-;26925:4;26904:27;;;;:12;:27;;;;;:96;;;;27062:16;;-1:-1:-1;;;;;27016:64:0;;;;;27048:31;;:9;;:13;:31::i;:::-;27016:64;;;;;;;;;;;;;;;27100:24;:9;27114;27100:13;:24::i;:::-;27093:31;26572:560;-1:-1:-1;;;;;;26572:560:0:o
Swarm Source
ipfs://cfa5b583fae8087fd05d9fbb5b60f35867f6610e4ab8b6455287b79474eb04b1
Loading...
Loading
Loading...
Loading
OVERVIEW
The Phenix Finance token at a base offers an extremely easy reward system via their token mechanism.Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.