Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Website Down
Overview
Max Total Supply
21,000,000 RZRV
Holders
439 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
2,110.538734 RZRVValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Rezerve
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } } 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); } // pragma solidity >=0.6.2; 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; } interface RezerveExchange { function exchangeReserve ( uint256 _amount ) external; function flush() external; } interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable( 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; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require( block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; _previousOwner = address(0); } } contract Rezerve is Context, IERC20, Ownable { using Address for address; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => uint256) private balances; mapping (address => bool) private _isExcludedFromFee; uint256 private _totalSupply = 21000000 * 10**9; uint256 private _tFeeTotal; string private constant _name = "Rezerve"; string private constant _symbol = "RZRV"; uint8 private constant _decimals = 9; uint256 public _taxFeeOnSale = 0; uint256 private _previousSellFee = _taxFeeOnSale; uint256 public _taxFeeOnBuy = 10; uint256 private _previousBuyFee = _taxFeeOnBuy; uint256 public _burnFee = 2; uint256 private _previousBurnFee = _burnFee; uint256 public stakingSlice = 20; bool public saleTax = true; mapping (address => uint256) public lastTrade; mapping (address => uint256) public lastBlock; mapping (address => bool) public blacklist; mapping (address => bool) public whitelist; mapping (address => bool) public rezerveEcosystem; address public reserveStaking; address payable public reserveVault; address public reserveExchange; address public ReserveStakingReceiver; address public DAI; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2RouterAddress; address public immutable uniswapV2Pair; uint8 public action; bool public daiShield; bool public AutoSwap = false; uint8 public lpPullPercentage = 70; bool public pauseContract = true; bool public stakingTax = true; address public burnAddress = 0x000000000000000000000000000000000000dEaD; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 21000000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 21000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); // ========== Modifiers ========== // modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { //DAI = 0x9A702Da2aCeA529dE15f75b69d69e0E94bEFB73B; // DAI = 0x6980FF5a3BF5E429F520746EFA697525e8EaFB5C; // @audit - make sure this address is correct //uniswapV2RouterAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3; balances[msg.sender] = _totalSupply; DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F; // testnet DAI uniswapV2RouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // @audit - make sure this address is correct IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniswapV2RouterAddress); // Create a uniswap pair for this new token address pairAddress = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), DAI ); uniswapV2Pair = pairAddress; // UNCOMMENT THESE FOR ETHEREUM MAINNET //DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F; // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; addRezerveEcosystemAddress(owner()); addRezerveEcosystemAddress(address(this)); addToWhitelist(pairAddress); //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[0x397c2dBe7af135eA95561acdd9E558E630410a84] = true; // @audit - make sure this address is correct daiShield = true; emit Transfer(address(0), _msgSender(), _totalSupply); } // ========== View Functions ========== // function thresholdMet () public view returns (bool) { return reserveBalance() > numTokensSellToAddToLiquidity ; } function reserveBalance () public view returns (uint256) { return balanceOf( address(this) ); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return balances[account]; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function getLPBalance() public view returns(uint256){ IERC20 _lp = IERC20 ( uniswapV2Pair); return _lp.balanceOf(address(this)); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function checkDaiOwnership( address _address ) public view returns(bool){ IERC20 _dai = IERC20(DAI); uint256 _daibalance = _dai.balanceOf(_address ); return ( _daibalance > 0 ); } // ========== Mutative / Owner Functions ========== // function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } 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) { _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount ); _transfer(sender, recipient, amount); return true; } //to receive ETH from uniswapV2Router when swaping receive() external payable {} function setReserveExchange( address _address ) public onlyOwner { require(_address != address(0), "reserveExchange is zero address"); reserveExchange = _address; excludeFromFee( _address ); addRezerveEcosystemAddress(_address); } function contractPauser() public onlyOwner { pauseContract = !pauseContract; AutoSwap = !AutoSwap; _approve(address(this), reserveExchange, ~uint256(0)); _approve(address(this), uniswapV2Pair , ~uint256(0)); _approve(address(this), uniswapV2RouterAddress, ~uint256(0)); IERC20 _dai = IERC20 ( DAI ); _dai.approve( uniswapV2Pair, ~uint256(0) ); _dai.approve( uniswapV2RouterAddress , ~uint256(0) ); _dai.approve( reserveExchange , ~uint256(0) ); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setSellFeePercent(uint256 sellFee) external onlyOwner() { require ( sellFee < 30 , "Tax too high" ); _taxFeeOnSale = sellFee; } function setBuyFeePercent(uint256 buyFee) external onlyOwner() { require ( buyFee < 11 , "Tax too high" ); _taxFeeOnBuy = buyFee; } function setBurnFeePercent(uint256 burnFee) external onlyOwner() { require ( burnFee < 11 , "Burn too high" ); _burnFee = burnFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = (_totalSupply * maxTxPercent) / 10**6; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setReserveStakingReceiver(address _address) public onlyOwner { require(_address != address(0), "ReserveStakingReceiver is zero address"); ReserveStakingReceiver = _address; excludeFromFee( _address ); addRezerveEcosystemAddress(_address); } function setReserveStaking ( address _address ) public onlyOwner { require(_address != address(0), "ReserveStaking is zero address"); reserveStaking = _address; excludeFromFee( _address ); addRezerveEcosystemAddress(_address); } function setMinimumNumber (uint256 _min) public onlyOwner { numTokensSellToAddToLiquidity = _min * 10** 9; } function daiShieldToggle () public onlyOwner { daiShield = !daiShield; } function AutoSwapToggle () public onlyOwner { AutoSwap = !AutoSwap; } function addToBlacklist(address account) public onlyOwner { whitelist[account] = false; blacklist[account] = true; } function removeFromBlacklist(address account) public onlyOwner { blacklist[account] = false; } // To be used for contracts that should never be blacklisted, but aren't part of the Rezerve ecosystem, such as the Uniswap pair function addToWhitelist(address account) public onlyOwner { blacklist[account] = false; whitelist[account] = true; } function removeFromWhitelist(address account) public onlyOwner { whitelist[account] = false; } // To be used if new contracts are added to the Rezerve ecosystem function addRezerveEcosystemAddress(address account) public onlyOwner { rezerveEcosystem[account] = true; addToWhitelist(account); } function removeRezerveEcosystemAddress(address account) public onlyOwner { rezerveEcosystem[account] = false; } function toggleStakingTax() public onlyOwner { stakingTax = !stakingTax; } function withdrawLPTokens () public onlyOwner { IERC20 _uniswapV2Pair = IERC20 ( uniswapV2Pair ); uint256 _lpbalance = _uniswapV2Pair.balanceOf(address(this)); _uniswapV2Pair.transfer( msg.sender, _lpbalance ); } function setLPPullPercentage ( uint8 _perc ) public onlyOwner { require ( _perc >9 && _perc <71); lpPullPercentage = _perc; } function addToLP(uint256 tokenAmount, uint256 daiAmount) public onlyOwner { // approve token transfer to cover all possible scenarios _transfer ( msg.sender, address(this) , tokenAmount ); _approve(address(this), address(uniswapV2Router), tokenAmount); IERC20 _dai = IERC20 ( DAI ); _dai.approve( address(uniswapV2Router), daiAmount); _dai.transferFrom ( msg.sender, address(this) , daiAmount ); // add the liquidity uniswapV2Router.addLiquidity( address(this), DAI, tokenAmount, daiAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); contractPauser(); } function removeLP () public onlyOwner { saleTax = false; IERC20 _uniswapV2Pair = IERC20 ( uniswapV2Pair ); uint256 _lpbalance = _uniswapV2Pair.balanceOf(address(this)); uint256 _perc = (_lpbalance * lpPullPercentage ) / 100; _uniswapV2Pair.approve( address(uniswapV2Router), _perc ); uniswapV2Router.removeLiquidity( address(this), DAI, _perc, 0, 0, reserveExchange, block.timestamp + 3 minutes ); RezerveExchange _reserveexchange = RezerveExchange ( reserveExchange ); _reserveexchange.flush(); } 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"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } // ========== Private / Internal Functions ========== // function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!blacklist[from]); if (pauseContract) require (from == address(this) || from == owner()); if (!rezerveEcosystem[from]) { if(to == uniswapV2Pair && daiShield) require ( !checkDaiOwnership(from) ); if(from == uniswapV2Pair) saleTax = false; if(to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if (!whitelist[from]) { if (lastBlock[from] == block.number) blacklist[from] = true; if (lastTrade[from] + 20 seconds > block.timestamp && !blacklist[from]) revert("Slowdown"); lastBlock[from] = block.number; lastTrade[from] = block.timestamp; } } action = 0; if(from == uniswapV2Pair) action = 1; if(to == uniswapV2Pair) action = 2; // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); contractTokenBalance = Math.min(contractTokenBalance, numTokensSellToAddToLiquidity); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled && AutoSwap ) { swapIt(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee if (!blacklist[from]) _tokenTransfer(from, to, amount, takeFee); else _tokenTransfer(from, to, 1, false); } function swapIt(uint256 contractTokenBalance) internal lockTheSwap { uint256 _exchangeshare = contractTokenBalance; if (stakingTax) { _exchangeshare = ( _exchangeshare * 4 ) / 5; uint256 _stakingshare = contractTokenBalance - _exchangeshare; _tokenTransfer(address(this), ReserveStakingReceiver, _stakingshare, false); } swapTokensForDai(_exchangeshare); } function swapTokensForDai(uint256 tokenAmount) internal { // generate the uniswap pair path of token -> DAI address[] memory path = new address[](2); path[0] = address(this); path[1] = DAI; uniswapV2Router.swapExactTokensForTokens( tokenAmount, 0, // accept any amount of DAI path, reserveExchange, block.timestamp + 3 minutes ); } function setStakingSlice ( uint256 _slice ) public onlyOwner { stakingSlice = _slice; } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if(!takeFee) removeAllFee(); ( uint256 transferAmount, uint256 sellFee, uint256 buyFee, uint256 burnFee ) = _getTxValues(amount); _tFeeTotal = _tFeeTotal + sellFee + buyFee + burnFee; uint256 stakingFee; if (stakingTax) { uint256 stakingFeeB = (buyFee * stakingSlice )/100; uint256 stakingFeeS = (sellFee * stakingSlice )/100; buyFee = buyFee - stakingFeeB; sellFee = sellFee - stakingFeeS; stakingFee = stakingFeeB + stakingFeeS; } balances[sender] = balances[sender] - amount; balances[recipient] = balances[recipient] + transferAmount; balances[address(this)] = balances[address(this)] + sellFee + buyFee; balances[burnAddress] = balances[burnAddress] + burnFee; balances[ReserveStakingReceiver] = balances[ReserveStakingReceiver] + stakingFee; emit Transfer(sender, recipient, transferAmount); if(!takeFee) restoreAllFee(); } function _getTxValues(uint256 tAmount) private returns (uint256, uint256, uint256, uint256) { uint256 sellFee = calculateSellFee(tAmount); uint256 buyFee = calculateBuyFee(tAmount); uint256 burnFee = calculateBurnFee(tAmount); uint256 tTransferAmount = tAmount - sellFee - buyFee - burnFee; return (tTransferAmount, sellFee, buyFee, burnFee); } function calculateSellFee(uint256 _amount) private returns (uint256) { if (!saleTax) { saleTax = true; return 0; } return( _amount * _taxFeeOnSale) / 10**2; } function calculateBuyFee(uint256 _amount) private view returns (uint256) { if(action == 1) return (_amount * _taxFeeOnBuy) / 10**2; return 0; } function calculateBurnFee(uint256 _amount) private view returns (uint256) { if ( _burnFee > 0 ) return (_amount * _burnFee) / 10**2; return 0; } function removeAllFee() private { if(_taxFeeOnSale == 0 && _taxFeeOnBuy == 0 && _burnFee == 0 ) return; _previousSellFee = _taxFeeOnSale; _previousBuyFee = _taxFeeOnBuy; _previousBurnFee = _burnFee; _taxFeeOnSale = 0; _taxFeeOnBuy = 0; _burnFee = 0; } function restoreAllFee() private { _taxFeeOnSale = _previousSellFee; _taxFeeOnBuy = _previousBuyFee; _burnFee = _previousBurnFee; } }
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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AutoSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AutoSwapToggle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ReserveStakingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeOnSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"action","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addRezerveEcosystemAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"daiAmount","type":"uint256"}],"name":"addToLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelist","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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkDaiOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractPauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daiShield","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daiShieldToggle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPullPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeRezerveEcosystemAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveExchange","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveStaking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveVault","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rezerveEcosystem","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_perc","type":"uint8"}],"name":"setLPPullPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMinimumNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setReserveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setReserveStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setReserveStakingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slice","type":"uint256"}],"name":"setStakingSlice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingSlice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thresholdMet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleStakingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawLPTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052664a9b6384488000600681905560006008819055600955600a808055600b556002600c819055600d556014600e55600f8054600160ff19909116179055601a805463ffffffff60b01b19166180a360b91b179055601b8054600161ff0160a01b031916750100000000000000000000000000000000000000dead179055601c55651319718a5000601d553480156200009b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506006543360009081526004602081815260408084209490945560198054736b175474e89094c44da98b954eedeac495271d0f6001600160a01b031991821617909155601a8054737a250d5630b4cf539739df2c5dacb4c659f2488d921682179055845163c45a015560e01b815294519094859363c45a015593828201939092909190829003018186803b1580156200017457600080fd5b505afa15801562000189573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001af919062000499565b6019546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c6539690604401602060405180830381600087803b158015620001fc57600080fd5b505af115801562000211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000237919062000499565b6001600160601b0319606082811b821660a05284901b166080529050620002706200026a6000546001600160a01b031690565b62000395565b6200027b3062000395565b620002868162000415565b6001600560006200029f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915573397c2dbe7af135ea95561acdd9e558e630410a849091527f5fd71a8497286acc5a28d81c611da566460630a362187f91eea65fe1d4a020538054909216179055601a805460ff60a81b1916600160a81b1790556200033d3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200038591815260200190565b60405180910390a35050620004cb565b6000546001600160a01b03163314620003e45760405162461bcd60e51b8152602060048201819052602482015260008051602062003a8283398151915260448201526064015b60405180910390fd5b6001600160a01b0381166000908152601460205260409020805460ff19166001179055620004128162000415565b50565b6000546001600160a01b03163314620004605760405162461bcd60e51b8152602060048201819052602482015260008051602062003a828339815191526044820152606401620003db565b6001600160a01b03166000908152601260209081526040808320805460ff19908116909155601390925290912080549091166001179055565b600060208284031215620004ac57600080fd5b81516001600160a01b0381168114620004c457600080fd5b9392505050565b60805160601c60a05160601c61351b620005676000396000818161073101528181610ea601528181610f01015281816112f801528181611773015281816121b3015281816127230152818161278501528181612960015281816129a90152612a3d01526000818161056a015281816113c00152818161146001528181611e0d01528181611e4c01528181611fb20152612e91015261351b6000f3fe60806040526004361061043f5760003560e01c8063950eb5d511610234578063cef062fc1161012e578063e43252d7116100b6578063eec7d8f91161007a578063eec7d8f914610d5d578063ef0645ac14610d7d578063f2fde38b14610d9d578063f9f92be414610dbd578063fb64339214610ded57600080fd5b8063e43252d714610cd2578063e6a97ac614610cf2578063ea2f0b3714610d12578063ec4e68a214610d32578063edf8bc1314610d4857600080fd5b8063d58e4605116100fd578063d58e460514610c0c578063d5cf7a9214610c2c578063dd46706414610c4c578063dd62ed3e14610c6c578063e0bab4c414610cb257600080fd5b8063cef062fc14610ba0578063d12a768814610bc0578063d20f197d14610bd6578063d543dbeb14610bec57600080fd5b8063a8ec4ffc116101bc578063bf5976d311610180578063bf5976d314610b07578063c0b0fda214610b1d578063c26d7be014610b33578063c49b9a8014610b60578063cea2695814610b8057600080fd5b8063a8ec4ffc14610a71578063a9059cbb14610a91578063a9d68b8614610ab1578063b46ae5c614610ad1578063b6c5232414610af257600080fd5b80639b19251a116102035780639b19251a146109ca578063a10954fe146109fa578063a2b8a94714610a1c578063a69df4b514610a3c578063a6c6e5f014610a5157600080fd5b8063950eb5d51461093b578063952ca92c1461095b57806395d89b4114610988578063961522ed146109b557600080fd5b8063439766ce116103455780635d9728c8116102cd578063715018a611610291578063715018a6146108b25780637d1db4a5146108c757806385bec3d7146108dd5780638ab1d681146108fd5780638da5cb5b1461091d57600080fd5b80635d9728c81461080d57806362f837ef1461082d5780636f43f17b1461084757806370a082311461085c57806370d5ae051461089257600080fd5b80634a377e1d116103145780634a377e1d146107535780634a74bb02146107735780634d431e5e146107945780635342acb4146107b4578063537df3b6146107ed57600080fd5b8063439766ce146106c957806344337ea1146106ea578063491e91ee1461070a57806349bd5a5e1461071f57600080fd5b80632103b6ad116103c857806331ce11ec1161039757806331ce11ec1461063e5780633ec20ab01461065f578063407893f11461067f57806342c5ddc414610694578063437823ec146106a957600080fd5b80632103b6ad146105b95780632130e348146105e957806323b872dd1461060a578063313ce5671461062a57600080fd5b80630a7a1c4d1161040f5780630a7a1c4d146104f15780630d88331a1461052457806313114a9d146105395780631694505e1461055857806318160ddd146105a457600080fd5b80627635b61461044b57806301a754a31461046257806306fdde0314610498578063095ea7b3146104d157600080fd5b3661044657005b600080fd5b34801561045757600080fd5b50610460610e0d565b005b34801561046e57600080fd5b50601a5461048390600160b01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156104a457600080fd5b5060408051808201909152600781526652657a6572766560c81b60208201525b60405161048f919061330a565b3480156104dd57600080fd5b506104836104ec366004613118565b6110a4565b3480156104fd57600080fd5b50601a5461051290600160a01b900460ff1681565b60405160ff909116815260200161048f565b34801561053057600080fd5b506104606110ba565b34801561054557600080fd5b506007545b60405190815260200161048f565b34801561056457600080fd5b5061058c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161048f565b3480156105b057600080fd5b5060065461054a565b3480156105c557600080fd5b506104836105d436600461308e565b60146020526000908152604090205460ff1681565b3480156105f557600080fd5b50601a5461048390600160a81b900460ff1681565b34801561061657600080fd5b506104836106253660046130dc565b611105565b34801561063657600080fd5b506009610512565b34801561064a57600080fd5b50601a5461048390600160c81b900460ff1681565b34801561066b57600080fd5b5061046061067a366004613241565b611154565b34801561068b57600080fd5b50610460611192565b3480156106a057600080fd5b506104836111dd565b3480156106b557600080fd5b506104606106c436600461308e565b6111fe565b3480156106d557600080fd5b50601a5461048390600160c01b900460ff1681565b3480156106f657600080fd5b5061046061070536600461308e565b61124c565b34801561071657600080fd5b506104606112af565b34801561072b57600080fd5b5061058c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561075f57600080fd5b50601a5461058c906001600160a01b031681565b34801561077f57600080fd5b50601b5461048390600160a81b900460ff1681565b3480156107a057600080fd5b506104606107af36600461308e565b6115ad565b3480156107c057600080fd5b506104836107cf36600461308e565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107f957600080fd5b5061046061080836600461308e565b61166c565b34801561081957600080fd5b5061046061082836600461308e565b6116b7565b34801561083957600080fd5b50600f546104839060ff1681565b34801561085357600080fd5b5061054a61175b565b34801561086857600080fd5b5061054a61087736600461308e565b6001600160a01b031660009081526004602052604090205490565b34801561089e57600080fd5b50601b5461058c906001600160a01b031681565b3480156108be57600080fd5b506104606117fd565b3480156108d357600080fd5b5061054a601c5481565b3480156108e957600080fd5b506104606108f83660046132e7565b61185f565b34801561090957600080fd5b5061046061091836600461308e565b6118c8565b34801561092957600080fd5b506000546001600160a01b031661058c565b34801561094757600080fd5b50610460610956366004613241565b611913565b34801561096757600080fd5b5061054a61097636600461308e565b60116020526000908152604090205481565b34801561099457600080fd5b50604080518082019091526004815263292d292b60e11b60208201526104c4565b3480156109c157600080fd5b50610460611981565b3480156109d657600080fd5b506104836109e536600461308e565b60136020526000908152604090205460ff1681565b348015610a0657600080fd5b503060009081526004602052604090205461054a565b348015610a2857600080fd5b50610460610a37366004613241565b6119cc565b348015610a4857600080fd5b50610460611a3a565b348015610a5d57600080fd5b5060155461058c906001600160a01b031681565b348015610a7d57600080fd5b50610460610a8c36600461308e565b611b43565b348015610a9d57600080fd5b50610483610aac366004613118565b611b8e565b348015610abd57600080fd5b50610460610acc36600461308e565b611b9b565b348015610add57600080fd5b50601a5461051290600160b81b900460ff1681565b348015610afe57600080fd5b5060025461054a565b348015610b1357600080fd5b5061054a600a5481565b348015610b2957600080fd5b5061054a600c5481565b348015610b3f57600080fd5b5061054a610b4e36600461308e565b60106020526000908152604090205481565b348015610b6c57600080fd5b50610460610b7b366004613207565b611bf1565b348015610b8c57600080fd5b50610460610b9b366004613241565b611c73565b348015610bac57600080fd5b5060165461058c906001600160a01b031681565b348015610bcc57600080fd5b5061054a601d5481565b348015610be257600080fd5b5061054a600e5481565b348015610bf857600080fd5b50610460610c07366004613241565b611ce2565b348015610c1857600080fd5b50610460610c2736600461308e565b611d2e565b348015610c3857600080fd5b50610460610c47366004613273565b611dd2565b348015610c5857600080fd5b50610460610c67366004613241565b612041565b348015610c7857600080fd5b5061054a610c873660046130a9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610cbe57600080fd5b5060195461058c906001600160a01b031681565b348015610cde57600080fd5b50610460610ced36600461308e565b6120c6565b348015610cfe57600080fd5b5060175461058c906001600160a01b031681565b348015610d1e57600080fd5b50610460610d2d36600461308e565b612129565b348015610d3e57600080fd5b5061054a60085481565b348015610d5457600080fd5b50610460612174565b348015610d6957600080fd5b50610460610d78366004613241565b6122bd565b348015610d8957600080fd5b5060185461058c906001600160a01b031681565b348015610da957600080fd5b50610460610db836600461308e565b6122ec565b348015610dc957600080fd5b50610483610dd836600461308e565b60126020526000908152604090205460ff1681565b348015610df957600080fd5b50610483610e0836600461308e565b6123c4565b6000546001600160a01b03163314610e405760405162461bcd60e51b8152600401610e379061335f565b60405180910390fd5b601a8054600160b01b60ff600160c01b8084048216150260ff60c01b19841681178390049091161590910260ff60b01b1990911662ff00ff60b01b1990921691909117179055601754610ea09030906001600160a01b0316600019612450565b610ecd307f0000000000000000000000000000000000000000000000000000000000000000600019612450565b601a54610ee79030906001600160a01b0316600019612450565b60195460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152600019602483015290911690819063095ea7b390604401602060405180830381600087803b158015610f5857600080fd5b505af1158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190613224565b50601a5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b158015610fe057600080fd5b505af1158015610ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110189190613224565b5060175460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b15801561106857600080fd5b505af115801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190613224565b5050565b60006110b1338484612450565b50600192915050565b6000546001600160a01b031633146110e45760405162461bcd60e51b8152600401610e379061335f565b601a805460ff60c81b198116600160c81b9182900460ff1615909102179055565b6001600160a01b038316600090815260036020908152604080832033808552925282205461113f91869161113a90869061345e565b612450565b61114a848484612574565b5060019392505050565b6000546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610e379061335f565b61118c81633b9aca0061343f565b601d5550565b6000546001600160a01b031633146111bc5760405162461bcd60e51b8152600401610e379061335f565b601a805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000601d546111f83060009081526004602052604090205490565b11905090565b6000546001600160a01b031633146112285760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b031633146112765760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601360209081526040808320805460ff19908116909155601290925290912080549091166001179055565b6000546001600160a01b031633146112d95760405162461bcd60e51b8152600401610e379061335f565b600f805460ff191690556040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f919061325a565b601a5490915060009060649061139f90600160b81b900460ff168461343f565b6113a9919061341d565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390529192509084169063095ea7b390604401602060405180830381600087803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190613224565b506019546017546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263baa2abde9230929182169186916000918291166114a14260b4613405565b60405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015290921660a482015260c481019190915260e4016040805180830381600087803b15801561150e57600080fd5b505af1158015611522573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115469190613295565b5050601754604080516335cfcb7560e11b815290516001600160a01b03909216918291636b9f96ea91600480830192600092919082900301818387803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146115d75760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03811661163c5760405162461bcd60e51b815260206004820152602660248201527f526573657276655374616b696e675265636569766572206973207a65726f206160448201526564647265737360d01b6064820152608401610e37565b601880546001600160a01b0319166001600160a01b038316179055611660816111fe565b61166981611b9b565b50565b6000546001600160a01b031633146116965760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000546001600160a01b031633146116e15760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b0381166117375760405162461bcd60e51b815260206004820152601f60248201527f7265736572766545786368616e6765206973207a65726f2061646472657373006044820152606401610e37565b601780546001600160a01b0319166001600160a01b038316179055611660816111fe565b6040516370a0823160e01b81523060048201526000907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b038216906370a082319060240160206040518083038186803b1580156117bf57600080fd5b505afa1580156117d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f7919061325a565b91505090565b6000546001600160a01b031633146118275760405162461bcd60e51b8152600401610e379061335f565b600080546040516001600160a01b03909116906000805160206134c6833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118895760405162461bcd60e51b8152600401610e379061335f565b60098160ff1611801561189f575060478160ff16105b6118a857600080fd5b601a805460ff909216600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031633146118f25760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601360205260409020805460ff19169055565b6000546001600160a01b0316331461193d5760405162461bcd60e51b8152600401610e379061335f565b600b811061197c5760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b6044820152606401610e37565b600a55565b6000546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610e379061335f565b601a805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6000546001600160a01b031633146119f65760405162461bcd60e51b8152600401610e379061335f565b601e8110611a355760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b6044820152606401610e37565b600855565b6001546001600160a01b03163314611aa05760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610e37565b6002544211611af15760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610e37565b600154600080546040516001600160a01b0393841693909116916000805160206134c683398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314611b6d5760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601460205260409020805460ff19169055565b60006110b1338484612574565b6000546001600160a01b03163314611bc55760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b0381166000908152601460205260409020805460ff19166001179055611669816120c6565b6000546001600160a01b03163314611c1b5760405162461bcd60e51b8152600401610e379061335f565b601b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c6890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c9d5760405162461bcd60e51b8152600401610e379061335f565b600b8110611cdd5760405162461bcd60e51b815260206004820152600d60248201526c084eae4dc40e8dede40d0d2ced609b1b6044820152606401610e37565b600c55565b6000546001600160a01b03163314611d0c5760405162461bcd60e51b8152600401610e379061335f565b620f424081600654611d1e919061343f565b611d28919061341d565b601c5550565b6000546001600160a01b03163314611d585760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b038116611dae5760405162461bcd60e51b815260206004820152601e60248201527f526573657276655374616b696e67206973207a65726f206164647265737300006044820152606401610e37565b601580546001600160a01b0319166001600160a01b038316179055611660816111fe565b6000546001600160a01b03163314611dfc5760405162461bcd60e51b8152600401610e379061335f565b611e07333084612574565b611e32307f000000000000000000000000000000000000000000000000000000000000000084612450565b60195460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905290911690819063095ea7b390604401602060405180830381600087803b158015611ea257600080fd5b505af1158015611eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eda9190613224565b506040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038216906323b872dd90606401602060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190613224565b5060195460405162e8e33760e81b815230600482018190526001600160a01b039283166024830152604482018690526064820185905260006084830181905260a483015260c48201524260e48201527f00000000000000000000000000000000000000000000000000000000000000009091169063e8e337009061010401606060405180830381600087803b158015611ff957600080fd5b505af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203191906132b9565b50505061203c610e0d565b505050565b6000546001600160a01b0316331461206b5760405162461bcd60e51b8152600401610e379061335f565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561209a8142613405565b600255600080546040516001600160a01b03909116906000805160206134c6833981519152908390a350565b6000546001600160a01b031633146120f05760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601260209081526040808320805460ff19908116909155601390925290912080549091166001179055565b6000546001600160a01b031633146121535760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461219e5760405162461bcd60e51b8152600401610e379061335f565b6040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561220257600080fd5b505afa158015612216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223a919061325a565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561228557600080fd5b505af1158015612299573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203c9190613224565b6000546001600160a01b031633146122e75760405162461bcd60e51b8152600401610e379061335f565b600e55565b6000546001600160a01b031633146123165760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03811661237b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e37565b600080546040516001600160a01b03808516939216916000805160206134c683398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6019546040516370a0823160e01b81526001600160a01b0383811660048301526000921690829082906370a082319060240160206040518083038186803b15801561240e57600080fd5b505afa158015612422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612446919061325a565b1515949350505050565b6001600160a01b0383166124b25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e37565b6001600160a01b0382166125135760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e37565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e37565b6001600160a01b03821661263a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e37565b6000811161269c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e37565b6001600160a01b03831660009081526012602052604090205460ff16156126c257600080fd5b601a54600160c01b900460ff1615612701576001600160a01b0383163014806126f857506000546001600160a01b038481169116145b61270157600080fd5b6001600160a01b03831660009081526014602052604090205460ff16612951577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614801561276b5750601a54600160a81b900460ff165b1561278357612779836123c4565b1561278357600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614156127c857600f805460ff191690555b6000546001600160a01b0383811691161461284057601c548111156128405760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e37565b6001600160a01b03831660009081526013602052604090205460ff16612951576001600160a01b0383166000908152601160205260409020544314156128a4576001600160a01b0383166000908152601260205260409020805460ff191660011790555b6001600160a01b03831660009081526010602052604090205442906128ca906014613405565b1180156128f057506001600160a01b03831660009081526012602052604090205460ff16155b156129285760405162461bcd60e51b815260206004820152600860248201526729b637bbb237bbb760c11b6044820152606401610e37565b6001600160a01b0383166000908152601160209081526040808320439055601090915290204290555b601a805460ff60a01b191690557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690841614156129a757601a805460ff60a01b1916600160a01b1790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156129f557601a805460ff60a01b1916600160a11b1790555b306000908152600460205260408120549050612a1381601d54612b3c565b601d5490915081108015908190612a345750601b54600160a01b900460ff16155b8015612a7257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015612a875750601b54600160a81b900460ff165b8015612a9c5750601a54600160b01b900460ff165b15612aaa57612aaa82612b54565b6001600160a01b03851660009081526005602052604090205460019060ff1680612aec57506001600160a01b03851660009081526005602052604090205460ff165b15612af5575060005b6001600160a01b03861660009081526012602052604090205460ff16612b2657612b2186868684612bd9565b612b34565b612b34868660016000612bd9565b505050505050565b6000818310612b4b5781612b4d565b825b9392505050565b601b805460ff60a01b1916600160a01b179055601a548190600160c81b900460ff1615612bbf576005612b8882600461343f565b612b92919061341d565b90506000612ba0828461345e565b601854909150612bbd9030906001600160a01b0316836000612bd9565b505b612bc881612e10565b5050601b805460ff60a01b19169055565b80612be657612be6612f42565b600080600080612bf586612f87565b9350935093509350808284600754612c0d9190613405565b612c179190613405565b612c219190613405565b600755601a54600090600160c81b900460ff1615612c9c5760006064600e5485612c4b919061343f565b612c55919061341d565b905060006064600e5487612c69919061343f565b612c73919061341d565b9050612c7f828661345e565b9450612c8b818761345e565b9550612c978183613405565b925050505b6001600160a01b038916600090815260046020526040902054612cc090889061345e565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612cf0908690613405565b6001600160a01b0389166000908152600460205260408082209290925530815220548390612d1f908690613405565b612d299190613405565b3060009081526004602052604080822092909255601b546001600160a01b031681522054612d58908390613405565b601b546001600160a01b039081166000908152600460205260408082209390935560185490911681522054612d8e908290613405565b6018546001600160a01b0390811660009081526004602090815260409182902093909355518781528a821692918c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a385612e0557612e05600954600855600b54600a55600d54600c55565b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e4557612e4561348b565b6001600160a01b039283166020918202929092010152601954825191169082906001908110612e7657612e7661348b565b6001600160a01b0392831660209182029290920101526017547f00000000000000000000000000000000000000000000000000000000000000008216916338ed1739918591600091869116612ecc4260b4613405565b6040518663ffffffff1660e01b8152600401612eec959493929190613394565b600060405180830381600087803b158015612f0657600080fd5b505af1158015612f1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261203c9190810190613142565b600854158015612f525750600a54155b8015612f5e5750600c54155b15612f6557565b60088054600955600a8054600b55600c8054600d556000928390559082905555565b6000806000806000612f9886612fe6565b90506000612fa587613027565b90506000612fb288613057565b905060008183612fc2868c61345e565b612fcc919061345e565b612fd6919061345e565b9993985091965094509092505050565b600f5460009060ff16613007575050600f805460ff19166001179055600090565b606460085483613017919061343f565b613021919061341d565b92915050565b601a54600090600160a01b900460ff166001141561304f576064600a5483613017919061343f565b506000919050565b600c546000901561304f576064600c5483613017919061343f565b80356001600160a01b038116811461308957600080fd5b919050565b6000602082840312156130a057600080fd5b612b4d82613072565b600080604083850312156130bc57600080fd5b6130c583613072565b91506130d360208401613072565b90509250929050565b6000806000606084860312156130f157600080fd5b6130fa84613072565b925061310860208501613072565b9150604084013590509250925092565b6000806040838503121561312b57600080fd5b61313483613072565b946020939093013593505050565b6000602080838503121561315557600080fd5b825167ffffffffffffffff8082111561316d57600080fd5b818501915085601f83011261318157600080fd5b815181811115613193576131936134a1565b8060051b604051601f19603f830116810181811085821117156131b8576131b86134a1565b604052828152858101935084860182860187018a10156131d757600080fd5b600095505b838610156131fa5780518552600195909501949386019386016131dc565b5098975050505050505050565b60006020828403121561321957600080fd5b8135612b4d816134b7565b60006020828403121561323657600080fd5b8151612b4d816134b7565b60006020828403121561325357600080fd5b5035919050565b60006020828403121561326c57600080fd5b5051919050565b6000806040838503121561328657600080fd5b50508035926020909101359150565b600080604083850312156132a857600080fd5b505080516020909101519092909150565b6000806000606084860312156132ce57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156132f957600080fd5b813560ff81168114612b4d57600080fd5b600060208083528351808285015260005b818110156133375785810183015185820160400152820161331b565b81811115613349576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133e45784516001600160a01b0316835293830193918301916001016133bf565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561341857613418613475565b500190565b60008261343a57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561345957613459613475565b500290565b60008282101561347057613470613475565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461166957600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220b029cdd7baafb6e8ac74698c2e11e9326d030586401ae58394d228f3caeaf16164736f6c634300080600334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x60806040526004361061043f5760003560e01c8063950eb5d511610234578063cef062fc1161012e578063e43252d7116100b6578063eec7d8f91161007a578063eec7d8f914610d5d578063ef0645ac14610d7d578063f2fde38b14610d9d578063f9f92be414610dbd578063fb64339214610ded57600080fd5b8063e43252d714610cd2578063e6a97ac614610cf2578063ea2f0b3714610d12578063ec4e68a214610d32578063edf8bc1314610d4857600080fd5b8063d58e4605116100fd578063d58e460514610c0c578063d5cf7a9214610c2c578063dd46706414610c4c578063dd62ed3e14610c6c578063e0bab4c414610cb257600080fd5b8063cef062fc14610ba0578063d12a768814610bc0578063d20f197d14610bd6578063d543dbeb14610bec57600080fd5b8063a8ec4ffc116101bc578063bf5976d311610180578063bf5976d314610b07578063c0b0fda214610b1d578063c26d7be014610b33578063c49b9a8014610b60578063cea2695814610b8057600080fd5b8063a8ec4ffc14610a71578063a9059cbb14610a91578063a9d68b8614610ab1578063b46ae5c614610ad1578063b6c5232414610af257600080fd5b80639b19251a116102035780639b19251a146109ca578063a10954fe146109fa578063a2b8a94714610a1c578063a69df4b514610a3c578063a6c6e5f014610a5157600080fd5b8063950eb5d51461093b578063952ca92c1461095b57806395d89b4114610988578063961522ed146109b557600080fd5b8063439766ce116103455780635d9728c8116102cd578063715018a611610291578063715018a6146108b25780637d1db4a5146108c757806385bec3d7146108dd5780638ab1d681146108fd5780638da5cb5b1461091d57600080fd5b80635d9728c81461080d57806362f837ef1461082d5780636f43f17b1461084757806370a082311461085c57806370d5ae051461089257600080fd5b80634a377e1d116103145780634a377e1d146107535780634a74bb02146107735780634d431e5e146107945780635342acb4146107b4578063537df3b6146107ed57600080fd5b8063439766ce146106c957806344337ea1146106ea578063491e91ee1461070a57806349bd5a5e1461071f57600080fd5b80632103b6ad116103c857806331ce11ec1161039757806331ce11ec1461063e5780633ec20ab01461065f578063407893f11461067f57806342c5ddc414610694578063437823ec146106a957600080fd5b80632103b6ad146105b95780632130e348146105e957806323b872dd1461060a578063313ce5671461062a57600080fd5b80630a7a1c4d1161040f5780630a7a1c4d146104f15780630d88331a1461052457806313114a9d146105395780631694505e1461055857806318160ddd146105a457600080fd5b80627635b61461044b57806301a754a31461046257806306fdde0314610498578063095ea7b3146104d157600080fd5b3661044657005b600080fd5b34801561045757600080fd5b50610460610e0d565b005b34801561046e57600080fd5b50601a5461048390600160b01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156104a457600080fd5b5060408051808201909152600781526652657a6572766560c81b60208201525b60405161048f919061330a565b3480156104dd57600080fd5b506104836104ec366004613118565b6110a4565b3480156104fd57600080fd5b50601a5461051290600160a01b900460ff1681565b60405160ff909116815260200161048f565b34801561053057600080fd5b506104606110ba565b34801561054557600080fd5b506007545b60405190815260200161048f565b34801561056457600080fd5b5061058c7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161048f565b3480156105b057600080fd5b5060065461054a565b3480156105c557600080fd5b506104836105d436600461308e565b60146020526000908152604090205460ff1681565b3480156105f557600080fd5b50601a5461048390600160a81b900460ff1681565b34801561061657600080fd5b506104836106253660046130dc565b611105565b34801561063657600080fd5b506009610512565b34801561064a57600080fd5b50601a5461048390600160c81b900460ff1681565b34801561066b57600080fd5b5061046061067a366004613241565b611154565b34801561068b57600080fd5b50610460611192565b3480156106a057600080fd5b506104836111dd565b3480156106b557600080fd5b506104606106c436600461308e565b6111fe565b3480156106d557600080fd5b50601a5461048390600160c01b900460ff1681565b3480156106f657600080fd5b5061046061070536600461308e565b61124c565b34801561071657600080fd5b506104606112af565b34801561072b57600080fd5b5061058c7f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c81565b34801561075f57600080fd5b50601a5461058c906001600160a01b031681565b34801561077f57600080fd5b50601b5461048390600160a81b900460ff1681565b3480156107a057600080fd5b506104606107af36600461308e565b6115ad565b3480156107c057600080fd5b506104836107cf36600461308e565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107f957600080fd5b5061046061080836600461308e565b61166c565b34801561081957600080fd5b5061046061082836600461308e565b6116b7565b34801561083957600080fd5b50600f546104839060ff1681565b34801561085357600080fd5b5061054a61175b565b34801561086857600080fd5b5061054a61087736600461308e565b6001600160a01b031660009081526004602052604090205490565b34801561089e57600080fd5b50601b5461058c906001600160a01b031681565b3480156108be57600080fd5b506104606117fd565b3480156108d357600080fd5b5061054a601c5481565b3480156108e957600080fd5b506104606108f83660046132e7565b61185f565b34801561090957600080fd5b5061046061091836600461308e565b6118c8565b34801561092957600080fd5b506000546001600160a01b031661058c565b34801561094757600080fd5b50610460610956366004613241565b611913565b34801561096757600080fd5b5061054a61097636600461308e565b60116020526000908152604090205481565b34801561099457600080fd5b50604080518082019091526004815263292d292b60e11b60208201526104c4565b3480156109c157600080fd5b50610460611981565b3480156109d657600080fd5b506104836109e536600461308e565b60136020526000908152604090205460ff1681565b348015610a0657600080fd5b503060009081526004602052604090205461054a565b348015610a2857600080fd5b50610460610a37366004613241565b6119cc565b348015610a4857600080fd5b50610460611a3a565b348015610a5d57600080fd5b5060155461058c906001600160a01b031681565b348015610a7d57600080fd5b50610460610a8c36600461308e565b611b43565b348015610a9d57600080fd5b50610483610aac366004613118565b611b8e565b348015610abd57600080fd5b50610460610acc36600461308e565b611b9b565b348015610add57600080fd5b50601a5461051290600160b81b900460ff1681565b348015610afe57600080fd5b5060025461054a565b348015610b1357600080fd5b5061054a600a5481565b348015610b2957600080fd5b5061054a600c5481565b348015610b3f57600080fd5b5061054a610b4e36600461308e565b60106020526000908152604090205481565b348015610b6c57600080fd5b50610460610b7b366004613207565b611bf1565b348015610b8c57600080fd5b50610460610b9b366004613241565b611c73565b348015610bac57600080fd5b5060165461058c906001600160a01b031681565b348015610bcc57600080fd5b5061054a601d5481565b348015610be257600080fd5b5061054a600e5481565b348015610bf857600080fd5b50610460610c07366004613241565b611ce2565b348015610c1857600080fd5b50610460610c2736600461308e565b611d2e565b348015610c3857600080fd5b50610460610c47366004613273565b611dd2565b348015610c5857600080fd5b50610460610c67366004613241565b612041565b348015610c7857600080fd5b5061054a610c873660046130a9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610cbe57600080fd5b5060195461058c906001600160a01b031681565b348015610cde57600080fd5b50610460610ced36600461308e565b6120c6565b348015610cfe57600080fd5b5060175461058c906001600160a01b031681565b348015610d1e57600080fd5b50610460610d2d36600461308e565b612129565b348015610d3e57600080fd5b5061054a60085481565b348015610d5457600080fd5b50610460612174565b348015610d6957600080fd5b50610460610d78366004613241565b6122bd565b348015610d8957600080fd5b5060185461058c906001600160a01b031681565b348015610da957600080fd5b50610460610db836600461308e565b6122ec565b348015610dc957600080fd5b50610483610dd836600461308e565b60126020526000908152604090205460ff1681565b348015610df957600080fd5b50610483610e0836600461308e565b6123c4565b6000546001600160a01b03163314610e405760405162461bcd60e51b8152600401610e379061335f565b60405180910390fd5b601a8054600160b01b60ff600160c01b8084048216150260ff60c01b19841681178390049091161590910260ff60b01b1990911662ff00ff60b01b1990921691909117179055601754610ea09030906001600160a01b0316600019612450565b610ecd307f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c600019612450565b601a54610ee79030906001600160a01b0316600019612450565b60195460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c81166004830152600019602483015290911690819063095ea7b390604401602060405180830381600087803b158015610f5857600080fd5b505af1158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190613224565b50601a5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b158015610fe057600080fd5b505af1158015610ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110189190613224565b5060175460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b15801561106857600080fd5b505af115801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190613224565b5050565b60006110b1338484612450565b50600192915050565b6000546001600160a01b031633146110e45760405162461bcd60e51b8152600401610e379061335f565b601a805460ff60c81b198116600160c81b9182900460ff1615909102179055565b6001600160a01b038316600090815260036020908152604080832033808552925282205461113f91869161113a90869061345e565b612450565b61114a848484612574565b5060019392505050565b6000546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610e379061335f565b61118c81633b9aca0061343f565b601d5550565b6000546001600160a01b031633146111bc5760405162461bcd60e51b8152600401610e379061335f565b601a805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000601d546111f83060009081526004602052604090205490565b11905090565b6000546001600160a01b031633146112285760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b031633146112765760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601360209081526040808320805460ff19908116909155601290925290912080549091166001179055565b6000546001600160a01b031633146112d95760405162461bcd60e51b8152600401610e379061335f565b600f805460ff191690556040516370a0823160e01b81523060048201527f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f919061325a565b601a5490915060009060649061139f90600160b81b900460ff168461343f565b6113a9919061341d565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81166004830152602482018390529192509084169063095ea7b390604401602060405180830381600087803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190613224565b506019546017546001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263baa2abde9230929182169186916000918291166114a14260b4613405565b60405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015290921660a482015260c481019190915260e4016040805180830381600087803b15801561150e57600080fd5b505af1158015611522573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115469190613295565b5050601754604080516335cfcb7560e11b815290516001600160a01b03909216918291636b9f96ea91600480830192600092919082900301818387803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146115d75760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03811661163c5760405162461bcd60e51b815260206004820152602660248201527f526573657276655374616b696e675265636569766572206973207a65726f206160448201526564647265737360d01b6064820152608401610e37565b601880546001600160a01b0319166001600160a01b038316179055611660816111fe565b61166981611b9b565b50565b6000546001600160a01b031633146116965760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000546001600160a01b031633146116e15760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b0381166117375760405162461bcd60e51b815260206004820152601f60248201527f7265736572766545786368616e6765206973207a65726f2061646472657373006044820152606401610e37565b601780546001600160a01b0319166001600160a01b038316179055611660816111fe565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c906001600160a01b038216906370a082319060240160206040518083038186803b1580156117bf57600080fd5b505afa1580156117d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f7919061325a565b91505090565b6000546001600160a01b031633146118275760405162461bcd60e51b8152600401610e379061335f565b600080546040516001600160a01b03909116906000805160206134c6833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118895760405162461bcd60e51b8152600401610e379061335f565b60098160ff1611801561189f575060478160ff16105b6118a857600080fd5b601a805460ff909216600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031633146118f25760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601360205260409020805460ff19169055565b6000546001600160a01b0316331461193d5760405162461bcd60e51b8152600401610e379061335f565b600b811061197c5760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b6044820152606401610e37565b600a55565b6000546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610e379061335f565b601a805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6000546001600160a01b031633146119f65760405162461bcd60e51b8152600401610e379061335f565b601e8110611a355760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b6044820152606401610e37565b600855565b6001546001600160a01b03163314611aa05760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610e37565b6002544211611af15760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610e37565b600154600080546040516001600160a01b0393841693909116916000805160206134c683398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314611b6d5760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601460205260409020805460ff19169055565b60006110b1338484612574565b6000546001600160a01b03163314611bc55760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b0381166000908152601460205260409020805460ff19166001179055611669816120c6565b6000546001600160a01b03163314611c1b5760405162461bcd60e51b8152600401610e379061335f565b601b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c6890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c9d5760405162461bcd60e51b8152600401610e379061335f565b600b8110611cdd5760405162461bcd60e51b815260206004820152600d60248201526c084eae4dc40e8dede40d0d2ced609b1b6044820152606401610e37565b600c55565b6000546001600160a01b03163314611d0c5760405162461bcd60e51b8152600401610e379061335f565b620f424081600654611d1e919061343f565b611d28919061341d565b601c5550565b6000546001600160a01b03163314611d585760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b038116611dae5760405162461bcd60e51b815260206004820152601e60248201527f526573657276655374616b696e67206973207a65726f206164647265737300006044820152606401610e37565b601580546001600160a01b0319166001600160a01b038316179055611660816111fe565b6000546001600160a01b03163314611dfc5760405162461bcd60e51b8152600401610e379061335f565b611e07333084612574565b611e32307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612450565b60195460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d811660048301526024820184905290911690819063095ea7b390604401602060405180830381600087803b158015611ea257600080fd5b505af1158015611eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eda9190613224565b506040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038216906323b872dd90606401602060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190613224565b5060195460405162e8e33760e81b815230600482018190526001600160a01b039283166024830152604482018690526064820185905260006084830181905260a483015260c48201524260e48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063e8e337009061010401606060405180830381600087803b158015611ff957600080fd5b505af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203191906132b9565b50505061203c610e0d565b505050565b6000546001600160a01b0316331461206b5760405162461bcd60e51b8152600401610e379061335f565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561209a8142613405565b600255600080546040516001600160a01b03909116906000805160206134c6833981519152908390a350565b6000546001600160a01b031633146120f05760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152601260209081526040808320805460ff19908116909155601390925290912080549091166001179055565b6000546001600160a01b031633146121535760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461219e5760405162461bcd60e51b8152600401610e379061335f565b6040516370a0823160e01b81523060048201527f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561220257600080fd5b505afa158015612216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223a919061325a565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561228557600080fd5b505af1158015612299573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203c9190613224565b6000546001600160a01b031633146122e75760405162461bcd60e51b8152600401610e379061335f565b600e55565b6000546001600160a01b031633146123165760405162461bcd60e51b8152600401610e379061335f565b6001600160a01b03811661237b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e37565b600080546040516001600160a01b03808516939216916000805160206134c683398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6019546040516370a0823160e01b81526001600160a01b0383811660048301526000921690829082906370a082319060240160206040518083038186803b15801561240e57600080fd5b505afa158015612422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612446919061325a565b1515949350505050565b6001600160a01b0383166124b25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e37565b6001600160a01b0382166125135760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e37565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e37565b6001600160a01b03821661263a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e37565b6000811161269c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e37565b6001600160a01b03831660009081526012602052604090205460ff16156126c257600080fd5b601a54600160c01b900460ff1615612701576001600160a01b0383163014806126f857506000546001600160a01b038481169116145b61270157600080fd5b6001600160a01b03831660009081526014602052604090205460ff16612951577f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c6001600160a01b0316826001600160a01b031614801561276b5750601a54600160a81b900460ff165b1561278357612779836123c4565b1561278357600080fd5b7f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c6001600160a01b0316836001600160a01b031614156127c857600f805460ff191690555b6000546001600160a01b0383811691161461284057601c548111156128405760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e37565b6001600160a01b03831660009081526013602052604090205460ff16612951576001600160a01b0383166000908152601160205260409020544314156128a4576001600160a01b0383166000908152601260205260409020805460ff191660011790555b6001600160a01b03831660009081526010602052604090205442906128ca906014613405565b1180156128f057506001600160a01b03831660009081526012602052604090205460ff16155b156129285760405162461bcd60e51b815260206004820152600860248201526729b637bbb237bbb760c11b6044820152606401610e37565b6001600160a01b0383166000908152601160209081526040808320439055601090915290204290555b601a805460ff60a01b191690557f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c6001600160a01b0390811690841614156129a757601a805460ff60a01b1916600160a01b1790555b7f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c6001600160a01b0316826001600160a01b031614156129f557601a805460ff60a01b1916600160a11b1790555b306000908152600460205260408120549050612a1381601d54612b3c565b601d5490915081108015908190612a345750601b54600160a01b900460ff16155b8015612a7257507f000000000000000000000000778439499111b12a2d91cd09ecf7bc68dcef614c6001600160a01b0316856001600160a01b031614155b8015612a875750601b54600160a81b900460ff165b8015612a9c5750601a54600160b01b900460ff165b15612aaa57612aaa82612b54565b6001600160a01b03851660009081526005602052604090205460019060ff1680612aec57506001600160a01b03851660009081526005602052604090205460ff165b15612af5575060005b6001600160a01b03861660009081526012602052604090205460ff16612b2657612b2186868684612bd9565b612b34565b612b34868660016000612bd9565b505050505050565b6000818310612b4b5781612b4d565b825b9392505050565b601b805460ff60a01b1916600160a01b179055601a548190600160c81b900460ff1615612bbf576005612b8882600461343f565b612b92919061341d565b90506000612ba0828461345e565b601854909150612bbd9030906001600160a01b0316836000612bd9565b505b612bc881612e10565b5050601b805460ff60a01b19169055565b80612be657612be6612f42565b600080600080612bf586612f87565b9350935093509350808284600754612c0d9190613405565b612c179190613405565b612c219190613405565b600755601a54600090600160c81b900460ff1615612c9c5760006064600e5485612c4b919061343f565b612c55919061341d565b905060006064600e5487612c69919061343f565b612c73919061341d565b9050612c7f828661345e565b9450612c8b818761345e565b9550612c978183613405565b925050505b6001600160a01b038916600090815260046020526040902054612cc090889061345e565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612cf0908690613405565b6001600160a01b0389166000908152600460205260408082209290925530815220548390612d1f908690613405565b612d299190613405565b3060009081526004602052604080822092909255601b546001600160a01b031681522054612d58908390613405565b601b546001600160a01b039081166000908152600460205260408082209390935560185490911681522054612d8e908290613405565b6018546001600160a01b0390811660009081526004602090815260409182902093909355518781528a821692918c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a385612e0557612e05600954600855600b54600a55600d54600c55565b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e4557612e4561348b565b6001600160a01b039283166020918202929092010152601954825191169082906001908110612e7657612e7661348b565b6001600160a01b0392831660209182029290920101526017547f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8216916338ed1739918591600091869116612ecc4260b4613405565b6040518663ffffffff1660e01b8152600401612eec959493929190613394565b600060405180830381600087803b158015612f0657600080fd5b505af1158015612f1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261203c9190810190613142565b600854158015612f525750600a54155b8015612f5e5750600c54155b15612f6557565b60088054600955600a8054600b55600c8054600d556000928390559082905555565b6000806000806000612f9886612fe6565b90506000612fa587613027565b90506000612fb288613057565b905060008183612fc2868c61345e565b612fcc919061345e565b612fd6919061345e565b9993985091965094509092505050565b600f5460009060ff16613007575050600f805460ff19166001179055600090565b606460085483613017919061343f565b613021919061341d565b92915050565b601a54600090600160a01b900460ff166001141561304f576064600a5483613017919061343f565b506000919050565b600c546000901561304f576064600c5483613017919061343f565b80356001600160a01b038116811461308957600080fd5b919050565b6000602082840312156130a057600080fd5b612b4d82613072565b600080604083850312156130bc57600080fd5b6130c583613072565b91506130d360208401613072565b90509250929050565b6000806000606084860312156130f157600080fd5b6130fa84613072565b925061310860208501613072565b9150604084013590509250925092565b6000806040838503121561312b57600080fd5b61313483613072565b946020939093013593505050565b6000602080838503121561315557600080fd5b825167ffffffffffffffff8082111561316d57600080fd5b818501915085601f83011261318157600080fd5b815181811115613193576131936134a1565b8060051b604051601f19603f830116810181811085821117156131b8576131b86134a1565b604052828152858101935084860182860187018a10156131d757600080fd5b600095505b838610156131fa5780518552600195909501949386019386016131dc565b5098975050505050505050565b60006020828403121561321957600080fd5b8135612b4d816134b7565b60006020828403121561323657600080fd5b8151612b4d816134b7565b60006020828403121561325357600080fd5b5035919050565b60006020828403121561326c57600080fd5b5051919050565b6000806040838503121561328657600080fd5b50508035926020909101359150565b600080604083850312156132a857600080fd5b505080516020909101519092909150565b6000806000606084860312156132ce57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156132f957600080fd5b813560ff81168114612b4d57600080fd5b600060208083528351808285015260005b818110156133375785810183015185820160400152820161331b565b81811115613349576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133e45784516001600160a01b0316835293830193918301916001016133bf565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561341857613418613475565b500190565b60008261343a57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561345957613459613475565b500290565b60008282101561347057613470613475565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461166957600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220b029cdd7baafb6e8ac74698c2e11e9326d030586401ae58394d228f3caeaf16164736f6c63430008060033
Deployed Bytecode Sourcemap
19118:16675:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25076:483;;;;;;;;;;;;;:::i;:::-;;20537:28;;;;;;;;;;-1:-1:-1;20537:28:0;;;;-1:-1:-1;;;20537:28:0;;;;;;;;;7033:14:1;;7026:22;7008:41;;6996:2;6981:18;20537:28:0;;;;;;;;22992:74;;;;;;;;;;-1:-1:-1;23056:5:0;;;;;;;;;;;;-1:-1:-1;;;23056:5:0;;;;22992:74;;;;;;;:::i;24338:146::-;;;;;;;;;;-1:-1:-1;24338:146:0;;;;;:::i;:::-;;:::i;20489:19::-;;;;;;;;;;-1:-1:-1;20489:19:0;;;;-1:-1:-1;;;20489:19:0;;;;;;;;;15349:4:1;15337:17;;;15319:36;;15307:2;15292:18;20489:19:0;15274:87:1;28240:79:0;;;;;;;;;;;;;:::i;23582:78::-;;;;;;;;;;-1:-1:-1;23645:10:0;;23582:78;;;14156:25:1;;;14144:2;14129:18;23582:78:0;14111:76:1;20349:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4483:32:1;;;4465:51;;4453:2;4438:18;20349:51:0;4420:102:1;23233:91:0;;;;;;;;;;-1:-1:-1;23307:12:0;;23233:91;;20122:52;;;;;;;;;;-1:-1:-1;20122:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20512:21;;;;;;;;;;-1:-1:-1;20512:21:0;;;;-1:-1:-1;;;20512:21:0;;;;;;24489:246;;;;;;;;;;-1:-1:-1;24489:246:0;;;;;:::i;:::-;;:::i;23154:74::-;;;;;;;;;;-1:-1:-1;19585:1:0;23154:74;;20645:29;;;;;;;;;;-1:-1:-1;20645:29:0;;;;-1:-1:-1;;;20645:29:0;;;;;;27028:113;;;;;;;;;;-1:-1:-1;27028:113:0;;;;;:::i;:::-;;:::i;27229:74::-;;;;;;;;;;;;;:::i;22763:118::-;;;;;;;;;;;;;:::i;25564:102::-;;;;;;;;;;-1:-1:-1;25564:102:0;;;;;:::i;:::-;;:::i;20609:32::-;;;;;;;;;;-1:-1:-1;20609:32:0;;;;-1:-1:-1;;;20609:32:0;;;;;;27308:124;;;;;;;;;;-1:-1:-1;27308:124:0;;;;;:::i;:::-;;:::i;29373:561::-;;;;;;;;;;;;;:::i;20445:38::-;;;;;;;;;;;;;;;20404:37;;;;;;;;;;-1:-1:-1;20404:37:0;;;;-1:-1:-1;;;;;20404:37:0;;;20784:40;;;;;;;;;;-1:-1:-1;20784:40:0;;;;-1:-1:-1;;;20784:40:0;;;;;;26512:263;;;;;;;;;;-1:-1:-1;26512:263:0;;;;;:::i;:::-;;:::i;23808:114::-;;;;;;;;;;-1:-1:-1;23808:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;23890:27:0;23872:4;23890:27;;;:18;:27;;;;;;;;;23808:114;27437:99;;;;;;;;;;-1:-1:-1;27437:99:0;;;;;:::i;:::-;;:::i;24827:244::-;;;;;;;;;;-1:-1:-1;24827:244:0;;;;;:::i;:::-;;:::i;19894:26::-;;;;;;;;;;-1:-1:-1;19894:26:0;;;;;;;;23665:138;;;;;;;;;;;;;:::i;23329:109::-;;;;;;;;;;-1:-1:-1;23329:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;23416:17:0;23395:7;23416:17;;;:8;:17;;;;;;;23329:109;20680:71;;;;;;;;;;-1:-1:-1;20680:71:0;;;;-1:-1:-1;;;;;20680:71:0;;;17741:148;;;;;;;;;;;;;:::i;20830:47::-;;;;;;;;;;;;;;;;28553:133;;;;;;;;;;-1:-1:-1;28553:133:0;;;;;:::i;:::-;;:::i;27802:99::-;;;;;;;;;;-1:-1:-1;27802:99:0;;;;;:::i;:::-;;:::i;17098:79::-;;;;;;;;;;-1:-1:-1;17136:7:0;17163:6;-1:-1:-1;;;;;17163:6:0;17098:79;;25926:139;;;;;;;;;;-1:-1:-1;25926:139:0;;;;;:::i;:::-;;:::i;19975:45::-;;;;;;;;;;-1:-1:-1;19975:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;23071:78;;;;;;;;;;-1:-1:-1;23137:7:0;;;;;;;;;;;;-1:-1:-1;;;23137:7:0;;;;23071:78;;27146:77;;;;;;;;;;;;;:::i;20073:45::-;;;;;;;;;;-1:-1:-1;20073:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22887:100;;;;;;;;;;-1:-1:-1;22975:4:0;22935:7;23416:17;;;:8;:17;;;;;;22887:100;;25777:144;;;;;;;;;;-1:-1:-1;25777:144:0;;;;;:::i;:::-;;:::i;18763:344::-;;;;;;;;;;;;;:::i;20178:29::-;;;;;;;;;;-1:-1:-1;20178:29:0;;;;-1:-1:-1;;;;;20178:29:0;;;28119:116;;;;;;;;;;-1:-1:-1;28119:116:0;;;;;:::i;:::-;;:::i;24181:152::-;;;;;;;;;;-1:-1:-1;24181:152:0;;;;;:::i;:::-;;:::i;27974:140::-;;;;;;;;;;-1:-1:-1;27974:140:0;;;;;:::i;:::-;;:::i;20571:34::-;;;;;;;;;;-1:-1:-1;20571:34:0;;;;-1:-1:-1;;;20571:34:0;;;;;;18296:89;;;;;;;;;;-1:-1:-1;18368:9:0;;18296:89;;19682:32;;;;;;;;;;;;;;;;19773:27;;;;;;;;;;;;;;;;19926:45;;;;;;;;;;-1:-1:-1;19926:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;26351:156;;;;;;;;;;-1:-1:-1;26351:156:0;;;;;:::i;:::-;;:::i;26071:140::-;;;;;;;;;;-1:-1:-1;26071:140:0;;;;;:::i;:::-;;:::i;20211:35::-;;;;;;;;;;-1:-1:-1;20211:35:0;;;;-1:-1:-1;;;;;20211:35:0;;;20881:60;;;;;;;;;;;;;;;;19854:32;;;;;;;;;;;;;;;;26216:130;;;;;;;;;;-1:-1:-1;26216:130:0;;;;;:::i;:::-;;:::i;26781:242::-;;;;;;;;;;-1:-1:-1;26781:242:0;;;;;:::i;:::-;;:::i;28691:677::-;;;;;;;;;;-1:-1:-1;28691:677:0;;;;;:::i;:::-;;:::i;18461:226::-;;;;;;;;;;-1:-1:-1;18461:226:0;;;;;:::i;:::-;;:::i;23443:134::-;;;;;;;;;;-1:-1:-1;23443:134:0;;;;;:::i;:::-;-1:-1:-1;;;;;23545:18:0;;;23524:7;23545:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23443:134;20325:18;;;;;;;;;;-1:-1:-1;20325:18:0;;;;-1:-1:-1;;;;;20325:18:0;;;27673:124;;;;;;;;;;-1:-1:-1;27673:124:0;;;;;:::i;:::-;;:::i;20250:30::-;;;;;;;;;;-1:-1:-1;20250:30:0;;;;-1:-1:-1;;;;;20250:30:0;;;25671:101;;;;;;;;;;-1:-1:-1;25671:101:0;;;;;:::i;:::-;;:::i;19592:32::-;;;;;;;;;;;;;;;;28324:223;;;;;;;;;;;;;:::i;33241:95::-;;;;;;;;;;-1:-1:-1;33241:95:0;;;;;:::i;:::-;;:::i;20284:37::-;;;;;;;;;;-1:-1:-1;20284:37:0;;;;-1:-1:-1;;;;;20284:37:0;;;18044:244;;;;;;;;;;-1:-1:-1;18044:244:0;;;;;:::i;:::-;;:::i;20024:45::-;;;;;;;;;;-1:-1:-1;20024:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23927:190;;;;;;;;;;-1:-1:-1;23927:190:0;;;;;:::i;:::-;;:::i;25076:483::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;;;;;;;;;25141:13:::1;::::0;;-1:-1:-1;;;25141:13:0::1;-1:-1:-1::0;;;25141:13:0;;::::1;::::0;::::1;25140:14;25124:30;-1:-1:-1::0;;;;25124:30:0;::::1;::::0;::::1;25171:8:::0;;::::1;::::0;;::::1;25170:9;25159:20:::0;;::::1;-1:-1:-1::0;;;;25159:20:0;;;-1:-1:-1;;;;25159:20:0;;;;;;;::::1;::::0;;25208:15:::1;::::0;25184:53:::1;::::0;25201:4:::1;::::0;-1:-1:-1;;;;;25208:15:0::1;-1:-1:-1::0;;25184:8:0::1;:53::i;:::-;25242;25259:4;25266:13;-1:-1:-1::0;;25242:8:0::1;:53::i;:::-;25324:22;::::0;25300:60:::1;::::0;25317:4:::1;::::0;-1:-1:-1;;;;;25324:22:0::1;-1:-1:-1::0;;25300:8:0::1;:60::i;:::-;25393:3;::::0;25403:42:::1;::::0;-1:-1:-1;;;25403:42:0;;-1:-1:-1;;;;;25417:13:0::1;6781:32:1::0;;25403:42:0::1;::::0;::::1;6763:51:1::0;-1:-1:-1;;6830:18:1;;;6823:34;25393:3:0;;::::1;::::0;;;25403:12:::1;::::0;6736:18:1;;25403:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25464:22:0::1;::::0;25450:53:::1;::::0;-1:-1:-1;;;25450:53:0;;-1:-1:-1;;;;;25464:22:0;;::::1;25450:53;::::0;::::1;6763:51:1::0;-1:-1:-1;;6830:18:1;;;6823:34;25450:12:0;;::::1;::::0;::::1;::::0;6736:18:1;;25450:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25522:15:0::1;::::0;25508:46:::1;::::0;-1:-1:-1;;;25508:46:0;;-1:-1:-1;;;;;25522:15:0;;::::1;25508:46;::::0;::::1;6763:51:1::0;-1:-1:-1;;6830:18:1;;;6823:34;25508:12:0;;::::1;::::0;::::1;::::0;6736:18:1;;25508:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25119:440;25076:483::o:0;24338:146::-;24413:4;24424:39;9600:10;24447:7;24456:6;24424:8;:39::i;:::-;-1:-1:-1;24475:4:0;24338:146;;;;:::o;28240:79::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;28304:10:::1;::::0;;-1:-1:-1;;;;28290:24:0;::::1;-1:-1:-1::0;;;28304:10:0;;;::::1;;;28303:11;28290:24:::0;;::::1;;::::0;;28240:79::o;24489:246::-;-1:-1:-1;;;;;24629:19:0;;24587:4;24629:19;;;:11;:19;;;;;;;;9600:10;24629:33;;;;;;;;24598:75;;24607:6;;24629:42;;24665:6;;24629:42;:::i;:::-;24598:8;:75::i;:::-;24678:36;24688:6;24696:9;24707:6;24678:9;:36::i;:::-;-1:-1:-1;24726:4:0;24489:246;;;;;:::o;27028:113::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;27123:13:::1;:4:::0;27130:6:::1;27123:13;:::i;:::-;27091:29;:45:::0;-1:-1:-1;27028:113:0:o;27229:74::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;27290:8:::1;::::0;;-1:-1:-1;;;;27278:20:0;::::1;-1:-1:-1::0;;;27290:8:0;;;::::1;;;27289:9;27278:20:::0;;::::1;;::::0;;27229:74::o;22763:118::-;22809:4;22846:29;;22827:16;22975:4;22935:7;23416:17;;;:8;:17;;;;;;;22887:100;22827:16;:48;22820:55;;22763:118;:::o;25564:102::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25627:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;25627:34:0::1;25657:4;25627:34;::::0;;25564:102::o;27308:124::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27371:18:0::1;27392:5;27371:18:::0;;;:9:::1;:18;::::0;;;;;;;:26;;-1:-1:-1;;27371:26:0;;::::1;::::0;;;27402:9:::1;:18:::0;;;;;;:25;;;;::::1;27371:26:::0;27402:25:::1;::::0;;27308:124::o;29373:561::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;29416:7:::1;:15:::0;;-1:-1:-1;;29416:15:0::1;::::0;;29512:39:::1;::::0;-1:-1:-1;;;29512:39:0;;29545:4:::1;29512:39;::::0;::::1;4465:51:1::0;29471:13:0::1;::::0;-1:-1:-1;;;;;;;29512:24:0;::::1;::::0;::::1;::::0;4438:18:1;;29512:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29586:16;::::0;29491:60;;-1:-1:-1;29556:13:0::1;::::0;29607:3:::1;::::0;29573:29:::1;::::0;-1:-1:-1;;;29586:16:0;::::1;;;29491:60:::0;29573:29:::1;:::i;:::-;29572:38;;;;:::i;:::-;29619:57;::::0;-1:-1:-1;;;29619:57:0;;-1:-1:-1;;;;;29651:15:0::1;6781:32:1::0;;29619:57:0::1;::::0;::::1;6763:51:1::0;6830:18;;;6823:34;;;;;-1:-1:-1;29619:22:0;;::::1;::::0;::::1;::::0;6736:18:1;;29619:57:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29737:3:0::1;::::0;29771:15:::1;::::0;-1:-1:-1;;;;;29681:15:0::1;:31:::0;::::1;::::0;::::1;::::0;29726:4:::1;::::0;29737:3;;::::1;::::0;29746:5;;29737:3:::1;::::0;;;29771:15:::1;29792:27;:15;29810:9;29792:27;:::i;:::-;29681:143;::::0;::::1;::::0;;;-1:-1:-1;;;;;;29681:143:0;;;-1:-1:-1;;;;;5518:15:1;;;29681:143:0::1;::::0;::::1;5500:34:1::0;5570:15;;;5550:18;;;5543:43;5602:18;;;5595:34;;;;5645:18;;;5638:34;;;;5688:19;;;5681:35;5753:15;;;5732:19;;;5725:44;5785:19;;;5778:35;;;;5434:19;;29681:143:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29883:15:0::1;::::0;29905:24:::1;::::0;;-1:-1:-1;;;29905:24:0;;;;-1:-1:-1;;;;;29883:15:0;;::::1;::::0;;;29905:22:::1;::::0;:24:::1;::::0;;::::1;::::0;29830:32:::1;::::0;29905:24;;;;;;;29830:32;29883:15;29905:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29411:523;;;;29373:561::o:0;26512:263::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26595:22:0;::::1;26587:73;;;::::0;-1:-1:-1;;;26587:73:0;;8502:2:1;26587:73:0::1;::::0;::::1;8484:21:1::0;8541:2;8521:18;;;8514:30;8580:34;8560:18;;;8553:62;-1:-1:-1;;;8631:18:1;;;8624:36;8677:19;;26587:73:0::1;8474:228:1::0;26587:73:0::1;26665:22;:33:::0;;-1:-1:-1;;;;;;26665:33:0::1;-1:-1:-1::0;;;;;26665:33:0;::::1;;::::0;;26703:26:::1;26665:33:::0;26703:14:::1;:26::i;:::-;26734:36;26761:8;26734:26;:36::i;:::-;26512:263:::0;:::o;27437:99::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27505:18:0::1;27526:5;27505:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;27505:26:0::1;::::0;;27437:99::o;24827:244::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24905:22:0;::::1;24897:66;;;::::0;-1:-1:-1;;;24897:66:0;;11600:2:1;24897:66:0::1;::::0;::::1;11582:21:1::0;11639:2;11619:18;;;11612:30;11678:33;11658:18;;;11651:61;11729:18;;24897:66:0::1;11572:181:1::0;24897:66:0::1;24968:15;:26:::0;;-1:-1:-1;;;;;;24968:26:0::1;-1:-1:-1::0;;;;;24968:26:0;::::1;;::::0;;24999::::1;24968::::0;24999:14:::1;:26::i;23665:138::-:0;23770:28;;-1:-1:-1;;;23770:28:0;;23792:4;23770:28;;;4465:51:1;23709:7:0;;23744:13;;-1:-1:-1;;;;;23770:13:0;;;;;4438:18:1;;23770:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23763:35;;;23665:138;:::o;17741:148::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;17848:1:::1;17832:6:::0;;17811:40:::1;::::0;-1:-1:-1;;;;;17832:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17811:40:0;17848:1;;17811:40:::1;17879:1;17862:19:::0;;-1:-1:-1;;;;;;17862:19:0::1;::::0;;17741:148::o;28553:133::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;28637:1:::1;28630:5;:8;;;:21;;;;;28649:2;28642:5;:9;;;28630:21;28620:32;;;::::0;::::1;;28657:16;:24:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;28657:24:0::1;-1:-1:-1::0;;;;28657:24:0;;::::1;::::0;;;::::1;::::0;;28553:133::o;27802:99::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27870:18:0::1;27891:5;27870:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;27870:26:0::1;::::0;;27802:99::o;25926:139::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;26013:2:::1;26004:6;:11;25994:40;;;::::0;-1:-1:-1;;;25994:40:0;;12771:2:1;25994:40:0::1;::::0;::::1;12753:21:1::0;12810:2;12790:18;;;12783:30;-1:-1:-1;;;12829:18:1;;;12822:42;12881:18;;25994:40:0::1;12743:162:1::0;25994:40:0::1;26039:12;:21:::0;25926:139::o;27146:77::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;27209:9:::1;::::0;;-1:-1:-1;;;;27196:22:0;::::1;-1:-1:-1::0;;;27209:9:0;;;::::1;;;27208:10;27196:22:::0;;::::1;;::::0;;27146:77::o;25777:144::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;25867:2:::1;25857:7;:12;25847:41;;;::::0;-1:-1:-1;;;25847:41:0;;12771:2:1;25847:41:0::1;::::0;::::1;12753:21:1::0;12810:2;12790:18;;;12783:30;-1:-1:-1;;;12829:18:1;;;12822:42;12881:18;;25847:41:0::1;12743:162:1::0;25847:41:0::1;25893:13;:23:::0;25777:144::o;18763:344::-;18815:14;;-1:-1:-1;;;;;18815:14:0;18833:10;18815:28;18807:76;;;;-1:-1:-1;;;18807:76:0;;13808:2:1;18807:76:0;;;13790:21:1;13847:2;13827:18;;;13820:30;13886:34;13866:18;;;13859:62;-1:-1:-1;;;13937:18:1;;;13930:33;13980:19;;18807:76:0;13780:225:1;18807:76:0;18921:9;;18903:15;:27;18894:73;;;;-1:-1:-1;;;18894:73:0;;13112:2:1;18894:73:0;;;13094:21:1;13151:2;13131:18;;;13124:30;13190:33;13170:18;;;13163:61;13241:18;;18894:73:0;13084:181:1;18894:73:0;19012:14;;;19004:6;;18983:44;;-1:-1:-1;;;;;19012:14:0;;;;19004:6;;;;-1:-1:-1;;;;;;;;;;;18983:44:0;;19047:14;;;;19038:23;;-1:-1:-1;;;;;;19038:23:0;;;-1:-1:-1;;;;;19047:14:0;;19038:23;;;;19072:27;;;18763:344::o;28119:116::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28197:25:0::1;28225:5;28197:25:::0;;;:16:::1;:25;::::0;;;;:33;;-1:-1:-1;;28197:33:0::1;::::0;;28119:116::o;24181:152::-;24259:4;24270:42;9600:10;24294:9;24305:6;24270:9;:42::i;27974:140::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28049:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;:32;;-1:-1:-1;;28049:32:0::1;28077:4;28049:32;::::0;;28086:23:::1;28066:7:::0;28086:14:::1;:23::i;26351:156::-:0;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;26422:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;26422:32:0::1;-1:-1:-1::0;;;;26422:32:0;;::::1;;::::0;;26464:38:::1;::::0;::::1;::::0;::::1;::::0;26446:8;7033:14:1;7026:22;7008:41;;6996:2;6981:18;;6963:92;26464:38:0::1;;;;;;;;26351:156:::0;:::o;26071:140::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;26161:2:::1;26151:7;:12;26141:42;;;::::0;-1:-1:-1;;;26141:42:0;;9719:2:1;26141:42:0::1;::::0;::::1;9701:21:1::0;9758:2;9738:18;;;9731:30;-1:-1:-1;;;9777:18:1;;;9770:43;9830:18;;26141:42:0::1;9691:163:1::0;26141:42:0::1;26188:8;:18:::0;26071:140::o;26216:130::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;26336:5:::1;26320:12;26305;;:27;;;;:::i;:::-;26304:37;;;;:::i;:::-;26289:12;:52:::0;-1:-1:-1;26216:130:0:o;26781:242::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26859:22:0;::::1;26851:65;;;::::0;-1:-1:-1;;;26851:65:0;;10470:2:1;26851:65:0::1;::::0;::::1;10452:21:1::0;10509:2;10489:18;;;10482:30;10548:32;10528:18;;;10521:60;10598:18;;26851:65:0::1;10442:180:1::0;26851:65:0::1;26921:14;:25:::0;;-1:-1:-1;;;;;;26921:25:0::1;-1:-1:-1::0;;;;;26921:25:0;::::1;;::::0;;26951:26:::1;26921:25:::0;26951:14:::1;:26::i;28691:677::-:0;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;28831:53:::1;28843:10;28863:4;28871:11;28831:9;:53::i;:::-;28889:62;28906:4;28921:15;28939:11;28889:8;:62::i;:::-;28983:3;::::0;28993:51:::1;::::0;-1:-1:-1;;;28993:51:0;;-1:-1:-1;;;;;29016:15:0::1;6781:32:1::0;;28993:51:0::1;::::0;::::1;6763::1::0;6830:18;;;6823:34;;;28983:3:0;;::::1;::::0;;;28993:12:::1;::::0;6736:18:1;;28993:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29049:59:0::1;::::0;-1:-1:-1;;;29049:59:0;;29069:10:::1;29049:59;::::0;::::1;4991:34:1::0;29089:4:0::1;5041:18:1::0;;;5034:43;5093:18;;;5086:34;;;-1:-1:-1;;;;;29049:17:0;::::1;::::0;::::1;::::0;4926:18:1;;29049:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29194:3:0::1;::::0;29141:201:::1;::::0;-1:-1:-1;;;29141:201:0;;29183:4:::1;29141:201;::::0;::::1;6221:34:1::0;;;-1:-1:-1;;;;;29194:3:0;;::::1;6271:18:1::0;;;6264:43;6323:18;;;6316:34;;;6366:18;;;6359:34;;;29194:3:0::1;6409:19:1::0;;;6402:35;;;6453:19;;;6446:35;6497:19;;;6490:44;29322:15:0::1;6550:19:1::0;;;6543:35;29141:15:0::1;:28:::0;;::::1;::::0;::::1;::::0;6155:19:1;;29141:201:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29347:16;:14;:16::i;:::-;28765:603;28691:677:::0;;:::o;18461:226::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;18542:6:::1;::::0;;;18525:23;;-1:-1:-1;;;;;;18525:23:0;;::::1;-1:-1:-1::0;;;;;18542:6:0;::::1;18525:23;::::0;;;18559:19:::1;::::0;;18601:22:::1;18619:4:::0;18601:15:::1;:22;:::i;:::-;18589:9;:34:::0;18676:1:::1;18660:6:::0;;18639:40:::1;::::0;-1:-1:-1;;;;;18660:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;18639:40:0;18676:1;;18639:40:::1;18461:226:::0;:::o;27673:124::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27736:18:0::1;27757:5;27736:18:::0;;;:9:::1;:18;::::0;;;;;;;:26;;-1:-1:-1;;27736:26:0;;::::1;::::0;;;27767:9:::1;:18:::0;;;;;;:25;;;;::::1;27736:26:::0;27767:25:::1;::::0;;27673:124::o;25671:101::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25732:27:0::1;25762:5;25732:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25732:35:0::1;::::0;;25671:101::o;28324:223::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;28449:39:::1;::::0;-1:-1:-1;;;28449:39:0;;28482:4:::1;28449:39;::::0;::::1;4465:51:1::0;28408:13:0::1;::::0;28375:21:::1;::::0;-1:-1:-1;;;;;28449:24:0;::::1;::::0;::::1;::::0;4438:18:1;;28449:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28493:49;::::0;-1:-1:-1;;;28493:49:0;;28518:10:::1;28493:49;::::0;::::1;6763:51:1::0;6830:18;;;6823:34;;;28428:60:0;;-1:-1:-1;;;;;;28493:23:0;::::1;::::0;::::1;::::0;6736:18:1;;28493:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33241:95::-:0;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;33310:12:::1;:21:::0;33241:95::o;18044:244::-;17310:6;;-1:-1:-1;;;;;17310:6:0;9600:10;17310:22;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18133:22:0;::::1;18125:73;;;::::0;-1:-1:-1;;;18125:73:0;;8909:2:1;18125:73:0::1;::::0;::::1;8891:21:1::0;8948:2;8928:18;;;8921:30;8987:34;8967:18;;;8960:62;-1:-1:-1;;;9038:18:1;;;9031:36;9084:19;;18125:73:0::1;8881:228:1::0;18125:73:0::1;18235:6;::::0;;18214:38:::1;::::0;-1:-1:-1;;;;;18214:38:0;;::::1;::::0;18235:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;18214:38:0;::::1;18263:6;:17:::0;;-1:-1:-1;;;;;;18263:17:0::1;-1:-1:-1::0;;;;;18263:17:0;;;::::1;::::0;;;::::1;::::0;;18044:244::o;23927:190::-;24025:3;;24056:25;;-1:-1:-1;;;24056:25:0;;-1:-1:-1;;;;;4483:32:1;;;24056:25:0;;;4465:51:1;23994:4:0;;24025:3;;23994:4;;24025:3;;24056:14;;4438:18:1;;24056:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24095:15;;;23927:190;-1:-1:-1;;;;23927:190:0:o;29939:310::-;-1:-1:-1;;;;;30026:19:0;;30018:68;;;;-1:-1:-1;;;30018:68:0;;12366:2:1;30018:68:0;;;12348:21:1;12405:2;12385:18;;;12378:30;12444:34;12424:18;;;12417:62;-1:-1:-1;;;12495:18:1;;;12488:34;12539:19;;30018:68:0;12338:226:1;30018:68:0;-1:-1:-1;;;;;30099:21:0;;30091:68;;;;-1:-1:-1;;;30091:68:0;;9316:2:1;30091:68:0;;;9298:21:1;9355:2;9335:18;;;9328:30;9394:34;9374:18;;;9367:62;-1:-1:-1;;;9445:18:1;;;9438:32;9487:19;;30091:68:0;9288:224:1;30091:68:0;-1:-1:-1;;;;;30166:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30212:32;;14156:25:1;;;30212:32:0;;14129:18:1;30212:32:0;;;;;;;29939:310;;;:::o;30315:2155::-;-1:-1:-1;;;;;30410:18:0;;30402:68;;;;-1:-1:-1;;;30402:68:0;;11960:2:1;30402:68:0;;;11942:21:1;11999:2;11979:18;;;11972:30;12038:34;12018:18;;;12011:62;-1:-1:-1;;;12089:18:1;;;12082:35;12134:19;;30402:68:0;11932:227:1;30402:68:0;-1:-1:-1;;;;;30483:16:0;;30475:64;;;;-1:-1:-1;;;30475:64:0;;8098:2:1;30475:64:0;;;8080:21:1;8137:2;8117:18;;;8110:30;8176:34;8156:18;;;8149:62;-1:-1:-1;;;8227:18:1;;;8220:33;8270:19;;30475:64:0;8070:225:1;30475:64:0;30561:1;30552:6;:10;30544:64;;;;-1:-1:-1;;;30544:64:0;;11190:2:1;30544:64:0;;;11172:21:1;11229:2;11209:18;;;11202:30;11268:34;11248:18;;;11241:62;-1:-1:-1;;;11319:18:1;;;11312:39;11368:19;;30544:64:0;11162:231:1;30544:64:0;-1:-1:-1;;;;;30622:15:0;;;;;;:9;:15;;;;;;;;30621:16;30613:25;;;;;;30647:13;;-1:-1:-1;;;30647:13:0;;;;30643:69;;;-1:-1:-1;;;;;30671:21:0;;30687:4;30671:21;;:40;;-1:-1:-1;17136:7:0;17163:6;-1:-1:-1;;;;;30696:15:0;;;17163:6;;30696:15;30671:40;30662:50;;;;;;-1:-1:-1;;;;;30724:22:0;;;;;;:16;:22;;;;;;;;30719:541;;30763:13;-1:-1:-1;;;;;30757:19:0;:2;-1:-1:-1;;;;;30757:19:0;;:32;;;;-1:-1:-1;30780:9:0;;-1:-1:-1;;;30780:9:0;;;;30757:32;30754:73;;;30802:23;30820:4;30802:17;:23::i;:::-;30801:24;30791:36;;;;;;30844:13;-1:-1:-1;;;;;30836:21:0;:4;-1:-1:-1;;;;;30836:21:0;;30833:41;;;30859:7;:15;;-1:-1:-1;;30859:15:0;;;30833:41;17136:7;17163:6;-1:-1:-1;;;;;30883:13:0;;;17163:6;;30883:13;30880:98;;30921:12;;30911:6;:22;;30903:75;;;;-1:-1:-1;;;30903:75:0;;10061:2:1;30903:75:0;;;10043:21:1;10100:2;10080:18;;;10073:30;10139:34;10119:18;;;10112:62;-1:-1:-1;;;10190:18:1;;;10183:38;10238:19;;30903:75:0;10033:230:1;30903:75:0;-1:-1:-1;;;;;30991:15:0;;;;;;:9;:15;;;;;;;;30986:269;;-1:-1:-1;;;;;31019:15:0;;;;;;:9;:15;;;;;;31038:12;31019:31;31015:59;;;-1:-1:-1;;;;;31052:15:0;;;;;;:9;:15;;;;;:22;;-1:-1:-1;;31052:22:0;31070:4;31052:22;;;31015:59;-1:-1:-1;;;;;31085:15:0;;;;;;:9;:15;;;;;;31116;;31085:28;;31103:10;31085:28;:::i;:::-;:46;:66;;;;-1:-1:-1;;;;;;31136:15:0;;;;;;:9;:15;;;;;;;;31135:16;31085:66;31081:90;;;31153:18;;-1:-1:-1;;;31153:18:0;;13472:2:1;31153:18:0;;;13454:21:1;13511:1;13491:18;;;13484:29;-1:-1:-1;;;13529:18:1;;;13522:38;13577:18;;31153::0;13444:157:1;31081:90:0;-1:-1:-1;;;;;31178:15:0;;;;;;:9;:15;;;;;;;;31196:12;31178:30;;31215:9;:15;;;;;31233;31215:33;;30986:269;31266:6;:10;;-1:-1:-1;;;;31266:10:0;;;31294:13;-1:-1:-1;;;;;31286:21:0;;;;;;;31283:36;;;31309:6;:10;;-1:-1:-1;;;;31309:10:0;-1:-1:-1;;;31309:10:0;;;31283:36;31333:13;-1:-1:-1;;;;;31327:19:0;:2;-1:-1:-1;;;;;31327:19:0;;31324:34;;;31348:6;:10;;-1:-1:-1;;;;31348:10:0;-1:-1:-1;;;31348:10:0;;;31324:34;31674:4;31625:28;23416:17;;;:8;:17;;;;;;31625:55;;31708:61;31717:20;31739:29;;31708:8;:61::i;:::-;31825:29;;31685:84;;-1:-1:-1;31801:53:0;;;;;;;31868:44;;-1:-1:-1;31896:16:0;;-1:-1:-1;;;31896:16:0;;;;31895:17;31868:44;:73;;;;;31928:13;-1:-1:-1;;;;;31920:21:0;:4;-1:-1:-1;;;;;31920:21:0;;;31868:73;:102;;;;-1:-1:-1;31949:21:0;;-1:-1:-1;;;31949:21:0;;;;31868:102;:118;;;;-1:-1:-1;31978:8:0;;-1:-1:-1;;;31978:8:0;;;;31868:118;31859:173;;;31998:28;32005:20;31998:6;:28::i;:::-;-1:-1:-1;;;;;32204:24:0;;32095:12;32204:24;;;:18;:24;;;;;;32110:4;;32204:24;;;:50;;-1:-1:-1;;;;;;32232:22:0;;;;;;:18;:22;;;;;;;;32204:50;32201:81;;;-1:-1:-1;32271:5:0;32201:81;-1:-1:-1;;;;;32355:15:0;;;;;;:9;:15;;;;;;;;32350:115;;32376:41;32391:4;32397:2;32401:6;32409:7;32376:14;:41::i;:::-;32350:115;;;32431:34;32446:4;32452:2;32456:1;32459:5;32431:14;:34::i;:::-;30397:2073;;;30315:2155;;;:::o;413:106::-;471:7;502:1;498;:5;:13;;510:1;498:13;;;506:1;498:13;491:20;413:106;-1:-1:-1;;;413:106:0:o;32475:382::-;21241:16;:23;;-1:-1:-1;;;;21241:23:0;-1:-1:-1;;;21241:23:0;;;32601:10:::1;::::0;32572:20;;-1:-1:-1;;;32601:10:0;::::1;21241:23:::0;32601:10:::1;32597:219;;;32661:1;32638:18;:14:::0;32655:1:::1;32638:18;:::i;:::-;32636:26;;;;:::i;:::-;32619:43:::0;-1:-1:-1;32668:21:0::1;32692:37;32619:43:::0;32692:20;:37:::1;:::i;:::-;32765:22;::::0;32668:61;;-1:-1:-1;32735:75:0::1;::::0;32758:4:::1;::::0;-1:-1:-1;;;;;32765:22:0::1;32668:61:::0;32765:22:::1;32735:14;:75::i;:::-;32613:203;32597:219;32820:32;32837:14;32820:16;:32::i;:::-;-1:-1:-1::0;;21275:16:0;:24;;-1:-1:-1;;;;21275:24:0;;;32475:382::o;33412:1062::-;33534:7;33530:31;;33547:14;:12;:14::i;:::-;33570:22;33594:15;33611:14;33627:15;33647:20;33660:6;33647:12;:20::i;:::-;33568:99;;;;;;;;33717:7;33708:6;33698:7;33685:10;;:20;;;;:::i;:::-;:29;;;;:::i;:::-;:39;;;;:::i;:::-;33672:10;:52;33756:10;;33729:18;;-1:-1:-1;;;33756:10:0;;;;33752:292;;;33781:19;33828:3;33813:12;;33804:6;:21;;;;:::i;:::-;33803:28;;;;:::i;:::-;33781:50;;33845:19;33893:3;33878:12;;33868:7;:22;;;;:::i;:::-;33867:29;;;;:::i;:::-;33845:51;-1:-1:-1;33918:20:0;33927:11;33918:6;:20;:::i;:::-;33909:29;-1:-1:-1;33962:21:0;33972:11;33962:7;:21;:::i;:::-;33952:31;-1:-1:-1;34009:25:0;34023:11;34009;:25;:::i;:::-;33996:38;;33768:276;;33752:292;-1:-1:-1;;;;;34067:16:0;;;;;;:8;:16;;;;;;:25;;34086:6;;34067:25;:::i;:::-;-1:-1:-1;;;;;34048:16:0;;;;;;;:8;:16;;;;;;:44;;;;34119:19;;;;;;;:36;;34141:14;;34119:36;:::i;:::-;-1:-1:-1;;;;;34097:19:0;;;;;;:8;:19;;;;;;:58;;;;34203:4;34186:23;;;;34222:6;;34186:33;;34212:7;;34186:33;:::i;:::-;:42;;;;:::i;:::-;34177:4;34160:23;;;;:8;:23;;;;;;:68;;;;34266:11;;-1:-1:-1;;;;;34266:11:0;34257:21;;;;:31;;34281:7;;34257:31;:::i;:::-;34242:11;;-1:-1:-1;;;;;34242:11:0;;;34233:21;;;;:8;:21;;;;;;:55;;;;34337:22;;;;;34328:32;;;;:45;;34363:10;;34328:45;:::i;:::-;34302:22;;-1:-1:-1;;;;;34302:22:0;;;34293:32;;;;:8;:32;;;;;;;;;:80;;;;34385:43;14156:25:1;;;34385:43:0;;;;;;;;;;14129:18:1;34385:43:0;;;;;;;34441:7;34437:32;;34454:15;35702:16;;35686:13;:32;35738:15;;35723:12;:30;35769:16;;35758:8;:27;35648:142;34454:15;33525:949;;;;;33412:1062;;;;:::o;32862:373::-;33000:16;;;33014:1;33000:16;;;;;;;;32976:21;;33000:16;;;;;;;;;;-1:-1:-1;33000:16:0;32976:40;;33041:4;33023;33028:1;33023:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33023:23:0;;;:7;;;;;;;;;:23;33061:3;;33051:7;;33061:3;;;33051:4;;33061:3;;33051:7;;;;;;:::i;:::-;-1:-1:-1;;;;;33051:13:0;;;:7;;;;;;;;;:13;33177:15;;33069;:40;;;;;33115:11;;33132:1;;33167:4;;33177:15;33198:27;:15;33216:9;33198:27;:::i;:::-;33069:161;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33069:161:0;;;;;;;;;;;;:::i;35360:283::-;35400:13;;:18;:39;;;;-1:-1:-1;35422:12:0;;:17;35400:39;:57;;;;-1:-1:-1;35444:8:0;;:13;35400:57;35397:70;;;35360:283::o;35397:70::-;35494:13;;;35475:16;:32;35530:12;;;35512:15;:30;35566:8;;;35547:16;:27;-1:-1:-1;35583:17:0;;;;35605:16;;;;35626:12;35360:283::o;34479:361::-;34535:7;34544;34553;34562;34576:15;34594:25;34611:7;34594:16;:25::i;:::-;34576:43;;34624:14;34641:24;34657:7;34641:15;:24::i;:::-;34624:41;;34670:15;34688:25;34705:7;34688:16;:25::i;:::-;34670:43;-1:-1:-1;34718:23:0;34670:43;34764:6;34744:17;34754:7;34744;:17;:::i;:::-;:26;;;;:::i;:::-;:36;;;;:::i;:::-;34718:62;34810:7;;-1:-1:-1;34819:6:0;;-1:-1:-1;34819:6:0;-1:-1:-1;34479:361:0;;-1:-1:-1;;;34479:361:0:o;34845:177::-;34924:7;;34905;;34924;;34919:54;;-1:-1:-1;;34939:7:0;:14;;-1:-1:-1;;34939:14:0;34949:4;34939:14;;;:7;;34845:177::o;34919:54::-;35012:5;34995:13;;34985:7;:23;;;;:::i;:::-;34983:34;;;;:::i;:::-;34977:40;34845:177;-1:-1:-1;;34845:177:0:o;35027:157::-;35108:6;;35091:7;;-1:-1:-1;;;35108:6:0;;;;35118:1;35108:11;35105:59;;;35159:5;35143:12;;35133:7;:22;;;;:::i;35105:59::-;-1:-1:-1;35178:1:0;;35027:157;-1:-1:-1;35027:157:0:o;35190:165::-;35274:8;;35255:7;;35274:12;35269:58;;35322:5;35310:8;;35300:7;:18;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;320:1;317;310:12;272:2;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:2;;;528:1;525;518:12;480:2;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;470:173;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:2;;;810:1;807;800:12;762:2;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;752:224;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:2;;;1126:1;1123;1116:12;1078:2;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;1068:167:1:o;1240:1116::-;1335:6;1366:2;1409;1397:9;1388:7;1384:23;1380:32;1377:2;;;1425:1;1422;1415:12;1377:2;1458:9;1452:16;1487:18;1528:2;1520:6;1517:14;1514:2;;;1544:1;1541;1534:12;1514:2;1582:6;1571:9;1567:22;1557:32;;1627:7;1620:4;1616:2;1612:13;1608:27;1598:2;;1649:1;1646;1639:12;1598:2;1678;1672:9;1700:2;1696;1693:10;1690:2;;;1706:18;;:::i;:::-;1752:2;1749:1;1745:10;1784:2;1778:9;1847:2;1843:7;1838:2;1834;1830:11;1826:25;1818:6;1814:38;1902:6;1890:10;1887:22;1882:2;1870:10;1867:18;1864:46;1861:2;;;1913:18;;:::i;:::-;1949:2;1942:22;1999:18;;;2033:15;;;;-1:-1:-1;2068:11:1;;;2098;;;2094:20;;2091:33;-1:-1:-1;2088:2:1;;;2137:1;2134;2127:12;2088:2;2159:1;2150:10;;2169:156;2183:2;2180:1;2177:9;2169:156;;;2240:10;;2228:23;;2201:1;2194:9;;;;;2271:12;;;;2303;;2169:156;;;-1:-1:-1;2344:6:1;1346:1010;-1:-1:-1;;;;;;;;1346:1010:1:o;2361:241::-;2417:6;2470:2;2458:9;2449:7;2445:23;2441:32;2438:2;;;2486:1;2483;2476:12;2438:2;2525:9;2512:23;2544:28;2566:5;2544:28;:::i;2607:245::-;2674:6;2727:2;2715:9;2706:7;2702:23;2698:32;2695:2;;;2743:1;2740;2733:12;2695:2;2775:9;2769:16;2794:28;2816:5;2794:28;:::i;2857:180::-;2916:6;2969:2;2957:9;2948:7;2944:23;2940:32;2937:2;;;2985:1;2982;2975:12;2937:2;-1:-1:-1;3008:23:1;;2927:110;-1:-1:-1;2927:110:1:o;3042:184::-;3112:6;3165:2;3153:9;3144:7;3140:23;3136:32;3133:2;;;3181:1;3178;3171:12;3133:2;-1:-1:-1;3204:16:1;;3123:103;-1:-1:-1;3123:103:1:o;3231:248::-;3299:6;3307;3360:2;3348:9;3339:7;3335:23;3331:32;3328:2;;;3376:1;3373;3366:12;3328:2;-1:-1:-1;;3399:23:1;;;3469:2;3454:18;;;3441:32;;-1:-1:-1;3318:161:1:o;3484:245::-;3563:6;3571;3624:2;3612:9;3603:7;3599:23;3595:32;3592:2;;;3640:1;3637;3630:12;3592:2;-1:-1:-1;;3663:16:1;;3719:2;3704:18;;;3698:25;3663:16;;3698:25;;-1:-1:-1;3582:147:1:o;3734:306::-;3822:6;3830;3838;3891:2;3879:9;3870:7;3866:23;3862:32;3859:2;;;3907:1;3904;3897:12;3859:2;3936:9;3930:16;3920:26;;3986:2;3975:9;3971:18;3965:25;3955:35;;4030:2;4019:9;4015:18;4009:25;3999:35;;3849:191;;;;;:::o;4045:269::-;4102:6;4155:2;4143:9;4134:7;4130:23;4126:32;4123:2;;;4171:1;4168;4161:12;4123:2;4210:9;4197:23;4260:4;4253:5;4249:16;4242:5;4239:27;4229:2;;4280:1;4277;4270:12;7294:597;7406:4;7435:2;7464;7453:9;7446:21;7496:6;7490:13;7539:6;7534:2;7523:9;7519:18;7512:34;7564:1;7574:140;7588:6;7585:1;7582:13;7574:140;;;7683:14;;;7679:23;;7673:30;7649:17;;;7668:2;7645:26;7638:66;7603:10;;7574:140;;;7732:6;7729:1;7726:13;7723:2;;;7802:1;7797:2;7788:6;7777:9;7773:22;7769:31;7762:42;7723:2;-1:-1:-1;7875:2:1;7854:15;-1:-1:-1;;7850:29:1;7835:45;;;;7882:2;7831:54;;7415:476;-1:-1:-1;;;7415:476:1:o;10627:356::-;10829:2;10811:21;;;10848:18;;;10841:30;10907:34;10902:2;10887:18;;10880:62;10974:2;10959:18;;10801:182::o;14192:980::-;14454:4;14502:3;14491:9;14487:19;14533:6;14522:9;14515:25;14559:2;14597:6;14592:2;14581:9;14577:18;14570:34;14640:3;14635:2;14624:9;14620:18;14613:31;14664:6;14699;14693:13;14730:6;14722;14715:22;14768:3;14757:9;14753:19;14746:26;;14807:2;14799:6;14795:15;14781:29;;14828:1;14838:195;14852:6;14849:1;14846:13;14838:195;;;14917:13;;-1:-1:-1;;;;;14913:39:1;14901:52;;15008:15;;;;14973:12;;;;14949:1;14867:9;14838:195;;;-1:-1:-1;;;;;;;15089:32:1;;;;15084:2;15069:18;;15062:60;-1:-1:-1;;;15153:3:1;15138:19;15131:35;15050:3;14463:709;-1:-1:-1;;;14463:709:1:o;15366:128::-;15406:3;15437:1;15433:6;15430:1;15427:13;15424:2;;;15443:18;;:::i;:::-;-1:-1:-1;15479:9:1;;15414:80::o;15499:217::-;15539:1;15565;15555:2;;15609:10;15604:3;15600:20;15597:1;15590:31;15644:4;15641:1;15634:15;15672:4;15669:1;15662:15;15555:2;-1:-1:-1;15701:9:1;;15545:171::o;15721:168::-;15761:7;15827:1;15823;15819:6;15815:14;15812:1;15809:21;15804:1;15797:9;15790:17;15786:45;15783:2;;;15834:18;;:::i;:::-;-1:-1:-1;15874:9:1;;15773:116::o;15894:125::-;15934:4;15962:1;15959;15956:8;15953:2;;;15967:18;;:::i;:::-;-1:-1:-1;16004:9:1;;15943:76::o;16024:127::-;16085:10;16080:3;16076:20;16073:1;16066:31;16116:4;16113:1;16106:15;16140:4;16137:1;16130:15;16156:127;16217:10;16212:3;16208:20;16205:1;16198:31;16248:4;16245:1;16238:15;16272:4;16269:1;16262:15;16288:127;16349:10;16344:3;16340:20;16337:1;16330:31;16380:4;16377:1;16370:15;16404:4;16401:1;16394:15;16420:118;16506:5;16499:13;16492:21;16485:5;16482:32;16472:2;;16528:1;16525;16518:12
Swarm Source
ipfs://b029cdd7baafb6e8ac74698c2e11e9326d030586401ae58394d228f3caeaf161
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.