ERC-20
Overview
Max Total Supply
50,928.715355467 ZST
Holders
95
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
6.313946698 ZSTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ZStable
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-29 */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.12; pragma experimental ABIEncoderV2; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library Constants { uint256 private constant MAX = ~uint256(0); uint256 private constant _launchSupply = 50000 * 10**9; uint256 private constant _largeTotal = (MAX - (MAX % _launchSupply)); uint256 private constant _baseExpansionFactor = 100; uint256 private constant _baseContractionFactor = 100; uint256 private constant _baseUtilityFee = 50; uint256 private constant _baseContractionCap = 1000; uint256 private constant _stabilizerFee = 250; uint256 private constant _stabilizationLowerBound = 50; uint256 private constant _stabilizationLowerReset = 75; uint256 private constant _stabilizationUpperBound = 150; uint256 private constant _stabilizationUpperReset = 125; uint256 private constant _stabilizePercent = 10; uint256 private constant _treasuryFee = 250; uint256 private constant _presaleMinIndividualCap = 1 ether; uint256 private constant _presaleMaxIndividualCap = 3 ether; uint256 private constant _presaleCap = 27500 * 10**9; uint256 private constant _maxPresaleGas = 200000000000; uint256 private constant _epochLength = 4 hours; uint256 private constant _liquidityReward = 2 * 10**9; uint256 private constant _minForLiquidity = 10 * 10**9; uint256 private constant _minForCallerLiquidity = 10 * 10**9; address private constant _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private constant _factoryAddress = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; address payable private constant _deployerAddress = 0x1e3d51F276cf92eE8BDa0A6394423dbaBb46268F; address private constant _treasuryAddress = 0x1e3d51F276cf92eE8BDa0A6394423dbaBb46268F; uint256 private constant _presaleRate = 22916; uint256 private constant _listingRate = 19444; string private constant _name = "ZStable"; string private constant _symbol = "ZST"; uint8 private constant _decimals = 9; /****** Getters *******/ function getPresaleRate() internal pure returns (uint256) { return _presaleRate; } function getListingRate() internal pure returns (uint256) { return _listingRate; } function getLaunchSupply() internal pure returns (uint256) { return _launchSupply; } function getLargeTotal() internal pure returns (uint256) { return _largeTotal; } function getPresaleCap() internal pure returns (uint256) { return _presaleCap; } function getPresaleMinIndividualCap() internal pure returns (uint256) { return _presaleMinIndividualCap; } function getPresaleMaxIndividualCap() internal pure returns (uint256) { return _presaleMaxIndividualCap; } function getMaxPresaleGas() internal pure returns (uint256) { return _maxPresaleGas; } function getBaseExpansionFactor() internal pure returns (uint256) { return _baseExpansionFactor; } function getBaseContractionFactor() internal pure returns (uint256) { return _baseContractionFactor; } function getBaseContractionCap() internal pure returns (uint256) { return _baseContractionCap; } function getBaseUtilityFee() internal pure returns (uint256) { return _baseUtilityFee; } function getStabilizerFee() internal pure returns (uint256) { return _stabilizerFee; } function getStabilizationLowerBound() internal pure returns (uint256) { return _stabilizationLowerBound; } function getStabilizationLowerReset() internal pure returns (uint256) { return _stabilizationLowerReset; } function getStabilizationUpperBound() internal pure returns (uint256) { return _stabilizationUpperBound; } function getStabilizationUpperReset() internal pure returns (uint256) { return _stabilizationUpperReset; } function getStabilizePercent() internal pure returns (uint256) { return _stabilizePercent; } function getTreasuryFee() internal pure returns (uint256) { return _treasuryFee; } function getEpochLength() internal pure returns (uint256) { return _epochLength; } function getLiquidityReward() internal pure returns (uint256) { return _liquidityReward; } function getMinForLiquidity() internal pure returns (uint256) { return _minForLiquidity; } function getMinForCallerLiquidity() internal pure returns (uint256) { return _minForCallerLiquidity; } function getRouterAdd() internal pure returns (address) { return _routerAddress; } function getFactoryAdd() internal pure returns (address) { return _factoryAddress; } function getDeployerAdd() internal pure returns (address payable) { return _deployerAddress; } function getTreasuryAdd() internal pure returns (address) { return _treasuryAddress; } function getName() internal pure returns (string memory) { return _name; } function getSymbol() internal pure returns (string memory) { return _symbol; } function getDecimals() internal pure returns (uint8) { return _decimals; } } contract State { mapping (address => uint256) _largeBalances; mapping (address => mapping (address => uint256)) _allowances; // Supported pools and data for measuring mint & burn factors struct PoolCounter { address pairToken; uint256 tokenBalance; uint256 pairTokenBalance; uint256 lpBalance; uint256 startTokenBalance; uint256 startPairTokenBalance; } address[] _supportedPools; mapping (address => PoolCounter) _poolCounters; mapping (address => bool) _isSupportedPool; address _mainPool; uint256 _currentEpoch; //Creating locked balances struct LockBox { address beneficiary; uint256 lockedBalance; uint256 unlockTime; bool locked; } LockBox[] _lockBoxes; mapping(address => uint256) _lockedBalance; mapping(address => bool) _hasLockedBalance; uint256 _totalLockedBalance; uint256 _largeTotal; uint256 _totalSupply; address _liquidityReserve; address _stabilizer; bool _presaleDone; address _presaleCon; bool _paused; bool _taxLess; mapping(address=>bool) _isTaxlessSetter; } contract Getters is State { using SafeMath for uint256; using Address for address; function getLargeBalances(address account) public view returns (uint256) { return _largeBalances[account]; } function getAllowances(address account, address spender) public view returns (uint256) { return _allowances[account][spender]; } function getSupportedPools(uint256 index) public view returns (address) { return _supportedPools[index]; } function getPoolCounters(address pool) public view returns (address, uint256, uint256, uint256, uint256, uint256) { PoolCounter memory pc = _poolCounters[pool]; return (pc.pairToken, pc.tokenBalance, pc.pairTokenBalance, pc.lpBalance, pc.startTokenBalance, pc.startPairTokenBalance); } function isSupportedPool(address pool) public view returns (bool) { return _isSupportedPool[pool]; } function mainPool() public view returns (address) { return _mainPool; } function getCurrentEpoch() public view returns (uint256) { return _currentEpoch; } function getLockBoxes(uint256 box) public view returns (address, uint256, uint256, bool) { LockBox memory lb = _lockBoxes[box]; return (lb.beneficiary, lb.lockedBalance, lb.unlockTime, lb.locked); } function getLockedBalance(address account) public view returns (uint256) { return _lockedBalance[account]; } function hasLockedBalance(address account) public view returns (bool) { return _hasLockedBalance[account]; } function getTotalLockedBalance() public view returns (uint256) { return _totalLockedBalance; } function getLargeTotal() public view returns (uint256) { return _largeTotal; } function getTotalSupply() public view returns (uint256) { return _totalSupply; } function getLiquidityReserve() public view returns (address) { return _liquidityReserve; } function getStabilizer() public view returns (address) { return _stabilizer; } function isPresaleDone() public view returns (bool) { return _presaleDone; } function getPresaleAddress() public view returns (address) { return _presaleCon; } function isPaused() public view returns (bool) { return _paused; } function isTaxLess() public view returns (bool) { return _taxLess; } function isTaxlessSetter(address account) public view returns (bool) { return _isTaxlessSetter[account]; } function getUniswapRouter() public view returns (IUniswapV2Router02) { return IUniswapV2Router02(Constants.getRouterAdd()); } function getUniswapFactory() public view returns (IUniswapV2Factory) { return IUniswapV2Factory(Constants.getFactoryAdd()); } function getFactor() public view returns(uint256) { if (_presaleDone) { return _largeTotal.div(_totalSupply); } else { return _largeTotal.div(Constants.getLaunchSupply()); } } function getUpdatedPoolCounters(address pool, address pairToken) public view returns (uint256, uint256, uint256) { uint256 lpBalance = IERC20(pool).totalSupply(); uint256 tokenBalance = IERC20(address(this)).balanceOf(pool); uint256 pairTokenBalance = IERC20(address(pairToken)).balanceOf(pool); return (tokenBalance, pairTokenBalance, lpBalance); } function getMintValue(address sender, uint256 amount) internal view returns(uint256, uint256, uint256) { uint256 expansionR = (_poolCounters[sender].pairTokenBalance).mul(_poolCounters[sender].startTokenBalance).mul(100).div(_poolCounters[sender].startPairTokenBalance).div(_poolCounters[sender].tokenBalance); uint256 mintAmount; if (expansionR > (Constants.getBaseExpansionFactor()).add(10000).div(100)) { uint256 mintFactor = expansionR.mul(expansionR); mintAmount = amount.mul(mintFactor.sub(10000)).div(10000); } else { mintAmount = amount.mul(Constants.getBaseExpansionFactor()).div(10000); } return (mintAmount.mul(Constants.getStabilizerFee()).div(10000),mintAmount.mul(Constants.getTreasuryFee()).div(10000),mintAmount); } function getBurnValues(address recipient, uint256 amount) internal view returns(uint256, uint256) { uint256 currentFactor = getFactor(); uint256 contractionR; if (isSupportedPool(recipient)) { contractionR = (_poolCounters[recipient].tokenBalance).mul(_poolCounters[recipient].startPairTokenBalance).mul(100).div(_poolCounters[recipient].pairTokenBalance).div(_poolCounters[recipient].startTokenBalance); } else { contractionR = (_poolCounters[_mainPool].tokenBalance).mul(_poolCounters[_mainPool].startPairTokenBalance).mul(100).div(_poolCounters[_mainPool].pairTokenBalance).div(_poolCounters[_mainPool].startTokenBalance); } uint256 burnAmount; if (contractionR > (Constants.getBaseContractionFactor().add(10000)).div(100)) { uint256 burnFactor = contractionR.mul(contractionR); burnAmount = amount.mul(burnFactor.sub(10000)).div(10000); if (burnAmount > amount.mul(Constants.getBaseContractionCap()).div(10000)) burnAmount = amount.mul(Constants.getBaseContractionCap()).div(10000); } else { burnAmount = amount.mul(Constants.getBaseContractionFactor()).div(10000); } return (burnAmount, burnAmount.mul(currentFactor)); } function getUtilityFee(uint256 amount) internal view returns(uint256, uint256) { uint256 currentFactor = getFactor(); uint256 utilityFee = amount.mul(Constants.getBaseUtilityFee()).div(10000); return (utilityFee, utilityFee.mul(currentFactor)); } function getMintRate(address pool) external view returns (uint256) { uint256 expansionR = (_poolCounters[pool].pairTokenBalance).mul(_poolCounters[pool].startTokenBalance).mul(100).div(_poolCounters[pool].startPairTokenBalance).div(_poolCounters[pool].tokenBalance); if (expansionR > (Constants.getBaseExpansionFactor()).add(10000).div(100)) { uint256 mintFactor = expansionR.mul(expansionR); return mintFactor.sub(10000); } else { return Constants.getBaseExpansionFactor(); } } function getBurnRate(address pool) external view returns (uint256) { uint256 contractionR = (_poolCounters[pool].tokenBalance).mul(_poolCounters[pool].startPairTokenBalance).mul(100).div(_poolCounters[pool].pairTokenBalance).div(_poolCounters[pool].startTokenBalance); uint256 burnRate; if (contractionR > (Constants.getBaseContractionFactor().add(10000)).div(100)) { uint256 burnFactor = contractionR.mul(contractionR); burnRate = burnFactor.sub(10000); if (burnRate > Constants.getBaseContractionCap()) { return Constants.getBaseContractionCap(); } return burnRate; } else { return Constants.getBaseContractionFactor(); } } } contract Setters is State, Getters { function updatePresaleAddress(address presaleAddress) internal { _presaleCon = presaleAddress; } function setAllowances(address owner, address spender, uint256 amount) internal { _allowances[owner][spender] = amount; } function addToAccount(address account, uint256 amount) internal { uint256 currentFactor = getFactor(); uint256 largeAmount = amount.mul(currentFactor); _largeBalances[account] = _largeBalances[account].add(largeAmount); _totalSupply = _totalSupply.add(amount); } function addToAll(uint256 amount) internal { _totalSupply = _totalSupply.add(amount); } function initializeEpoch() internal { _currentEpoch = now; } function updateEpoch() internal { initializeEpoch(); for (uint256 i=0; i<_supportedPools.length; i++) { _poolCounters[_supportedPools[i]].startTokenBalance = _poolCounters[_supportedPools[i]].tokenBalance; _poolCounters[_supportedPools[i]].startPairTokenBalance = _poolCounters[_supportedPools[i]].pairTokenBalance; } } function initializeLargeTotal() internal { _largeTotal = Constants.getLargeTotal(); } function syncPair(address pool) internal returns(bool) { (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, _poolCounters[pool].pairToken); bool lpBurn = lpBalance < _poolCounters[pool].lpBalance; _poolCounters[pool].lpBalance = lpBalance; _poolCounters[pool].tokenBalance = tokenBalance; _poolCounters[pool].pairTokenBalance = pairTokenBalance; return (lpBurn); } function silentSyncPair(address pool) public { (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, _poolCounters[pool].pairToken); _poolCounters[pool].lpBalance = lpBalance; _poolCounters[pool].tokenBalance = tokenBalance; _poolCounters[pool].pairTokenBalance = pairTokenBalance; } function addSupportedPool(address pool, address pairToken) internal { require(!isSupportedPool(pool),"This pool is already supported"); _isSupportedPool[pool] = true; _supportedPools.push(pool); (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, pairToken); _poolCounters[pool] = PoolCounter(pairToken, tokenBalance, pairTokenBalance, lpBalance, tokenBalance, pairTokenBalance); } function removeSupportedPool(address pool) internal { require(isSupportedPool(pool), "This pool is currently not supported"); for (uint256 i = 0; i < _supportedPools.length; i++) { if (_supportedPools[i] == pool) { _supportedPools[i] = _supportedPools[_supportedPools.length - 1]; _isSupportedPool[pool] = false; delete _poolCounters[pool]; _supportedPools.pop(); break; } } } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Stabilizer { constructor() public { } } contract ZStable is Setters, Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; modifier onlyTaxless { require(isTaxlessSetter(_msgSender()),"not taxless"); _; } modifier onlyPresale { require(_msgSender()==getPresaleAddress(),"not presale"); require(!isPresaleDone(), "Presale over"); _; } modifier pausable { require(!isPaused(), "Paused"); _; } modifier taxlessTx { _taxLess = true; _; _taxLess = false; } constructor() public { updateEpoch(); initializeLargeTotal(); setStabilizer(address(new Stabilizer())); } function name() public view returns (string memory) { return Constants.getName(); } function symbol() public view returns (string memory) { return Constants.getSymbol(); } function decimals() public view returns (uint8) { return Constants.getDecimals(); } function totalSupply() public view override returns (uint256) { return getTotalSupply(); } function circulatingSupply() public view returns (uint256) { uint256 currentFactor = getFactor(); return getTotalSupply().sub(getTotalLockedBalance().div(currentFactor)).sub(balanceOf(address(this))).sub(balanceOf(getStabilizer())); } function balanceOf(address account) public view override returns (uint256) { uint256 currentFactor = getFactor(); if (hasLockedBalance(account)) return (getLargeBalances(account).add(getLockedBalance(account)).div(currentFactor)); return getLargeBalances(account).div(currentFactor); } function unlockedBalanceOf(address account) public view returns (uint256) { uint256 currentFactor = getFactor(); return getLargeBalances(account).div(currentFactor); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return getAllowances(owner,spender); } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), getAllowances(sender,_msgSender()).sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, getAllowances(_msgSender(),spender).add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, getAllowances(_msgSender(),spender).sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function mint(address to, uint256 amount) public onlyPresale { addToAccount(to,amount); emit Transfer(address(0),to,amount); } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); setAllowances(owner, spender, amount); emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) private pausable { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Amount must be greater than zero"); require(amount <= balanceOf(sender),"Amount exceeds balance"); require(amount <= unlockedBalanceOf(sender),"Amount exceeds unlocked balance"); require(isPresaleDone(),"Presale yet to close"); if (now > getCurrentEpoch().add(Constants.getEpochLength())) updateEpoch(); uint256 currentFactor = getFactor(); uint256 largeAmount = amount.mul(currentFactor); uint256 txType; if (isTaxLess()) { txType = 3; } else { bool lpBurn; if (isSupportedPool(sender)) { lpBurn = syncPair(sender); } else if (isSupportedPool(recipient)){ silentSyncPair(recipient); } else { silentSyncPair(_mainPool); } txType = _getTxType(sender, recipient, lpBurn); } // Buy Transaction from supported pools - requires mint, no utility fee if (txType == 1) { (uint256 stabilizerMint, uint256 treasuryMint, uint256 totalMint) = getMintValue(sender, amount); // uint256 mintSize = amount.div(100); _largeBalances[sender] = _largeBalances[sender].sub(largeAmount); _largeBalances[recipient] = _largeBalances[recipient].add(largeAmount); _largeBalances[getStabilizer()] = _largeBalances[getStabilizer()].add(stabilizerMint.mul(currentFactor)); _largeBalances[Constants.getTreasuryAdd()] = _largeBalances[Constants.getTreasuryAdd()].add(treasuryMint.mul(currentFactor)); _totalSupply = _totalSupply.add(totalMint); emit Transfer(sender, recipient, amount); emit Transfer(address(0),getStabilizer(),stabilizerMint); emit Transfer(address(0),Constants.getTreasuryAdd(),treasuryMint); } // Sells to supported pools or unsupported transfer - requires exit burn and utility fee else if (txType == 2) { (uint256 burnSize, uint256 largeBurnSize) = getBurnValues(recipient, amount); (uint256 utilityFee, uint256 largeUtilityFee) = getUtilityFee(amount); uint256 actualTransferAmount = amount.sub(burnSize).sub(utilityFee); uint256 largeTransferAmount = actualTransferAmount.mul(currentFactor); _largeBalances[sender] = _largeBalances[sender].sub(largeAmount); _largeBalances[recipient] = _largeBalances[recipient].add(largeTransferAmount); _largeBalances[_liquidityReserve] = _largeBalances[_liquidityReserve].add(largeUtilityFee); _totalSupply = _totalSupply.sub(burnSize); _largeTotal = _largeTotal.sub(largeBurnSize); emit Transfer(sender, recipient, actualTransferAmount); emit Transfer(sender, address(0), burnSize); emit Transfer(sender, _liquidityReserve, utilityFee); } // Add Liquidity via interface or Remove Liquidity Transaction to supported pools - no fee of any sort else if (txType == 3) { _largeBalances[sender] = _largeBalances[sender].sub(largeAmount); _largeBalances[recipient] = _largeBalances[recipient].add(largeAmount); emit Transfer(sender, recipient, amount); } } function _getTxType(address sender, address recipient, bool lpBurn) private returns(uint256) { uint256 txType = 2; if (isSupportedPool(sender)) { if (lpBurn) { txType = 3; } else { txType = 1; } } else if (sender == Constants.getRouterAdd()) { txType = 3; } return txType; } function setPresale(address presaleAdd) external onlyOwner() { require(!isPresaleDone(), "Presale is already completed"); updatePresaleAddress(presaleAdd); } function setPresaleDone() public payable onlyPresale { require(totalSupply() <= Constants.getLaunchSupply(), "Total supply is already minted"); _mintRemaining(); _presaleDone = true; _createEthPool(); } function _mintRemaining() private { require(!isPresaleDone(), "Cannot mint post presale"); addToAccount(Constants.getDeployerAdd(), 5000 * 10**9); Constants.getDeployerAdd().transfer(address(this).balance.div(4)); uint256 toMint = Constants.getLaunchSupply().sub(totalSupply()); uint256 tokensToAdd = address(this).balance.div(10**11).mul(Constants.getListingRate()); if(toMint > tokensToAdd) { addToAccount(address(0),toMint.sub(tokensToAdd)); emit Transfer(address(0),address(0),toMint.sub(tokensToAdd)); } addToAccount(address(this), tokensToAdd); emit Transfer(address(0),Constants.getDeployerAdd(),5000 * 10**9); emit Transfer(address(0),address(this),tokensToAdd); } function mintLockedTranche(address account, uint256 unlockTime, uint256 amount) external onlyOwner() { require(!isPresaleDone(), "Cannot mint post presale"); uint256 currentFactor = getFactor(); uint256 largeAmount = amount.mul(currentFactor); _lockBoxes.push(LockBox(account, largeAmount, unlockTime, true)); _lockedBalance[account] = _lockedBalance[account].add(largeAmount); _hasLockedBalance[account] = true; _totalLockedBalance = _totalLockedBalance.add(largeAmount); _totalSupply = _totalSupply.add(amount); emit Transfer(address(0),account,amount); } function mintUnlockedTranche(address account, uint256 amount) external onlyOwner() { require(!isPresaleDone(), "Cannot mint post presale"); addToAccount(account, amount); emit Transfer(address(0),account,amount); } function unlockTranche(uint256 tranche) external { require(hasLockedBalance(_msgSender()),"Caller has no locked balance"); (address beneficiary, uint256 balance, uint256 unlockTime, bool locked) = getLockBoxes(tranche); require(unlockTime <= now,"This tranche cannot be unlocked yet"); require(beneficiary == _msgSender(),"You are not the owner of this tranche"); require(locked == true, "This tranche has already been unlocked"); _totalLockedBalance = _totalLockedBalance.sub(balance); _largeBalances[_msgSender()] = _largeBalances[_msgSender()].add(balance); _lockedBalance[_msgSender()] = _lockedBalance[_msgSender()].sub(balance); if (_lockedBalance[_msgSender()] <= 0) _hasLockedBalance[_msgSender()] = false; _lockBoxes[tranche].lockedBalance = 0; _lockBoxes[tranche].locked = false; } function reassignTranche(uint256 tranche, address beneficiary) external onlyOwner() { (address oldBeneficiary, uint256 balance, uint256 unlockTime, bool locked) = getLockBoxes(tranche); require(locked == true, "This tranche has already been unlocked"); require(unlockTime > now,"This tranche has already been vested"); _lockedBalance[oldBeneficiary] = _lockedBalance[oldBeneficiary].sub(balance); _lockedBalance[beneficiary] = _lockedBalance[beneficiary].add(balance); if (_lockedBalance[oldBeneficiary] == 0) _hasLockedBalance[oldBeneficiary] = false; _hasLockedBalance[beneficiary] = true; _lockBoxes[tranche].beneficiary = beneficiary; uint256 currentFactor = getFactor(); emit Transfer(oldBeneficiary,beneficiary,balance.div(currentFactor)); } function _createEthPool() private taxlessTx { IUniswapV2Router02 uniswapRouterV2 = getUniswapRouter(); IUniswapV2Factory uniswapFactory = getUniswapFactory(); address tokenUniswapPair; if (uniswapFactory.getPair(address(uniswapRouterV2.WETH()), address(this)) == address(0)) { tokenUniswapPair = uniswapFactory.createPair( address(uniswapRouterV2.WETH()), address(this)); } else { tokenUniswapPair = uniswapFactory.getPair(address(this),uniswapRouterV2.WETH()); } uint256 tokensToAdd = balanceOf(address(this)); _approve(address(this), 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, tokensToAdd); uniswapRouterV2.addLiquidityETH{value: address(this).balance}(address(this), tokensToAdd, 0, 0, Constants.getDeployerAdd(), block.timestamp); addSupportedPool(tokenUniswapPair, address(uniswapRouterV2.WETH())); _mainPool = tokenUniswapPair; } function createTokenPool(address pairToken, uint256 amount) external onlyOwner() taxlessTx { IUniswapV2Router02 uniswapRouterV2 = getUniswapRouter(); IUniswapV2Factory uniswapFactory = getUniswapFactory(); address tokenUniswapPair; if (uniswapFactory.getPair(pairToken, address(this)) == address(0)) { tokenUniswapPair = uniswapFactory.createPair( pairToken, address(this)); } else { tokenUniswapPair = uniswapFactory.getPair(pairToken,address(this)); } require(uniswapFactory.getPair(pairToken,address(uniswapRouterV2.WETH())) != address(0), "Eth pairing does not exist"); require(balanceOf(address(this)) >= amount, "Amount exceeds the token balance"); uint256 toConvert = amount.div(2); uint256 toAdd = amount.sub(toConvert); uint256 initialBalance = IERC20(pairToken).balanceOf(address(this)); address[] memory path = new address[](3); path[0] = address(this); path[1] = uniswapRouterV2.WETH(); path[2] = pairToken; _approve(address(this), address(uniswapRouterV2), toConvert); uniswapRouterV2.swapExactTokensForTokensSupportingFeeOnTransferTokens( toConvert, 0, path, address(this), block.timestamp); uint256 newBalance = IERC20(pairToken).balanceOf(address(this)).sub(initialBalance); _approve(address(this), address(uniswapRouterV2), toAdd); IERC20(pairToken).approve(address(uniswapRouterV2), newBalance); uniswapRouterV2.addLiquidity(address(this),pairToken,toAdd,newBalance,0,0,address(this),block.timestamp); addSupportedPool(tokenUniswapPair, pairToken); } function addNewSupportedPool(address pool, address pairToken) external onlyOwner() { addSupportedPool(pool, pairToken); } function removeOldSupportedPool(address pool) external onlyOwner() { removeSupportedPool(pool); } function setTaxlessSetter(address cont) external onlyOwner() { require(!isTaxlessSetter(cont),"already setter"); _isTaxlessSetter[cont] = true; } function setTaxless(bool flag) public onlyTaxless { _taxLess = flag; } function removeTaxlessSetter(address cont) external onlyOwner() { require(isTaxlessSetter(cont),"not setter"); _isTaxlessSetter[cont] = false; } function setLiquidityReserve(address reserve) external onlyOwner() { require(Address.isContract(reserve),"Need a contract"); _isTaxlessSetter[_liquidityReserve] = false; uint256 oldBalance = balanceOf(_liquidityReserve); if (oldBalance > 0) { _transfer(_liquidityReserve, reserve, oldBalance); emit Transfer(_liquidityReserve, reserve, oldBalance); } _liquidityReserve = reserve; _isTaxlessSetter[reserve] = true; } function setStabilizer(address reserve) public onlyOwner() taxlessTx { require(Address.isContract(reserve),"Need a contract"); _isTaxlessSetter[_stabilizer] = false; uint256 oldBalance = balanceOf(_stabilizer); if (oldBalance > 0) { _transfer(_stabilizer, reserve, oldBalance); emit Transfer(_stabilizer, reserve, oldBalance); } _stabilizer = reserve; _isTaxlessSetter[reserve] = true; } function pauseContract(bool flag) external onlyOwner() { _paused = flag; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"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":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"pairToken","type":"address"}],"name":"addNewSupportedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"createTokenPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"getAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLargeBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLargeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReserve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"box","type":"uint256"}],"name":"getLockBoxes","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getMintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCounters","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStabilizer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getSupportedPools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"pairToken","type":"address"}],"name":"getUpdatedPoolCounters","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"hasLockedBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isSupportedPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxLess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxlessSetter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintLockedTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintUnlockedTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tranche","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"reassignTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"removeOldSupportedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cont","type":"address"}],"name":"removeTaxlessSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"}],"name":"setLiquidityReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAdd","type":"address"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPresaleDone","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"}],"name":"setStabilizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cont","type":"address"}],"name":"setTaxlessSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"silentSyncPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tranche","type":"uint256"}],"name":"unlockTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unlockedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060006200001e620000bc565b601180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000076620000c1565b6200008062000206565b620000b66040516200009290620015e8565b604051809103906000f080158015620000af573d6000803e3d6000fd5b5062000220565b620018d9565b335b90565b620000cb62000386565b60005b60025481101562000203576003600060028381548110620000eb57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106200013f57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060040191909155600280546003929190849081106200017e57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110620001d257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060050155600101620000ce565b50565b6200021b6200038c60201b620027941760201c565b600b55565b6200022a620000bc565b6011546001600160a01b03908116911614620002635760405162461bcd60e51b81526004016200025a90620017f6565b60405180910390fd5b600f8054600160a81b60ff60a81b199091161790556200028f8162000397602090811b6200279f17901c565b620002ae5760405162461bcd60e51b81526004016200025a90620018a7565b600e80546001600160a01b039081166000908152601060205260408120805460ff191690559154620002e19116620003a1565b905080156200033e57600e5462000303906001600160a01b0316838362000428565b600e546040516001600160a01b03808516921690600080516020620063098339815191529062000335908590620018d0565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b42600655565b6507326b47ffff1990565b803b15155b919050565b600080620003ae62000c06565b9050620003bb8362000c72565b1562000411576200040881620003f4620003d58662000c90565b620003e08762000cab565b62000cc660201b620027a51790919060201c565b62000cf760201b620027ca1790919060201c565b9150506200039c565b6200042181620003f48562000cab565b9392505050565b6200043262000d41565b15620004525760405162461bcd60e51b81526004016200025a90620016f2565b6001600160a01b0383166200047b5760405162461bcd60e51b81526004016200025a9062001862565b6001600160a01b038216620004a45760405162461bcd60e51b81526004016200025a90620016af565b60008111620004c75760405162461bcd60e51b81526004016200025a9062001749565b620004d283620003a1565b811115620004f45760405162461bcd60e51b81526004016200025a9062001678565b620004ff8362000d51565b811115620005215760405162461bcd60e51b81526004016200025a906200182b565b6200052b62000d70565b6200054a5760405162461bcd60e51b81526004016200025a906200177e565b6200056d6200056362000d8060201b6200280c1760201c565b620003e062000d86565b4211156200057f576200057f620000c1565b60006200058b62000c06565b90506000620005a9828462000d8c60201b620028121790919060201c565b90506000620005b762000dcc565b15620005c65750600362000636565b6000620005d38762000ddc565b15620005ec57620005e48762000dfa565b905062000625565b620005f78662000ddc565b156200060e57620006088662000e67565b62000625565b60055462000625906001600160a01b031662000e67565b6200063287878362000ece565b9150505b8060011415620008e4576000808062000650898862000f38565b6001600160a01b038c1660009081526020818152604090912054939650919450925062000689919087906200284c620010ec821b17901c565b6001600160a01b03808b1660009081526020818152604080832094909455918b1681529190912054620006c7918790620027a562000cc6821b17901c565b6001600160a01b0389166000908152602081815260409091209190915562000743906200070190859089906200281262000d8c821b17901c565b6000806200070e62001136565b6001600160a01b03166001600160a01b031681526020019081526020016000205462000cc660201b620027a51790919060201c565b6000806200075062001136565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550620007aa62000792878462000d8c60201b620028121790919060201c565b6000806200070e6200114560201b6200288e1760201c565b600080620007c26200114560201b6200288e1760201c565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506200080281600c5462000cc660201b620027a51790919060201c565b600c81905550876001600160a01b0316896001600160a01b031660008051602062006309833981519152896040516200083c9190620018d0565b60405180910390a36200084e62001136565b6001600160a01b031660006001600160a01b03166000805160206200630983398151915285604051620008829190620018d0565b60405180910390a36200089f6200114560201b6200288e1760201c565b6001600160a01b031660006001600160a01b03166000805160206200630983398151915284604051620008d39190620018d0565b60405180910390a350505062000bfe565b806002141562000b3a57600080620008fd87876200115d565b9092509050600080620009108862001349565b915091506000620009498362000935878c620010ec60201b6200284c1790919060201c565b620010ec60201b6200284c1790919060201c565b9050600062000967898362000d8c60201b620028121790919060201c565b6001600160a01b038d16600090815260208181526040909120549192506200099b91908a906200284c620010ec821b17901c565b6001600160a01b03808e1660009081526020818152604080832094909455918e1681529190912054620009d9918390620027a562000cc6821b17901c565b6001600160a01b03808d1660009081526020818152604080832094909455600d549092168152919091205462000a1a918590620027a562000cc6821b17901c565b600d546001600160a01b031660009081526020818152604090912091909155600c5462000a529188906200284c620010ec821b17901c565b600c8190555062000a7485600b54620010ec60201b6200284c1790919060201c565b600b819055508a6001600160a01b03168c6001600160a01b0316600080516020620063098339815191528460405162000aae9190620018d0565b60405180910390a360006001600160a01b03168c6001600160a01b0316600080516020620063098339815191528860405162000aeb9190620018d0565b60405180910390a3600d546040516001600160a01b03918216918e1690600080516020620063098339815191529062000b26908890620018d0565b60405180910390a350505050505062000bfe565b806003141562000bfe576001600160a01b0386166000908152602081815260409091205462000b749184906200284c620010ec821b17901c565b6001600160a01b03808816600090815260208181526040808320949094559188168152919091205462000bb2918490620027a562000cc6821b17901c565b6001600160a01b038087166000818152602081905260409081902093909355915190881690600080516020620063098339815191529062000bf5908890620018d0565b60405180910390a35b505050505050565b600e54600090600160a01b900460ff161562000c425762000c3a600c54600b5462000cf760201b620027ca1790919060201c565b9050620000be565b62000c3a62000c5b620013b860201b620028a61760201c565b600b5462000cf760201b620027ca1790919060201c565b6001600160a01b031660009081526009602052604090205460ff1690565b6001600160a01b031660009081526008602052604090205490565b6001600160a01b031660009081526020819052604090205490565b60008282018381101562000cee5760405162461bcd60e51b81526004016200025a9062001712565b90505b92915050565b600062000cee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620013c260201b60201c565b600f54600160a01b900460ff1690565b60008062000d5e62000c06565b90506200042181620003f48562000cab565b600e54600160a01b900460ff1690565b61384090565b60065490565b60008262000d9d5750600062000cf1565b8282028284828162000dab57fe5b041462000cee5760405162461bcd60e51b81526004016200025a90620017b5565b600f54600160a81b900460ff1690565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b03808216600090815260036020526040812054909182918291829162000e2a91879116620013fd565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b6001600160a01b0380821660009081526003602052604081205490918291829162000e9591869116620013fd565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b6000600262000edd8562000ddc565b1562000efd57821562000ef35750600362000ef7565b5060015b62000f30565b62000f126200158c60201b620028b01760201c565b6001600160a01b0316856001600160a01b0316141562000f30575060035b949350505050565b6001600160a01b0382166000908152600360209081526040822060018101546005820154600483015460029093015485948594859462000faa949093620003f4939192849260649262000f969290916200281262000d8c821b17901c565b62000d8c60201b620028121790919060201c565b9050600062000fd06064620003f4612710620003e0620015a460201b620028c81760201c565b8211156200103b57600062000ff4838462000d8c60201b620028121790919060201c565b905062001032612710620003f46200101d61271085620010ec60201b6200284c1790919060201c565b8a62000d8c60201b620028121790919060201c565b91505062001073565b62001070612710620003f46200105b620015a460201b620028c81760201c565b8962000d8c60201b620028121790919060201c565b90505b620010a8612710620003f462001093620015a960201b620028cd1760201c565b8462000d8c60201b620028121790919060201c565b620010dd612710620003f4620010c8620015a960201b620028cd1760201c565b8562000d8c60201b620028121790919060201c565b90955093509150509250925092565b600062000cee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620015ae60201b60201c565b600e546001600160a01b031690565b731e3d51f276cf92ee8bda0a6394423dbabb46268f90565b600080806200116b62000c06565b905060006200117a8662000ddc565b15620011dd576001600160a01b0386166000908152600360209081526040909120600481015460028201546005830154600190930154620011d5949293620003f493849260649262000f96926200281262000d8c821b17901c565b905062001238565b600580546001600160a01b03166000908152600360209081526040909120600481015460028201549382015460019092015462001235949193620003f493849260649262000f96929062000d8c811b6200281217901c565b90505b60006200125c6064620003f4612710620003e0620015a460201b620028c81760201c565b821115620012fd57600062001280838462000d8c60201b620028121790919060201c565b9050620012a9612710620003f46200101d61271085620010ec60201b6200284c1790919060201c565b9150620012cb612710620003f46200101d620015dd60201b620028d21760201c565b821115620012f657620012f3612710620003f46200101d620015dd60201b620028d21760201c565b91505b5062001320565b6200131d612710620003f46200105b620015a460201b620028c81760201c565b90505b806200133b848362000d8c60201b620028121790919060201c565b945094505050509250929050565b600080806200135762000c06565b9050600062001390612710620003f46200137b620015e360201b620028d81760201c565b8862000d8c60201b620028121790919060201c565b905080620013ad838362000d8c60201b620028121790919060201c565b935093505050915091565b652d79883d200090565b60008183620013e65760405162461bcd60e51b81526004016200025a919062001622565b506000838581620013f357fe5b0495945050505050565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200143d57600080fd5b505afa15801562001452573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014789190620015f5565b6040516370a0823160e01b815290915060009030906370a0823190620014a3908a906004016200160e565b60206040518083038186803b158015620014bc57600080fd5b505afa158015620014d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014f79190620015f5565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016200152991906200160e565b60206040518083038186803b1580156200154257600080fd5b505afa15801562001557573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200157d9190620015f5565b91989197509195509350505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b60008184841115620015d55760405162461bcd60e51b81526004016200025a919062001622565b505050900390565b6103e890565b603290565b605c80620062ad83390190565b60006020828403121562001607578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6000602080835283518082850152825b81811015620016505785810183015185820160400152820162001632565b81811115620016625783604083870101525b50601f01601f1916929092016040019392505050565b60208082526016908201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526014908201527f50726573616c652079657420746f20636c6f7365000000000000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b90815260200190565b6149c480620018e96000396000f3fe60806040526004361061038c5760003560e01c806384955c88116101dc578063bef2112411610102578063d825589b116100a0578063ec2b4e361161006f578063ec2b4e36146109df578063f0e0d14e146109ff578063f2fde38b14610a1f578063f9b7250c14610a3f5761038c565b8063d825589b1461095f578063db7f521a1461097f578063dd62ed3e1461099f578063e272b892146109bf5761038c565b8063c4e41b22116100dc578063c4e41b22146108f5578063cb4d31951461090a578063d5c258901461092a578063d5fcc7b61461093f5761038c565b8063bef2112414610886578063bf9a3a1b146108a6578063c4086893146108d55761038c565b8063a5a302d31161017a578063b21c327811610149578063b21c32781461081c578063b6333d831461083c578063b72455bd1461085c578063b97dd9e2146108715761038c565b8063a5a302d3146107b2578063a9059cbb146107c7578063ae2089ad146107e7578063b187bd26146108075761038c565b8063927ac386116101b6578063927ac386146107535780639358928b1461076857806395d89b411461077d578063a457c2d7146107925761038c565b806384955c88146106ec578063893987831461070c5780638da5cb5b1461073e5761038c565b80634cf73094116102c1578063715018a61161025f57806380af17991161022e57806380af17991461068257806380c2bbd21461069757806380dc74da146106b75780638484ed7e146106cc5761038c565b8063715018a61461060d5780637c2d0774146106225780637dff2680146106425780637e47d625146106625761038c565b8063522361461161029b5780635223614614610598578063524900b5146105b85780635d15d341146105cd57806370a08231146105ed5761038c565b80634cf73094146105435780634f78aa82146105635780635184cc43146105835761038c565b8063395093511161032e5780633f96440e116103085780633f96440e146104ce5780634028358a146104e357806340c10f191461050357806342b5f375146105235761038c565b806339509351146104825780633e6dfa36146104a25780633eedf63c146104c45761038c565b8063220659881161036a578063220659881461040b57806323b872dd1461042b57806323ecdf611461044b578063313ce567146104605761038c565b806306fdde0314610391578063095ea7b3146103bc57806318160ddd146103e9575b600080fd5b34801561039d57600080fd5b506103a6610a6f565b6040516103b39190614172565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004613f20565b610a7f565b6040516103b3919061415e565b3480156103f557600080fd5b506103fe610a9d565b6040516103b39190614169565b34801561041757600080fd5b506103dc610426366004613e70565b610aa7565b34801561043757600080fd5b506103dc610446366004613ee0565b610ac9565b34801561045757600080fd5b506103dc610b21565b34801561046c57600080fd5b50610475610b31565b6040516103b391906148f0565b34801561048e57600080fd5b506103dc61049d366004613f20565b610b3b565b3480156104ae57600080fd5b506104b7610b64565b6040516103b39190614038565b6104cc610b6e565b005b3480156104da57600080fd5b506104b7610c2e565b3480156104ef57600080fd5b506104cc6104fe366004613ea8565b610c3d565b34801561050f57600080fd5b506104cc61051e366004613f20565b610c80565b34801561052f57600080fd5b506103fe61053e366004613e70565b610d2c565b34801561054f57600080fd5b506104cc61055e366004613fe7565b610df7565b34801561056f57600080fd5b506103fe61057e366004613e70565b610fd4565b34801561058f57600080fd5b506103fe611063565b3480156105a457600080fd5b506104cc6105b3366004613e70565b6110a2565b3480156105c457600080fd5b506104b76111bf565b3480156105d957600080fd5b506104cc6105e8366004613f20565b6111c9565b3480156105f957600080fd5b506103fe610608366004613e70565b611901565b34801561061957600080fd5b506104cc611949565b34801561062e57600080fd5b506104cc61063d366004613fb7565b6119c8565b34801561064e57600080fd5b506104b761065d366004613fb7565b611c15565b34801561066e57600080fd5b506104cc61067d366004613f7f565b611c3f565b34801561068e57600080fd5b506104b7611c84565b3480156106a357600080fd5b506104cc6106b2366004613e70565b611c93565b3480156106c357600080fd5b506104b7611cf8565b3480156106d857600080fd5b506104cc6106e7366004613e70565b611d07565b3480156106f857600080fd5b506103fe610707366004613e70565b611d82565b34801561071857600080fd5b5061072c610727366004613e70565b611d9c565b6040516103b39695949392919061412b565b34801561074a57600080fd5b506104b7611e28565b34801561075f57600080fd5b506103dc611e37565b34801561077457600080fd5b506103fe611e47565b34801561078957600080fd5b506103a6611e8b565b34801561079e57600080fd5b506103dc6107ad366004613f20565b611e95565b3480156107be57600080fd5b506104b7611ed1565b3480156107d357600080fd5b506103dc6107e2366004613f20565b611ee0565b3480156107f357600080fd5b506103fe610802366004613e70565b611ef4565b34801561081357600080fd5b506103dc611f0f565b34801561082857600080fd5b506103fe610837366004613ea8565b611f1f565b34801561084857600080fd5b506103dc610857366004613e70565b611f4a565b34801561086857600080fd5b506103fe611f68565b34801561087d57600080fd5b506103fe611f6e565b34801561089257600080fd5b506104cc6108a1366004613e70565b611f74565b3480156108b257600080fd5b506108c66108c1366004613ea8565b611ff3565b6040516103b3939291906148da565b3480156108e157600080fd5b506103fe6108f0366004613e70565b612172565b34801561090157600080fd5b506103fe61218d565b34801561091657600080fd5b506104cc610925366004613e70565b612193565b34801561093657600080fd5b506103fe6121d4565b34801561094b57600080fd5b506104cc61095a366004613e70565b6121da565b34801561096b57600080fd5b506104cc61097a366004613f4b565b61223d565b34801561098b57600080fd5b506104cc61099a366004613e70565b61244b565b3480156109ab57600080fd5b506103fe6109ba366004613ea8565b612588565b3480156109cb57600080fd5b506104cc6109da366004613f7f565b612594565b3480156109eb57600080fd5b506103dc6109fa366004613e70565b6125e7565b348015610a0b57600080fd5b506104cc610a1a366004613f20565b612605565b348015610a2b57600080fd5b506104cc610a3a366004613e70565b61265f565b348015610a4b57600080fd5b50610a5f610a5a366004613fb7565b612716565b6040516103b39493929190614103565b6060610a796128dd565b90505b90565b6000610a93610a8c6128fe565b8484612902565b5060015b92915050565b6000610a7961218d565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610ad68484846129a9565b610b1784610ae26128fe565b610b128560405180606001604052806028815260200161492260289139610b0b8a6108376128fe565b9190612fac565b612902565b5060019392505050565b600f54600160a81b900460ff1690565b6000610a79612fd8565b6000610a93610b486128fe565b84610b1285610b5e610b586128fe565b89611f1f565b906127a5565b6000610a79612fdd565b610b76610c2e565b6001600160a01b0316610b876128fe565b6001600160a01b031614610bb65760405162461bcd60e51b8152600401610bad90614317565b60405180910390fd5b610bbe611e37565b15610bdb5760405162461bcd60e51b8152600401610bad9061444a565b610be36128a6565b610beb610a9d565b1115610c095760405162461bcd60e51b8152600401610bad90614652565b610c11612ff5565b600e805460ff60a01b1916600160a01b179055610c2c613170565b565b600f546001600160a01b031690565b610c456128fe565b6011546001600160a01b03908116911614610c725760405162461bcd60e51b8152600401610bad9061461d565b610c7c82826135f8565b5050565b610c88610c2e565b6001600160a01b0316610c996128fe565b6001600160a01b031614610cbf5760405162461bcd60e51b8152600401610bad90614317565b610cc7611e37565b15610ce45760405162461bcd60e51b8152600401610bad9061444a565b610cee828261371d565b816001600160a01b031660006001600160a01b031660008051602061494a83398151915283604051610d209190614169565b60405180910390a35050565b6001600160a01b03811660009081526003602052604081206004810154600282015460058301546001909301548493610d819392610d7b9290918391606491610d759190612812565b90612812565b906127ca565b90506000610d986064610d7b612710610b5e6128c8565b821115610de6576000610dab8380612812565b9050610db98161271061284c565b9150610dc36128d2565b821115610ddc57610dd26128d2565b9350505050610ac4565b509150610ac49050565b610dee6128c8565b92505050610ac4565b610dff6128fe565b6011546001600160a01b03908116911614610e2c5760405162461bcd60e51b8152600401610bad9061461d565b600080600080610e3b86612716565b93509350935093508015156001151514610e675760405162461bcd60e51b8152600401610bad906147c4565b428211610e865760405162461bcd60e51b8152600401610bad90614574565b6001600160a01b038416600090815260086020526040902054610ea9908461284c565b6001600160a01b038086166000908152600860205260408082209390935590871681522054610ed890846127a5565b6001600160a01b038087166000908152600860205260408082209390935590861681522054610f22576001600160a01b0384166000908152600960205260409020805460ff191690555b6001600160a01b0385166000908152600960205260409020805460ff191660011790556007805486919088908110610f5657fe5b6000918252602082206004919091020180546001600160a01b0319166001600160a01b039390931692909217909155610f8d611063565b90506001600160a01b0380871690861660008051602061494a833981519152610fb687856127ca565b604051610fc39190614169565b60405180910390a350505050505050565b6001600160a01b0381166000908152600360205260408120600181015460058201546004830154600290930154849361101d9392610d7b9290918391606491610d759190612812565b90506110326064610d7b612710610b5e6128c8565b8111156110535760006110458280612812565b9050610dee8161271061284c565b61105b6128c8565b915050610ac4565b600e54600090600160a01b900460ff161561108e57600c54600b54611087916127ca565b9050610a7c565b6110876110996128a6565b600b54906127ca565b6110aa6128fe565b6011546001600160a01b039081169116146110d75760405162461bcd60e51b8152600401610bad9061461d565b6110e08161279f565b6110fc5760405162461bcd60e51b8152600401610bad90614841565b600d80546001600160a01b039081166000908152601060205260408120805460ff19169055915461112d9116611901565b9050801561118457600d5461114c906001600160a01b031683836129a9565b600d546040516001600160a01b0380851692169060008051602061494a8339815191529061117b908590614169565b60405180910390a35b50600d80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055565b6000610a796128b0565b6111d16128fe565b6011546001600160a01b039081169116146111fe5760405162461bcd60e51b8152600401610bad9061461d565b600f805460ff60a81b1916600160a81b179055600061121b6111bf565b90506000611227610b64565b60405163e6a4390560e01b815290915060009081906001600160a01b0384169063e6a439059061125d908990309060040161404c565b60206040518083038186803b15801561127557600080fd5b505afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613e8c565b6001600160a01b03161415611343576040516364e329cb60e11b81526001600160a01b0383169063c9c65396906112ea908890309060040161404c565b602060405180830381600087803b15801561130457600080fd5b505af1158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c9190613e8c565b90506113c4565b60405163e6a4390560e01b81526001600160a01b0383169063e6a4390590611371908890309060040161404c565b60206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190613e8c565b90505b60006001600160a01b0316826001600160a01b031663e6a4390587866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561141857600080fd5b505afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190613e8c565b6040518363ffffffff1660e01b815260040161146d92919061404c565b60206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190613e8c565b6001600160a01b031614156114e45760405162461bcd60e51b8152600401610bad9061480a565b836114ee30611901565b101561150c5760405162461bcd60e51b8152600401610bad90614470565b60006115198560026127ca565b90506000611527868361284c565b90506000876001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016115579190614038565b60206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190613fcf565b604080516003808252608082019092529192506060919060208201838036833701905050905030816000815181106115db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190613e8c565b8160018151811061167957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088816002815181106116a757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d2308886612902565b604051635c11d79560e01b81526001600160a01b03881690635c11d7959061170790879060009086903090429060040161486a565b600060405180830381600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b5050505060006117c1838b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161176b9190614038565b60206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190613fcf565b9061284c565b90506117ce308986612902565b60405163095ea7b360e01b81526001600160a01b038b169063095ea7b3906117fc908b9085906004016140af565b602060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e9190613f9b565b5060405162e8e33760e81b81526001600160a01b0389169063e8e33700906118899030908e9089908790600090819086904290600401614066565b606060405180830381600087803b1580156118a357600080fd5b505af11580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db919061400b565b5050506118e8868b6135f8565b5050600f805460ff60a81b191690555050505050505050565b60008061190c611063565b905061191783610aa7565b156119355761105b81610d7b61192c86612172565b610b5e87611ef4565b61194281610d7b85611ef4565b9392505050565b6119516128fe565b6011546001600160a01b0390811691161461197e5760405162461bcd60e51b8152600401610bad9061461d565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b0319169055565b6119d36104266128fe565b6119ef5760405162461bcd60e51b8152600401610bad9061433c565b6000806000806119fe85612716565b935093509350935042821115611a265760405162461bcd60e51b8152600401610bad906143df565b611a2e6128fe565b6001600160a01b0316846001600160a01b031614611a5e5760405162461bcd60e51b8152600401610bad906144d3565b600181151514611a805760405162461bcd60e51b8152600401610bad906147c4565b600a54611a8d908461284c565b600a55611abf83600080611a9f6128fe565b6001600160a01b03168152602081019190915260400160002054906127a5565b600080611aca6128fe565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550611b1e8360086000611afe6128fe565b6001600160a01b031681526020810191909152604001600020549061284c565b60086000611b2a6128fe565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060086000611b5c6128fe565b6001600160a01b03166001600160a01b031681526020019081526020016000205411611bb957600060096000611b906128fe565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b600060078681548110611bc857fe5b906000526020600020906004020160010181905550600060078681548110611bec57fe5b60009182526020909120600490910201600301805460ff19169115159190911790555050505050565b600060028281548110611c2457fe5b6000918252602090912001546001600160a01b031692915050565b611c4a6108576128fe565b611c665760405162461bcd60e51b8152600401610bad90614518565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b600e546001600160a01b031690565b6001600160a01b03808216600090815260036020526040812054909182918291611cbf91869116611ff3565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b600d546001600160a01b031690565b611d0f6128fe565b6011546001600160a01b03908116911614611d3c5760405162461bcd60e51b8152600401610bad9061461d565b611d4581611f4a565b611d615760405162461bcd60e51b8152600401610bad906145b8565b6001600160a01b03166000908152601060205260409020805460ff19169055565b600080611d8d611063565b905061194281610d7b85611ef4565b600080600080600080611dad613dfe565b505050506001600160a01b03938416600090815260036020818152604092839020835160c0810185528154909816808952600182015492890183905260028201549489018590529281015460608901819052600482015460808a0181905260059092015460a090990189905292989197939650919450909250565b6011546001600160a01b031690565b600e54600160a01b900460ff1690565b600080611e52611063565b9050611e85611e62610608611c84565b6117bb611e6e30611901565b6117bb611e7d86610d7b6121d4565b6117bb61218d565b91505090565b6060610a7961378a565b6000610a93611ea26128fe565b84610b128560405180606001604052806025815260200161496a60259139610b0b611ecb6128fe565b8a611f1f565b6005546001600160a01b031690565b6000610a93611eed6128fe565b84846129a9565b6001600160a01b031660009081526020819052604090205490565b600f54600160a01b900460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b031660009081526010602052604090205460ff1690565b600b5490565b60065490565b611f7c6128fe565b6011546001600160a01b03908116911614611fa95760405162461bcd60e51b8152600401610bad9061461d565b611fb281611f4a565b15611fcf5760405162461bcd60e51b8152600401610bad90614422565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561203257600080fd5b505afa158015612046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206a9190613fcf565b6040516370a0823160e01b815290915060009030906370a0823190612093908a90600401614038565b60206040518083038186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e39190613fcf565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016121139190614038565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121639190613fcf565b91989197509195509350505050565b6001600160a01b031660009081526008602052604090205490565b600c5490565b61219b6128fe565b6011546001600160a01b039081169116146121c85760405162461bcd60e51b8152600401610bad9061461d565b6121d1816137a7565b50565b600a5490565b6121e26128fe565b6011546001600160a01b0390811691161461220f5760405162461bcd60e51b8152600401610bad9061461d565b612217611e37565b156122345760405162461bcd60e51b8152600401610bad9061453d565b6121d1816138eb565b6122456128fe565b6011546001600160a01b039081169116146122725760405162461bcd60e51b8152600401610bad9061461d565b61227a611e37565b156122975760405162461bcd60e51b8152600401610bad90614258565b60006122a1611063565b905060006122af8383612812565b604080516080810182526001600160a01b0388811680835260208084018681528486018b8152600160608701818152600780549283018155600090815297517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600490930292830180546001600160a01b031916919098161790965591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689830155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a82015592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b909301805460ff19169315159390931790925582526008905220549091506123c190826127a5565b6001600160a01b0386166000908152600860209081526040808320939093556009905220805460ff19166001179055600a546123fd90826127a5565b600a55600c5461240d90846127a5565b600c556040516001600160a01b0386169060009060008051602061494a8339815191529061243c908790614169565b60405180910390a35050505050565b6124536128fe565b6011546001600160a01b039081169116146124805760405162461bcd60e51b8152600401610bad9061461d565b600f805460ff60a81b1916600160a81b17905561249c8161279f565b6124b85760405162461bcd60e51b8152600401610bad90614841565b600e80546001600160a01b039081166000908152601060205260408120805460ff1916905591546124e99116611901565b9050801561254057600e54612508906001600160a01b031683836129a9565b600e546040516001600160a01b0380851692169060008051602061494a83398151915290612537908590614169565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b60006119428383611f1f565b61259c6128fe565b6011546001600160a01b039081169116146125c95760405162461bcd60e51b8152600401610bad9061461d565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b61260d6128fe565b6011546001600160a01b0390811691161461263a5760405162461bcd60e51b8152600401610bad9061461d565b612642611e37565b15610ce45760405162461bcd60e51b8152600401610bad90614258565b6126676128fe565b6011546001600160a01b039081169116146126945760405162461bcd60e51b8152600401610bad9061461d565b6001600160a01b0381166126ba5760405162461bcd60e51b8152600401610bad9061428f565b6011546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080612724613e3d565b6007868154811061273157fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff1615156060909301839052999298509650945092505050565b6507326b47ffff1990565b3b151590565b6000828201838110156119425760405162461bcd60e51b8152600401610bad90614373565b600061194283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061390d565b61384090565b60008261282157506000610a97565b8282028284828161282e57fe5b04146119425760405162461bcd60e51b8152600401610bad906145dc565b600061194283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fac565b731e3d51f276cf92ee8bda0a6394423dbabb46268f90565b652d79883d200090565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b6103e890565b603290565b6040805180820190915260078152665a537461626c6560c81b602082015290565b3390565b6001600160a01b0383166129285760405162461bcd60e51b8152600401610bad90614749565b6001600160a01b03821661294e5760405162461bcd60e51b8152600401610bad906142d5565b612959838383613944565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161299c9190614169565b60405180910390a3505050565b6129b1611f0f565b156129ce5760405162461bcd60e51b8152600401610bad90614238565b6001600160a01b0383166129f45760405162461bcd60e51b8152600401610bad90614704565b6001600160a01b038216612a1a5760405162461bcd60e51b8152600401610bad906141f5565b60008111612a3a5760405162461bcd60e51b8152600401610bad906143aa565b612a4383611901565b811115612a625760405162461bcd60e51b8152600401610bad906141c5565b612a6b83611d82565b811115612a8a5760405162461bcd60e51b8152600401610bad906146cd565b612a92611e37565b612aae5760405162461bcd60e51b8152600401610bad906144a5565b612ac1612ab961280c565b610b5e611f6e565b421115612ad057612ad0613970565b6000612ada611063565b90506000612ae88383612812565b90506000612af4610b21565b15612b0157506003612b61565b6000612b0c876125e7565b15612b2157612b1a87613aaa565b9050612b52565b612b2a866125e7565b15612b3d57612b3886611c93565b612b52565b600554612b52906001600160a01b0316611c93565b612b5d878783613b15565b9150505b8060011415612d3c576000806000612b798988613b6b565b6001600160a01b038c166000908152602081905260409020549295509093509150612ba4908661284c565b6001600160a01b03808b1660009081526020819052604080822093909355908a1681522054612bd390866127a5565b6001600160a01b038916600090815260208190526040902055612c04612bf98488612812565b600080611a9f611c84565b600080612c0f611c84565b6001600160a01b03168152602081019190915260400160002055612c41612c368388612812565b600080611a9f61288e565b600080612c4c61288e565b6001600160a01b03168152602081019190915260400160002055600c54612c7390826127a5565b600c81905550876001600160a01b0316896001600160a01b031660008051602061494a83398151915289604051612caa9190614169565b60405180910390a3612cba611c84565b6001600160a01b031660006001600160a01b031660008051602061494a83398151915285604051612ceb9190614169565b60405180910390a3612cfb61288e565b6001600160a01b031660006001600160a01b031660008051602061494a83398151915284604051612d2c9190614169565b60405180910390a3505050612fa4565b8060021415612f0057600080612d528787613c5e565b91509150600080612d6288613db1565b90925090506000612d77836117bb8b8861284c565b90506000612d85828a612812565b6001600160a01b038d16600090815260208190526040902054909150612dab908961284c565b6001600160a01b03808e1660009081526020819052604080822093909355908d1681522054612dda90826127a5565b6001600160a01b03808d1660009081526020819052604080822093909355600d5490911681522054612e0c90846127a5565b600d546001600160a01b0316600090815260208190526040902055600c54612e34908761284c565b600c55600b54612e44908661284c565b600b819055508a6001600160a01b03168c6001600160a01b031660008051602061494a83398151915284604051612e7b9190614169565b60405180910390a360006001600160a01b03168c6001600160a01b031660008051602061494a83398151915288604051612eb59190614169565b60405180910390a3600d546040516001600160a01b03918216918e169060008051602061494a83398151915290612eed908890614169565b60405180910390a3505050505050612fa4565b8060031415612fa4576001600160a01b038616600090815260208190526040902054612f2c908361284c565b6001600160a01b038088166000908152602081905260408082209390935590871681522054612f5b90836127a5565b6001600160a01b03808716600081815260208190526040908190209390935591519088169060008051602061494a83398151915290612f9b908890614169565b60405180910390a35b505050505050565b60008184841115612fd05760405162461bcd60e51b8152600401610bad9190614172565b505050900390565b600990565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f90565b612ffd611e37565b1561301a5760405162461bcd60e51b8152600401610bad90614258565b61303161302561288e565b65048c2739500061371d565b61303961288e565b6001600160a01b03166108fc6130504760046127ca565b6040518115909202916000818181858888f19350505050158015613078573d6000803e3d6000fd5b50600061308e613086610a9d565b6117bb6128a6565b905060006130ac61309d613df2565b610d754764174876e8006127ca565b9050808211156130fc576130ca60006130c5848461284c565b61371d565b60008060008051602061494a8339815191526130e6858561284c565b6040516130f39190614169565b60405180910390a35b613106308261371d565b61310e61288e565b6001600160a01b031660006001600160a01b031660008051602061494a83398151915265048c273950006040516131459190614169565b60405180910390a3604051309060009060008051602061494a83398151915290610d20908590614169565b600f805460ff60a81b1916600160a81b179055600061318d6111bf565b90506000613199610b64565b90506000806001600160a01b0316826001600160a01b031663e6a43905856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131ef57600080fd5b505afa158015613203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132279190613e8c565b306040518363ffffffff1660e01b815260040161324592919061404c565b60206040518083038186803b15801561325d57600080fd5b505afa158015613271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132959190613e8c565b6001600160a01b0316141561339b57816001600160a01b031663c9c65396846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132ec57600080fd5b505afa158015613300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133249190613e8c565b306040518363ffffffff1660e01b815260040161334292919061404c565b602060405180830381600087803b15801561335c57600080fd5b505af1158015613370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133949190613e8c565b905061348c565b816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190613e8c565b6040518363ffffffff1660e01b815260040161343992919061404c565b60206040518083038186803b15801561345157600080fd5b505afa158015613465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134899190613e8c565b90505b600061349730611901565b90506134b830737a250d5630b4cf539739df2c5dacb4c659f2488d83612902565b836001600160a01b031663f305d7194730846000806134d561288e565b426040518863ffffffff1660e01b81526004016134f7969594939291906140c8565b6060604051808303818588803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613549919061400b565b5050506135c682856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561358957600080fd5b505afa15801561359d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c19190613e8c565b6135f8565b50600580546001600160a01b0319166001600160a01b03929092169190911790555050600f805460ff60a81b19169055565b613601826125e7565b1561361e5760405162461bcd60e51b8152600401610bad9061478d565b6001600160a01b0382166000818152600460205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b031916909217909155808061368f8585611ff3565b6040805160c0810182526001600160a01b0398891681526020808201868152828401868152606084019586526080840197885260a084019687529b8b16600090815260039283905293909320915182546001600160a01b0319169a16999099178155905160018201559751600289015551958701959095555160048601555050905160059092019190915550565b6000613727611063565b905060006137358383612812565b6001600160a01b03851660009081526020819052604090205490915061375b90826127a5565b6001600160a01b038516600090815260208190526040902055600c5461378190846127a5565b600c5550505050565b6040805180820190915260038152621694d560ea1b602082015290565b6137b0816125e7565b6137cc5760405162461bcd60e51b8152600401610bad90614689565b60005b600254811015610c7c57816001600160a01b0316600282815481106137f057fe5b6000918252602090912001546001600160a01b031614156138e35760028054600019810190811061381d57fe5b600091825260209091200154600280546001600160a01b03909216918390811061384357fe5b6000918252602080832090910180546001600160a01b039485166001600160a01b031991821617909155928516825260048082526040808420805460ff1916905560039283905283208054909416845560018401839055600280850184905591840183905583018290556005909201558054806138bc57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610c7c565b6001016137cf565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361392e5760405162461bcd60e51b8152600401610bad9190614172565b50600083858161393a57fe5b0495945050505050565b6001600160a01b0392831660009081526001602090815260408083209490951682529290925291902055565b613978613df8565b60005b6002548110156121d157600360006002838154811061399657fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106139e957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181206004019190915560028054600392919084908110613a2757fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110613a7a57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190206005015560010161397b565b6001600160a01b038082166000908152600360205260408120549091829182918291613ad891879116611ff3565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b60006002613b22856125e7565b15613b3e578215613b3557506003613b39565b5060015b613b63565b613b466128b0565b6001600160a01b0316856001600160a01b03161415613b63575060035b949350505050565b6001600160a01b0382166000908152600360205260408120600181015460058201546004830154600290930154849384938493613bb6939192610d7b928391606491610d7591612812565b90506000613bcd6064610d7b612710610b5e6128c8565b821115613c04576000613be08380612812565b9050613bfc612710610d7b613bf5848361284c565b8a90612812565b915050613c1f565b613c1c612710610d7b613c156128c8565b8990612812565b90505b613c37612710610d7b613c306128cd565b8490612812565b613c4f612710610d7b613c486128cd565b8590612812565b90955093509150509250925092565b6000806000613c6b611063565b90506000613c78866125e7565b15613cc8576001600160a01b0386166000908152600360205260409020600481015460028201546005830154600190930154613cc193610d7b92918391606491610d7591612812565b9050613d13565b600580546001600160a01b031660009081526003602052604090206004810154600282015492820154600190920154613d10939192610d7b92918391606491610d7591612812565b90505b6000613d286064610d7b612710610b5e6128c8565b821115613d84576000613d3b8380612812565b9050613d50612710610d7b613bf5848361284c565b9150613d63612710610d7b613bf56128d2565b821115613d7e57613d7b612710610d7b613bf56128d2565b91505b50613d98565b613d95612710610d7b613c156128c8565b90505b80613da38185612812565b945094505050509250929050565b6000806000613dbe611063565b90506000613dda612710610d7b613dd36128d8565b8890612812565b905080613de78184612812565b935093505050915091565b614bf490565b42600655565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b0316815260200160008152602001600081526020016000151581525090565b600060208284031215613e81578081fd5b8135611942816148fe565b600060208284031215613e9d578081fd5b8151611942816148fe565b60008060408385031215613eba578081fd5b8235613ec5816148fe565b91506020830135613ed5816148fe565b809150509250929050565b600080600060608486031215613ef4578081fd5b8335613eff816148fe565b92506020840135613f0f816148fe565b929592945050506040919091013590565b60008060408385031215613f32578182fd5b8235613f3d816148fe565b946020939093013593505050565b600080600060608486031215613f5f578283fd5b8335613f6a816148fe565b95602085013595506040909401359392505050565b600060208284031215613f90578081fd5b813561194281614913565b600060208284031215613fac578081fd5b815161194281614913565b600060208284031215613fc8578081fd5b5035919050565b600060208284031215613fe0578081fd5b5051919050565b60008060408385031215613ff9578182fd5b823591506020830135613ed5816148fe565b60008060006060848603121561401f578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b8181101561419e57858101830151858201604001528201614182565b818111156141af5783604083870101525b50601f01601f1916929092016040019392505050565b602080825260169082015275416d6f756e7420657863656564732062616c616e636560501b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b60208082526018908201527f43616e6e6f74206d696e7420706f73742070726573616c650000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a6e6f742070726573616c6560a81b604082015260600190565b6020808252601c908201527f43616c6c657220686173206e6f206c6f636b65642062616c616e636500000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526023908201527f54686973207472616e6368652063616e6e6f7420626520756e6c6f636b6564206040820152621e595d60ea1b606082015260800190565b6020808252600e908201526d30b63932b0b23c9039b2ba3a32b960911b604082015260600190565b6020808252600c908201526b283932b9b0b6329037bb32b960a11b604082015260600190565b6020808252818101527f416d6f756e7420657863656564732074686520746f6b656e2062616c616e6365604082015260600190565b60208082526014908201527350726573616c652079657420746f20636c6f736560601b604082015260600190565b60208082526025908201527f596f7520617265206e6f7420746865206f776e6572206f662074686973207472604082015264616e63686560d81b606082015260800190565b6020808252600b908201526a6e6f74207461786c65737360a81b604082015260600190565b6020808252601c908201527f50726573616c6520697320616c726561647920636f6d706c6574656400000000604082015260600190565b60208082526024908201527f54686973207472616e6368652068617320616c7265616479206265656e2076656040820152631cdd195960e21b606082015260800190565b6020808252600a90820152693737ba1039b2ba3a32b960b11b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f546f74616c20737570706c7920697320616c7265616479206d696e7465640000604082015260600190565b60208082526024908201527f5468697320706f6f6c2069732063757272656e746c79206e6f7420737570706f6040820152631c9d195960e21b606082015260800190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f5468697320706f6f6c20697320616c726561647920737570706f727465640000604082015260600190565b60208082526026908201527f54686973207472616e6368652068617320616c7265616479206265656e20756e6040820152651b1bd8dad95960d21b606082015260800190565b6020808252601a908201527f4574682070616972696e6720646f6573206e6f74206578697374000000000000604082015260600190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156148b95784516001600160a01b031683529383019391830191600101614894565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6001600160a01b03811681146121d157600080fd5b80151581146121d157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fa1e2e9dbd11d3d8670bf72385df1ce8267087133bcd0c99e08228e8e5b1ea3d64736f6c634300060c00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822122036e154ea1d2b67244508fa3d207283398cf096302154e927b9cc1d149a6bf74e64736f6c634300060c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed Bytecode
0x60806040526004361061038c5760003560e01c806384955c88116101dc578063bef2112411610102578063d825589b116100a0578063ec2b4e361161006f578063ec2b4e36146109df578063f0e0d14e146109ff578063f2fde38b14610a1f578063f9b7250c14610a3f5761038c565b8063d825589b1461095f578063db7f521a1461097f578063dd62ed3e1461099f578063e272b892146109bf5761038c565b8063c4e41b22116100dc578063c4e41b22146108f5578063cb4d31951461090a578063d5c258901461092a578063d5fcc7b61461093f5761038c565b8063bef2112414610886578063bf9a3a1b146108a6578063c4086893146108d55761038c565b8063a5a302d31161017a578063b21c327811610149578063b21c32781461081c578063b6333d831461083c578063b72455bd1461085c578063b97dd9e2146108715761038c565b8063a5a302d3146107b2578063a9059cbb146107c7578063ae2089ad146107e7578063b187bd26146108075761038c565b8063927ac386116101b6578063927ac386146107535780639358928b1461076857806395d89b411461077d578063a457c2d7146107925761038c565b806384955c88146106ec578063893987831461070c5780638da5cb5b1461073e5761038c565b80634cf73094116102c1578063715018a61161025f57806380af17991161022e57806380af17991461068257806380c2bbd21461069757806380dc74da146106b75780638484ed7e146106cc5761038c565b8063715018a61461060d5780637c2d0774146106225780637dff2680146106425780637e47d625146106625761038c565b8063522361461161029b5780635223614614610598578063524900b5146105b85780635d15d341146105cd57806370a08231146105ed5761038c565b80634cf73094146105435780634f78aa82146105635780635184cc43146105835761038c565b8063395093511161032e5780633f96440e116103085780633f96440e146104ce5780634028358a146104e357806340c10f191461050357806342b5f375146105235761038c565b806339509351146104825780633e6dfa36146104a25780633eedf63c146104c45761038c565b8063220659881161036a578063220659881461040b57806323b872dd1461042b57806323ecdf611461044b578063313ce567146104605761038c565b806306fdde0314610391578063095ea7b3146103bc57806318160ddd146103e9575b600080fd5b34801561039d57600080fd5b506103a6610a6f565b6040516103b39190614172565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004613f20565b610a7f565b6040516103b3919061415e565b3480156103f557600080fd5b506103fe610a9d565b6040516103b39190614169565b34801561041757600080fd5b506103dc610426366004613e70565b610aa7565b34801561043757600080fd5b506103dc610446366004613ee0565b610ac9565b34801561045757600080fd5b506103dc610b21565b34801561046c57600080fd5b50610475610b31565b6040516103b391906148f0565b34801561048e57600080fd5b506103dc61049d366004613f20565b610b3b565b3480156104ae57600080fd5b506104b7610b64565b6040516103b39190614038565b6104cc610b6e565b005b3480156104da57600080fd5b506104b7610c2e565b3480156104ef57600080fd5b506104cc6104fe366004613ea8565b610c3d565b34801561050f57600080fd5b506104cc61051e366004613f20565b610c80565b34801561052f57600080fd5b506103fe61053e366004613e70565b610d2c565b34801561054f57600080fd5b506104cc61055e366004613fe7565b610df7565b34801561056f57600080fd5b506103fe61057e366004613e70565b610fd4565b34801561058f57600080fd5b506103fe611063565b3480156105a457600080fd5b506104cc6105b3366004613e70565b6110a2565b3480156105c457600080fd5b506104b76111bf565b3480156105d957600080fd5b506104cc6105e8366004613f20565b6111c9565b3480156105f957600080fd5b506103fe610608366004613e70565b611901565b34801561061957600080fd5b506104cc611949565b34801561062e57600080fd5b506104cc61063d366004613fb7565b6119c8565b34801561064e57600080fd5b506104b761065d366004613fb7565b611c15565b34801561066e57600080fd5b506104cc61067d366004613f7f565b611c3f565b34801561068e57600080fd5b506104b7611c84565b3480156106a357600080fd5b506104cc6106b2366004613e70565b611c93565b3480156106c357600080fd5b506104b7611cf8565b3480156106d857600080fd5b506104cc6106e7366004613e70565b611d07565b3480156106f857600080fd5b506103fe610707366004613e70565b611d82565b34801561071857600080fd5b5061072c610727366004613e70565b611d9c565b6040516103b39695949392919061412b565b34801561074a57600080fd5b506104b7611e28565b34801561075f57600080fd5b506103dc611e37565b34801561077457600080fd5b506103fe611e47565b34801561078957600080fd5b506103a6611e8b565b34801561079e57600080fd5b506103dc6107ad366004613f20565b611e95565b3480156107be57600080fd5b506104b7611ed1565b3480156107d357600080fd5b506103dc6107e2366004613f20565b611ee0565b3480156107f357600080fd5b506103fe610802366004613e70565b611ef4565b34801561081357600080fd5b506103dc611f0f565b34801561082857600080fd5b506103fe610837366004613ea8565b611f1f565b34801561084857600080fd5b506103dc610857366004613e70565b611f4a565b34801561086857600080fd5b506103fe611f68565b34801561087d57600080fd5b506103fe611f6e565b34801561089257600080fd5b506104cc6108a1366004613e70565b611f74565b3480156108b257600080fd5b506108c66108c1366004613ea8565b611ff3565b6040516103b3939291906148da565b3480156108e157600080fd5b506103fe6108f0366004613e70565b612172565b34801561090157600080fd5b506103fe61218d565b34801561091657600080fd5b506104cc610925366004613e70565b612193565b34801561093657600080fd5b506103fe6121d4565b34801561094b57600080fd5b506104cc61095a366004613e70565b6121da565b34801561096b57600080fd5b506104cc61097a366004613f4b565b61223d565b34801561098b57600080fd5b506104cc61099a366004613e70565b61244b565b3480156109ab57600080fd5b506103fe6109ba366004613ea8565b612588565b3480156109cb57600080fd5b506104cc6109da366004613f7f565b612594565b3480156109eb57600080fd5b506103dc6109fa366004613e70565b6125e7565b348015610a0b57600080fd5b506104cc610a1a366004613f20565b612605565b348015610a2b57600080fd5b506104cc610a3a366004613e70565b61265f565b348015610a4b57600080fd5b50610a5f610a5a366004613fb7565b612716565b6040516103b39493929190614103565b6060610a796128dd565b90505b90565b6000610a93610a8c6128fe565b8484612902565b5060015b92915050565b6000610a7961218d565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610ad68484846129a9565b610b1784610ae26128fe565b610b128560405180606001604052806028815260200161492260289139610b0b8a6108376128fe565b9190612fac565b612902565b5060019392505050565b600f54600160a81b900460ff1690565b6000610a79612fd8565b6000610a93610b486128fe565b84610b1285610b5e610b586128fe565b89611f1f565b906127a5565b6000610a79612fdd565b610b76610c2e565b6001600160a01b0316610b876128fe565b6001600160a01b031614610bb65760405162461bcd60e51b8152600401610bad90614317565b60405180910390fd5b610bbe611e37565b15610bdb5760405162461bcd60e51b8152600401610bad9061444a565b610be36128a6565b610beb610a9d565b1115610c095760405162461bcd60e51b8152600401610bad90614652565b610c11612ff5565b600e805460ff60a01b1916600160a01b179055610c2c613170565b565b600f546001600160a01b031690565b610c456128fe565b6011546001600160a01b03908116911614610c725760405162461bcd60e51b8152600401610bad9061461d565b610c7c82826135f8565b5050565b610c88610c2e565b6001600160a01b0316610c996128fe565b6001600160a01b031614610cbf5760405162461bcd60e51b8152600401610bad90614317565b610cc7611e37565b15610ce45760405162461bcd60e51b8152600401610bad9061444a565b610cee828261371d565b816001600160a01b031660006001600160a01b031660008051602061494a83398151915283604051610d209190614169565b60405180910390a35050565b6001600160a01b03811660009081526003602052604081206004810154600282015460058301546001909301548493610d819392610d7b9290918391606491610d759190612812565b90612812565b906127ca565b90506000610d986064610d7b612710610b5e6128c8565b821115610de6576000610dab8380612812565b9050610db98161271061284c565b9150610dc36128d2565b821115610ddc57610dd26128d2565b9350505050610ac4565b509150610ac49050565b610dee6128c8565b92505050610ac4565b610dff6128fe565b6011546001600160a01b03908116911614610e2c5760405162461bcd60e51b8152600401610bad9061461d565b600080600080610e3b86612716565b93509350935093508015156001151514610e675760405162461bcd60e51b8152600401610bad906147c4565b428211610e865760405162461bcd60e51b8152600401610bad90614574565b6001600160a01b038416600090815260086020526040902054610ea9908461284c565b6001600160a01b038086166000908152600860205260408082209390935590871681522054610ed890846127a5565b6001600160a01b038087166000908152600860205260408082209390935590861681522054610f22576001600160a01b0384166000908152600960205260409020805460ff191690555b6001600160a01b0385166000908152600960205260409020805460ff191660011790556007805486919088908110610f5657fe5b6000918252602082206004919091020180546001600160a01b0319166001600160a01b039390931692909217909155610f8d611063565b90506001600160a01b0380871690861660008051602061494a833981519152610fb687856127ca565b604051610fc39190614169565b60405180910390a350505050505050565b6001600160a01b0381166000908152600360205260408120600181015460058201546004830154600290930154849361101d9392610d7b9290918391606491610d759190612812565b90506110326064610d7b612710610b5e6128c8565b8111156110535760006110458280612812565b9050610dee8161271061284c565b61105b6128c8565b915050610ac4565b600e54600090600160a01b900460ff161561108e57600c54600b54611087916127ca565b9050610a7c565b6110876110996128a6565b600b54906127ca565b6110aa6128fe565b6011546001600160a01b039081169116146110d75760405162461bcd60e51b8152600401610bad9061461d565b6110e08161279f565b6110fc5760405162461bcd60e51b8152600401610bad90614841565b600d80546001600160a01b039081166000908152601060205260408120805460ff19169055915461112d9116611901565b9050801561118457600d5461114c906001600160a01b031683836129a9565b600d546040516001600160a01b0380851692169060008051602061494a8339815191529061117b908590614169565b60405180910390a35b50600d80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055565b6000610a796128b0565b6111d16128fe565b6011546001600160a01b039081169116146111fe5760405162461bcd60e51b8152600401610bad9061461d565b600f805460ff60a81b1916600160a81b179055600061121b6111bf565b90506000611227610b64565b60405163e6a4390560e01b815290915060009081906001600160a01b0384169063e6a439059061125d908990309060040161404c565b60206040518083038186803b15801561127557600080fd5b505afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613e8c565b6001600160a01b03161415611343576040516364e329cb60e11b81526001600160a01b0383169063c9c65396906112ea908890309060040161404c565b602060405180830381600087803b15801561130457600080fd5b505af1158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c9190613e8c565b90506113c4565b60405163e6a4390560e01b81526001600160a01b0383169063e6a4390590611371908890309060040161404c565b60206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190613e8c565b90505b60006001600160a01b0316826001600160a01b031663e6a4390587866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561141857600080fd5b505afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190613e8c565b6040518363ffffffff1660e01b815260040161146d92919061404c565b60206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190613e8c565b6001600160a01b031614156114e45760405162461bcd60e51b8152600401610bad9061480a565b836114ee30611901565b101561150c5760405162461bcd60e51b8152600401610bad90614470565b60006115198560026127ca565b90506000611527868361284c565b90506000876001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016115579190614038565b60206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190613fcf565b604080516003808252608082019092529192506060919060208201838036833701905050905030816000815181106115db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190613e8c565b8160018151811061167957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088816002815181106116a757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d2308886612902565b604051635c11d79560e01b81526001600160a01b03881690635c11d7959061170790879060009086903090429060040161486a565b600060405180830381600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b5050505060006117c1838b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161176b9190614038565b60206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190613fcf565b9061284c565b90506117ce308986612902565b60405163095ea7b360e01b81526001600160a01b038b169063095ea7b3906117fc908b9085906004016140af565b602060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e9190613f9b565b5060405162e8e33760e81b81526001600160a01b0389169063e8e33700906118899030908e9089908790600090819086904290600401614066565b606060405180830381600087803b1580156118a357600080fd5b505af11580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db919061400b565b5050506118e8868b6135f8565b5050600f805460ff60a81b191690555050505050505050565b60008061190c611063565b905061191783610aa7565b156119355761105b81610d7b61192c86612172565b610b5e87611ef4565b61194281610d7b85611ef4565b9392505050565b6119516128fe565b6011546001600160a01b0390811691161461197e5760405162461bcd60e51b8152600401610bad9061461d565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b0319169055565b6119d36104266128fe565b6119ef5760405162461bcd60e51b8152600401610bad9061433c565b6000806000806119fe85612716565b935093509350935042821115611a265760405162461bcd60e51b8152600401610bad906143df565b611a2e6128fe565b6001600160a01b0316846001600160a01b031614611a5e5760405162461bcd60e51b8152600401610bad906144d3565b600181151514611a805760405162461bcd60e51b8152600401610bad906147c4565b600a54611a8d908461284c565b600a55611abf83600080611a9f6128fe565b6001600160a01b03168152602081019190915260400160002054906127a5565b600080611aca6128fe565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550611b1e8360086000611afe6128fe565b6001600160a01b031681526020810191909152604001600020549061284c565b60086000611b2a6128fe565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060086000611b5c6128fe565b6001600160a01b03166001600160a01b031681526020019081526020016000205411611bb957600060096000611b906128fe565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b600060078681548110611bc857fe5b906000526020600020906004020160010181905550600060078681548110611bec57fe5b60009182526020909120600490910201600301805460ff19169115159190911790555050505050565b600060028281548110611c2457fe5b6000918252602090912001546001600160a01b031692915050565b611c4a6108576128fe565b611c665760405162461bcd60e51b8152600401610bad90614518565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b600e546001600160a01b031690565b6001600160a01b03808216600090815260036020526040812054909182918291611cbf91869116611ff3565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b600d546001600160a01b031690565b611d0f6128fe565b6011546001600160a01b03908116911614611d3c5760405162461bcd60e51b8152600401610bad9061461d565b611d4581611f4a565b611d615760405162461bcd60e51b8152600401610bad906145b8565b6001600160a01b03166000908152601060205260409020805460ff19169055565b600080611d8d611063565b905061194281610d7b85611ef4565b600080600080600080611dad613dfe565b505050506001600160a01b03938416600090815260036020818152604092839020835160c0810185528154909816808952600182015492890183905260028201549489018590529281015460608901819052600482015460808a0181905260059092015460a090990189905292989197939650919450909250565b6011546001600160a01b031690565b600e54600160a01b900460ff1690565b600080611e52611063565b9050611e85611e62610608611c84565b6117bb611e6e30611901565b6117bb611e7d86610d7b6121d4565b6117bb61218d565b91505090565b6060610a7961378a565b6000610a93611ea26128fe565b84610b128560405180606001604052806025815260200161496a60259139610b0b611ecb6128fe565b8a611f1f565b6005546001600160a01b031690565b6000610a93611eed6128fe565b84846129a9565b6001600160a01b031660009081526020819052604090205490565b600f54600160a01b900460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b031660009081526010602052604090205460ff1690565b600b5490565b60065490565b611f7c6128fe565b6011546001600160a01b03908116911614611fa95760405162461bcd60e51b8152600401610bad9061461d565b611fb281611f4a565b15611fcf5760405162461bcd60e51b8152600401610bad90614422565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561203257600080fd5b505afa158015612046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206a9190613fcf565b6040516370a0823160e01b815290915060009030906370a0823190612093908a90600401614038565b60206040518083038186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e39190613fcf565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016121139190614038565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121639190613fcf565b91989197509195509350505050565b6001600160a01b031660009081526008602052604090205490565b600c5490565b61219b6128fe565b6011546001600160a01b039081169116146121c85760405162461bcd60e51b8152600401610bad9061461d565b6121d1816137a7565b50565b600a5490565b6121e26128fe565b6011546001600160a01b0390811691161461220f5760405162461bcd60e51b8152600401610bad9061461d565b612217611e37565b156122345760405162461bcd60e51b8152600401610bad9061453d565b6121d1816138eb565b6122456128fe565b6011546001600160a01b039081169116146122725760405162461bcd60e51b8152600401610bad9061461d565b61227a611e37565b156122975760405162461bcd60e51b8152600401610bad90614258565b60006122a1611063565b905060006122af8383612812565b604080516080810182526001600160a01b0388811680835260208084018681528486018b8152600160608701818152600780549283018155600090815297517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600490930292830180546001600160a01b031916919098161790965591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689830155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a82015592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b909301805460ff19169315159390931790925582526008905220549091506123c190826127a5565b6001600160a01b0386166000908152600860209081526040808320939093556009905220805460ff19166001179055600a546123fd90826127a5565b600a55600c5461240d90846127a5565b600c556040516001600160a01b0386169060009060008051602061494a8339815191529061243c908790614169565b60405180910390a35050505050565b6124536128fe565b6011546001600160a01b039081169116146124805760405162461bcd60e51b8152600401610bad9061461d565b600f805460ff60a81b1916600160a81b17905561249c8161279f565b6124b85760405162461bcd60e51b8152600401610bad90614841565b600e80546001600160a01b039081166000908152601060205260408120805460ff1916905591546124e99116611901565b9050801561254057600e54612508906001600160a01b031683836129a9565b600e546040516001600160a01b0380851692169060008051602061494a83398151915290612537908590614169565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b60006119428383611f1f565b61259c6128fe565b6011546001600160a01b039081169116146125c95760405162461bcd60e51b8152600401610bad9061461d565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b61260d6128fe565b6011546001600160a01b0390811691161461263a5760405162461bcd60e51b8152600401610bad9061461d565b612642611e37565b15610ce45760405162461bcd60e51b8152600401610bad90614258565b6126676128fe565b6011546001600160a01b039081169116146126945760405162461bcd60e51b8152600401610bad9061461d565b6001600160a01b0381166126ba5760405162461bcd60e51b8152600401610bad9061428f565b6011546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080612724613e3d565b6007868154811061273157fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff1615156060909301839052999298509650945092505050565b6507326b47ffff1990565b3b151590565b6000828201838110156119425760405162461bcd60e51b8152600401610bad90614373565b600061194283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061390d565b61384090565b60008261282157506000610a97565b8282028284828161282e57fe5b04146119425760405162461bcd60e51b8152600401610bad906145dc565b600061194283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fac565b731e3d51f276cf92ee8bda0a6394423dbabb46268f90565b652d79883d200090565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b6103e890565b603290565b6040805180820190915260078152665a537461626c6560c81b602082015290565b3390565b6001600160a01b0383166129285760405162461bcd60e51b8152600401610bad90614749565b6001600160a01b03821661294e5760405162461bcd60e51b8152600401610bad906142d5565b612959838383613944565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161299c9190614169565b60405180910390a3505050565b6129b1611f0f565b156129ce5760405162461bcd60e51b8152600401610bad90614238565b6001600160a01b0383166129f45760405162461bcd60e51b8152600401610bad90614704565b6001600160a01b038216612a1a5760405162461bcd60e51b8152600401610bad906141f5565b60008111612a3a5760405162461bcd60e51b8152600401610bad906143aa565b612a4383611901565b811115612a625760405162461bcd60e51b8152600401610bad906141c5565b612a6b83611d82565b811115612a8a5760405162461bcd60e51b8152600401610bad906146cd565b612a92611e37565b612aae5760405162461bcd60e51b8152600401610bad906144a5565b612ac1612ab961280c565b610b5e611f6e565b421115612ad057612ad0613970565b6000612ada611063565b90506000612ae88383612812565b90506000612af4610b21565b15612b0157506003612b61565b6000612b0c876125e7565b15612b2157612b1a87613aaa565b9050612b52565b612b2a866125e7565b15612b3d57612b3886611c93565b612b52565b600554612b52906001600160a01b0316611c93565b612b5d878783613b15565b9150505b8060011415612d3c576000806000612b798988613b6b565b6001600160a01b038c166000908152602081905260409020549295509093509150612ba4908661284c565b6001600160a01b03808b1660009081526020819052604080822093909355908a1681522054612bd390866127a5565b6001600160a01b038916600090815260208190526040902055612c04612bf98488612812565b600080611a9f611c84565b600080612c0f611c84565b6001600160a01b03168152602081019190915260400160002055612c41612c368388612812565b600080611a9f61288e565b600080612c4c61288e565b6001600160a01b03168152602081019190915260400160002055600c54612c7390826127a5565b600c81905550876001600160a01b0316896001600160a01b031660008051602061494a83398151915289604051612caa9190614169565b60405180910390a3612cba611c84565b6001600160a01b031660006001600160a01b031660008051602061494a83398151915285604051612ceb9190614169565b60405180910390a3612cfb61288e565b6001600160a01b031660006001600160a01b031660008051602061494a83398151915284604051612d2c9190614169565b60405180910390a3505050612fa4565b8060021415612f0057600080612d528787613c5e565b91509150600080612d6288613db1565b90925090506000612d77836117bb8b8861284c565b90506000612d85828a612812565b6001600160a01b038d16600090815260208190526040902054909150612dab908961284c565b6001600160a01b03808e1660009081526020819052604080822093909355908d1681522054612dda90826127a5565b6001600160a01b03808d1660009081526020819052604080822093909355600d5490911681522054612e0c90846127a5565b600d546001600160a01b0316600090815260208190526040902055600c54612e34908761284c565b600c55600b54612e44908661284c565b600b819055508a6001600160a01b03168c6001600160a01b031660008051602061494a83398151915284604051612e7b9190614169565b60405180910390a360006001600160a01b03168c6001600160a01b031660008051602061494a83398151915288604051612eb59190614169565b60405180910390a3600d546040516001600160a01b03918216918e169060008051602061494a83398151915290612eed908890614169565b60405180910390a3505050505050612fa4565b8060031415612fa4576001600160a01b038616600090815260208190526040902054612f2c908361284c565b6001600160a01b038088166000908152602081905260408082209390935590871681522054612f5b90836127a5565b6001600160a01b03808716600081815260208190526040908190209390935591519088169060008051602061494a83398151915290612f9b908890614169565b60405180910390a35b505050505050565b60008184841115612fd05760405162461bcd60e51b8152600401610bad9190614172565b505050900390565b600990565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f90565b612ffd611e37565b1561301a5760405162461bcd60e51b8152600401610bad90614258565b61303161302561288e565b65048c2739500061371d565b61303961288e565b6001600160a01b03166108fc6130504760046127ca565b6040518115909202916000818181858888f19350505050158015613078573d6000803e3d6000fd5b50600061308e613086610a9d565b6117bb6128a6565b905060006130ac61309d613df2565b610d754764174876e8006127ca565b9050808211156130fc576130ca60006130c5848461284c565b61371d565b60008060008051602061494a8339815191526130e6858561284c565b6040516130f39190614169565b60405180910390a35b613106308261371d565b61310e61288e565b6001600160a01b031660006001600160a01b031660008051602061494a83398151915265048c273950006040516131459190614169565b60405180910390a3604051309060009060008051602061494a83398151915290610d20908590614169565b600f805460ff60a81b1916600160a81b179055600061318d6111bf565b90506000613199610b64565b90506000806001600160a01b0316826001600160a01b031663e6a43905856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131ef57600080fd5b505afa158015613203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132279190613e8c565b306040518363ffffffff1660e01b815260040161324592919061404c565b60206040518083038186803b15801561325d57600080fd5b505afa158015613271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132959190613e8c565b6001600160a01b0316141561339b57816001600160a01b031663c9c65396846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132ec57600080fd5b505afa158015613300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133249190613e8c565b306040518363ffffffff1660e01b815260040161334292919061404c565b602060405180830381600087803b15801561335c57600080fd5b505af1158015613370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133949190613e8c565b905061348c565b816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190613e8c565b6040518363ffffffff1660e01b815260040161343992919061404c565b60206040518083038186803b15801561345157600080fd5b505afa158015613465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134899190613e8c565b90505b600061349730611901565b90506134b830737a250d5630b4cf539739df2c5dacb4c659f2488d83612902565b836001600160a01b031663f305d7194730846000806134d561288e565b426040518863ffffffff1660e01b81526004016134f7969594939291906140c8565b6060604051808303818588803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613549919061400b565b5050506135c682856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561358957600080fd5b505afa15801561359d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c19190613e8c565b6135f8565b50600580546001600160a01b0319166001600160a01b03929092169190911790555050600f805460ff60a81b19169055565b613601826125e7565b1561361e5760405162461bcd60e51b8152600401610bad9061478d565b6001600160a01b0382166000818152600460205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b031916909217909155808061368f8585611ff3565b6040805160c0810182526001600160a01b0398891681526020808201868152828401868152606084019586526080840197885260a084019687529b8b16600090815260039283905293909320915182546001600160a01b0319169a16999099178155905160018201559751600289015551958701959095555160048601555050905160059092019190915550565b6000613727611063565b905060006137358383612812565b6001600160a01b03851660009081526020819052604090205490915061375b90826127a5565b6001600160a01b038516600090815260208190526040902055600c5461378190846127a5565b600c5550505050565b6040805180820190915260038152621694d560ea1b602082015290565b6137b0816125e7565b6137cc5760405162461bcd60e51b8152600401610bad90614689565b60005b600254811015610c7c57816001600160a01b0316600282815481106137f057fe5b6000918252602090912001546001600160a01b031614156138e35760028054600019810190811061381d57fe5b600091825260209091200154600280546001600160a01b03909216918390811061384357fe5b6000918252602080832090910180546001600160a01b039485166001600160a01b031991821617909155928516825260048082526040808420805460ff1916905560039283905283208054909416845560018401839055600280850184905591840183905583018290556005909201558054806138bc57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610c7c565b6001016137cf565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361392e5760405162461bcd60e51b8152600401610bad9190614172565b50600083858161393a57fe5b0495945050505050565b6001600160a01b0392831660009081526001602090815260408083209490951682529290925291902055565b613978613df8565b60005b6002548110156121d157600360006002838154811061399657fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106139e957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181206004019190915560028054600392919084908110613a2757fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110613a7a57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190206005015560010161397b565b6001600160a01b038082166000908152600360205260408120549091829182918291613ad891879116611ff3565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b60006002613b22856125e7565b15613b3e578215613b3557506003613b39565b5060015b613b63565b613b466128b0565b6001600160a01b0316856001600160a01b03161415613b63575060035b949350505050565b6001600160a01b0382166000908152600360205260408120600181015460058201546004830154600290930154849384938493613bb6939192610d7b928391606491610d7591612812565b90506000613bcd6064610d7b612710610b5e6128c8565b821115613c04576000613be08380612812565b9050613bfc612710610d7b613bf5848361284c565b8a90612812565b915050613c1f565b613c1c612710610d7b613c156128c8565b8990612812565b90505b613c37612710610d7b613c306128cd565b8490612812565b613c4f612710610d7b613c486128cd565b8590612812565b90955093509150509250925092565b6000806000613c6b611063565b90506000613c78866125e7565b15613cc8576001600160a01b0386166000908152600360205260409020600481015460028201546005830154600190930154613cc193610d7b92918391606491610d7591612812565b9050613d13565b600580546001600160a01b031660009081526003602052604090206004810154600282015492820154600190920154613d10939192610d7b92918391606491610d7591612812565b90505b6000613d286064610d7b612710610b5e6128c8565b821115613d84576000613d3b8380612812565b9050613d50612710610d7b613bf5848361284c565b9150613d63612710610d7b613bf56128d2565b821115613d7e57613d7b612710610d7b613bf56128d2565b91505b50613d98565b613d95612710610d7b613c156128c8565b90505b80613da38185612812565b945094505050509250929050565b6000806000613dbe611063565b90506000613dda612710610d7b613dd36128d8565b8890612812565b905080613de78184612812565b935093505050915091565b614bf490565b42600655565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b0316815260200160008152602001600081526020016000151581525090565b600060208284031215613e81578081fd5b8135611942816148fe565b600060208284031215613e9d578081fd5b8151611942816148fe565b60008060408385031215613eba578081fd5b8235613ec5816148fe565b91506020830135613ed5816148fe565b809150509250929050565b600080600060608486031215613ef4578081fd5b8335613eff816148fe565b92506020840135613f0f816148fe565b929592945050506040919091013590565b60008060408385031215613f32578182fd5b8235613f3d816148fe565b946020939093013593505050565b600080600060608486031215613f5f578283fd5b8335613f6a816148fe565b95602085013595506040909401359392505050565b600060208284031215613f90578081fd5b813561194281614913565b600060208284031215613fac578081fd5b815161194281614913565b600060208284031215613fc8578081fd5b5035919050565b600060208284031215613fe0578081fd5b5051919050565b60008060408385031215613ff9578182fd5b823591506020830135613ed5816148fe565b60008060006060848603121561401f578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b8181101561419e57858101830151858201604001528201614182565b818111156141af5783604083870101525b50601f01601f1916929092016040019392505050565b602080825260169082015275416d6f756e7420657863656564732062616c616e636560501b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b60208082526018908201527f43616e6e6f74206d696e7420706f73742070726573616c650000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a6e6f742070726573616c6560a81b604082015260600190565b6020808252601c908201527f43616c6c657220686173206e6f206c6f636b65642062616c616e636500000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526023908201527f54686973207472616e6368652063616e6e6f7420626520756e6c6f636b6564206040820152621e595d60ea1b606082015260800190565b6020808252600e908201526d30b63932b0b23c9039b2ba3a32b960911b604082015260600190565b6020808252600c908201526b283932b9b0b6329037bb32b960a11b604082015260600190565b6020808252818101527f416d6f756e7420657863656564732074686520746f6b656e2062616c616e6365604082015260600190565b60208082526014908201527350726573616c652079657420746f20636c6f736560601b604082015260600190565b60208082526025908201527f596f7520617265206e6f7420746865206f776e6572206f662074686973207472604082015264616e63686560d81b606082015260800190565b6020808252600b908201526a6e6f74207461786c65737360a81b604082015260600190565b6020808252601c908201527f50726573616c6520697320616c726561647920636f6d706c6574656400000000604082015260600190565b60208082526024908201527f54686973207472616e6368652068617320616c7265616479206265656e2076656040820152631cdd195960e21b606082015260800190565b6020808252600a90820152693737ba1039b2ba3a32b960b11b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f546f74616c20737570706c7920697320616c7265616479206d696e7465640000604082015260600190565b60208082526024908201527f5468697320706f6f6c2069732063757272656e746c79206e6f7420737570706f6040820152631c9d195960e21b606082015260800190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f5468697320706f6f6c20697320616c726561647920737570706f727465640000604082015260600190565b60208082526026908201527f54686973207472616e6368652068617320616c7265616479206265656e20756e6040820152651b1bd8dad95960d21b606082015260800190565b6020808252601a908201527f4574682070616972696e6720646f6573206e6f74206578697374000000000000604082015260600190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156148b95784516001600160a01b031683529383019391830191600101614894565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6001600160a01b03811681146121d157600080fd5b80151581146121d157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fa1e2e9dbd11d3d8670bf72385df1ce8267087133bcd0c99e08228e8e5b1ea3d64736f6c634300060c0033
Deployed Bytecode Sourcemap
28910:16283:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29644:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31215:161;;;;;;;;;;-1:-1:-1;31215:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29975:104::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19190:122::-;;;;;;;;;;-1:-1:-1;19190:122:0;;;;;:::i;:::-;;:::i;31384:314::-;;;;;;;;;;-1:-1:-1;31384:314:0;;;;;:::i;:::-;;:::i;20122:82::-;;;;;;;;;;;;;:::i;29866:97::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31706:219::-;;;;;;;;;;-1:-1:-1;31706:219:0;;;;;:::i;:::-;;:::i;20481:139::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36931:243::-;;;:::i;:::-;;19934:96;;;;;;;;;;;;;:::i;43385:135::-;;;;;;;;;;-1:-1:-1;43385:135:0;;;;;:::i;:::-;;:::i;32211:149::-;;;;;;;;;;-1:-1:-1;32211:149:0;;;;;:::i;:::-;;:::i;24252:772::-;;;;;;;;;;-1:-1:-1;24252:772:0;;;;;:::i;:::-;;:::i;39796:843::-;;;;;;;;;;-1:-1:-1;39796:843:0;;;;;:::i;:::-;;:::i;23688:558::-;;;;;;;;;;-1:-1:-1;23688:558:0;;;;;:::i;:::-;;:::i;20626:233::-;;;;;;;;;;;;;:::i;44090:509::-;;;;;;;;;;-1:-1:-1;44090:509:0;;;;;:::i;:::-;;:::i;20336:139::-;;;;;;;;;;;;;:::i;41654:1723::-;;;;;;;;;;-1:-1:-1;41654:1723:0;;;;;:::i;:::-;;:::i;30360:317::-;;;;;;;;;;-1:-1:-1;30360:317:0;;;;;:::i;:::-;;:::i;10756:148::-;;;;;;;;;;;;;:::i;38892:896::-;;;;;;;;;;-1:-1:-1;38892:896:0;;;;;:::i;:::-;;:::i;18082:120::-;;;;;;;;;;-1:-1:-1;18082:120:0;;;;;:::i;:::-;;:::i;43823:84::-;;;;;;;;;;-1:-1:-1;43823:84:0;;;;;:::i;:::-;;:::i;19740:92::-;;;;;;;;;;;;;:::i;26789:369::-;;;;;;;;;;-1:-1:-1;26789:369:0;;;;;:::i;:::-;;:::i;19630:104::-;;;;;;;;;;;;;:::i;43915:167::-;;;;;;;;;;-1:-1:-1;43915:167:0;;;;;:::i;:::-;;:::i;30689:191::-;;;;;;;;;;-1:-1:-1;30689:191:0;;;;;:::i;:::-;;:::i;18208:308::-;;;;;;;;;;-1:-1:-1;18208:308:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;10546:79::-;;;;;;;;;;;;;:::i;19838:90::-;;;;;;;;;;;;;:::i;30091:257::-;;;;;;;;;;;;;:::i;29753:101::-;;;;;;;;;;;;;:::i;31933:270::-;;;;;;;;;;-1:-1:-1;31933:270:0;;;;;:::i;:::-;;:::i;18642:85::-;;;;;;;;;;;;;:::i;30888:167::-;;;;;;;;;;-1:-1:-1;30888:167:0;;;;;:::i;:::-;;:::i;17805:122::-;;;;;;;;;;-1:-1:-1;17805:122:0;;;;;:::i;:::-;;:::i;20036:80::-;;;;;;;;;;;;;:::i;17933:142::-;;;;;;;;;;-1:-1:-1;17933:142:0;;;;;:::i;:::-;;:::i;20210:120::-;;;;;;;;;;-1:-1:-1;20210:120:0;;;;;:::i;:::-;;:::i;19432:92::-;;;;;;;;;;;;;:::i;18733:96::-;;;;;;;;;;;;;:::i;43647:168::-;;;;;;;;;;-1:-1:-1;43647:168:0;;;;;:::i;:::-;;:::i;20865:390::-;;;;;;;;;;-1:-1:-1;20865:390:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;19062:122::-;;;;;;;;;;-1:-1:-1;19062:122:0;;;;;:::i;:::-;;:::i;19530:94::-;;;;;;;;;;;;;:::i;43528:111::-;;;;;;;;;;-1:-1:-1;43528:111:0;;;;;:::i;:::-;;:::i;19318:108::-;;;;;;;;;;;;;:::i;36743:180::-;;;;;;;;;;-1:-1:-1;36743:180:0;;;;;:::i;:::-;;:::i;37983:643::-;;;;;;;;;;-1:-1:-1;37983:643:0;;;;;:::i;:::-;;:::i;44607:481::-;;;;;;;;;;-1:-1:-1;44607:481:0;;;;;:::i;:::-;;:::i;31063:144::-;;;;;;;;;;-1:-1:-1;31063:144:0;;;;;:::i;:::-;;:::i;45100:88::-;;;;;;;;;;-1:-1:-1;45100:88:0;;;;;:::i;:::-;;:::i;18522:114::-;;;;;;;;;;-1:-1:-1;18522:114:0;;;;;:::i;:::-;;:::i;38638:246::-;;;;;;;;;;-1:-1:-1;38638:246:0;;;;;:::i;:::-;;:::i;10910:244::-;;;;;;;;;;-1:-1:-1;10910:244:0;;;;;:::i;:::-;;:::i;18835:221::-;;;;;;;;;;-1:-1:-1;18835:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;29644:97::-;29681:13;29714:19;:17;:19::i;:::-;29707:26;;29644:97;;:::o;31215:161::-;31290:4;31307:39;31316:12;:10;:12::i;:::-;31330:7;31339:6;31307:8;:39::i;:::-;-1:-1:-1;31364:4:0;31215:161;;;;;:::o;29975:104::-;30028:7;30055:16;:14;:16::i;19190:122::-;-1:-1:-1;;;;;19278:26:0;;19254:4;19278:26;;;:17;:26;;;;;;;;19190:122;;;;:::o;31384:314::-;31482:4;31499:36;31509:6;31517:9;31528:6;31499:9;:36::i;:::-;31546:122;31555:6;31563:12;:10;:12::i;:::-;31577:90;31616:6;31577:90;;;;;;;;;;;;;;;;;:34;31591:6;31598:12;:10;:12::i;31577:34::-;:38;:90;:38;:90::i;:::-;31546:8;:122::i;:::-;-1:-1:-1;31686:4:0;31384:314;;;;;:::o;20122:82::-;20188:8;;-1:-1:-1;;;20188:8:0;;;;;20122:82::o;29866:97::-;29907:5;29932:23;:21;:23::i;31706:219::-;31794:4;31811:84;31820:12;:10;:12::i;:::-;31834:7;31843:51;31883:10;31843:35;31857:12;:10;:12::i;:::-;31870:7;31843:13;:35::i;:::-;:39;;:51::i;20481:139::-;20531:17;20586:25;:23;:25::i;36931:243::-;29202:19;:17;:19::i;:::-;-1:-1:-1;;;;;29188:33:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;29188:33:0;;29180:56;;;;-1:-1:-1;;;29180:56:0;;;;;;;:::i;:::-;;;;;;;;;29256:15;:13;:15::i;:::-;29255:16;29247:41;;;;-1:-1:-1;;;29247:41:0;;;;;;;:::i;:::-;37020:27:::1;:25;:27::i;:::-;37003:13;:11;:13::i;:::-;:44;;36995:87;;;;-1:-1:-1::0;;;36995:87:0::1;;;;;;;:::i;:::-;37093:16;:14;:16::i;:::-;37120:12;:19:::0;;-1:-1:-1;;;;37120:19:0::1;-1:-1:-1::0;;;37120:19:0::1;::::0;;37150:16:::1;:14;:16::i;:::-;36931:243::o:0;19934:96::-;20011:11;;-1:-1:-1;;;;;20011:11:0;19934:96;:::o;43385:135::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43479:33:::1;43496:4;43502:9;43479:16;:33::i;:::-;43385:135:::0;;:::o;32211:149::-;29202:19;:17;:19::i;:::-;-1:-1:-1;;;;;29188:33:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;29188:33:0;;29180:56;;;;-1:-1:-1;;;29180:56:0;;;;;;;:::i;:::-;29256:15;:13;:15::i;:::-;29255:16;29247:41;;;;-1:-1:-1;;;29247:41:0;;;;;;;:::i;:::-;32283:23:::1;32296:2;32299:6;32283:12;:23::i;:::-;32342:2;-1:-1:-1::0;;;;;32322:30:0::1;32339:1;-1:-1:-1::0;;;;;32322:30:0::1;-1:-1:-1::0;;;;;;;;;;;32345:6:0::1;32322:30;;;;;;:::i;:::-;;;;;;;;32211:149:::0;;:::o;24252:772::-;-1:-1:-1;;;;;24490:19:0;;24310:7;24490:19;;;:13;:19;;;;;:37;;;;24448:36;;;;24392:41;;;;24354:32;;;;;24310:7;;24353:175;;24490:37;24353:132;;24448:36;;24353:132;;24439:3;;24353:81;;24354:32;24353:38;:81::i;:::-;:85;;:90::i;:::-;:94;;:132::i;:175::-;24330:198;;24539:16;24585:58;24639:3;24586:47;24627:5;24586:36;:34;:36::i;24585:58::-;24570:12;:73;24566:451;;;24660:18;24681:30;24698:12;;24681:16;:30::i;:::-;24660:51;-1:-1:-1;24737:21:0;24660:51;24752:5;24737:14;:21::i;:::-;24726:32;;24788:33;:31;:33::i;:::-;24777:8;:44;24773:125;;;24849:33;:31;:33::i;:::-;24842:40;;;;;;;24773:125;-1:-1:-1;24919:8:0;-1:-1:-1;24912:15:0;;-1:-1:-1;24912:15:0;24566:451;24969:36;:34;:36::i;:::-;24962:43;;;;;;39796:843;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;39892:22:::1;39916:15:::0;39933:18:::1;39953:11:::0;39968:21:::1;39981:7;39968:12;:21::i;:::-;39891:98;;;;;;;;40008:6;:14;;40018:4;40008:14;;;40000:65;;;;-1:-1:-1::0;;;40000:65:0::1;;;;;;;:::i;:::-;40097:3;40084:10;:16;40076:64;;;;-1:-1:-1::0;;;40076:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40184:30:0;::::1;;::::0;;;:14:::1;:30;::::0;;;;;:43:::1;::::0;40219:7;40184:34:::1;:43::i;:::-;-1:-1:-1::0;;;;;40151:30:0;;::::1;;::::0;;;:14:::1;:30;::::0;;;;;:76;;;;40268:27;;::::1;::::0;;;;:40:::1;::::0;40300:7;40268:31:::1;:40::i;:::-;-1:-1:-1::0;;;;;40238:27:0;;::::1;;::::0;;;:14:::1;:27;::::0;;;;;:70;;;;40323:30;;::::1;::::0;;;;40319:82:::1;;-1:-1:-1::0;;;;;40360:33:0;::::1;40396:5;40360:33:::0;;;:17:::1;:33;::::0;;;;:41;;-1:-1:-1;;40360:41:0::1;::::0;;40319:82:::1;-1:-1:-1::0;;;;;40412:30:0;::::1;;::::0;;;:17:::1;:30;::::0;;;;:37;;-1:-1:-1;;40412:37:0::1;40445:4;40412:37;::::0;;40461:10:::1;:19:::0;;40430:11;;40461:10;40472:7;;40461:19;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;;:45:::0;;-1:-1:-1;;;;;;40461:45:0::1;-1:-1:-1::0;;;;;40461:45:0;;;::::1;::::0;;;::::1;::::0;;;40541:11:::1;:9;:11::i;:::-;40517:35:::0;-1:-1:-1;;;;;;40568:63:0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;;;;;;;;40604:26:0::1;:7:::0;40517:35;40604:11:::1;:26::i;:::-;40568:63;;;;;;:::i;:::-;;;;;;;;10741:1;;;;;39796:843:::0;;:::o;23688:558::-;-1:-1:-1;;;;;23929:19:0;;23746:7;23929:19;;;:13;:19;;;;;:32;;;;23882:41;;;;23830:37;;;;23788:36;;;;;23746:7;;23787:175;;23929:32;23787:137;;23882:41;;23787:137;;23873:3;;23787:81;;23788:36;23787:42;:81::i;:175::-;23766:196;;23990:56;24042:3;23990:47;24031:5;23991:34;:32;:34::i;23990:56::-;23977:10;:69;23973:266;;;24063:18;24084:26;24099:10;;24084:14;:26::i;:::-;24063:47;-1:-1:-1;24132:21:0;24063:47;24147:5;24132:14;:21::i;23973:266::-;24193:34;:32;:34::i;:::-;24186:41;;;;;20626:233;20691:12;;20667:7;;-1:-1:-1;;;20691:12:0;;;;20687:165;;;20743:12;;20727:11;;:29;;:15;:29::i;:::-;20720:36;;;;20687:165;20796:44;20812:27;:25;:27::i;:::-;20796:11;;;:15;:44::i;44090:509::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;44176:27:::1;44195:7;44176:18;:27::i;:::-;44168:54;;;;-1:-1:-1::0;;;44168:54:0::1;;;;;;;:::i;:::-;44250:17;::::0;;-1:-1:-1;;;;;44250:17:0;;::::1;44271:5;44233:35:::0;;;:16:::1;:35;::::0;;;;:43;;-1:-1:-1;;44233:43:0::1;::::0;;44318:17;;44308:28:::1;::::0;44318:17:::1;44308:9;:28::i;:::-;44287:49:::0;-1:-1:-1;44351:14:0;;44347:164:::1;;44392:17;::::0;44382:49:::1;::::0;-1:-1:-1;;;;;44392:17:0::1;44411:7:::0;44420:10;44382:9:::1;:49::i;:::-;44460:17;::::0;44451:48:::1;::::0;-1:-1:-1;;;;;44451:48:0;;::::1;::::0;44460:17:::1;::::0;-1:-1:-1;;;;;;;;;;;44451:48:0;::::1;::::0;44488:10;;44451:48:::1;:::i;:::-;;;;;;;;44347:164;-1:-1:-1::0;44521:17:0::1;:27:::0;;-1:-1:-1;;;;;44521:27:0;;::::1;-1:-1:-1::0;;;;;;44521:27:0;;::::1;::::0;::::1;::::0;;:17:::1;44559:25:::0;;;:16:::1;:25;::::0;;;;:32;;-1:-1:-1;;44559:32:0::1;44521:27:::0;44559:32:::1;::::0;;44090:509::o;20336:139::-;20385:18;20442:24;:22;:24::i;41654:1723::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;29429:8:::1;:15:::0;;-1:-1:-1;;;;29429:15:0::1;-1:-1:-1::0;;;29429:15:0::1;::::0;;;41793:18:::2;:16;:18::i;:::-;41756:55;;41822:32;41857:19;:17;:19::i;:::-;41926:48;::::0;-1:-1:-1;;;41926:48:0;;41822:54;;-1:-1:-1;41887:24:0::2;::::0;;;-1:-1:-1;;;;;41926:22:0;::::2;::::0;::::2;::::0;:48:::2;::::0;41949:9;;41968:4:::2;::::0;41926:48:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41926:62:0::2;;41922:278;;;42024:65;::::0;-1:-1:-1;;;42024:65:0;;-1:-1:-1;;;;;42024:25:0;::::2;::::0;::::2;::::0;:65:::2;::::0;42064:9;;42083:4:::2;::::0;42024:65:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42005:84;;41922:278;;;42141:47;::::0;-1:-1:-1;;;42141:47:0;;-1:-1:-1;;;;;42141:22:0;::::2;::::0;::::2;::::0;:47:::2;::::0;42164:9;;42182:4:::2;::::0;42141:47:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42122:66;;41922:278;42295:1;-1:-1:-1::0;;;;;42218:79:0::2;:14;-1:-1:-1::0;;;;;42218:22:0::2;;42241:9;42259:15;-1:-1:-1::0;;;;;42259:20:0::2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42218:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42218:79:0::2;;;42210:118;;;;-1:-1:-1::0;;;42210:118:0::2;;;;;;;:::i;:::-;42375:6;42347:24;42365:4;42347:9;:24::i;:::-;:34;;42339:79;;;;-1:-1:-1::0;;;42339:79:0::2;;;;;;;:::i;:::-;42429:17;42449:13;:6:::0;42460:1:::2;42449:10;:13::i;:::-;42429:33:::0;-1:-1:-1;42473:13:0::2;42489:21;:6:::0;42429:33;42489:10:::2;:21::i;:::-;42473:37;;42521:22;42553:9;-1:-1:-1::0;;;;;42546:27:0::2;;42582:4;42546:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42623:16;::::0;;42637:1:::2;42623:16:::0;;;;;::::2;::::0;;;42521:67;;-1:-1:-1;42599:21:0::2;::::0;42623:16;::::2;::::0;::::2;42599:21:::0;;42623:16:::2;::::0;::::2;;::::0;-1:-1:-1;42623:16:0::2;42599:40;;42668:4;42650;42655:1;42650:7;;;;;;;;;;;;;:23;-1:-1:-1::0;;;;;42650:23:0::2;;;-1:-1:-1::0;;;;;42650:23:0::2;;;::::0;::::2;42694:15;-1:-1:-1::0;;;;;42694:20:0::2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42684:4;42689:1;42684:7;;;;;;;;;;;;;:32;-1:-1:-1::0;;;;;42684:32:0::2;;;-1:-1:-1::0;;;;;42684:32:0::2;;;::::0;::::2;42737:9;42727:4;42732:1;42727:7;;;;;;;;;;;;;:19;-1:-1:-1::0;;;;;42727:19:0::2;;;-1:-1:-1::0;;;;;42727:19:0::2;;;::::0;::::2;42757:60;42774:4;42789:15;42807:9;42757:8;:60::i;:::-;42828:135;::::0;-1:-1:-1;;;42828:135:0;;-1:-1:-1;;;;;42828:69:0;::::2;::::0;::::2;::::0;:135:::2;::::0;42912:9;;42923:1:::2;::::0;42926:4;;42940::::2;::::0;42947:15:::2;::::0;42828:135:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;42974:18;42995:62;43042:14;43002:9;-1:-1:-1::0;;;;;42995:27:0::2;;43031:4;42995:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46:::0;::::2;:62::i;:::-;42974:83;;43068:56;43085:4;43100:15;43118:5;43068:8;:56::i;:::-;43135:63;::::0;-1:-1:-1;;;43135:63:0;;-1:-1:-1;;;;;43135:25:0;::::2;::::0;::::2;::::0;:63:::2;::::0;43169:15;;43187:10;;43135:63:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;43209:104:0::2;::::0;-1:-1:-1;;;43209:104:0;;-1:-1:-1;;;;;43209:28:0;::::2;::::0;::::2;::::0;:104:::2;::::0;43246:4:::2;::::0;43252:9;;43262:5;;43268:10;;43279:1:::2;::::0;;;43246:4;;43297:15:::2;::::0;43209:104:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43324:45;43341:16;43359:9;43324:16;:45::i;:::-;-1:-1:-1::0;;29467:8:0::1;:16:::0;;-1:-1:-1;;;;29467:16:0::1;::::0;;-1:-1:-1;;;;;;;;41654:1723:0:o;30360:317::-;30426:7;30446:21;30470:11;:9;:11::i;:::-;30446:35;;30496:25;30513:7;30496:16;:25::i;:::-;30492:115;;;30531:75;30592:13;30531:56;30561:25;30578:7;30561:16;:25::i;:::-;30531;30548:7;30531:16;:25::i;30492:115::-;30625:44;30655:13;30625:25;30642:7;30625:16;:25::i;:44::-;30618:51;30360:317;-1:-1:-1;;;30360:317:0:o;10756:148::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;10847:6:::1;::::0;10826:40:::1;::::0;10863:1:::1;::::0;-1:-1:-1;;;;;10847:6:0::1;::::0;10826:40:::1;::::0;10863:1;;10826:40:::1;10877:6;:19:::0;;-1:-1:-1;;;;;;10877:19:0::1;::::0;;10756:148::o;38892:896::-;38960:30;38977:12;:10;:12::i;38960:30::-;38952:70;;;;-1:-1:-1;;;38952:70:0;;;;;;;:::i;:::-;39034:19;39055:15;39072:18;39092:11;39107:21;39120:7;39107:12;:21::i;:::-;39033:95;;;;;;;;39161:3;39147:10;:17;;39139:64;;;;-1:-1:-1;;;39139:64:0;;;;;;;:::i;:::-;39237:12;:10;:12::i;:::-;-1:-1:-1;;;;;39222:27:0;:11;-1:-1:-1;;;;;39222:27:0;;39214:76;;;;-1:-1:-1;;;39214:76:0;;;;;;;:::i;:::-;39320:4;39309:15;;;;39301:66;;;;-1:-1:-1;;;39301:66:0;;;;;;;:::i;:::-;39400:19;;:32;;39424:7;39400:23;:32::i;:::-;39378:19;:54;39474:41;39507:7;39474:14;;39489:12;:10;:12::i;:::-;-1:-1:-1;;;;;39474:28:0;;;;;;;;;;;;-1:-1:-1;39474:28:0;;;:32;:41::i;:::-;39443:14;:28;39458:12;:10;:12::i;:::-;-1:-1:-1;;;;;39443:28:0;-1:-1:-1;;;;;39443:28:0;;;;;;;;;;;;:72;;;;39557:41;39590:7;39557:14;:28;39572:12;:10;:12::i;:::-;-1:-1:-1;;;;;39557:28:0;;;;;;;;;;;;-1:-1:-1;39557:28:0;;;:32;:41::i;:::-;39526:14;:28;39541:12;:10;:12::i;:::-;-1:-1:-1;;;;;39526:28:0;-1:-1:-1;;;;;39526:28:0;;;;;;;;;;;;:72;;;;39645:1;39613:14;:28;39628:12;:10;:12::i;:::-;-1:-1:-1;;;;;39613:28:0;-1:-1:-1;;;;;39613:28:0;;;;;;;;;;;;;:33;39609:78;;39682:5;39648:17;:31;39666:12;:10;:12::i;:::-;-1:-1:-1;;;;;39648:31:0;;;;;;;;;;;;-1:-1:-1;39648:31:0;:39;;-1:-1:-1;;39648:39:0;;;;;;;;;;39609:78;39734:1;39698:10;39709:7;39698:19;;;;;;;;;;;;;;;;;;:33;;:37;;;;39775:5;39746:10;39757:7;39746:19;;;;;;;;;;;;;;;;;;;;;:26;;:34;;-1:-1:-1;;39746:34:0;;;;;;;;;;-1:-1:-1;;;;;38892:896:0:o;18082:120::-;18145:7;18172:15;18188:5;18172:22;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18172:22:0;;18082:120;-1:-1:-1;;18082:120:0:o;43823:84::-;29078:29;29094:12;:10;:12::i;29078:29::-;29070:52;;;;-1:-1:-1;;;29070:52:0;;;;;;;:::i;:::-;43884:8:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;43884:15:0::1;-1:-1:-1::0;;;;43884:15:0;;::::1;::::0;;;::::1;::::0;;43823:84::o;19740:92::-;19813:11;;-1:-1:-1;;;;;19813:11:0;19740:92;:::o;26789:369::-;-1:-1:-1;;;;;26944:19:0;;;26846:20;26944:19;;;:13;:19;;;;;:29;26846:20;;;;;;26915:59;;26938:4;;26944:29;26915:22;:59::i;:::-;-1:-1:-1;;;;;26985:19:0;;;;;;;:13;:19;;;;;;;;:29;;;:41;;;;27037:32;;;:47;;;;-1:-1:-1;27095:36:0;;;:55;;;;-1:-1:-1;;;26789:369:0:o;19630:104::-;19709:17;;-1:-1:-1;;;;;19709:17:0;19630:104;:::o;43915:167::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43998:21:::1;44014:4;43998:15;:21::i;:::-;43990:43;;;;-1:-1:-1::0;;;43990:43:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44044:22:0::1;44069:5;44044:22:::0;;;:16:::1;:22;::::0;;;;:30;;-1:-1:-1;;44044:30:0::1;::::0;;43915:167::o;30689:191::-;30754:7;30774:21;30798:11;:9;:11::i;:::-;30774:35;;30827:44;30857:13;30827:25;30844:7;30827:16;:25::i;18208:308::-;18268:7;18277;18286;18295;18304;18313;18333:21;;:::i;:::-;-1:-1:-1;;;;;;;;;18357:19:0;;;;;;;:13;:19;;;;;;;;;18333:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18333:43:0;;-1:-1:-1;18333:43:0;;-1:-1:-1;18208:308:0:o;10546:79::-;10611:6;;-1:-1:-1;;;;;10611:6:0;10546:79;:::o;19838:90::-;19908:12;;-1:-1:-1;;;19908:12:0;;;;;19838:90::o;30091:257::-;30141:7;30161:21;30185:11;:9;:11::i;:::-;30161:35;;30214:126;30313:26;30323:15;:13;:15::i;30313:26::-;30214:94;30283:24;30301:4;30283:9;:24::i;:::-;30214:64;30235:42;30263:13;30235:23;:21;:23::i;:42::-;30214:16;:14;:16::i;:126::-;30207:133;;;30091:257;:::o;29753:101::-;29792:13;29825:21;:19;:21::i;31933:270::-;32026:4;32043:130;32052:12;:10;:12::i;:::-;32066:7;32075:97;32115:15;32075:97;;;;;;;;;;;;;;;;;:35;32089:12;:10;:12::i;:::-;32102:7;32075:13;:35::i;18642:85::-;18710:9;;-1:-1:-1;;;;;18710:9:0;18642:85;:::o;30888:167::-;30966:4;30983:42;30993:12;:10;:12::i;:::-;31007:9;31018:6;30983:9;:42::i;17805:122::-;-1:-1:-1;;;;;17896:23:0;17869:7;17896:23;;;;;;;;;;;;17805:122::o;20036:80::-;20101:7;;-1:-1:-1;;;20101:7:0;;;;;20036:80::o;17933:142::-;-1:-1:-1;;;;;18038:20:0;;;18011:7;18038:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;17933:142::o;20210:120::-;-1:-1:-1;;;;;20297:25:0;20273:4;20297:25;;;:16;:25;;;;;;;;;20210:120::o;19432:92::-;19505:11;;19432:92;:::o;18733:96::-;18808:13;;18733:96;:::o;43647:168::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43728:21:::1;43744:4;43728:15;:21::i;:::-;43727:22;43719:48;;;;-1:-1:-1::0;;;43719:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43778:22:0::1;;::::0;;;:16:::1;:22;::::0;;;;:29;;-1:-1:-1;;43778:29:0::1;43803:4;43778:29;::::0;;43647:168::o;20865:390::-;20951:7;20960;20969;20989:17;21016:4;-1:-1:-1;;;;;21009:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21069:37;;-1:-1:-1;;;21069:37:0;;20989:46;;-1:-1:-1;21046:20:0;;21084:4;;21069:31;;:37;;21101:4;;21069:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21046:60;;21117:24;21159:9;-1:-1:-1;;;;;21144:36:0;;21181:4;21144:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21205:12;;;;-1:-1:-1;21237:9:0;;-1:-1:-1;20865:390:0;-1:-1:-1;;;;20865:390:0:o;19062:122::-;-1:-1:-1;;;;;19153:23:0;19126:7;19153:23;;;:14;:23;;;;;;;19062:122::o;19530:94::-;19604:12;;19530:94;:::o;43528:111::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43606:25:::1;43626:4;43606:19;:25::i;:::-;43528:111:::0;:::o;19318:108::-;19399:19;;19318:108;:::o;36743:180::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;36824:15:::1;:13;:15::i;:::-;36823:16;36815:57;;;;-1:-1:-1::0;;;36815:57:0::1;;;;;;;:::i;:::-;36883:32;36904:10;36883:20;:32::i;37983:643::-:0;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;38104:15:::1;:13;:15::i;:::-;38103:16;38095:53;;;;-1:-1:-1::0;;;38095:53:0::1;;;;;;;:::i;:::-;38159:21;38183:11;:9;:11::i;:::-;38159:35:::0;-1:-1:-1;38205:19:0::1;38227:25;:6:::0;38159:35;38227:10:::1;:25::i;:::-;38279:47;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;38279:47:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;38321:4:::1;38279:47:::0;;;;;;38263:10:::1;:64:::0;;;;::::1;::::0;;-1:-1:-1;38263:64:0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;38263:64:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38263:64:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;38364:23;;:14:::1;:23:::0;;;;38279:47;;-1:-1:-1;38364:40:0::1;::::0;38279:47;38364:27:::1;:40::i;:::-;-1:-1:-1::0;;;;;38338:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;:66;;;;38415:17:::1;:26:::0;;;:33;;-1:-1:-1;;38415:33:0::1;38444:4;38415:33;::::0;;38481:19:::1;::::0;:36:::1;::::0;38505:11;38481:23:::1;:36::i;:::-;38459:19;:58:::0;38543:12:::1;::::0;:24:::1;::::0;38560:6;38543:16:::1;:24::i;:::-;38528:12;:39:::0;38583:35:::1;::::0;-1:-1:-1;;;;;38583:35:0;::::1;::::0;38600:1:::1;::::0;-1:-1:-1;;;;;;;;;;;38583:35:0;::::1;::::0;38611:6;;38583:35:::1;:::i;:::-;;;;;;;;10741:1;;37983:643:::0;;;:::o;44607:481::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;29429:8:::1;:15:::0;;-1:-1:-1;;;;29429:15:0::1;-1:-1:-1::0;;;29429:15:0::1;::::0;;44695:27:::2;44714:7:::0;44695:18:::2;:27::i;:::-;44687:54;;;;-1:-1:-1::0;;;44687:54:0::2;;;;;;;:::i;:::-;44769:11;::::0;;-1:-1:-1;;;;;44769:11:0;;::::2;44784:5;44752:29:::0;;;:16:::2;:29;::::0;;;;:37;;-1:-1:-1;;44752:37:0::2;::::0;;44831:11;;44821:22:::2;::::0;44831:11:::2;44821:9;:22::i;:::-;44800:43:::0;-1:-1:-1;44858:14:0;;44854:152:::2;;44899:11;::::0;44889:43:::2;::::0;-1:-1:-1;;;;;44899:11:0::2;44912:7:::0;44921:10;44889:9:::2;:43::i;:::-;44961:11;::::0;44952:42:::2;::::0;-1:-1:-1;;;;;44952:42:0;;::::2;::::0;44961:11:::2;::::0;-1:-1:-1;;;;;;;;;;;44952:42:0;::::2;::::0;44983:10;;44952:42:::2;:::i;:::-;;;;;;;;44854:152;-1:-1:-1::0;45016:11:0::2;:21:::0;;-1:-1:-1;;;;;45016:21:0;;::::2;-1:-1:-1::0;;;;;;45016:21:0;;::::2;::::0;::::2;::::0;;:11:::2;45048:25:::0;;;:16:::2;:25;::::0;;;;:32;;-1:-1:-1;;45048:32:0::2;45016:21:::0;45048:32:::2;::::0;;29467:8:::1;:16:::0;;-1:-1:-1;;;;29467:16:0::1;::::0;;44607:481::o;31063:144::-;31144:7;31171:28;31185:5;31191:7;31171:13;:28::i;45100:88::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;45166:7:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;45166:14:0::1;-1:-1:-1::0;;;;45166:14:0;;::::1;::::0;;;::::1;::::0;;45100:88::o;18522:114::-;-1:-1:-1;;;;;18606:22:0;18582:4;18606:22;;;:16;:22;;;;;;;;;18522:114::o;38638:246::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;38741:15:::1;:13;:15::i;:::-;38740:16;38732:53;;;;-1:-1:-1::0;;;38732:53:0::1;;;;;;;:::i;10910:244::-:0;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10999:22:0;::::1;10991:73;;;;-1:-1:-1::0;;;10991:73:0::1;;;;;;;:::i;:::-;11101:6;::::0;11080:38:::1;::::0;-1:-1:-1;;;;;11080:38:0;;::::1;::::0;11101:6:::1;::::0;11080:38:::1;::::0;11101:6:::1;::::0;11080:38:::1;11129:6;:17:::0;;-1:-1:-1;;;;;;11129:17:0::1;-1:-1:-1::0;;;;;11129:17:0;;;::::1;::::0;;;::::1;::::0;;10910:244::o;18835:221::-;18891:7;18900;18909;18918:4;18935:17;;:::i;:::-;18955:10;18966:3;18955:15;;;;;;;;;;;;;;;;;18935:35;;;;;;;;18955:15;;;;;;;;18935:35;;-1:-1:-1;;;;;18935:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18935:35:0;-1:-1:-1;18935:35:0;-1:-1:-1;18835:221:0;-1:-1:-1;;;18835:221:0:o;13470:94::-;-1:-1:-1;;11334:27:0;13470:94::o;7067:174::-;7186:20;7225:8;;;7067:174::o;5629:179::-;5687:7;5719:5;;;5743:6;;;;5735:46;;;;-1:-1:-1;;;5735:46:0;;;;;;;:::i;6404:132::-;6462:7;6489:39;6493:1;6496;6489:39;;;;;;;;;;;;;;;;;:3;:39::i;15316:96::-;12301:7;15316:96;:::o;6152:246::-;6210:7;6234:6;6230:47;;-1:-1:-1;6264:1:0;6257:8;;6230:47;6299:5;;;6303:1;6299;:5;:1;6323:5;;;;;:10;6315:56;;;;-1:-1:-1;;;6315:56:0;;;;;;;:::i;5814:136::-;5872:7;5899:43;5903:1;5906;5899:43;;;;;;;;;;;;;;;;;:3;:43::i;16080:100::-;12835:42;16080:100;:::o;13366:98::-;11274:13;13366:98;:::o;15760:96::-;12549:42;15760:96;:::o;14028:112::-;11419:3;14028:112;:::o;14492:100::-;11643:3;14492:100;:::o;14268:110::-;11588:4;14268:110;:::o;14384:102::-;11532:2;14384:102;:::o;16186:89::-;16262:5;;;;;;;;;;;;-1:-1:-1;;;16262:5:0;;;;16186:89;:::o;9862:106::-;9950:10;9862:106;:::o;32368:336::-;-1:-1:-1;;;;;32461:19:0;;32453:68;;;;-1:-1:-1;;;32453:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32540:21:0;;32532:68;;;;-1:-1:-1;;;32532:68:0;;;;;;;:::i;:::-;32611:37;32625:5;32632:7;32641:6;32611:13;:37::i;:::-;32680:7;-1:-1:-1;;;;;32664:32:0;32673:5;-1:-1:-1;;;;;32664:32:0;;32689:6;32664:32;;;;;;:::i;:::-;;;;;;;;32368:336;;;:::o;32712:3605::-;29352:10;:8;:10::i;:::-;29351:11;29343:30;;;;-1:-1:-1;;;29343:30:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32818:20:0;::::1;32810:70;;;;-1:-1:-1::0;;;32810:70:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32899:23:0;::::1;32891:71;;;;-1:-1:-1::0;;;32891:71:0::1;;;;;;;:::i;:::-;32990:1;32981:6;:10;32973:55;;;;-1:-1:-1::0;;;32973:55:0::1;;;;;;;:::i;:::-;33057:17;33067:6;33057:9;:17::i;:::-;33047:6;:27;;33039:61;;;;-1:-1:-1::0;;;33039:61:0::1;;;;;;;:::i;:::-;33129:25;33147:6;33129:17;:25::i;:::-;33119:6;:35;;33111:78;;;;-1:-1:-1::0;;;33111:78:0::1;;;;;;;:::i;:::-;33208:15;:13;:15::i;:::-;33200:47;;;;-1:-1:-1::0;;;33200:47:0::1;;;;;;;:::i;:::-;33268:49;33290:26;:24;:26::i;:::-;33268:17;:15;:17::i;:49::-;33262:3;:55;33258:74;;;33319:13;:11;:13::i;:::-;33343:21;33367:11;:9;:11::i;:::-;33343:35:::0;-1:-1:-1;33389:19:0::1;33411:25;:6:::0;33343:35;33411:10:::1;:25::i;:::-;33389:47;;33447:14;33476:11;:9;:11::i;:::-;33472:425;;;-1:-1:-1::0;33513:1:0::1;33472:425;;;33547:11;33577:23;33593:6;33577:15;:23::i;:::-;33573:252;;;33630:16;33639:6;33630:8;:16::i;:::-;33621:25;;33573:252;;;33672:26;33688:9;33672:15;:26::i;:::-;33668:157;;;33718:25;33733:9;33718:14;:25::i;:::-;33668:157;;;33799:9;::::0;33784:25:::1;::::0;-1:-1:-1;;;;;33799:9:0::1;33784:14;:25::i;:::-;33848:37;33859:6;33867:9;33878:6;33848:10;:37::i;:::-;33839:46;;33472:425;;33992:6;34002:1;33992:11;33988:2322;;;34021:22;34045:20:::0;34067:17:::1;34088:28;34101:6;34109;34088:12;:28::i;:::-;-1:-1:-1::0;;;;;34208:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;34020:96;;-1:-1:-1;34020:96:0;;-1:-1:-1;34020:96:0;-1:-1:-1;34208:39:0::1;::::0;34235:11;34208:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;34183:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;34290:25;;::::1;::::0;;;;:42:::1;::::0;34320:11;34290:29:::1;:42::i;:::-;-1:-1:-1::0;;;;;34262:25:0;::::1;:14;:25:::0;;;::::1;::::0;;;;;;:70;34381::::1;34417:33;:14:::0;34436:13;34417:18:::1;:33::i;:::-;34381:14;:31:::0;34396:15:::1;:13;:15::i;34381:70::-;34347:14;:31:::0;34362:15:::1;:13;:15::i;:::-;-1:-1:-1::0;;;;;34347:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34347:31:0;:104;34511:79:::1;34558:31;:12:::0;34575:13;34558:16:::1;:31::i;:::-;34511:14;:42:::0;34526:26:::1;:24;:26::i;34511:79::-;34466:14;:42:::0;34481:26:::1;:24;:26::i;:::-;-1:-1:-1::0;;;;;34466:42:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34466:42:0;:124;34620:12:::1;::::0;:27:::1;::::0;34637:9;34620:16:::1;:27::i;:::-;34605:12;:42;;;;34684:9;-1:-1:-1::0;;;;;34667:35:0::1;34676:6;-1:-1:-1::0;;;;;34667:35:0::1;-1:-1:-1::0;;;;;;;;;;;34695:6:0::1;34667:35;;;;;;:::i;:::-;;;;;;;;34742:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;34722:51:0::1;34739:1;-1:-1:-1::0;;;;;34722:51:0::1;-1:-1:-1::0;;;;;;;;;;;34758:14:0::1;34722:51;;;;;;:::i;:::-;;;;;;;;34813:26;:24;:26::i;:::-;-1:-1:-1::0;;;;;34793:60:0::1;34810:1;-1:-1:-1::0;;;;;34793:60:0::1;-1:-1:-1::0;;;;;;;;;;;34840:12:0::1;34793:60;;;;;;:::i;:::-;;;;;;;;33988:2322;;;;;;34982:6;34992:1;34982:11;34978:1332;;;35011:16;35029:21:::0;35054:32:::1;35068:9;35079:6;35054:13;:32::i;:::-;35010:76;;;;35102:18;35122:23:::0;35149:21:::1;35163:6;35149:13;:21::i;:::-;35101:69:::0;;-1:-1:-1;35101:69:0;-1:-1:-1;35185:28:0::1;35216:36;35101:69:::0;35216:20:::1;:6:::0;35227:8;35216:10:::1;:20::i;:36::-;35185:67:::0;-1:-1:-1;35267:27:0::1;35297:39;35185:67:::0;35322:13;35297:24:::1;:39::i;:::-;-1:-1:-1::0;;;;;35376:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;35267:69;;-1:-1:-1;35376:39:0::1;::::0;35403:11;35376:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;35351:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;35458:25;;::::1;::::0;;;;:50:::1;::::0;35488:19;35458:29:::1;:50::i;:::-;-1:-1:-1::0;;;;;35430:25:0;;::::1;:14;:25:::0;;;::::1;::::0;;;;;;;:78;;;;35574:17:::1;::::0;;;::::1;35559:33:::0;;;;:54:::1;::::0;35597:15;35559:37:::1;:54::i;:::-;35538:17;::::0;-1:-1:-1;;;;;35538:17:0::1;35523:14;:33:::0;;;::::1;::::0;;;;;;:90;35643:12:::1;::::0;:26:::1;::::0;35660:8;35643:16:::1;:26::i;:::-;35628:12;:41:::0;35698:11:::1;::::0;:30:::1;::::0;35714:13;35698:15:::1;:30::i;:::-;35684:11;:44;;;;35765:9;-1:-1:-1::0;;;;;35748:49:0::1;35757:6;-1:-1:-1::0;;;;;35748:49:0::1;-1:-1:-1::0;;;;;;;;;;;35776:20:0::1;35748:49;;;;;;:::i;:::-;;;;;;;;35842:1;-1:-1:-1::0;;;;;35817:38:0::1;35826:6;-1:-1:-1::0;;;;;35817:38:0::1;-1:-1:-1::0;;;;;;;;;;;35846:8:0::1;35817:38;;;;;;:::i;:::-;;;;;;;;35892:17;::::0;35875:47:::1;::::0;-1:-1:-1;;;;;35892:17:0;;::::1;::::0;35875:47;::::1;::::0;-1:-1:-1;;;;;;;;;;;35875:47:0;::::1;::::0;35911:10;;35875:47:::1;:::i;:::-;;;;;;;;34978:1332;;;;;;;;;36066:6;36076:1;36066:11;36062:248;;;-1:-1:-1::0;;;;;36119:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:39:::1;::::0;36146:11;36119:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;36094:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;36201:25;;::::1;::::0;;;;:42:::1;::::0;36231:11;36201:29:::1;:42::i;:::-;-1:-1:-1::0;;;;;36173:25:0;;::::1;:14;:25:::0;;;::::1;::::0;;;;;;;;:70;;;;36263:35;;;;::::1;::::0;-1:-1:-1;;;;;;;;;;;36263:35:0;::::1;::::0;36291:6;;36263:35:::1;:::i;:::-;;;;;;;;36062:248;29384:1;;;32712:3605:::0;;;:::o;5956:190::-;6042:7;6078:12;6070:6;;;;6062:29;;;;-1:-1:-1;;;6062:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;6114:5:0;;;5956:190::o;16379:88::-;13121:1;16379:88;:::o;15862:98::-;12641:42;15862:98;:::o;37182:793::-;37236:15;:13;:15::i;:::-;37235:16;37227:53;;;;-1:-1:-1;;;37227:53:0;;;;;;;:::i;:::-;37291:54;37304:26;:24;:26::i;:::-;37332:12;37291;:54::i;:::-;37356:26;:24;:26::i;:::-;-1:-1:-1;;;;;37356:35:0;:65;37392:28;:21;37418:1;37392:25;:28::i;:::-;37356:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37432:14;37449:46;37481:13;:11;:13::i;:::-;37449:27;:25;:27::i;:46::-;37432:63;;37506:19;37528:65;37566:26;:24;:26::i;:::-;37528:33;:21;37554:6;37528:25;:33::i;:65::-;37506:87;;37616:11;37607:6;:20;37604:175;;;37644:48;37665:1;37668:23;:6;37679:11;37668:10;:23::i;:::-;37644:12;:48::i;:::-;37740:1;;-1:-1:-1;;;;;;;;;;;37743:23:0;:6;37754:11;37743:10;:23::i;:::-;37712:55;;;;;;:::i;:::-;;;;;;;;37604:175;37789:40;37810:4;37817:11;37789:12;:40::i;:::-;37865:26;:24;:26::i;:::-;-1:-1:-1;;;;;37845:60:0;37862:1;-1:-1:-1;;;;;37845:60:0;-1:-1:-1;;;;;;;;;;;37892:12:0;37845:60;;;;;;:::i;:::-;;;;;;;;37921:46;;37949:4;;37938:1;;-1:-1:-1;;;;;;;;;;;37921:46:0;;;37955:11;;37921:46;:::i;40647:999::-;29429:8;:15;;-1:-1:-1;;;;29429:15:0;-1:-1:-1;;;29429:15:0;;;;40739:18:::1;:16;:18::i;:::-;40702:55;;40768:32;40803:19;:17;:19::i;:::-;40768:54;;40833:24;40954:1:::0;-1:-1:-1;;;;;40872:84:0::1;:14;-1:-1:-1::0;;;;;40872:22:0::1;;40903:15;-1:-1:-1::0;;;;;40903:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40936:4;40872:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40872:84:0::1;;40868:335;;;40992:14;-1:-1:-1::0;;;;;40992:25:0::1;;41040:15;-1:-1:-1::0;;;;;41040:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41073:4;40992:87;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40973:106;;40868:335;;;41131:14;-1:-1:-1::0;;;;;41131:22:0::1;;41162:4;41168:15;-1:-1:-1::0;;;;;41168:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41131:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41112:79;;40868:335;41213:19;41235:24;41253:4;41235:9;:24::i;:::-;41213:46;;41278:80;41295:4;41302:42;41346:11;41278:8;:80::i;:::-;41369:15;-1:-1:-1::0;;;;;41369:31:0::1;;41408:21;41439:4;41458:11;41471:1;41474::::0;41477:26:::1;:24;:26::i;:::-;41505:15;41369:152;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41532:67;41549:16;41575:15;-1:-1:-1::0;;;;;41575:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41532:16;:67::i;:::-;-1:-1:-1::0;41610:9:0::1;:28:::0;;-1:-1:-1;;;;;;41610:28:0::1;-1:-1:-1::0;;;;;41610:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;29467:8:0;:16;;-1:-1:-1;;;;29467:16:0;;;40647:999::o;27164:478::-;27252:21;27268:4;27252:15;:21::i;:::-;27251:22;27243:64;;;;-1:-1:-1;;;27243:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27318:22:0;;;;;;:16;:22;;;;;:29;;-1:-1:-1;;27318:29:0;27343:4;27318:29;;;;;;27358:15;:26;;;;;;;;;;;;;-1:-1:-1;;;;;;27358:26:0;;;;;;;27318:22;;27465:39;27335:4;27494:9;27465:22;:39::i;:::-;27537:97;;;;;;;;-1:-1:-1;;;;;27537:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27515:19;;;-1:-1:-1;27515:19:0;;;:13;:19;;;;;;;;:119;;;;-1:-1:-1;;;;;;27515:119:0;;;;;;;;;;;-1:-1:-1;27515:119:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27515:119:0;;;;;;;;;;-1:-1:-1;27164:478:0:o;25328:303::-;25403:21;25427:11;:9;:11::i;:::-;25403:35;-1:-1:-1;25449:19:0;25471:25;:6;25403:35;25471:10;:25::i;:::-;-1:-1:-1;;;;;25533:23:0;;:14;:23;;;;;;;;;;;25449:47;;-1:-1:-1;25533:40:0;;25449:47;25533:27;:40::i;:::-;-1:-1:-1;;;;;25507:23:0;;:14;:23;;;;;;;;;;:66;25599:12;;:24;;25616:6;25599:16;:24::i;:::-;25584:12;:39;-1:-1:-1;;;;25328:303:0:o;16281:92::-;16358:7;;;;;;;;;;;;-1:-1:-1;;;16358:7:0;;;;16281:92;:::o;27648:519::-;27719:21;27735:4;27719:15;:21::i;:::-;27711:70;;;;-1:-1:-1;;;27711:70:0;;;;;;;:::i;:::-;27797:9;27792:368;27816:15;:22;27812:26;;27792:368;;;27886:4;-1:-1:-1;;;;;27864:26:0;:15;27880:1;27864:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27864:18:0;:26;27860:289;;;27932:15;27948:22;;-1:-1:-1;;27948:26:0;;;27932:43;;;;;;;;;;;;;;;;27911:15;:18;;-1:-1:-1;;;;;27932:43:0;;;;27927:1;;27911:18;;;;;;;;;;;;;;;;;:64;;-1:-1:-1;;;;;27911:64:0;;;-1:-1:-1;;;;;;27911:64:0;;;;;;;27994:22;;;;;:16;:22;;;;;;;:30;;-1:-1:-1;;27994:30:0;;;28050:13;:19;;;;;;28043:26;;;;;;;27911:64;28043:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;28088:21;;;;;;;;;;;;;;;;-1:-1:-1;;28088:21:0;;;;;-1:-1:-1;;;;;;28088:21:0;;;;;;28128:5;;27860:289;27840:3;;27792:368;;25071:110;25145:11;:28;;-1:-1:-1;;;;;;25145:28:0;-1:-1:-1;;;;;25145:28:0;;;;;;;;;;25071:110::o;6542:189::-;6628:7;6663:12;6656:5;6648:28;;;;-1:-1:-1;;;6648:28:0;;;;;;;;:::i;:::-;;6687:9;6703:1;6699;:5;;;;;;;6542:189;-1:-1:-1;;;;;6542:189:0:o;25187:135::-;-1:-1:-1;;;;;25278:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;25187:135::o;25824:377::-;25867:17;:15;:17::i;:::-;25900:9;25895:299;25915:15;:22;25913:24;;25895:299;;;26013:13;:33;26027:15;26043:1;26027:18;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26027:18:0;-1:-1:-1;;;;;26013:33:0;-1:-1:-1;;;;;26013:33:0;;;;;;;;;;;;:46;;;25959:13;:33;25973:15;25989:1;25973:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25973:18:0;25959:33;;;;;;;;;;;;:51;;:100;;;;26146:15;:18;;26132:13;;25973:18;26146:15;26162:1;;26146:18;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26146:18:0;-1:-1:-1;;;;;26132:33:0;-1:-1:-1;;;;;26132:33:0;;;;;;;;;;;;:50;;;26074:13;:33;26088:15;26104:1;26088:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26088:18:0;26074:33;;;;;;;;;;;;:55;;:108;26088:18;25939:3;25895:299;;26312:471;-1:-1:-1;;;;;26477:19:0;;;26361:4;26477:19;;;:13;:19;;;;;:29;26361:4;;;;;;;;26448:59;;26471:4;;26477:29;26448:22;:59::i;:::-;-1:-1:-1;;;;;26544:19:0;;;;26518:11;26544:19;;;:13;:19;;;;;;;;:29;;;;;26584:41;;;;-1:-1:-1;26636:32:0;;:47;;;;-1:-1:-1;26694:36:0;:55;26532:41;;;;26312:471;-1:-1:-1;;;;26312:471:0:o;36325:410::-;36409:7;36446:1;36462:23;36478:6;36462:15;:23::i;:::-;36458:246;;;36506:6;36502:108;;;-1:-1:-1;36542:1:0;36502:108;;;-1:-1:-1;36593:1:0;36502:108;36458:246;;;36641:24;:22;:24::i;:::-;-1:-1:-1;;;;;36631:34:0;:6;-1:-1:-1;;;;;36631:34:0;;36627:77;;;-1:-1:-1;36691:1:0;36627:77;36721:6;36325:410;-1:-1:-1;;;;36325:410:0:o;21261:829::-;-1:-1:-1;;;;;21544:21:0;;21337:7;21544:21;;;:13;:21;;;;;:34;;;;21495:43;;;;21441:39;;;;21397:38;;;;;21337:7;;;;;;21396:183;;21544:34;;21396:143;;;;21486:3;;21396:85;;:44;:85::i;:183::-;21375:204;;21590:18;21636:56;21688:3;21636:47;21677:5;21637:34;:32;:34::i;21636:56::-;21623:10;:69;21619:324;;;21709:18;21730:26;21745:10;;21730:14;:26::i;:::-;21709:47;-1:-1:-1;21784:44:0;21822:5;21784:33;21795:21;21709:47;21822:5;21795:14;:21::i;:::-;21784:6;;:10;:33::i;:44::-;21771:57;;21619:324;;;;21874:57;21925:5;21874:46;21885:34;:32;:34::i;:::-;21874:6;;:10;:46::i;:57::-;21861:70;;21619:324;21961:55;22010:5;21961:44;21976:28;:26;:28::i;:::-;21961:10;;:14;:44::i;:55::-;22017:53;22064:5;22017:42;22032:26;:24;:26::i;:::-;22017:10;;:14;:42::i;:53::-;21953:129;;-1:-1:-1;21953:129:0;-1:-1:-1;22071:10:0;-1:-1:-1;;21261:829:0;;;;;:::o;22098:1298::-;22178:7;22187;22207:21;22231:11;:9;:11::i;:::-;22207:35;;22253:20;22288:26;22304:9;22288:15;:26::i;:::-;22284:512;;;-1:-1:-1;;;;;22498:24:0;;;;;;:13;:24;;;;;:42;;;;22451:41;;;;22390:46;;;;22347:37;;;;;22346:195;;:147;;22451:41;22346:147;;22442:3;;22346:91;;:43;:91::i;:195::-;22331:210;;22284:512;;;22755:9;;;-1:-1:-1;;;;;22755:9:0;22741:24;;;;:13;:24;;;;;:42;;;;22694:41;;;;22633:46;;;;22755:9;22590:37;;;;22589:195;;22741:42;;22589:147;;22694:41;22589:147;;22685:3;;22589:91;;:43;:91::i;:195::-;22574:210;;22284:512;22806:18;22854:58;22908:3;22855:47;22896:5;22855:36;:34;:36::i;22854:58::-;22839:12;:73;22835:493;;;22929:18;22950:30;22967:12;;22950:16;:30::i;:::-;22929:51;-1:-1:-1;23008:44:0;23046:5;23008:33;23019:21;22929:51;23046:5;23019:14;:21::i;23008:44::-;22995:57;;23084:56;23134:5;23084:45;23095:33;:31;:33::i;23084:56::-;23071:10;:69;23067:144;;;23155:56;23205:5;23155:45;23166:33;:31;:33::i;23155:56::-;23142:69;;23067:144;22835:493;;;;23257:59;23310:5;23257:48;23268:36;:34;:36::i;23257:59::-;23244:72;;22835:493;23346:10;23358:29;23346:10;23373:13;23358:14;:29::i;:::-;23338:50;;;;;;;22098:1298;;;;;:::o;23404:278::-;23465:7;23474;23494:21;23518:11;:9;:11::i;:::-;23494:35;;23540:18;23561:52;23607:5;23561:41;23572:29;:27;:29::i;:::-;23561:6;;:10;:41::i;:52::-;23540:73;-1:-1:-1;23540:73:0;23644:29;23540:73;23659:13;23644:14;:29::i;:::-;23624:50;;;;;;23404:278;;;:::o;13264:96::-;12978:5;13264:96;:::o;25744:74::-;25807:3;25791:13;:19;25744:74::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;827:241::-;;931:2;919:9;910:7;906:23;902:32;899:2;;;-1:-1;;937:12;899:2;85:6;72:20;97:33;124:5;97:33;:::i;1075:263::-;;1190:2;1178:9;1169:7;1165:23;1161:32;1158:2;;;-1:-1;;1196:12;1158:2;226:6;220:13;238:33;265:5;238:33;:::i;1345:366::-;;;1466:2;1454:9;1445:7;1441:23;1437:32;1434:2;;;-1:-1;;1472:12;1434:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1524:63;-1:-1;1624:2;1663:22;;72:20;97:33;72:20;97:33;:::i;:::-;1632:63;;;;1428:283;;;;;:::o;1718:491::-;;;;1856:2;1844:9;1835:7;1831:23;1827:32;1824:2;;;-1:-1;;1862:12;1824:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1914:63;-1:-1;2014:2;2053:22;;72:20;97:33;72:20;97:33;:::i;:::-;1818:391;;2022:63;;-1:-1;;;2122:2;2161:22;;;;616:20;;1818:391::o;2216:366::-;;;2337:2;2325:9;2316:7;2312:23;2308:32;2305:2;;;-1:-1;;2343:12;2305:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2395:63;2495:2;2534:22;;;;616:20;;-1:-1;;;2299:283::o;2589:491::-;;;;2727:2;2715:9;2706:7;2702:23;2698:32;2695:2;;;-1:-1;;2733:12;2695:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2785:63;2885:2;2924:22;;616:20;;-1:-1;2993:2;3032:22;;;616:20;;2689:391;-1:-1;;;2689:391::o;3087:235::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;-1:-1;;3194:12;3156:2;360:6;347:20;372:30;396:5;372:30;:::i;3329:257::-;;3441:2;3429:9;3420:7;3416:23;3412:32;3409:2;;;-1:-1;;3447:12;3409:2;495:6;489:13;507:30;531:5;507:30;:::i;3593:241::-;;3697:2;3685:9;3676:7;3672:23;3668:32;3665:2;;;-1:-1;;3703:12;3665:2;-1:-1;616:20;;3659:175;-1:-1;3659:175::o;3841:263::-;;3956:2;3944:9;3935:7;3931:23;3927:32;3924:2;;;-1:-1;;3962:12;3924:2;-1:-1;764:13;;3918:186;-1:-1;3918:186::o;4111:366::-;;;4232:2;4220:9;4211:7;4207:23;4203:32;4200:2;;;-1:-1;;4238:12;4200:2;629:6;616:20;4290:63;;4390:2;4433:9;4429:22;72:20;97:33;124:5;97:33;:::i;4484:535::-;;;;4633:2;4621:9;4612:7;4608:23;4604:32;4601:2;;;-1:-1;;4639:12;4601:2;770:6;764:13;4691:74;;4802:2;4856:9;4852:22;764:13;4810:74;;4921:2;4975:9;4971:22;764:13;4929:74;;4595:424;;;;;:::o;18524:222::-;-1:-1;;;;;40020:54;;;;5418:37;;18651:2;18636:18;;18622:124::o;18753:333::-;-1:-1;;;;;40020:54;;;5418:37;;40020:54;;19072:2;19057:18;;5418:37;18908:2;18893:18;;18879:207::o;19093:1036::-;-1:-1;;;;;40020:54;;;5418:37;;40020:54;;;19597:2;19582:18;;5418:37;19680:2;19665:18;;18361:37;;;;19763:2;19748:18;;18361:37;;;;19854:3;19839:19;;6872:58;;;;40031:42;19931:19;;6872:58;40020:54;;;20030:3;20015:19;;5418:37;20114:3;20099:19;;18361:37;;;;19432:3;19417:19;;19403:726::o;20136:333::-;-1:-1;;;;;40020:54;;;;5418:37;;20455:2;20440:18;;18361:37;20291:2;20276:18;;20262:207::o;20476:828::-;-1:-1;;;;;40020:54;;;5418:37;;20932:2;20917:18;;18361:37;;;;21023:2;21008:18;;6872:58;;;;21114:2;21099:18;;6872:58;;;;40020:54;;;21205:3;21190:19;;5287:58;40031:42;21274:19;;18361:37;;;;20767:3;20752:19;;20738:566::o;21311:544::-;-1:-1;;;;;40020:54;;;;5418:37;;21681:2;21666:18;;18361:37;;;;21764:2;21749:18;;18361:37;39932:13;39925:21;21841:2;21826:18;;6381:34;21516:3;21501:19;;21487:368::o;21862:780::-;-1:-1;;;;;40020:54;;;;5418:37;;22294:2;22279:18;;18361:37;;;;22377:2;22362:18;;18361:37;;;;22460:2;22445:18;;18361:37;22543:3;22528:19;;18361:37;40031:42;22612:19;;18361:37;22129:3;22114:19;;22100:542::o;22649:210::-;39932:13;;39925:21;6381:34;;22770:2;22755:18;;22741:118::o;23424:262::-;6872:58;;;23571:2;23556:18;;23542:144::o;23693:310::-;;23840:2;;23861:17;23854:47;7260:5;39124:12;39540:6;23840:2;23829:9;23825:18;39528:19;-1:-1;41599:101;41613:6;41610:1;41607:13;41599:101;;;41680:11;;;;;41674:18;41661:11;;;39568:14;41661:11;41654:39;41628:10;;41599:101;;;41715:6;41712:1;41709:13;41706:2;;;-1:-1;39568:14;41771:6;23829:9;41762:16;;41755:27;41706:2;-1:-1;41887:7;41871:14;-1:-1;;41867:28;7418:39;;;;39568:14;7418:39;;23811:192;-1:-1;;;23811:192::o;24010:416::-;24210:2;24224:47;;;7694:2;24195:18;;;39528:19;-1:-1;;;39568:14;;;7710:45;7774:12;;;24181:245::o;24433:416::-;24633:2;24647:47;;;8025:2;24618:18;;;39528:19;8061:34;39568:14;;;8041:55;-1:-1;;;8116:12;;;8109:27;8155:12;;;24604:245::o;24856:416::-;25056:2;25070:47;;;8406:1;25041:18;;;39528:19;-1:-1;;;39568:14;;;8421:29;8469:12;;;25027:245::o;25279:416::-;25479:2;25493:47;;;8720:2;25464:18;;;39528:19;8756:26;39568:14;;;8736:47;8802:12;;;25450:245::o;25702:416::-;25902:2;25916:47;;;9053:2;25887:18;;;39528:19;9089:34;39568:14;;;9069:55;-1:-1;;;9144:12;;;9137:30;9186:12;;;25873:245::o;26125:416::-;26325:2;26339:47;;;9437:2;26310:18;;;39528:19;9473:34;39568:14;;;9453:55;-1:-1;;;9528:12;;;9521:26;9566:12;;;26296:245::o;26548:416::-;26748:2;26762:47;;;9817:2;26733:18;;;39528:19;-1:-1;;;39568:14;;;9833:34;9886:12;;;26719:245::o;26971:416::-;27171:2;27185:47;;;10137:2;27156:18;;;39528:19;10173:30;39568:14;;;10153:51;10223:12;;;27142:245::o;27394:416::-;27594:2;27608:47;;;10474:2;27579:18;;;39528:19;10510:29;39568:14;;;10490:50;10559:12;;;27565:245::o;27817:416::-;28017:2;28031:47;;;28002:18;;;39528:19;10846:34;39568:14;;;10826:55;10900:12;;;27988:245::o;28240:416::-;28440:2;28454:47;;;11151:2;28425:18;;;39528:19;11187:34;39568:14;;;11167:55;-1:-1;;;11242:12;;;11235:27;11281:12;;;28411:245::o;28663:416::-;28863:2;28877:47;;;11532:2;28848:18;;;39528:19;-1:-1;;;39568:14;;;11548:37;11604:12;;;28834:245::o;29086:416::-;29286:2;29300:47;;;11855:2;29271:18;;;39528:19;-1:-1;;;39568:14;;;11871:35;11925:12;;;29257:245::o;29509:416::-;29709:2;29723:47;;;29694:18;;;39528:19;12212:34;39568:14;;;12192:55;12266:12;;;29680:245::o;29932:416::-;30132:2;30146:47;;;12517:2;30117:18;;;39528:19;-1:-1;;;39568:14;;;12533:43;12595:12;;;30103:245::o;30355:416::-;30555:2;30569:47;;;12846:2;30540:18;;;39528:19;12882:34;39568:14;;;12862:55;-1:-1;;;12937:12;;;12930:29;12978:12;;;30526:245::o;30778:416::-;30978:2;30992:47;;;13229:2;30963:18;;;39528:19;-1:-1;;;39568:14;;;13245:34;13298:12;;;30949:245::o;31201:416::-;31401:2;31415:47;;;13549:2;31386:18;;;39528:19;13585:30;39568:14;;;13565:51;13635:12;;;31372:245::o;31624:416::-;31824:2;31838:47;;;13886:2;31809:18;;;39528:19;13922:34;39568:14;;;13902:55;-1:-1;;;13977:12;;;13970:28;14017:12;;;31795:245::o;32047:416::-;32247:2;32261:47;;;14268:2;32232:18;;;39528:19;-1:-1;;;39568:14;;;14284:33;14336:12;;;32218:245::o;32470:416::-;32670:2;32684:47;;;14587:2;32655:18;;;39528:19;14623:34;39568:14;;;14603:55;-1:-1;;;14678:12;;;14671:25;14715:12;;;32641:245::o;32893:416::-;33093:2;33107:47;;;33078:18;;;39528:19;15002:34;39568:14;;;14982:55;15056:12;;;33064:245::o;33316:416::-;33516:2;33530:47;;;15307:2;33501:18;;;39528:19;15343:32;39568:14;;;15323:53;15395:12;;;33487:245::o;33739:416::-;33939:2;33953:47;;;15646:2;33924:18;;;39528:19;15682:34;39568:14;;;15662:55;-1:-1;;;15737:12;;;15730:28;15777:12;;;33910:245::o;34162:416::-;34362:2;34376:47;;;16028:2;34347:18;;;39528:19;16064:33;39568:14;;;16044:54;16117:12;;;34333:245::o;34585:416::-;34785:2;34799:47;;;16368:2;34770:18;;;39528:19;16404:34;39568:14;;;16384:55;-1:-1;;;16459:12;;;16452:29;16500:12;;;34756:245::o;35008:416::-;35208:2;35222:47;;;16751:2;35193:18;;;39528:19;16787:34;39568:14;;;16767:55;-1:-1;;;16842:12;;;16835:28;16882:12;;;35179:245::o;35431:416::-;35631:2;35645:47;;;17133:2;35616:18;;;39528:19;17169:32;39568:14;;;17149:53;17221:12;;;35602:245::o;35854:416::-;36054:2;36068:47;;;17472:2;36039:18;;;39528:19;17508:34;39568:14;;;17488:55;-1:-1;;;17563:12;;;17556:30;17605:12;;;36025:245::o;36277:416::-;36477:2;36491:47;;;17856:2;36462:18;;;39528:19;17892:28;39568:14;;;17872:49;17940:12;;;36448:245::o;36700:416::-;36900:2;36914:47;;;18191:2;36885:18;;;39528:19;-1:-1;;;39568:14;;;18207:38;18264:12;;;36871:245::o;37352:832::-;;37649:3;37638:9;37634:19;18391:5;18368:3;18361:37;37822:2;41112:24;37822:2;37811:9;37807:18;6872:58;37649:3;37859:2;37848:9;37844:18;37837:48;37899:108;5811:5;39124:12;39540:6;39535:3;39528:19;39568:14;37638:9;39568:14;5823:93;;37822:2;5987:5;38978:14;5999:21;;-1:-1;6026:260;6051:6;6048:1;6045:13;6026:260;;;6112:13;;-1:-1;;;;;40020:54;5418:37;;39383:14;;;;5180;;;;40031:42;6066:9;6026:260;;;-1:-1;;;;;;;40020:54;;;;38086:2;38071:18;;5418:37;-1:-1;;;38169:3;38154:19;18361:37;37891:116;37620:564;-1:-1;;;37620:564::o;38191:444::-;18361:37;;;38538:2;38523:18;;18361:37;;;;38621:2;38606:18;;18361:37;38374:2;38359:18;;38345:290::o;38642:214::-;40236:4;40225:16;;;;18477:35;;38765:2;38750:18;;38736:120::o;41908:117::-;-1:-1;;;;;40020:54;;41967:35;;41957:2;;42016:1;;42006:12;42032:111;42113:5;39932:13;39925:21;42091:5;42088:32;42078:2;;42134:1;;42124:12
Swarm Source
ipfs://36e154ea1d2b67244508fa3d207283398cf096302154e927b9cc1d149a6bf74e
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.