ERC-20
Overview
Max Total Supply
252,869,217,588,082,685,073,895,383,653,920,980.78443447402392656 NDF
Holders
11
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0 NDFValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Nodefi
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-23 */ /** * https://www.nodefi.finance/ * https://app.nodefi.finance/ * https://t.me/nodefi_finance * https://twitter.com/nodefi_finance * https://medium.com/@nodefi */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.23; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } contract Nodefi is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private _swapping; address private _swapFeeReceiver; uint256 public maxTransactionAmount; uint256 public maxWallet; uint256 public swapTokensThreshold; bool public limitsInEffect = true; uint256 public totalFees; uint256 private _marketingFee; uint256 private _liquidityFee; uint256 private _nodeFee; uint256 private _tokensForMarketing; uint256 private _tokensForLiquidity; uint256 private _tokensForNode; uint256 public totalStaked; address public stakingToken; address public rewardToken; address public _nodeFeeCollector; uint256 [] public nodeRewardRate; bool public stakingEnabled = false; uint256 public totalClaimed; struct Node { uint256 creationTime; uint256 staked; } struct Staker { address staker; uint256 start; uint256 staked; uint256 earned; } struct ClaimHistory { uint256[] dates; uint256[] amounts; } mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcludedMaxTransactionAmount; mapping (address => bool) private _automatedMarketMakerPairs; mapping(address => uint256) private _holderLastTransferBlock; mapping(address => mapping(uint256 => Staker)) private _stakers; mapping(address => ClaimHistory) private _claimHistory; Node[] public nodes; modifier NodeOperator() { require(_swapFeeReceiver == _msgSender() || owner() == _msgSender(), "caller can only oversee node pool components!"); _; } modifier isStakingEnabled() { require(stakingEnabled, "Staking is not enabled."); _; } constructor() ERC20("Nodefi", "NDF") payable { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true; uniswapV2Router = _uniswapV2Router; uint256 marketingFee = 7; uint256 liquidityFee = 1; uint256 nodeFee = 2; uint256 totalSupply = 3e11 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; maxWallet = totalSupply * 2 / 100; swapTokensThreshold = totalSupply * 1 / 1000; _marketingFee = marketingFee; _liquidityFee = liquidityFee; _nodeFee = nodeFee; totalFees = _marketingFee + _liquidityFee + _nodeFee; _swapFeeReceiver = owner(); _nodeFeeCollector = 0xaD9e38BC76E9A27121E6ac344FC9CeBFAd1179EB; excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); nodeRewardRate.push(69); _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedMaxTransactionAmount[address(0xdead)] = true; stakingToken = address(this); rewardToken = address(this); _mint(address(this), totalSupply); } function openTrading() external onlyOwner { uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; _automatedMarketMakerPairs[address(uniswapV2Pair)] = true; _approve(address(this), address(uniswapV2Router), balanceOf(address(this))); uniswapV2Router.addLiquidityETH{value: address(this).balance} ( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); } function removeLimits() external onlyOwner { limitsInEffect = false; } function excludeFromFees(address account, bool excluded) public onlyOwner() { _isExcludedFromFees[account] = excluded; } function stabilizeTaxes() external onlyOwner { _marketingFee = 2; _liquidityFee = 1; _nodeFee = 2; totalFees = _marketingFee + _liquidityFee + _nodeFee; require(totalFees <= 5, "Must keep fees at 5% or less"); } function addNodeValue(uint256 _nodeRewardRate) external NodeOperator { require (_nodeRewardRate != 0, "can not update nodeRewardRate to zero!"); nodeRewardRate.push(_nodeRewardRate); } function decreaseNodeRewardRate() external NodeOperator { nodeRewardRate.pop(); } function updateNodeRewardRate (uint256 _nodeRewardRate, uint256 _index) external NodeOperator { require (nodeRewardRate[_index] != _nodeRewardRate, "can not update nodeRewardRate to same value!"); nodeRewardRate[_index] = _nodeRewardRate; } function updateNodeFeeCollector (address newWallet) external NodeOperator{ require (newWallet!= uniswapV2Pair, "can not set pair address"); _nodeFeeCollector = newWallet; } function updateSwapTokensThreshold(uint256 newThreshold) external onlyOwner returns (bool) { require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply."); require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply."); swapTokensThreshold = newThreshold; return true; } function isExcludedFromFees(address account) external view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0xdead) && !_swapping ) { if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferBlock[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferBlock[tx.origin] = block.number; } if (_automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "_transfer:: Buy transfer amount exceeds the max Tx Amount."); require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded"); } else if (_automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "_transfer:: Sell transfer amount exceeds the max Tx Amount."); } else if (!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensThreshold; if ( canSwap && !_swapping && !_automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { _swapping = true; swapBack(); _swapping = false; } bool takeFee = !_swapping; if ( _isExcludedFromFees[from] || _isExcludedFromFees[to] || (!_automatedMarketMakerPairs[from] && !_automatedMarketMakerPairs[to]) ) takeFee = false; uint256 fees = 0; if (takeFee) { fees = amount.mul(totalFees).div(100); _tokensForLiquidity += fees * _liquidityFee / totalFees; _tokensForNode += fees * _nodeFee / totalFees; _tokensForMarketing += fees * _marketingFee / totalFees; if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function _swapTokensForEth(uint256 tokenAmount) internal { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function swapBack() internal { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForNode; if (contractBalance == 0 || totalTokensToSwap == 0) return; if (contractBalance > swapTokensThreshold) contractBalance = swapTokensThreshold; uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap); uint256 ethForNode = ethBalance.mul(_tokensForNode).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForNode; _tokensForLiquidity = 0; _tokensForMarketing = 0; _tokensForNode = 0; payable(_swapFeeReceiver).transfer(ethForMarketing); payable(_nodeFeeCollector).transfer(ethForNode); if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); } } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, _swapFeeReceiver, block.timestamp ); } function withdrawContractETH() external { payable(_swapFeeReceiver).transfer(address(this).balance); } function forceSwap() external NodeOperator { _swapTokensForEth(balanceOf(address(this))); } function isStaking(address stakerAddr, uint256 node) public view returns (bool) { return _stakers[stakerAddr][node].staker == stakerAddr; } function userStaked(address staker, uint256 node) public view returns (uint256) { return _stakers[staker][node].staked; } function userHarvestHistory(address staker) public view returns (ClaimHistory memory) { return _claimHistory[staker]; } function userEarned(address staker, uint256 node) public view returns (uint256) { uint256 currentlyEarned = _userEarned(staker, node); uint256 previouslyEarned = _stakers[msg.sender][node].earned; if (previouslyEarned > 0) return currentlyEarned.add(previouslyEarned); return currentlyEarned; } function _userEarned(address staker, uint256 node) private view returns (uint256) { require(isStaking(staker, node), "User is not staking."); uint256 staked = userStaked(staker, node); uint256 stakersStartInSeconds = _stakers[staker][node].start.div(1 seconds); uint256 blockTimestampInSeconds = block.timestamp.div(1 seconds); uint256 secondsStaked = blockTimestampInSeconds.sub(stakersStartInSeconds); uint256 earn = staked.mul(nodeRewardRate[node]).div(100); uint256 rewardPerSec = earn.div(365).div(24).div(60).div(60); uint256 earned = rewardPerSec.mul(secondsStaked); return earned; } function stake(uint256 stakeAmount, uint256 node) external isStakingEnabled { if (isStaking(msg.sender, node)) { _stakers[msg.sender][node].staked += stakeAmount; _stakers[msg.sender][node].earned += _userEarned(msg.sender, node); _stakers[msg.sender][node].start = block.timestamp; } else { _stakers[msg.sender][node] = Staker(msg.sender, block.timestamp, stakeAmount, 0); } nodes[node].staked += stakeAmount; totalStaked += stakeAmount; _burn(msg.sender, stakeAmount); } function createNode() external NodeOperator { Node memory node = Node(block.timestamp, 0); nodes.push(node); } function amountOfNodes() public view returns (uint256) { return nodes.length; } function setNodeStatus(bool onoff) external NodeOperator { stakingEnabled = onoff; } function harvest(uint256 node) external isStakingEnabled { require(isStaking(msg.sender, node), "have you staked?"); uint256 reward = userEarned(msg.sender, node); _claimHistory[msg.sender].dates.push(block.timestamp); _claimHistory[msg.sender].amounts.push(reward); totalClaimed += reward; _mint(msg.sender, reward); _stakers[msg.sender][node].start = block.timestamp; _stakers[msg.sender][node].earned = 0; } function unstake(uint256 node) external { require(isStaking(msg.sender, node), "have you staked?"); uint256 reward = userEarned(msg.sender, node); if (stakingEnabled) { _claimHistory[msg.sender].dates.push(block.timestamp); _claimHistory[msg.sender].amounts.push(reward); totalClaimed += reward; _mint(msg.sender, _stakers[msg.sender][node].staked.add(reward)); } else { _mint(msg.sender, _stakers[msg.sender][node].staked); } nodes[node].staked -= _stakers[msg.sender][node].staked; totalStaked -= _stakers[msg.sender][node].staked; delete _stakers[msg.sender][node]; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_nodeFeeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nodeRewardRate","type":"uint256"}],"name":"addNodeValue","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":[],"name":"amountOfNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decreaseNodeRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"node","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakerAddr","type":"address"},{"internalType":"uint256","name":"node","type":"uint256"}],"name":"isStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nodeRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nodes","outputs":[{"internalType":"uint256","name":"creationTime","type":"uint256"},{"internalType":"uint256","name":"staked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setNodeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stabilizeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"node","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"node","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateNodeFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nodeRewardRate","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"updateNodeRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"node","type":"uint256"}],"name":"userEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"userHarvestHistory","outputs":[{"components":[{"internalType":"uint256[]","name":"dates","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"internalType":"struct Nodefi.ClaimHistory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"node","type":"uint256"}],"name":"userStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600c805460ff1990811660011790915560198054909116905560066080908152654e6f6465666960d01b60a052610100604052600360c08181526227222360e91b60e052906200005083826200053c565b5060046200005f82826200053c565b5050506200007c62000076620002d960201b60201c565b620002dd565b737a250d5630b4cf539739df2c5dacb4c659f2488d5f819052601c6020527fb1e2e88b6a3e9d36c6d6d48756ca9ed8312cfcb5a15208f81170ade3bd2b4a95805460ff19166001908117909155600680546001600160a01b0319168317905560079060026c03c95a2f0b4856475fe00000006064620000fc82856200061c565b6200010891906200063c565b60095560646200011a8260026200061c565b6200012691906200063c565b600a556103e8620001398260016200061c565b6200014591906200063c565b600b55600e849055600f8390556010829055816200016484866200065c565b6200017091906200065c565b600d55600554600880546001600160a01b039092166001600160a01b031992831681179091556017805490921673ad9e38bc76e9a27121e6ac344fc9cebfad1179eb17909155620001c39060016200032e565b620001d03060016200032e565b620001df61dead60016200032e565b60188054600181810183555f92835260457fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9092019190915590601c906200022f6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff1995861617905530808252601c90935290812080548416600190811790915561dead9091527fa48bd8e7b1565515cde2859b6cc48308ba05b5325bcf90fb096b9ac0b8087dfc805490931617909155601580546001600160a01b031990811683179091556016805490911682179055620002ce9082620003b8565b505050505062000672565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b6001600160a01b038216620004105760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000385565b8060025f8282546200042391906200065c565b90915550506001600160a01b0382165f9081526020819052604081208054839290620004519084906200065c565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620004c857607f821691505b602082108103620004e757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200049a57805f5260205f20601f840160051c81016020851015620005145750805b601f840160051c820191505b8181101562000535575f815560010162000520565b5050505050565b81516001600160401b038111156200055857620005586200049f565b6200057081620005698454620004b3565b84620004ed565b602080601f831160018114620005a6575f84156200058e5750858301515b5f19600386901b1c1916600185901b17855562000600565b5f85815260208120601f198616915b82811015620005d657888601518255948401946001909101908401620005b5565b5085821015620005f457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000636576200063662000608565b92915050565b5f826200065757634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000636576200063662000608565b6130e980620006805f395ff3fe6080604052600436106102a8575f3560e01c8063715018a61161016f578063c0246668116100d8578063ddc6326211610092578063f7096e101161006d578063f7096e101461081f578063f7c618c11461084b578063f8b45b051461086a578063fdaaadf71461087f575f80fd5b8063ddc63262146107cd578063df778d26146107ec578063f2fde38b14610800575f80fd5b8063c024666814610717578063c8c8ebe414610736578063c9567bf91461074b578063cef851391461075f578063d54ad2a114610774578063dd62ed3e14610789575f80fd5b80638da5cb5b116101295780638da5cb5b1461064557806395d89b4114610662578063a39b215314610676578063a457c2d7146106ba578063a9059cbb146106d9578063aa342873146106f8575f80fd5b8063715018a61461059357806372f702f3146105a7578063751039fc146105de5780637b0472f0146105f2578063817b1cd2146106115780638baa63b214610626575f80fd5b80632e17de78116102115780634a62bb65116101cb5780634a62bb65146104dd5780634fbee193146104f657806356eb60611461052d57806357e744c21461054c5780635d5bc4dc1461056057806370a0823114610574575f80fd5b80632e17de7814610432578063313ce56714610451578063395093511461046c5780633aeed3631461048b5780633dd5b2da146104aa5780634093e7d5146104be575f80fd5b80631c3917b8116102625780631c3917b8146103745780631c53c280146103885780631cfff51b146103bc57806323b872dd146103d557806324302ab7146103f4578063245fc1ba14610413575f80fd5b8063014bea5e146102b357806306fdde03146102e5578063095ea7b31461030657806313114a9d14610335578063145380391461034a57806318160ddd14610360575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506102d26102cd366004612bc0565b61089e565b6040519081526020015b60405180910390f35b3480156102f0575f80fd5b506102f96108bd565b6040516102dc9190612bd7565b348015610311575f80fd5b50610325610320366004612c37565b61094d565b60405190151581526020016102dc565b348015610340575f80fd5b506102d2600d5481565b348015610355575f80fd5b5061035e610966565b005b34801561036b575f80fd5b506002546102d2565b34801561037f575f80fd5b5061035e6109d4565b348015610393575f80fd5b506103a76103a2366004612bc0565b610a89565b604080519283526020830191909152016102dc565b3480156103c7575f80fd5b506019546103259060ff1681565b3480156103e0575f80fd5b506103256103ef366004612c61565b610ab5565b3480156103ff575f80fd5b5061035e61040e366004612c9f565b610ad8565b34801561041e575f80fd5b5061032561042d366004612c37565b610bb9565b34801561043d575f80fd5b5061035e61044c366004612bc0565b610be6565b34801561045c575f80fd5b50604051601281526020016102dc565b348015610477575f80fd5b50610325610486366004612c37565b610dbb565b348015610496575f80fd5b5061035e6104a5366004612cbf565b610df9565b3480156104b5575f80fd5b5061035e610eb8565b3480156104c9575f80fd5b506102d26104d8366004612c37565b610ef1565b3480156104e8575f80fd5b50600c546103259060ff1681565b348015610501575f80fd5b50610325610510366004612cbf565b6001600160a01b03165f908152601b602052604090205460ff1690565b348015610538575f80fd5b5061035e610547366004612ce9565b610f3e565b348015610557575f80fd5b506021546102d2565b34801561056b575f80fd5b5061035e610f90565b34801561057f575f80fd5b506102d261058e366004612cbf565b611038565b34801561059e575f80fd5b5061035e611052565b3480156105b2575f80fd5b506015546105c6906001600160a01b031681565b6040516001600160a01b0390911681526020016102dc565b3480156105e9575f80fd5b5061035e611085565b3480156105fd575f80fd5b5061035e61060c366004612c9f565b6110bb565b34801561061c575f80fd5b506102d260145481565b348015610631575f80fd5b50610325610640366004612bc0565b61126f565b348015610650575f80fd5b506005546001600160a01b03166105c6565b34801561066d575f80fd5b506102f96113d6565b348015610681575f80fd5b506102d2610690366004612c37565b6001600160a01b03919091165f908152601f60209081526040808320938352929052206002015490565b3480156106c5575f80fd5b506103256106d4366004612c37565b6113e5565b3480156106e4575f80fd5b506103256106f3366004612c37565b611476565b348015610703575f80fd5b506017546105c6906001600160a01b031681565b348015610722575f80fd5b5061035e610731366004612d02565b611483565b348015610741575f80fd5b506102d260095481565b348015610756575f80fd5b5061035e6114d7565b34801561076a575f80fd5b506102d2600b5481565b34801561077f575f80fd5b506102d2601a5481565b348015610794575f80fd5b506102d26107a3366004612d35565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107d8575f80fd5b5061035e6107e7366004612bc0565b611765565b3480156107f7575f80fd5b5061035e61188a565b34801561080b575f80fd5b5061035e61081a366004612cbf565b6118da565b34801561082a575f80fd5b5061083e610839366004612cbf565b611972565b6040516102dc9190612da6565b348015610856575f80fd5b506016546105c6906001600160a01b031681565b348015610875575f80fd5b506102d2600a5481565b34801561088a575f80fd5b5061035e610899366004612bc0565b611a4b565b601881815481106108ad575f80fd5b5f91825260209091200154905081565b6060600380546108cc90612de7565b80601f01602080910402602001604051908101604052809291908181526020018280546108f890612de7565b80156109435780601f1061091a57610100808354040283529160200191610943565b820191905f5260205f20905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b5f3361095a818585611b1c565b60019150505b92915050565b6008546001600160a01b031633148061098957506005546001600160a01b031633145b6109ae5760405162461bcd60e51b81526004016109a590612e1f565b60405180910390fd5b60188054806109bf576109bf612e6c565b600190038181905f5260205f20015f90559055565b6008546001600160a01b03163314806109f757506005546001600160a01b031633145b610a135760405162461bcd60e51b81526004016109a590612e1f565b604080518082019091524281525f6020820181815260218054600181018255925291517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57060029092029182015590517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57190910155565b60218181548110610a98575f80fd5b5f9182526020909120600290910201805460019091015490915082565b5f33610ac2858285611c3f565b610acd858585611ccf565b506001949350505050565b6008546001600160a01b0316331480610afb57506005546001600160a01b031633145b610b175760405162461bcd60e51b81526004016109a590612e1f565b8160188281548110610b2b57610b2b612e80565b905f5260205f20015403610b965760405162461bcd60e51b815260206004820152602c60248201527f63616e206e6f7420757064617465206e6f64655265776172645261746520746f60448201526b2073616d652076616c75652160a01b60648201526084016109a5565b8160188281548110610baa57610baa612e80565b5f918252602090912001555050565b6001600160a01b039182165f818152601f6020908152604080832094835293905291909120549091161490565b610bf03382610bb9565b610c2f5760405162461bcd60e51b815260206004820152601060248201526f6861766520796f75207374616b65643f60801b60448201526064016109a5565b5f610c3a3383610ef1565b60195490915060ff1615610ccc57335f9081526020808052604082208054600181810183558285528385204292019190915590810180549182018155835290822001829055601a8054839290610c91908490612ea8565b9091555050335f818152601f60209081526040808320868452909152902060020154610cc79190610cc29084612334565b612346565b610cf3565b335f818152601f60209081526040808320868452909152902060020154610cf39190612346565b335f908152601f602090815260408083208584529091529020600201546021805484908110610d2457610d24612e80565b905f5260205f2090600202016001015f828254610d419190612ebb565b9091555050335f908152601f602090815260408083208584529091528120600201546014805491929091610d76908490612ebb565b9091555050335f908152601f6020908152604080832094835293905291822080546001600160a01b031916815560018101839055600281018390556003019190915550565b335f8181526001602090815260408083206001600160a01b038716845290915281205490919061095a9082908690610df4908790612ea8565b611b1c565b6008546001600160a01b0316331480610e1c57506005546001600160a01b031633145b610e385760405162461bcd60e51b81526004016109a590612e1f565b6007546001600160a01b0390811690821603610e965760405162461bcd60e51b815260206004820152601860248201527f63616e206e6f742073657420706169722061646472657373000000000000000060448201526064016109a5565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6008546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610eee573d5f803e3d5ffd5b50565b5f80610efd8484612422565b335f908152601f602090815260408083208784529091529020600301549091508015610f3657610f2d8282612334565b92505050610960565b509392505050565b6008546001600160a01b0316331480610f6157506005546001600160a01b031633145b610f7d5760405162461bcd60e51b81526004016109a590612e1f565b6019805460ff1916911515919091179055565b6005546001600160a01b03163314610fba5760405162461bcd60e51b81526004016109a590612ece565b6002600e8190556001600f8190556010829055610fd79082612ea8565b610fe19190612ea8565b600d819055600510156110365760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c6573730000000060448201526064016109a5565b565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b0316331461107c5760405162461bcd60e51b81526004016109a590612ece565b6110365f61252f565b6005546001600160a01b031633146110af5760405162461bcd60e51b81526004016109a590612ece565b600c805460ff19169055565b60195460ff166111075760405162461bcd60e51b815260206004820152601760248201527629ba30b5b4b7339034b9903737ba1032b730b13632b21760491b60448201526064016109a5565b6111113382610bb9565b156111a857335f908152601f6020908152604080832084845290915281206002018054849290611142908490612ea8565b9091555061115290503382612422565b335f908152601f602090815260408083208584529091528120600301805490919061117e908490612ea8565b9091555050335f908152601f60209081526040808320848452909152902042600190910155611212565b60408051608081018252338082524260208084019182528385018781525f60608601818152948152601f8352868120888252909252949020925183546001600160a01b0319166001600160a01b039091161783555160018301559151600282015590516003909101555b816021828154811061122657611226612e80565b905f5260205f2090600202016001015f8282546112439190612ea8565b925050819055508160145f82825461125b9190612ea8565b9091555061126b90503383612580565b5050565b6005545f906001600160a01b0316331461129b5760405162461bcd60e51b81526004016109a590612ece565b620186a06112a860025490565b6112b3906001612f03565b6112bd9190612f1a565b8210156113325760405162461bcd60e51b815260206004820152603860248201527f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460448201527f68616e20302e3030312520746f74616c20737570706c792e000000000000000060648201526084016109a5565b6103e861133e60025490565b611349906005612f03565b6113539190612f1a565b8211156113c85760405162461bcd60e51b815260206004820152603760248201527f53776170207468726573686f6c642063616e6e6f74206265206869676865722060448201527f7468616e20302e352520746f74616c20737570706c792e00000000000000000060648201526084016109a5565b50600b81905560015b919050565b6060600480546108cc90612de7565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909190838110156114695760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109a5565b610acd8286868403611b1c565b5f3361095a818585611ccf565b6005546001600160a01b031633146114ad5760405162461bcd60e51b81526004016109a590612ece565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115015760405162461bcd60e51b81526004016109a590612ece565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115759190612f39565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f89190612f39565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611642573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116669190612f39565b600780546001600160a01b0319166001600160a01b0392831690811782555f908152601c60209081526040808320805460ff199081166001908117909255945486168452601d90925290912080549092161790556006546116cd91309116610df482611038565b6006546001600160a01b031663f305d71947306116e981611038565b5f806116fd6005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161171f96959493929190612f54565b60606040518083038185885af115801561173b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906117609190612f8f565b505050565b60195460ff166117b15760405162461bcd60e51b815260206004820152601760248201527629ba30b5b4b7339034b9903737ba1032b730b13632b21760491b60448201526064016109a5565b6117bb3382610bb9565b6117fa5760405162461bcd60e51b815260206004820152601060248201526f6861766520796f75207374616b65643f60801b60448201526064016109a5565b5f6118053383610ef1565b335f9081526020808052604082208054600181810183558285528385204292019190915590810180549182018155835290822001829055601a80549293508392909190611853908490612ea8565b9091555061186390503382612346565b50335f908152601f6020908152604080832093835292905290812042600182015560030155565b6008546001600160a01b03163314806118ad57506005546001600160a01b031633145b6118c95760405162461bcd60e51b81526004016109a590612e1f565b6110366118d530611038565b6126cb565b6005546001600160a01b031633146119045760405162461bcd60e51b81526004016109a590612ece565b6001600160a01b0381166119695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a5565b610eee8161252f565b604080518082018252606080825260208083018290526001600160a01b0385165f908152818052849020845181549283028101840186529485018281529394939092849284918401828280156119e557602002820191905f5260205f20905b8154815260200190600101908083116119d1575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611a3b57602002820191905f5260205f20905b815481526020019060010190808311611a27575b5050505050815250509050919050565b6008546001600160a01b0316331480611a6e57506005546001600160a01b031633145b611a8a5760405162461bcd60e51b81526004016109a590612e1f565b805f03611ae85760405162461bcd60e51b815260206004820152602660248201527f63616e206e6f7420757064617465206e6f64655265776172645261746520746f604482015265207a65726f2160d01b60648201526084016109a5565b601880546001810182555f919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0155565b6001600160a01b038316611b7e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a5565b6001600160a01b038216611bdf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a5565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611cc95781811015611cbc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109a5565b611cc98484848403611b1c565b50505050565b6001600160a01b038316611cf55760405162461bcd60e51b81526004016109a590612fba565b6001600160a01b038216611d1b5760405162461bcd60e51b81526004016109a590612fff565b805f03611d2d5761176083835f61281b565b600c5460ff16156120ec576005546001600160a01b03848116911614801590611d6457506005546001600160a01b03838116911614155b8015611d7b57506001600160a01b03821661dead14155b8015611d915750600754600160a01b900460ff16155b156120ec576005546001600160a01b03838116911614801590611dc257506006546001600160a01b03838116911614155b8015611ddc57506007546001600160a01b03838116911614155b15611e8857325f908152601e60205260409020544311611e765760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109a5565b325f908152601e602052604090204390555b6001600160a01b0383165f908152601d602052604090205460ff168015611ec757506001600160a01b0382165f908152601c602052604090205460ff16155b15611fad57600954811115611f445760405162461bcd60e51b815260206004820152603a60248201527f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060448201527f6578636565647320746865206d617820547820416d6f756e742e00000000000060648201526084016109a5565b600a54611f5083611038565b611f5a9083612ea8565b1115611fa85760405162461bcd60e51b815260206004820152601f60248201527f5f7472616e736665723a3a204d61782077616c6c65742065786365656465640060448201526064016109a5565b6120ec565b6001600160a01b0382165f908152601d602052604090205460ff168015611fec57506001600160a01b0383165f908152601c602052604090205460ff16155b1561206957600954811115611fa85760405162461bcd60e51b815260206004820152603b60248201527f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460448201527f206578636565647320746865206d617820547820416d6f756e742e000000000060648201526084016109a5565b6001600160a01b0382165f908152601c602052604090205460ff166120ec57600a5461209483611038565b61209e9083612ea8565b11156120ec5760405162461bcd60e51b815260206004820152601f60248201527f5f7472616e736665723a3a204d61782077616c6c65742065786365656465640060448201526064016109a5565b5f6120f630611038565b600b54909150811080159081906121175750600754600160a01b900460ff16155b801561213b57506001600160a01b0385165f908152601d602052604090205460ff16155b801561215f57506001600160a01b0385165f908152601b602052604090205460ff16155b801561218357506001600160a01b0384165f908152601b602052604090205460ff16155b156121b1576007805460ff60a01b1916600160a01b1790556121a361296d565b6007805460ff60a01b191690555b6007546001600160a01b0386165f908152601b602052604090205460ff600160a01b9092048216159116806121fd57506001600160a01b0385165f908152601b602052604090205460ff165b8061224357506001600160a01b0386165f908152601d602052604090205460ff1615801561224357506001600160a01b0385165f908152601d602052604090205460ff16155b1561224b57505f5b5f811561232057612272606461226c600d5488612b0090919063ffffffff16565b90612b0b565b9050600d54600f54826122859190612f03565b61228f9190612f1a565b60125f82825461229f9190612ea8565b9091555050600d546010546122b49083612f03565b6122be9190612f1a565b60135f8282546122ce9190612ea8565b9091555050600d54600e546122e39083612f03565b6122ed9190612f1a565b60115f8282546122fd9190612ea8565b909155505080156123135761231387308361281b565b61231d8186612ebb565b94505b61232b87878761281b565b50505050505050565b5f61233f8284612ea8565b9392505050565b6001600160a01b03821661239c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109a5565b8060025f8282546123ad9190612ea8565b90915550506001600160a01b0382165f90815260208190526040812080548392906123d9908490612ea8565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b5f61242d8383610bb9565b6124705760405162461bcd60e51b81526020600482015260146024820152732ab9b2b91034b9903737ba1039ba30b5b4b7339760611b60448201526064016109a5565b6001600160a01b0383165f908152601f60209081526040808320858452909152812060028101546001918201549092916124aa9190612b0b565b90505f6124b8426001612b0b565b90505f6124c58284612b16565b90505f6124fb606461226c60188a815481106124e3576124e3612e80565b905f5260205f20015488612b0090919063ffffffff16565b90505f612514603c61226c81816018818861016d612b0b565b90505f6125218285612b00565b9a9950505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166125e05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a5565b6001600160a01b0382165f90815260208190526040902054818110156126535760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016109a5565b6001600160a01b0383165f908152602081905260408120838303905560028054849290612681908490612ebb565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106126fe576126fe612e80565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612755573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127799190612f39565b8160018151811061278c5761278c612e80565b6001600160a01b0392831660209182029290920101526006546127b29130911684611b1c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906127ea9085905f90869030904290600401613042565b5f604051808303815f87803b158015612801575f80fd5b505af1158015612813573d5f803e3d5ffd5b505050505050565b6001600160a01b0383166128415760405162461bcd60e51b81526004016109a590612fba565b6001600160a01b0382166128675760405162461bcd60e51b81526004016109a590612fff565b6001600160a01b0383165f90815260208190526040902054818110156128de5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109a5565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612914908490612ea8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161296091815260200190565b60405180910390a3611cc9565b5f61297730611038565b90505f60135460115460125461298d9190612ea8565b6129979190612ea8565b90508115806129a4575080155b156129ad575050565b600b548211156129bd57600b5491505b5f600282601254856129cf9190612f03565b6129d99190612f1a565b6129e39190612f1a565b90505f6129f08483612b16565b9050476129fc826126cb565b5f612a074783612b16565b90505f612a238661226c60115485612b0090919063ffffffff16565b90505f612a3f8761226c60135486612b0090919063ffffffff16565b90505f81612a4d8486612ebb565b612a579190612ebb565b5f6012819055601181905560138190556008546040519293506001600160a01b03169185156108fc0291869190818181858888f19350505050158015612a9f573d5f803e3d5ffd5b506017546040516001600160a01b039091169083156108fc029084905f818181858888f19350505050158015612ad7573d5f803e3d5ffd5b505f87118015612ae657505f81115b15612af557612af58782612b21565b505050505050505050565b5f61233f8284612f03565b5f61233f8284612f1a565b5f61233f8284612ebb565b600654612b399030906001600160a01b031684611b1c565b60065460085460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612b7892309289925f92839216904290600401612f54565b60606040518083038185885af1158015612b94573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612bb99190612f8f565b5050505050565b5f60208284031215612bd0575f80fd5b5035919050565b5f602080835283518060208501525f5b81811015612c0357858101830151858201604001528201612be7565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610eee575f80fd5b5f8060408385031215612c48575f80fd5b8235612c5381612c23565b946020939093013593505050565b5f805f60608486031215612c73575f80fd5b8335612c7e81612c23565b92506020840135612c8e81612c23565b929592945050506040919091013590565b5f8060408385031215612cb0575f80fd5b50508035926020909101359150565b5f60208284031215612ccf575f80fd5b813561233f81612c23565b803580151581146113d1575f80fd5b5f60208284031215612cf9575f80fd5b61233f82612cda565b5f8060408385031215612d13575f80fd5b8235612d1e81612c23565b9150612d2c60208401612cda565b90509250929050565b5f8060408385031215612d46575f80fd5b8235612d5181612c23565b91506020830135612d6181612c23565b809150509250929050565b5f815180845260208085019450602084015f5b83811015612d9b57815187529582019590820190600101612d7f565b509495945050505050565b602081525f825160406020840152612dc16060840182612d6c565b90506020840151601f19848303016040850152612dde8282612d6c565b95945050505050565b600181811c90821680612dfb57607f821691505b602082108103612e1957634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f63616c6c65722063616e206f6e6c79206f766572736565206e6f646520706f6f60408201526c6c20636f6d706f6e656e74732160981b606082015260800190565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561096057610960612e94565b8181038181111561096057610960612e94565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808202811582820484141761096057610960612e94565b5f82612f3457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612f49575f80fd5b815161233f81612c23565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f60608486031215612fa1575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156130925784516001600160a01b03168352938301939183019160010161306d565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212204d5068e6aa149b6357a061d1d4bbf6d613771713fd7eddfeb552d4029e71c65664736f6c63430008170033
Deployed Bytecode
0x6080604052600436106102a8575f3560e01c8063715018a61161016f578063c0246668116100d8578063ddc6326211610092578063f7096e101161006d578063f7096e101461081f578063f7c618c11461084b578063f8b45b051461086a578063fdaaadf71461087f575f80fd5b8063ddc63262146107cd578063df778d26146107ec578063f2fde38b14610800575f80fd5b8063c024666814610717578063c8c8ebe414610736578063c9567bf91461074b578063cef851391461075f578063d54ad2a114610774578063dd62ed3e14610789575f80fd5b80638da5cb5b116101295780638da5cb5b1461064557806395d89b4114610662578063a39b215314610676578063a457c2d7146106ba578063a9059cbb146106d9578063aa342873146106f8575f80fd5b8063715018a61461059357806372f702f3146105a7578063751039fc146105de5780637b0472f0146105f2578063817b1cd2146106115780638baa63b214610626575f80fd5b80632e17de78116102115780634a62bb65116101cb5780634a62bb65146104dd5780634fbee193146104f657806356eb60611461052d57806357e744c21461054c5780635d5bc4dc1461056057806370a0823114610574575f80fd5b80632e17de7814610432578063313ce56714610451578063395093511461046c5780633aeed3631461048b5780633dd5b2da146104aa5780634093e7d5146104be575f80fd5b80631c3917b8116102625780631c3917b8146103745780631c53c280146103885780631cfff51b146103bc57806323b872dd146103d557806324302ab7146103f4578063245fc1ba14610413575f80fd5b8063014bea5e146102b357806306fdde03146102e5578063095ea7b31461030657806313114a9d14610335578063145380391461034a57806318160ddd14610360575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506102d26102cd366004612bc0565b61089e565b6040519081526020015b60405180910390f35b3480156102f0575f80fd5b506102f96108bd565b6040516102dc9190612bd7565b348015610311575f80fd5b50610325610320366004612c37565b61094d565b60405190151581526020016102dc565b348015610340575f80fd5b506102d2600d5481565b348015610355575f80fd5b5061035e610966565b005b34801561036b575f80fd5b506002546102d2565b34801561037f575f80fd5b5061035e6109d4565b348015610393575f80fd5b506103a76103a2366004612bc0565b610a89565b604080519283526020830191909152016102dc565b3480156103c7575f80fd5b506019546103259060ff1681565b3480156103e0575f80fd5b506103256103ef366004612c61565b610ab5565b3480156103ff575f80fd5b5061035e61040e366004612c9f565b610ad8565b34801561041e575f80fd5b5061032561042d366004612c37565b610bb9565b34801561043d575f80fd5b5061035e61044c366004612bc0565b610be6565b34801561045c575f80fd5b50604051601281526020016102dc565b348015610477575f80fd5b50610325610486366004612c37565b610dbb565b348015610496575f80fd5b5061035e6104a5366004612cbf565b610df9565b3480156104b5575f80fd5b5061035e610eb8565b3480156104c9575f80fd5b506102d26104d8366004612c37565b610ef1565b3480156104e8575f80fd5b50600c546103259060ff1681565b348015610501575f80fd5b50610325610510366004612cbf565b6001600160a01b03165f908152601b602052604090205460ff1690565b348015610538575f80fd5b5061035e610547366004612ce9565b610f3e565b348015610557575f80fd5b506021546102d2565b34801561056b575f80fd5b5061035e610f90565b34801561057f575f80fd5b506102d261058e366004612cbf565b611038565b34801561059e575f80fd5b5061035e611052565b3480156105b2575f80fd5b506015546105c6906001600160a01b031681565b6040516001600160a01b0390911681526020016102dc565b3480156105e9575f80fd5b5061035e611085565b3480156105fd575f80fd5b5061035e61060c366004612c9f565b6110bb565b34801561061c575f80fd5b506102d260145481565b348015610631575f80fd5b50610325610640366004612bc0565b61126f565b348015610650575f80fd5b506005546001600160a01b03166105c6565b34801561066d575f80fd5b506102f96113d6565b348015610681575f80fd5b506102d2610690366004612c37565b6001600160a01b03919091165f908152601f60209081526040808320938352929052206002015490565b3480156106c5575f80fd5b506103256106d4366004612c37565b6113e5565b3480156106e4575f80fd5b506103256106f3366004612c37565b611476565b348015610703575f80fd5b506017546105c6906001600160a01b031681565b348015610722575f80fd5b5061035e610731366004612d02565b611483565b348015610741575f80fd5b506102d260095481565b348015610756575f80fd5b5061035e6114d7565b34801561076a575f80fd5b506102d2600b5481565b34801561077f575f80fd5b506102d2601a5481565b348015610794575f80fd5b506102d26107a3366004612d35565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107d8575f80fd5b5061035e6107e7366004612bc0565b611765565b3480156107f7575f80fd5b5061035e61188a565b34801561080b575f80fd5b5061035e61081a366004612cbf565b6118da565b34801561082a575f80fd5b5061083e610839366004612cbf565b611972565b6040516102dc9190612da6565b348015610856575f80fd5b506016546105c6906001600160a01b031681565b348015610875575f80fd5b506102d2600a5481565b34801561088a575f80fd5b5061035e610899366004612bc0565b611a4b565b601881815481106108ad575f80fd5b5f91825260209091200154905081565b6060600380546108cc90612de7565b80601f01602080910402602001604051908101604052809291908181526020018280546108f890612de7565b80156109435780601f1061091a57610100808354040283529160200191610943565b820191905f5260205f20905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b5f3361095a818585611b1c565b60019150505b92915050565b6008546001600160a01b031633148061098957506005546001600160a01b031633145b6109ae5760405162461bcd60e51b81526004016109a590612e1f565b60405180910390fd5b60188054806109bf576109bf612e6c565b600190038181905f5260205f20015f90559055565b6008546001600160a01b03163314806109f757506005546001600160a01b031633145b610a135760405162461bcd60e51b81526004016109a590612e1f565b604080518082019091524281525f6020820181815260218054600181018255925291517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57060029092029182015590517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57190910155565b60218181548110610a98575f80fd5b5f9182526020909120600290910201805460019091015490915082565b5f33610ac2858285611c3f565b610acd858585611ccf565b506001949350505050565b6008546001600160a01b0316331480610afb57506005546001600160a01b031633145b610b175760405162461bcd60e51b81526004016109a590612e1f565b8160188281548110610b2b57610b2b612e80565b905f5260205f20015403610b965760405162461bcd60e51b815260206004820152602c60248201527f63616e206e6f7420757064617465206e6f64655265776172645261746520746f60448201526b2073616d652076616c75652160a01b60648201526084016109a5565b8160188281548110610baa57610baa612e80565b5f918252602090912001555050565b6001600160a01b039182165f818152601f6020908152604080832094835293905291909120549091161490565b610bf03382610bb9565b610c2f5760405162461bcd60e51b815260206004820152601060248201526f6861766520796f75207374616b65643f60801b60448201526064016109a5565b5f610c3a3383610ef1565b60195490915060ff1615610ccc57335f9081526020808052604082208054600181810183558285528385204292019190915590810180549182018155835290822001829055601a8054839290610c91908490612ea8565b9091555050335f818152601f60209081526040808320868452909152902060020154610cc79190610cc29084612334565b612346565b610cf3565b335f818152601f60209081526040808320868452909152902060020154610cf39190612346565b335f908152601f602090815260408083208584529091529020600201546021805484908110610d2457610d24612e80565b905f5260205f2090600202016001015f828254610d419190612ebb565b9091555050335f908152601f602090815260408083208584529091528120600201546014805491929091610d76908490612ebb565b9091555050335f908152601f6020908152604080832094835293905291822080546001600160a01b031916815560018101839055600281018390556003019190915550565b335f8181526001602090815260408083206001600160a01b038716845290915281205490919061095a9082908690610df4908790612ea8565b611b1c565b6008546001600160a01b0316331480610e1c57506005546001600160a01b031633145b610e385760405162461bcd60e51b81526004016109a590612e1f565b6007546001600160a01b0390811690821603610e965760405162461bcd60e51b815260206004820152601860248201527f63616e206e6f742073657420706169722061646472657373000000000000000060448201526064016109a5565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6008546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610eee573d5f803e3d5ffd5b50565b5f80610efd8484612422565b335f908152601f602090815260408083208784529091529020600301549091508015610f3657610f2d8282612334565b92505050610960565b509392505050565b6008546001600160a01b0316331480610f6157506005546001600160a01b031633145b610f7d5760405162461bcd60e51b81526004016109a590612e1f565b6019805460ff1916911515919091179055565b6005546001600160a01b03163314610fba5760405162461bcd60e51b81526004016109a590612ece565b6002600e8190556001600f8190556010829055610fd79082612ea8565b610fe19190612ea8565b600d819055600510156110365760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c6573730000000060448201526064016109a5565b565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b0316331461107c5760405162461bcd60e51b81526004016109a590612ece565b6110365f61252f565b6005546001600160a01b031633146110af5760405162461bcd60e51b81526004016109a590612ece565b600c805460ff19169055565b60195460ff166111075760405162461bcd60e51b815260206004820152601760248201527629ba30b5b4b7339034b9903737ba1032b730b13632b21760491b60448201526064016109a5565b6111113382610bb9565b156111a857335f908152601f6020908152604080832084845290915281206002018054849290611142908490612ea8565b9091555061115290503382612422565b335f908152601f602090815260408083208584529091528120600301805490919061117e908490612ea8565b9091555050335f908152601f60209081526040808320848452909152902042600190910155611212565b60408051608081018252338082524260208084019182528385018781525f60608601818152948152601f8352868120888252909252949020925183546001600160a01b0319166001600160a01b039091161783555160018301559151600282015590516003909101555b816021828154811061122657611226612e80565b905f5260205f2090600202016001015f8282546112439190612ea8565b925050819055508160145f82825461125b9190612ea8565b9091555061126b90503383612580565b5050565b6005545f906001600160a01b0316331461129b5760405162461bcd60e51b81526004016109a590612ece565b620186a06112a860025490565b6112b3906001612f03565b6112bd9190612f1a565b8210156113325760405162461bcd60e51b815260206004820152603860248201527f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460448201527f68616e20302e3030312520746f74616c20737570706c792e000000000000000060648201526084016109a5565b6103e861133e60025490565b611349906005612f03565b6113539190612f1a565b8211156113c85760405162461bcd60e51b815260206004820152603760248201527f53776170207468726573686f6c642063616e6e6f74206265206869676865722060448201527f7468616e20302e352520746f74616c20737570706c792e00000000000000000060648201526084016109a5565b50600b81905560015b919050565b6060600480546108cc90612de7565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909190838110156114695760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109a5565b610acd8286868403611b1c565b5f3361095a818585611ccf565b6005546001600160a01b031633146114ad5760405162461bcd60e51b81526004016109a590612ece565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115015760405162461bcd60e51b81526004016109a590612ece565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115759190612f39565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f89190612f39565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611642573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116669190612f39565b600780546001600160a01b0319166001600160a01b0392831690811782555f908152601c60209081526040808320805460ff199081166001908117909255945486168452601d90925290912080549092161790556006546116cd91309116610df482611038565b6006546001600160a01b031663f305d71947306116e981611038565b5f806116fd6005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161171f96959493929190612f54565b60606040518083038185885af115801561173b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906117609190612f8f565b505050565b60195460ff166117b15760405162461bcd60e51b815260206004820152601760248201527629ba30b5b4b7339034b9903737ba1032b730b13632b21760491b60448201526064016109a5565b6117bb3382610bb9565b6117fa5760405162461bcd60e51b815260206004820152601060248201526f6861766520796f75207374616b65643f60801b60448201526064016109a5565b5f6118053383610ef1565b335f9081526020808052604082208054600181810183558285528385204292019190915590810180549182018155835290822001829055601a80549293508392909190611853908490612ea8565b9091555061186390503382612346565b50335f908152601f6020908152604080832093835292905290812042600182015560030155565b6008546001600160a01b03163314806118ad57506005546001600160a01b031633145b6118c95760405162461bcd60e51b81526004016109a590612e1f565b6110366118d530611038565b6126cb565b6005546001600160a01b031633146119045760405162461bcd60e51b81526004016109a590612ece565b6001600160a01b0381166119695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a5565b610eee8161252f565b604080518082018252606080825260208083018290526001600160a01b0385165f908152818052849020845181549283028101840186529485018281529394939092849284918401828280156119e557602002820191905f5260205f20905b8154815260200190600101908083116119d1575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611a3b57602002820191905f5260205f20905b815481526020019060010190808311611a27575b5050505050815250509050919050565b6008546001600160a01b0316331480611a6e57506005546001600160a01b031633145b611a8a5760405162461bcd60e51b81526004016109a590612e1f565b805f03611ae85760405162461bcd60e51b815260206004820152602660248201527f63616e206e6f7420757064617465206e6f64655265776172645261746520746f604482015265207a65726f2160d01b60648201526084016109a5565b601880546001810182555f919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0155565b6001600160a01b038316611b7e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a5565b6001600160a01b038216611bdf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a5565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611cc95781811015611cbc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109a5565b611cc98484848403611b1c565b50505050565b6001600160a01b038316611cf55760405162461bcd60e51b81526004016109a590612fba565b6001600160a01b038216611d1b5760405162461bcd60e51b81526004016109a590612fff565b805f03611d2d5761176083835f61281b565b600c5460ff16156120ec576005546001600160a01b03848116911614801590611d6457506005546001600160a01b03838116911614155b8015611d7b57506001600160a01b03821661dead14155b8015611d915750600754600160a01b900460ff16155b156120ec576005546001600160a01b03838116911614801590611dc257506006546001600160a01b03838116911614155b8015611ddc57506007546001600160a01b03838116911614155b15611e8857325f908152601e60205260409020544311611e765760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109a5565b325f908152601e602052604090204390555b6001600160a01b0383165f908152601d602052604090205460ff168015611ec757506001600160a01b0382165f908152601c602052604090205460ff16155b15611fad57600954811115611f445760405162461bcd60e51b815260206004820152603a60248201527f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060448201527f6578636565647320746865206d617820547820416d6f756e742e00000000000060648201526084016109a5565b600a54611f5083611038565b611f5a9083612ea8565b1115611fa85760405162461bcd60e51b815260206004820152601f60248201527f5f7472616e736665723a3a204d61782077616c6c65742065786365656465640060448201526064016109a5565b6120ec565b6001600160a01b0382165f908152601d602052604090205460ff168015611fec57506001600160a01b0383165f908152601c602052604090205460ff16155b1561206957600954811115611fa85760405162461bcd60e51b815260206004820152603b60248201527f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460448201527f206578636565647320746865206d617820547820416d6f756e742e000000000060648201526084016109a5565b6001600160a01b0382165f908152601c602052604090205460ff166120ec57600a5461209483611038565b61209e9083612ea8565b11156120ec5760405162461bcd60e51b815260206004820152601f60248201527f5f7472616e736665723a3a204d61782077616c6c65742065786365656465640060448201526064016109a5565b5f6120f630611038565b600b54909150811080159081906121175750600754600160a01b900460ff16155b801561213b57506001600160a01b0385165f908152601d602052604090205460ff16155b801561215f57506001600160a01b0385165f908152601b602052604090205460ff16155b801561218357506001600160a01b0384165f908152601b602052604090205460ff16155b156121b1576007805460ff60a01b1916600160a01b1790556121a361296d565b6007805460ff60a01b191690555b6007546001600160a01b0386165f908152601b602052604090205460ff600160a01b9092048216159116806121fd57506001600160a01b0385165f908152601b602052604090205460ff165b8061224357506001600160a01b0386165f908152601d602052604090205460ff1615801561224357506001600160a01b0385165f908152601d602052604090205460ff16155b1561224b57505f5b5f811561232057612272606461226c600d5488612b0090919063ffffffff16565b90612b0b565b9050600d54600f54826122859190612f03565b61228f9190612f1a565b60125f82825461229f9190612ea8565b9091555050600d546010546122b49083612f03565b6122be9190612f1a565b60135f8282546122ce9190612ea8565b9091555050600d54600e546122e39083612f03565b6122ed9190612f1a565b60115f8282546122fd9190612ea8565b909155505080156123135761231387308361281b565b61231d8186612ebb565b94505b61232b87878761281b565b50505050505050565b5f61233f8284612ea8565b9392505050565b6001600160a01b03821661239c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109a5565b8060025f8282546123ad9190612ea8565b90915550506001600160a01b0382165f90815260208190526040812080548392906123d9908490612ea8565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b5f61242d8383610bb9565b6124705760405162461bcd60e51b81526020600482015260146024820152732ab9b2b91034b9903737ba1039ba30b5b4b7339760611b60448201526064016109a5565b6001600160a01b0383165f908152601f60209081526040808320858452909152812060028101546001918201549092916124aa9190612b0b565b90505f6124b8426001612b0b565b90505f6124c58284612b16565b90505f6124fb606461226c60188a815481106124e3576124e3612e80565b905f5260205f20015488612b0090919063ffffffff16565b90505f612514603c61226c81816018818861016d612b0b565b90505f6125218285612b00565b9a9950505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166125e05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a5565b6001600160a01b0382165f90815260208190526040902054818110156126535760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016109a5565b6001600160a01b0383165f908152602081905260408120838303905560028054849290612681908490612ebb565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106126fe576126fe612e80565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612755573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127799190612f39565b8160018151811061278c5761278c612e80565b6001600160a01b0392831660209182029290920101526006546127b29130911684611b1c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906127ea9085905f90869030904290600401613042565b5f604051808303815f87803b158015612801575f80fd5b505af1158015612813573d5f803e3d5ffd5b505050505050565b6001600160a01b0383166128415760405162461bcd60e51b81526004016109a590612fba565b6001600160a01b0382166128675760405162461bcd60e51b81526004016109a590612fff565b6001600160a01b0383165f90815260208190526040902054818110156128de5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109a5565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612914908490612ea8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161296091815260200190565b60405180910390a3611cc9565b5f61297730611038565b90505f60135460115460125461298d9190612ea8565b6129979190612ea8565b90508115806129a4575080155b156129ad575050565b600b548211156129bd57600b5491505b5f600282601254856129cf9190612f03565b6129d99190612f1a565b6129e39190612f1a565b90505f6129f08483612b16565b9050476129fc826126cb565b5f612a074783612b16565b90505f612a238661226c60115485612b0090919063ffffffff16565b90505f612a3f8761226c60135486612b0090919063ffffffff16565b90505f81612a4d8486612ebb565b612a579190612ebb565b5f6012819055601181905560138190556008546040519293506001600160a01b03169185156108fc0291869190818181858888f19350505050158015612a9f573d5f803e3d5ffd5b506017546040516001600160a01b039091169083156108fc029084905f818181858888f19350505050158015612ad7573d5f803e3d5ffd5b505f87118015612ae657505f81115b15612af557612af58782612b21565b505050505050505050565b5f61233f8284612f03565b5f61233f8284612f1a565b5f61233f8284612ebb565b600654612b399030906001600160a01b031684611b1c565b60065460085460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612b7892309289925f92839216904290600401612f54565b60606040518083038185885af1158015612b94573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612bb99190612f8f565b5050505050565b5f60208284031215612bd0575f80fd5b5035919050565b5f602080835283518060208501525f5b81811015612c0357858101830151858201604001528201612be7565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610eee575f80fd5b5f8060408385031215612c48575f80fd5b8235612c5381612c23565b946020939093013593505050565b5f805f60608486031215612c73575f80fd5b8335612c7e81612c23565b92506020840135612c8e81612c23565b929592945050506040919091013590565b5f8060408385031215612cb0575f80fd5b50508035926020909101359150565b5f60208284031215612ccf575f80fd5b813561233f81612c23565b803580151581146113d1575f80fd5b5f60208284031215612cf9575f80fd5b61233f82612cda565b5f8060408385031215612d13575f80fd5b8235612d1e81612c23565b9150612d2c60208401612cda565b90509250929050565b5f8060408385031215612d46575f80fd5b8235612d5181612c23565b91506020830135612d6181612c23565b809150509250929050565b5f815180845260208085019450602084015f5b83811015612d9b57815187529582019590820190600101612d7f565b509495945050505050565b602081525f825160406020840152612dc16060840182612d6c565b90506020840151601f19848303016040850152612dde8282612d6c565b95945050505050565b600181811c90821680612dfb57607f821691505b602082108103612e1957634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f63616c6c65722063616e206f6e6c79206f766572736565206e6f646520706f6f60408201526c6c20636f6d706f6e656e74732160981b606082015260800190565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561096057610960612e94565b8181038181111561096057610960612e94565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808202811582820484141761096057610960612e94565b5f82612f3457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612f49575f80fd5b815161233f81612c23565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f60608486031215612fa1575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156130925784516001600160a01b03168352938301939183019160010161306d565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212204d5068e6aa149b6357a061d1d4bbf6d613771713fd7eddfeb552d4029e71c65664736f6c63430008170033
Deployed Bytecode Sourcemap
18333:15004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19145:32;;;;;;;;;;-1:-1:-1;19145:32:0;;;;;:::i;:::-;;:::i;:::-;;;345:25:1;;;333:2;318:18;19145:32:0;;;;;;;;1809:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2741:201::-;;;;;;;;;;-1:-1:-1;2741:201:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;2741:201:0;1390:187:1;18740:24:0;;;;;;;;;;;;;;;;23042:95;;;;;;;;;;;;;:::i;:::-;;2130:108;;;;;;;;;;-1:-1:-1;2218:12:0;;2130:108;;31723:133;;;;;;;;;;;;;:::i;19963:19::-;;;;;;;;;;-1:-1:-1;19963:19:0;;;;;:::i;:::-;;:::i;:::-;;;;1756:25:1;;;1812:2;1797:18;;1790:34;;;;1729:18;19963:19:0;1582:248:1;19186:34:0;;;;;;;;;;-1:-1:-1;19186:34:0;;;;;;;;2950:295;;;;;;;;;;-1:-1:-1;2950:295:0;;;;;:::i;:::-;;:::i;23145:263::-;;;;;;;;;;-1:-1:-1;23145:263:0;;;;;:::i;:::-;;:::i;29650:153::-;;;;;;;;;;-1:-1:-1;29650:153:0;;;;;:::i;:::-;;:::i;32575:722::-;;;;;;;;;;-1:-1:-1;32575:722:0;;;;;:::i;:::-;;:::i;2029:93::-;;;;;;;;;;-1:-1:-1;2029:93:0;;2112:2;2691:36:1;;2679:2;2664:18;2029:93:0;2549:184:1;3253:240:0;;;;;;;;;;-1:-1:-1;3253:240:0;;;;;:::i;:::-;;:::i;23416:196::-;;;;;;;;;;-1:-1:-1;23416:196:0;;;;;:::i;:::-;;:::i;29413:116::-;;;;;;;;;;;;;:::i;30095:337::-;;;;;;;;;;-1:-1:-1;30095:337:0;;;;;:::i;:::-;;:::i;18698:33::-;;;;;;;;;;-1:-1:-1;18698:33:0;;;;;;;;24030:127;;;;;;;;;;-1:-1:-1;24030:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;24121:28:0;24097:4;24121:28;;;:19;:28;;;;;;;;;24030:127;31965:98;;;;;;;;;;-1:-1:-1;31965:98:0;;;;;:::i;:::-;;:::i;31864:93::-;;;;;;;;;;-1:-1:-1;31937:5:0;:12;31864:93;;22554:265;;;;;;;;;;;;;:::i;2246:127::-;;;;;;;;;;-1:-1:-1;2246:127:0;;;;;:::i;:::-;;:::i;15171:103::-;;;;;;;;;;;;;:::i;19036:27::-;;;;;;;;;;-1:-1:-1;19036:27:0;;;;-1:-1:-1;;;;;19036:27:0;;;;;;-1:-1:-1;;;;;3504:32:1;;;3486:51;;3474:2;3459:18;19036:27:0;3340:203:1;22320:84:0;;;;;;;;;;;;;:::i;31130:585::-;;;;;;;;;;-1:-1:-1;31130:585:0;;;;;:::i;:::-;;:::i;19003:26::-;;;;;;;;;;;;;;;;23620:402;;;;;;;;;;-1:-1:-1;23620:402:0;;;;;:::i;:::-;;:::i;14948:87::-;;;;;;;;;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;15021:6:0;14948:87;;1917:104;;;;;;;;;;;;;:::i;29811:135::-;;;;;;;;;;-1:-1:-1;29811:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;29909:16:0;;;;29882:7;29909:16;;;:8;:16;;;;;;;;:22;;;;;;;:29;;;;29811:135;3501:438;;;;;;;;;;-1:-1:-1;3501:438:0;;;;;:::i;:::-;;:::i;2381:193::-;;;;;;;;;;-1:-1:-1;2381:193:0;;;;;:::i;:::-;;:::i;19103:32::-;;;;;;;;;;-1:-1:-1;19103:32:0;;;;-1:-1:-1;;;;;19103:32:0;;;22412:134;;;;;;;;;;-1:-1:-1;22412:134:0;;;;;:::i;:::-;;:::i;18572:35::-;;;;;;;;;;;;;;;;21677:635;;;;;;;;;;;;;:::i;18647:34::-;;;;;;;;;;;;;;;;19227:27;;;;;;;;;;;;;;;;2582:151;;;;;;;;;;-1:-1:-1;2582:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2698:18:0;;;2671:7;2698:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2582:151;32072:495;;;;;;;;;;-1:-1:-1;32072:495:0;;;;;:::i;:::-;;:::i;29537:105::-;;;;;;;;;;;;;:::i;15282:201::-;;;;;;;;;;-1:-1:-1;15282:201:0;;;;;:::i;:::-;;:::i;29954:133::-;;;;;;;;;;-1:-1:-1;29954:133:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19070:26::-;;;;;;;;;;-1:-1:-1;19070:26:0;;;;-1:-1:-1;;;;;19070:26:0;;;18614:24;;;;;;;;;;;;;;;;22827:207;;;;;;;;;;-1:-1:-1;22827:207:0;;;;;:::i;:::-;;:::i;19145:32::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19145:32:0;:::o;1809:100::-;1863:13;1896:5;1889:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1809:100;:::o;2741:201::-;2824:4;351:10;2880:32;351:10;2896:7;2905:6;2880:8;:32::i;:::-;2930:4;2923:11;;;2741:201;;;;;:::o;23042:95::-;20034:16;;-1:-1:-1;;;;;20034:16:0;351:10;20034:32;;:59;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;15021:6:0;351:10;20070:23;20034:59;20026:117;;;;-1:-1:-1;;;20026:117:0;;;;;;;:::i;:::-;;;;;;;;;23109:14:::1;:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;23042:95::o:0;31723:133::-;20034:16;;-1:-1:-1;;;;;20034:16:0;351:10;20034:32;;:59;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;15021:6:0;351:10;20070:23;20034:59;20026:117;;;;-1:-1:-1;;;20026:117:0;;;;;;;:::i;:::-;31797:24:::1;::::0;;;;::::1;::::0;;;31802:15:::1;31797:24:::0;;-1:-1:-1;31797:24:0::1;::::0;::::1;::::0;;;31832:5:::1;:16:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;31723:133::o;19963:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19963:19:0;:::o;2950:295::-;3081:4;351:10;3139:38;3155:4;351:10;3170:6;3139:15;:38::i;:::-;3188:27;3198:4;3204:2;3208:6;3188:9;:27::i;:::-;-1:-1:-1;3233:4:0;;2950:295;-1:-1:-1;;;;2950:295:0:o;23145:263::-;20034:16;;-1:-1:-1;;;;;20034:16:0;351:10;20034:32;;:59;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;15021:6:0;351:10;20070:23;20034:59;20026:117;;;;-1:-1:-1;;;20026:117:0;;;;;;;:::i;:::-;23285:15:::1;23259:14;23274:6;23259:22;;;;;;;;:::i;:::-;;;;;;;;;:41:::0;23250:99:::1;;;::::0;-1:-1:-1;;;23250:99:0;;6538:2:1;23250:99:0::1;::::0;::::1;6520:21:1::0;6577:2;6557:18;;;6550:30;6616:34;6596:18;;;6589:62;-1:-1:-1;;;6667:18:1;;;6660:42;6719:19;;23250:99:0::1;6336:408:1::0;23250:99:0::1;23385:15;23360:14;23375:6;23360:22;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:40:::0;-1:-1:-1;;23145:263:0:o;29650:153::-;-1:-1:-1;;;;;29748:47:0;;;29724:4;29748:20;;;:8;:20;;;;;;;;:26;;;;;;;;;;:33;;;;:47;;29650:153::o;32575:722::-;32634:27;32644:10;32656:4;32634:9;:27::i;:::-;32626:56;;;;-1:-1:-1;;;32626:56:0;;6951:2:1;32626:56:0;;;6933:21:1;6990:2;6970:18;;;6963:30;-1:-1:-1;;;7009:18:1;;;7002:46;7065:18;;32626:56:0;6749:340:1;32626:56:0;32695:14;32712:28;32723:10;32735:4;32712:10;:28::i;:::-;32757:14;;32695:45;;-1:-1:-1;32757:14:0;;32753:364;;;32802:10;32788:25;;;;:13;:25;;;;;;:53;;;;;;;;;;;;;;32825:15;32788:53;;;;;;32856:33;;;:46;;;;;;;;;;;;;;;;32917:12;:22;;32895:6;;32788:25;32917:22;;32895:6;;32917:22;:::i;:::-;;;;-1:-1:-1;;32962:10:0;32974:20;;;;:8;:20;;;;;;;;:26;;;;;;;;:33;;;32956:64;;32962:10;32974:45;;33012:6;32974:37;:45::i;:::-;32956:5;:64::i;:::-;32753:364;;;33059:10;33071:20;;;;:8;:20;;;;;;;;:26;;;;;;;;:33;;;33053:52;;33059:10;33053:5;:52::i;:::-;33160:10;33151:20;;;;:8;:20;;;;;;;;:26;;;;;;;;:33;;;33129:5;:11;;33172:4;;33129:11;;;;;;:::i;:::-;;;;;;;;;;;:18;;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;33219:10:0;33210:20;;;;:8;:20;;;;;;;;:26;;;;;;;;:33;;;33195:11;:48;;33210:33;;33195:11;;:48;;33210:33;;33195:48;:::i;:::-;;;;-1:-1:-1;;33272:10:0;33263:20;;;;:8;:20;;;;;;;;:26;;;;;;;;;33256:33;;-1:-1:-1;;;;;;33256:33:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32575:722:0:o;3253:240::-;351:10;3341:4;3422:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3422:27:0;;;;;;;;;;3341:4;;351:10;3397:66;;351:10;;3422:27;;:40;;3452:10;;3422:40;:::i;:::-;3397:8;:66::i;23416:196::-;20034:16;;-1:-1:-1;;;;;20034:16:0;351:10;20034:32;;:59;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;15021:6:0;351:10;20070:23;20034:59;20026:117;;;;-1:-1:-1;;;20026:117:0;;;;;;;:::i;:::-;23521:13:::1;::::0;-1:-1:-1;;;;;23521:13:0;;::::1;23509:25:::0;;::::1;::::0;23500:63:::1;;;::::0;-1:-1:-1;;;23500:63:0;;7691:2:1;23500:63:0::1;::::0;::::1;7673:21:1::0;7730:2;7710:18;;;7703:30;7769:26;7749:18;;;7742:54;7813:18;;23500:63:0::1;7489:348:1::0;23500:63:0::1;23574:17;:29:::0;;-1:-1:-1;;;;;;23574:29:0::1;-1:-1:-1::0;;;;;23574:29:0;;;::::1;::::0;;;::::1;::::0;;23416:196::o;29413:116::-;29472:16;;29464:57;;-1:-1:-1;;;;;29472:16:0;;;;29499:21;29464:57;;;;;29472:16;29464:57;29472:16;29464:57;29499:21;29472:16;29464:57;;;;;;;;;;;;;;;;;;;;;29413:116::o;30095:337::-;30166:7;30186:23;30212:25;30224:6;30232:4;30212:11;:25::i;:::-;30284:10;30248:24;30275:20;;;:8;:20;;;;;;;;:26;;;;;;;;:33;;;30186:51;;-1:-1:-1;30325:20:0;;30321:70;;30354:37;:15;30374:16;30354:19;:37::i;:::-;30347:44;;;;;;30321:70;-1:-1:-1;30409:15:0;30095:337;-1:-1:-1;;;30095:337:0:o;31965:98::-;20034:16;;-1:-1:-1;;;;;20034:16:0;351:10;20034:32;;:59;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;15021:6:0;351:10;20070:23;20034:59;20026:117;;;;-1:-1:-1;;;20026:117:0;;;;;;;:::i;:::-;32033:14:::1;:22:::0;;-1:-1:-1;;32033:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31965:98::o;22554:265::-;15021:6;;-1:-1:-1;;;;;15021:6:0;351:10;15083:23;15075:68;;;;-1:-1:-1;;;15075:68:0;;;;;;;:::i;:::-;22626:1:::1;22610:13;:17:::0;;;22654:1:::1;22638:13;:17:::0;;;22666:8:::1;:12:::0;;;22703:29:::1;::::0;22626:1;22703:29:::1;:::i;:::-;:40;;;;:::i;:::-;22691:9;:52:::0;;;22777:1:::1;-1:-1:-1::0;22764:14:0::1;22756:55;;;::::0;-1:-1:-1;;;22756:55:0;;8405:2:1;22756:55:0::1;::::0;::::1;8387:21:1::0;8444:2;8424:18;;;8417:30;8483;8463:18;;;8456:58;8531:18;;22756:55:0::1;8203:352:1::0;22756:55:0::1;22554:265::o:0;2246:127::-;-1:-1:-1;;;;;2347:18:0;2320:7;2347:18;;;;;;;;;;;;2246:127::o;15171:103::-;15021:6;;-1:-1:-1;;;;;15021:6:0;351:10;15083:23;15075:68;;;;-1:-1:-1;;;15075:68:0;;;;;;;:::i;:::-;15236:30:::1;15263:1;15236:18;:30::i;22320:84::-:0;15021:6;;-1:-1:-1;;;;;15021:6:0;351:10;15083:23;15075:68;;;;-1:-1:-1;;;15075:68:0;;;;;;;:::i;:::-;22374:14:::1;:22:::0;;-1:-1:-1;;22374:22:0::1;::::0;;22320:84::o;31130:585::-;20218:14;;;;20210:50;;;;-1:-1:-1;;;20210:50:0;;8762:2:1;20210:50:0;;;8744:21:1;8801:2;8781:18;;;8774:30;-1:-1:-1;;;8820:18:1;;;8813:53;8883:18;;20210:50:0;8560:347:1;20210:50:0;31221:27:::1;31231:10;31243:4;31221:9;:27::i;:::-;31217:367;;;31274:10;31265:20;::::0;;;:8:::1;:20;::::0;;;;;;;:26;;;;;;;;:33:::1;;:48:::0;;31302:11;;31265:20;:48:::1;::::0;31302:11;;31265:48:::1;:::i;:::-;::::0;;;-1:-1:-1;31365:29:0::1;::::0;-1:-1:-1;31377:10:0::1;31389:4:::0;31365:11:::1;:29::i;:::-;31337:10;31328:20;::::0;;;:8:::1;:20;::::0;;;;;;;:26;;;;;;;;:33:::1;;:66:::0;;:33;;:20;:66:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;31418:10:0::1;31409:20;::::0;;;:8:::1;:20;::::0;;;;;;;:26;;;;;;;;31444:15:::1;31409:32;::::0;;::::1;:50:::0;31217:367:::1;;;31521:51;::::0;;::::1;::::0;::::1;::::0;;31528:10:::1;31521:51:::0;;;31540:15:::1;31521:51;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;31521:51:0;;;;;;31492:20;;;:8:::1;:20:::0;;;;;:26;;;;;;;;;:80;;;;-1:-1:-1;;;;;;31492:80:0::1;-1:-1:-1::0;;;;;31492:80:0;;::::1;;::::0;;;-1:-1:-1;31492:80:0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;31217:367:::1;31618:11;31596:5;31602:4;31596:11;;;;;;;;:::i;:::-;;;;;;;;;;;:18;;;:33;;;;;;;:::i;:::-;;;;;;;;31655:11;31640;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;31677:30:0::1;::::0;-1:-1:-1;31683:10:0::1;31695:11:::0;31677:5:::1;:30::i;:::-;31130:585:::0;;:::o;23620:402::-;15021:6;;23705:4;;-1:-1:-1;;;;;15021:6:0;351:10;15083:23;15075:68;;;;-1:-1:-1;;;15075:68:0;;;;;;;:::i;:::-;23765:6:::1;23745:13;2218:12:::0;;;2130:108;23745:13:::1;:17;::::0;23761:1:::1;23745:17;:::i;:::-;:26;;;;:::i;:::-;23729:12;:42;;23721:111;;;::::0;-1:-1:-1;;;23721:111:0;;9509:2:1;23721:111:0::1;::::0;::::1;9491:21:1::0;9548:2;9528:18;;;9521:30;9587:34;9567:18;;;9560:62;9658:26;9638:18;;;9631:54;9702:19;;23721:111:0::1;9307:420:1::0;23721:111:0::1;23886:4;23866:13;2218:12:::0;;;2130:108;23866:13:::1;:17;::::0;23882:1:::1;23866:17;:::i;:::-;:24;;;;:::i;:::-;23850:12;:40;;23842:108;;;::::0;-1:-1:-1;;;23842:108:0;;9934:2:1;23842:108:0::1;::::0;::::1;9916:21:1::0;9973:2;9953:18;;;9946:30;10012:34;9992:18;;;9985:62;10083:25;10063:18;;;10056:53;10126:19;;23842:108:0::1;9732:419:1::0;23842:108:0::1;-1:-1:-1::0;23960:19:0::1;:34:::0;;;24011:4:::1;15154:1;23620:402:::0;;;:::o;1917:104::-;1973:13;2006:7;1999:14;;;;;:::i;3501:438::-;351:10;3594:4;3677:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3677:27:0;;;;;;;;;;3594:4;;351:10;3723:35;;;;3715:85;;;;-1:-1:-1;;;3715:85:0;;10358:2:1;3715:85:0;;;10340:21:1;10397:2;10377:18;;;10370:30;10436:34;10416:18;;;10409:62;-1:-1:-1;;;10487:18:1;;;10480:35;10532:19;;3715:85:0;10156:401:1;3715:85:0;3836:60;3845:5;3852:7;3880:15;3861:16;:34;3836:8;:60::i;2381:193::-;2460:4;351:10;2516:28;351:10;2533:2;2537:6;2516:9;:28::i;22412:134::-;15021:6;;-1:-1:-1;;;;;15021:6:0;351:10;15083:23;15075:68;;;;-1:-1:-1;;;15075:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22499:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;22499:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22412:134::o;21677:635::-;15021:6;;-1:-1:-1;;;;;15021:6:0;351:10;15083:23;15075:68;;;;-1:-1:-1;;;15075:68:0;;;;;;;:::i;:::-;21764:15:::1;;;;;;;;;-1:-1:-1::0;;;;;21764:15:0::1;-1:-1:-1::0;;;;;21764:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21746:55:0::1;;21810:4;21817:15;;;;;;;;;-1:-1:-1::0;;;;;21817:15:0::1;-1:-1:-1::0;;;;;21817:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21746:94;::::0;-1:-1:-1;;;;;;21746:94:0::1;::::0;;;;;;-1:-1:-1;;;;;11048:15:1;;;21746:94:0::1;::::0;::::1;11030:34:1::0;11100:15;;11080:18;;;11073:43;10965:18;;21746:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21730:13;:110:::0;;-1:-1:-1;;;;;;21730:110:0::1;-1:-1:-1::0;;;;;21730:110:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;21851:55:0;;;:31:::1;:55;::::0;;;;;;;:62;;-1:-1:-1;;21851:62:0;;::::1;-1:-1:-1::0;21851:62:0;;::::1;::::0;;;21959:13;;;::::1;21924:50:::0;;:26:::1;:50:::0;;;;;;:57;;;;::::1;;::::0;;22026:15:::1;::::0;21994:75:::1;::::0;22011:4:::1;::::0;22026:15:::1;22044:24;22011:4:::0;22044:9:::1;:24::i;21994:75::-;22080:15;::::0;-1:-1:-1;;;;;22080:15:0::1;:31;22119:21;22165:4;22185:24;22165:4:::0;22185:9:::1;:24::i;:::-;22224:1;22240::::0;22256:7:::1;15021:6:::0;;-1:-1:-1;;;;;15021:6:0;;14948:87;22256:7:::1;22278:15;22080:224;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21677:635::o:0;32072:495::-;20218:14;;;;20210:50;;;;-1:-1:-1;;;20210:50:0;;8762:2:1;20210:50:0;;;8744:21:1;8801:2;8781:18;;;8774:30;-1:-1:-1;;;8820:18:1;;;8813:53;8883:18;;20210:50:0;8560:347:1;20210:50:0;32148:27:::1;32158:10;32170:4;32148:9;:27::i;:::-;32140:56;;;::::0;-1:-1:-1;;;32140:56:0;;6951:2:1;32140:56:0::1;::::0;::::1;6933:21:1::0;6990:2;6970:18;;;6963:30;-1:-1:-1;;;7009:18:1;;;7002:46;7065:18;;32140:56:0::1;6749:340:1::0;32140:56:0::1;32209:14;32226:28;32237:10;32249:4;32226:10;:28::i;:::-;32281:10;32267:25;::::0;;;:13:::1;:25:::0;;;;;;:53;;::::1;::::0;;::::1;::::0;;;;;;;;32304:15:::1;32267:53:::0;::::1;::::0;;;;32331:33;;::::1;:46:::0;;;;::::1;::::0;;;;;;;::::1;::::0;;;32388:12:::1;:22:::0;;32209:45;;-1:-1:-1;32209:45:0;;32388:12;;32267:25;32388:22:::1;::::0;32209:45;;32388:22:::1;:::i;:::-;::::0;;;-1:-1:-1;32423:25:0::1;::::0;-1:-1:-1;32429:10:0::1;32441:6:::0;32423:5:::1;:25::i;:::-;-1:-1:-1::0;32470:10:0::1;32461:20;::::0;;;:8:::1;:20;::::0;;;;;;;:26;;;;;;;;;32496:15:::1;32461:32;::::0;::::1;:50:::0;32522:33:::1;;:37:::0;32072:495::o;29537:105::-;20034:16;;-1:-1:-1;;;;;20034:16:0;351:10;20034:32;;:59;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;15021:6:0;351:10;20070:23;20034:59;20026:117;;;;-1:-1:-1;;;20026:117:0;;;;;;;:::i;:::-;29591:43:::1;29609:24;29627:4;29609:9;:24::i;:::-;29591:17;:43::i;15282:201::-:0;15021:6;;-1:-1:-1;;;;;15021:6:0;351:10;15083:23;15075:68;;;;-1:-1:-1;;;15075:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15371:22:0;::::1;15363:73;;;::::0;-1:-1:-1;;;15363:73:0;;12252:2:1;15363:73:0::1;::::0;::::1;12234:21:1::0;12291:2;12271:18;;;12264:30;12330:34;12310:18;;;12303:62;-1:-1:-1;;;12381:18:1;;;12374:36;12427:19;;15363:73:0::1;12050:402:1::0;15363:73:0::1;15447:28;15466:8;15447:18;:28::i;29954:133::-:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;30058:21:0;;-1:-1:-1;30058:21:0;;;;;;;;;30051:28;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30051:28:0;30058:21;;30051:28;;30058:21;;30051:28;;30058:21;30051:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29954:133;;;:::o;22827:207::-;20034:16;;-1:-1:-1;;;;;20034:16:0;351:10;20034:32;;:59;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;15021:6:0;351:10;20070:23;20034:59;20026:117;;;;-1:-1:-1;;;20026:117:0;;;;;;;:::i;:::-;22916:15:::1;22935:1;22916:20:::0;22907:72:::1;;;::::0;-1:-1:-1;;;22907:72:0;;12659:2:1;22907:72:0::1;::::0;::::1;12641:21:1::0;12698:2;12678:18;;;12671:30;12737:34;12717:18;;;12710:62;-1:-1:-1;;;12788:18:1;;;12781:36;12834:19;;22907:72:0::1;12457:402:1::0;22907:72:0::1;22990:14;:36:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22990:36:0;;;;;::::1;::::0;22827:207::o;5632:380::-;-1:-1:-1;;;;;5768:19:0;;5760:68;;;;-1:-1:-1;;;5760:68:0;;13066:2:1;5760:68:0;;;13048:21:1;13105:2;13085:18;;;13078:30;13144:34;13124:18;;;13117:62;-1:-1:-1;;;13195:18:1;;;13188:34;13239:19;;5760:68:0;12864:400:1;5760:68:0;-1:-1:-1;;;;;5847:21:0;;5839:68;;;;-1:-1:-1;;;5839:68:0;;13471:2:1;5839:68:0;;;13453:21:1;13510:2;13490:18;;;13483:30;13549:34;13529:18;;;13522:62;-1:-1:-1;;;13600:18:1;;;13593:32;13642:19;;5839:68:0;13269:398:1;5839:68:0;-1:-1:-1;;;;;5920:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5972:32;;345:25:1;;;5972:32:0;;318:18:1;5972:32:0;;;;;;;5632:380;;;:::o;6020:453::-;-1:-1:-1;;;;;2698:18:0;;;6155:24;2698:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;6222:37:0;;6218:248;;6304:6;6284:16;:26;;6276:68;;;;-1:-1:-1;;;6276:68:0;;13874:2:1;6276:68:0;;;13856:21:1;13913:2;13893:18;;;13886:30;13952:31;13932:18;;;13925:59;14001:18;;6276:68:0;13672:353:1;6276:68:0;6388:51;6397:5;6404:7;6432:6;6413:16;:25;6388:8;:51::i;:::-;6144:329;6020:453;;;:::o;24165:2980::-;-1:-1:-1;;;;;24297:18:0;;24289:68;;;;-1:-1:-1;;;24289:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24376:16:0;;24368:64;;;;-1:-1:-1;;;24368:64:0;;;;;;;:::i;:::-;24457:6;24467:1;24457:11;24453:93;;24485:28;24501:4;24507:2;24511:1;24485:15;:28::i;24453:93::-;24562:14;;;;24558:1355;;;15021:6;;-1:-1:-1;;;;;24615:15:0;;;15021:6;;24615:15;;;;:49;;-1:-1:-1;15021:6:0;;-1:-1:-1;;;;;24651:13:0;;;15021:6;;24651:13;;24615:49;:91;;;;-1:-1:-1;;;;;;24685:21:0;;24699:6;24685:21;;24615:91;:122;;;;-1:-1:-1;24728:9:0;;-1:-1:-1;;;24728:9:0;;;;24727:10;24615:122;24593:1309;;;15021:6;;-1:-1:-1;;;;;24776:13:0;;;15021:6;;24776:13;;;;:47;;-1:-1:-1;24807:15:0;;-1:-1:-1;;;;;24793:30:0;;;24807:15;;24793:30;;24776:47;:79;;;;-1:-1:-1;24841:13:0;;-1:-1:-1;;;;;24827:28:0;;;24841:13;;24827:28;;24776:79;24772:336;;;24912:9;24887:35;;;;:24;:35;;;;;;24925:12;-1:-1:-1;24879:136:0;;;;-1:-1:-1;;;24879:136:0;;15042:2:1;24879:136:0;;;15024:21:1;15081:2;15061:18;;;15054:30;15120:34;15100:18;;;15093:62;15191:34;15171:18;;;15164:62;-1:-1:-1;;;15242:19:1;;;15235:40;15292:19;;24879:136:0;14840:477:1;24879:136:0;25063:9;25038:35;;;;:24;:35;;;;;25076:12;25038:50;;24772:336;-1:-1:-1;;;;;25132:32:0;;;;;;:26;:32;;;;;;;;:72;;;;-1:-1:-1;;;;;;25169:35:0;;;;;;:31;:35;;;;;;;;25168:36;25132:72;25128:759;;;25247:20;;25237:6;:30;;25229:101;;;;-1:-1:-1;;;25229:101:0;;15524:2:1;25229:101:0;;;15506:21:1;15563:2;15543:18;;;15536:30;15602:34;15582:18;;;15575:62;15673:28;15653:18;;;15646:56;15719:19;;25229:101:0;15322:422:1;25229:101:0;25387:9;;25370:13;25380:2;25370:9;:13::i;:::-;25361:22;;:6;:22;:::i;:::-;:35;;25353:79;;;;-1:-1:-1;;;25353:79:0;;15951:2:1;25353:79:0;;;15933:21:1;15990:2;15970:18;;;15963:30;16029:33;16009:18;;;16002:61;16080:18;;25353:79:0;15749:355:1;25353:79:0;25128:759;;;-1:-1:-1;;;;;25481:30:0;;;;;;:26;:30;;;;;;;;:72;;;;-1:-1:-1;;;;;;25516:37:0;;;;;;:31;:37;;;;;;;;25515:38;25481:72;25477:410;;;25596:20;;25586:6;:30;;25578:102;;;;-1:-1:-1;;;25578:102:0;;16311:2:1;25578:102:0;;;16293:21:1;16350:2;16330:18;;;16323:30;16389:34;16369:18;;;16362:62;16460:29;16440:18;;;16433:57;16507:19;;25578:102:0;16109:423:1;25477:410:0;-1:-1:-1;;;;;25728:35:0;;;;;;:31;:35;;;;;;;;25723:164;;25822:9;;25805:13;25815:2;25805:9;:13::i;:::-;25796:22;;:6;:22;:::i;:::-;:35;;25788:79;;;;-1:-1:-1;;;25788:79:0;;15951:2:1;25788:79:0;;;15933:21:1;15990:2;15970:18;;;15963:30;16029:33;16009:18;;;16002:61;16080:18;;25788:79:0;15749:355:1;25788:79:0;25927:28;25958:24;25976:4;25958:9;:24::i;:::-;26034:19;;25927:55;;-1:-1:-1;26010:43:0;;;;;;;26082:34;;-1:-1:-1;26107:9:0;;-1:-1:-1;;;26107:9:0;;;;26106:10;26082:34;:84;;;;-1:-1:-1;;;;;;26134:32:0;;;;;;:26;:32;;;;;;;;26133:33;26082:84;:127;;;;-1:-1:-1;;;;;;26184:25:0;;;;;;:19;:25;;;;;;;;26183:26;26082:127;:168;;;;-1:-1:-1;;;;;;26227:23:0;;;;;;:19;:23;;;;;;;;26226:24;26082:168;26064:298;;;26277:9;:16;;-1:-1:-1;;;;26277:16:0;-1:-1:-1;;;26277:16:0;;;26308:10;:8;:10::i;:::-;26333:9;:17;;-1:-1:-1;;;;26333:17:0;;;26064:298;26390:9;;-1:-1:-1;;;;;26430:25:0;;26374:12;26430:25;;;:19;:25;;;;;;26390:9;-1:-1:-1;;;26390:9:0;;;;;26389:10;;26430:25;;:66;;-1:-1:-1;;;;;;26473:23:0;;;;;;:19;:23;;;;;;;;26430:66;:154;;;-1:-1:-1;;;;;;26516:32:0;;;;;;:26;:32;;;;;;;;26515:33;:68;;;;-1:-1:-1;;;;;;26553:30:0;;;;;;:26;:30;;;;;;;;26552:31;26515:68;26412:199;;;-1:-1:-1;26606:5:0;26412:199;26632:12;26663:7;26659:433;;;26694:30;26720:3;26694:21;26705:9;;26694:6;:10;;:21;;;;:::i;:::-;:25;;:30::i;:::-;26687:37;;26785:9;;26769:13;;26762:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;26739:19;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;26845:9:0;;26834:8;;26827:15;;:4;:15;:::i;:::-;:27;;;;:::i;:::-;26809:14;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;26915:9:0;;26899:13;;26892:20;;:4;:20;:::i;:::-;:32;;;;:::i;:::-;26869:19;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;26957:8:0;;26953:91;;26986:42;27002:4;27016;27023;26986:15;:42::i;:::-;27066:14;27076:4;27066:14;;:::i;:::-;;;26659:433;27104:33;27120:4;27126:2;27130:6;27104:15;:33::i;:::-;24278:2867;;;;24165:2980;;;:::o;17062:98::-;17120:7;17147:5;17151:1;17147;:5;:::i;:::-;17140:12;17062:98;-1:-1:-1;;;17062:98:0:o;4626:399::-;-1:-1:-1;;;;;4710:21:0;;4702:65;;;;-1:-1:-1;;;4702:65:0;;16739:2:1;4702:65:0;;;16721:21:1;16778:2;16758:18;;;16751:30;16817:33;16797:18;;;16790:61;16868:18;;4702:65:0;16537:355:1;4702:65:0;4858:6;4842:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;4875:18:0;;:9;:18;;;;;;;;;;:28;;4897:6;;4875:9;:28;;4897:6;;4875:28;:::i;:::-;;;;-1:-1:-1;;4919:37:0;;345:25:1;;;-1:-1:-1;;;;;4919:37:0;;;4936:1;;4919:37;;333:2:1;318:18;4919:37:0;;;;;;;31130:585;;:::o;30440:682::-;30513:7;30541:23;30551:6;30559:4;30541:9;:23::i;:::-;30533:56;;;;-1:-1:-1;;;30533:56:0;;17099:2:1;30533:56:0;;;17081:21:1;17138:2;17118:18;;;17111:30;-1:-1:-1;;;17157:18:1;;;17150:50;17217:18;;30533:56:0;16897:344:1;30533:56:0;-1:-1:-1;;;;;29909:16:0;;30602:14;29909:16;;;:8;:16;;;;;;;;:22;;;;;;;;:29;;;;30719:9;30686:28;;;;29909:29;;30602:14;30686:43;;:28;:32;:43::i;:::-;30654:75;-1:-1:-1;30740:31:0;30774:30;:15;30794:9;30774:19;:30::i;:::-;30740:64;-1:-1:-1;30815:21:0;30839:50;30740:64;30867:21;30839:27;:50::i;:::-;30815:74;;30902:12;30917:41;30954:3;30917:32;30928:14;30943:4;30928:20;;;;;;;;:::i;:::-;;;;;;;;;30917:6;:10;;:32;;;;:::i;:41::-;30902:56;-1:-1:-1;30969:20:0;30992:37;31026:2;30992:29;31026:2;30992:29;31010:2;30992:29;30902:56;31001:3;30992:8;:13::i;:37::-;30969:60;-1:-1:-1;31040:14:0;31057:31;30969:60;31074:13;31057:16;:31::i;:::-;31040:48;30440:682;-1:-1:-1;;;;;;;;;;30440:682:0:o;15491:191::-;15584:6;;;-1:-1:-1;;;;;15601:17:0;;;-1:-1:-1;;;;;;15601:17:0;;;;;;;15634:40;;15584:6;;;15601:17;15584:6;;15634:40;;15565:16;;15634:40;15554:128;15491:191;:::o;5033:591::-;-1:-1:-1;;;;;5117:21:0;;5109:67;;;;-1:-1:-1;;;5109:67:0;;17448:2:1;5109:67:0;;;17430:21:1;17487:2;17467:18;;;17460:30;17526:34;17506:18;;;17499:62;-1:-1:-1;;;17577:18:1;;;17570:31;17618:19;;5109:67:0;17246:397:1;5109:67:0;-1:-1:-1;;;;;5276:18:0;;5251:22;5276:18;;;;;;;;;;;5313:24;;;;5305:71;;;;-1:-1:-1;;;5305:71:0;;17850:2:1;5305:71:0;;;17832:21:1;17889:2;17869:18;;;17862:30;17928:34;17908:18;;;17901:62;-1:-1:-1;;;17979:18:1;;;17972:32;18021:19;;5305:71:0;17648:398:1;5305:71:0;-1:-1:-1;;;;;5412:18:0;;:9;:18;;;;;;;;;;5433:23;;;5412:44;;5478:12;:22;;5450:6;;5412:9;5478:22;;5450:6;;5478:22;:::i;:::-;;;;-1:-1:-1;;5518:37:0;;345:25:1;;;5544:1:0;;-1:-1:-1;;;;;5518:37:0;;;;;333:2:1;318:18;5518:37:0;;;;;;;22080:224:::1;;;21677:635::o:0;27153:477::-;27245:16;;;27259:1;27245:16;;;;;;;;27221:21;;27245:16;;;;;;;;;;-1:-1:-1;27245:16:0;27221:40;;27290:4;27272;27277:1;27272:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27272:23:0;;;:7;;;;;;;;;;:23;;;;27316:15;;:22;;;-1:-1:-1;;;27316:22:0;;;;:15;;;;;:20;;:22;;;;;27272:7;;27316:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27306:4;27311:1;27306:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27306:32:0;;;:7;;;;;;;;;:32;27383:15;;27351:62;;27368:4;;27383:15;27401:11;27351:8;:62::i;:::-;27426:15;;:196;;-1:-1:-1;;;27426:196:0;;-1:-1:-1;;;;;27426:15:0;;;;:66;;:196;;27507:11;;27426:15;;27549:4;;27576;;27596:15;;27426:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27210:420;27153:477;:::o;3947:671::-;-1:-1:-1;;;;;4078:18:0;;4070:68;;;;-1:-1:-1;;;4070:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4157:16:0;;4149:64;;;;-1:-1:-1;;;4149:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4299:15:0;;4277:19;4299:15;;;;;;;;;;;4333:21;;;;4325:72;;;;-1:-1:-1;;;4325:72:0;;19370:2:1;4325:72:0;;;19352:21:1;19409:2;19389:18;;;19382:30;19448:34;19428:18;;;19421:62;-1:-1:-1;;;19499:18:1;;;19492:36;19545:19;;4325:72:0;19168:402:1;4325:72:0;-1:-1:-1;;;;;4433:15:0;;;:9;:15;;;;;;;;;;;4451:20;;;4433:38;;4493:13;;;;;;;;:23;;4465:6;;4433:9;4493:23;;4465:6;;4493:23;:::i;:::-;;;;;;;;4549:2;-1:-1:-1;;;;;4534:26:0;4543:4;-1:-1:-1;;;;;4534:26:0;;4553:6;4534:26;;;;345:25:1;;333:2;318:18;;199:177;4534:26:0;;;;;;;;4573:37;21677:635;27638:1386;27678:23;27704:24;27722:4;27704:9;:24::i;:::-;27678:50;;27739:25;27811:14;;27789:19;;27767;;:41;;;;:::i;:::-;:58;;;;:::i;:::-;27739:86;-1:-1:-1;27850:20:0;;;:46;;-1:-1:-1;27874:22:0;;27850:46;27846:59;;;27898:7;;27638:1386::o;27846:59::-;27937:19;;27919:15;:37;27915:80;;;27976:19;;27958:37;;27915:80;28010:23;28096:1;28076:17;28054:19;;28036:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;28010:87;-1:-1:-1;28108:26:0;28137:36;:15;28010:87;28137:19;:36::i;:::-;28108:65;-1:-1:-1;28222:21:0;28256:37;28108:65;28256:17;:37::i;:::-;28314:18;28335:44;:21;28361:17;28335:25;:44::i;:::-;28314:65;;28390:23;28416:58;28456:17;28416:35;28431:19;;28416:10;:14;;:35;;;;:::i;:58::-;28390:84;;28485:18;28506:53;28541:17;28506:30;28521:14;;28506:10;:14;;:30;;;;:::i;:53::-;28485:74;-1:-1:-1;28570:23:0;28485:74;28596:28;28609:15;28596:10;:28;:::i;:::-;:41;;;;:::i;:::-;28680:1;28658:19;:23;;;28692:19;:23;;;28726:14;:18;;;28765:16;;28757:51;;28570:67;;-1:-1:-1;;;;;;28765:16:0;;28757:51;;;;;28792:15;;28757:51;;28680:1;28757:51;28792:15;28765:16;28757:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28827:17:0;;28819:47;;-1:-1:-1;;;;;28827:17:0;;;;28819:47;;;;;28855:10;;28827:17;28819:47;28827:17;28819:47;28855:10;28827:17;28819:47;;;;;;;;;;;;;;;;;;;;;28917:1;28899:15;:19;:42;;;;;28940:1;28922:15;:19;28899:42;28895:122;;;28958:47;28972:15;28989;28958:13;:47::i;:::-;27667:1357;;;;;;;;;27638:1386::o;17274:98::-;17332:7;17359:5;17363:1;17359;:5;:::i;17380:98::-;17438:7;17465:5;17469:1;17465;:5;:::i;17168:98::-;17226:7;17253:5;17257:1;17253;:5;:::i;29032:373::-;29147:15;;29115:62;;29132:4;;-1:-1:-1;;;;;29147:15:0;29165:11;29115:8;:62::i;:::-;29190:15;;29340:16;;29190:207;;-1:-1:-1;;;29190:207:0;;-1:-1:-1;;;;;29190:15:0;;;;:31;;29229:9;;29190:207;;29262:4;;29282:11;;29190:15;;;;29340:16;;29371:15;;29190:207;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29032:373;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:548::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;665:3;850:1;845:2;836:6;825:9;821:22;817:31;810:42;920:2;913;909:7;904:2;896:6;892:15;888:29;877:9;873:45;869:54;861:62;;;;381:548;;;;:::o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1835:456::-;1912:6;1920;1928;1981:2;1969:9;1960:7;1956:23;1952:32;1949:52;;;1997:1;1994;1987:12;1949:52;2036:9;2023:23;2055:31;2080:5;2055:31;:::i;:::-;2105:5;-1:-1:-1;2162:2:1;2147:18;;2134:32;2175:33;2134:32;2175:33;:::i;:::-;1835:456;;2227:7;;-1:-1:-1;;;2281:2:1;2266:18;;;;2253:32;;1835:456::o;2296:248::-;2364:6;2372;2425:2;2413:9;2404:7;2400:23;2396:32;2393:52;;;2441:1;2438;2431:12;2393:52;-1:-1:-1;;2464:23:1;;;2534:2;2519:18;;;2506:32;;-1:-1:-1;2296:248:1:o;2738:247::-;2797:6;2850:2;2838:9;2829:7;2825:23;2821:32;2818:52;;;2866:1;2863;2856:12;2818:52;2905:9;2892:23;2924:31;2949:5;2924:31;:::i;2990:160::-;3055:20;;3111:13;;3104:21;3094:32;;3084:60;;3140:1;3137;3130:12;3155:180;3211:6;3264:2;3252:9;3243:7;3239:23;3235:32;3232:52;;;3280:1;3277;3270:12;3232:52;3303:26;3319:9;3303:26;:::i;3548:315::-;3613:6;3621;3674:2;3662:9;3653:7;3649:23;3645:32;3642:52;;;3690:1;3687;3680:12;3642:52;3729:9;3716:23;3748:31;3773:5;3748:31;:::i;:::-;3798:5;-1:-1:-1;3822:35:1;3853:2;3838:18;;3822:35;:::i;:::-;3812:45;;3548:315;;;;;:::o;3868:388::-;3936:6;3944;3997:2;3985:9;3976:7;3972:23;3968:32;3965:52;;;4013:1;4010;4003:12;3965:52;4052:9;4039:23;4071:31;4096:5;4071:31;:::i;:::-;4121:5;-1:-1:-1;4178:2:1;4163:18;;4150:32;4191:33;4150:32;4191:33;:::i;:::-;4243:7;4233:17;;;3868:388;;;;;:::o;4261:439::-;4314:3;4352:5;4346:12;4379:6;4374:3;4367:19;4405:4;4434;4429:3;4425:14;4418:21;;4473:4;4466:5;4462:16;4496:1;4506:169;4520:6;4517:1;4514:13;4506:169;;;4581:13;;4569:26;;4615:12;;;;4650:15;;;;4542:1;4535:9;4506:169;;;-1:-1:-1;4691:3:1;;4261:439;-1:-1:-1;;;;;4261:439:1:o;4705:563::-;4894:2;4883:9;4876:21;4857:4;4932:6;4926:13;4975:4;4970:2;4959:9;4955:18;4948:32;5003:62;5061:2;5050:9;5046:18;5032:12;5003:62;:::i;:::-;4989:76;;5114:2;5106:6;5102:15;5096:22;5188:2;5184:7;5172:9;5164:6;5160:22;5156:36;5149:4;5138:9;5134:20;5127:66;5210:52;5255:6;5239:14;5210:52;:::i;:::-;5202:60;4705:563;-1:-1:-1;;;;;4705:563:1:o;5273:380::-;5352:1;5348:12;;;;5395;;;5416:61;;5470:4;5462:6;5458:17;5448:27;;5416:61;5523:2;5515:6;5512:14;5492:18;5489:38;5486:161;;5569:10;5564:3;5560:20;5557:1;5550:31;5604:4;5601:1;5594:15;5632:4;5629:1;5622:15;5486:161;;5273:380;;;:::o;5658:409::-;5860:2;5842:21;;;5899:2;5879:18;;;5872:30;5938:34;5933:2;5918:18;;5911:62;-1:-1:-1;;;6004:2:1;5989:18;;5982:43;6057:3;6042:19;;5658:409::o;6072:127::-;6133:10;6128:3;6124:20;6121:1;6114:31;6164:4;6161:1;6154:15;6188:4;6185:1;6178:15;6204:127;6265:10;6260:3;6256:20;6253:1;6246:31;6296:4;6293:1;6286:15;6320:4;6317:1;6310:15;7094:127;7155:10;7150:3;7146:20;7143:1;7136:31;7186:4;7183:1;7176:15;7210:4;7207:1;7200:15;7226:125;7291:9;;;7312:10;;;7309:36;;;7325:18;;:::i;7356:128::-;7423:9;;;7444:11;;;7441:37;;;7458:18;;:::i;7842:356::-;8044:2;8026:21;;;8063:18;;;8056:30;8122:34;8117:2;8102:18;;8095:62;8189:2;8174:18;;7842:356::o;8912:168::-;8985:9;;;9016;;9033:15;;;9027:22;;9013:37;9003:71;;9054:18;;:::i;9085:217::-;9125:1;9151;9141:132;;9195:10;9190:3;9186:20;9183:1;9176:31;9230:4;9227:1;9220:15;9258:4;9255:1;9248:15;9141:132;-1:-1:-1;9287:9:1;;9085:217::o;10562:251::-;10632:6;10685:2;10673:9;10664:7;10660:23;10656:32;10653:52;;;10701:1;10698;10691:12;10653:52;10733:9;10727:16;10752:31;10777:5;10752:31;:::i;11127:607::-;-1:-1:-1;;;;;11486:15:1;;;11468:34;;11533:2;11518:18;;11511:34;;;;11576:2;11561:18;;11554:34;;;;11619:2;11604:18;;11597:34;;;;11668:15;;;11662:3;11647:19;;11640:44;11448:3;11700:19;;11693:35;;;;11417:3;11402:19;;11127:607::o;11739:306::-;11827:6;11835;11843;11896:2;11884:9;11875:7;11871:23;11867:32;11864:52;;;11912:1;11909;11902:12;11864:52;11941:9;11935:16;11925:26;;11991:2;11980:9;11976:18;11970:25;11960:35;;12035:2;12024:9;12020:18;12014:25;12004:35;;11739:306;;;;;:::o;14030:401::-;14232:2;14214:21;;;14271:2;14251:18;;;14244:30;14310:34;14305:2;14290:18;;14283:62;-1:-1:-1;;;14376:2:1;14361:18;;14354:35;14421:3;14406:19;;14030:401::o;14436:399::-;14638:2;14620:21;;;14677:2;14657:18;;;14650:30;14716:34;14711:2;14696:18;;14689:62;-1:-1:-1;;;14782:2:1;14767:18;;14760:33;14825:3;14810:19;;14436:399::o;18183:980::-;18445:4;18493:3;18482:9;18478:19;18524:6;18513:9;18506:25;18550:2;18588:6;18583:2;18572:9;18568:18;18561:34;18631:3;18626:2;18615:9;18611:18;18604:31;18655:6;18690;18684:13;18721:6;18713;18706:22;18759:3;18748:9;18744:19;18737:26;;18798:2;18790:6;18786:15;18772:29;;18819:1;18829:195;18843:6;18840:1;18837:13;18829:195;;;18908:13;;-1:-1:-1;;;;;18904:39:1;18892:52;;18999:15;;;;18964:12;;;;18940:1;18858:9;18829:195;;;-1:-1:-1;;;;;;;19080:32:1;;;;19075:2;19060:18;;19053:60;-1:-1:-1;;;19144:3:1;19129:19;19122:35;19041:3;18183:980;-1:-1:-1;;;18183:980:1:o
Swarm Source
ipfs://4d5068e6aa149b6357a061d1d4bbf6d613771713fd7eddfeb552d4029e71c656
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.