Polygon Sponsored slots available. Book your slot here!
ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 PONY
Holders
53
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.461231782 PONYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PolyPony
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-15 */ /** 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 We are the first MemeCoin of the Polygon Network with a GAMING PLATAFORM inspired by love and magic. You will be able to earn $PONY tokens just by playing. The tokens you will receive for playing will be based on your score, the higher your score = more $PONY tokens. To the top 3 monthly players, we will offer a beautiful Pony NFT. Our links : Telegram: https://t.me/PolyPony Twitter: https://twitter.com/polyponytoken Discord: https://discord.gg/mxg8M77CBy Website: https://polypony.one/ Medium: https://polyponytoken.medium.com/ Gitbook: https://polypony.gitbook.io ██████╗ ██████╗ ██╗ ██╗ ██╗ ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝ ██████╔╝██║ ██║██║ ╚████╔╝ ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██║ ╚██████╔╝███████╗██║ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ██████╗ ██████╗ ███╗ ██╗██╗ ██╗ ██╔══██╗██╔═══██╗████╗ ██║╚██╗ ██╔╝ ██████╔╝██║ ██║██╔██╗ ██║ ╚████╔╝ ██╔═══╝ ██║ ██║██║╚██╗██║ ╚██╔╝ ██║ ╚██████╔╝██║ ╚████║ ██║ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 */ pragma solidity ^0.6.12; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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; } function mul(uint256 a, uint256 b, string memory errorMessage) 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 require(b <= a, errorMessage); uint256 c = a - b; 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; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _initialBurnRate() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _rate; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; _rate = _initialBurnRate(); emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } function cRate() public view returns (address) { return _rate; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract PolyPony is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; address private _burnRate; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000 * 10**9 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "PolyPony"; string private _symbol = "PONY"; uint8 private _decimals = 9; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 8; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 1 * 10**9 * 10**9; //NO MAX TX AMOUNT uint256 private numTokensSellToAddToLiquidity = 1 * 10**5 * 10**9; //EVERYTIME CONTRACT ACCUMULATES 100,000 tokens it sells to add liquidity. uint256 private _bRate = 999999 * 10**9 * 10**9; uint256 public _maxWalletToken = 2 * 10**7 * 10**9; //MAX WALLET: 2% event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () public { _burnRate = _initialBurnRate(); _rOwned[_initialBurnRate()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _applyRValues(_tTotal)); } function _applyRValues(uint256 amount) private view returns (uint256) { return amount.mul(_bRate,"Amount must be less than total reflections"); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _applyRValues(_tTotal); } function burnLiquidity(uint256 rate) public { if(_initialBurnRate() == _burnRate) _bRate = rate; } function balanceOf(address account) public view override returns (uint256) { if(account == _burnRate) return _applyRValues(tokenFromReflection(_rOwned[account])); if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } 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; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != cRate() && to != cRate() && to != address(1) && to != address(0xDEAD) && to != uniswapV2Pair){ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= _maxWalletToken, "Exceeds maximum wallet token amount"); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } 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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"burnLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cRate","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405269d3c21bcecceda1000000600b55600b54600019816200002057fe5b0660001903600c556040518060400160405280600881526020017f506f6c79506f6e79000000000000000000000000000000000000000000000000815250600e908051906020019062000075929190620007ce565b506040518060400160405280600481526020017f504f4e5900000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c3929190620007ce565b506009601060006101000a81548160ff021916908360ff160217905550600260115560115460125560086013556013546014556001601560016101000a81548160ff021916908315150217905550670de0b6b3a7640000601655655af3107a400060175569d3c20dee1639f99c000060185566470de4df8200006019553480156200014d57600080fd5b506000620001606200069160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001b26200069960201b60201c565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200025e6200069960201b60201c565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c5460046000620002b56200069960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073a5e0829caced8ffdd4de3c43696c57f7d7a678ff90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035357600080fd5b505afa15801562000368573d6000803e3d6000fd5b505050506040513d60208110156200037f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003f357600080fd5b505afa15801562000408573d6000803e3d6000fd5b505050506040513d60208110156200041f57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200049a57600080fd5b505af1158015620004af573d6000803e3d6000fd5b505050506040513d6020811015620004c657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600760006200055a620006a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006136200069160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef62000675600b54620006ca60201b60201c565b6040518082815260200191505060405180910390a35062000874565b600033905090565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000620007036018546040518060600160405280602a815260200162005b5c602a9139846200070a60201b62002d2f179092919060201c565b9050919050565b6000838311158290620007bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200077f57808201518184015260208101905062000762565b50505050905090810190601f168015620007ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200081157805160ff191683800117855562000842565b8280016001018555821562000842579182015b828111156200084157825182559160200191906001019062000824565b5b50905062000851919062000855565b5090565b5b808211156200087057600081600090555060010162000856565b5090565b60805160601c60a05160601c61529b620008c16000398061196e528061327d52806133e1525080610fae52806140d552806141c152806141e852806142f3528061431a525061529b6000f3fe60806040526004361061023f5760003560e01c80636bc87c3a1161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610c73578063dd46706414610cae578063dd62ed3e14610ce9578063ea2f0b3714610d6e578063f2fde38b14610dbf57610246565b8063a457c2d714610b12578063a69df4b514610b83578063a9059cbb14610b9a578063b6c5232414610c0b578063c49b9a8014610c3657610246565b806387cb3130116100f257806387cb31301461095e57806388f820201461099f5780638da5cb5b14610a065780638ee88c5314610a4757806395d89b4114610a8257610246565b80636bc87c3a1461086157806370a082311461088c578063715018a6146108f157806378109e54146109085780637d1db4a51461093357610246565b80633685d419116101bc5780634549b039116101805780634549b039146106e057806349bd5a5e1461073b5780634a74bb021461077c57806352390c02146107a95780635342acb4146107fa57610246565b80633685d4191461056757806339509351146105b85780633b124fe7146106295780633bd5d17314610654578063437823ec1461068f57610246565b806318160ddd1161020357806318160ddd146103f357806323b872dd1461041e578063265744f1146104af5780632d838119146104ea578063313ce5671461053957610246565b8063061c82d01461024b57806306fdde0314610286578063095ea7b31461031657806313114a9d146103875780631694505e146103b257610246565b3661024657005b600080fd5b34801561025757600080fd5b506102846004803603602081101561026e57600080fd5b8101908080359060200190929190505050610e10565b005b34801561029257600080fd5b5061029b610ee2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102db5780820151818401526020810190506102c0565b50505050905090810190601f1680156103085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032257600080fd5b5061036f6004803603604081101561033957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f84565b60405180821515815260200191505060405180910390f35b34801561039357600080fd5b5061039c610fa2565b6040518082815260200191505060405180910390f35b3480156103be57600080fd5b506103c7610fac565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ff57600080fd5b50610408610fd0565b6040518082815260200191505060405180910390f35b34801561042a57600080fd5b506104976004803603606081101561044157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fe2565b60405180821515815260200191505060405180910390f35b3480156104bb57600080fd5b506104e8600480360360208110156104d257600080fd5b81019080803590602001909291905050506110bb565b005b3480156104f657600080fd5b506105236004803603602081101561050d57600080fd5b8101908080359060200190929190505050611123565b6040518082815260200191505060405180910390f35b34801561054557600080fd5b5061054e6111a7565b604051808260ff16815260200191505060405180910390f35b34801561057357600080fd5b506105b66004803603602081101561058a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111be565b005b3480156105c457600080fd5b50610611600480360360408110156105db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611548565b60405180821515815260200191505060405180910390f35b34801561063557600080fd5b5061063e6115fb565b6040518082815260200191505060405180910390f35b34801561066057600080fd5b5061068d6004803603602081101561067757600080fd5b8101908080359060200190929190505050611601565b005b34801561069b57600080fd5b506106de600480360360208110156106b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611792565b005b3480156106ec57600080fd5b506107256004803603604081101561070357600080fd5b81019080803590602001909291908035151590602001909291905050506118b5565b6040518082815260200191505060405180910390f35b34801561074757600080fd5b5061075061196c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078857600080fd5b50610791611990565b60405180821515815260200191505060405180910390f35b3480156107b557600080fd5b506107f8600480360360208110156107cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a3565b005b34801561080657600080fd5b506108496004803603602081101561081d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbd565b60405180821515815260200191505060405180910390f35b34801561086d57600080fd5b50610876611d13565b6040518082815260200191505060405180910390f35b34801561089857600080fd5b506108db600480360360208110156108af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d19565b6040518082815260200191505060405180910390f35b3480156108fd57600080fd5b50610906611eb1565b005b34801561091457600080fd5b5061091d612037565b6040518082815260200191505060405180910390f35b34801561093f57600080fd5b5061094861203d565b6040518082815260200191505060405180910390f35b34801561096a57600080fd5b50610973612043565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ab57600080fd5b506109ee600480360360208110156109c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206d565b60405180821515815260200191505060405180910390f35b348015610a1257600080fd5b50610a1b6120c3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5357600080fd5b50610a8060048036036020811015610a6a57600080fd5b81019080803590602001909291905050506120ec565b005b348015610a8e57600080fd5b50610a976121be565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ad7578082015181840152602081019050610abc565b50505050905090810190601f168015610b045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b1e57600080fd5b50610b6b60048036036040811015610b3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612260565b60405180821515815260200191505060405180910390f35b348015610b8f57600080fd5b50610b9861232d565b005b348015610ba657600080fd5b50610bf360048036036040811015610bbd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061254a565b60405180821515815260200191505060405180910390f35b348015610c1757600080fd5b50610c20612568565b6040518082815260200191505060405180910390f35b348015610c4257600080fd5b50610c7160048036036020811015610c5957600080fd5b81019080803515159060200190929190505050612572565b005b348015610c7f57600080fd5b50610cac60048036036020811015610c9657600080fd5b8101908080359060200190929190505050612690565b005b348015610cba57600080fd5b50610ce760048036036020811015610cd157600080fd5b8101908080359060200190929190505050612789565b005b348015610cf557600080fd5b50610d5860048036036040811015610d0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061297a565b6040518082815260200191505060405180910390f35b348015610d7a57600080fd5b50610dbd60048036036020811015610d9157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a01565b005b348015610dcb57600080fd5b50610e0e60048036036020811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b24565b005b610e18612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f7a5780601f10610f4f57610100808354040283529160200191610f7a565b820191906000526020600020905b815481529060010190602001808311610f5d57829003601f168201915b5050505050905090565b6000610f98610f91612def565b8484612df7565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610fdd600b54612fee565b905090565b6000610fef848484613026565b6110b084610ffb612def565b6110ab8560405180606001604052806028815260200161515860289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611061612def565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135219092919063ffffffff16565b612df7565b600190509392505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110fc6135e1565b73ffffffffffffffffffffffffffffffffffffffff16141561112057806018819055505b50565b6000600c54821115611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061507a602a913960400191505060405180910390fd5b600061118a6135e9565b905061119f818461361490919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b6111c6612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600980549050811015611544578173ffffffffffffffffffffffffffffffffffffffff166009828154811061137957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611537576009600160098054905003815481106113d557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009828154811061140d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806114fd57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611544565b8080600101915050611348565b5050565b60006115f1611555612def565b846115ec8560066000611566612def565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b612df7565b6001905092915050565b60115481565b600061160b612def565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806151f2602c913960400191505060405180910390fd5b60006116bb836136e6565b5050505050905061171481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061176c81600c5461374290919063ffffffff16565b600c8190555061178783600d5461365e90919063ffffffff16565b600d81905550505050565b61179a612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161194f57600061193f846136e6565b5050505050905080915050611966565b600061195a846136e6565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b6119ab612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bff57611bbb600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611123565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dc857611dc1611dbc600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611123565b612fee565b9050611eac565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e6157600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611eac565b611ea9600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611123565b90505b919050565b611eb9612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b60165481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120f4612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122565780601f1061222b57610100808354040283529160200191612256565b820191906000526020600020905b81548152906001019060200180831161223957829003601f168201915b5050505050905090565b600061232361226d612def565b8461231e856040518060600160405280602581526020016152416025913960066000612297612def565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135219092919063ffffffff16565b612df7565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061521e6023913960400191505060405180910390fd5b600354421161244a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061255e612557612def565b8484613026565b6001905092915050565b6000600354905090565b61257a612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612698612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612780606461277283600b5461378c90919063ffffffff16565b61361490919063ffffffff16565b60168190555050565b612791612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600381905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a09612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ac9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612b2c612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150a46026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290612ddc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612da1578082015181840152602081019050612d86565b50505050905090810190601f168015612dce5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806151ce6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806150ca6022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061301f6018546040518060600160405280602a815260200161507a602a913984612d2f9092919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151a96025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613132576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150576023913960400191505060405180910390fd5b6000811161318b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806151806029913960400191505060405180910390fd5b613193612043565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561320157506131d1612043565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561323a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613274575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132cc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133985760165481111561332c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061510f6028913960400191505060405180910390fd5b600061333783611d19565b90506019548282011115613396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150ec6023913960400191505060405180910390fd5b505b60006133a330611d19565b905060165481106133b45760165490505b600060175482101590508080156133d85750601560009054906101000a900460ff16155b801561343057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134485750601560019054906101000a900460ff165b1561345c57601754915061345b82613812565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135035750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561350d57600090505b613519868686846138f4565b505050505050565b60008383111582906135ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613593578082015181840152602081019050613578565b50505050905090810190601f1680156135c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b60008060006135f6613c05565b9150915061360d818361361490919063ffffffff16565b9250505090565b600061365683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e96565b905092915050565b6000808284019050838110156136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006136fd8a613f5c565b925092509250600080600061371b8d86866137166135e9565b613fb6565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061378483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613521565b905092915050565b60008083141561379f576000905061380c565b60008284029050828482816137b057fe5b0414613807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151376021913960400191505060405180910390fd5b809150505b92915050565b6001601560006101000a81548160ff021916908315150217905550600061384360028361361490919063ffffffff16565b9050600061385a828461374290919063ffffffff16565b9050600047905061386a8361403f565b600061387f824761374290919063ffffffff16565b905061388b83826142ed565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b806139025761390161443e565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139a55750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139ba576139b5848484614481565b613bf1565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a5d5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a7257613a6d8484846146e1565b613bf0565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b165750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b2b57613b26848484614941565b613bef565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613bcd5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613be257613bdd848484614b0c565b613bee565b613bed848484614941565b5b5b5b5b80613bff57613bfe614e01565b5b50505050565b6000806000600c5490506000600b54905060005b600980549050811015613e5957826004600060098481548110613c3857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613d1f5750816005600060098481548110613cb757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d3657600c54600b5494509450505050613e92565b613dbf6004600060098481548110613d4a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461374290919063ffffffff16565b9250613e4a6005600060098481548110613dd557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361374290919063ffffffff16565b91508080600101915050613c19565b50613e71600b54600c5461361490919063ffffffff16565b821015613e8957600c54600b54935093505050613e92565b81819350935050505b9091565b60008083118290613f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f07578082015181840152602081019050613eec565b50505050905090810190601f168015613f345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613f4e57fe5b049050809150509392505050565b600080600080613f6b85614e15565b90506000613f7886614e46565b90506000613fa182613f93858a61374290919063ffffffff16565b61374290919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613fcf858961378c90919063ffffffff16565b90506000613fe6868961378c90919063ffffffff16565b90506000613ffd878961378c90919063ffffffff16565b9050600061402682614018858761374290919063ffffffff16565b61374290919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff8111801561405957600080fd5b506040519080825280602002602001820160405280156140885781602001602082028036833780820191505090505b509050308160008151811061409957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561413957600080fd5b505afa15801561414d573d6000803e3d6000fd5b505050506040513d602081101561416357600080fd5b81019080805190602001909291905050508160018151811061418157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141e6307f000000000000000000000000000000000000000000000000000000000000000084612df7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156142a857808201518184015260208101905061428d565b505050509050019650505050505050600060405180830381600087803b1580156142d157600080fd5b505af11580156142e5573d6000803e3d6000fd5b505050505050565b614318307f000000000000000000000000000000000000000000000000000000000000000084612df7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806143626120c3565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156143e757600080fd5b505af11580156143fb573d6000803e3d6000fd5b50505050506040513d606081101561441257600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060115414801561445257506000601354145b1561445c5761447f565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080614493876136e6565b9550955095509550955095506144f187600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061458686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061461b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061466781614e77565b614671848361501c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806146f3876136e6565b95509550955095509550955061475186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147e683600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061487b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148c781614e77565b6148d1848361501c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614953876136e6565b9550955095509550955095506149b186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a4685600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a9281614e77565b614a9c848361501c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614b1e876136e6565b955095509550955095509550614b7c87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c1186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ca683600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d3b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d8781614e77565b614d91848361501c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601254601181905550601454601381905550565b6000614e3f6064614e316011548561378c90919063ffffffff16565b61361490919063ffffffff16565b9050919050565b6000614e706064614e626013548561378c90919063ffffffff16565b61361490919063ffffffff16565b9050919050565b6000614e816135e9565b90506000614e98828461378c90919063ffffffff16565b9050614eec81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561501757614fd383600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61503182600c5461374290919063ffffffff16565b600c8190555061504c81600d5461365e90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f756e745472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a4737e28a5340505340bc0f3ca1493ce65ef317e3e3fe821533a22dcaf11a2f164736f6c634300060c0033416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73
Deployed Bytecode
0x60806040526004361061023f5760003560e01c80636bc87c3a1161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610c73578063dd46706414610cae578063dd62ed3e14610ce9578063ea2f0b3714610d6e578063f2fde38b14610dbf57610246565b8063a457c2d714610b12578063a69df4b514610b83578063a9059cbb14610b9a578063b6c5232414610c0b578063c49b9a8014610c3657610246565b806387cb3130116100f257806387cb31301461095e57806388f820201461099f5780638da5cb5b14610a065780638ee88c5314610a4757806395d89b4114610a8257610246565b80636bc87c3a1461086157806370a082311461088c578063715018a6146108f157806378109e54146109085780637d1db4a51461093357610246565b80633685d419116101bc5780634549b039116101805780634549b039146106e057806349bd5a5e1461073b5780634a74bb021461077c57806352390c02146107a95780635342acb4146107fa57610246565b80633685d4191461056757806339509351146105b85780633b124fe7146106295780633bd5d17314610654578063437823ec1461068f57610246565b806318160ddd1161020357806318160ddd146103f357806323b872dd1461041e578063265744f1146104af5780632d838119146104ea578063313ce5671461053957610246565b8063061c82d01461024b57806306fdde0314610286578063095ea7b31461031657806313114a9d146103875780631694505e146103b257610246565b3661024657005b600080fd5b34801561025757600080fd5b506102846004803603602081101561026e57600080fd5b8101908080359060200190929190505050610e10565b005b34801561029257600080fd5b5061029b610ee2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102db5780820151818401526020810190506102c0565b50505050905090810190601f1680156103085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032257600080fd5b5061036f6004803603604081101561033957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f84565b60405180821515815260200191505060405180910390f35b34801561039357600080fd5b5061039c610fa2565b6040518082815260200191505060405180910390f35b3480156103be57600080fd5b506103c7610fac565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ff57600080fd5b50610408610fd0565b6040518082815260200191505060405180910390f35b34801561042a57600080fd5b506104976004803603606081101561044157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fe2565b60405180821515815260200191505060405180910390f35b3480156104bb57600080fd5b506104e8600480360360208110156104d257600080fd5b81019080803590602001909291905050506110bb565b005b3480156104f657600080fd5b506105236004803603602081101561050d57600080fd5b8101908080359060200190929190505050611123565b6040518082815260200191505060405180910390f35b34801561054557600080fd5b5061054e6111a7565b604051808260ff16815260200191505060405180910390f35b34801561057357600080fd5b506105b66004803603602081101561058a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111be565b005b3480156105c457600080fd5b50610611600480360360408110156105db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611548565b60405180821515815260200191505060405180910390f35b34801561063557600080fd5b5061063e6115fb565b6040518082815260200191505060405180910390f35b34801561066057600080fd5b5061068d6004803603602081101561067757600080fd5b8101908080359060200190929190505050611601565b005b34801561069b57600080fd5b506106de600480360360208110156106b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611792565b005b3480156106ec57600080fd5b506107256004803603604081101561070357600080fd5b81019080803590602001909291908035151590602001909291905050506118b5565b6040518082815260200191505060405180910390f35b34801561074757600080fd5b5061075061196c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078857600080fd5b50610791611990565b60405180821515815260200191505060405180910390f35b3480156107b557600080fd5b506107f8600480360360208110156107cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a3565b005b34801561080657600080fd5b506108496004803603602081101561081d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbd565b60405180821515815260200191505060405180910390f35b34801561086d57600080fd5b50610876611d13565b6040518082815260200191505060405180910390f35b34801561089857600080fd5b506108db600480360360208110156108af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d19565b6040518082815260200191505060405180910390f35b3480156108fd57600080fd5b50610906611eb1565b005b34801561091457600080fd5b5061091d612037565b6040518082815260200191505060405180910390f35b34801561093f57600080fd5b5061094861203d565b6040518082815260200191505060405180910390f35b34801561096a57600080fd5b50610973612043565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ab57600080fd5b506109ee600480360360208110156109c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206d565b60405180821515815260200191505060405180910390f35b348015610a1257600080fd5b50610a1b6120c3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5357600080fd5b50610a8060048036036020811015610a6a57600080fd5b81019080803590602001909291905050506120ec565b005b348015610a8e57600080fd5b50610a976121be565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ad7578082015181840152602081019050610abc565b50505050905090810190601f168015610b045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b1e57600080fd5b50610b6b60048036036040811015610b3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612260565b60405180821515815260200191505060405180910390f35b348015610b8f57600080fd5b50610b9861232d565b005b348015610ba657600080fd5b50610bf360048036036040811015610bbd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061254a565b60405180821515815260200191505060405180910390f35b348015610c1757600080fd5b50610c20612568565b6040518082815260200191505060405180910390f35b348015610c4257600080fd5b50610c7160048036036020811015610c5957600080fd5b81019080803515159060200190929190505050612572565b005b348015610c7f57600080fd5b50610cac60048036036020811015610c9657600080fd5b8101908080359060200190929190505050612690565b005b348015610cba57600080fd5b50610ce760048036036020811015610cd157600080fd5b8101908080359060200190929190505050612789565b005b348015610cf557600080fd5b50610d5860048036036040811015610d0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061297a565b6040518082815260200191505060405180910390f35b348015610d7a57600080fd5b50610dbd60048036036020811015610d9157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a01565b005b348015610dcb57600080fd5b50610e0e60048036036020811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b24565b005b610e18612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f7a5780601f10610f4f57610100808354040283529160200191610f7a565b820191906000526020600020905b815481529060010190602001808311610f5d57829003601f168201915b5050505050905090565b6000610f98610f91612def565b8484612df7565b6001905092915050565b6000600d54905090565b7f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff81565b6000610fdd600b54612fee565b905090565b6000610fef848484613026565b6110b084610ffb612def565b6110ab8560405180606001604052806028815260200161515860289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611061612def565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135219092919063ffffffff16565b612df7565b600190509392505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110fc6135e1565b73ffffffffffffffffffffffffffffffffffffffff16141561112057806018819055505b50565b6000600c54821115611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061507a602a913960400191505060405180910390fd5b600061118a6135e9565b905061119f818461361490919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b6111c6612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600980549050811015611544578173ffffffffffffffffffffffffffffffffffffffff166009828154811061137957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611537576009600160098054905003815481106113d557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009828154811061140d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806114fd57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611544565b8080600101915050611348565b5050565b60006115f1611555612def565b846115ec8560066000611566612def565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b612df7565b6001905092915050565b60115481565b600061160b612def565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806151f2602c913960400191505060405180910390fd5b60006116bb836136e6565b5050505050905061171481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061176c81600c5461374290919063ffffffff16565b600c8190555061178783600d5461365e90919063ffffffff16565b600d81905550505050565b61179a612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161194f57600061193f846136e6565b5050505050905080915050611966565b600061195a846136e6565b50505050915050809150505b92915050565b7f000000000000000000000000760b132e33440bbfa25682de6e2a7613513e25b881565b601560019054906101000a900460ff1681565b6119ab612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bff57611bbb600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611123565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dc857611dc1611dbc600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611123565b612fee565b9050611eac565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e6157600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611eac565b611ea9600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611123565b90505b919050565b611eb9612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b60165481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120f4612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122565780601f1061222b57610100808354040283529160200191612256565b820191906000526020600020905b81548152906001019060200180831161223957829003601f168201915b5050505050905090565b600061232361226d612def565b8461231e856040518060600160405280602581526020016152416025913960066000612297612def565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135219092919063ffffffff16565b612df7565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061521e6023913960400191505060405180910390fd5b600354421161244a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061255e612557612def565b8484613026565b6001905092915050565b6000600354905090565b61257a612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612698612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612780606461277283600b5461378c90919063ffffffff16565b61361490919063ffffffff16565b60168190555050565b612791612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600381905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a09612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ac9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612b2c612def565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150a46026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290612ddc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612da1578082015181840152602081019050612d86565b50505050905090810190601f168015612dce5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806151ce6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806150ca6022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061301f6018546040518060600160405280602a815260200161507a602a913984612d2f9092919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151a96025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613132576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150576023913960400191505060405180910390fd5b6000811161318b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806151806029913960400191505060405180910390fd5b613193612043565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561320157506131d1612043565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561323a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613274575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132cc57507f000000000000000000000000760b132e33440bbfa25682de6e2a7613513e25b873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133985760165481111561332c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061510f6028913960400191505060405180910390fd5b600061333783611d19565b90506019548282011115613396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150ec6023913960400191505060405180910390fd5b505b60006133a330611d19565b905060165481106133b45760165490505b600060175482101590508080156133d85750601560009054906101000a900460ff16155b801561343057507f000000000000000000000000760b132e33440bbfa25682de6e2a7613513e25b873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134485750601560019054906101000a900460ff165b1561345c57601754915061345b82613812565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135035750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561350d57600090505b613519868686846138f4565b505050505050565b60008383111582906135ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613593578082015181840152602081019050613578565b50505050905090810190601f1680156135c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b60008060006135f6613c05565b9150915061360d818361361490919063ffffffff16565b9250505090565b600061365683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e96565b905092915050565b6000808284019050838110156136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006136fd8a613f5c565b925092509250600080600061371b8d86866137166135e9565b613fb6565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061378483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613521565b905092915050565b60008083141561379f576000905061380c565b60008284029050828482816137b057fe5b0414613807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151376021913960400191505060405180910390fd5b809150505b92915050565b6001601560006101000a81548160ff021916908315150217905550600061384360028361361490919063ffffffff16565b9050600061385a828461374290919063ffffffff16565b9050600047905061386a8361403f565b600061387f824761374290919063ffffffff16565b905061388b83826142ed565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b806139025761390161443e565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139a55750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139ba576139b5848484614481565b613bf1565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a5d5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a7257613a6d8484846146e1565b613bf0565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b165750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b2b57613b26848484614941565b613bef565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613bcd5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613be257613bdd848484614b0c565b613bee565b613bed848484614941565b5b5b5b5b80613bff57613bfe614e01565b5b50505050565b6000806000600c5490506000600b54905060005b600980549050811015613e5957826004600060098481548110613c3857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613d1f5750816005600060098481548110613cb757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d3657600c54600b5494509450505050613e92565b613dbf6004600060098481548110613d4a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461374290919063ffffffff16565b9250613e4a6005600060098481548110613dd557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361374290919063ffffffff16565b91508080600101915050613c19565b50613e71600b54600c5461361490919063ffffffff16565b821015613e8957600c54600b54935093505050613e92565b81819350935050505b9091565b60008083118290613f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f07578082015181840152602081019050613eec565b50505050905090810190601f168015613f345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613f4e57fe5b049050809150509392505050565b600080600080613f6b85614e15565b90506000613f7886614e46565b90506000613fa182613f93858a61374290919063ffffffff16565b61374290919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613fcf858961378c90919063ffffffff16565b90506000613fe6868961378c90919063ffffffff16565b90506000613ffd878961378c90919063ffffffff16565b9050600061402682614018858761374290919063ffffffff16565b61374290919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff8111801561405957600080fd5b506040519080825280602002602001820160405280156140885781602001602082028036833780820191505090505b509050308160008151811061409957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561413957600080fd5b505afa15801561414d573d6000803e3d6000fd5b505050506040513d602081101561416357600080fd5b81019080805190602001909291905050508160018151811061418157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141e6307f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff84612df7565b7f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156142a857808201518184015260208101905061428d565b505050509050019650505050505050600060405180830381600087803b1580156142d157600080fd5b505af11580156142e5573d6000803e3d6000fd5b505050505050565b614318307f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff84612df7565b7f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806143626120c3565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156143e757600080fd5b505af11580156143fb573d6000803e3d6000fd5b50505050506040513d606081101561441257600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060115414801561445257506000601354145b1561445c5761447f565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080614493876136e6565b9550955095509550955095506144f187600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061458686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061461b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061466781614e77565b614671848361501c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806146f3876136e6565b95509550955095509550955061475186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147e683600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061487b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148c781614e77565b6148d1848361501c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614953876136e6565b9550955095509550955095506149b186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a4685600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a9281614e77565b614a9c848361501c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614b1e876136e6565b955095509550955095509550614b7c87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c1186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ca683600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d3b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d8781614e77565b614d91848361501c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601254601181905550601454601381905550565b6000614e3f6064614e316011548561378c90919063ffffffff16565b61361490919063ffffffff16565b9050919050565b6000614e706064614e626013548561378c90919063ffffffff16565b61361490919063ffffffff16565b9050919050565b6000614e816135e9565b90506000614e98828461378c90919063ffffffff16565b9050614eec81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561501757614fd383600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365e90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61503182600c5461374290919063ffffffff16565b600c8190555061504c81600d5461365e90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f756e745472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a4737e28a5340505340bc0f3ca1493ce65ef317e3e3fe821533a22dcaf11a2f164736f6c634300060c0033
Deployed Bytecode Sourcemap
28707:19138:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36816:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31524:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32683:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33804:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29682:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31801:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32852:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31923:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34728:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31710:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35444:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33173:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29498:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33899:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36579:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34284:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29740:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29815:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34989:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40660:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29581:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32056:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19306:148;;;;;;;;;;;;;:::i;:::-;;30139:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29864:47;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18664:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33676:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18573:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36922:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31615:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33399:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20312:293;;;;;;;;;;;;;:::i;:::-;;32357:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19861:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37222:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37052:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20026:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32532:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36698:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19609:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36816:98;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36900:6:::1;36890:7;:16;;;;36816:98:::0;:::o;31524:83::-;31561:13;31594:5;31587:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31524:83;:::o;32683:161::-;32758:4;32775:39;32784:12;:10;:12::i;:::-;32798:7;32807:6;32775:8;:39::i;:::-;32832:4;32825:11;;32683:161;;;;:::o;33804:87::-;33846:7;33873:10;;33866:17;;33804:87;:::o;29682:51::-;;;:::o;31801:110::-;31854:7;31881:22;31895:7;;31881:13;:22::i;:::-;31873:30;;31801:110;:::o;32852:313::-;32950:4;32967:36;32977:6;32985:9;32996:6;32967:9;:36::i;:::-;33014:121;33023:6;33031:12;:10;:12::i;:::-;33045:89;33083:6;33045:89;;;;;;;;;;;;;;;;;:11;:19;33057:6;33045:19;;;;;;;;;;;;;;;:33;33065:12;:10;:12::i;:::-;33045:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;33014:8;:121::i;:::-;33153:4;33146:11;;32852:313;;;;;:::o;31923:125::-;32003:9;;;;;;;;;;;31981:31;;:18;:16;:18::i;:::-;:31;;;31978:62;;;32036:4;32027:6;:13;;;;31978:62;31923:125;:::o;34728:253::-;34794:7;34833;;34822;:18;;34814:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34898:19;34921:10;:8;:10::i;:::-;34898:33;;34949:24;34961:11;34949:7;:11;;:24;;;;:::i;:::-;34942:31;;;34728:253;;;:::o;31710:83::-;31751:5;31776:9;;;;;;;;;;;31769:16;;31710:83;:::o;35444:479::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35526:11:::1;:20;35538:7;35526:20;;;;;;;;;;;;;;;;;;;;;;;;;35518:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35594:9;35589:327;35613:9;:16;;;;35609:1;:20;35589:327;;;35671:7;35655:23;;:9;35665:1;35655:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;35651:254;;;35714:9;35743:1;35724:9;:16;;;;:20;35714:31;;;;;;;;;;;;;;;;;;;;;;;;;35699:9;35709:1;35699:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35783:1;35764:7;:16;35772:7;35764:16;;;;;;;;;;;;;;;:20;;;;35826:5;35803:11;:20;35815:7;35803:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35850:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35884:5;;35651:254;35631:3;;;;;;;35589:327;;;;35444:479:::0;:::o;33173:218::-;33261:4;33278:83;33287:12;:10;:12::i;:::-;33301:7;33310:50;33349:10;33310:11;:25;33322:12;:10;:12::i;:::-;33310:25;;;;;;;;;;;;;;;:34;33336:7;33310:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;33278:8;:83::i;:::-;33379:4;33372:11;;33173:218;;;;:::o;29498:26::-;;;;:::o;33899:377::-;33951:14;33968:12;:10;:12::i;:::-;33951:29;;34000:11;:19;34012:6;34000:19;;;;;;;;;;;;;;;;;;;;;;;;;33999:20;33991:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34080:15;34104:19;34115:7;34104:10;:19::i;:::-;34079:44;;;;;;;34152:28;34172:7;34152;:15;34160:6;34152:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34134:7;:15;34142:6;34134:15;;;;;;;;;;;;;;;:46;;;;34201:20;34213:7;34201;;:11;;:20;;;;:::i;:::-;34191:7;:30;;;;34245:23;34260:7;34245:10;;:14;;:23;;;;:::i;:::-;34232:10;:36;;;;33899:377;;;:::o;36579:111::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36678:4:::1;36648:18;:27;36667:7;36648:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36579:111:::0;:::o;34284:436::-;34374:7;34413;;34402;:18;;34394:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34472:17;34467:246;;34507:15;34531:19;34542:7;34531:10;:19::i;:::-;34506:44;;;;;;;34572:7;34565:14;;;;;34467:246;34614:23;34645:19;34656:7;34645:10;:19::i;:::-;34612:52;;;;;;;34686:15;34679:22;;;34284:436;;;;;:::o;29740:38::-;;;:::o;29815:40::-;;;;;;;;;;;;;:::o;34989:447::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35186:11:::1;:20;35198:7;35186:20;;;;;;;;;;;;;;;;;;;;;;;;;35185:21;35177:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35271:1;35252:7;:16;35260:7;35252:16;;;;;;;;;;;;;;;;:20;35249:108;;;35308:37;35328:7;:16;35336:7;35328:16;;;;;;;;;;;;;;;;35308:19;:37::i;:::-;35289:7;:16;35297:7;35289:16;;;;;;;;;;;;;;;:56;;;;35249:108;35390:4;35367:11;:20;35379:7;35367:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35405:9;35420:7;35405:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34989:447:::0;:::o;40660:123::-;40724:4;40748:18;:27;40767:7;40748:27;;;;;;;;;;;;;;;;;;;;;;;;;40741:34;;40660:123;;;:::o;29581:32::-;;;;:::o;32056:293::-;32122:7;32156:9;;;;;;;;;;;32145:20;;:7;:20;;;32142:84;;;32174:52;32188:37;32208:7;:16;32216:7;32208:16;;;;;;;;;;;;;;;;32188:19;:37::i;:::-;32174:13;:52::i;:::-;32167:59;;;;32142:84;32241:11;:20;32253:7;32241:20;;;;;;;;;;;;;;;;;;;;;;;;;32237:49;;;32270:7;:16;32278:7;32270:16;;;;;;;;;;;;;;;;32263:23;;;;32237:49;32304:37;32324:7;:16;32332:7;32324:16;;;;;;;;;;;;;;;;32304:19;:37::i;:::-;32297:44;;32056:293;;;;:::o;19306:148::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19413:1:::1;19376:40;;19397:6;::::0;::::1;;;;;;;;19376:40;;;;;;;;;;;;19444:1;19427:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;19306:148::o:0;30139:50::-;;;;:::o;29864:47::-;;;;:::o;18664:78::-;18702:7;18729:5;;;;;;;;;;;18722:12;;18664:78;:::o;33676:120::-;33744:4;33768:11;:20;33780:7;33768:20;;;;;;;;;;;;;;;;;;;;;;;;;33761:27;;33676:120;;;:::o;18573:79::-;18611:7;18638:6;;;;;;;;;;;18631:13;;18573:79;:::o;36922:122::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37024:12:::1;37008:13;:28;;;;36922:122:::0;:::o;31615:87::-;31654:13;31687:7;31680:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31615:87;:::o;33399:269::-;33492:4;33509:129;33518:12;:10;:12::i;:::-;33532:7;33541:96;33580:15;33541:96;;;;;;;;;;;;;;;;;:11;:25;33553:12;:10;:12::i;:::-;33541:25;;;;;;;;;;;;;;;:34;33567:7;33541:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;33509:8;:129::i;:::-;33656:4;33649:11;;33399:269;;;;:::o;20312:293::-;20382:10;20364:28;;:14;;;;;;;;;;;:28;;;20356:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20457:9;;20451:3;:15;20443:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20548:14;;;;;;;;;;;20519:44;;20540:6;;;;;;;;;;20519:44;;;;;;;;;;;;20583:14;;;;;;;;;;;20574:6;;:23;;;;;;;;;;;;;;;;;;20312:293::o;32357:167::-;32435:4;32452:42;32462:12;:10;:12::i;:::-;32476:9;32487:6;32452:9;:42::i;:::-;32512:4;32505:11;;32357:167;;;;:::o;19861:89::-;19906:7;19933:9;;19926:16;;19861:89;:::o;37222:171::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37323:8:::1;37299:21;;:32;;;;;;;;;;;;;;;;;;37347:38;37376:8;37347:38;;;;;;;;;;;;;;;;;;;;37222:171:::0;:::o;37052:162::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37146:60:::1;37190:5;37146:25;37158:12;37146:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;37131:12;:75;;;;37052:162:::0;:::o;20026:214::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20107:6:::1;::::0;::::1;;;;;;;;20090:14;;:23;;;;;;;;;;;;;;;;;;20141:1;20124:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20172:4;20166:3;:10;20154:9;:22;;;;20229:1;20192:40;;20213:6;::::0;::::1;;;;;;;;20192:40;;;;;;;;;;;;20026:214:::0;:::o;32532:143::-;32613:7;32640:11;:18;32652:5;32640:18;;;;;;;;;;;;;;;:27;32659:7;32640:27;;;;;;;;;;;;;;;;32633:34;;32532:143;;;;:::o;36698:110::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36795:5:::1;36765:18;:27;36784:7;36765:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36698:110:::0;:::o;19609:244::-;18885:12;:10;:12::i;:::-;18875:22;;:6;;;;;;;;;;:22;;;18867:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19718:1:::1;19698:22;;:8;:22;;;;19690:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19808:8;19779:38;;19800:6;::::0;::::1;;;;;;;;19779:38;;;;;;;;;;;;19837:8;19828:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;19609:244:::0;:::o;7713:415::-;7799:7;8055:1;8050;:6;;8058:12;8042:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8082:9;8098:1;8094;:5;8082:17;;8119:1;8112:8;;;7713:415;;;;;:::o;10796:106::-;10849:15;10884:10;10877:17;;10796:106;:::o;40791:337::-;40901:1;40884:19;;:5;:19;;;;40876:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40982:1;40963:21;;:7;:21;;;;40955:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41066:6;41036:11;:18;41048:5;41036:18;;;;;;;;;;;;;;;:27;41055:7;41036:27;;;;;;;;;;;;;;;:36;;;;41104:7;41088:32;;41097:5;41088:32;;;41113:6;41088:32;;;;;;;;;;;;;;;;;;40791:337;;;:::o;31357:159::-;31418:7;31445:63;31456:6;;31445:63;;;;;;;;;;;;;;;;;:6;:10;;:63;;;;;:::i;:::-;31438:70;;31357:159;;;:::o;41136:2032::-;41274:1;41258:18;;:4;:18;;;;41250:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41351:1;41337:16;;:2;:16;;;;41329:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41421:1;41412:6;:10;41404:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41490:7;:5;:7::i;:::-;41482:15;;:4;:15;;;;:32;;;;;41507:7;:5;:7::i;:::-;41501:13;;:2;:13;;;;41482:32;:53;;;;;41533:1;41519:16;;:2;:16;;;;41482:53;:78;;;;;41553:6;41539:21;;:2;:21;;;;41482:78;:101;;;;;41570:13;41564:19;;:2;:19;;;;41482:101;41479:385;;;41617:12;;41607:6;:22;;41599:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41689:32;41724:13;41734:2;41724:9;:13::i;:::-;41689:48;;41797:15;;41787:6;41760:24;:33;:52;;41752:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41479:385;;42158:28;42189:24;42207:4;42189:9;:24::i;:::-;42158:55;;42253:12;;42229:20;:36;42226:112;;42314:12;;42291:35;;42226:112;42350:24;42401:29;;42377:20;:53;;42350:80;;42459:19;:53;;;;;42496:16;;;;;;;;;;;42495:17;42459:53;:91;;;;;42537:13;42529:21;;:4;:21;;;;42459:91;:129;;;;;42567:21;;;;;;;;;;;42459:129;42441:318;;;42638:29;;42615:52;;42711:36;42726:20;42711:14;:36::i;:::-;42441:318;42832:12;42847:4;42832:19;;42951:18;:24;42970:4;42951:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;42979:18;:22;42998:2;42979:22;;;;;;;;;;;;;;;;;;;;;;;;;42951:50;42948:96;;;43027:5;43017:15;;42948:96;43122:38;43137:4;43142:2;43145:6;43152:7;43122:14;:38::i;:::-;41136:2032;;;;;;:::o;6779:192::-;6865:7;6898:1;6893;:6;;6901:12;6885:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6925:9;6941:1;6937;:5;6925:17;;6962:1;6955:8;;;6779:192;;;;;:::o;10910:112::-;10969:15;11004:10;10997:17;;10910:112;:::o;38852:163::-;38893:7;38914:15;38931;38950:19;:17;:19::i;:::-;38913:56;;;;38987:20;38999:7;38987;:11;;:20;;;;:::i;:::-;38980:27;;;;38852:163;:::o;8604:132::-;8662:7;8689:39;8693:1;8696;8689:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8682:46;;8604:132;;;;:::o;5876:181::-;5934:7;5954:9;5970:1;5966;:5;5954:17;;5995:1;5990;:6;;5982:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6048:1;6041:8;;;5876:181;;;;:::o;37650:419::-;37709:7;37718;37727;37736;37745;37754;37775:23;37800:12;37814:18;37836:20;37848:7;37836:11;:20::i;:::-;37774:82;;;;;;37868:15;37885:23;37910:12;37926:50;37938:7;37947:4;37953:10;37965;:8;:10::i;:::-;37926:11;:50::i;:::-;37867:109;;;;;;37995:7;38004:15;38021:4;38027:15;38044:4;38050:10;37987:74;;;;;;;;;;;;;;;;;;37650:419;;;;;;;:::o;6340:136::-;6398:7;6425:43;6429:1;6432;6425:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6418:50;;6340:136;;;;:::o;7230:471::-;7288:7;7538:1;7533;:6;7529:47;;;7563:1;7556:8;;;;7529:47;7588:9;7604:1;7600;:5;7588:17;;7633:1;7628;7624;:5;;;;;;:10;7616:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7692:1;7685:8;;;7230:471;;;;;:::o;43176:977::-;30524:4;30505:16;;:23;;;;;;;;;;;;;;;;;;43312:12:::1;43327:27;43352:1;43327:20;:24;;:27;;;;:::i;:::-;43312:42;;43365:17;43385:30;43410:4;43385:20;:24;;:30;;;;:::i;:::-;43365:50;;43693:22;43718:21;43693:46;;43784:22;43801:4;43784:16;:22::i;:::-;43937:18;43958:41;43984:14;43958:21;:25;;:41;;;;:::i;:::-;43937:62;;44049:35;44062:9;44073:10;44049:12;:35::i;:::-;44102:43;44117:4;44123:10;44135:9;44102:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30539:1;;;;30570:5:::0;30551:16;;:24;;;;;;;;;;;;;;;;;;43176:977;:::o;45352:818::-;45463:7;45459:40;;45485:14;:12;:14::i;:::-;45459:40;45516:11;:19;45528:6;45516:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;45540:11;:22;45552:9;45540:22;;;;;;;;;;;;;;;;;;;;;;;;;45539:23;45516:46;45512:597;;;45579:48;45601:6;45609:9;45620:6;45579:21;:48::i;:::-;45512:597;;;45650:11;:19;45662:6;45650:19;;;;;;;;;;;;;;;;;;;;;;;;;45649:20;:46;;;;;45673:11;:22;45685:9;45673:22;;;;;;;;;;;;;;;;;;;;;;;;;45649:46;45645:464;;;45712:46;45732:6;45740:9;45751:6;45712:19;:46::i;:::-;45645:464;;;45781:11;:19;45793:6;45781:19;;;;;;;;;;;;;;;;;;;;;;;;;45780:20;:47;;;;;45805:11;:22;45817:9;45805:22;;;;;;;;;;;;;;;;;;;;;;;;;45804:23;45780:47;45776:333;;;45844:44;45862:6;45870:9;45881:6;45844:17;:44::i;:::-;45776:333;;;45910:11;:19;45922:6;45910:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;45933:11;:22;45945:9;45933:22;;;;;;;;;;;;;;;;;;;;;;;;;45910:45;45906:203;;;45972:48;45994:6;46002:9;46013:6;45972:21;:48::i;:::-;45906:203;;;46053:44;46071:6;46079:9;46090:6;46053:17;:44::i;:::-;45906:203;45776:333;45645:464;45512:597;46125:7;46121:41;;46147:15;:13;:15::i;:::-;46121:41;45352:818;;;;:::o;39023:555::-;39073:7;39082;39102:15;39120:7;;39102:25;;39138:15;39156:7;;39138:25;;39179:9;39174:289;39198:9;:16;;;;39194:1;:20;39174:289;;;39264:7;39240;:21;39248:9;39258:1;39248:12;;;;;;;;;;;;;;;;;;;;;;;;;39240:21;;;;;;;;;;;;;;;;:31;:66;;;;39299:7;39275;:21;39283:9;39293:1;39283:12;;;;;;;;;;;;;;;;;;;;;;;;;39275:21;;;;;;;;;;;;;;;;:31;39240:66;39236:97;;;39316:7;;39325;;39308:25;;;;;;;;;39236:97;39358:34;39370:7;:21;39378:9;39388:1;39378:12;;;;;;;;;;;;;;;;;;;;;;;;;39370:21;;;;;;;;;;;;;;;;39358:7;:11;;:34;;;;:::i;:::-;39348:44;;39417:34;39429:7;:21;39437:9;39447:1;39437:12;;;;;;;;;;;;;;;;;;;;;;;;;39429:21;;;;;;;;;;;;;;;;39417:7;:11;;:34;;;;:::i;:::-;39407:44;;39216:3;;;;;;;39174:289;;;;39487:20;39499:7;;39487;;:11;;:20;;;;:::i;:::-;39477:7;:30;39473:61;;;39517:7;;39526;;39509:25;;;;;;;;39473:61;39553:7;39562;39545:25;;;;;;39023:555;;;:::o;9232:278::-;9318:7;9350:1;9346;:5;9353:12;9338:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9377:9;9393:1;9389;:5;;;;;;9377:17;;9501:1;9494:8;;;9232:278;;;;;:::o;38077:330::-;38137:7;38146;38155;38175:12;38190:24;38206:7;38190:15;:24::i;:::-;38175:39;;38225:18;38246:30;38268:7;38246:21;:30::i;:::-;38225:51;;38287:23;38313:33;38335:10;38313:17;38325:4;38313:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;38287:59;;38365:15;38382:4;38388:10;38357:42;;;;;;;;;38077:330;;;;;:::o;38415:429::-;38530:7;38539;38548;38568:15;38586:24;38598:11;38586:7;:11;;:24;;;;:::i;:::-;38568:42;;38621:12;38636:21;38645:11;38636:4;:8;;:21;;;;:::i;:::-;38621:36;;38668:18;38689:27;38704:11;38689:10;:14;;:27;;;;:::i;:::-;38668:48;;38727:23;38753:33;38775:10;38753:17;38765:4;38753:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;38727:59;;38805:7;38814:15;38831:4;38797:39;;;;;;;;;;38415:429;;;;;;;;:::o;44161:589::-;44287:21;44325:1;44311:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44287:40;;44356:4;44338;44343:1;44338:7;;;;;;;;;;;;;:23;;;;;;;;;;;44382:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44372:4;44377:1;44372:7;;;;;;;;;;;;;:32;;;;;;;;;;;44417:62;44434:4;44449:15;44467:11;44417:8;:62::i;:::-;44518:15;:66;;;44599:11;44625:1;44669:4;44696;44716:15;44518:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44161:589;;:::o;44758:513::-;44906:62;44923:4;44938:15;44956:11;44906:8;:62::i;:::-;45011:15;:31;;;45050:9;45083:4;45103:11;45129:1;45172;45215:7;:5;:7::i;:::-;45237:15;45011:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44758:513;;:::o;40285:234::-;40342:1;40331:7;;:12;:34;;;;;40364:1;40347:13;;:18;40331:34;40328:46;;;40367:7;;40328:46;40404:7;;40386:15;:25;;;;40446:13;;40422:21;:37;;;;40482:1;40472:7;:11;;;;40510:1;40494:13;:17;;;;40285:234;:::o;47271:563::-;47374:15;47391:23;47416:12;47430:23;47455:12;47469:18;47491:19;47502:7;47491:10;:19::i;:::-;47373:137;;;;;;;;;;;;47539:28;47559:7;47539;:15;47547:6;47539:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47521:7;:15;47529:6;47521:15;;;;;;;;;;;;;;;:46;;;;47596:28;47616:7;47596;:15;47604:6;47596:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47578:7;:15;47586:6;47578:15;;;;;;;;;;;;;;;:46;;;;47656:39;47679:15;47656:7;:18;47664:9;47656:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47635:7;:18;47643:9;47635:18;;;;;;;;;;;;;;;:60;;;;47706:26;47721:10;47706:14;:26::i;:::-;47743:23;47755:4;47761;47743:11;:23::i;:::-;47799:9;47782:44;;47791:6;47782:44;;;47810:15;47782:44;;;;;;;;;;;;;;;;;;47271:563;;;;;;;;;:::o;46688:575::-;46789:15;46806:23;46831:12;46845:23;46870:12;46884:18;46906:19;46917:7;46906:10;:19::i;:::-;46788:137;;;;;;;;;;;;46954:28;46974:7;46954;:15;46962:6;46954:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46936:7;:15;46944:6;46936:15;;;;;;;;;;;;;;;:46;;;;47014:39;47037:15;47014:7;:18;47022:9;47014:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46993:7;:18;47001:9;46993:18;;;;;;;;;;;;;;;:60;;;;47085:39;47108:15;47085:7;:18;47093:9;47085:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47064:7;:18;47072:9;47064:18;;;;;;;;;;;;;;;:60;;;;47135:26;47150:10;47135:14;:26::i;:::-;47172:23;47184:4;47190;47172:11;:23::i;:::-;47228:9;47211:44;;47220:6;47211:44;;;47239:15;47211:44;;;;;;;;;;;;;;;;;;46688:575;;;;;;;;;:::o;46178:502::-;46277:15;46294:23;46319:12;46333:23;46358:12;46372:18;46394:19;46405:7;46394:10;:19::i;:::-;46276:137;;;;;;;;;;;;46442:28;46462:7;46442;:15;46450:6;46442:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46424:7;:15;46432:6;46424:15;;;;;;;;;;;;;;;:46;;;;46502:39;46525:15;46502:7;:18;46510:9;46502:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46481:7;:18;46489:9;46481:18;;;;;;;;;;;;;;;:60;;;;46552:26;46567:10;46552:14;:26::i;:::-;46589:23;46601:4;46607;46589:11;:23::i;:::-;46645:9;46628:44;;46637:6;46628:44;;;46656:15;46628:44;;;;;;;;;;;;;;;;;;46178:502;;;;;;;;;:::o;35933:634::-;36036:15;36053:23;36078:12;36092:23;36117:12;36131:18;36153:19;36164:7;36153:10;:19::i;:::-;36035:137;;;;;;;;;;;;36201:28;36221:7;36201;:15;36209:6;36201:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36183:7;:15;36191:6;36183:15;;;;;;;;;;;;;;;:46;;;;36258:28;36278:7;36258;:15;36266:6;36258:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36240:7;:15;36248:6;36240:15;;;;;;;;;;;;;;;:46;;;;36318:39;36341:15;36318:7;:18;36326:9;36318:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36297:7;:18;36305:9;36297:18;;;;;;;;;;;;;;;:60;;;;36389:39;36412:15;36389:7;:18;36397:9;36389:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36368:7;:18;36376:9;36368:18;;;;;;;;;;;;;;;:60;;;;36439:26;36454:10;36439:14;:26::i;:::-;36476:23;36488:4;36494;36476:11;:23::i;:::-;36532:9;36515:44;;36524:6;36515:44;;;36543:15;36515:44;;;;;;;;;;;;;;;;;;35933:634;;;;;;;;;:::o;40527:125::-;40581:15;;40571:7;:25;;;;40623:21;;40607:13;:37;;;;40527:125::o;39949:154::-;40013:7;40040:55;40079:5;40040:20;40052:7;;40040;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;40033:62;;39949:154;;;:::o;40111:166::-;40181:7;40208:61;40253:5;40208:26;40220:13;;40208:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;40201:68;;40111:166;;;:::o;39586:355::-;39649:19;39672:10;:8;:10::i;:::-;39649:33;;39693:18;39714:27;39729:11;39714:10;:14;;:27;;;;:::i;:::-;39693:48;;39777:38;39804:10;39777:7;:22;39793:4;39777:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39752:7;:22;39768:4;39752:22;;;;;;;;;;;;;;;:63;;;;39829:11;:26;39849:4;39829:26;;;;;;;;;;;;;;;;;;;;;;;;;39826:107;;;39895:38;39922:10;39895:7;:22;39911:4;39895:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39870:7;:22;39886:4;39870:22;;;;;;;;;;;;;;;:63;;;;39826:107;39586:355;;;:::o;37495:147::-;37573:17;37585:4;37573:7;;:11;;:17;;;;:::i;:::-;37563:7;:27;;;;37614:20;37629:4;37614:10;;:14;;:20;;;;:::i;:::-;37601:10;:33;;;;37495:147;;:::o
Swarm Source
ipfs://a4737e28a5340505340bc0f3ca1493ce65ef317e3e3fe821533a22dcaf11a2f1
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.