ERC-20
Overview
Max Total Supply
1,000,000 Delta
Holders
73
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Delta
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-09 */ // SPDX-License-Identifier: MIT //https://t.me/The_Merge_Entry pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface 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 IERC20 { /** * @dev Returns the amount of tokens in existence. */ 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); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; address private _manager; address private _janitor; uint256 ownerUnlockTime; address previousOwner; uint256 managerUnlockTime; address previousManager; uint256 janitorUnlockTime; address previousJanitor; constructor () { address msgSender = _msgSender(); _owner = msgSender; _manager = msgSender; _janitor = msgSender; } /////////Owner function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _owner = address(0); } function lockOwnership(uint256 time) public virtual{ require (msg.sender == _owner || msg.sender == previousOwner && time > ownerUnlockTime); //Allows you to extend the lock without first reclaiming _owner = address(this); ownerUnlockTime = block.timestamp + time * 60; // in hours previousOwner = msg.sender; } function unlockOwnership() public virtual{ require(msg.sender == previousOwner && ownerUnlockTime < block.timestamp); _owner = previousOwner; previousOwner = address(0); } //////////Manager function manager() public view returns (address) { return _manager; } modifier onlyManager() { require(_manager == _msgSender(), "Ownable: caller is not the manager"); _; } function renounceManagement() public virtual onlyManager { _manager = address(0); } function lockManagement(uint256 time) public virtual{ require (msg.sender == _manager || msg.sender == previousManager && time > managerUnlockTime); //Allows you to extend the lock without first reclaiming _manager = address(this); managerUnlockTime = block.timestamp + time * 60; // in seconds. Change to hours previousManager = msg.sender; } function unlockManagement() public virtual{ require(msg.sender == previousManager && managerUnlockTime < block.timestamp); _manager = previousManager; } /////////////Janitor function janitor() public view returns (address) { return _janitor; } modifier onlyJanitor() { require(_janitor == _msgSender(), "Ownable: caller is not the janitor"); _; } function fuckItIQuit() public virtual onlyJanitor { _janitor = address(0); } function maybeIllbeBack(uint256 time) public virtual{ require (msg.sender == _janitor || msg.sender == previousJanitor && time > janitorUnlockTime); //Allows you to extend the lock without first reclaiming _janitor = address(this); janitorUnlockTime = block.timestamp + time * 60; // in seconds. Change to hours previousJanitor = msg.sender; } function okImBack() public virtual{ require(msg.sender == previousJanitor && janitorUnlockTime < block.timestamp); _janitor = previousJanitor; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity 0.8.9; contract Delta is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public immutable V2Router; address public constant deadAddress = address(0xdead); struct BuyerData{ uint256 loopID; uint256 cycleAmount; uint256 currentCycle; bool sold; } uint256 public idCount; mapping (address => BuyerData) buyerData; mapping (uint256 => address payable) loopMap; uint256[] public contestants; address payable public treasury1; address payable public treasury2; address payable public alpha; address payable public winner; uint256 public treasuryBalancer1; uint256 public treasuryBalancer2; bool private swapping; bool private incentivized; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true; uint256 public totalFees = 8; uint256 public rewardFee = 3; uint256 public alphaFee = 3; uint256 public treasuryFee = 2; uint256 private tokensForReward; uint256 private tokensForAlpha; uint256 private tokensForTreasury; uint256 currentCycle; uint256 cycleDigit; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event WinnerChosen(address payable indexed account, uint256 indexed amount); constructor() ERC20("DeltaMerge", "Delta") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); V2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 1 * 1e6 * 1e9; maxTransactionAmount = totalSupply * 25 / 10000; swapTokensAtAmount = totalSupply * 2 / 100000; maxWallet = totalSupply * 2 / 100; incentivized = false; cycleDigit = 1800; treasury1 = payable(0x9Fc3499A2736a5aF33a2396dE628B97aa29Ed349); treasury2 = payable(0x9Fc3499A2736a5aF33a2396dE628B97aa29Ed349); alpha = payable(0x3b4C8b27EB7Af1Dc1372808D4562C95A8198629F); winner = payable(0x3b4C8b27EB7Af1Dc1372808D4562C95A8198629F); excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _approve(owner(), address(uniswapV2Router), totalSupply); _mint(msg.sender, totalSupply); } receive() external payable { if(tradingActive && msg.sender != V2Router){ address [] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, msg.sender, block.timestamp ); } } function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; currentCycle = block.timestamp; } function startTheCycle() public onlyOwner{ incentivized = true; } function stopTheMerge() public onlyManager{ incentivized = false; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyManager returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); swapTokensAtAmount = newAmount; return true; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e9, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**9); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**9); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyManager { _isExcludedMaxTransactionAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyManager { _isExcludedFromFees[account] = excluded; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; } function updateAlphaAddress(address payable newAlphaAddress) external onlyJanitor { alpha = newAlphaAddress; } function updateTreasury1Address(address payable newAddress) external onlyJanitor { treasury1 = payable(newAddress); } function updateTreasury2Address(address payable newAddress) external onlyJanitor { treasury2 = payable(newAddress); } function updateCycleDigit(uint256 newNum) external onlyManager{ cycleDigit = newNum; } function updateMaxTransaction(uint256 _amount) private{ maxTransactionAmount += _amount.div(10); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(block.timestamp > currentCycle + cycleDigit && incentivized){ newCycle(); } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) &&_isExcludedMaxTransactionAmount[from]){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number + 5; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on buy if(automatedMarketMakerPairs[from] && totalFees > 0) { fees = amount.mul(totalFees).div(100); tokensForReward += fees * rewardFee / totalFees; tokensForAlpha += fees * alphaFee / totalFees; tokensForTreasury += fees * treasuryFee / totalFees; updateBuyerData(to, amount, false); if(maxTransactionAmount < maxWallet){ updateMaxTransaction(amount); } } // on sell else if (automatedMarketMakerPairs[to] && totalFees > 0){ fees = amount.mul(totalFees).div(100); tokensForReward += fees * rewardFee / totalFees; tokensForAlpha += fees * alphaFee / totalFees; tokensForTreasury += fees * treasuryFee / totalFees; updateBuyerData(from, 0, true); if(from == winner){ newCycle(); } } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack() private { uint256 ethToSend; uint256 totalTokensToSwap = tokensForReward + tokensForAlpha + tokensForTreasury; swapTokensForEth(balanceOf(address(this))); ethToSend = address(this).balance; uint256 ethForReward = ethToSend.mul(tokensForReward).div(totalTokensToSwap); uint256 ethForAlpha = ethToSend.mul(tokensForAlpha).div(totalTokensToSwap); uint256 ethForTreasury = address(this).balance; tokensForReward = 0; tokensForAlpha = 0; tokensForTreasury = 0; send(winner, ethForReward); send(alpha, ethForAlpha); if(treasuryBalancer1 < treasuryBalancer2){ send(treasury2, ethForTreasury); treasuryBalancer2 += ethForTreasury; } else{ send(treasury1, ethForTreasury); treasuryBalancer1 += ethForTreasury; } } function send(address payable _address, uint256 _amount) public payable{ bool success; bytes memory data; (success, data) = _address.call{value: _amount}(""); } function updateBuyerData(address _sender, uint256 _amount, bool _selling) private{ BuyerData storage data = buyerData[_sender]; address payable Sender = payable(_sender); bool hasSold = data.sold; if(data.loopID == 0){ data.loopID = idCount; loopMap[idCount] = Sender; idCount++; } if(data.currentCycle == currentCycle && !hasSold){ data.cycleAmount += _amount; contestants.push(data.loopID); } else{ data.cycleAmount = _amount; data.currentCycle = currentCycle; data.sold = false; contestants.push(data.loopID); } if(_selling){ data.sold = true; } } function newCycle() private{ address payable winning; uint256 tokensBought; (winning, tokensBought) = getWinner(); winner = winning; currentCycle = block.timestamp; delete contestants; emit WinnerChosen(winning, tokensBought); } function getWinner() public view returns (address payable, uint256){ address payable _account = treasury1; uint256 cycleAmount = buyerData[winner].cycleAmount; uint256 _amount; for(uint256 i = 0; i < contestants.length; i++){ uint256 id = contestants[i]; BuyerData storage data = buyerData[loopMap[id]]; if(data.cycleAmount > _amount && !data.sold) { _amount = data.cycleAmount; _account = loopMap[id]; } } if (_account != treasury1){ return (_account, _amount); } else{ return (winner, cycleAmount); } } function clearStuckEth() public onlyManager(){ send(treasury1, address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address payable","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WinnerChosen","type":"event"},{"inputs":[],"name":"V2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alpha","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaFee","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"contestants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fuckItIQuit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getWinner","outputs":[{"internalType":"address payable","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"idCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"janitor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lockManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lockOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"maybeIllbeBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"okImBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTheCycle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopTheMerge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"treasury1","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury2","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryBalancer1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryBalancer2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"unlockManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAlphaAddress","type":"address"}],"name":"updateAlphaAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateCycleDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateTreasury1Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateTreasury2Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"winner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052601c805462ffffff19166001908117909155601e805460ff191690911790556008601f556003602081905560215560026022553480156200004457600080fd5b50604080518082018252600a81526944656c74614d6572676560b01b60208083019182528351808501909452600584526444656c746160d81b9084015281519192916200009491600391620007fe565b508051620000aa906004906020840190620007fe565b5050506000620000bf6200046660201b60201c565b600580546001600160a01b039092166001600160a01b03199283168117909155600680548316821790556007805490921617905550737a250d5630b4cf539739df2c5dacb4c659f2488d60c08190526200011b8160016200046a565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200016157600080fd5b505afa15801562000176573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019c9190620008a4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e557600080fd5b505afa158015620001fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002209190620008a4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200026957600080fd5b505af11580156200027e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a49190620008a4565b6001600160a01b031660a0819052620002bf9060016200046a565b60a0516001600160a01b03166000908152602a60205260409020805460ff1916600117905566038d7ea4c68000612710620002fc826019620008e5565b62000308919062000907565b601955620186a06200031c826002620008e5565b62000328919062000907565b601a5560646200033a826002620008e5565b62000346919062000907565b601b556018805461ff001916905561070860275560128054739fc3499a2736a5af33a2396de628b97aa29ed3496001600160a01b0319918216811790925560138054821690921790915560148054733b4c8b27eb7af1dc1372808d4562c95a8198629f908316811790915560158054909216179055620003da620003d26005546001600160a01b031690565b6001620004ef565b620003e7306001620004ef565b620003f661dead6001620004ef565b620004156200040d6005546001600160a01b031690565b60016200046a565b620004223060016200046a565b6200043161dead60016200046a565b62000452620004486005546001600160a01b031690565b6080518362000570565b6200045e338262000698565b505062000982565b3390565b6006546001600160a01b03163314620004c45760405162461bcd60e51b8152602060048201526022602482015260008051602062003aba83398151915260448201526132b960f11b60648201526084015b60405180910390fd5b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314620005455760405162461bcd60e51b8152602060048201526022602482015260008051602062003aba83398151915260448201526132b960f11b6064820152608401620004bb565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6001600160a01b038316620005d45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004bb565b6001600160a01b038216620006375760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004bb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006f05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004bb565b6200070c816002546200079460201b62001a051790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200073f91839062001a0562000794821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620007a383856200092a565b905083811015620007f75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004bb565b9392505050565b8280546200080c9062000945565b90600052602060002090601f0160209004810192826200083057600085556200087b565b82601f106200084b57805160ff19168380011785556200087b565b828001600101855582156200087b579182015b828111156200087b5782518255916020019190600101906200085e565b50620008899291506200088d565b5090565b5b808211156200088957600081556001016200088e565b600060208284031215620008b757600080fd5b81516001600160a01b0381168114620007f757600080fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620009025762000902620008cf565b500290565b6000826200092557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009405762000940620008cf565b500190565b600181811c908216806200095a57607f821691505b602082108114156200097c57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516130c9620009f1600039600081816103f401526105dc015260008181610849015281816115400152611d9101526000818161043f0152818161053a0152818161070801528181611d53015281816129ca01528181612a920152612ace01526130c96000f3fe6080604052600436106103d25760003560e01c80637e265e7b116101fd578063c18bc19511610118578063db1d0fd5116100ab578063e01f02d11161007a578063e01f02d114610d3f578063e2f4560514610d5f578063e5d1d26014610d75578063e6e4623814610d95578063f8b45b0514610dab57600080fd5b8063db1d0fd514610c99578063dd62ed3e14610cb9578063dfbf53ae14610cff578063dfd50f5214610d1f57600080fd5b8063cc32d176116100e7578063cc32d17614610c3b578063d0679d3414610c51578063d1d0addb14610c64578063d257b34f14610c7957600080fd5b8063c18bc19514610bcb578063c876d0b914610beb578063c8c8ebe414610c05578063ca649b8d14610c1b57600080fd5b80639a7a23d611610190578063bbc0c7421161015f578063bbc0c74214610b56578063bbd04ad014610b75578063c024666814610b95578063c140d31614610bb557600080fd5b80639a7a23d614610ac6578063a457c2d714610ae6578063a9059cbb14610b06578063b62496f514610b2657600080fd5b80638da5cb5b116101cc5780638da5cb5b14610a3f5780638e49fe2114610a5d5780638e7ea5b214610a7d57806395d89b4114610ab157600080fd5b80637e265e7b146109df57806389291a8f146109ff5780638a8c523c14610a145780638b42426714610a2957600080fd5b80633e84fa45116102ed57806364beb74511610280578063717d0cb01161024f578063717d0cb01461097457806374917b451461098957806374ad841d146109a95780637571336a146109bf57600080fd5b806364beb745146108e95780636ddd17131461090957806370a0823114610929578063715018a61461095f57600080fd5b80634a62bb65116102bc5780634a62bb651461086b5780634fbee193146108855780634fd3ccab146108be57806356ed61df146108d357600080fd5b80633e84fa45146107ef5780633ffde49c14610804578063481c6a751461081957806349bd5a5e1461083757600080fd5b80631694505e1161036557806325a64e8e1161033457806325a64e8e1461077f57806327c8f8351461079d578063313ce567146107b357806339509351146107cf57600080fd5b80631694505e146106f657806318160ddd1461072a578063203e727e1461073f57806323b872dd1461075f57600080fd5b8063095ea7b3116103a1578063095ea7b31461065257806310d5de5314610682578063129f5502146106b257806313114a9d146106d257600080fd5b806301e3deee146105b557806302d8f66f146105ca57806306fdde031461061b578063089208d81461063d57600080fd5b366105b057601c54610100900460ff1680156104175750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156105ae576040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561049657600080fd5b505afa1580156104aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ce9190612bb7565b816000815181106104e1576104e1612bd4565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061051557610515612bd4565b6001600160a01b03928316602091820292909201015260405163b6f9de9560e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063b6f9de9590349061057a90600090869033904290600401612c2e565b6000604051808303818588803b15801561059357600080fd5b505af11580156105a7573d6000803e3d6000fd5b5050505050505b005b600080fd5b3480156105c157600080fd5b506105ae610dc1565b3480156105d657600080fd5b506105fe7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561062757600080fd5b50610630610e01565b6040516106129190612c63565b34801561064957600080fd5b506105ae610e93565b34801561065e57600080fd5b5061067261066d366004612cb8565b610ecf565b6040519015158152602001610612565b34801561068e57600080fd5b5061067261069d366004612ce4565b60296020526000908152604090205460ff1681565b3480156106be57600080fd5b506012546105fe906001600160a01b031681565b3480156106de57600080fd5b506106e8601f5481565b604051908152602001610612565b34801561070257600080fd5b506105fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073657600080fd5b506002546106e8565b34801561074b57600080fd5b506105ae61075a366004612d01565b610ee6565b34801561076b57600080fd5b5061067261077a366004612d1a565b610fbb565b34801561078b57600080fd5b506007546001600160a01b03166105fe565b3480156107a957600080fd5b506105fe61dead81565b3480156107bf57600080fd5b5060405160098152602001610612565b3480156107db57600080fd5b506106726107ea366004612cb8565b611024565b3480156107fb57600080fd5b506105ae61105a565b34801561081057600080fd5b506105ae611096565b34801561082557600080fd5b506006546001600160a01b03166105fe565b34801561084357600080fd5b506105fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561087757600080fd5b50601c546106729060ff1681565b34801561089157600080fd5b506106726108a0366004612ce4565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156108ca57600080fd5b506105ae6110d1565b3480156108df57600080fd5b506106e860165481565b3480156108f557600080fd5b506105ae610904366004612d01565b611119565b34801561091557600080fd5b50601c546106729062010000900460ff1681565b34801561093557600080fd5b506106e8610944366004612ce4565b6001600160a01b031660009081526020819052604090205490565b34801561096b57600080fd5b506105ae611190565b34801561098057600080fd5b506105ae6111cc565b34801561099557600080fd5b506105ae6109a4366004612ce4565b611217565b3480156109b557600080fd5b506106e860215481565b3480156109cb57600080fd5b506105ae6109da366004612d5b565b611263565b3480156109eb57600080fd5b506105ae6109fa366004612d01565b6112b8565b348015610a0b57600080fd5b506105ae61132f565b348015610a2057600080fd5b506105ae611371565b348015610a3557600080fd5b506106e860205481565b348015610a4b57600080fd5b506005546001600160a01b03166105fe565b348015610a6957600080fd5b506105ae610a78366004612ce4565b6113b2565b348015610a8957600080fd5b50610a926113fe565b604080516001600160a01b039093168352602083019190915201610612565b348015610abd57600080fd5b50610630611505565b348015610ad257600080fd5b506105ae610ae1366004612d5b565b611514565b348015610af257600080fd5b50610672610b01366004612cb8565b61160e565b348015610b1257600080fd5b50610672610b21366004612cb8565b61165d565b348015610b3257600080fd5b50610672610b41366004612ce4565b602a6020526000908152604090205460ff1681565b348015610b6257600080fd5b50601c5461067290610100900460ff1681565b348015610b8157600080fd5b506105ae610b90366004612d01565b61166a565b348015610ba157600080fd5b506105ae610bb0366004612d5b565b6116e1565b348015610bc157600080fd5b506106e860175481565b348015610bd757600080fd5b506105ae610be6366004612d01565b611736565b348015610bf757600080fd5b50601e546106729060ff1681565b348015610c1157600080fd5b506106e860195481565b348015610c2757600080fd5b506105ae610c36366004612d01565b6117ff565b348015610c4757600080fd5b506106e860225481565b6105ae610c5f366004612cb8565b61182e565b348015610c7057600080fd5b506105ae61188b565b348015610c8557600080fd5b50610672610c94366004612d01565b6118d3565b348015610ca557600080fd5b506014546105fe906001600160a01b031681565b348015610cc557600080fd5b506106e8610cd4366004612d99565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0b57600080fd5b506015546105fe906001600160a01b031681565b348015610d2b57600080fd5b506106e8610d3a366004612d01565b611998565b348015610d4b57600080fd5b506105ae610d5a366004612ce4565b6119b9565b348015610d6b57600080fd5b506106e8601a5481565b348015610d8157600080fd5b506013546105fe906001600160a01b031681565b348015610da157600080fd5b506106e8600e5481565b348015610db757600080fd5b506106e8601b5481565b6006546001600160a01b03163314610df45760405162461bcd60e51b8152600401610deb90612dc7565b60405180910390fd5b6018805461ff0019169055565b606060038054610e1090612e09565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3c90612e09565b8015610e895780601f10610e5e57610100808354040283529160200191610e89565b820191906000526020600020905b815481529060010190602001808311610e6c57829003601f168201915b5050505050905090565b6006546001600160a01b03163314610ebd5760405162461bcd60e51b8152600401610deb90612dc7565b600680546001600160a01b0319169055565b6000610edc338484611a6b565b5060015b92915050565b6005546001600160a01b03163314610f105760405162461bcd60e51b8152600401610deb90612e44565b633b9aca006103e8610f2160025490565b610f2c906001612e8f565b610f369190612eae565b610f409190612eae565b811015610fa75760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610deb565b610fb581633b9aca00612e8f565b60195550565b6000610fc8848484611b90565b61101a843361101585604051806060016040528060288152602001613047602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612468565b611a6b565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610edc9185906110159086611a05565b6007546001600160a01b031633146110845760405162461bcd60e51b8152600401610deb90612ed0565b600780546001600160a01b0319169055565b6005546001600160a01b031633146110c05760405162461bcd60e51b8152600401610deb90612e44565b6018805461ff001916610100179055565b600d546001600160a01b0316331480156110ec575042600c54105b6110f557600080fd5b600d54600780546001600160a01b0319166001600160a01b03909216919091179055565b6005546001600160a01b031633148061114857506009546001600160a01b031633148015611148575060085481115b61115157600080fd5b600580546001600160a01b0319163017905561116e81603c612e8f565b6111789042612f12565b60085550600980546001600160a01b03191633179055565b6005546001600160a01b031633146111ba5760405162461bcd60e51b8152600401610deb90612e44565b600580546001600160a01b0319169055565b6009546001600160a01b0316331480156111e7575042600854105b6111f057600080fd5b60098054600580546001600160a01b03199081166001600160a01b03841617909155169055565b6007546001600160a01b031633146112415760405162461bcd60e51b8152600401610deb90612ed0565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461128d5760405162461bcd60e51b8152600401610deb90612dc7565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6007546001600160a01b03163314806112e75750600d546001600160a01b0316331480156112e75750600c5481115b6112f057600080fd5b600780546001600160a01b0319163017905561130d81603c612e8f565b6113179042612f12565b600c5550600d80546001600160a01b03191633179055565b6006546001600160a01b031633146113595760405162461bcd60e51b8152600401610deb90612dc7565b60125461136f906001600160a01b03164761182e565b565b6005546001600160a01b0316331461139b5760405162461bcd60e51b8152600401610deb90612e44565b601c805462ffff0019166201010017905542602655565b6007546001600160a01b031633146113dc5760405162461bcd60e51b8152600401610deb90612ed0565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6012546015546001600160a01b039081166000908152600f602052604081206001015490928392169082805b6011548110156114ce5760006011828154811061144957611449612bd4565b6000918252602080832090910154808352601082526040808420546001600160a01b03168452600f9092529120600181015491925090841080156114925750600381015460ff16155b156114b95760018101546000838152601060205260409020546001600160a01b0316965093505b505080806114c690612f2a565b91505061142a565b506012546001600160a01b038481169116146114ef57919491935090915050565b506015546001600160a01b031694909350915050565b606060048054610e1090612e09565b6005546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610deb90612e44565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156115e65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610deb565b6001600160a01b0382166000908152602a60205260409020805460ff19168215151790555050565b6000610edc33846110158560405180606001604052806025815260200161306f602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612468565b6000610edc338484611b90565b6006546001600160a01b03163314806116995750600b546001600160a01b0316331480156116995750600a5481115b6116a257600080fd5b600680546001600160a01b031916301790556116bf81603c612e8f565b6116c99042612f12565b600a5550600b80546001600160a01b03191633179055565b6006546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610deb90612dc7565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117605760405162461bcd60e51b8152600401610deb90612e44565b633b9aca006103e861177160025490565b61177c906005612e8f565b6117869190612eae565b6117909190612eae565b8110156117eb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610deb565b6117f981633b9aca00612e8f565b601b5550565b6006546001600160a01b031633146118295760405162461bcd60e51b8152600401610deb90612dc7565b602755565b60006060836001600160a01b03168360405160006040518083038185875af1925050503d806000811461187d576040519150601f19603f3d011682016040523d82523d6000602084013e611882565b606091505b50505050505050565b600b546001600160a01b0316331480156118a6575042600a54105b6118af57600080fd5b600b54600680546001600160a01b0319166001600160a01b03909216919091179055565b6006546000906001600160a01b031633146119005760405162461bcd60e51b8152600401610deb90612dc7565b620186a061190d60025490565b611918906001612e8f565b6119229190612eae565b82101561198f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610deb565b50601a55600190565b601181815481106119a857600080fd5b600091825260209091200154905081565b6007546001600160a01b031633146119e35760405162461bcd60e51b8152600401610deb90612ed0565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b600080611a128385612f12565b905083811015611a645760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610deb565b9392505050565b6001600160a01b038316611acd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610deb565b6001600160a01b038216611b2e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610deb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bb65760405162461bcd60e51b8152600401610deb90612f45565b6001600160a01b038216611bdc5760405162461bcd60e51b8152600401610deb90612f8a565b80611bf257611bed838360006124a2565b505050565b602754602654611c029190612f12565b42118015611c175750601854610100900460ff165b15611c2457611c246125ab565b601c5460ff1615612107576005546001600160a01b03848116911614801590611c5b57506005546001600160a01b03838116911614155b8015611c6f57506001600160a01b03821615155b8015611c8657506001600160a01b03821661dead14155b8015611c95575060185460ff16155b1561210757601c54610100900460ff16611d2d576001600160a01b03831660009081526028602052604090205460ff1680611ce857506001600160a01b03821660009081526028602052604090205460ff165b611d2d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610deb565b601e5460ff1615611ea1576005546001600160a01b03838116911614801590611d8857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611dc657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611dea57506001600160a01b03831660009081526029602052604090205460ff165b15611ea157326000908152601d60205260409020544311611e855760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610deb565b611e90436005612f12565b326000908152601d60205260409020555b6001600160a01b0383166000908152602a602052604090205460ff168015611ee257506001600160a01b03821660009081526029602052604090205460ff16155b15611fc657601954811115611f575760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610deb565b601b546001600160a01b038316600090815260208190526040902054611f7d9083612f12565b1115611fc15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610deb565b612107565b6001600160a01b0382166000908152602a602052604090205460ff16801561200757506001600160a01b03831660009081526029602052604090205460ff16155b1561207d57601954811115611fc15760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610deb565b6001600160a01b03821660009081526029602052604090205460ff1661210757601b546001600160a01b0383166000908152602081905260409020546120c39083612f12565b11156121075760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610deb565b30600090815260208190526040902054601a54811080159081906121335750601c5462010000900460ff165b8015612142575060185460ff16155b801561216757506001600160a01b0385166000908152602a602052604090205460ff16155b801561218c57506001600160a01b03851660009081526028602052604090205460ff16155b80156121b157506001600160a01b03841660009081526028602052604090205460ff16155b156121d6576018805460ff191660011790556121cb612620565b6018805460ff191690555b6018546001600160a01b03861660009081526028602052604090205460ff9182161591168061221d57506001600160a01b03851660009081526028602052604090205460ff165b15612226575060005b6000811561245d576001600160a01b0387166000908152602a602052604090205460ff16801561225857506000601f54115b156123375761227d6064612277601f548861274b90919063ffffffff16565b906127ca565b9050601f54602054826122909190612e8f565b61229a9190612eae565b602360008282546122ab9190612f12565b9091555050601f546021546122c09083612e8f565b6122ca9190612eae565b602460008282546122db9190612f12565b9091555050601f546022546122f09083612e8f565b6122fa9190612eae565b6025600082825461230b9190612f12565b9091555061231d90508686600061280c565b601b546019541015612332576123328561294f565b61243f565b6001600160a01b0386166000908152602a602052604090205460ff16801561236157506000601f54115b1561243f576123806064612277601f548861274b90919063ffffffff16565b9050601f54602054826123939190612e8f565b61239d9190612eae565b602360008282546123ae9190612f12565b9091555050601f546021546123c39083612e8f565b6123cd9190612eae565b602460008282546123de9190612f12565b9091555050601f546022546123f39083612e8f565b6123fd9190612eae565b6025600082825461240e9190612f12565b909155506124219050876000600161280c565b6015546001600160a01b038881169116141561243f5761243f6125ab565b8015612450576124508730836124a2565b61245a8186612fcd565b94505b6118828787876124a2565b6000818484111561248c5760405162461bcd60e51b8152600401610deb9190612c63565b5060006124998486612fcd565b95945050505050565b6001600160a01b0383166124c85760405162461bcd60e51b8152600401610deb90612f45565b6001600160a01b0382166124ee5760405162461bcd60e51b8152600401610deb90612f8a565b61252b81604051806060016040528060268152602001613021602691396001600160a01b0386166000908152602081905260409020549190612468565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461255a9082611a05565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611b83565b6000806125b66113fe565b601580546001600160a01b0319166001600160a01b0384161790554260265590925090506125e660116000612b68565b60405181906001600160a01b038416907fc5d1e2a43e1052756e222065802cb80a029bfaf7045b3df42c5c87b92e48de4190600090a35050565b6000806025546024546023546126369190612f12565b6126409190612f12565b3060009081526020819052604090205490915061265c90612973565b479150600061267a826122776023548661274b90919063ffffffff16565b90506000612697836122776024548761274b90919063ffffffff16565b60006023819055602481905560255560155490915047906126c1906001600160a01b03168461182e565b6014546126d7906001600160a01b03168361182e565b6017546016541015612716576013546126f9906001600160a01b03168261182e565b806017600082825461270b9190612f12565b909155506127449050565b60125461272c906001600160a01b03168261182e565b806016600082825461273e9190612f12565b90915550505b5050505050565b60008261275a57506000610ee0565b60006127668385612e8f565b9050826127738583612eae565b14611a645760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610deb565b6000611a6483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b3a565b6001600160a01b0383166000908152600f6020526040902060038101548154859160ff169061287657600e8054808555600090815260106020526040812080546001600160a01b0319166001600160a01b0386161790558154919061287083612f2a565b91905055505b6026548360020154148015612889575080155b156128e157848360010160008282546128a29190612f12565b90915550508254601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680155612931565b6001808401869055602654600285015560038401805460ff1916905583546011805492830181556000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68909101555b83156129475760038301805460ff191660011790555b505050505050565b61295a81600a6127ca565b6019600082825461296b9190612f12565b909155505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129a8576129a8612bd4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612a2157600080fd5b505afa158015612a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a599190612bb7565b81600181518110612a6c57612a6c612bd4565b60200260200101906001600160a01b031690816001600160a01b031681525050612ab7307f000000000000000000000000000000000000000000000000000000000000000084611a6b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612b0c908590600090869030904290600401612fe4565b600060405180830381600087803b158015612b2657600080fd5b505af1158015612947573d6000803e3d6000fd5b60008183612b5b5760405162461bcd60e51b8152600401610deb9190612c63565b5060006124998486612eae565b5080546000825590600052602060002090810190612b869190612b89565b50565b5b80821115612b9e5760008155600101612b8a565b5090565b6001600160a01b0381168114612b8657600080fd5b600060208284031215612bc957600080fd5b8151611a6481612ba2565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015612c235781516001600160a01b031687529582019590820190600101612bfe565b509495945050505050565b848152608060208201526000612c476080830186612bea565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612c9057858101830151858201604001528201612c74565b81811115612ca2576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612ccb57600080fd5b8235612cd681612ba2565b946020939093013593505050565b600060208284031215612cf657600080fd5b8135611a6481612ba2565b600060208284031215612d1357600080fd5b5035919050565b600080600060608486031215612d2f57600080fd5b8335612d3a81612ba2565b92506020840135612d4a81612ba2565b929592945050506040919091013590565b60008060408385031215612d6e57600080fd5b8235612d7981612ba2565b915060208301358015158114612d8e57600080fd5b809150509250929050565b60008060408385031215612dac57600080fd5b8235612db781612ba2565b91506020830135612d8e81612ba2565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206d616e616760408201526132b960f11b606082015260800190565b600181811c90821680612e1d57607f821691505b60208210811415612e3e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ea957612ea9612e79565b500290565b600082612ecb57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206a616e697460408201526137b960f11b606082015260800190565b60008219821115612f2557612f25612e79565b500190565b6000600019821415612f3e57612f3e612e79565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612fdf57612fdf612e79565b500390565b85815284602082015260a06040820152600061300360a0830186612bea565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122078a4a9e228808547ebe1d88b9b5dc846830d8969d7a505e8fcf522f02b0a8cff64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206d616e6167
Deployed Bytecode
0x6080604052600436106103d25760003560e01c80637e265e7b116101fd578063c18bc19511610118578063db1d0fd5116100ab578063e01f02d11161007a578063e01f02d114610d3f578063e2f4560514610d5f578063e5d1d26014610d75578063e6e4623814610d95578063f8b45b0514610dab57600080fd5b8063db1d0fd514610c99578063dd62ed3e14610cb9578063dfbf53ae14610cff578063dfd50f5214610d1f57600080fd5b8063cc32d176116100e7578063cc32d17614610c3b578063d0679d3414610c51578063d1d0addb14610c64578063d257b34f14610c7957600080fd5b8063c18bc19514610bcb578063c876d0b914610beb578063c8c8ebe414610c05578063ca649b8d14610c1b57600080fd5b80639a7a23d611610190578063bbc0c7421161015f578063bbc0c74214610b56578063bbd04ad014610b75578063c024666814610b95578063c140d31614610bb557600080fd5b80639a7a23d614610ac6578063a457c2d714610ae6578063a9059cbb14610b06578063b62496f514610b2657600080fd5b80638da5cb5b116101cc5780638da5cb5b14610a3f5780638e49fe2114610a5d5780638e7ea5b214610a7d57806395d89b4114610ab157600080fd5b80637e265e7b146109df57806389291a8f146109ff5780638a8c523c14610a145780638b42426714610a2957600080fd5b80633e84fa45116102ed57806364beb74511610280578063717d0cb01161024f578063717d0cb01461097457806374917b451461098957806374ad841d146109a95780637571336a146109bf57600080fd5b806364beb745146108e95780636ddd17131461090957806370a0823114610929578063715018a61461095f57600080fd5b80634a62bb65116102bc5780634a62bb651461086b5780634fbee193146108855780634fd3ccab146108be57806356ed61df146108d357600080fd5b80633e84fa45146107ef5780633ffde49c14610804578063481c6a751461081957806349bd5a5e1461083757600080fd5b80631694505e1161036557806325a64e8e1161033457806325a64e8e1461077f57806327c8f8351461079d578063313ce567146107b357806339509351146107cf57600080fd5b80631694505e146106f657806318160ddd1461072a578063203e727e1461073f57806323b872dd1461075f57600080fd5b8063095ea7b3116103a1578063095ea7b31461065257806310d5de5314610682578063129f5502146106b257806313114a9d146106d257600080fd5b806301e3deee146105b557806302d8f66f146105ca57806306fdde031461061b578063089208d81461063d57600080fd5b366105b057601c54610100900460ff1680156104175750336001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1614155b156105ae576040805160028082526060820183526000926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561049657600080fd5b505afa1580156104aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ce9190612bb7565b816000815181106104e1576104e1612bd4565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061051557610515612bd4565b6001600160a01b03928316602091820292909201015260405163b6f9de9560e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063b6f9de9590349061057a90600090869033904290600401612c2e565b6000604051808303818588803b15801561059357600080fd5b505af11580156105a7573d6000803e3d6000fd5b5050505050505b005b600080fd5b3480156105c157600080fd5b506105ae610dc1565b3480156105d657600080fd5b506105fe7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561062757600080fd5b50610630610e01565b6040516106129190612c63565b34801561064957600080fd5b506105ae610e93565b34801561065e57600080fd5b5061067261066d366004612cb8565b610ecf565b6040519015158152602001610612565b34801561068e57600080fd5b5061067261069d366004612ce4565b60296020526000908152604090205460ff1681565b3480156106be57600080fd5b506012546105fe906001600160a01b031681565b3480156106de57600080fd5b506106e8601f5481565b604051908152602001610612565b34801561070257600080fd5b506105fe7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561073657600080fd5b506002546106e8565b34801561074b57600080fd5b506105ae61075a366004612d01565b610ee6565b34801561076b57600080fd5b5061067261077a366004612d1a565b610fbb565b34801561078b57600080fd5b506007546001600160a01b03166105fe565b3480156107a957600080fd5b506105fe61dead81565b3480156107bf57600080fd5b5060405160098152602001610612565b3480156107db57600080fd5b506106726107ea366004612cb8565b611024565b3480156107fb57600080fd5b506105ae61105a565b34801561081057600080fd5b506105ae611096565b34801561082557600080fd5b506006546001600160a01b03166105fe565b34801561084357600080fd5b506105fe7f0000000000000000000000005a7562337c31c51757e36c2279630d7b73b9f6ee81565b34801561087757600080fd5b50601c546106729060ff1681565b34801561089157600080fd5b506106726108a0366004612ce4565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156108ca57600080fd5b506105ae6110d1565b3480156108df57600080fd5b506106e860165481565b3480156108f557600080fd5b506105ae610904366004612d01565b611119565b34801561091557600080fd5b50601c546106729062010000900460ff1681565b34801561093557600080fd5b506106e8610944366004612ce4565b6001600160a01b031660009081526020819052604090205490565b34801561096b57600080fd5b506105ae611190565b34801561098057600080fd5b506105ae6111cc565b34801561099557600080fd5b506105ae6109a4366004612ce4565b611217565b3480156109b557600080fd5b506106e860215481565b3480156109cb57600080fd5b506105ae6109da366004612d5b565b611263565b3480156109eb57600080fd5b506105ae6109fa366004612d01565b6112b8565b348015610a0b57600080fd5b506105ae61132f565b348015610a2057600080fd5b506105ae611371565b348015610a3557600080fd5b506106e860205481565b348015610a4b57600080fd5b506005546001600160a01b03166105fe565b348015610a6957600080fd5b506105ae610a78366004612ce4565b6113b2565b348015610a8957600080fd5b50610a926113fe565b604080516001600160a01b039093168352602083019190915201610612565b348015610abd57600080fd5b50610630611505565b348015610ad257600080fd5b506105ae610ae1366004612d5b565b611514565b348015610af257600080fd5b50610672610b01366004612cb8565b61160e565b348015610b1257600080fd5b50610672610b21366004612cb8565b61165d565b348015610b3257600080fd5b50610672610b41366004612ce4565b602a6020526000908152604090205460ff1681565b348015610b6257600080fd5b50601c5461067290610100900460ff1681565b348015610b8157600080fd5b506105ae610b90366004612d01565b61166a565b348015610ba157600080fd5b506105ae610bb0366004612d5b565b6116e1565b348015610bc157600080fd5b506106e860175481565b348015610bd757600080fd5b506105ae610be6366004612d01565b611736565b348015610bf757600080fd5b50601e546106729060ff1681565b348015610c1157600080fd5b506106e860195481565b348015610c2757600080fd5b506105ae610c36366004612d01565b6117ff565b348015610c4757600080fd5b506106e860225481565b6105ae610c5f366004612cb8565b61182e565b348015610c7057600080fd5b506105ae61188b565b348015610c8557600080fd5b50610672610c94366004612d01565b6118d3565b348015610ca557600080fd5b506014546105fe906001600160a01b031681565b348015610cc557600080fd5b506106e8610cd4366004612d99565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0b57600080fd5b506015546105fe906001600160a01b031681565b348015610d2b57600080fd5b506106e8610d3a366004612d01565b611998565b348015610d4b57600080fd5b506105ae610d5a366004612ce4565b6119b9565b348015610d6b57600080fd5b506106e8601a5481565b348015610d8157600080fd5b506013546105fe906001600160a01b031681565b348015610da157600080fd5b506106e8600e5481565b348015610db757600080fd5b506106e8601b5481565b6006546001600160a01b03163314610df45760405162461bcd60e51b8152600401610deb90612dc7565b60405180910390fd5b6018805461ff0019169055565b606060038054610e1090612e09565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3c90612e09565b8015610e895780601f10610e5e57610100808354040283529160200191610e89565b820191906000526020600020905b815481529060010190602001808311610e6c57829003601f168201915b5050505050905090565b6006546001600160a01b03163314610ebd5760405162461bcd60e51b8152600401610deb90612dc7565b600680546001600160a01b0319169055565b6000610edc338484611a6b565b5060015b92915050565b6005546001600160a01b03163314610f105760405162461bcd60e51b8152600401610deb90612e44565b633b9aca006103e8610f2160025490565b610f2c906001612e8f565b610f369190612eae565b610f409190612eae565b811015610fa75760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610deb565b610fb581633b9aca00612e8f565b60195550565b6000610fc8848484611b90565b61101a843361101585604051806060016040528060288152602001613047602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612468565b611a6b565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610edc9185906110159086611a05565b6007546001600160a01b031633146110845760405162461bcd60e51b8152600401610deb90612ed0565b600780546001600160a01b0319169055565b6005546001600160a01b031633146110c05760405162461bcd60e51b8152600401610deb90612e44565b6018805461ff001916610100179055565b600d546001600160a01b0316331480156110ec575042600c54105b6110f557600080fd5b600d54600780546001600160a01b0319166001600160a01b03909216919091179055565b6005546001600160a01b031633148061114857506009546001600160a01b031633148015611148575060085481115b61115157600080fd5b600580546001600160a01b0319163017905561116e81603c612e8f565b6111789042612f12565b60085550600980546001600160a01b03191633179055565b6005546001600160a01b031633146111ba5760405162461bcd60e51b8152600401610deb90612e44565b600580546001600160a01b0319169055565b6009546001600160a01b0316331480156111e7575042600854105b6111f057600080fd5b60098054600580546001600160a01b03199081166001600160a01b03841617909155169055565b6007546001600160a01b031633146112415760405162461bcd60e51b8152600401610deb90612ed0565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461128d5760405162461bcd60e51b8152600401610deb90612dc7565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6007546001600160a01b03163314806112e75750600d546001600160a01b0316331480156112e75750600c5481115b6112f057600080fd5b600780546001600160a01b0319163017905561130d81603c612e8f565b6113179042612f12565b600c5550600d80546001600160a01b03191633179055565b6006546001600160a01b031633146113595760405162461bcd60e51b8152600401610deb90612dc7565b60125461136f906001600160a01b03164761182e565b565b6005546001600160a01b0316331461139b5760405162461bcd60e51b8152600401610deb90612e44565b601c805462ffff0019166201010017905542602655565b6007546001600160a01b031633146113dc5760405162461bcd60e51b8152600401610deb90612ed0565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6012546015546001600160a01b039081166000908152600f602052604081206001015490928392169082805b6011548110156114ce5760006011828154811061144957611449612bd4565b6000918252602080832090910154808352601082526040808420546001600160a01b03168452600f9092529120600181015491925090841080156114925750600381015460ff16155b156114b95760018101546000838152601060205260409020546001600160a01b0316965093505b505080806114c690612f2a565b91505061142a565b506012546001600160a01b038481169116146114ef57919491935090915050565b506015546001600160a01b031694909350915050565b606060048054610e1090612e09565b6005546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610deb90612e44565b7f0000000000000000000000005a7562337c31c51757e36c2279630d7b73b9f6ee6001600160a01b0316826001600160a01b031614156115e65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610deb565b6001600160a01b0382166000908152602a60205260409020805460ff19168215151790555050565b6000610edc33846110158560405180606001604052806025815260200161306f602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612468565b6000610edc338484611b90565b6006546001600160a01b03163314806116995750600b546001600160a01b0316331480156116995750600a5481115b6116a257600080fd5b600680546001600160a01b031916301790556116bf81603c612e8f565b6116c99042612f12565b600a5550600b80546001600160a01b03191633179055565b6006546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610deb90612dc7565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117605760405162461bcd60e51b8152600401610deb90612e44565b633b9aca006103e861177160025490565b61177c906005612e8f565b6117869190612eae565b6117909190612eae565b8110156117eb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610deb565b6117f981633b9aca00612e8f565b601b5550565b6006546001600160a01b031633146118295760405162461bcd60e51b8152600401610deb90612dc7565b602755565b60006060836001600160a01b03168360405160006040518083038185875af1925050503d806000811461187d576040519150601f19603f3d011682016040523d82523d6000602084013e611882565b606091505b50505050505050565b600b546001600160a01b0316331480156118a6575042600a54105b6118af57600080fd5b600b54600680546001600160a01b0319166001600160a01b03909216919091179055565b6006546000906001600160a01b031633146119005760405162461bcd60e51b8152600401610deb90612dc7565b620186a061190d60025490565b611918906001612e8f565b6119229190612eae565b82101561198f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610deb565b50601a55600190565b601181815481106119a857600080fd5b600091825260209091200154905081565b6007546001600160a01b031633146119e35760405162461bcd60e51b8152600401610deb90612ed0565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b600080611a128385612f12565b905083811015611a645760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610deb565b9392505050565b6001600160a01b038316611acd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610deb565b6001600160a01b038216611b2e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610deb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bb65760405162461bcd60e51b8152600401610deb90612f45565b6001600160a01b038216611bdc5760405162461bcd60e51b8152600401610deb90612f8a565b80611bf257611bed838360006124a2565b505050565b602754602654611c029190612f12565b42118015611c175750601854610100900460ff165b15611c2457611c246125ab565b601c5460ff1615612107576005546001600160a01b03848116911614801590611c5b57506005546001600160a01b03838116911614155b8015611c6f57506001600160a01b03821615155b8015611c8657506001600160a01b03821661dead14155b8015611c95575060185460ff16155b1561210757601c54610100900460ff16611d2d576001600160a01b03831660009081526028602052604090205460ff1680611ce857506001600160a01b03821660009081526028602052604090205460ff165b611d2d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610deb565b601e5460ff1615611ea1576005546001600160a01b03838116911614801590611d8857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611dc657507f0000000000000000000000005a7562337c31c51757e36c2279630d7b73b9f6ee6001600160a01b0316826001600160a01b031614155b8015611dea57506001600160a01b03831660009081526029602052604090205460ff165b15611ea157326000908152601d60205260409020544311611e855760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610deb565b611e90436005612f12565b326000908152601d60205260409020555b6001600160a01b0383166000908152602a602052604090205460ff168015611ee257506001600160a01b03821660009081526029602052604090205460ff16155b15611fc657601954811115611f575760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610deb565b601b546001600160a01b038316600090815260208190526040902054611f7d9083612f12565b1115611fc15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610deb565b612107565b6001600160a01b0382166000908152602a602052604090205460ff16801561200757506001600160a01b03831660009081526029602052604090205460ff16155b1561207d57601954811115611fc15760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610deb565b6001600160a01b03821660009081526029602052604090205460ff1661210757601b546001600160a01b0383166000908152602081905260409020546120c39083612f12565b11156121075760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610deb565b30600090815260208190526040902054601a54811080159081906121335750601c5462010000900460ff165b8015612142575060185460ff16155b801561216757506001600160a01b0385166000908152602a602052604090205460ff16155b801561218c57506001600160a01b03851660009081526028602052604090205460ff16155b80156121b157506001600160a01b03841660009081526028602052604090205460ff16155b156121d6576018805460ff191660011790556121cb612620565b6018805460ff191690555b6018546001600160a01b03861660009081526028602052604090205460ff9182161591168061221d57506001600160a01b03851660009081526028602052604090205460ff165b15612226575060005b6000811561245d576001600160a01b0387166000908152602a602052604090205460ff16801561225857506000601f54115b156123375761227d6064612277601f548861274b90919063ffffffff16565b906127ca565b9050601f54602054826122909190612e8f565b61229a9190612eae565b602360008282546122ab9190612f12565b9091555050601f546021546122c09083612e8f565b6122ca9190612eae565b602460008282546122db9190612f12565b9091555050601f546022546122f09083612e8f565b6122fa9190612eae565b6025600082825461230b9190612f12565b9091555061231d90508686600061280c565b601b546019541015612332576123328561294f565b61243f565b6001600160a01b0386166000908152602a602052604090205460ff16801561236157506000601f54115b1561243f576123806064612277601f548861274b90919063ffffffff16565b9050601f54602054826123939190612e8f565b61239d9190612eae565b602360008282546123ae9190612f12565b9091555050601f546021546123c39083612e8f565b6123cd9190612eae565b602460008282546123de9190612f12565b9091555050601f546022546123f39083612e8f565b6123fd9190612eae565b6025600082825461240e9190612f12565b909155506124219050876000600161280c565b6015546001600160a01b038881169116141561243f5761243f6125ab565b8015612450576124508730836124a2565b61245a8186612fcd565b94505b6118828787876124a2565b6000818484111561248c5760405162461bcd60e51b8152600401610deb9190612c63565b5060006124998486612fcd565b95945050505050565b6001600160a01b0383166124c85760405162461bcd60e51b8152600401610deb90612f45565b6001600160a01b0382166124ee5760405162461bcd60e51b8152600401610deb90612f8a565b61252b81604051806060016040528060268152602001613021602691396001600160a01b0386166000908152602081905260409020549190612468565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461255a9082611a05565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611b83565b6000806125b66113fe565b601580546001600160a01b0319166001600160a01b0384161790554260265590925090506125e660116000612b68565b60405181906001600160a01b038416907fc5d1e2a43e1052756e222065802cb80a029bfaf7045b3df42c5c87b92e48de4190600090a35050565b6000806025546024546023546126369190612f12565b6126409190612f12565b3060009081526020819052604090205490915061265c90612973565b479150600061267a826122776023548661274b90919063ffffffff16565b90506000612697836122776024548761274b90919063ffffffff16565b60006023819055602481905560255560155490915047906126c1906001600160a01b03168461182e565b6014546126d7906001600160a01b03168361182e565b6017546016541015612716576013546126f9906001600160a01b03168261182e565b806017600082825461270b9190612f12565b909155506127449050565b60125461272c906001600160a01b03168261182e565b806016600082825461273e9190612f12565b90915550505b5050505050565b60008261275a57506000610ee0565b60006127668385612e8f565b9050826127738583612eae565b14611a645760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610deb565b6000611a6483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b3a565b6001600160a01b0383166000908152600f6020526040902060038101548154859160ff169061287657600e8054808555600090815260106020526040812080546001600160a01b0319166001600160a01b0386161790558154919061287083612f2a565b91905055505b6026548360020154148015612889575080155b156128e157848360010160008282546128a29190612f12565b90915550508254601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680155612931565b6001808401869055602654600285015560038401805460ff1916905583546011805492830181556000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68909101555b83156129475760038301805460ff191660011790555b505050505050565b61295a81600a6127ca565b6019600082825461296b9190612f12565b909155505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129a8576129a8612bd4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612a2157600080fd5b505afa158015612a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a599190612bb7565b81600181518110612a6c57612a6c612bd4565b60200260200101906001600160a01b031690816001600160a01b031681525050612ab7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a6b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612b0c908590600090869030904290600401612fe4565b600060405180830381600087803b158015612b2657600080fd5b505af1158015612947573d6000803e3d6000fd5b60008183612b5b5760405162461bcd60e51b8152600401610deb9190612c63565b5060006124998486612eae565b5080546000825590600052602060002090810190612b869190612b89565b50565b5b80821115612b9e5760008155600101612b8a565b5090565b6001600160a01b0381168114612b8657600080fd5b600060208284031215612bc957600080fd5b8151611a6481612ba2565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015612c235781516001600160a01b031687529582019590820190600101612bfe565b509495945050505050565b848152608060208201526000612c476080830186612bea565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612c9057858101830151858201604001528201612c74565b81811115612ca2576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612ccb57600080fd5b8235612cd681612ba2565b946020939093013593505050565b600060208284031215612cf657600080fd5b8135611a6481612ba2565b600060208284031215612d1357600080fd5b5035919050565b600080600060608486031215612d2f57600080fd5b8335612d3a81612ba2565b92506020840135612d4a81612ba2565b929592945050506040919091013590565b60008060408385031215612d6e57600080fd5b8235612d7981612ba2565b915060208301358015158114612d8e57600080fd5b809150509250929050565b60008060408385031215612dac57600080fd5b8235612db781612ba2565b91506020830135612d8e81612ba2565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206d616e616760408201526132b960f11b606082015260800190565b600181811c90821680612e1d57607f821691505b60208210811415612e3e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ea957612ea9612e79565b500290565b600082612ecb57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206a616e697460408201526137b960f11b606082015260800190565b60008219821115612f2557612f25612e79565b500190565b6000600019821415612f3e57612f3e612e79565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612fdf57612fdf612e79565b500390565b85815284602082015260a06040820152600061300360a0830186612bea565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122078a4a9e228808547ebe1d88b9b5dc846830d8969d7a505e8fcf522f02b0a8cff64736f6c63430008090033
Deployed Bytecode Sourcemap
30943:15127:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34686:13;;;;;;;:39;;;;-1:-1:-1;34703:10:0;-1:-1:-1;;;;;34717:8:0;34703:22;;;34686:39;34683:422;;;34766:16;;;34780:1;34766:16;;;;;;;;34741:22;;34766:16;;;;;;;;;;-1:-1:-1;34766:16:0;34741:41;;34807:15;-1:-1:-1;;;;;34807:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34797:4;34802:1;34797:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;34797:32:0;;;-1:-1:-1;;;;;34797:32:0;;;;;34862:4;34844;34849:1;34844:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34844:23:0;;;:7;;;;;;;;;:23;34888:205;;-1:-1:-1;;;34888:205:0;;:15;:66;;;;;;34962:9;;34888:205;;34991:1;;35011:4;;35034:10;;35063:15;;34888:205;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34726:379;34683:422;30943:15127;;;;;35367:81;;;;;;;;;;;;;:::i;31122:33::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1815:32:1;;;1797:51;;1785:2;1770:18;31122:33:0;;;;;;;;7549:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22502:97::-;;;;;;;;;;;;;:::i;9715:169::-;;;;;;;;;;-1:-1:-1;9715:169:0;;;;;:::i;:::-;;:::i;:::-;;;2946:14:1;;2939:22;2921:41;;2909:2;2894:18;9715:169:0;2781:187:1;32636:64:0;;;;;;;;;;-1:-1:-1;32636:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31526:32;;;;;;;;;;-1:-1:-1;31526:32:0;;;;-1:-1:-1;;;;;31526:32:0;;;32181:28;;;;;;;;;;;;;;;;;;;3595:25:1;;;3583:2;3568:18;32181:28:0;3449:177:1;31019:51:0;;;;;;;;;;;;;;;8668:108;;;;;;;;;;-1:-1:-1;8756:12:0;;8668:108;;35935:232;;;;;;;;;;-1:-1:-1;35935:232:0;;;;;:::i;:::-;;:::i;10366:355::-;;;;;;;;;;-1:-1:-1;10366:355:0;;;;;:::i;:::-;;:::i;23204:83::-;;;;;;;;;;-1:-1:-1;23271:8:0;;-1:-1:-1;;;;;23271:8:0;23204:83;;31162:53;;;;;;;;;;;;31208:6;31162:53;;8511:92;;;;;;;;;;-1:-1:-1;8511:92:0;;8594:1;4654:36:1;;4642:2;4627:18;8511:92:0;4512:184:1;11130:218:0;;;;;;;;;;-1:-1:-1;11130:218:0;;;;;:::i;:::-;;:::i;23428:90::-;;;;;;;;;;;;;:::i;35280:79::-;;;;;;;;;;;;;:::i;22278:83::-;;;;;;;;;;-1:-1:-1;22345:8:0;;-1:-1:-1;;;;;22345:8:0;22278:83;;31077:38;;;;;;;;;;;;;;;31938:33;;;;;;;;;;-1:-1:-1;31938:33:0;;;;;;;;35798:125;;;;;;;;;;-1:-1:-1;35798:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;35887:28:0;35863:4;35887:28;;;:19;:28;;;;;;;;;35798:125;23918:167;;;;;;;;;;;;;:::i;31677:32::-;;;;;;;;;;;;;;;;21688:352;;;;;;;;;;-1:-1:-1;21688:352:0;;;;;:::i;:::-;;:::i;32018:31::-;;;;;;;;;;-1:-1:-1;32018:31:0;;;;;;;;;;;8839:127;;;;;;;;;;-1:-1:-1;8839:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8940:18:0;8913:7;8940:18;;;;;;;;;;;;8839:127;21588:92;;;;;;;;;;;;;:::i;22048:203::-;;;;;;;;;;;;;:::i;37222:131::-;;;;;;;;;;-1:-1:-1;37222:131:0;;;;;:::i;:::-;;:::i;32251:27::-;;;;;;;;;;;;;;;;36400:146;;;;;;;;;;-1:-1:-1;36400:146:0;;;;;:::i;:::-;;:::i;23526:384::-;;;;;;;;;;-1:-1:-1;23526:384:0;;;;;:::i;:::-;;:::i;45963:102::-;;;;;;;;;;;;;:::i;35119:153::-;;;;;;;;;;;;;:::i;32216:28::-;;;;;;;;;;;;;;;;21374:79;;;;;;;;;;-1:-1:-1;21439:6:0;;-1:-1:-1;;;;;21439:6:0;21374:79;;37365:131;;;;;;;;;;-1:-1:-1;37365:131:0;;;;;:::i;:::-;;:::i;45235:720::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;5590:32:1;;;5572:51;;5654:2;5639:18;;5632:34;;;;5545:18;45235:720:0;5382:290:1;7768:104:0;;;;;;;;;;;;;:::i;36696:244::-;;;;;;;;;;-1:-1:-1;36696:244:0;;;;;:::i;:::-;;:::i;11851:269::-;;;;;;;;;;-1:-1:-1;11851:269:0;;;;;:::i;:::-;;:::i;9179:175::-;;;;;;;;;;-1:-1:-1;9179:175:0;;;;;:::i;:::-;;:::i;32858:58::-;;;;;;;;;;-1:-1:-1;32858:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31978:33;;;;;;;;;;-1:-1:-1;31978:33:0;;;;;;;;;;;22607:384;;;;;;;;;;-1:-1:-1;22607:384:0;;;;;:::i;:::-;;:::i;36554:134::-;;;;;;;;;;-1:-1:-1;36554:134:0;;;;;:::i;:::-;;:::i;31716:32::-;;;;;;;;;;;;;;;;36175:213;;;;;;;;;;-1:-1:-1;36175:213:0;;;;;:::i;:::-;;:::i;32133:39::-;;;;;;;;;;-1:-1:-1;32133:39:0;;;;;;;;31819:35;;;;;;;;;;;;;;;;37504:100;;;;;;;;;;-1:-1:-1;37504:100:0;;;;;:::i;:::-;;:::i;32285:30::-;;;;;;;;;;;;;;;;43905:192;;;;;;:::i;:::-;;:::i;22999:175::-;;;;;;;;;;;;;:::i;35519:271::-;;;;;;;;;;-1:-1:-1;35519:271:0;;;;;:::i;:::-;;:::i;31604:28::-;;;;;;;;;;-1:-1:-1;31604:28:0;;;;-1:-1:-1;;;;;31604:28:0;;;9417:151;;;;;;;;;;-1:-1:-1;9417:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9533:18:0;;;9506:7;9533:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9417:151;31639:29;;;;;;;;;;-1:-1:-1;31639:29:0;;;;-1:-1:-1;;;;;31639:29:0;;;31489:28;;;;;;;;;;-1:-1:-1;31489:28:0;;;;;:::i;:::-;;:::i;37086:124::-;;;;;;;;;;-1:-1:-1;37086:124:0;;;;;:::i;:::-;;:::i;31861:33::-;;;;;;;;;;;;;;;;31565:32;;;;;;;;;;-1:-1:-1;31565:32:0;;;;-1:-1:-1;;;;;31565:32:0;;;31362:22;;;;;;;;;;;;;;;;31901:24;;;;;;;;;;;;;;;;35367:81;22411:8;;-1:-1:-1;;;;;22411:8:0;265:10;22411:24;22403:71;;;;-1:-1:-1;;;22403:71:0;;;;;;;:::i;:::-;;;;;;;;;35420:12:::1;:20:::0;;-1:-1:-1;;35420:20:0::1;::::0;;35367:81::o;7549:100::-;7603:13;7636:5;7629:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7549:100;:::o;22502:97::-;22411:8;;-1:-1:-1;;;;;22411:8:0;265:10;22411:24;22403:71;;;;-1:-1:-1;;;22403:71:0;;;;;;;:::i;:::-;22570:8:::1;:21:::0;;-1:-1:-1;;;;;;22570:21:0::1;::::0;;22502:97::o;9715:169::-;9798:4;9815:39;265:10;9838:7;9847:6;9815:8;:39::i;:::-;-1:-1:-1;9872:4:0;9715:169;;;;;:::o;35935:232::-;21501:6;;-1:-1:-1;;;;;21501:6:0;265:10;21501:22;21493:67;;;;-1:-1:-1;;;21493:67:0;;;;;;;:::i;:::-;36054:3:::1;36048:4;36028:13;8756:12:::0;;;8668:108;36028:13:::1;:17;::::0;36044:1:::1;36028:17;:::i;:::-;:24;;;;:::i;:::-;36027:30;;;;:::i;:::-;36017:6;:40;;36009:100;;;::::0;-1:-1:-1;;;36009:100:0;;8276:2:1;36009:100:0::1;::::0;::::1;8258:21:1::0;8315:2;8295:18;;;8288:30;8354:34;8334:18;;;8327:62;-1:-1:-1;;;8405:18:1;;;8398:45;8460:19;;36009:100:0::1;8074:411:1::0;36009:100:0::1;36143:16;:6:::0;36153:5:::1;36143:16;:::i;:::-;36120:20;:39:::0;-1:-1:-1;35935:232:0:o;10366:355::-;10506:4;10523:36;10533:6;10541:9;10552:6;10523:9;:36::i;:::-;10570:121;10579:6;265:10;10601:89;10639:6;10601:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10601:19:0;;;;;;:11;:19;;;;;;;;265:10;10601:33;;;;;;;;;;:37;:89::i;:::-;10570:8;:121::i;:::-;-1:-1:-1;10709:4:0;10366:355;;;;;:::o;11130:218::-;265:10;11218:4;11267:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11267:34:0;;;;;;;;;;11218:4;;11235:83;;11258:7;;11267:50;;11306:10;11267:38;:50::i;23428:90::-;23337:8;;-1:-1:-1;;;;;23337:8:0;265:10;23337:24;23329:71;;;;-1:-1:-1;;;23329:71:0;;;;;;;:::i;:::-;23489:8:::1;:21:::0;;-1:-1:-1;;;;;;23489:21:0::1;::::0;;23428:90::o;35280:79::-;21501:6;;-1:-1:-1;;;;;21501:6:0;265:10;21501:22;21493:67;;;;-1:-1:-1;;;21493:67:0;;;;;;;:::i;:::-;35332:12:::1;:19:::0;;-1:-1:-1;;35332:19:0::1;;;::::0;;35280:79::o;23918:167::-;23985:15;;-1:-1:-1;;;;;23985:15:0;23971:10;:29;:68;;;;;24024:15;24004:17;;:35;23971:68;23963:77;;;;;;24062:15;;24051:8;:26;;-1:-1:-1;;;;;;24051:26:0;-1:-1:-1;;;;;24062:15:0;;;24051:26;;;;;;23918:167::o;21688:352::-;21773:6;;-1:-1:-1;;;;;21773:6:0;21759:10;:20;;:77;;-1:-1:-1;21797:13:0;;-1:-1:-1;;;;;21797:13:0;21783:10;:27;:53;;;;;21821:15;;21814:4;:22;21783:53;21750:87;;;;;;21905:6;:22;;-1:-1:-1;;;;;;21905:22:0;21922:4;21905:22;;;21974:9;:4;21981:2;21974:9;:::i;:::-;21956:27;;:15;:27;:::i;:::-;21938:15;:45;-1:-1:-1;22006:13:0;:26;;-1:-1:-1;;;;;;22006:26:0;22022:10;22006:26;;;21688:352::o;21588:92::-;21501:6;;-1:-1:-1;;;;;21501:6:0;265:10;21501:22;21493:67;;;;-1:-1:-1;;;21493:67:0;;;;;;;:::i;:::-;21653:6:::1;:19:::0;;-1:-1:-1;;;;;;21653:19:0::1;::::0;;21588:92::o;22048:203::-;22122:13;;-1:-1:-1;;;;;22122:13:0;22108:10;:27;:64;;;;;22157:15;22139;;:33;22108:64;22100:73;;;;;;22193:13;;;22184:6;:22;;-1:-1:-1;;;;;;22184:22:0;;;-1:-1:-1;;;;;22193:13:0;;22184:22;;;;22217:26;;;22048:203::o;37222:131::-;23337:8;;-1:-1:-1;;;;;23337:8:0;265:10;23337:24;23329:71;;;;-1:-1:-1;;;23329:71:0;;;;;;;:::i;:::-;37314:9:::1;:31:::0;;-1:-1:-1;;;;;;37314:31:0::1;-1:-1:-1::0;;;;;37314:31:0;;;::::1;::::0;;;::::1;::::0;;37222:131::o;36400:146::-;22411:8;;-1:-1:-1;;;;;22411:8:0;265:10;22411:24;22403:71;;;;-1:-1:-1;;;22403:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36492:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36492:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36400:146::o;23526:384::-;23612:8;;-1:-1:-1;;;;;23612:8:0;23598:10;:22;;:83;;-1:-1:-1;23638:15:0;;-1:-1:-1;;;;;23638:15:0;23624:10;:29;:57;;;;;23664:17;;23657:4;:24;23624:57;23589:93;;;;;;23750:8;:24;;-1:-1:-1;;;;;;23750:24:0;23769:4;23750:24;;;23823:9;:4;23830:2;23823:9;:::i;:::-;23805:27;;:15;:27;:::i;:::-;23785:17;:47;-1:-1:-1;23874:15:0;:28;;-1:-1:-1;;;;;;23874:28:0;23892:10;23874:28;;;23526:384::o;45963:102::-;22411:8;;-1:-1:-1;;;;;22411:8:0;265:10;22411:24;22403:71;;;;-1:-1:-1;;;22403:71:0;;;;;;;:::i;:::-;46024:9:::1;::::0;46019:38:::1;::::0;-1:-1:-1;;;;;46024:9:0::1;46035:21;46019:4;:38::i;:::-;45963:102::o:0;35119:153::-;21501:6;;-1:-1:-1;;;;;21501:6:0;265:10;21501:22;21493:67;;;;-1:-1:-1;;;21493:67:0;;;;;;;:::i;:::-;35174:13:::1;:20:::0;;-1:-1:-1;;35205:18:0;;;;;35249:15:::1;35234:12;:30:::0;35119:153::o;37365:131::-;23337:8;;-1:-1:-1;;;;;23337:8:0;265:10;23337:24;23329:71;;;;-1:-1:-1;;;23329:71:0;;;;;;;:::i;:::-;37457:9:::1;:31:::0;;-1:-1:-1;;;;;;37457:31:0::1;-1:-1:-1::0;;;;;37457:31:0;;;::::1;::::0;;;::::1;::::0;;37365:131::o;45235:720::-;45350:9;;45402:6;;-1:-1:-1;;;;;45402:6:0;;;45277:15;45392:17;;;:9;:17;;;;;45350:9;45392:29;;45277:15;;;;45350:9;;45277:15;;45460:328;45483:11;:18;45479:22;;45460:328;;;45522:10;45535:11;45547:1;45535:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;45601:11;;;:7;:11;;;;;;;-1:-1:-1;;;;;45601:11:0;45591:22;;:9;:22;;;;;45601:11;45631:16;;;45535:14;;-1:-1:-1;45591:22:0;45631:26;-1:-1:-1;45631:40:0;;;;-1:-1:-1;45662:9:0;;;;;;45661:10;45631:40;45628:148;;;45702:16;;;;45749:11;;;;:7;:11;;;;;;-1:-1:-1;;;;;45749:11:0;;-1:-1:-1;45702:16:0;-1:-1:-1;45628:148:0;45507:281;;45503:3;;;;;:::i;:::-;;;;45460:328;;;-1:-1:-1;45816:9:0;;-1:-1:-1;;;;;45804:21:0;;;45816:9;;45804:21;45800:148;;45849:8;;45859:7;;-1:-1:-1;45235:720:0;;-1:-1:-1;;45235:720:0:o;45800:148::-;-1:-1:-1;45916:6:0;;-1:-1:-1;;;;;45916:6:0;;45924:11;;-1:-1:-1;45235:720:0;-1:-1:-1;;45235:720:0:o;7768:104::-;7824:13;7857:7;7850:14;;;;;:::i;36696:244::-;21501:6;;-1:-1:-1;;;;;21501:6:0;265:10;21501:22;21493:67;;;;-1:-1:-1;;;21493:67:0;;;;;;;:::i;:::-;36803:13:::1;-1:-1:-1::0;;;;;36795:21:0::1;:4;-1:-1:-1::0;;;;;36795:21:0::1;;;36787:91;;;::::0;-1:-1:-1;;;36787:91:0;;9368:2:1;36787:91:0::1;::::0;::::1;9350:21:1::0;9407:2;9387:18;;;9380:30;9446:34;9426:18;;;9419:62;9517:27;9497:18;;;9490:55;9562:19;;36787:91:0::1;9166:421:1::0;36787:91:0::1;-1:-1:-1::0;;;;;37031:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;37031:39:0;;;;;;;36696:244;;:::o;11851:269::-;11944:4;11961:129;265:10;11984:7;11993:96;12032:15;11993:96;;;;;;;;;;;;;;;;;265:10;11993:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11993:34:0;;;;;;;;;;;;:38;:96::i;9179:175::-;9265:4;9282:42;265:10;9306:9;9317:6;9282:9;:42::i;22607:384::-;22693:8;;-1:-1:-1;;;;;22693:8:0;22679:10;:22;;:83;;-1:-1:-1;22719:15:0;;-1:-1:-1;;;;;22719:15:0;22705:10;:29;:57;;;;;22745:17;;22738:4;:24;22705:57;22670:93;;;;;;22831:8;:24;;-1:-1:-1;;;;;;22831:24:0;22850:4;22831:24;;;22904:9;:4;22911:2;22904:9;:::i;:::-;22886:27;;:15;:27;:::i;:::-;22866:17;:47;-1:-1:-1;22955:15:0;:28;;-1:-1:-1;;;;;;22955:28:0;22973:10;22955:28;;;22607:384::o;36554:134::-;22411:8;;-1:-1:-1;;;;;22411:8:0;265:10;22411:24;22403:71;;;;-1:-1:-1;;;22403:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36641:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;36641:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36554:134::o;36175:213::-;21501:6;;-1:-1:-1;;;;;21501:6:0;265:10;21501:22;21493:67;;;;-1:-1:-1;;;21493:67:0;;;;;;;:::i;:::-;36297:3:::1;36291:4;36271:13;8756:12:::0;;;8668:108;36271:13:::1;:17;::::0;36287:1:::1;36271:17;:::i;:::-;:24;;;;:::i;:::-;36270:30;;;;:::i;:::-;36260:6;:40;;36252:89;;;::::0;-1:-1:-1;;;36252:89:0;;9794:2:1;36252:89:0::1;::::0;::::1;9776:21:1::0;9833:2;9813:18;;;9806:30;9872:34;9852:18;;;9845:62;-1:-1:-1;;;9923:18:1;;;9916:34;9967:19;;36252:89:0::1;9592:400:1::0;36252:89:0::1;36364:16;:6:::0;36374:5:::1;36364:16;:::i;:::-;36352:9;:28:::0;-1:-1:-1;36175:213:0:o;37504:100::-;22411:8;;-1:-1:-1;;;;;22411:8:0;265:10;22411:24;22403:71;;;;-1:-1:-1;;;22403:71:0;;;;;;;:::i;:::-;37577:10:::1;:19:::0;37504:100::o;43905:192::-;43987:12;44010:17;44056:8;-1:-1:-1;;;;;44056:13:0;44077:7;44056:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;43905:192:0:o;22999:175::-;23074:15;;-1:-1:-1;;;;;23074:15:0;23060:10;:29;:68;;;;;23113:15;23093:17;;:35;23060:68;23052:77;;;;;;23151:15;;23140:8;:26;;-1:-1:-1;;;;;;23140:26:0;-1:-1:-1;;;;;23151:15:0;;;23140:26;;;;;;22999:175::o;35519:271::-;22411:8;;35602:4;;-1:-1:-1;;;;;22411:8:0;265:10;22411:24;22403:71;;;;-1:-1:-1;;;22403:71:0;;;;;;;:::i;:::-;35658:6:::1;35638:13;8756:12:::0;;;8668:108;35638:13:::1;:17;::::0;35654:1:::1;35638:17;:::i;:::-;:26;;;;:::i;:::-;35625:9;:39;;35617:105;;;::::0;-1:-1:-1;;;35617:105:0;;10409:2:1;35617:105:0::1;::::0;::::1;10391:21:1::0;10448:2;10428:18;;;10421:30;10487:34;10467:18;;;10460:62;-1:-1:-1;;;10538:18:1;;;10531:51;10599:19;;35617:105:0::1;10207:417:1::0;35617:105:0::1;-1:-1:-1::0;35732:18:0::1;:30:::0;35779:4:::1;::::0;35519:271::o;31489:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31489:28:0;:::o;37086:124::-;23337:8;;-1:-1:-1;;;;;23337:8:0;265:10;23337:24;23329:71;;;;-1:-1:-1;;;23329:71:0;;;;;;;:::i;:::-;37179:5:::1;:23:::0;;-1:-1:-1;;;;;;37179:23:0::1;-1:-1:-1::0;;;;;37179:23:0;;;::::1;::::0;;;::::1;::::0;;37086:124::o;16415:181::-;16473:7;;16505:5;16509:1;16505;:5;:::i;:::-;16493:17;;16534:1;16529;:6;;16521:46;;;;-1:-1:-1;;;16521:46:0;;10831:2:1;16521:46:0;;;10813:21:1;10870:2;10850:18;;;10843:30;10909:29;10889:18;;;10882:57;10956:18;;16521:46:0;10629:351:1;16521:46:0;16587:1;16415:181;-1:-1:-1;;;16415:181:0:o;15037:380::-;-1:-1:-1;;;;;15173:19:0;;15165:68;;;;-1:-1:-1;;;15165:68:0;;11187:2:1;15165:68:0;;;11169:21:1;11226:2;11206:18;;;11199:30;11265:34;11245:18;;;11238:62;-1:-1:-1;;;11316:18:1;;;11309:34;11360:19;;15165:68:0;10985:400:1;15165:68:0;-1:-1:-1;;;;;15252:21:0;;15244:68;;;;-1:-1:-1;;;15244:68:0;;11592:2:1;15244:68:0;;;11574:21:1;11631:2;11611:18;;;11604:30;11670:34;11650:18;;;11643:62;-1:-1:-1;;;11721:18:1;;;11714:32;11763:19;;15244:68:0;11390:398:1;15244:68:0;-1:-1:-1;;;;;15325:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15377:32;;3595:25:1;;;15377:32:0;;3568:18:1;15377:32:0;;;;;;;;15037:380;;;:::o;37732:4579::-;-1:-1:-1;;;;;37864:18:0;;37856:68;;;;-1:-1:-1;;;37856:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37943:16:0;;37935:64;;;;-1:-1:-1;;;37935:64:0;;;;;;;:::i;:::-;38024:11;38021:92;;38052:28;38068:4;38074:2;38078:1;38052:15;:28::i;:::-;37732:4579;;;:::o;38021:92::-;38159:10;;38144:12;;:25;;;;:::i;:::-;38126:15;:43;:59;;;;-1:-1:-1;38173:12:0;;;;;;;38126:59;38123:100;;;38201:10;:8;:10::i;:::-;38236:14;;;;38233:1885;;;21439:6;;-1:-1:-1;;;;;38288:15:0;;;21439:6;;38288:15;;;;:49;;-1:-1:-1;21439:6:0;;-1:-1:-1;;;;;38324:13:0;;;21439:6;;38324:13;;38288:49;:86;;;;-1:-1:-1;;;;;;38358:16:0;;;;38288:86;:128;;;;-1:-1:-1;;;;;;38395:21:0;;38409:6;38395:21;;38288:128;:158;;;;-1:-1:-1;38438:8:0;;;;38437:9;38288:158;38266:1841;;;38484:13;;;;;;;38480:148;;-1:-1:-1;;;;;38529:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;38558:23:0;;;;;;:19;:23;;;;;;;;38529:52;38521:87;;;;-1:-1:-1;;;38521:87:0;;12805:2:1;38521:87:0;;;12787:21:1;12844:2;12824:18;;;12817:30;-1:-1:-1;;;12863:18:1;;;12856:52;12925:18;;38521:87:0;12603:346:1;38521:87:0;38786:20;;;;38782:467;;;21439:6;;-1:-1:-1;;;;;38834:13:0;;;21439:6;;38834:13;;;;:47;;;38865:15;-1:-1:-1;;;;;38851:30:0;:2;-1:-1:-1;;;;;38851:30:0;;;38834:47;:79;;;;;38899:13;-1:-1:-1;;;;;38885:28:0;:2;-1:-1:-1;;;;;38885:28:0;;;38834:79;:119;;;;-1:-1:-1;;;;;;38916:37:0;;;;;;:31;:37;;;;;;;;38834:119;38830:400;;;39018:9;38989:39;;;;:28;:39;;;;;;39031:12;-1:-1:-1;38981:140:0;;;;-1:-1:-1;;;38981:140:0;;13156:2:1;38981:140:0;;;13138:21:1;13195:2;13175:18;;;13168:30;13234:34;13214:18;;;13207:62;13305:34;13285:18;;;13278:62;-1:-1:-1;;;13356:19:1;;;13349:40;13406:19;;38981:140:0;12954:477:1;38981:140:0;39190:16;:12;39205:1;39190:16;:::i;:::-;39177:9;39148:39;;;;:28;:39;;;;;:58;38830:400;-1:-1:-1;;;;;39318:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;39354:35:0;;;;;;:31;:35;;;;;;;;39353:36;39318:71;39314:778;;;39436:20;;39426:6;:30;;39418:96;;;;-1:-1:-1;;;39418:96:0;;13638:2:1;39418:96:0;;;13620:21:1;13677:2;13657:18;;;13650:30;13716:34;13696:18;;;13689:62;-1:-1:-1;;;13767:18:1;;;13760:51;13828:19;;39418:96:0;13436:417:1;39418:96:0;39575:9;;-1:-1:-1;;;;;8940:18:0;;8913:7;8940:18;;;;;;;;;;;39549:22;;:6;:22;:::i;:::-;:35;;39541:67;;;;-1:-1:-1;;;39541:67:0;;14060:2:1;39541:67:0;;;14042:21:1;14099:2;14079:18;;;14072:30;-1:-1:-1;;;14118:18:1;;;14111:49;14177:18;;39541:67:0;13858:343:1;39541:67:0;39314:778;;;-1:-1:-1;;;;;39702:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;39736:37:0;;;;;;:31;:37;;;;;;;;39735:38;39702:71;39698:394;;;39820:20;;39810:6;:30;;39802:97;;;;-1:-1:-1;;;39802:97:0;;14408:2:1;39802:97:0;;;14390:21:1;14447:2;14427:18;;;14420:30;14486:34;14466:18;;;14459:62;-1:-1:-1;;;14537:18:1;;;14530:52;14599:19;;39802:97:0;14206:418:1;39698:394:0;-1:-1:-1;;;;;39946:35:0;;;;;;:31;:35;;;;;;;;39942:150;;40039:9;;-1:-1:-1;;;;;8940:18:0;;8913:7;8940:18;;;;;;;;;;;40013:22;;:6;:22;:::i;:::-;:35;;40005:67;;;;-1:-1:-1;;;40005:67:0;;14060:2:1;40005:67:0;;;14042:21:1;14099:2;14079:18;;;14072:30;-1:-1:-1;;;14118:18:1;;;14111:49;14177:18;;40005:67:0;13858:343:1;40005:67:0;40201:4;40152:28;8940:18;;;;;;;;;;;40267;;40243:42;;;;;;;40316:35;;-1:-1:-1;40340:11:0;;;;;;;40316:35;:61;;;;-1:-1:-1;40369:8:0;;;;40368:9;40316:61;:110;;;;-1:-1:-1;;;;;;40395:31:0;;;;;;:25;:31;;;;;;;;40394:32;40316:110;:153;;;;-1:-1:-1;;;;;;40444:25:0;;;;;;:19;:25;;;;;;;;40443:26;40316:153;:194;;;;-1:-1:-1;;;;;;40487:23:0;;;;;;:19;:23;;;;;;;;40486:24;40316:194;40298:338;;;40537:8;:15;;-1:-1:-1;;40537:15:0;40548:4;40537:15;;;40581:10;:8;:10::i;:::-;40608:8;:16;;-1:-1:-1;;40608:16:0;;;40298:338;40672:8;;-1:-1:-1;;;;;40781:25:0;;40656:12;40781:25;;;:19;:25;;;;;;40672:8;;;;40671:9;;40781:25;;:52;;-1:-1:-1;;;;;;40810:23:0;;;;;;:19;:23;;;;;;;;40781:52;40778:99;;;-1:-1:-1;40860:5:0;40778:99;40897:12;41001:7;40998:1260;;;-1:-1:-1;;;;;41052:31:0;;;;;;:25;:31;;;;;;;;:48;;;;;41099:1;41087:9;;:13;41052:48;41049:1040;;;41125:30;41151:3;41125:21;41136:9;;41125:6;:10;;:21;;;;:::i;:::-;:25;;:30::i;:::-;41118:37;;41230:9;;41218;;41211:4;:16;;;;:::i;:::-;:28;;;;:::i;:::-;41192:15;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;41294:9:0;;41283:8;;41276:15;;:4;:15;:::i;:::-;:27;;;;:::i;:::-;41258:14;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;41364:9:0;;41350:11;;41343:18;;:4;:18;:::i;:::-;:30;;;;:::i;:::-;41322:17;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;41392:34:0;;-1:-1:-1;41408:2:0;41412:6;41420:5;41392:15;:34::i;:::-;41471:9;;41448:20;;:32;41445:107;;;41504:28;41525:6;41504:20;:28::i;:::-;41049:1040;;;-1:-1:-1;;;;;41614:29:0;;;;;;:25;:29;;;;;;;;:46;;;;;41659:1;41647:9;;:13;41614:46;41610:479;;;41687:30;41713:3;41687:21;41698:9;;41687:6;:10;;:21;;;;:::i;:30::-;41680:37;;41792:9;;41780;;41773:4;:16;;;;:::i;:::-;:28;;;;:::i;:::-;41754:15;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;41856:9:0;;41845:8;;41838:15;;:4;:15;:::i;:::-;:27;;;;:::i;:::-;41820:14;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;41926:9:0;;41912:11;;41905:18;;:4;:18;:::i;:::-;:30;;;;:::i;:::-;41884:17;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;41954:30:0;;-1:-1:-1;41970:4:0;41976:1;41979:4;41954:15;:30::i;:::-;42014:6;;-1:-1:-1;;;;;42006:14:0;;;42014:6;;42006:14;42003:71;;;42044:10;:8;:10::i;:::-;42120:8;;42117:93;;42152:42;42168:4;42182;42189;42152:15;:42::i;:::-;42232:14;42242:4;42232:14;;:::i;:::-;;;40998:1260;42270:33;42286:4;42292:2;42296:6;42270:15;:33::i;17318:192::-;17404:7;17440:12;17432:6;;;;17424:29;;;;-1:-1:-1;;;17424:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17464:9:0;17476:5;17480:1;17476;:5;:::i;:::-;17464:17;17318:192;-1:-1:-1;;;;;17318:192:0:o;12610:573::-;-1:-1:-1;;;;;12750:20:0;;12742:70;;;;-1:-1:-1;;;12742:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12831:23:0;;12823:71;;;;-1:-1:-1;;;12823:71:0;;;;;;;:::i;:::-;12987;13009:6;12987:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12987:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12967:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13092:20;;;;;;;:32;;13117:6;13092:24;:32::i;:::-;-1:-1:-1;;;;;13069:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13140:35;3595:25:1;;;13069:20:0;;13140:35;;;;;;3568:18:1;13140:35:0;3449:177:1;44931:296:0;44969:23;45003:20;45060:11;:9;:11::i;:::-;45082:6;:16;;-1:-1:-1;;;;;;45082:16:0;-1:-1:-1;;;;;45082:16:0;;;;;45124:15;45109:12;:30;45082:16;;-1:-1:-1;45034:37:0;-1:-1:-1;45150:18:0;45157:11;-1:-1:-1;45150:18:0;:::i;:::-;45184:35;;45206:12;;-1:-1:-1;;;;;45184:35:0;;;;;;;;44958:269;;44931:296::o;42934:963::-;42973:17;43001:25;43064:17;;43047:14;;43029:15;;:32;;;;:::i;:::-;:52;;;;:::i;:::-;43129:4;8913:7;8940:18;;;;;;;;;;;43001:80;;-1:-1:-1;43094:42:0;;:16;:42::i;:::-;43161:21;43149:33;;43195:20;43218:53;43253:17;43218:30;43232:15;;43218:9;:13;;:30;;;;:::i;:53::-;43195:76;;43290:19;43312:52;43346:17;43312:29;43326:14;;43312:9;:13;;:29;;;;:::i;:52::-;43375:22;43434:15;:19;;;43464:14;:18;;;43493:17;:21;43532:6;;43290:74;;-1:-1:-1;43400:21:0;;43527:26;;-1:-1:-1;;;;;43532:6:0;43540:12;43527:4;:26::i;:::-;43569:5;;43564:24;;-1:-1:-1;;;;;43569:5:0;43576:11;43564:4;:24::i;:::-;43632:17;;43612;;:37;43609:271;;;43670:9;;43665:31;;-1:-1:-1;;;;;43670:9:0;43681:14;43665:4;:31::i;:::-;43732:14;43711:17;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;43609:271:0;;-1:-1:-1;43609:271:0;;43792:9;;43787:31;;-1:-1:-1;;;;;43792:9:0;43803:14;43787:4;:31::i;:::-;43854:14;43833:17;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;43609:271:0;42962:935;;;;;42934:963::o;17769:471::-;17827:7;18072:6;18068:47;;-1:-1:-1;18102:1:0;18095:8;;18068:47;18127:9;18139:5;18143:1;18139;:5;:::i;:::-;18127:17;-1:-1:-1;18172:1:0;18163:5;18167:1;18127:17;18163:5;:::i;:::-;:10;18155:56;;;;-1:-1:-1;;;18155:56:0;;14961:2:1;18155:56:0;;;14943:21:1;15000:2;14980:18;;;14973:30;15039:34;15019:18;;;15012:62;-1:-1:-1;;;15090:18:1;;;15083:31;15131:19;;18155:56:0;14759:397:1;18716:132:0;18774:7;18801:39;18805:1;18808;18801:39;;;;;;;;;;;;;;;;;:3;:39::i;44105:818::-;-1:-1:-1;;;;;44222:18:0;;44197:22;44222:18;;;:9;:18;;;;;44318:9;;;;44341:11;;44232:7;;44318:9;;;44338:132;;44387:7;;;44373:21;;;:11;44409:16;;;:7;:16;;;;;:25;;-1:-1:-1;;;;;;44409:25:0;-1:-1:-1;;;;;44409:25:0;;;;;44449:9;;;44387:7;44449:9;;;:::i;:::-;;;;;;44338:132;44504:12;;44483:4;:17;;;:33;:45;;;;;44521:7;44520:8;44483:45;44480:361;;;44564:7;44544:4;:16;;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;44603:11:0;;44586;:29;;;;;;;44603:11;44586:29;;;;;;;44480:361;;;44664:16;;;;:26;;;44729:12;;44709:17;;;:32;44760:9;;;:17;;-1:-1:-1;;44760:17:0;;;44813:11;;44796;:29;;;;;;;-1:-1:-1;44796:29:0;;;;;;44480:361;44864:8;44861:55;;;44888:9;;;:16;;-1:-1:-1;;44888:16:0;44900:4;44888:16;;;44861:55;44186:737;;;44105:818;;;:::o;37612:112::-;37701:15;:7;37713:2;37701:11;:15::i;:::-;37677:20;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;;37612:112:0:o;42319:601::-;42471:16;;;42485:1;42471:16;;;;;;;;42447:21;;42471:16;;;;;;;;;;-1:-1:-1;42471:16:0;42447:40;;42516:4;42498;42503:1;42498:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42498:23:0;;;-1:-1:-1;;;;;42498:23:0;;;;;42542:15;-1:-1:-1;;;;;42542:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42532:4;42537:1;42532:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;42532:32:0;;;-1:-1:-1;;;;;42532:32:0;;;;;42577:62;42594:4;42609:15;42627:11;42577:8;:62::i;:::-;42678:224;;-1:-1:-1;;;42678:224:0;;-1:-1:-1;;;;;42678:15:0;:66;;;;:224;;42759:11;;42785:1;;42829:4;;42856;;42876:15;;42678:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19344:278;19430:7;19465:12;19458:5;19450:28;;;;-1:-1:-1;;;19450:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19489:9:0;19501:5;19505:1;19501;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;146:131:1:-;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;282:251;352:6;405:2;393:9;384:7;380:23;376:32;373:52;;;421:1;418;411:12;373:52;453:9;447:16;472:31;497:5;472:31;:::i;538:127::-;599:10;594:3;590:20;587:1;580:31;630:4;627:1;620:15;654:4;651:1;644:15;670:461;723:3;761:5;755:12;788:6;783:3;776:19;814:4;843:2;838:3;834:12;827:19;;880:2;873:5;869:14;901:1;911:195;925:6;922:1;919:13;911:195;;;990:13;;-1:-1:-1;;;;;986:39:1;974:52;;1046:12;;;;1081:15;;;;1022:1;940:9;911:195;;;-1:-1:-1;1122:3:1;;670:461;-1:-1:-1;;;;;670:461:1:o;1136:510::-;1407:6;1396:9;1389:25;1450:3;1445:2;1434:9;1430:18;1423:31;1370:4;1471:57;1523:3;1512:9;1508:19;1500:6;1471:57;:::i;:::-;-1:-1:-1;;;;;1564:32:1;;;;1559:2;1544:18;;1537:60;-1:-1:-1;1628:2:1;1613:18;1606:34;1463:65;1136:510;-1:-1:-1;;1136:510:1:o;1859:597::-;1971:4;2000:2;2029;2018:9;2011:21;2061:6;2055:13;2104:6;2099:2;2088:9;2084:18;2077:34;2129:1;2139:140;2153:6;2150:1;2147:13;2139:140;;;2248:14;;;2244:23;;2238:30;2214:17;;;2233:2;2210:26;2203:66;2168:10;;2139:140;;;2297:6;2294:1;2291:13;2288:91;;;2367:1;2362:2;2353:6;2342:9;2338:22;2334:31;2327:42;2288:91;-1:-1:-1;2440:2:1;2419:15;-1:-1:-1;;2415:29:1;2400:45;;;;2447:2;2396:54;;1859:597;-1:-1:-1;;;1859:597:1:o;2461:315::-;2529:6;2537;2590:2;2578:9;2569:7;2565:23;2561:32;2558:52;;;2606:1;2603;2596:12;2558:52;2645:9;2632:23;2664:31;2689:5;2664:31;:::i;:::-;2714:5;2766:2;2751:18;;;;2738:32;;-1:-1:-1;;;2461:315:1:o;2973:247::-;3032:6;3085:2;3073:9;3064:7;3060:23;3056:32;3053:52;;;3101:1;3098;3091:12;3053:52;3140:9;3127:23;3159:31;3184:5;3159:31;:::i;3866:180::-;3925:6;3978:2;3966:9;3957:7;3953:23;3949:32;3946:52;;;3994:1;3991;3984:12;3946:52;-1:-1:-1;4017:23:1;;3866:180;-1:-1:-1;3866:180:1:o;4051:456::-;4128:6;4136;4144;4197:2;4185:9;4176:7;4172:23;4168:32;4165:52;;;4213:1;4210;4203:12;4165:52;4252:9;4239:23;4271:31;4296:5;4271:31;:::i;:::-;4321:5;-1:-1:-1;4378:2:1;4363:18;;4350:32;4391:33;4350:32;4391:33;:::i;:::-;4051:456;;4443:7;;-1:-1:-1;;;4497:2:1;4482:18;;;;4469:32;;4051:456::o;4961:416::-;5026:6;5034;5087:2;5075:9;5066:7;5062:23;5058:32;5055:52;;;5103:1;5100;5093:12;5055:52;5142:9;5129:23;5161:31;5186:5;5161:31;:::i;:::-;5211:5;-1:-1:-1;5268:2:1;5253:18;;5240:32;5310:15;;5303:23;5291:36;;5281:64;;5341:1;5338;5331:12;5281:64;5364:7;5354:17;;;4961:416;;;;;:::o;6005:388::-;6073:6;6081;6134:2;6122:9;6113:7;6109:23;6105:32;6102:52;;;6150:1;6147;6140:12;6102:52;6189:9;6176:23;6208:31;6233:5;6208:31;:::i;:::-;6258:5;-1:-1:-1;6315:2:1;6300:18;;6287:32;6328:33;6287:32;6328:33;:::i;6398:398::-;6600:2;6582:21;;;6639:2;6619:18;;;6612:30;6678:34;6673:2;6658:18;;6651:62;-1:-1:-1;;;6744:2:1;6729:18;;6722:32;6786:3;6771:19;;6398:398::o;6801:380::-;6880:1;6876:12;;;;6923;;;6944:61;;6998:4;6990:6;6986:17;6976:27;;6944:61;7051:2;7043:6;7040:14;7020:18;7017:38;7014:161;;;7097:10;7092:3;7088:20;7085:1;7078:31;7132:4;7129:1;7122:15;7160:4;7157:1;7150:15;7014:161;;6801:380;;;:::o;7186:356::-;7388:2;7370:21;;;7407:18;;;7400:30;7466:34;7461:2;7446:18;;7439:62;7533:2;7518:18;;7186:356::o;7547:127::-;7608:10;7603:3;7599:20;7596:1;7589:31;7639:4;7636:1;7629:15;7663:4;7660:1;7653:15;7679:168;7719:7;7785:1;7781;7777:6;7773:14;7770:1;7767:21;7762:1;7755:9;7748:17;7744:45;7741:71;;;7792:18;;:::i;:::-;-1:-1:-1;7832:9:1;;7679:168::o;7852:217::-;7892:1;7918;7908:132;;7962:10;7957:3;7953:20;7950:1;7943:31;7997:4;7994:1;7987:15;8025:4;8022:1;8015:15;7908:132;-1:-1:-1;8054:9:1;;7852:217::o;8490:398::-;8692:2;8674:21;;;8731:2;8711:18;;;8704:30;8770:34;8765:2;8750:18;;8743:62;-1:-1:-1;;;8836:2:1;8821:18;;8814:32;8878:3;8863:19;;8490:398::o;8893:128::-;8933:3;8964:1;8960:6;8957:1;8954:13;8951:39;;;8970:18;;:::i;:::-;-1:-1:-1;9006:9:1;;8893:128::o;9026:135::-;9065:3;-1:-1:-1;;9086:17:1;;9083:43;;;9106:18;;:::i;:::-;-1:-1:-1;9153:1:1;9142:13;;9026:135::o;11793:401::-;11995:2;11977:21;;;12034:2;12014:18;;;12007:30;12073:34;12068:2;12053:18;;12046:62;-1:-1:-1;;;12139:2:1;12124:18;;12117:35;12184:3;12169:19;;11793:401::o;12199:399::-;12401:2;12383:21;;;12440:2;12420:18;;;12413:30;12479:34;12474:2;12459:18;;12452:62;-1:-1:-1;;;12545:2:1;12530:18;;12523:33;12588:3;12573:19;;12199:399::o;14629:125::-;14669:4;14697:1;14694;14691:8;14688:34;;;14702:18;;:::i;:::-;-1:-1:-1;14739:9:1;;14629:125::o;15161:582::-;15460:6;15449:9;15442:25;15503:6;15498:2;15487:9;15483:18;15476:34;15546:3;15541:2;15530:9;15526:18;15519:31;15423:4;15567:57;15619:3;15608:9;15604:19;15596:6;15567:57;:::i;:::-;-1:-1:-1;;;;;15660:32:1;;;;15655:2;15640:18;;15633:60;-1:-1:-1;15724:3:1;15709:19;15702:35;15559:65;15161:582;-1:-1:-1;;;15161:582:1:o
Swarm Source
ipfs://78a4a9e228808547ebe1d88b9b5dc846830d8969d7a505e8fcf522f02b0a8cff
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.