More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 102,818 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 60495748 | 5 days ago | IN | 0 AVAX | 0.00002945 | ||||
Approve | 60495199 | 5 days ago | IN | 0 AVAX | 0.00002945 | ||||
Approve | 60495082 | 5 days ago | IN | 0 AVAX | 0.00002945 | ||||
Transfer | 60435045 | 6 days ago | IN | 0 AVAX | 0.00001634 | ||||
Transfer | 60434869 | 6 days ago | IN | 0 AVAX | 0.00000604 | ||||
Transfer | 60434867 | 6 days ago | IN | 0 AVAX | 0.00000832 | ||||
Transfer | 60434863 | 6 days ago | IN | 0 AVAX | 0.00000885 | ||||
Transfer | 60434861 | 6 days ago | IN | 0 AVAX | 0.00001638 | ||||
Transfer | 60434720 | 6 days ago | IN | 0 AVAX | 0.00002026 | ||||
Approve | 60242075 | 9 days ago | IN | 0 AVAX | 0.00007651 | ||||
Approve | 59524566 | 22 days ago | IN | 0 AVAX | 0.00008298 | ||||
Transfer | 59524531 | 22 days ago | IN | 0 AVAX | 0.0001807 | ||||
Transfer | 59524385 | 22 days ago | IN | 0 AVAX | 0.00007812 | ||||
Transfer | 59524383 | 22 days ago | IN | 0 AVAX | 0.00542489 | ||||
Transfer | 59524382 | 22 days ago | IN | 0 AVAX | 0.00016577 | ||||
Transfer | 59524235 | 22 days ago | IN | 0 AVAX | 0.00057358 | ||||
Transfer | 59524231 | 22 days ago | IN | 0 AVAX | 0.00198275 | ||||
Transfer | 59524230 | 22 days ago | IN | 0 AVAX | 0.00021707 | ||||
Approve | 59524080 | 22 days ago | IN | 0 AVAX | 0.00009272 | ||||
Approve | 59524045 | 22 days ago | IN | 0 AVAX | 0.00007 | ||||
Transfer | 59524032 | 22 days ago | IN | 0 AVAX | 0.00192366 | ||||
Transfer | 59524030 | 22 days ago | IN | 0 AVAX | 0.00016577 | ||||
Approve | 59167573 | 30 days ago | IN | 0 AVAX | 0.00011593 | ||||
Approve | 58856761 | 36 days ago | IN | 0 AVAX | 0.00011596 | ||||
Transfer | 58571315 | 42 days ago | IN | 0 AVAX | 0.00021707 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12746320 | 1120 days ago | 1.548 AVAX | ||||
12400071 | 1128 days ago | 2.0871 AVAX | ||||
11434845 | 1151 days ago | 0.765 AVAX | ||||
11192336 | 1157 days ago | 19.90891761 AVAX | ||||
11183582 | 1157 days ago | 0.6350886 AVAX | ||||
11179463 | 1157 days ago | 0.87358398 AVAX | ||||
11176356 | 1157 days ago | 0.00305514 AVAX | ||||
11176356 | 1157 days ago | 0.00305514 AVAX | ||||
11176344 | 1157 days ago | 0.27598428 AVAX | ||||
11176344 | 1157 days ago | 0.13780474 AVAX | ||||
11176344 | 1157 days ago | 0.13780474 AVAX | ||||
11176344 | 1157 days ago | 0.0165373 AVAX | ||||
11176344 | 1157 days ago | 0.0165373 AVAX | ||||
11176344 | 1157 days ago | 0.55133462 AVAX | ||||
11176344 | 1157 days ago | 0.55133462 AVAX | ||||
11176328 | 1157 days ago | 0.00792369 AVAX | ||||
11176328 | 1157 days ago | 0.00792369 AVAX | ||||
11176304 | 1157 days ago | 0.12303671 AVAX | ||||
11176304 | 1157 days ago | 0.12303671 AVAX | ||||
11176287 | 1157 days ago | 0.00097577 AVAX | ||||
11176287 | 1157 days ago | 0.00097577 AVAX | ||||
11176263 | 1157 days ago | 0.27754409 AVAX | ||||
11176263 | 1157 days ago | 0.13858365 AVAX | ||||
11176263 | 1157 days ago | 0.13858365 AVAX | ||||
11176263 | 1157 days ago | 0.01663078 AVAX |
Loading...
Loading
Contract Name:
PolarNodesV2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2022-01-10 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title SafeMathUint * @dev Math operations with safety TKNcks that revert on error */ library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0, "toInt256Safe: B LESS THAN ZERO"); return b; } } /** * @title SafeMathInt * @dev Math operations for int256 with overflow safety TKNcks. */ library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require( c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256), "mul: A B C combi values invalid with MIN_INT256" ); require((b == 0) || (c / b == a), "mul: A B C combi values invalid"); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256, "div: b == 1 OR A == MIN_INT256"); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require( (b >= 0 && c <= a) || (b < 0 && c > a), "sub: A B C combi values invalid" ); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require( (b >= 0 && c >= a) || (b < 0 && c < a), "add: A B C combi values invalid" ); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256, "abs: A EQUAL MIN INT256"); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0, "toUint256Safe: A LESS THAN ZERO"); return uint256(a); } } 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 TKNaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouTKNd) 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 untouTKNd) 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 untouTKNd) 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 untouTKNd) 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; } } library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint256) { return map.keys.length; } function set( Map storage map, address key, uint256 val ) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint256 index = map.indexOf[key]; uint256 lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @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 */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (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 * * 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" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IJoeRouter01 { function factory() external pure returns (address); function WAVAX() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityAVAX( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountAVAX, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAX( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountAVAX); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAXWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountAVAX); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactAVAXForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactAVAX( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForAVAX( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapAVAXForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IJoeRouter02 is IJoeRouter01 { function removeLiquidityAVAXSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountAVAX); function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountAVAX); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactAVAXForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IJoeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { //unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require( oldAllowance >= value, "SafeERC20: decreased allowance below zero" ); uint256 newAllowance = oldAllowance - value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); //} } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } /** * @title PaymentSplitter * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware * that the Ether will be split in this way, since it is handled transparently by the contract. * * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim * an amount proportional to the percentage of total shares they were assigned. * * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} * function. * * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you * to run tests before sending real value to this contract. */ contract PaymentSplitter is Context { event PayeeAdded(address account, uint256 shares); event PaymentReleased(address to, uint256 amount); event ERC20PaymentReleased( IERC20 indexed token, address to, uint256 amount ); event PaymentReceived(address from, uint256 amount); uint256 private _totalShares; uint256 private _totalReleased; mapping(address => uint256) private _shares; mapping(address => uint256) private _released; address[] private _payees; mapping(IERC20 => uint256) private _erc20TotalReleased; mapping(IERC20 => mapping(address => uint256)) private _erc20Released; /** * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at * the matching position in the `shares` array. * * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no * duplicates in `payees`. */ constructor(address[] memory payees, uint256[] memory shares_) payable { require( payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch" ); require(payees.length > 0, "PaymentSplitter: no payees"); for (uint256 i = 0; i < payees.length; i++) { _addPayee(payees[i], shares_[i]); } } /** * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the * reliability of the events, and not the actual splitting of Ether. * * To learn more about this see the Solidity documentation for * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback * functions]. */ receive() external payable virtual { emit PaymentReceived(_msgSender(), msg.value); } /** * @dev Getter for the total shares held by payees. */ function totalShares() public view returns (uint256) { return _totalShares; } /** * @dev Getter for the total amount of Ether already released. */ function totalReleased() public view returns (uint256) { return _totalReleased; } /** * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20 * contract. */ function totalReleased(IERC20 token) public view returns (uint256) { return _erc20TotalReleased[token]; } /** * @dev Getter for the amount of shares held by an account. */ function shares(address account) public view returns (uint256) { return _shares[account]; } /** * @dev Getter for the amount of Ether already released to a payee. */ function released(address account) public view returns (uint256) { return _released[account]; } /** * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an * IERC20 contract. */ function released(IERC20 token, address account) public view returns (uint256) { return _erc20Released[token][account]; } /** * @dev Getter for the address of the payee number `index`. */ function payee(uint256 index) public view returns (address) { return _payees[index]; } /** * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the * total shares and their previous withdrawals. */ function release(address payable account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 totalReceived = address(this).balance + totalReleased(); uint256 payment = _pendingPayment( account, totalReceived, released(account) ); require(payment != 0, "PaymentSplitter: account is not due payment"); _released[account] += payment; _totalReleased += payment; Address.sendValue(account, payment); emit PaymentReleased(account, payment); } /** * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 * contract. */ function release(IERC20 token, address account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token); uint256 payment = _pendingPayment( account, totalReceived, released(token, account) ); require(payment != 0, "PaymentSplitter: account is not due payment"); _erc20Released[token][account] += payment; _erc20TotalReleased[token] += payment; SafeERC20.safeTransfer(token, account, payment); emit ERC20PaymentReleased(token, account, payment); } /** * @dev internal logic for computing the pending payment of an `account` given the token historical balances and * already released amounts. */ function _pendingPayment( address account, uint256 totalReceived, uint256 alreadyReleased ) private view returns (uint256) { return (totalReceived * _shares[account]) / _totalShares - alreadyReleased; } /** * @dev Add a new payee to the contract. * @param account The address of the payee to add. * @param shares_ The number of shares owned by the payee. */ function _addPayee(address account, uint256 shares_) private { require( account != address(0), "PaymentSplitter: account is the zero address" ); require(shares_ > 0, "PaymentSplitter: shares are 0"); require( _shares[account] == 0, "PaymentSplitter: account already has shares" ); _payees.push(account); _shares[account] = shares_; _totalShares = _totalShares + shares_; emit PayeeAdded(account, shares_); } } contract NODERewardManagement { using SafeMath for uint256; using IterableMapping for IterableMapping.Map; struct NodeEntity { string name; uint256 creationTime; uint256 lastClaimTime; uint256 rewardAvailable; } IterableMapping.Map private nodeOwners; mapping(address => NodeEntity[]) private _nodesOfUser; uint256 public nodePrice; uint256 public rewardPerNode; uint256 public claimTime; address public gateKeeper; address public token; bool public autoDistri = true; bool public distribution = false; uint256 public gasForDistribution = 500000; uint256 public lastDistributionCount = 0; uint256 public lastIndexProcessed = 0; uint256 public totalNodesCreated = 0; uint256 public totalRewardStaked = 0; constructor( uint256 _nodePrice, uint256 _rewardPerNode, uint256 _claimTime ) { nodePrice = _nodePrice; rewardPerNode = _rewardPerNode; claimTime = _claimTime; gateKeeper = msg.sender; } modifier onlySentry() { require(msg.sender == token || msg.sender == gateKeeper, "Fuck off"); _; } function setToken (address token_) external onlySentry { token = token_; } function distributeRewards(uint256 gas, uint256 rewardNode) private returns ( uint256, uint256, uint256 ) { distribution = true; uint256 numberOfnodeOwners = nodeOwners.keys.length; require(numberOfnodeOwners > 0, "DISTRI REWARDS: NO NODE OWNERS"); if (numberOfnodeOwners == 0) { return (0, 0, lastIndexProcessed); } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 newGasLeft; uint256 localLastIndex = lastIndexProcessed; uint256 iterations = 0; uint256 newClaimTime = block.timestamp; uint256 nodesCount; uint256 claims = 0; NodeEntity[] storage nodes; NodeEntity storage _node; while (gasUsed < gas && iterations < numberOfnodeOwners) { localLastIndex++; if (localLastIndex >= nodeOwners.keys.length) { localLastIndex = 0; } nodes = _nodesOfUser[nodeOwners.keys[localLastIndex]]; nodesCount = nodes.length; for (uint256 i = 0; i < nodesCount; i++) { _node = nodes[i]; if (claimable(_node)) { _node.rewardAvailable += rewardNode; _node.lastClaimTime = newClaimTime; totalRewardStaked += rewardNode; claims++; } } iterations++; newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastIndexProcessed = localLastIndex; distribution = false; return (iterations, claims, lastIndexProcessed); } function createNode(address account, string memory nodeName) external onlySentry { require( isNameAvailable(account, nodeName), "CREATE NODE: Name not available" ); _nodesOfUser[account].push( NodeEntity({ name: nodeName, creationTime: block.timestamp, lastClaimTime: block.timestamp, rewardAvailable: 0 }) ); nodeOwners.set(account, _nodesOfUser[account].length); totalNodesCreated++; if (autoDistri && !distribution) { distributeRewards(gasForDistribution, rewardPerNode); } } function isNameAvailable(address account, string memory nodeName) private view returns (bool) { NodeEntity[] memory nodes = _nodesOfUser[account]; for (uint256 i = 0; i < nodes.length; i++) { if (keccak256(bytes(nodes[i].name)) == keccak256(bytes(nodeName))) { return false; } } return true; } function _burn(uint256 index) internal { require(index < nodeOwners.size()); nodeOwners.remove(nodeOwners.getKeyAtIndex(index)); } function _getNodeWithCreatime( NodeEntity[] storage nodes, uint256 _creationTime ) private view returns (NodeEntity storage) { uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); bool found = false; int256 index = binary_search(nodes, 0, numberOfNodes, _creationTime); uint256 validIndex; if (index >= 0) { found = true; validIndex = uint256(index); } require(found, "NODE SEARCH: No NODE Found with this blocktime"); return nodes[validIndex]; } function binary_search( NodeEntity[] memory arr, uint256 low, uint256 high, uint256 x ) private view returns (int256) { if (high >= low) { uint256 mid = (high + low).div(2); if (arr[mid].creationTime == x) { return int256(mid); } else if (arr[mid].creationTime > x) { return binary_search(arr, low, mid - 1, x); } else { return binary_search(arr, mid + 1, high, x); } } else { return -1; } } function _cashoutNodeReward(address account, uint256 _creationTime) external onlySentry returns (uint256) { require(_creationTime > 0, "NODE: CREATIME must be higher than zero"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime); uint256 rewardNode = node.rewardAvailable; node.rewardAvailable = 0; return rewardNode; } function _cashoutAllNodesReward(address account) external onlySentry returns (uint256) { NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; require(nodesCount > 0, "NODE: CREATIME must be higher than zero"); NodeEntity storage _node; uint256 rewardsTotal = 0; for (uint256 i = 0; i < nodesCount; i++) { _node = nodes[i]; rewardsTotal += _node.rewardAvailable; _node.rewardAvailable = 0; } return rewardsTotal; } function claimable(NodeEntity memory node) private view returns (bool) { return node.lastClaimTime + claimTime <= block.timestamp; } function _getRewardAmountOf(address account) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); uint256 nodesCount; uint256 rewardCount = 0; NodeEntity[] storage nodes = _nodesOfUser[account]; nodesCount = nodes.length; for (uint256 i = 0; i < nodesCount; i++) { rewardCount += nodes[i].rewardAvailable; } return rewardCount; } function _getRewardAmountOf(address account, uint256 _creationTime) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); require(_creationTime > 0, "NODE: CREATIME must be higher than zero"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime); uint256 rewardNode = node.rewardAvailable; return rewardNode; } function _getNodeRewardAmountOf(address account, uint256 creationTime) external view returns (uint256) { return _getNodeWithCreatime(_nodesOfUser[account], creationTime) .rewardAvailable; } function _getNodesNames(address account) external view returns (string memory) { require(isNodeOwner(account), "GET NAMES: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory names = nodes[0].name; string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; names = string(abi.encodePacked(names, separator, _node.name)); } return names; } function _getNodesCreationTime(address account) external view returns (string memory) { require(isNodeOwner(account), "GET CREATIME: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _creationTimes = uint2str(nodes[0].creationTime); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _creationTimes = string( abi.encodePacked( _creationTimes, separator, uint2str(_node.creationTime) ) ); } return _creationTimes; } function _getNodesRewardAvailable(address account) external view returns (string memory) { require(isNodeOwner(account), "GET REWARD: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _rewardsAvailable = uint2str(nodes[0].rewardAvailable); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _rewardsAvailable = string( abi.encodePacked( _rewardsAvailable, separator, uint2str(_node.rewardAvailable) ) ); } return _rewardsAvailable; } function _getNodesLastClaimTime(address account) external view returns (string memory) { require(isNodeOwner(account), "LAST CLAIME TIME: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _lastClaimTimes = uint2str(nodes[0].lastClaimTime); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _lastClaimTimes = string( abi.encodePacked( _lastClaimTimes, separator, uint2str(_node.lastClaimTime) ) ); } return _lastClaimTimes; } function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len; while (_i != 0) { k = k - 1; uint8 temp = (48 + uint8(_i - (_i / 10) * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } function _changeNodePrice(uint256 newNodePrice) external onlySentry { nodePrice = newNodePrice; } function _changeRewardPerNode(uint256 newPrice) external onlySentry { rewardPerNode = newPrice; } function _changeClaimTime(uint256 newTime) external onlySentry { claimTime = newTime; } function _changeAutoDistri(bool newMode) external onlySentry { autoDistri = newMode; } function _changeGasDistri(uint256 newGasDistri) external onlySentry { gasForDistribution = newGasDistri; } function _getNodeNumberOf(address account) public view returns (uint256) { return nodeOwners.get(account); } function isNodeOwner(address account) private view returns (bool) { return nodeOwners.get(account) > 0; } function _isNodeOwner(address account) external view returns (bool) { return isNodeOwner(account); } function _distributeRewards() external onlySentry returns ( uint256, uint256, uint256 ) { return distributeRewards(gasForDistribution, rewardPerNode); } } contract PolarNodesV2 is ERC20, Ownable, PaymentSplitter { using SafeMath for uint256; NODERewardManagement public nodeRewardManager; IJoeRouter02 public uniswapV2Router; address public uniswapV2Pair; address public futurUsePool; address public distributionPool; address public poolHandler; uint256 public rewardsFee; uint256 public liquidityPoolFee; uint256 public futurFee; uint256 public totalFees; uint256 public cashoutFee; uint256 public rwSwap; bool private swapping = false; bool private swapLiquify = true; uint256 public swapTokensAmount; uint256 public maxTx = 0; bool private tradingOpen = false; mapping(address => bool) public _isBlacklisted; mapping(address => bool) public automatedMarketMakerPairs; mapping(address => bool) public _isSuper; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event LiquidityWalletUpdated( address indexed newLiquidityWallet, address indexed oldLiquidityWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); constructor( address[] memory payees, uint256[] memory shares, address[] memory addresses, uint256[] memory balances, uint256[] memory fees, uint256 swapAmount, address uniV2Router ) ERC20("POLAR", "POLAR") PaymentSplitter(payees, shares) { futurUsePool = addresses[1]; distributionPool = addresses[2]; poolHandler = addresses[3]; require(futurUsePool != address(0) && distributionPool != address(0) && poolHandler != address(0), "FUTUR, REWARD & POOL ADDRESS CANNOT BE ZERO"); require(uniV2Router != address(0), "ROUTER CANNOT BE ZERO"); IJoeRouter02 _uniswapV2Router = IJoeRouter02(uniV2Router); address _uniswapV2Pair = IJoeFactory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WAVAX()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); require( fees[0] != 0 && fees[1] != 0 && fees[2] != 0 && fees[3] != 0, "CONSTR: Fees equal 0" ); futurFee = fees[0]; rewardsFee = fees[1]; liquidityPoolFee = fees[2]; cashoutFee = fees[3]; rwSwap = fees[4]; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); require(addresses.length > 0 && balances.length > 0, "CONSTR: addresses array length must be greater than zero"); require(addresses.length == balances.length, "CONSTR: addresses arrays length mismatch"); for (uint256 i = 0; i < addresses.length; i++) { _mint(addresses[i], balances[i] * (10**18)); _isSuper[addresses[i]] = true; } require(totalSupply() == 1000000e18, "CONSTR: totalSupply must equal 1 million"); require(swapAmount > 0, "CONSTR: Swap amount incorrect"); swapTokensAmount = swapAmount * (10**18); } function increaseLiquidityDistribution(uint256 amount) external onlyOwner { require(amount > 0, "Amount too low"); _mint(distributionPool, amount); } function setNodeManagement(address nodeManagement) external onlyOwner { nodeRewardManager = NODERewardManagement(nodeManagement); } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "TKN: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IJoeRouter02(newAddress); address _uniswapV2Pair = IJoeFactory(uniswapV2Router.factory()) .createPair(address(this), uniswapV2Router.WAVAX()); uniswapV2Pair = _uniswapV2Pair; } function updateSwapTokensAmount(uint256 newVal) external onlyOwner { swapTokensAmount = newVal; } function updateFuturWall(address payable wall) external onlyOwner { futurUsePool = wall; } function updateRewardsWall(address payable wall) external onlyOwner { distributionPool = wall; } function updateRewardsFee(uint256 value) external onlyOwner { rewardsFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateLiquiditFee(uint256 value) external onlyOwner { liquidityPoolFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateFuturFee(uint256 value) external onlyOwner { futurFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateCashoutFee(uint256 value) external onlyOwner { cashoutFee = value; } function updateRwSwapFee(uint256 value) external onlyOwner { rwSwap = value; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "TKN: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function blacklistMalicious(address account, bool value) external onlyOwner { _isBlacklisted[account] = value; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "TKN: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_isBlacklisted[from] && !_isBlacklisted[to], "Blacklisted address"); if (from != owner() && to != owner() && from != address(this) && to != address(this) && !_isSuper[from] && !_isSuper[to] && to != uniswapV2Pair && to != address(uniswapV2Router)) { if (tradingOpen) { uint256 walletBalance = balanceOf(address(to)); require(amount.add(walletBalance) <= maxTx, "Transfer amount too high"); } if (!tradingOpen && from == uniswapV2Pair) { _isBlacklisted[to] = true; } } super._transfer(from, to, amount); } function swapAndSendToFee(address destination, uint256 tokens) private { uint256 initialETHBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = (address(this).balance).sub(initialETHBalance); payable(destination).transfer(newBalance); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WAVAX(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForAVAXSupportingFeeOnTransferTokens( 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.addLiquidityAVAX{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable poolHandler, block.timestamp ); } function createNodeWithTokens(string memory name) public { require( bytes(name).length > 3 && bytes(name).length < 32, "NODE CREATION: NAME SIZE INVALID" ); address sender = _msgSender(); require( sender != address(0), "NODE CREATION: creation from the zero address" ); require(!_isBlacklisted[sender], "NODE CREATION: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool, "NODE CREATION: futur and rewardsPool cannot create node" ); uint256 nodePrice = nodeRewardManager.nodePrice(); require( balanceOf(sender) >= nodePrice, "NODE CREATION: Balance too low for creation." ); uint256 contractTokenBalance = balanceOf(address(this)); bool swapAmountOk = contractTokenBalance >= swapTokensAmount; if ( swapAmountOk && swapLiquify && !swapping && sender != owner() && !automatedMarketMakerPairs[sender] ) { swapping = true; uint256 futurTokens = contractTokenBalance.mul(futurFee).div(100); swapAndSendToFee(futurUsePool, futurTokens); uint256 rewardsPoolTokens = contractTokenBalance .mul(rewardsFee) .div(100); uint256 rewardsTokenstoSwap = rewardsPoolTokens.mul(rwSwap).div( 100 ); swapAndSendToFee(distributionPool, rewardsTokenstoSwap); super._transfer( address(this), distributionPool, rewardsPoolTokens.sub(rewardsTokenstoSwap) ); uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div( 100 ); swapAndLiquify(swapTokens); swapTokensForEth(balanceOf(address(this))); swapping = false; } super._transfer(sender, address(this), nodePrice); nodeRewardManager.createNode(sender, name); } function cashoutReward(uint256 blocktime) public { address sender = _msgSender(); require(sender != address(0), "CSHT: creation from the zero address"); require(!_isBlacklisted[sender], "MANIA CSHT: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool, "CSHT: futur and rewardsPool cannot cashout rewards" ); uint256 rewardAmount = nodeRewardManager._getRewardAmountOf( sender, blocktime ); require( rewardAmount > 0, "CSHT: You don't have enough reward to cash out" ); if (swapLiquify) { uint256 feeAmount; if (cashoutFee > 0) { feeAmount = rewardAmount.mul(cashoutFee).div(100); swapAndSendToFee(futurUsePool, feeAmount); } rewardAmount -= feeAmount; } super._transfer(distributionPool, sender, rewardAmount); nodeRewardManager._cashoutNodeReward(sender, blocktime); } function cashoutAll() public { address sender = _msgSender(); require( sender != address(0), "MANIA CSHT: creation from the zero address" ); require(!_isBlacklisted[sender], "MANIA CSHT: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool, "MANIA CSHT: futur and rewardsPool cannot cashout rewards" ); uint256 rewardAmount = nodeRewardManager._getRewardAmountOf(sender); require( rewardAmount > 0, "MANIA CSHT: You don't have enough reward to cash out" ); if (swapLiquify) { uint256 feeAmount; if (cashoutFee > 0) { feeAmount = rewardAmount.mul(cashoutFee).div(100); super._transfer(distributionPool, address(this), feeAmount); swapAndSendToFee(futurUsePool, feeAmount); } rewardAmount -= feeAmount; } super._transfer(distributionPool, sender, rewardAmount); nodeRewardManager._cashoutAllNodesReward(sender); } function boostReward(uint amount) public onlyOwner { if (amount > address(this).balance) amount = address(this).balance; payable(owner()).transfer(amount); } function changeSwapLiquify(bool newVal) public onlyOwner { swapLiquify = newVal; } function getNodeNumberOf(address account) public view returns (uint256) { return nodeRewardManager._getNodeNumberOf(account); } function getRewardAmountOf(address account) public view onlyOwner returns (uint256) { return nodeRewardManager._getRewardAmountOf(account); } function getRewardAmount() public view returns (uint256) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getRewardAmountOf(_msgSender()); } function changeNodePrice(uint256 newNodePrice) public onlyOwner { nodeRewardManager._changeNodePrice(newNodePrice); } function getNodePrice() public view returns (uint256) { return nodeRewardManager.nodePrice(); } function changeRewardPerNode(uint256 newPrice) public onlyOwner { nodeRewardManager._changeRewardPerNode(newPrice); } function getRewardPerNode() public view returns (uint256) { return nodeRewardManager.rewardPerNode(); } function changeClaimTime(uint256 newTime) public onlyOwner { nodeRewardManager._changeClaimTime(newTime); } function getClaimTime() public view returns (uint256) { return nodeRewardManager.claimTime(); } function changeAutoDistri(bool newMode) public onlyOwner { nodeRewardManager._changeAutoDistri(newMode); } function getAutoDistri() public view returns (bool) { return nodeRewardManager.autoDistri(); } function changeGasDistri(uint256 newGasDistri) public onlyOwner { nodeRewardManager._changeGasDistri(newGasDistri); } function getGasDistri() public view returns (uint256) { return nodeRewardManager.gasForDistribution(); } function getDistriCount() public view returns (uint256) { return nodeRewardManager.lastDistributionCount(); } function getNodesNames() public view returns (string memory) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getNodesNames(_msgSender()); } function getNodesCreatime() public view returns (string memory) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getNodesCreationTime(_msgSender()); } function getNodesRewards() public view returns (string memory) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getNodesRewardAvailable(_msgSender()); } function getNodesLastClaims() public view returns (string memory) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getNodesLastClaimTime(_msgSender()); } function distributeRewards() public onlyOwner returns ( uint256, uint256, uint256 ) { return nodeRewardManager._distributeRewards(); } function publiDistriRewards() public { nodeRewardManager._distributeRewards(); } function getTotalStakedReward() public view returns (uint256) { return nodeRewardManager.totalRewardStaked(); } function getTotalCreatedNodes() public view returns (uint256) { return nodeRewardManager.totalNodesCreated(); } function openTrading() external onlyOwner { require(!tradingOpen,"Trading is already open"); tradingOpen = true; } function updateMaxTx(uint256 newMaxTx) external onlyOwner { maxTx = newMaxTx; } function setIsSuper(address account, bool value) external onlyOwner { _isSuper[account] = value; } function swapOld(uint256 _amount) public { address old = 0x8F37980D44F7487851346f4a5e5114d6B03dcF0A; address dead = 0x000000000000000000000000000000000000dEaD; IERC20(old).transferFrom(msg.sender, dead, _amount); super._transfer(distributionPool, msg.sender, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"internalType":"uint256","name":"swapAmount","type":"uint256"},{"internalType":"address","name":"uniV2Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","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":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isSuper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMalicious","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"boostReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"cashoutReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newMode","type":"bool"}],"name":"changeAutoDistri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"changeClaimTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGasDistri","type":"uint256"}],"name":"changeGasDistri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNodePrice","type":"uint256"}],"name":"changeNodePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeRewardPerNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"changeSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"createNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributionPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futurFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futurUsePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAutoDistri","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistriCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasDistri","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getNodeNumberOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesCreatime","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesLastClaims","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesRewards","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRewardAmountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardPerNode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalCreatedNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStakedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseLiquidityDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeRewardManager","outputs":[{"internalType":"contract NODERewardManagement","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publiDistriRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rwSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsSuper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nodeManagement","type":"address"}],"name":"setNodeManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"swapOld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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 IJoeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateCashoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateFuturFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateFuturWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateLiquiditFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTx","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateRewardsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateRewardsWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateRwSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526019805461ffff19166101001790556000601b55601c805460ff191690553480156200002f57600080fd5b5060405162005e9f38038062005e9f833981016040819052620000529162001042565b6040805180820182526005808252642827a620a960d91b6020808401828152855180870190965292855284015281518a938a93929091620000969160039162000e77565b508051620000ac90600490602084019062000e77565b5050506000620000c162000a3460201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508051825114620001815760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084015b60405180910390fd5b6000825111620001d45760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f20706179656573000000000000604482015260640162000178565b60005b825181101562000240576200022b838281518110620001fa57620001fa62001246565b602002602001015183838151811062000217576200021762001246565b602002602001015162000a3860201b60201c565b80620002378162001212565b915050620001d7565b5050508460018151811062000259576200025962001246565b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550846002815181106200029d576200029d62001246565b6020026020010151601160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084600381518110620002e157620002e162001246565b6020908102919091010151601280546001600160a01b0319166001600160a01b0392831617905560105416158015906200032557506011546001600160a01b031615155b80156200033c57506012546001600160a01b031615155b6200039e5760405162461bcd60e51b815260206004820152602b60248201527f46555455522c20524557415244202620504f4f4c20414444524553532043414e60448201526a4e4f54204245205a45524f60a81b606482015260840162000178565b6001600160a01b038116620003f65760405162461bcd60e51b815260206004820152601560248201527f524f555445522043414e4e4f54204245205a45524f0000000000000000000000604482015260640162000178565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043757600080fd5b505afa1580156200044c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000472919062001024565b6001600160a01b031663c9c6539630846001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b158015620004bb57600080fd5b505afa158015620004d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f6919062001024565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200053f57600080fd5b505af115801562000554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057a919062001024565b600e80546001600160a01b038086166001600160a01b031992831617909255600f8054928416929091169190911790559050620005b981600162000c26565b84600081518110620005cf57620005cf62001246565b602002602001015160001415801562000606575084600181518110620005f957620005f962001246565b6020026020010151600014155b80156200063157508460028151811062000624576200062462001246565b6020026020010151600014155b80156200065c5750846003815181106200064f576200064f62001246565b6020026020010151600014155b620006aa5760405162461bcd60e51b815260206004820152601460248201527f434f4e5354523a204665657320657175616c2030000000000000000000000000604482015260640162000178565b84600081518110620006c057620006c062001246565b602002602001015160158190555084600181518110620006e457620006e462001246565b60200260200101516013819055508460028151811062000708576200070862001246565b6020026020010151601481905550846003815181106200072c576200072c62001246565b60200260200101516017819055508460048151811062000750576200075062001246565b6020026020010151601881905550620007976015546200078360145460135462000d1160201b620035f01790919060201c565b62000d1160201b620035f01790919060201c565b601655865115801590620007ac575060008651115b620008205760405162461bcd60e51b815260206004820152603860248201527f434f4e5354523a20616464726573736573206172726179206c656e677468206d60448201527f7573742062652067726561746572207468616e207a65726f0000000000000000606482015260840162000178565b8551875114620008845760405162461bcd60e51b815260206004820152602860248201527f434f4e5354523a2061646472657373657320617272617973206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840162000178565b60005b87518110156200094c57620008ea888281518110620008aa57620008aa62001246565b6020026020010151888381518110620008c757620008c762001246565b6020026020010151670de0b6b3a7640000620008e49190620011b3565b62000d7b565b6001601f60008a848151811062000905576200090562001246565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620009438162001212565b91505062000887565b5060025469d3c21bcecceda100000014620009bb5760405162461bcd60e51b815260206004820152602860248201527f434f4e5354523a20746f74616c537570706c79206d75737420657175616c20316044820152671036b4b63634b7b760c11b606482015260840162000178565b6000841162000a0d5760405162461bcd60e51b815260206004820152601d60248201527f434f4e5354523a205377617020616d6f756e7420696e636f7272656374000000604482015260640162000178565b62000a2184670de0b6b3a7640000620011b3565b601a555062001272975050505050505050565b3390565b6001600160a01b03821662000aa55760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b606482015260840162000178565b6000811162000af75760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a20736861726573206172652030000000604482015260640162000178565b6001600160a01b0382166000908152600860205260409020541562000b735760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b606482015260840162000178565b600a8054600181019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416908117909155600090815260086020526040902081905560065462000bdd90829062001198565b600655604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b6001600160a01b0382166000908152601e602052604090205460ff161515811515141562000cbd5760405162461bcd60e51b815260206004820152603d60248201527f544b4e3a204175746f6d61746564206d61726b6574206d616b6572207061697260448201527f20697320616c72656164792073657420746f20746861742076616c7565000000606482015260840162000178565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60008062000d20838562001198565b90508381101562000d745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000178565b9392505050565b6001600160a01b03821662000dd35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000178565b62000def8160025462000d1160201b620035f01790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000e22918390620035f062000d11821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b82805462000e8590620011d5565b90600052602060002090601f01602090048101928262000ea9576000855562000ef4565b82601f1062000ec457805160ff191683800117855562000ef4565b8280016001018555821562000ef4579182015b8281111562000ef457825182559160200191906001019062000ed7565b5062000f0292915062000f06565b5090565b5b8082111562000f02576000815560010162000f07565b80516001600160a01b038116811462000f3557600080fd5b919050565b600082601f83011262000f4c57600080fd5b8151602062000f6562000f5f8362001172565b6200113f565b80838252828201915082860187848660051b890101111562000f8657600080fd5b60005b8581101562000fb05762000f9d8262000f1d565b8452928401929084019060010162000f89565b5090979650505050505050565b600082601f83011262000fcf57600080fd5b8151602062000fe262000f5f8362001172565b80838252828201915082860187848660051b89010111156200100357600080fd5b60005b8581101562000fb05781518452928401929084019060010162001006565b6000602082840312156200103757600080fd5b62000d748262000f1d565b600080600080600080600060e0888a0312156200105e57600080fd5b87516001600160401b03808211156200107657600080fd5b620010848b838c0162000f3a565b985060208a01519150808211156200109b57600080fd5b620010a98b838c0162000fbd565b975060408a0151915080821115620010c057600080fd5b620010ce8b838c0162000f3a565b965060608a0151915080821115620010e557600080fd5b620010f38b838c0162000fbd565b955060808a01519150808211156200110a57600080fd5b50620011198a828b0162000fbd565b93505060a088015191506200113160c0890162000f1d565b905092959891949750929550565b604051601f8201601f191681016001600160401b03811182821017156200116a576200116a6200125c565b604052919050565b60006001600160401b038211156200118e576200118e6200125c565b5060051b60200190565b60008219821115620011ae57620011ae62001230565b500190565b6000816000190483118215151615620011d057620011d062001230565b500290565b600181811c90821680620011ea57607f821691505b602082108114156200120c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562001229576200122962001230565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b614c1d80620012826000396000f3fe6080604052600436106104a35760003560e01c80638743ef6d11610260578063c2d0ffca11610144578063dd62ed3e116100c1578063f598194911610085578063f598194914610ec6578063f5a0725614610edc578063f74c993414610ef1578063f7b9f94314610f11578063f9afc76314610f26578063fb0a749414610f3b57600080fd5b8063dd62ed3e14610e16578063e33b7de314610e5c578063e3e0df2914610e71578063ee1afdbf14610e91578063f2fde38b14610ea657600080fd5b8063d0f7747411610108578063d0f7747414610d76578063d79779b214610d96578063d892934214610dcc578063da41b33314610dec578063db3ad6b514610e0157600080fd5b8063c2d0ffca14610ccb578063c5ca7d6d14610ceb578063c9567bf914610d0b578063c9a3446814610d20578063ce7c2ac214610d4057600080fd5b80639c82751c116101dd578063a9059cbb116101a1578063a9059cbb14610c10578063ab57476114610c30578063b5f8b72914610c46578063b62496f514610c66578063b96392c114610c96578063bdf24a5314610cb657600080fd5b80639c82751c14610b86578063a0a8fe6514610ba6578063a457c2d714610bbb578063a5021a1714610bdb578063a538ddf214610bf057600080fd5b80638f0ba4ca116102245780638f0ba4ca14610adb5780639349c47d14610afb57806395d89b4114610b1b5780639852595c14610b305780639a7a23d614610b6657600080fd5b80638743ef6d14610a4857806388c41d7c14610a5d5780638b83209b14610a7d5780638bc9c7b014610a9d5780638da5cb5b14610abd57600080fd5b806348b750441161038757806365bfe4301161030457806370a08231116102c857806370a0823114610987578063715018a6146109bd5780637437681e146109d25780637628b3d7146109e85780637b77039214610a085780638013858b14610a2857600080fd5b806365bfe430146108e15780636770474b146109015780636815a91c146109215780636d9ae0be146109415780636f4a2cd01461095757600080fd5b8063583bd7a61161034b578063583bd7a61461085657806359640ed9146108765780635b0d4674146108965780635f1c3182146108ab57806365b8dbc0146108c157600080fd5b806348b75044146107d657806348e5642b146107f657806349bd5a5e1461080b578063545579731461082b57806354f12f1f1461084057600080fd5b80631916558711610420578063313ce567116103e4578063313ce567146106ff578063395093511461071b5780633a98ef391461073b578063406072a9146107505780634195fbf31461079657806342bc9fca146107b657600080fd5b806319165587146106595780631cdd3be31461067957806323b872dd146106a95780632a607841146106c95780632bb14e1d146106e957600080fd5b80630f512fc7116104675780630f512fc7146105b157806313114a9d146105e1578063138a634a146105f75780631694505e1461060c57806318160ddd1461064457600080fd5b806306fdde03146104f1578063084a6bff1461051c578063095ea7b31461053e57806309a69f571461056e5780630c08f3001461059157600080fd5b366104ec577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156104fd57600080fd5b50610506610f5b565b60405161051391906147b8565b60405180910390f35b34801561052857600080fd5b5061053c6105373660046146ec565b610fed565b005b34801561054a57600080fd5b5061055e610559366004614598565b611047565b6040519015158152602001610513565b34801561057a57600080fd5b5061058361105e565b604051908152602001610513565b34801561059d57600080fd5b5061053c6105ac3660046144b6565b6111b0565b3480156105bd57600080fd5b5061055e6105cc3660046144b6565b601f6020526000908152604090205460ff1681565b3480156105ed57600080fd5b5061058360165481565b34801561060357600080fd5b506105066111fc565b34801561061857600080fd5b50600e5461062c906001600160a01b031681565b6040516001600160a01b039091168152602001610513565b34801561065057600080fd5b50600254610583565b34801561066557600080fd5b5061053c6106743660046144b6565b61134e565b34801561068557600080fd5b5061055e6106943660046144b6565b601d6020526000908152604090205460ff1681565b3480156106b557600080fd5b5061055e6106c4366004614529565b61147c565b3480156106d557600080fd5b5060125461062c906001600160a01b031681565b3480156106f557600080fd5b5061058360135481565b34801561070b57600080fd5b5060405160128152602001610513565b34801561072757600080fd5b5061055e610736366004614598565b6114e6565b34801561074757600080fd5b50600654610583565b34801561075c57600080fd5b5061058361076b3660046144f0565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156107a257600080fd5b5061053c6107b13660046146ec565b61151c565b3480156107c257600080fd5b5061053c6107d13660046146ec565b61158f565b3480156107e257600080fd5b5061053c6107f13660046144f0565b6115d3565b34801561080257600080fd5b506105836117bb565b34801561081757600080fd5b50600f5461062c906001600160a01b031681565b34801561083757600080fd5b5061053c611800565b34801561084c57600080fd5b5061058360145481565b34801561086257600080fd5b5061053c6108713660046145c4565b611b6a565b34801561088257600080fd5b5061053c6108913660046146ec565b611bae565b3480156108a257600080fd5b50610506611c3a565b3480156108b757600080fd5b50610583601a5481565b3480156108cd57600080fd5b5061053c6108dc3660046144b6565b611d15565b3480156108ed57600080fd5b5061053c6108fc3660046146ec565b611fb1565b34801561090d57600080fd5b5061053c61091c3660046146ec565b6122f6565b34801561092d57600080fd5b5061053c61093c3660046146ec565b612325565b34801561094d57600080fd5b5061058360175481565b34801561096357600080fd5b5061096c612354565b60408051938452602084019290925290820152606001610513565b34801561099357600080fd5b506105836109a23660046144b6565b6001600160a01b031660009081526020819052604090205490565b3480156109c957600080fd5b5061053c612418565b3480156109de57600080fd5b50610583601b5481565b3480156109f457600080fd5b50600d5461062c906001600160a01b031681565b348015610a1457600080fd5b5061053c610a233660046146ec565b61248c565b348015610a3457600080fd5b5061053c610a433660046146ec565b6124e7565b348015610a5457600080fd5b5061053c612542565b348015610a6957600080fd5b5061053c610a783660046146ec565b6125ca565b348015610a8957600080fd5b5061062c610a983660046146ec565b61260e565b348015610aa957600080fd5b5061053c610ab83660046146ec565b61263e565b348015610ac957600080fd5b506005546001600160a01b031661062c565b348015610ae757600080fd5b5061053c610af63660046145fe565b61266d565b348015610b0757600080fd5b5061053c610b163660046144b6565b612b39565b348015610b2757600080fd5b50610506612b85565b348015610b3c57600080fd5b50610583610b4b3660046144b6565b6001600160a01b031660009081526009602052604090205490565b348015610b7257600080fd5b5061053c610b8136600461456a565b612b94565b348015610b9257600080fd5b5061053c610ba13660046146ec565b612c5f565b348015610bb257600080fd5b50610583612cba565b348015610bc757600080fd5b5061055e610bd6366004614598565b612cff565b348015610be757600080fd5b50610583612d4e565b348015610bfc57600080fd5b5060105461062c906001600160a01b031681565b348015610c1c57600080fd5b5061055e610c2b366004614598565b612d93565b348015610c3c57600080fd5b5061058360155481565b348015610c5257600080fd5b5061053c610c613660046146ec565b612da0565b348015610c7257600080fd5b5061055e610c813660046144b6565b601e6020526000908152604090205460ff1681565b348015610ca257600080fd5b50610583610cb13660046144b6565b612e24565b348015610cc257600080fd5b50610506612ecf565b348015610cd757600080fd5b5061053c610ce63660046146ec565b612faa565b348015610cf757600080fd5b5060115461062c906001600160a01b031681565b348015610d1757600080fd5b5061053c612fd9565b348015610d2c57600080fd5b5061053c610d3b36600461456a565b613065565b348015610d4c57600080fd5b50610583610d5b3660046144b6565b6001600160a01b031660009081526008602052604090205490565b348015610d8257600080fd5b5061053c610d913660046145c4565b6130ba565b348015610da257600080fd5b50610583610db13660046144b6565b6001600160a01b03166000908152600b602052604090205490565b348015610dd857600080fd5b5061053c610de736600461456a565b613116565b348015610df857600080fd5b5061058361316b565b348015610e0d57600080fd5b506105836131b0565b348015610e2257600080fd5b50610583610e313660046144f0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610e6857600080fd5b50600754610583565b348015610e7d57600080fd5b5061053c610e8c3660046146ec565b6131f5565b348015610e9d57600080fd5b506105066132a4565b348015610eb257600080fd5b5061053c610ec13660046144b6565b61337f565b348015610ed257600080fd5b5061058360185481565b348015610ee857600080fd5b5061058361346a565b348015610efd57600080fd5b50610583610f0c3660046144b6565b6134af565b348015610f1d57600080fd5b506105836134e2565b348015610f3257600080fd5b5061055e613527565b348015610f4757600080fd5b5061053c610f563660046144b6565b6135a4565b606060038054610f6a90614ad4565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9690614ad4565b8015610fe35780601f10610fb857610100808354040283529160200191610fe3565b820191906000526020600020905b815481529060010190602001808311610fc657829003601f168201915b5050505050905090565b6005546001600160a01b031633146110205760405162461bcd60e51b8152600401611017906148f4565b60405180910390fd5b6013819055601554601454611041919061103b9084906135f0565b906135f0565b60165550565b600061105433848461364f565b5060015b92915050565b60003361107d5760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156110ce57600080fd5b505afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110691906145e1565b6111225760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b031663619a635e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190614705565b905090565b6005546001600160a01b031633146111da5760405162461bcd60e51b8152600401611017906148f4565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60603361121b5760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906145e1565b6112c05760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b031663334de3a2335b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160006040518083038186803b15801561131257600080fd5b505afa158015611326573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111ab919081019061467e565b6001600160a01b0381166000908152600860205260409020546113835760405162461bcd60e51b815260040161101790614863565b600061138e60075490565b6113989047614a38565b905060006113c583836113c0866001600160a01b031660009081526009602052604090205490565b613774565b9050806113e45760405162461bcd60e51b8152600401611017906148a9565b6001600160a01b0383166000908152600960205260408120805483929061140c908490614a38565b9250508190555080600760008282546114259190614a38565b90915550611435905083826137ba565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b60006114898484846138d3565b6114db84336114d685604051806060016040528060288152602001614b9b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190613b51565b61364f565b5060015b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916110549185906114d690866135f0565b6005546001600160a01b031633146115465760405162461bcd60e51b8152600401611017906148f4565b478111156115515750475b6005546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561158b573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146115b95760405162461bcd60e51b8152600401611017906148f4565b6014819055601554601354611041919061103b90846135f0565b6001600160a01b0381166000908152600860205260409020546116085760405162461bcd60e51b815260040161101790614863565b6001600160a01b0382166000908152600b60205260408120546040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561166057600080fd5b505afa158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190614705565b6116a29190614a38565b905060006116db83836113c087876001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b9050806116fa5760405162461bcd60e51b8152600401611017906148a9565b6001600160a01b038085166000908152600c6020908152604080832093871683529290529081208054839290611731908490614a38565b90915550506001600160a01b0384166000908152600b60205260408120805483929061175e908490614a38565b9091555061176f9050848483613b8b565b604080516001600160a01b038581168252602082018490528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a250505050565b600d54604080516345193f5560e11b815290516000926001600160a01b031691638a327eaa916004808301926020929190829003018186803b15801561117357600080fd5b33806118625760405162461bcd60e51b815260206004820152602b60248201527f4d414e494120435348543a20206372656174696f6e2066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401611017565b6001600160a01b0381166000908152601d602052604090205460ff16156118cb5760405162461bcd60e51b815260206004820152601f60248201527f4d414e494120435348543a20426c61636b6c69737465642061646472657373006044820152606401611017565b6010546001600160a01b038281169116148015906118f757506011546001600160a01b03828116911614155b6119695760405162461bcd60e51b815260206004820152603860248201527f4d414e494120435348543a20667574757220616e642072657761726473506f6f60448201527f6c2063616e6e6f7420636173686f7574207265776172647300000000000000006064820152608401611017565b600d546040516330cd31af60e11b81526001600160a01b038381166004830152600092169063619a635e9060240160206040518083038186803b1580156119af57600080fd5b505afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190614705565b905060008111611a565760405162461bcd60e51b815260206004820152603460248201527f4d414e494120435348543a20596f7520646f6e2774206861766520656e6f75676044820152731a081c995dd85c99081d1bc818d85cda081bdd5d60621b6064820152608401611017565b601954610100900460ff1615611acf5760175460009015611ac157611a916064611a8b60175485613bdd90919063ffffffff16565b90613c5c565b601154909150611aab906001600160a01b03163083613c9e565b601054611ac1906001600160a01b031682613da7565b611acb8183614a91565b9150505b601154611ae6906001600160a01b03168383613c9e565b600d5460405163170a62c760e21b81526001600160a01b03848116600483015290911690635c298b1c90602401602060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b659190614705565b505050565b6005546001600160a01b03163314611b945760405162461bcd60e51b8152600401611017906148f4565b601980549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314611bd85760405162461bcd60e51b8152600401611017906148f4565b600d54604051631df3773160e31b8152600481018390526001600160a01b039091169063ef9bb988906024015b600060405180830381600087803b158015611c1f57600080fd5b505af1158015611c33573d6000803e3d6000fd5b5050505050565b606033611c595760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611caa57600080fd5b505afa158015611cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce291906145e1565b611cfe5760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b0316634a389fae336112d3565b6005546001600160a01b03163314611d3f5760405162461bcd60e51b8152600401611017906148f4565b600e546001600160a01b0382811691161415611dae5760405162461bcd60e51b815260206004820152602860248201527f544b4e3a2054686520726f7574657220616c7265616479206861732074686174604482015267206164647265737360c01b6064820152608401611017565b600e546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600e80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b158015611e4057600080fd5b505afa158015611e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7891906144d3565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b158015611ed557600080fd5b505afa158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d91906144d3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611f5557600080fd5b505af1158015611f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8d91906144d3565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b338061200d5760405162461bcd60e51b815260206004820152602560248201527f435348543a20206372656174696f6e2066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611017565b6001600160a01b0381166000908152601d602052604090205460ff16156120765760405162461bcd60e51b815260206004820152601f60248201527f4d414e494120435348543a20426c61636b6c69737465642061646472657373006044820152606401611017565b6010546001600160a01b038281169116148015906120a257506011546001600160a01b03828116911614155b6121095760405162461bcd60e51b815260206004820152603260248201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e6044820152716f7420636173686f7574207265776172647360701b6064820152608401611017565b600d546040516329b8573160e21b81526001600160a01b03838116600483015260248201859052600092169063a6e15cc49060440160206040518083038186803b15801561215657600080fd5b505afa15801561216a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218e9190614705565b9050600081116121f75760405162461bcd60e51b815260206004820152602e60248201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160448201526d1c99081d1bc818d85cda081bdd5d60921b6064820152608401611017565b601954610100900460ff161561225357601754600090156122455761222c6064611a8b60175485613bdd90919063ffffffff16565b601054909150612245906001600160a01b031682613da7565b61224f8183614a91565b9150505b60115461226a906001600160a01b03168383613c9e565b600d5460405163376db80160e11b81526001600160a01b0384811660048301526024820186905290911690636edb700290604401602060405180830381600087803b1580156122b857600080fd5b505af11580156122cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f09190614705565b50505050565b6005546001600160a01b031633146123205760405162461bcd60e51b8152600401611017906148f4565b601a55565b6005546001600160a01b0316331461234f5760405162461bcd60e51b8152600401611017906148f4565b601755565b600554600090819081906001600160a01b031633146123855760405162461bcd60e51b8152600401611017906148f4565b600d60009054906101000a90046001600160a01b03166001600160a01b03166388fe65536040518163ffffffff1660e01b8152600401606060405180830381600087803b1580156123d557600080fd5b505af11580156123e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240d919061471e565b925092509250909192565b6005546001600160a01b031633146124425760405162461bcd60e51b8152600401611017906148f4565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146124b65760405162461bcd60e51b8152600401611017906148f4565b600d546040516318df5db960e31b8152600481018390526001600160a01b039091169063c6faedc890602401611c05565b6005546001600160a01b031633146125115760405162461bcd60e51b8152600401611017906148f4565b600d5460405163cece91eb60e01b8152600481018390526001600160a01b039091169063cece91eb90602401611c05565b600d60009054906101000a90046001600160a01b03166001600160a01b03166388fe65536040518163ffffffff1660e01b8152600401606060405180830381600087803b15801561259257600080fd5b505af11580156125a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b65919061471e565b6005546001600160a01b031633146125f45760405162461bcd60e51b8152600401611017906148f4565b601581905560145460135461104191839161103b916135f0565b6000600a828154811061262357612623614b25565b6000918252602090912001546001600160a01b031692915050565b6005546001600160a01b031633146126685760405162461bcd60e51b8152600401611017906148f4565b601855565b6003815111801561267f575060208151105b6126cb5760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401611017565b33806127305760405162461bcd60e51b815260206004820152602e60248201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860448201526d65207a65726f206164647265737360901b6064820152608401611017565b6001600160a01b0381166000908152601d602052604090205460ff16156127a45760405162461bcd60e51b815260206004820152602260248201527f4e4f4445204352454154494f4e3a20426c61636b6c6973746564206164647265604482015261737360f01b6064820152608401611017565b6010546001600160a01b038281169116148015906127d057506011546001600160a01b03828116911614155b6128425760405162461bcd60e51b815260206004820152603760248201527f4e4f4445204352454154494f4e3a20667574757220616e64207265776172647360448201527f506f6f6c2063616e6e6f7420637265617465206e6f64650000000000000000006064820152608401611017565b600d5460408051631e3fd85760e31b815290516000926001600160a01b03169163f1fec2b8916004808301926020929190829003018186803b15801561288757600080fd5b505afa15801561289b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bf9190614705565b9050806128e1836001600160a01b031660009081526020819052604090205490565b10156129445760405162461bcd60e51b815260206004820152602c60248201527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f77206660448201526b37b91031b932b0ba34b7b71760a11b6064820152608401611017565b30600090815260208190526040902054601a548110801590819061296f5750601954610100900460ff165b801561297e575060195460ff16155b801561299857506005546001600160a01b03858116911614155b80156129bd57506001600160a01b0384166000908152601e602052604090205460ff16155b15612ac3576019805460ff191660011790556015546000906129e790606490611a8b908690613bdd565b601054909150612a00906001600160a01b031682613da7565b6000612a1c6064611a8b60135487613bdd90919063ffffffff16565b90506000612a3a6064611a8b60185485613bdd90919063ffffffff16565b601154909150612a53906001600160a01b031682613da7565b601154612a749030906001600160a01b0316612a6f8585613df6565b613c9e565b6000612a906064611a8b60145489613bdd90919063ffffffff16565b9050612a9b81613e38565b30600090815260208190526040902054612ab490613ebf565b50506019805460ff1916905550505b612ace843085613c9e565b600d546040516312b8603f60e01b81526001600160a01b03909116906312b8603f90612b009087908990600401614794565b600060405180830381600087803b158015612b1a57600080fd5b505af1158015612b2e573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b03163314612b635760405162461bcd60e51b8152600401611017906148f4565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610f6a90614ad4565b6005546001600160a01b03163314612bbe5760405162461bcd60e51b8152600401611017906148f4565b600f546001600160a01b0383811691161415612c555760405162461bcd60e51b815260206004820152604a60248201527f544b4e3a205468652050616e63616b655377617020706169722063616e6e6f7460448201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b65746064820152694d616b6572506169727360b01b608482015260a401611017565b61158b8282614028565b6005546001600160a01b03163314612c895760405162461bcd60e51b8152600401611017906148f4565b600d5460405163d1871a8960e01b8152600481018390526001600160a01b039091169063d1871a8990602401611c05565b600d546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef916004808301926020929190829003018186803b15801561117357600080fd5b600061105433846114d685604051806060016040528060258152602001614bc3602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190613b51565b600d5460408051631e3fd85760e31b815290516000926001600160a01b03169163f1fec2b8916004808301926020929190829003018186803b15801561117357600080fd5b60006110543384846138d3565b6005546001600160a01b03163314612dca5760405162461bcd60e51b8152600401611017906148f4565b60008111612e0b5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401611017565b601154612e21906001600160a01b031682614111565b50565b6005546000906001600160a01b03163314612e515760405162461bcd60e51b8152600401611017906148f4565b600d546040516330cd31af60e11b81526001600160a01b0384811660048301529091169063619a635e906024015b60206040518083038186803b158015612e9757600080fd5b505afa158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190614705565b606033612eee5760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015612f3f57600080fd5b505afa158015612f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7791906145e1565b612f935760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b031663c92819ce336112d3565b6005546001600160a01b03163314612fd45760405162461bcd60e51b8152600401611017906148f4565b601b55565b6005546001600160a01b031633146130035760405162461bcd60e51b8152600401611017906148f4565b601c5460ff16156130565760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401611017565b601c805460ff19166001179055565b6005546001600160a01b0316331461308f5760405162461bcd60e51b8152600401611017906148f4565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146130e45760405162461bcd60e51b8152600401611017906148f4565b600d54604051636d58441560e11b815282151560048201526001600160a01b039091169063dab0882a90602401611c05565b6005546001600160a01b031633146131405760405162461bcd60e51b8152600401611017906148f4565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b600d546040805163fb10d6fb60e01b815290516000926001600160a01b03169163fb10d6fb916004808301926020929190829003018186803b15801561117357600080fd5b600d546040805163613ff46f60e01b815290516000926001600160a01b03169163613ff46f916004808301926020929190829003018186803b15801561117357600080fd5b6040516323b872dd60e01b815233600482015261dead6024820181905260448201839052738f37980d44f7487851346f4a5e5114d6b03dcf0a9182906323b872dd90606401602060405180830381600087803b15801561325457600080fd5b505af1158015613268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328c91906145e1565b50601154611b65906001600160a01b03163385613c9e565b6060336132c35760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561331457600080fd5b505afa158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c91906145e1565b6133685760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b0316635759fb02336112d3565b6005546001600160a01b031633146133a95760405162461bcd60e51b8152600401611017906148f4565b6001600160a01b03811661340e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611017565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604080516327b3bf1160e01b815290516000926001600160a01b0316916327b3bf11916004808301926020929190829003018186803b15801561117357600080fd5b600d5460405163112469f960e21b81526001600160a01b0383811660048301526000921690634491a7e490602401612e7f565b600d5460408051636f60a39360e11b815290516000926001600160a01b03169163dec14726916004808301926020929190829003018186803b15801561117357600080fd5b600d54604080516385c44d9d60e01b815290516000926001600160a01b0316916385c44d9d916004808301926020929190829003018186803b15801561356c57600080fd5b505afa158015613580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab91906145e1565b6005546001600160a01b031633146135ce5760405162461bcd60e51b8152600401611017906148f4565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806135fd8385614a38565b9050838110156114df5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401611017565b6001600160a01b0383166136b15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611017565b6001600160a01b0382166137125760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611017565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6006546001600160a01b0384166000908152600860205260408120549091839161379e9086614a72565b6137a89190614a50565b6137b29190614a91565b949350505050565b8047101561380a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611017565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613857576040519150601f19603f3d011682016040523d82523d6000602084013e61385c565b606091505b5050905080611b655760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611017565b6001600160a01b0383166138f95760405162461bcd60e51b815260040161101790614929565b6001600160a01b03821661391f5760405162461bcd60e51b8152600401611017906147cb565b6001600160a01b0383166000908152601d602052604090205460ff1615801561396157506001600160a01b0382166000908152601d602052604090205460ff16155b6139a35760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401611017565b6005546001600160a01b038481169116148015906139cf57506005546001600160a01b03838116911614155b80156139e457506001600160a01b0383163014155b80156139f957506001600160a01b0382163014155b8015613a1e57506001600160a01b0383166000908152601f602052604090205460ff16155b8015613a4357506001600160a01b0382166000908152601f602052604090205460ff16155b8015613a5d5750600f546001600160a01b03838116911614155b8015613a775750600e546001600160a01b03838116911614155b15613b4657601c5460ff1615613afd576001600160a01b038216600090815260208190526040902054601b54613aad83836135f0565b1115613afb5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220616d6f756e7420746f6f206869676800000000000000006044820152606401611017565b505b601c5460ff16158015613b1d5750600f546001600160a01b038481169116145b15613b46576001600160a01b0382166000908152601d60205260409020805460ff191660011790555b611b65838383613c9e565b60008184841115613b755760405162461bcd60e51b815260040161101791906147b8565b506000613b828486614a91565b95945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611b659084906141ef565b600082613bec57506000611058565b6000613bf88385614a72565b905082613c058583614a50565b146114df5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401611017565b60006114df83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142c1565b6001600160a01b038316613cc45760405162461bcd60e51b815260040161101790614929565b6001600160a01b038216613cea5760405162461bcd60e51b8152600401611017906147cb565b613d2781604051806060016040528060268152602001614b75602691396001600160a01b0386166000908152602081905260409020549190613b51565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613d5690826135f0565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101613767565b47613db182613ebf565b6000613dbd4783613df6565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015611c33573d6000803e3d6000fd5b60006114df83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b51565b6000613e45826002613c5c565b90506000613e538383613df6565b905047613e5f83613ebf565b6000613e6b4783613df6565b9050613e7783826142ef565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ef457613ef4614b25565b6001600160a01b03928316602091820292909201810191909152600e54604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b158015613f4857600080fd5b505afa158015613f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8091906144d3565b81600181518110613f9357613f93614b25565b6001600160a01b039283166020918202929092010152600e54613fb9913091168461364f565b600e54604051633b158ab160e11b81526001600160a01b039091169063762b156290613ff290859060009086903090429060040161496e565b600060405180830381600087803b15801561400c57600080fd5b505af1158015614020573d6000803e3d6000fd5b505050505050565b6001600160a01b0382166000908152601e602052604090205460ff16151581151514156140bd5760405162461bcd60e51b815260206004820152603d60248201527f544b4e3a204175746f6d61746564206d61726b6574206d616b6572207061697260448201527f20697320616c72656164792073657420746f20746861742076616c75650000006064820152608401611017565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166141675760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611017565b60025461417490826135f0565b6002556001600160a01b03821660009081526020819052604090205461419a90826135f0565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000614244826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166143ab9092919063ffffffff16565b805190915015611b65578080602001905181019061426291906145e1565b611b655760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611017565b600081836142e25760405162461bcd60e51b815260040161101791906147b8565b506000613b828486614a50565b600e546143079030906001600160a01b03168461364f565b600e54601254604051637c8d9fb960e11b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f91b3f7290839060c4016060604051808303818588803b15801561437257600080fd5b505af1158015614386573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c33919061471e565b60606137b2848460008585843b6144045760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611017565b600080866001600160a01b031685876040516144209190614778565b60006040518083038185875af1925050503d806000811461445d576040519150601f19603f3d011682016040523d82523d6000602084013e614462565b606091505b509150915061447282828661447d565b979650505050505050565b6060831561448c5750816114df565b82511561449c5782518084602001fd5b8160405162461bcd60e51b815260040161101791906147b8565b6000602082840312156144c857600080fd5b81356114df81614b51565b6000602082840312156144e557600080fd5b81516114df81614b51565b6000806040838503121561450357600080fd5b823561450e81614b51565b9150602083013561451e81614b51565b809150509250929050565b60008060006060848603121561453e57600080fd5b833561454981614b51565b9250602084013561455981614b51565b929592945050506040919091013590565b6000806040838503121561457d57600080fd5b823561458881614b51565b9150602083013561451e81614b66565b600080604083850312156145ab57600080fd5b82356145b681614b51565b946020939093013593505050565b6000602082840312156145d657600080fd5b81356114df81614b66565b6000602082840312156145f357600080fd5b81516114df81614b66565b60006020828403121561461057600080fd5b813567ffffffffffffffff81111561462757600080fd5b8201601f8101841361463857600080fd5b803561464b61464682614a10565b6149df565b81815285602083850101111561466057600080fd5b81602084016020830137600091810160200191909152949350505050565b60006020828403121561469057600080fd5b815167ffffffffffffffff8111156146a757600080fd5b8201601f810184136146b857600080fd5b80516146c661464682614a10565b8181528560208385010111156146db57600080fd5b613b82826020830160208601614aa8565b6000602082840312156146fe57600080fd5b5035919050565b60006020828403121561471757600080fd5b5051919050565b60008060006060848603121561473357600080fd5b8351925060208401519150604084015190509250925092565b60008151808452614764816020860160208601614aa8565b601f01601f19169290920160200192915050565b6000825161478a818460208701614aa8565b9190910192915050565b6001600160a01b03831681526040602082018190526000906137b29083018461474c565b6020815260006114df602083018461474c565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b60208082526014908201527353454e4445522043414e2754204245205a45524f60601b604082015260600190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156149be5784516001600160a01b031683529383019391830191600101614999565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614a0857614a08614b3b565b604052919050565b600067ffffffffffffffff821115614a2a57614a2a614b3b565b50601f01601f191660200190565b60008219821115614a4b57614a4b614b0f565b500190565b600082614a6d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614a8c57614a8c614b0f565b500290565b600082821015614aa357614aa3614b0f565b500390565b60005b83811015614ac3578181015183820152602001614aab565b838111156122f05750506000910152565b600181811c90821680614ae857607f821691505b60208210811415614b0957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612e2157600080fd5b8015158114612e2157600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207907d382bfec3b0ad33d3e9a72b121900c75e476df7cb438470b39b14c27e9fb64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d40000000000000000000000000000000000000000000000000000000000000003000000000000000000000000fb7e9e883629eb0d4691d4dc240b9c57a38888b4000000000000000000000000c1e6e63bbf402d3ba812784d9e1b692130ac61ba000000000000000000000000adc2cdcecd0d45033acc62788670c55d45764d240000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000700000000000000000000000024c835d252dd8fa19242b7b74a094385f14beb0f000000000000000000000000f128b6ba7db8532fa1d98bf2c31fc843b2882605000000000000000000000000ab3b24ba4c5911366c59cc870facc25b6ea3a05300000000000000000000000015b72f2f0cd37fade6c734e72485de0909b1e2a8000000000000000000000000fb7e9e883629eb0d4691d4dc240b9c57a38888b4000000000000000000000000c1e6e63bbf402d3ba812784d9e1b692130ac61ba000000000000000000000000adc2cdcecd0d45033acc62788670c55d45764d2400000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000de2b00000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000682a000000000000000000000000000000000000000000000000000000000000682a000000000000000000000000000000000000000000000000000000000000682a0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x6080604052600436106104a35760003560e01c80638743ef6d11610260578063c2d0ffca11610144578063dd62ed3e116100c1578063f598194911610085578063f598194914610ec6578063f5a0725614610edc578063f74c993414610ef1578063f7b9f94314610f11578063f9afc76314610f26578063fb0a749414610f3b57600080fd5b8063dd62ed3e14610e16578063e33b7de314610e5c578063e3e0df2914610e71578063ee1afdbf14610e91578063f2fde38b14610ea657600080fd5b8063d0f7747411610108578063d0f7747414610d76578063d79779b214610d96578063d892934214610dcc578063da41b33314610dec578063db3ad6b514610e0157600080fd5b8063c2d0ffca14610ccb578063c5ca7d6d14610ceb578063c9567bf914610d0b578063c9a3446814610d20578063ce7c2ac214610d4057600080fd5b80639c82751c116101dd578063a9059cbb116101a1578063a9059cbb14610c10578063ab57476114610c30578063b5f8b72914610c46578063b62496f514610c66578063b96392c114610c96578063bdf24a5314610cb657600080fd5b80639c82751c14610b86578063a0a8fe6514610ba6578063a457c2d714610bbb578063a5021a1714610bdb578063a538ddf214610bf057600080fd5b80638f0ba4ca116102245780638f0ba4ca14610adb5780639349c47d14610afb57806395d89b4114610b1b5780639852595c14610b305780639a7a23d614610b6657600080fd5b80638743ef6d14610a4857806388c41d7c14610a5d5780638b83209b14610a7d5780638bc9c7b014610a9d5780638da5cb5b14610abd57600080fd5b806348b750441161038757806365bfe4301161030457806370a08231116102c857806370a0823114610987578063715018a6146109bd5780637437681e146109d25780637628b3d7146109e85780637b77039214610a085780638013858b14610a2857600080fd5b806365bfe430146108e15780636770474b146109015780636815a91c146109215780636d9ae0be146109415780636f4a2cd01461095757600080fd5b8063583bd7a61161034b578063583bd7a61461085657806359640ed9146108765780635b0d4674146108965780635f1c3182146108ab57806365b8dbc0146108c157600080fd5b806348b75044146107d657806348e5642b146107f657806349bd5a5e1461080b578063545579731461082b57806354f12f1f1461084057600080fd5b80631916558711610420578063313ce567116103e4578063313ce567146106ff578063395093511461071b5780633a98ef391461073b578063406072a9146107505780634195fbf31461079657806342bc9fca146107b657600080fd5b806319165587146106595780631cdd3be31461067957806323b872dd146106a95780632a607841146106c95780632bb14e1d146106e957600080fd5b80630f512fc7116104675780630f512fc7146105b157806313114a9d146105e1578063138a634a146105f75780631694505e1461060c57806318160ddd1461064457600080fd5b806306fdde03146104f1578063084a6bff1461051c578063095ea7b31461053e57806309a69f571461056e5780630c08f3001461059157600080fd5b366104ec577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156104fd57600080fd5b50610506610f5b565b60405161051391906147b8565b60405180910390f35b34801561052857600080fd5b5061053c6105373660046146ec565b610fed565b005b34801561054a57600080fd5b5061055e610559366004614598565b611047565b6040519015158152602001610513565b34801561057a57600080fd5b5061058361105e565b604051908152602001610513565b34801561059d57600080fd5b5061053c6105ac3660046144b6565b6111b0565b3480156105bd57600080fd5b5061055e6105cc3660046144b6565b601f6020526000908152604090205460ff1681565b3480156105ed57600080fd5b5061058360165481565b34801561060357600080fd5b506105066111fc565b34801561061857600080fd5b50600e5461062c906001600160a01b031681565b6040516001600160a01b039091168152602001610513565b34801561065057600080fd5b50600254610583565b34801561066557600080fd5b5061053c6106743660046144b6565b61134e565b34801561068557600080fd5b5061055e6106943660046144b6565b601d6020526000908152604090205460ff1681565b3480156106b557600080fd5b5061055e6106c4366004614529565b61147c565b3480156106d557600080fd5b5060125461062c906001600160a01b031681565b3480156106f557600080fd5b5061058360135481565b34801561070b57600080fd5b5060405160128152602001610513565b34801561072757600080fd5b5061055e610736366004614598565b6114e6565b34801561074757600080fd5b50600654610583565b34801561075c57600080fd5b5061058361076b3660046144f0565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156107a257600080fd5b5061053c6107b13660046146ec565b61151c565b3480156107c257600080fd5b5061053c6107d13660046146ec565b61158f565b3480156107e257600080fd5b5061053c6107f13660046144f0565b6115d3565b34801561080257600080fd5b506105836117bb565b34801561081757600080fd5b50600f5461062c906001600160a01b031681565b34801561083757600080fd5b5061053c611800565b34801561084c57600080fd5b5061058360145481565b34801561086257600080fd5b5061053c6108713660046145c4565b611b6a565b34801561088257600080fd5b5061053c6108913660046146ec565b611bae565b3480156108a257600080fd5b50610506611c3a565b3480156108b757600080fd5b50610583601a5481565b3480156108cd57600080fd5b5061053c6108dc3660046144b6565b611d15565b3480156108ed57600080fd5b5061053c6108fc3660046146ec565b611fb1565b34801561090d57600080fd5b5061053c61091c3660046146ec565b6122f6565b34801561092d57600080fd5b5061053c61093c3660046146ec565b612325565b34801561094d57600080fd5b5061058360175481565b34801561096357600080fd5b5061096c612354565b60408051938452602084019290925290820152606001610513565b34801561099357600080fd5b506105836109a23660046144b6565b6001600160a01b031660009081526020819052604090205490565b3480156109c957600080fd5b5061053c612418565b3480156109de57600080fd5b50610583601b5481565b3480156109f457600080fd5b50600d5461062c906001600160a01b031681565b348015610a1457600080fd5b5061053c610a233660046146ec565b61248c565b348015610a3457600080fd5b5061053c610a433660046146ec565b6124e7565b348015610a5457600080fd5b5061053c612542565b348015610a6957600080fd5b5061053c610a783660046146ec565b6125ca565b348015610a8957600080fd5b5061062c610a983660046146ec565b61260e565b348015610aa957600080fd5b5061053c610ab83660046146ec565b61263e565b348015610ac957600080fd5b506005546001600160a01b031661062c565b348015610ae757600080fd5b5061053c610af63660046145fe565b61266d565b348015610b0757600080fd5b5061053c610b163660046144b6565b612b39565b348015610b2757600080fd5b50610506612b85565b348015610b3c57600080fd5b50610583610b4b3660046144b6565b6001600160a01b031660009081526009602052604090205490565b348015610b7257600080fd5b5061053c610b8136600461456a565b612b94565b348015610b9257600080fd5b5061053c610ba13660046146ec565b612c5f565b348015610bb257600080fd5b50610583612cba565b348015610bc757600080fd5b5061055e610bd6366004614598565b612cff565b348015610be757600080fd5b50610583612d4e565b348015610bfc57600080fd5b5060105461062c906001600160a01b031681565b348015610c1c57600080fd5b5061055e610c2b366004614598565b612d93565b348015610c3c57600080fd5b5061058360155481565b348015610c5257600080fd5b5061053c610c613660046146ec565b612da0565b348015610c7257600080fd5b5061055e610c813660046144b6565b601e6020526000908152604090205460ff1681565b348015610ca257600080fd5b50610583610cb13660046144b6565b612e24565b348015610cc257600080fd5b50610506612ecf565b348015610cd757600080fd5b5061053c610ce63660046146ec565b612faa565b348015610cf757600080fd5b5060115461062c906001600160a01b031681565b348015610d1757600080fd5b5061053c612fd9565b348015610d2c57600080fd5b5061053c610d3b36600461456a565b613065565b348015610d4c57600080fd5b50610583610d5b3660046144b6565b6001600160a01b031660009081526008602052604090205490565b348015610d8257600080fd5b5061053c610d913660046145c4565b6130ba565b348015610da257600080fd5b50610583610db13660046144b6565b6001600160a01b03166000908152600b602052604090205490565b348015610dd857600080fd5b5061053c610de736600461456a565b613116565b348015610df857600080fd5b5061058361316b565b348015610e0d57600080fd5b506105836131b0565b348015610e2257600080fd5b50610583610e313660046144f0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610e6857600080fd5b50600754610583565b348015610e7d57600080fd5b5061053c610e8c3660046146ec565b6131f5565b348015610e9d57600080fd5b506105066132a4565b348015610eb257600080fd5b5061053c610ec13660046144b6565b61337f565b348015610ed257600080fd5b5061058360185481565b348015610ee857600080fd5b5061058361346a565b348015610efd57600080fd5b50610583610f0c3660046144b6565b6134af565b348015610f1d57600080fd5b506105836134e2565b348015610f3257600080fd5b5061055e613527565b348015610f4757600080fd5b5061053c610f563660046144b6565b6135a4565b606060038054610f6a90614ad4565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9690614ad4565b8015610fe35780601f10610fb857610100808354040283529160200191610fe3565b820191906000526020600020905b815481529060010190602001808311610fc657829003601f168201915b5050505050905090565b6005546001600160a01b031633146110205760405162461bcd60e51b8152600401611017906148f4565b60405180910390fd5b6013819055601554601454611041919061103b9084906135f0565b906135f0565b60165550565b600061105433848461364f565b5060015b92915050565b60003361107d5760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156110ce57600080fd5b505afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110691906145e1565b6111225760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b031663619a635e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190614705565b905090565b6005546001600160a01b031633146111da5760405162461bcd60e51b8152600401611017906148f4565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60603361121b5760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906145e1565b6112c05760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b031663334de3a2335b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160006040518083038186803b15801561131257600080fd5b505afa158015611326573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111ab919081019061467e565b6001600160a01b0381166000908152600860205260409020546113835760405162461bcd60e51b815260040161101790614863565b600061138e60075490565b6113989047614a38565b905060006113c583836113c0866001600160a01b031660009081526009602052604090205490565b613774565b9050806113e45760405162461bcd60e51b8152600401611017906148a9565b6001600160a01b0383166000908152600960205260408120805483929061140c908490614a38565b9250508190555080600760008282546114259190614a38565b90915550611435905083826137ba565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b60006114898484846138d3565b6114db84336114d685604051806060016040528060288152602001614b9b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190613b51565b61364f565b5060015b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916110549185906114d690866135f0565b6005546001600160a01b031633146115465760405162461bcd60e51b8152600401611017906148f4565b478111156115515750475b6005546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561158b573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146115b95760405162461bcd60e51b8152600401611017906148f4565b6014819055601554601354611041919061103b90846135f0565b6001600160a01b0381166000908152600860205260409020546116085760405162461bcd60e51b815260040161101790614863565b6001600160a01b0382166000908152600b60205260408120546040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561166057600080fd5b505afa158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190614705565b6116a29190614a38565b905060006116db83836113c087876001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b9050806116fa5760405162461bcd60e51b8152600401611017906148a9565b6001600160a01b038085166000908152600c6020908152604080832093871683529290529081208054839290611731908490614a38565b90915550506001600160a01b0384166000908152600b60205260408120805483929061175e908490614a38565b9091555061176f9050848483613b8b565b604080516001600160a01b038581168252602082018490528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a250505050565b600d54604080516345193f5560e11b815290516000926001600160a01b031691638a327eaa916004808301926020929190829003018186803b15801561117357600080fd5b33806118625760405162461bcd60e51b815260206004820152602b60248201527f4d414e494120435348543a20206372656174696f6e2066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401611017565b6001600160a01b0381166000908152601d602052604090205460ff16156118cb5760405162461bcd60e51b815260206004820152601f60248201527f4d414e494120435348543a20426c61636b6c69737465642061646472657373006044820152606401611017565b6010546001600160a01b038281169116148015906118f757506011546001600160a01b03828116911614155b6119695760405162461bcd60e51b815260206004820152603860248201527f4d414e494120435348543a20667574757220616e642072657761726473506f6f60448201527f6c2063616e6e6f7420636173686f7574207265776172647300000000000000006064820152608401611017565b600d546040516330cd31af60e11b81526001600160a01b038381166004830152600092169063619a635e9060240160206040518083038186803b1580156119af57600080fd5b505afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190614705565b905060008111611a565760405162461bcd60e51b815260206004820152603460248201527f4d414e494120435348543a20596f7520646f6e2774206861766520656e6f75676044820152731a081c995dd85c99081d1bc818d85cda081bdd5d60621b6064820152608401611017565b601954610100900460ff1615611acf5760175460009015611ac157611a916064611a8b60175485613bdd90919063ffffffff16565b90613c5c565b601154909150611aab906001600160a01b03163083613c9e565b601054611ac1906001600160a01b031682613da7565b611acb8183614a91565b9150505b601154611ae6906001600160a01b03168383613c9e565b600d5460405163170a62c760e21b81526001600160a01b03848116600483015290911690635c298b1c90602401602060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b659190614705565b505050565b6005546001600160a01b03163314611b945760405162461bcd60e51b8152600401611017906148f4565b601980549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314611bd85760405162461bcd60e51b8152600401611017906148f4565b600d54604051631df3773160e31b8152600481018390526001600160a01b039091169063ef9bb988906024015b600060405180830381600087803b158015611c1f57600080fd5b505af1158015611c33573d6000803e3d6000fd5b5050505050565b606033611c595760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611caa57600080fd5b505afa158015611cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce291906145e1565b611cfe5760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b0316634a389fae336112d3565b6005546001600160a01b03163314611d3f5760405162461bcd60e51b8152600401611017906148f4565b600e546001600160a01b0382811691161415611dae5760405162461bcd60e51b815260206004820152602860248201527f544b4e3a2054686520726f7574657220616c7265616479206861732074686174604482015267206164647265737360c01b6064820152608401611017565b600e546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600e80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b158015611e4057600080fd5b505afa158015611e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7891906144d3565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b158015611ed557600080fd5b505afa158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d91906144d3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611f5557600080fd5b505af1158015611f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8d91906144d3565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b338061200d5760405162461bcd60e51b815260206004820152602560248201527f435348543a20206372656174696f6e2066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611017565b6001600160a01b0381166000908152601d602052604090205460ff16156120765760405162461bcd60e51b815260206004820152601f60248201527f4d414e494120435348543a20426c61636b6c69737465642061646472657373006044820152606401611017565b6010546001600160a01b038281169116148015906120a257506011546001600160a01b03828116911614155b6121095760405162461bcd60e51b815260206004820152603260248201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e6044820152716f7420636173686f7574207265776172647360701b6064820152608401611017565b600d546040516329b8573160e21b81526001600160a01b03838116600483015260248201859052600092169063a6e15cc49060440160206040518083038186803b15801561215657600080fd5b505afa15801561216a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218e9190614705565b9050600081116121f75760405162461bcd60e51b815260206004820152602e60248201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160448201526d1c99081d1bc818d85cda081bdd5d60921b6064820152608401611017565b601954610100900460ff161561225357601754600090156122455761222c6064611a8b60175485613bdd90919063ffffffff16565b601054909150612245906001600160a01b031682613da7565b61224f8183614a91565b9150505b60115461226a906001600160a01b03168383613c9e565b600d5460405163376db80160e11b81526001600160a01b0384811660048301526024820186905290911690636edb700290604401602060405180830381600087803b1580156122b857600080fd5b505af11580156122cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f09190614705565b50505050565b6005546001600160a01b031633146123205760405162461bcd60e51b8152600401611017906148f4565b601a55565b6005546001600160a01b0316331461234f5760405162461bcd60e51b8152600401611017906148f4565b601755565b600554600090819081906001600160a01b031633146123855760405162461bcd60e51b8152600401611017906148f4565b600d60009054906101000a90046001600160a01b03166001600160a01b03166388fe65536040518163ffffffff1660e01b8152600401606060405180830381600087803b1580156123d557600080fd5b505af11580156123e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240d919061471e565b925092509250909192565b6005546001600160a01b031633146124425760405162461bcd60e51b8152600401611017906148f4565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146124b65760405162461bcd60e51b8152600401611017906148f4565b600d546040516318df5db960e31b8152600481018390526001600160a01b039091169063c6faedc890602401611c05565b6005546001600160a01b031633146125115760405162461bcd60e51b8152600401611017906148f4565b600d5460405163cece91eb60e01b8152600481018390526001600160a01b039091169063cece91eb90602401611c05565b600d60009054906101000a90046001600160a01b03166001600160a01b03166388fe65536040518163ffffffff1660e01b8152600401606060405180830381600087803b15801561259257600080fd5b505af11580156125a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b65919061471e565b6005546001600160a01b031633146125f45760405162461bcd60e51b8152600401611017906148f4565b601581905560145460135461104191839161103b916135f0565b6000600a828154811061262357612623614b25565b6000918252602090912001546001600160a01b031692915050565b6005546001600160a01b031633146126685760405162461bcd60e51b8152600401611017906148f4565b601855565b6003815111801561267f575060208151105b6126cb5760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401611017565b33806127305760405162461bcd60e51b815260206004820152602e60248201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860448201526d65207a65726f206164647265737360901b6064820152608401611017565b6001600160a01b0381166000908152601d602052604090205460ff16156127a45760405162461bcd60e51b815260206004820152602260248201527f4e4f4445204352454154494f4e3a20426c61636b6c6973746564206164647265604482015261737360f01b6064820152608401611017565b6010546001600160a01b038281169116148015906127d057506011546001600160a01b03828116911614155b6128425760405162461bcd60e51b815260206004820152603760248201527f4e4f4445204352454154494f4e3a20667574757220616e64207265776172647360448201527f506f6f6c2063616e6e6f7420637265617465206e6f64650000000000000000006064820152608401611017565b600d5460408051631e3fd85760e31b815290516000926001600160a01b03169163f1fec2b8916004808301926020929190829003018186803b15801561288757600080fd5b505afa15801561289b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bf9190614705565b9050806128e1836001600160a01b031660009081526020819052604090205490565b10156129445760405162461bcd60e51b815260206004820152602c60248201527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f77206660448201526b37b91031b932b0ba34b7b71760a11b6064820152608401611017565b30600090815260208190526040902054601a548110801590819061296f5750601954610100900460ff165b801561297e575060195460ff16155b801561299857506005546001600160a01b03858116911614155b80156129bd57506001600160a01b0384166000908152601e602052604090205460ff16155b15612ac3576019805460ff191660011790556015546000906129e790606490611a8b908690613bdd565b601054909150612a00906001600160a01b031682613da7565b6000612a1c6064611a8b60135487613bdd90919063ffffffff16565b90506000612a3a6064611a8b60185485613bdd90919063ffffffff16565b601154909150612a53906001600160a01b031682613da7565b601154612a749030906001600160a01b0316612a6f8585613df6565b613c9e565b6000612a906064611a8b60145489613bdd90919063ffffffff16565b9050612a9b81613e38565b30600090815260208190526040902054612ab490613ebf565b50506019805460ff1916905550505b612ace843085613c9e565b600d546040516312b8603f60e01b81526001600160a01b03909116906312b8603f90612b009087908990600401614794565b600060405180830381600087803b158015612b1a57600080fd5b505af1158015612b2e573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b03163314612b635760405162461bcd60e51b8152600401611017906148f4565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610f6a90614ad4565b6005546001600160a01b03163314612bbe5760405162461bcd60e51b8152600401611017906148f4565b600f546001600160a01b0383811691161415612c555760405162461bcd60e51b815260206004820152604a60248201527f544b4e3a205468652050616e63616b655377617020706169722063616e6e6f7460448201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b65746064820152694d616b6572506169727360b01b608482015260a401611017565b61158b8282614028565b6005546001600160a01b03163314612c895760405162461bcd60e51b8152600401611017906148f4565b600d5460405163d1871a8960e01b8152600481018390526001600160a01b039091169063d1871a8990602401611c05565b600d546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef916004808301926020929190829003018186803b15801561117357600080fd5b600061105433846114d685604051806060016040528060258152602001614bc3602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190613b51565b600d5460408051631e3fd85760e31b815290516000926001600160a01b03169163f1fec2b8916004808301926020929190829003018186803b15801561117357600080fd5b60006110543384846138d3565b6005546001600160a01b03163314612dca5760405162461bcd60e51b8152600401611017906148f4565b60008111612e0b5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401611017565b601154612e21906001600160a01b031682614111565b50565b6005546000906001600160a01b03163314612e515760405162461bcd60e51b8152600401611017906148f4565b600d546040516330cd31af60e11b81526001600160a01b0384811660048301529091169063619a635e906024015b60206040518083038186803b158015612e9757600080fd5b505afa158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190614705565b606033612eee5760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015612f3f57600080fd5b505afa158015612f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7791906145e1565b612f935760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b031663c92819ce336112d3565b6005546001600160a01b03163314612fd45760405162461bcd60e51b8152600401611017906148f4565b601b55565b6005546001600160a01b031633146130035760405162461bcd60e51b8152600401611017906148f4565b601c5460ff16156130565760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401611017565b601c805460ff19166001179055565b6005546001600160a01b0316331461308f5760405162461bcd60e51b8152600401611017906148f4565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146130e45760405162461bcd60e51b8152600401611017906148f4565b600d54604051636d58441560e11b815282151560048201526001600160a01b039091169063dab0882a90602401611c05565b6005546001600160a01b031633146131405760405162461bcd60e51b8152600401611017906148f4565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b600d546040805163fb10d6fb60e01b815290516000926001600160a01b03169163fb10d6fb916004808301926020929190829003018186803b15801561117357600080fd5b600d546040805163613ff46f60e01b815290516000926001600160a01b03169163613ff46f916004808301926020929190829003018186803b15801561117357600080fd5b6040516323b872dd60e01b815233600482015261dead6024820181905260448201839052738f37980d44f7487851346f4a5e5114d6b03dcf0a9182906323b872dd90606401602060405180830381600087803b15801561325457600080fd5b505af1158015613268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328c91906145e1565b50601154611b65906001600160a01b03163385613c9e565b6060336132c35760405162461bcd60e51b815260040161101790614835565b600d546001600160a01b03166341ac82b0336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561331457600080fd5b505afa158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c91906145e1565b6133685760405162461bcd60e51b81526004016110179061480e565b600d546001600160a01b0316635759fb02336112d3565b6005546001600160a01b031633146133a95760405162461bcd60e51b8152600401611017906148f4565b6001600160a01b03811661340e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611017565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604080516327b3bf1160e01b815290516000926001600160a01b0316916327b3bf11916004808301926020929190829003018186803b15801561117357600080fd5b600d5460405163112469f960e21b81526001600160a01b0383811660048301526000921690634491a7e490602401612e7f565b600d5460408051636f60a39360e11b815290516000926001600160a01b03169163dec14726916004808301926020929190829003018186803b15801561117357600080fd5b600d54604080516385c44d9d60e01b815290516000926001600160a01b0316916385c44d9d916004808301926020929190829003018186803b15801561356c57600080fd5b505afa158015613580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab91906145e1565b6005546001600160a01b031633146135ce5760405162461bcd60e51b8152600401611017906148f4565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806135fd8385614a38565b9050838110156114df5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401611017565b6001600160a01b0383166136b15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611017565b6001600160a01b0382166137125760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611017565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6006546001600160a01b0384166000908152600860205260408120549091839161379e9086614a72565b6137a89190614a50565b6137b29190614a91565b949350505050565b8047101561380a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611017565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613857576040519150601f19603f3d011682016040523d82523d6000602084013e61385c565b606091505b5050905080611b655760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611017565b6001600160a01b0383166138f95760405162461bcd60e51b815260040161101790614929565b6001600160a01b03821661391f5760405162461bcd60e51b8152600401611017906147cb565b6001600160a01b0383166000908152601d602052604090205460ff1615801561396157506001600160a01b0382166000908152601d602052604090205460ff16155b6139a35760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401611017565b6005546001600160a01b038481169116148015906139cf57506005546001600160a01b03838116911614155b80156139e457506001600160a01b0383163014155b80156139f957506001600160a01b0382163014155b8015613a1e57506001600160a01b0383166000908152601f602052604090205460ff16155b8015613a4357506001600160a01b0382166000908152601f602052604090205460ff16155b8015613a5d5750600f546001600160a01b03838116911614155b8015613a775750600e546001600160a01b03838116911614155b15613b4657601c5460ff1615613afd576001600160a01b038216600090815260208190526040902054601b54613aad83836135f0565b1115613afb5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220616d6f756e7420746f6f206869676800000000000000006044820152606401611017565b505b601c5460ff16158015613b1d5750600f546001600160a01b038481169116145b15613b46576001600160a01b0382166000908152601d60205260409020805460ff191660011790555b611b65838383613c9e565b60008184841115613b755760405162461bcd60e51b815260040161101791906147b8565b506000613b828486614a91565b95945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611b659084906141ef565b600082613bec57506000611058565b6000613bf88385614a72565b905082613c058583614a50565b146114df5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401611017565b60006114df83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142c1565b6001600160a01b038316613cc45760405162461bcd60e51b815260040161101790614929565b6001600160a01b038216613cea5760405162461bcd60e51b8152600401611017906147cb565b613d2781604051806060016040528060268152602001614b75602691396001600160a01b0386166000908152602081905260409020549190613b51565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613d5690826135f0565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101613767565b47613db182613ebf565b6000613dbd4783613df6565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015611c33573d6000803e3d6000fd5b60006114df83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b51565b6000613e45826002613c5c565b90506000613e538383613df6565b905047613e5f83613ebf565b6000613e6b4783613df6565b9050613e7783826142ef565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ef457613ef4614b25565b6001600160a01b03928316602091820292909201810191909152600e54604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b158015613f4857600080fd5b505afa158015613f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8091906144d3565b81600181518110613f9357613f93614b25565b6001600160a01b039283166020918202929092010152600e54613fb9913091168461364f565b600e54604051633b158ab160e11b81526001600160a01b039091169063762b156290613ff290859060009086903090429060040161496e565b600060405180830381600087803b15801561400c57600080fd5b505af1158015614020573d6000803e3d6000fd5b505050505050565b6001600160a01b0382166000908152601e602052604090205460ff16151581151514156140bd5760405162461bcd60e51b815260206004820152603d60248201527f544b4e3a204175746f6d61746564206d61726b6574206d616b6572207061697260448201527f20697320616c72656164792073657420746f20746861742076616c75650000006064820152608401611017565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166141675760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611017565b60025461417490826135f0565b6002556001600160a01b03821660009081526020819052604090205461419a90826135f0565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000614244826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166143ab9092919063ffffffff16565b805190915015611b65578080602001905181019061426291906145e1565b611b655760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611017565b600081836142e25760405162461bcd60e51b815260040161101791906147b8565b506000613b828486614a50565b600e546143079030906001600160a01b03168461364f565b600e54601254604051637c8d9fb960e11b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f91b3f7290839060c4016060604051808303818588803b15801561437257600080fd5b505af1158015614386573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c33919061471e565b60606137b2848460008585843b6144045760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611017565b600080866001600160a01b031685876040516144209190614778565b60006040518083038185875af1925050503d806000811461445d576040519150601f19603f3d011682016040523d82523d6000602084013e614462565b606091505b509150915061447282828661447d565b979650505050505050565b6060831561448c5750816114df565b82511561449c5782518084602001fd5b8160405162461bcd60e51b815260040161101791906147b8565b6000602082840312156144c857600080fd5b81356114df81614b51565b6000602082840312156144e557600080fd5b81516114df81614b51565b6000806040838503121561450357600080fd5b823561450e81614b51565b9150602083013561451e81614b51565b809150509250929050565b60008060006060848603121561453e57600080fd5b833561454981614b51565b9250602084013561455981614b51565b929592945050506040919091013590565b6000806040838503121561457d57600080fd5b823561458881614b51565b9150602083013561451e81614b66565b600080604083850312156145ab57600080fd5b82356145b681614b51565b946020939093013593505050565b6000602082840312156145d657600080fd5b81356114df81614b66565b6000602082840312156145f357600080fd5b81516114df81614b66565b60006020828403121561461057600080fd5b813567ffffffffffffffff81111561462757600080fd5b8201601f8101841361463857600080fd5b803561464b61464682614a10565b6149df565b81815285602083850101111561466057600080fd5b81602084016020830137600091810160200191909152949350505050565b60006020828403121561469057600080fd5b815167ffffffffffffffff8111156146a757600080fd5b8201601f810184136146b857600080fd5b80516146c661464682614a10565b8181528560208385010111156146db57600080fd5b613b82826020830160208601614aa8565b6000602082840312156146fe57600080fd5b5035919050565b60006020828403121561471757600080fd5b5051919050565b60008060006060848603121561473357600080fd5b8351925060208401519150604084015190509250925092565b60008151808452614764816020860160208601614aa8565b601f01601f19169290920160200192915050565b6000825161478a818460208701614aa8565b9190910192915050565b6001600160a01b03831681526040602082018190526000906137b29083018461474c565b6020815260006114df602083018461474c565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b60208082526014908201527353454e4445522043414e2754204245205a45524f60601b604082015260600190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156149be5784516001600160a01b031683529383019391830191600101614999565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614a0857614a08614b3b565b604052919050565b600067ffffffffffffffff821115614a2a57614a2a614b3b565b50601f01601f191660200190565b60008219821115614a4b57614a4b614b0f565b500190565b600082614a6d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614a8c57614a8c614b0f565b500290565b600082821015614aa357614aa3614b0f565b500390565b60005b83811015614ac3578181015183820152602001614aab565b838111156122f05750506000910152565b600181811c90821680614ae857607f821691505b60208210811415614b0957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612e2157600080fd5b8015158114612e2157600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207907d382bfec3b0ad33d3e9a72b121900c75e476df7cb438470b39b14c27e9fb64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d40000000000000000000000000000000000000000000000000000000000000003000000000000000000000000fb7e9e883629eb0d4691d4dc240b9c57a38888b4000000000000000000000000c1e6e63bbf402d3ba812784d9e1b692130ac61ba000000000000000000000000adc2cdcecd0d45033acc62788670c55d45764d240000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000700000000000000000000000024c835d252dd8fa19242b7b74a094385f14beb0f000000000000000000000000f128b6ba7db8532fa1d98bf2c31fc843b2882605000000000000000000000000ab3b24ba4c5911366c59cc870facc25b6ea3a05300000000000000000000000015b72f2f0cd37fade6c734e72485de0909b1e2a8000000000000000000000000fb7e9e883629eb0d4691d4dc240b9c57a38888b4000000000000000000000000c1e6e63bbf402d3ba812784d9e1b692130ac61ba000000000000000000000000adc2cdcecd0d45033acc62788670c55d45764d2400000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000de2b00000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000682a000000000000000000000000000000000000000000000000000000000000682a000000000000000000000000000000000000000000000000000000000000682a0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : payees (address[]): 0xfB7e9E883629eb0D4691D4Dc240b9c57A38888B4,0xc1E6e63BbF402D3Ba812784D9E1b692130Ac61bA,0xaDC2cdCEcD0d45033acc62788670C55D45764d24
Arg [1] : shares (uint256[]): 45,45,10
Arg [2] : addresses (address[]): 0x24C835D252Dd8FA19242b7b74A094385f14Beb0f,0xf128b6Ba7db8532Fa1d98BF2C31fC843B2882605,0xAB3b24BA4c5911366C59cC870FAcC25B6ea3a053,0x15B72F2F0cd37fAde6c734E72485dE0909B1e2A8,0xfB7e9E883629eb0D4691D4Dc240b9c57A38888B4,0xc1E6e63BbF402D3Ba812784D9E1b692130Ac61bA,0xaDC2cdCEcD0d45033acc62788670C55D45764d24
Arg [3] : balances (uint256[]): 1,1,910000,10000,26666,26666,26666
Arg [4] : fees (uint256[]): 10,60,10,10,1
Arg [5] : swapAmount (uint256): 50
Arg [6] : uniV2Router (address): 0x60aE616a2155Ee3d9A68541Ba4544862310933d4
-----Encoded View---------------
37 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [3] : 00000000000000000000000000000000000000000000000000000000000002e0
Arg [4] : 00000000000000000000000000000000000000000000000000000000000003e0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [6] : 00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 000000000000000000000000fb7e9e883629eb0d4691d4dc240b9c57a38888b4
Arg [9] : 000000000000000000000000c1e6e63bbf402d3ba812784d9e1b692130ac61ba
Arg [10] : 000000000000000000000000adc2cdcecd0d45033acc62788670c55d45764d24
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [12] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [13] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [14] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [16] : 00000000000000000000000024c835d252dd8fa19242b7b74a094385f14beb0f
Arg [17] : 000000000000000000000000f128b6ba7db8532fa1d98bf2c31fc843b2882605
Arg [18] : 000000000000000000000000ab3b24ba4c5911366c59cc870facc25b6ea3a053
Arg [19] : 00000000000000000000000015b72f2f0cd37fade6c734e72485de0909b1e2a8
Arg [20] : 000000000000000000000000fb7e9e883629eb0d4691d4dc240b9c57a38888b4
Arg [21] : 000000000000000000000000c1e6e63bbf402d3ba812784d9e1b692130ac61ba
Arg [22] : 000000000000000000000000adc2cdcecd0d45033acc62788670c55d45764d24
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [26] : 00000000000000000000000000000000000000000000000000000000000de2b0
Arg [27] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [28] : 000000000000000000000000000000000000000000000000000000000000682a
Arg [29] : 000000000000000000000000000000000000000000000000000000000000682a
Arg [30] : 000000000000000000000000000000000000000000000000000000000000682a
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [32] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [33] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [34] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [35] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
67570:18080:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49632:40;27088:10;49632:40;;;-1:-1:-1;;;;;6678:32:1;;;6660:51;;49662:9:0;6742:2:1;6727:18;;6720:34;6633:18;49632:40:0;;;;;;;67570:18080;;;;;33151:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72061:166;;;;;;;;;;-1:-1:-1;72061:166:0;;;;;:::i;:::-;;:::i;:::-;;35403:194;;;;;;;;;;-1:-1:-1;35403:194:0;;;;;:::i;:::-;;:::i;:::-;;;8832:14:1;;8825:22;8807:41;;8795:2;8780:18;35403:194:0;8667:187:1;81314:321:0;;;;;;;;;;;;;:::i;:::-;;;24263:25:1;;;24251:2;24236:18;81314:321:0;24117:177:1;71831:104:0;;;;;;;;;;-1:-1:-1;71831:104:0;;;;;:::i;:::-;;:::i;68398:40::-;;;;;;;;;;-1:-1:-1;68398:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;68009:24;;;;;;;;;;;;;;;;83049:321;;;;;;;;;;;;;:::i;67723:35::-;;;;;;;;;;-1:-1:-1;67723:35:0;;;;-1:-1:-1;;;;;67723:35:0;;;;;;-1:-1:-1;;;;;6434:32:1;;;6416:51;;6404:2;6389:18;67723:35:0;6270:203:1;34271:108:0;;;;;;;;;;-1:-1:-1;34359:12:0;;34271:108;;51438:616;;;;;;;;;;-1:-1:-1;51438:616:0;;;;;:::i;:::-;;:::i;68284:46::-;;;;;;;;;;-1:-1:-1;68284:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36079:454;;;;;;;;;;-1:-1:-1;36079:454:0;;;;;:::i;:::-;;:::i;67874:26::-;;;;;;;;;;-1:-1:-1;67874:26:0;;;;-1:-1:-1;;;;;67874:26:0;;;67909:25;;;;;;;;;;;;;;;;34113:93;;;;;;;;;;-1:-1:-1;34113:93:0;;34196:2;25750:36:1;;25738:2;25723:18;34113:93:0;25608:184:1;36945:288:0;;;;;;;;;;-1:-1:-1;36945:288:0;;;;;:::i;:::-;;:::i;49763:91::-;;;;;;;;;;-1:-1:-1;49834:12:0;;49763:91;;50892:155;;;;;;;;;;-1:-1:-1;50892:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;51009:21:0;;;50977:7;51009:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;50892:155;80685:180;;;;;;;;;;-1:-1:-1;80685:180:0;;;;;:::i;:::-;;:::i;72235:173::-;;;;;;;;;;-1:-1:-1;72235:173:0;;;;;:::i;:::-;;:::i;52322:700::-;;;;;;;;;;-1:-1:-1;52322:700:0;;;;;:::i;:::-;;:::i;84710:125::-;;;;;;;;;;;;;:::i;67767:28::-;;;;;;;;;;-1:-1:-1;67767:28:0;;;;-1:-1:-1;;;;;67767:28:0;;;79542:1135;;;;;;;;;;;;;:::i;67941:31::-;;;;;;;;;;;;;;;;80873:96;;;;;;;;;;-1:-1:-1;80873:96:0;;;;;:::i;:::-;;:::i;82653:131::-;;;;;;;;;;-1:-1:-1;82653:131:0;;;;;:::i;:::-;;:::i;83717:333::-;;;;;;;;;;;;;:::i;68178:31::-;;;;;;;;;;;;;;;;71222:482;;;;;;;;;;-1:-1:-1;71222:482:0;;;;;:::i;:::-;;:::i;78443:1091::-;;;;;;;;;;-1:-1:-1;78443:1091:0;;;;;:::i;:::-;;:::i;71712:111::-;;;;;;;;;;-1:-1:-1;71712:111:0;;;;;:::i;:::-;;:::i;72586:97::-;;;;;;;;;;-1:-1:-1;72586:97:0;;;;;:::i;:::-;;:::i;68042:25::-;;;;;;;;;;;;;;;;84400:200;;;;;;;;;;;;;:::i;:::-;;;;25486:25:1;;;25542:2;25527:18;;25520:34;;;;25570:18;;;25563:34;25474:2;25459:18;84400:200:0;25284:319:1;34442:157:0;;;;;;;;;;-1:-1:-1;34442:157:0;;;;;:::i;:::-;-1:-1:-1;;;;;34573:18:0;34541:7;34573:18;;;;;;;;;;;;34442:157;28393:148;;;;;;;;;;;;;:::i;68215:24::-;;;;;;;;;;;;;;;;67669:45;;;;;;;;;;-1:-1:-1;67669:45:0;;;;-1:-1:-1;;;;;67669:45:0;;;81899:131;;;;;;;;;;-1:-1:-1;81899:131:0;;;;;:::i;:::-;;:::i;81643:::-;;;;;;;;;;-1:-1:-1;81643:131:0;;;;;:::i;:::-;;:::i;84608:94::-;;;;;;;;;;;;;:::i;72416:162::-;;;;;;;;;;-1:-1:-1;72416:162:0;;;;;:::i;:::-;;:::i;51138:100::-;;;;;;;;;;-1:-1:-1;51138:100:0;;;;;:::i;:::-;;:::i;72691:92::-;;;;;;;;;;-1:-1:-1;72691:92:0;;;;;:::i;:::-;;:::i;27751:79::-;;;;;;;;;;-1:-1:-1;27816:6:0;;-1:-1:-1;;;;;27816:6:0;27751:79;;76248:2187;;;;;;;;;;-1:-1:-1;76248:2187:0;;;;;:::i;:::-;;:::i;71943:110::-;;;;;;;;;;-1:-1:-1;71943:110:0;;;;;:::i;:::-;;:::i;33370:104::-;;;;;;;;;;;;;:::i;50614:109::-;;;;;;;;;;-1:-1:-1;50614:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;50697:18:0;50670:7;50697:18;;;:9;:18;;;;;;;50614:109;72791:313;;;;;;;;;;-1:-1:-1;72791:313:0;;;;;:::i;:::-;;:::i;82163:121::-;;;;;;;;;;-1:-1:-1;82163:121:0;;;;;:::i;:::-;;:::i;84843:125::-;;;;;;;;;;;;;:::i;37736:388::-;;;;;;;;;;-1:-1:-1;37736:388:0;;;;;:::i;:::-;;:::i;81782:109::-;;;;;;;;;;;;;:::i;67802:27::-;;;;;;;;;;-1:-1:-1;67802:27:0;;;;-1:-1:-1;;;;;67802:27:0;;;34812:200;;;;;;;;;;-1:-1:-1;34812:200:0;;;;;:::i;:::-;;:::i;67979:23::-;;;;;;;;;;;;;;;;70904:157;;;;;;;;;;-1:-1:-1;70904:157:0;;;;;:::i;:::-;;:::i;68337:57::-;;;;;;;;;;-1:-1:-1;68337:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;81126:180;;;;;;;;;;-1:-1:-1;81126:180:0;;;;;:::i;:::-;;:::i;83378:331::-;;;;;;;;;;;;;:::i;85119:93::-;;;;;;;;;;-1:-1:-1;85119:93:0;;;;;:::i;:::-;;:::i;67836:31::-;;;;;;;;;;-1:-1:-1;67836:31:0;;;;-1:-1:-1;;;;;67836:31:0;;;84973:137;;;;;;;;;;;;;:::i;85218:112::-;;;;;;;;;;-1:-1:-1;85218:112:0;;;;;:::i;:::-;;:::i;50410:105::-;;;;;;;;;;-1:-1:-1;50410:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;50491:16:0;50464:7;50491:16;;;:7;:16;;;;;;;50410:105;82409:120;;;;;;;;;;-1:-1:-1;82409:120:0;;;;;:::i;:::-;;:::i;50200:119::-;;;;;;;;;;-1:-1:-1;50200:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;50285:26:0;50258:7;50285:26;;;:19;:26;;;;;;;50200:119;73112:141;;;;;;;;;;-1:-1:-1;73112:141:0;;;;;:::i;:::-;;:::i;82918:123::-;;;;;;;;;;;;;:::i;82038:117::-;;;;;;;;;;;;;:::i;35075:181::-;;;;;;;;;;-1:-1:-1;35075:181:0;;;;;:::i;:::-;-1:-1:-1;;;;;35221:18:0;;;35189:7;35221:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;35075:181;49948:95;;;;;;;;;;-1:-1:-1;50021:14:0;;49948:95;;85336:311;;;;;;;;;;-1:-1:-1;85336:311:0;;;;;:::i;:::-;;:::i;84058:334::-;;;;;;;;;;;;;:::i;28696:281::-;;;;;;;;;;-1:-1:-1;28696:281:0;;;;;:::i;:::-;;:::i;68076:21::-;;;;;;;;;;;;;;;;82292:109;;;;;;;;;;;;;:::i;80977:141::-;;;;;;;;;;-1:-1:-1;80977:141:0;;;;;:::i;:::-;;:::i;82792:118::-;;;;;;;;;;;;;:::i;82537:108::-;;;;;;;;;;;;;:::i;71069:145::-;;;;;;;;;;-1:-1:-1;71069:145:0;;;;;:::i;:::-;;:::i;33151:100::-;33205:13;33238:5;33231:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33151:100;:::o;72061:166::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;;;;;;;;;72132:10:::1;:18:::0;;;72210:8:::1;::::0;72188:16:::1;::::0;72173:46:::1;::::0;72210:8;72173:32:::1;::::0;72145:5;;72173:14:::1;:32::i;:::-;:36:::0;::::1;:46::i;:::-;72161:9;:58:::0;-1:-1:-1;72061:166:0:o;35403:194::-;35506:4;35528:39;27088:10;35551:7;35560:6;35528:8;:39::i;:::-;-1:-1:-1;35585:4:0;35403:194;;;;;:::o;81314:321::-;81362:7;27088:10;81382:59;;;;-1:-1:-1;;;81382:59:0;;;;;;;:::i;:::-;81474:17;;-1:-1:-1;;;;;81474:17:0;:30;27088:10;81474:44;;-1:-1:-1;;;;;;81474:44:0;;;;;;;-1:-1:-1;;;;;6434:32:1;;;81474:44:0;;;6416:51:1;6389:18;;81474:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;81452:107;;;;-1:-1:-1;;;81452:107:0;;;;;;;:::i;:::-;81577:17;;-1:-1:-1;;;;;81577:17:0;:36;27088:10;81577:50;;-1:-1:-1;;;;;;81577:50:0;;;;;;;-1:-1:-1;;;;;6434:32:1;;;81577:50:0;;;6416:51:1;6389:18;;81577:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;81570:57;;81314:321;:::o;71831:104::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;71908:12:::1;:19:::0;;-1:-1:-1;;;;;;71908:19:0::1;-1:-1:-1::0;;;;;71908:19:0;;;::::1;::::0;;;::::1;::::0;;71831:104::o;83049:321::-;83095:13;27088:10;83121:59;;;;-1:-1:-1;;;83121:59:0;;;;;;;:::i;:::-;83213:17;;-1:-1:-1;;;;;83213:17:0;:30;27088:10;83213:44;;-1:-1:-1;;;;;;83213:44:0;;;;;;;-1:-1:-1;;;;;6434:32:1;;;83213:44:0;;;6416:51:1;6389:18;;83213:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;83191:107;;;;-1:-1:-1;;;83191:107:0;;;;;;;:::i;:::-;83316:17;;-1:-1:-1;;;;;83316:17:0;:32;27088:10;83349:12;83316:46;;-1:-1:-1;;;;;;83316:46:0;;;;;;;-1:-1:-1;;;;;6434:32:1;;;83316:46:0;;;6416:51:1;6389:18;;83316:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;83316:46:0;;;;;;;;;;;;:::i;51438:616::-;-1:-1:-1;;;;;51514:16:0;;51533:1;51514:16;;;:7;:16;;;;;;51506:71;;;;-1:-1:-1;;;51506:71:0;;;;;;;:::i;:::-;51590:21;51638:15;50021:14;;;49948:95;51638:15;51614:39;;:21;:39;:::i;:::-;51590:63;;51664:15;51682:108;51712:7;51734:13;51762:17;51771:7;-1:-1:-1;;;;;50697:18:0;50670:7;50697:18;;;:9;:18;;;;;;;50614:109;51762:17;51682:15;:108::i;:::-;51664:126;-1:-1:-1;51811:12:0;51803:68;;;;-1:-1:-1;;;51803:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51884:18:0;;;;;;:9;:18;;;;;:29;;51906:7;;51884:18;:29;;51906:7;;51884:29;:::i;:::-;;;;;;;;51942:7;51924:14;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;51962:35:0;;-1:-1:-1;51980:7:0;51989;51962:17;:35::i;:::-;52013:33;;;-1:-1:-1;;;;;6678:32:1;;6660:51;;6742:2;6727:18;;6720:34;;;52013:33:0;;6633:18:1;52013:33:0;;;;;;;51495:559;;51438:616;:::o;36079:454::-;36219:4;36236:36;36246:6;36254:9;36265:6;36236:9;:36::i;:::-;36283:220;36306:6;27088:10;36354:138;36410:6;36354:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36354:19:0;;;;;;:11;:19;;;;;;;;27088:10;36354:33;;;;;;;;;;:37;:138::i;:::-;36283:8;:220::i;:::-;-1:-1:-1;36521:4:0;36079:454;;;;;;:::o;36945:288::-;27088:10;37048:4;37142:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;37142:34:0;;;;;;;;;;37048:4;;37070:133;;37120:7;;37142:50;;37181:10;37142:38;:50::i;80685:180::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;80760:21:::1;80751:6;:30;80747:66;;;-1:-1:-1::0;80792:21:0::1;80747:66;27816:6:::0;;80824:33:::1;::::0;-1:-1:-1;;;;;27816:6:0;;;;80824:33;::::1;;;::::0;80850:6;;80824:33:::1;::::0;;;80850:6;27816;80824:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;80685:180:::0;:::o;72235:173::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;72307:16:::1;:24:::0;;;72391:8:::1;::::0;72354:10:::1;::::0;:46:::1;::::0;72391:8;72354:32:::1;::::0;72326:5;72354:14:::1;:32::i;52322:700::-:0;-1:-1:-1;;;;;52404:16:0;;52423:1;52404:16;;;:7;:16;;;;;;52396:71;;;;-1:-1:-1;;;52396:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50285:26:0;;52480:21;50285:26;;;:19;:26;;;;;;52504:30;;-1:-1:-1;;;52504:30:0;;52528:4;52504:30;;;6416:51:1;-1:-1:-1;;;;;52504:15:0;;;;;6389:18:1;;52504:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;52480:86;;52577:15;52595:115;52625:7;52647:13;52675:24;52684:5;52691:7;-1:-1:-1;;;;;51009:21:0;;;50977:7;51009:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;50892:155;52595:115;52577:133;-1:-1:-1;52731:12:0;52723:68;;;;-1:-1:-1;;;52723:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52804:21:0;;;;;;;:14;:21;;;;;;;;:30;;;;;;;;;;;:41;;52838:7;;52804:21;:41;;52838:7;;52804:41;:::i;:::-;;;;-1:-1:-1;;;;;;;52856:26:0;;;;;;:19;:26;;;;;:37;;52886:7;;52856:26;:37;;52886:7;;52856:37;:::i;:::-;;;;-1:-1:-1;52906:47:0;;-1:-1:-1;52929:5:0;52936:7;52945;52906:22;:47::i;:::-;52969:45;;;-1:-1:-1;;;;;6678:32:1;;;6660:51;;6742:2;6727:18;;6720:34;;;52969:45:0;;;;;6633:18:1;52969:45:0;;;;;;;52385:637;;52322:700;;:::o;84710:125::-;84790:17;;:37;;;-1:-1:-1;;;84790:37:0;;;;84763:7;;-1:-1:-1;;;;;84790:17:0;;:35;;:37;;;;;;;;;;;;;;:17;:37;;;;;;;;;;79542:1135;27088:10;;79622:113;;;;-1:-1:-1;;;79622:113:0;;22783:2:1;79622:113:0;;;22765:21:1;22822:2;22802:18;;;22795:30;22861:34;22841:18;;;22834:62;-1:-1:-1;;;22912:18:1;;;22905:41;22963:19;;79622:113:0;22581:407:1;79622:113:0;-1:-1:-1;;;;;79755:22:0;;;;;;:14;:22;;;;;;;;79754:23;79746:67;;;;-1:-1:-1;;;79746:67:0;;15977:2:1;79746:67:0;;;15959:21:1;16016:2;15996:18;;;15989:30;16055:33;16035:18;;;16028:61;16106:18;;79746:67:0;15775:355:1;79746:67:0;79856:12;;-1:-1:-1;;;;;79846:22:0;;;79856:12;;79846:22;;;;:52;;-1:-1:-1;79882:16:0;;-1:-1:-1;;;;;79872:26:0;;;79882:16;;79872:26;;79846:52;79824:158;;;;-1:-1:-1;;;79824:158:0;;19600:2:1;79824:158:0;;;19582:21:1;19639:2;19619:18;;;19612:30;19678:34;19658:18;;;19651:62;19749:26;19729:18;;;19722:54;19793:19;;79824:158:0;19398:420:1;79824:158:0;80016:17;;:44;;-1:-1:-1;;;80016:44:0;;-1:-1:-1;;;;;6434:32:1;;;80016:44:0;;;6416:51:1;79993:20:0;;80016:17;;:36;;6389:18:1;;80016:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;79993:67;;80108:1;80093:12;:16;80071:118;;;;-1:-1:-1;;;80071:118:0;;23538:2:1;80071:118:0;;;23520:21:1;23577:2;23557:18;;;23550:30;23616:34;23596:18;;;23589:62;-1:-1:-1;;;23667:18:1;;;23660:50;23727:19;;80071:118:0;23336:416:1;80071:118:0;80204:11;;;;;;;80200:345;;;80268:10;;80232:17;;80268:14;80264:230;;80315:37;80348:3;80315:28;80332:10;;80315:12;:16;;:28;;;;:::i;:::-;:32;;:37::i;:::-;80375:16;;80303:49;;-1:-1:-1;80359:59:0;;-1:-1:-1;;;;;80375:16:0;80401:4;80303:49;80359:15;:59::i;:::-;80454:12;;80437:41;;-1:-1:-1;;;;;80454:12:0;80468:9;80437:16;:41::i;:::-;80508:25;80524:9;80508:25;;:::i;:::-;;;80217:328;80200:345;80571:16;;80555:55;;-1:-1:-1;;;;;80571:16:0;80589:6;80597:12;80555:15;:55::i;:::-;80621:17;;:48;;-1:-1:-1;;;80621:48:0;;-1:-1:-1;;;;;6434:32:1;;;80621:48:0;;;6416:51:1;80621:17:0;;;;:40;;6389:18:1;;80621:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;79571:1106;;79542:1135::o;80873:96::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;80941:11:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;80941:20:0;;::::1;::::0;;;::::1;::::0;;80873:96::o;82653:131::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;82728:17:::1;::::0;:48:::1;::::0;-1:-1:-1;;;82728:48:0;;::::1;::::0;::::1;24263:25:1::0;;;-1:-1:-1;;;;;82728:17:0;;::::1;::::0;:34:::1;::::0;24236:18:1;;82728:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;82653:131:::0;:::o;83717:333::-;83765:13;27088:10;83791:59;;;;-1:-1:-1;;;83791:59:0;;;;;;;:::i;:::-;83883:17;;-1:-1:-1;;;;;83883:17:0;:30;27088:10;83883:44;;-1:-1:-1;;;;;;83883:44:0;;;;;;;-1:-1:-1;;;;;6434:32:1;;;83883:44:0;;;6416:51:1;6389:18;;83883:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;83861:107;;;;-1:-1:-1;;;83861:107:0;;;;;;;:::i;:::-;83986:17;;-1:-1:-1;;;;;83986:17:0;:42;27088:10;84029:12;27008:98;71222:482;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;71331:15:::1;::::0;-1:-1:-1;;;;;71309:38:0;;::::1;71331:15:::0;::::1;71309:38;;71301:91;;;::::0;-1:-1:-1;;;71301:91:0;;16337:2:1;71301:91:0::1;::::0;::::1;16319:21:1::0;16376:2;16356:18;;;16349:30;16415:34;16395:18;;;16388:62;-1:-1:-1;;;16466:18:1;;;16459:38;16514:19;;71301:91:0::1;16135:404:1::0;71301:91:0::1;71450:15;::::0;71408:59:::1;::::0;-1:-1:-1;;;;;71450:15:0;;::::1;::::0;71408:59;::::1;::::0;::::1;::::0;71450:15:::1;::::0;71408:59:::1;71478:15;:42:::0;;-1:-1:-1;;;;;;71478:42:0::1;-1:-1:-1::0;;;;;71478:42:0;::::1;::::0;;::::1;::::0;;;71568:25:::1;::::0;;-1:-1:-1;;;71568:25:0;;;;-1:-1:-1;;71478:42:0;71568:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;71478:42;71568:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;71556:59:0::1;;71624:4;71631:15;;;;;;;;;-1:-1:-1::0;;;;;71631:15:0::1;-1:-1:-1::0;;;;;71631:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;71556:99;::::0;-1:-1:-1;;;;;;71556:99:0::1;::::0;;;;;;-1:-1:-1;;;;;6995:15:1;;;71556:99:0::1;::::0;::::1;6977:34:1::0;7047:15;;7027:18;;;7020:43;6912:18;;71556:99:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;71666:13;:30:::0;;-1:-1:-1;;;;;;71666:30:0::1;-1:-1:-1::0;;;;;71666:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;71222:482:0:o;78443:1091::-;27088:10;;78543:70;;;;-1:-1:-1;;;78543:70:0;;12796:2:1;78543:70:0;;;12778:21:1;12835:2;12815:18;;;12808:30;12874:34;12854:18;;;12847:62;-1:-1:-1;;;12925:18:1;;;12918:35;12970:19;;78543:70:0;12594:401:1;78543:70:0;-1:-1:-1;;;;;78633:22:0;;;;;;:14;:22;;;;;;;;78632:23;78624:67;;;;-1:-1:-1;;;78624:67:0;;15977:2:1;78624:67:0;;;15959:21:1;16016:2;15996:18;;;15989:30;16055:33;16035:18;;;16028:61;16106:18;;78624:67:0;15775:355:1;78624:67:0;78734:12;;-1:-1:-1;;;;;78724:22:0;;;78734:12;;78724:22;;;;:52;;-1:-1:-1;78760:16:0;;-1:-1:-1;;;;;78750:26:0;;;78760:16;;78750:26;;78724:52;78702:152;;;;-1:-1:-1;;;78702:152:0;;9752:2:1;78702:152:0;;;9734:21:1;9791:2;9771:18;;;9764:30;9830:34;9810:18;;;9803:62;-1:-1:-1;;;9881:18:1;;;9874:48;9939:19;;78702:152:0;9550:414:1;78702:152:0;78888:17;;:92;;-1:-1:-1;;;78888:92:0;;-1:-1:-1;;;;;6678:32:1;;;78888:92:0;;;6660:51:1;6727:18;;;6720:34;;;78865:20:0;;78888:17;;:36;;6633:18:1;;78888:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;78865:115;;79028:1;79013:12;:16;78991:112;;;;-1:-1:-1;;;78991:112:0;;14385:2:1;78991:112:0;;;14367:21:1;14424:2;14404:18;;;14397:30;14463:34;14443:18;;;14436:62;-1:-1:-1;;;14514:18:1;;;14507:44;14568:19;;78991:112:0;14183:410:1;78991:112:0;79120:11;;;;;;;79116:279;;;79184:10;;79148:17;;79184:14;79180:164;;79231:37;79264:3;79231:28;79248:10;;79231:12;:16;;:28;;;;:::i;:37::-;79304:12;;79219:49;;-1:-1:-1;79287:41:0;;-1:-1:-1;;;;;79304:12:0;79219:49;79287:16;:41::i;:::-;79358:25;79374:9;79358:25;;:::i;:::-;;;79133:262;79116:279;79421:16;;79405:55;;-1:-1:-1;;;;;79421:16:0;79439:6;79447:12;79405:15;:55::i;:::-;79471:17;;:55;;-1:-1:-1;;;79471:55:0;;-1:-1:-1;;;;;6678:32:1;;;79471:55:0;;;6660:51:1;6727:18;;;6720:34;;;79471:17:0;;;;:36;;6633:18:1;;79471:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;78492:1042;;78443:1091;:::o;71712:111::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;71790:16:::1;:25:::0;71712:111::o;72586:97::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;72657:10:::1;:18:::0;72586:97::o;84400:200::-;27963:6;;84480:7;;;;;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;84554:17:::1;;;;;;;;;-1:-1:-1::0;;;;;84554:17:0::1;-1:-1:-1::0;;;;;84554:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;84547:45;;;;;;84400:200:::0;;;:::o;28393:148::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;28484:6:::1;::::0;28463:40:::1;::::0;28500:1:::1;::::0;-1:-1:-1;;;;;28484:6:0::1;::::0;28463:40:::1;::::0;28500:1;;28463:40:::1;28514:6;:19:::0;;-1:-1:-1;;;;;;28514:19:0::1;::::0;;28393:148::o;81899:131::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;81974:17:::1;::::0;:48:::1;::::0;-1:-1:-1;;;81974:48:0;;::::1;::::0;::::1;24263:25:1::0;;;-1:-1:-1;;;;;81974:17:0;;::::1;::::0;:38:::1;::::0;24236:18:1;;81974:48:0::1;24117:177:1::0;81643:131:0;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;81718:17:::1;::::0;:48:::1;::::0;-1:-1:-1;;;81718:48:0;;::::1;::::0;::::1;24263:25:1::0;;;-1:-1:-1;;;;;81718:17:0;;::::1;::::0;:34:::1;::::0;24236:18:1;;81718:48:0::1;24117:177:1::0;84608:94:0;84656:17;;;;;;;;;-1:-1:-1;;;;;84656:17:0;-1:-1:-1;;;;;84656:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;72416:162::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;72485:8:::1;:16:::0;;;72539::::1;::::0;72524:10:::1;::::0;:46:::1;::::0;72496:5;;72524:32:::1;::::0;:14:::1;:32::i;51138:100::-:0;51189:7;51216;51224:5;51216:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;51216:14:0;;51138:100;-1:-1:-1;;51138:100:0:o;72691:92::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;72761:6:::1;:14:::0;72691:92::o;76248:2187::-;76359:1;76344:4;76338:18;:22;:49;;;;;76385:2;76370:4;76364:18;:23;76338:49;76316:131;;;;-1:-1:-1;;;76316:131:0;;10917:2:1;76316:131:0;;;10899:21:1;;;10936:18;;;10929:30;10995:34;10975:18;;;10968:62;11047:18;;76316:131:0;10715:356:1;76316:131:0;27088:10;;76498:116;;;;-1:-1:-1;;;76498:116:0;;20025:2:1;76498:116:0;;;20007:21:1;20064:2;20044:18;;;20037:30;20103:34;20083:18;;;20076:62;-1:-1:-1;;;20154:18:1;;;20147:44;20208:19;;76498:116:0;19823:410:1;76498:116:0;-1:-1:-1;;;;;76634:22:0;;;;;;:14;:22;;;;;;;;76633:23;76625:70;;;;-1:-1:-1;;;76625:70:0;;19197:2:1;76625:70:0;;;19179:21:1;19236:2;19216:18;;;19209:30;19275:34;19255:18;;;19248:62;-1:-1:-1;;;19326:18:1;;;19319:32;19368:19;;76625:70:0;18995:398:1;76625:70:0;76738:12;;-1:-1:-1;;;;;76728:22:0;;;76738:12;;76728:22;;;;:52;;-1:-1:-1;76764:16:0;;-1:-1:-1;;;;;76754:26:0;;;76764:16;;76754:26;;76728:52;76706:157;;;;-1:-1:-1;;;76706:157:0;;18773:2:1;76706:157:0;;;18755:21:1;18812:2;18792:18;;;18785:30;18851:34;18831:18;;;18824:62;18922:25;18902:18;;;18895:53;18965:19;;76706:157:0;18571:419:1;76706:157:0;76894:17;;:29;;;-1:-1:-1;;;76894:29:0;;;;76874:17;;-1:-1:-1;;;;;76894:17:0;;:27;;:29;;;;;;;;;;;;;;:17;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;76874:49;;76977:9;76956:17;76966:6;-1:-1:-1;;;;;34573:18:0;34541:7;34573:18;;;;;;;;;;;;34442:157;76956:17;:30;;76934:124;;;;-1:-1:-1;;;76934:124:0;;16746:2:1;76934:124:0;;;16728:21:1;16785:2;16765:18;;;16758:30;16824:34;16804:18;;;16797:62;-1:-1:-1;;;16875:18:1;;;16868:42;16927:19;;76934:124:0;16544:408:1;76934:124:0;77118:4;77069:28;34573:18;;;;;;;;;;;77179:16;;77155:40;;;;;;;77224;;-1:-1:-1;77253:11:0;;;;;;;77224:40;:66;;;;-1:-1:-1;77282:8:0;;;;77281:9;77224:66;:100;;;;-1:-1:-1;27816:6:0;;-1:-1:-1;;;;;77307:17:0;;;27816:6;;77307:17;;77224:100;:151;;;;-1:-1:-1;;;;;;77342:33:0;;;;;;:25;:33;;;;;;;;77341:34;77224:151;77206:1109;;;77402:8;:15;;-1:-1:-1;;77402:15:0;77413:4;77402:15;;;77481:8;;77402;;77456:43;;77495:3;;77456:34;;:20;;:24;:34::i;:43::-;77533:12;;77434:65;;-1:-1:-1;77516:43:0;;-1:-1:-1;;;;;77533:12:0;77434:65;77516:16;:43::i;:::-;77576:25;77604:73;77673:3;77604:50;77643:10;;77604:20;:38;;:50;;;;:::i;:73::-;77576:101;;77694:27;77724:70;77776:3;77724:29;77746:6;;77724:17;:21;;:29;;;;:::i;:70::-;77828:16;;77694:100;;-1:-1:-1;77811:55:0;;-1:-1:-1;;;;;77828:16:0;77694:100;77811:16;:55::i;:::-;77953:16;;77881:166;;77929:4;;-1:-1:-1;;;;;77953:16:0;77990:42;:17;78012:19;77990:21;:42::i;:::-;77881:15;:166::i;:::-;78064:18;78085:83;78150:3;78085:42;78110:16;;78085:20;:24;;:42;;;;:::i;:83::-;78064:104;;78185:26;78200:10;78185:14;:26::i;:::-;78263:4;34541:7;34573:18;;;;;;;;;;;78228:42;;:16;:42::i;:::-;-1:-1:-1;;78287:8:0;:16;;-1:-1:-1;;78287:16:0;;;-1:-1:-1;;77206:1109:0;78325:49;78341:6;78357:4;78364:9;78325:15;:49::i;:::-;78385:17;;:42;;-1:-1:-1;;;78385:42:0;;-1:-1:-1;;;;;78385:17:0;;;;:28;;:42;;78414:6;;78422:4;;78385:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76305:2130;;;;76248:2187;:::o;71943:110::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;72022:16:::1;:23:::0;;-1:-1:-1;;;;;;72022:23:0::1;-1:-1:-1::0;;;;;72022:23:0;;;::::1;::::0;;;::::1;::::0;;71943:110::o;33370:104::-;33426:13;33459:7;33452:14;;;;;:::i;72791:313::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;72927:13:::1;::::0;-1:-1:-1;;;;;72919:21:0;;::::1;72927:13:::0;::::1;72919:21;;72897:145;;;::::0;-1:-1:-1;;;72897:145:0;;18290:2:1;72897:145:0::1;::::0;::::1;18272:21:1::0;18329:2;18309:18;;;18302:30;18368:34;18348:18;;;18341:62;18439:34;18419:18;;;18412:62;-1:-1:-1;;;18490:19:1;;;18483:41;18541:19;;72897:145:0::1;18088:478:1::0;72897:145:0::1;73055:41;73084:4;73090:5;73055:28;:41::i;82163:121::-:0;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;82233:17:::1;::::0;:43:::1;::::0;-1:-1:-1;;;82233:43:0;;::::1;::::0;::::1;24263:25:1::0;;;-1:-1:-1;;;;;82233:17:0;;::::1;::::0;:34:::1;::::0;24236:18:1;;82233:43:0::1;24117:177:1::0;84843:125:0;84923:17;;:37;;;-1:-1:-1;;;84923:37:0;;;;84896:7;;-1:-1:-1;;;;;84923:17:0;;:35;;:37;;;;;;;;;;;;;;:17;:37;;;;;;;;;;37736:388;37844:4;37866:228;27088:10;37916:7;37938:145;37995:15;37938:145;;;;;;;;;;;;;;;;;27088:10;37938:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;37938:34:0;;;;;;;;;;;;:38;:145::i;81782:109::-;81854:17;;:29;;;-1:-1:-1;;;81854:29:0;;;;81827:7;;-1:-1:-1;;;;;81854:17:0;;:27;;:29;;;;;;;;;;;;;;:17;:29;;;;;;;;;;34812:200;34918:4;34940:42;27088:10;34964:9;34975:6;34940:9;:42::i;70904:157::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;71000:1:::1;70991:6;:10;70983:37;;;::::0;-1:-1:-1;;;70983:37:0;;23195:2:1;70983:37:0::1;::::0;::::1;23177:21:1::0;23234:2;23214:18;;;23207:30;-1:-1:-1;;;23253:18:1;;;23246:44;23307:18;;70983:37:0::1;22993:338:1::0;70983:37:0::1;71031:16;::::0;71025:31:::1;::::0;-1:-1:-1;;;;;71031:16:0::1;71049:6:::0;71025:5:::1;:31::i;:::-;70904:157:::0;:::o;81126:180::-;27963:6;;81221:7;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;81253:17:::1;::::0;:45:::1;::::0;-1:-1:-1;;;81253:45:0;;-1:-1:-1;;;;;6434:32:1;;;81253:45:0::1;::::0;::::1;6416:51:1::0;81253:17:0;;::::1;::::0;:36:::1;::::0;6389:18:1;;81253:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;83378:331::-:0;83427:13;27088:10;83453:59;;;;-1:-1:-1;;;83453:59:0;;;;;;;:::i;:::-;83545:17;;-1:-1:-1;;;;;83545:17:0;:30;27088:10;83545:44;;-1:-1:-1;;;;;;83545:44:0;;;;;;;-1:-1:-1;;;;;6434:32:1;;;83545:44:0;;;6416:51:1;6389:18;;83545:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;83523:107;;;;-1:-1:-1;;;83523:107:0;;;;;;;:::i;:::-;83648:17;;-1:-1:-1;;;;;83648:17:0;:39;27088:10;83688:12;27008:98;85119:93;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;85188:5:::1;:16:::0;85119:93::o;84973:137::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;85035:11:::1;::::0;::::1;;85034:12;85026:47;;;::::0;-1:-1:-1;;;85026:47:0;;12088:2:1;85026:47:0::1;::::0;::::1;12070:21:1::0;12127:2;12107:18;;;12100:30;12166:25;12146:18;;;12139:53;12209:18;;85026:47:0::1;11886:347:1::0;85026:47:0::1;85084:11;:18:::0;;-1:-1:-1;;85084:18:0::1;85098:4;85084:18;::::0;;84973:137::o;85218:112::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;85297:17:0;;;::::1;;::::0;;;:8:::1;:17;::::0;;;;:25;;-1:-1:-1;;85297:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;85218:112::o;82409:120::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;82477:17:::1;::::0;:44:::1;::::0;-1:-1:-1;;;82477:44:0;;8832:14:1;;8825:22;82477:44:0::1;::::0;::::1;8807:41:1::0;-1:-1:-1;;;;;82477:17:0;;::::1;::::0;:35:::1;::::0;8780:18:1;;82477:44:0::1;8667:187:1::0;73112:141:0;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;73214:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;73214:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;73112:141::o;82918:123::-;82992:17;;:41;;;-1:-1:-1;;;82992:41:0;;;;82965:7;;-1:-1:-1;;;;;82992:17:0;;:39;;:41;;;;;;;;;;;;;;:17;:41;;;;;;;;;;82038:117;82114:17;;:33;;;-1:-1:-1;;;82114:33:0;;;;82087:7;;-1:-1:-1;;;;;82114:17:0;;:31;;:33;;;;;;;;;;;;;;:17;:33;;;;;;;;;;85336:311;85523:51;;-1:-1:-1;;;85523:51:0;;85548:10;85523:51;;;7314:34:1;85470:42:0;7364:18:1;;;7357:43;;;7416:18;;;7409:34;;;85402:42:0;;;;85523:24;;7249:18:1;;85523:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;85601:16:0;;85585:54;;-1:-1:-1;;;;;85601:16:0;85619:10;85631:7;85585:15;:54::i;84058:334::-;84109:13;27088:10;84135:59;;;;-1:-1:-1;;;84135:59:0;;;;;;;:::i;:::-;84227:17;;-1:-1:-1;;;;;84227:17:0;:30;27088:10;84227:44;;-1:-1:-1;;;;;;84227:44:0;;;;;;;-1:-1:-1;;;;;6434:32:1;;;84227:44:0;;;6416:51:1;6389:18;;84227:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;84205:107;;;;-1:-1:-1;;;84205:107:0;;;;;;;:::i;:::-;84330:17;;-1:-1:-1;;;;;84330:17:0;:40;27088:10;84371:12;27008:98;28696:281;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28799:22:0;::::1;28777:110;;;::::0;-1:-1:-1;;;28777:110:0;;11278:2:1;28777:110:0::1;::::0;::::1;11260:21:1::0;11317:2;11297:18;;;11290:30;11356:34;11336:18;;;11329:62;-1:-1:-1;;;11407:18:1;;;11400:36;11453:19;;28777:110:0::1;11076:402:1::0;28777:110:0::1;28924:6;::::0;28903:38:::1;::::0;-1:-1:-1;;;;;28903:38:0;;::::1;::::0;28924:6:::1;::::0;28903:38:::1;::::0;28924:6:::1;::::0;28903:38:::1;28952:6;:17:::0;;-1:-1:-1;;;;;;28952:17:0::1;-1:-1:-1::0;;;;;28952:17:0;;;::::1;::::0;;;::::1;::::0;;28696:281::o;82292:109::-;82364:17;;:29;;;-1:-1:-1;;;82364:29:0;;;;82337:7;;-1:-1:-1;;;;;82364:17:0;;:27;;:29;;;;;;;;;;;;;;:17;:29;;;;;;;;;;80977:141;81067:17;;:43;;-1:-1:-1;;;81067:43:0;;-1:-1:-1;;;;;6434:32:1;;;81067:43:0;;;6416:51:1;81040:7:0;;81067:17;;:34;;6389:18:1;;81067:43:0;6270:203:1;82792:118:0;82864:17;;:38;;;-1:-1:-1;;;82864:38:0;;;;82837:7;;-1:-1:-1;;;;;82864:17:0;;:36;;:38;;;;;;;;;;;;;;:17;:38;;;;;;;;;;82537:108;82607:17;;:30;;;-1:-1:-1;;;82607:30:0;;;;82583:4;;-1:-1:-1;;;;;82607:17:0;;:28;;:30;;;;;;;;;;;;;;:17;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;71069:145::-;27963:6;;-1:-1:-1;;;;;27963:6:0;27088:10;27963:22;27955:67;;;;-1:-1:-1;;;27955:67:0;;;;;;;:::i;:::-;71150:17:::1;:56:::0;;-1:-1:-1;;;;;;71150:56:0::1;-1:-1:-1::0;;;;;71150:56:0;;;::::1;::::0;;;::::1;::::0;;71069:145::o;2891:181::-;2949:7;;2981:5;2985:1;2981;:5;:::i;:::-;2969:17;;3010:1;3005;:6;;2997:46;;;;-1:-1:-1;;;2997:46:0;;12440:2:1;2997:46:0;;;12422:21:1;12479:2;12459:18;;;12452:30;12518:29;12498:18;;;12491:57;12565:18;;2997:46:0;12238:351:1;41115:380:0;-1:-1:-1;;;;;41251:19:0;;41243:68;;;;-1:-1:-1;;;41243:68:0;;21609:2:1;41243:68:0;;;21591:21:1;21648:2;21628:18;;;21621:30;21687:34;21667:18;;;21660:62;-1:-1:-1;;;21738:18:1;;;21731:34;21782:19;;41243:68:0;21407:400:1;41243:68:0;-1:-1:-1;;;;;41330:21:0;;41322:68;;;;-1:-1:-1;;;41322:68:0;;11685:2:1;41322:68:0;;;11667:21:1;11724:2;11704:18;;;11697:30;11763:34;11743:18;;;11736:62;-1:-1:-1;;;11814:18:1;;;11807:32;11856:19;;41322:68:0;11483:398:1;41322:68:0;-1:-1:-1;;;;;41403:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41455:32;;24263:25:1;;;41455:32:0;;24236:18:1;41455:32:0;;;;;;;;41115:380;;;:::o;53200:257::-;53419:12;;-1:-1:-1;;;;;53399:16:0;;53346:7;53399:16;;;:7;:16;;;;;;53346:7;;53434:15;;53383:32;;:13;:32;:::i;:::-;53382:49;;;;:::i;:::-;:67;;;;:::i;:::-;53366:83;53200:257;-1:-1:-1;;;;53200:257:0:o;11032:391::-;11161:6;11136:21;:31;;11114:110;;;;-1:-1:-1;;;11114:110:0;;14800:2:1;11114:110:0;;;14782:21:1;14839:2;14819:18;;;14812:30;14878:31;14858:18;;;14851:59;14927:18;;11114:110:0;14598:353:1;11114:110:0;11238:12;11256:9;-1:-1:-1;;;;;11256:14:0;11278:6;11256:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11237:52;;;11322:7;11300:115;;;;-1:-1:-1;;;11300:115:0;;13958:2:1;11300:115:0;;;13940:21:1;13997:2;13977:18;;;13970:30;14036:34;14016:18;;;14009:62;14107:28;14087:18;;;14080:56;14153:19;;11300:115:0;13756:422:1;73619:842:0;-1:-1:-1;;;;;73751:18:0;;73743:68;;;;-1:-1:-1;;;73743:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;73830:16:0;;73822:64;;;;-1:-1:-1;;;73822:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;73906:20:0;;;;;;:14;:20;;;;;;;;73905:21;:44;;;;-1:-1:-1;;;;;;73931:18:0;;;;;;:14;:18;;;;;;;;73930:19;73905:44;73897:76;;;;-1:-1:-1;;;73897:76:0;;17589:2:1;73897:76:0;;;17571:21:1;17628:2;17608:18;;;17601:30;-1:-1:-1;;;17647:18:1;;;17640:49;17706:18;;73897:76:0;17387:343:1;73897:76:0;27816:6;;-1:-1:-1;;;;;73982:15:0;;;27816:6;;73982:15;;;;:32;;-1:-1:-1;27816:6:0;;-1:-1:-1;;;;;74001:13:0;;;27816:6;;74001:13;;73982:32;:57;;;;-1:-1:-1;;;;;;74018:21:0;;74034:4;74018:21;;73982:57;:80;;;;-1:-1:-1;;;;;;74043:19:0;;74057:4;74043:19;;73982:80;:99;;;;-1:-1:-1;;;;;;74067:14:0;;;;;;:8;:14;;;;;;;;74066:15;73982:99;:116;;;;-1:-1:-1;;;;;;74086:12:0;;;;;;:8;:12;;;;;;;;74085:13;73982:116;:139;;;;-1:-1:-1;74108:13:0;;-1:-1:-1;;;;;74102:19:0;;;74108:13;;74102:19;;73982:139;:173;;;;-1:-1:-1;74139:15:0;;-1:-1:-1;;;;;74125:30:0;;;74139:15;;74125:30;;73982:173;73978:432;;;74167:11;;;;74163:155;;;-1:-1:-1;;;;;34573:18:0;;74187:21;34573:18;;;;;;;;;;;74277:5;;74248:25;:6;34573:18;74248:10;:25::i;:::-;:34;;74240:71;;;;-1:-1:-1;;;74240:71:0;;17937:2:1;74240:71:0;;;17919:21:1;17976:2;17956:18;;;17949:30;18015:26;17995:18;;;17988:54;18059:18;;74240:71:0;17735:348:1;74240:71:0;74180:138;74163:155;74328:11;;;;74327:12;:37;;;;-1:-1:-1;74351:13:0;;-1:-1:-1;;;;;74343:21:0;;;74351:13;;74343:21;74327:37;74323:82;;;-1:-1:-1;;;;;74373:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;74373:25:0;74394:4;74373:25;;;74323:82;74420:33;74436:4;74442:2;74446:6;74420:15;:33::i;3794:226::-;3914:7;3950:12;3942:6;;;;3934:29;;;;-1:-1:-1;;;3934:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3974:9:0;3986:5;3990:1;3986;:5;:::i;:::-;3974:17;3794:226;-1:-1:-1;;;;;3794:226:0:o;42756:248::-;42927:58;;;-1:-1:-1;;;;;6678:32:1;;42927:58:0;;;6660:51:1;6727:18;;;;6720:34;;;42927:58:0;;;;;;;;;;6633:18:1;;;;42927:58:0;;;;;;;;-1:-1:-1;;;;;42927:58:0;-1:-1:-1;;;42927:58:0;;;42873:123;;42907:5;;42873:19;:123::i;4279:471::-;4337:7;4582:6;4578:47;;-1:-1:-1;4612:1:0;4605:8;;4578:47;4637:9;4649:5;4653:1;4649;:5;:::i;:::-;4637:17;-1:-1:-1;4682:1:0;4673:5;4677:1;4637:17;4673:5;:::i;:::-;:10;4665:56;;;;-1:-1:-1;;;4665:56:0;;20440:2:1;4665:56:0;;;20422:21:1;20479:2;20459:18;;;20452:30;20518:34;20498:18;;;20491:62;-1:-1:-1;;;20569:18:1;;;20562:31;20610:19;;4665:56:0;20238:397:1;5226:132:0;5284:7;5311:39;5315:1;5318;5311:39;;;;;;;;;;;;;;;;;:3;:39::i;38614:610::-;-1:-1:-1;;;;;38754:20:0;;38746:70;;;;-1:-1:-1;;;38746:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38835:23:0;;38827:71;;;;-1:-1:-1;;;38827:71:0;;;;;;;:::i;:::-;38991:108;39027:6;38991:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38991:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;38971:17:0;;;:9;:17;;;;;;;;;;;:128;;;;39133:20;;;;;;;:32;;39158:6;39133:24;:32::i;:::-;-1:-1:-1;;;;;39110:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;39181:35;24263:25:1;;;39110:20:0;;39181:35;;;;;;24236:18:1;39181:35:0;24117:177:1;74469:304:0;74579:21;74611:24;74628:6;74611:16;:24::i;:::-;74646:18;74667:46;74668:21;74695:17;74667:27;:46::i;:::-;74724:41;;74646:67;;-1:-1:-1;;;;;;74724:29:0;;;:41;;;;;74646:67;;74724:41;;;;74646:67;74724:29;:41;;;;;;;;;;;;;;;;;;;3355:136;3413:7;3440:43;3444:1;3447;3440:43;;;;;;;;;;;;;;;;;:3;:43::i;74781:420::-;74840:12;74855:13;:6;74866:1;74855:10;:13::i;:::-;74840:28;-1:-1:-1;74879:17:0;74899:16;:6;74840:28;74899:10;:16::i;:::-;74879:36;-1:-1:-1;74953:21:0;74987:22;75004:4;74987:16;:22::i;:::-;75022:18;75043:41;:21;75069:14;75043:25;:41::i;:::-;75022:62;;75097:35;75110:9;75121:10;75097:12;:35::i;:::-;75150:43;;;25486:25:1;;;25542:2;25527:18;;25520:34;;;25570:18;;;25563:34;;;75150:43:0;;25474:2:1;25459:18;75150:43:0;;;;;;;74829:372;;;;74781:420;:::o;75209:505::-;75299:16;;;75313:1;75299:16;;;;;;;;75275:21;;75299:16;;;;;;;;;;-1:-1:-1;75299:16:0;75275:40;;75344:4;75326;75331:1;75326:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;75326:23:0;;;:7;;;;;;;;;;:23;;;;75370:15;;:23;;;-1:-1:-1;;;75370:23:0;;;;:15;;;;;:21;;:23;;;;;75326:7;;75370:23;;;;;:15;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;75360:4;75365:1;75360:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;75360:33:0;;;:7;;;;;;;;;:33;75438:15;;75406:62;;75423:4;;75438:15;75456:11;75406:8;:62::i;:::-;75481:15;;:225;;-1:-1:-1;;;75481:225:0;;-1:-1:-1;;;;;75481:15:0;;;;:67;;:225;;75563:11;;75481:15;;75633:4;;75660;;75680:15;;75481:225;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75264:450;75209:505;:::o;73261:350::-;-1:-1:-1;;;;;73366:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;73344:151;;;;-1:-1:-1;;;73344:151:0;;17159:2:1;73344:151:0;;;17141:21:1;17198:2;17178:18;;;17171:30;17237:34;17217:18;;;17210:62;17308:31;17288:18;;;17281:59;17357:19;;73344:151:0;16957:425:1;73344:151:0;-1:-1:-1;;;;;73506:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;73506:39:0;;;;;;;;;;73563:40;;73506:39;;:31;73563:40;;;73261:350;;:::o;39511:378::-;-1:-1:-1;;;;;39595:21:0;;39587:65;;;;-1:-1:-1;;;39587:65:0;;23959:2:1;39587:65:0;;;23941:21:1;23998:2;23978:18;;;23971:30;24037:33;24017:18;;;24010:61;24088:18;;39587:65:0;23757:355:1;39587:65:0;39742:12;;:24;;39759:6;39742:16;:24::i;:::-;39727:12;:39;-1:-1:-1;;;;;39798:18:0;;:9;:18;;;;;;;;;;;:30;;39821:6;39798:22;:30::i;:::-;-1:-1:-1;;;;;39777:18:0;;:9;:18;;;;;;;;;;;:51;;;;39844:37;;24263:25:1;;;39777:18:0;;:9;;39844:37;;24236:18:1;39844:37:0;;;;;;;39511:378;;:::o;45671:802::-;46095:23;46121:106;46163:4;46121:106;;;;;;;;;;;;;;;;;46129:5;-1:-1:-1;;;;;46121:27:0;;;:106;;;;;:::i;:::-;46242:17;;46095:132;;-1:-1:-1;46242:21:0;46238:228;;46357:10;46346:30;;;;;;;;;;;;:::i;:::-;46320:134;;;;-1:-1:-1;;;46320:134:0;;22372:2:1;46320:134:0;;;22354:21:1;22411:2;22391:18;;;22384:30;22450:34;22430:18;;;22423:62;-1:-1:-1;;;22501:18:1;;;22494:40;22551:19;;46320:134:0;22170:406:1;5854:312:0;5974:7;6009:12;6002:5;5994:28;;;;-1:-1:-1;;;5994:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6033:9:0;6045:5;6049:1;6045;:5;:::i;75722:518::-;75902:15;;75870:62;;75887:4;;-1:-1:-1;;;;;75902:15:0;75920:11;75870:8;:62::i;:::-;75975:15;;76180:11;;75975:257;;-1:-1:-1;;;75975:257:0;;76048:4;75975:257;;;8396:34:1;8446:18;;;8439:34;;;75975:15:0;8489:18:1;;;8482:34;;;8532:18;;;8525:34;-1:-1:-1;;;;;76180:11:0;;;8575:19:1;;;8568:44;76206:15:0;8628:19:1;;;8621:35;75975:15:0;;;:32;;76015:9;;8330:19:1;;75975:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12446:229::-;12583:12;12615:52;12637:6;12645:4;12651:1;12654:12;12583;10195:20;;13962:60;;;;-1:-1:-1;;;13962:60:0;;22014:2:1;13962:60:0;;;21996:21:1;22053:2;22033:18;;;22026:30;22092:31;22072:18;;;22065:59;22141:18;;13962:60:0;21812:353:1;13962:60:0;14036:12;14050:23;14077:6;-1:-1:-1;;;;;14077:11:0;14096:5;14117:4;14077:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14035:97;;;;14150:51;14167:7;14176:10;14188:12;14150:16;:51::i;:::-;14143:58;13638:571;-1:-1:-1;;;;;;;13638:571:0:o;16538:712::-;16688:12;16717:7;16713:530;;;-1:-1:-1;16748:10:0;16741:17;;16713:530;16862:17;;:21;16858:374;;17060:10;17054:17;17121:15;17108:10;17104:2;17100:19;17093:44;16858:374;17203:12;17196:20;;-1:-1:-1;;;17196:20:0;;;;;;;;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;782:388::-;850:6;858;911:2;899:9;890:7;886:23;882:32;879:52;;;927:1;924;917:12;879:52;966:9;953:23;985:31;1010:5;985:31;:::i;:::-;1035:5;-1:-1:-1;1092:2:1;1077:18;;1064:32;1105:33;1064:32;1105:33;:::i;:::-;1157:7;1147:17;;;782:388;;;;;:::o;1175:456::-;1252:6;1260;1268;1321:2;1309:9;1300:7;1296:23;1292:32;1289:52;;;1337:1;1334;1327:12;1289:52;1376:9;1363:23;1395:31;1420:5;1395:31;:::i;:::-;1445:5;-1:-1:-1;1502:2:1;1487:18;;1474:32;1515:33;1474:32;1515:33;:::i;:::-;1175:456;;1567:7;;-1:-1:-1;;;1621:2:1;1606:18;;;;1593:32;;1175:456::o;1636:382::-;1701:6;1709;1762:2;1750:9;1741:7;1737:23;1733:32;1730:52;;;1778:1;1775;1768:12;1730:52;1817:9;1804:23;1836:31;1861:5;1836:31;:::i;:::-;1886:5;-1:-1:-1;1943:2:1;1928:18;;1915:32;1956:30;1915:32;1956:30;:::i;2023:315::-;2091:6;2099;2152:2;2140:9;2131:7;2127:23;2123:32;2120:52;;;2168:1;2165;2158:12;2120:52;2207:9;2194:23;2226:31;2251:5;2226:31;:::i;:::-;2276:5;2328:2;2313:18;;;;2300:32;;-1:-1:-1;;;2023:315:1:o;2343:241::-;2399:6;2452:2;2440:9;2431:7;2427:23;2423:32;2420:52;;;2468:1;2465;2458:12;2420:52;2507:9;2494:23;2526:28;2548:5;2526:28;:::i;2589:245::-;2656:6;2709:2;2697:9;2688:7;2684:23;2680:32;2677:52;;;2725:1;2722;2715:12;2677:52;2757:9;2751:16;2776:28;2798:5;2776:28;:::i;3514:673::-;3583:6;3636:2;3624:9;3615:7;3611:23;3607:32;3604:52;;;3652:1;3649;3642:12;3604:52;3692:9;3679:23;3725:18;3717:6;3714:30;3711:50;;;3757:1;3754;3747:12;3711:50;3780:22;;3833:4;3825:13;;3821:27;-1:-1:-1;3811:55:1;;3862:1;3859;3852:12;3811:55;3898:2;3885:16;3923:49;3939:32;3968:2;3939:32;:::i;:::-;3923:49;:::i;:::-;3995:2;3988:5;3981:17;4035:7;4030:2;4025;4021;4017:11;4013:20;4010:33;4007:53;;;4056:1;4053;4046:12;4007:53;4111:2;4106;4102;4098:11;4093:2;4086:5;4082:14;4069:45;4155:1;4134:14;;;4150:2;4130:23;4123:34;;;;4138:5;3514:673;-1:-1:-1;;;;3514:673:1:o;4192:636::-;4272:6;4325:2;4313:9;4304:7;4300:23;4296:32;4293:52;;;4341:1;4338;4331:12;4293:52;4374:9;4368:16;4407:18;4399:6;4396:30;4393:50;;;4439:1;4436;4429:12;4393:50;4462:22;;4515:4;4507:13;;4503:27;-1:-1:-1;4493:55:1;;4544:1;4541;4534:12;4493:55;4573:2;4567:9;4598:49;4614:32;4643:2;4614:32;:::i;4598:49::-;4670:2;4663:5;4656:17;4710:7;4705:2;4700;4696;4692:11;4688:20;4685:33;4682:53;;;4731:1;4728;4721:12;4682:53;4744:54;4795:2;4790;4783:5;4779:14;4774:2;4770;4766:11;4744:54;:::i;4833:180::-;4892:6;4945:2;4933:9;4924:7;4920:23;4916:32;4913:52;;;4961:1;4958;4951:12;4913:52;-1:-1:-1;4984:23:1;;4833:180;-1:-1:-1;4833:180:1:o;5018:184::-;5088:6;5141:2;5129:9;5120:7;5116:23;5112:32;5109:52;;;5157:1;5154;5147:12;5109:52;-1:-1:-1;5180:16:1;;5018:184;-1:-1:-1;5018:184:1:o;5207:306::-;5295:6;5303;5311;5364:2;5352:9;5343:7;5339:23;5335:32;5332:52;;;5380:1;5377;5370:12;5332:52;5409:9;5403:16;5393:26;;5459:2;5448:9;5444:18;5438:25;5428:35;;5503:2;5492:9;5488:18;5482:25;5472:35;;5207:306;;;;;:::o;5518:258::-;5560:3;5598:5;5592:12;5625:6;5620:3;5613:19;5641:63;5697:6;5690:4;5685:3;5681:14;5674:4;5667:5;5663:16;5641:63;:::i;:::-;5758:2;5737:15;-1:-1:-1;;5733:29:1;5724:39;;;;5765:4;5720:50;;5518:258;-1:-1:-1;;5518:258:1:o;5781:274::-;5910:3;5948:6;5942:13;5964:53;6010:6;6005:3;5998:4;5990:6;5986:17;5964:53;:::i;:::-;6033:16;;;;;5781:274;-1:-1:-1;;5781:274:1:o;7454:317::-;-1:-1:-1;;;;;7631:32:1;;7613:51;;7700:2;7695;7680:18;;7673:30;;;-1:-1:-1;;7720:45:1;;7746:18;;7738:6;7720:45;:::i;9325:220::-;9474:2;9463:9;9456:21;9437:4;9494:45;9535:2;9524:9;9520:18;9512:6;9494:45;:::i;9969:399::-;10171:2;10153:21;;;10210:2;10190:18;;;10183:30;10249:34;10244:2;10229:18;;10222:62;-1:-1:-1;;;10315:2:1;10300:18;;10293:33;10358:3;10343:19;;9969:399::o;10373:337::-;10575:2;10557:21;;;10614:2;10594:18;;;10587:30;-1:-1:-1;;;10648:2:1;10633:18;;10626:43;10701:2;10686:18;;10373:337::o;13000:344::-;13202:2;13184:21;;;13241:2;13221:18;;;13214:30;-1:-1:-1;;;13275:2:1;13260:18;;13253:50;13335:2;13320:18;;13000:344::o;13349:402::-;13551:2;13533:21;;;13590:2;13570:18;;;13563:30;13629:34;13624:2;13609:18;;13602:62;-1:-1:-1;;;13695:2:1;13680:18;;13673:36;13741:3;13726:19;;13349:402::o;15363:407::-;15565:2;15547:21;;;15604:2;15584:18;;;15577:30;15643:34;15638:2;15623:18;;15616:62;-1:-1:-1;;;15709:2:1;15694:18;;15687:41;15760:3;15745:19;;15363:407::o;20640:356::-;20842:2;20824:21;;;20861:18;;;20854:30;20920:34;20915:2;20900:18;;20893:62;20987:2;20972:18;;20640:356::o;21001:401::-;21203:2;21185:21;;;21242:2;21222:18;;;21215:30;21281:34;21276:2;21261:18;;21254:62;-1:-1:-1;;;21347:2:1;21332:18;;21325:35;21392:3;21377:19;;21001:401::o;24299:980::-;24561:4;24609:3;24598:9;24594:19;24640:6;24629:9;24622:25;24666:2;24704:6;24699:2;24688:9;24684:18;24677:34;24747:3;24742:2;24731:9;24727:18;24720:31;24771:6;24806;24800:13;24837:6;24829;24822:22;24875:3;24864:9;24860:19;24853:26;;24914:2;24906:6;24902:15;24888:29;;24935:1;24945:195;24959:6;24956:1;24953:13;24945:195;;;25024:13;;-1:-1:-1;;;;;25020:39:1;25008:52;;25115:15;;;;25080:12;;;;25056:1;24974:9;24945:195;;;-1:-1:-1;;;;;;;25196:32:1;;;;25191:2;25176:18;;25169:60;-1:-1:-1;;;25260:3:1;25245:19;25238:35;25157:3;24299:980;-1:-1:-1;;;24299:980:1:o;25797:275::-;25868:2;25862:9;25933:2;25914:13;;-1:-1:-1;;25910:27:1;25898:40;;25968:18;25953:34;;25989:22;;;25950:62;25947:88;;;26015:18;;:::i;:::-;26051:2;26044:22;25797:275;;-1:-1:-1;25797:275:1:o;26077:187::-;26126:4;26159:18;26151:6;26148:30;26145:56;;;26181:18;;:::i;:::-;-1:-1:-1;26247:2:1;26226:15;-1:-1:-1;;26222:29:1;26253:4;26218:40;;26077:187::o;26269:128::-;26309:3;26340:1;26336:6;26333:1;26330:13;26327:39;;;26346:18;;:::i;:::-;-1:-1:-1;26382:9:1;;26269:128::o;26402:217::-;26442:1;26468;26458:132;;26512:10;26507:3;26503:20;26500:1;26493:31;26547:4;26544:1;26537:15;26575:4;26572:1;26565:15;26458:132;-1:-1:-1;26604:9:1;;26402:217::o;26624:168::-;26664:7;26730:1;26726;26722:6;26718:14;26715:1;26712:21;26707:1;26700:9;26693:17;26689:45;26686:71;;;26737:18;;:::i;:::-;-1:-1:-1;26777:9:1;;26624:168::o;26797:125::-;26837:4;26865:1;26862;26859:8;26856:34;;;26870:18;;:::i;:::-;-1:-1:-1;26907:9:1;;26797:125::o;26927:258::-;26999:1;27009:113;27023:6;27020:1;27017:13;27009:113;;;27099:11;;;27093:18;27080:11;;;27073:39;27045:2;27038:10;27009:113;;;27140:6;27137:1;27134:13;27131:48;;;-1:-1:-1;;27175:1:1;27157:16;;27150:27;26927:258::o;27190:380::-;27269:1;27265:12;;;;27312;;;27333:61;;27387:4;27379:6;27375:17;27365:27;;27333:61;27440:2;27432:6;27429:14;27409:18;27406:38;27403:161;;;27486:10;27481:3;27477:20;27474:1;27467:31;27521:4;27518:1;27511:15;27549:4;27546:1;27539:15;27403:161;;27190:380;;;:::o;27575:127::-;27636:10;27631:3;27627:20;27624:1;27617:31;27667:4;27664:1;27657:15;27691:4;27688:1;27681:15;27707:127;27768:10;27763:3;27759:20;27756:1;27749:31;27799:4;27796:1;27789:15;27823:4;27820:1;27813:15;27839:127;27900:10;27895:3;27891:20;27888:1;27881:31;27931:4;27928:1;27921:15;27955:4;27952:1;27945:15;27971:131;-1:-1:-1;;;;;28046:31:1;;28036:42;;28026:70;;28092:1;28089;28082:12;28107:118;28193:5;28186:13;28179:21;28172:5;28169:32;28159:60;;28215:1;28212;28205:12
Swarm Source
ipfs://7907d382bfec3b0ad33d3e9a72b121900c75e476df7cb438470b39b14c27e9fb
Loading...
Loading
OVERVIEW
PolarFi is a decentralized protocol whose initial goal is to popularize GameFi through education and the publication of web3 video games.Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.