Contract Overview
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
NebulaNodesV2
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-03-22 */ // SPDX-License-Identifier: MIT // File: interfaces/IPangolinFactory.sol pragma solidity >=0.5.0; interface IPangolinFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: interfaces/IPangolinRouter.sol pragma solidity >=0.6.2; interface IPangolinRouter { function factory() external pure returns (address); function WAVAX() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityAVAX( address token, uint amountTokenDesired, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountAVAX, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityAVAX( address token, uint liquidity, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline ) external returns (uint amountToken, uint amountAVAX); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityAVAXWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountAVAX); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactAVAXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactAVAX(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForAVAX(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapAVAXForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); function removeLiquidityAVAXSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline ) external returns (uint amountAVAX); function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountAVAX); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactAVAXForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: interfaces/INodeManager.sol pragma solidity ^0.8.0; interface INodeManager { function getMinPrice() external view returns (uint256); function createNode(address account, string memory nodeName, uint256 amount) external; function createNodeOld(address account, string memory nodeName, uint256 amount_) external; function getNodeReward(address account, uint256 _creationTime) external view returns (uint256); function getAllNodesRewards(address account) external view returns (uint256); function cashoutNodeReward(address account, uint256 _creationTime) external; function cashoutAllNodesRewards(address account) external; function compoundNodeReward(address account, uint256 creationTime, uint256 rewardAmount) external; function transferOwnership(address newOwner) external; } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); 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); } } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @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"); } } } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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 calldata) { return msg.data; } } // File: @openzeppelin/contracts/finance/PaymentSplitter.sol // OpenZeppelin Contracts v4.4.1 (finance/PaymentSplitter.sol) pragma solidity ^0.8.0; /** * @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_); } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { 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); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } 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] + 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract 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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity ^0.8.0; interface INodeManagerOLD { function getMinPrice() external view returns (uint256); function createNode(address account, string memory nodeName, uint256 amount) external; function getNodeReward(address account, uint256 _creationTime) external view returns (uint256); function getAllNodesRewards(address account) external view returns (uint256); function cashoutNodeReward(address account, uint256 _creationTime) external; function cashoutAllNodesRewards(address account) external; function compoundNodeReward(address account, uint256 creationTime, uint256 rewardAmount) external; function transferOwnership(address newOwner) external; function getNodeNumberOf(address account) external view returns (uint256); } // File: nebulanode.sol /* * * Web: https://nebulanodes.finance/ * Discord: https://discord.gg/gXAPZp24fM * Twitter: https://twitter.com/NebulaNodes * */ pragma solidity ^0.8.4; contract NebulaNodesV2 is ERC20, Ownable, PaymentSplitter { using SafeMath for uint256; address public joePair; address public joeRouterAddress = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; // TraderJoe Router 0x60aE616a2155Ee3d9A68541Ba4544862310933d4 address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; IERC20 public OLD_CONTRACT = IERC20(0x1aEa17a08EdE10D158baac969f809E6747cb2B22); address public teamPool; address public rewardsPool; uint256 public rewardsFee; uint256 public liquidityPoolFee; uint256 public teamPoolFee; uint256 public cashoutFee; uint256 public totalFees; uint256 public swapTokensAmount; uint256 public totalClaimed = 0; bool public isTradingEnabled = true; bool public swapLiquifyEnabled = true; bool public antiBot = true; uint public blocktopass = 3; uint public currentBlock; uint16 public buyTax = 0; uint16 public sellTax = 0; INodeManagerOLD private OLD_MANAGER = INodeManagerOLD(0xd311d77c8F4665bdA9e684Cd08f8991f364AbEF5); IPangolinRouter private joeRouter; INodeManager private nodeManager; uint256 private rwSwap; bool private swapping = false; mapping(address => bool) public hasMigrate; mapping(address => bool) public isBlacklisted; mapping(address => bool) public automatedMarketMakerPairs; mapping(address => uint) public userLastBlockBuyTransactions; event UpdateJoeRouter( 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 ); event Cashout( address indexed account, uint256 amount, uint256 indexed blockTime ); event Compound( address indexed account, uint256 amount, uint256 indexed blockTime ); event MaxTransferAmountRateUpdated(address indexed operator, uint256 previousRate, uint256 newRate); event maxBalanceAmountRateUpdated(address indexed operator, uint256 previousRate, uint256 newRate); constructor( address[] memory payees, uint256[] memory shares, address[] memory addresses, uint256[] memory fees, uint256 swapAmount ) ERC20("NebulaNodes", "NeBu") PaymentSplitter(payees, shares) { require( addresses[0] != address(0) && addresses[1] != address(0) && addresses[2] != address(0), "CONSTR:1" ); teamPool = addresses[0]; rewardsPool = addresses[1]; nodeManager = INodeManager(addresses[2]); require(joeRouterAddress != address(0), "CONSTR:2"); IPangolinRouter _joeRouter = IPangolinRouter(joeRouterAddress); address _joePair = IPangolinFactory(_joeRouter.factory()) .createPair(address(this), _joeRouter.WAVAX()); joeRouter = _joeRouter; joePair = _joePair; _setAutomatedMarketMakerPair(_joePair, true); require( fees[0] != 0 && fees[1] != 0 && fees[2] != 0 && fees[3] != 0, "CONSTR:3" ); teamPoolFee = fees[0]; rewardsFee = fees[1]; liquidityPoolFee = fees[2]; cashoutFee = fees[3]; rwSwap = fees[4]; totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee); require(swapAmount > 0, "CONSTR:7"); swapTokensAmount = swapAmount * (10**18); } //OLD CONTRACT function migrateOldNode() external { address sender = _msgSender(); require( !hasMigrate[sender], "Node has been already migrate" ); uint256 nodeNb = OLD_MANAGER.getNodeNumberOf(sender); for (uint256 i = 0; i <= nodeNb; i++) { nodeManager.createNodeOld(sender, "Oldnode", 10100000000000000000); } uint256 amount = OLD_CONTRACT.balanceOf(sender); mintRewards(sender, amount); setHasMigrate(sender, true); } function migrate(address[] memory addresses_, uint256[] memory balances_) external onlyOwner { for (uint256 i = 0; i < addresses_.length; i++) { _mint(addresses_[i], balances_[i]); } } function burn(address account, uint256 amount) external onlyOwner { _burn(account, amount); } function updateJoeRouterAddress(address newAddress) external onlyOwner { require( newAddress != address(joeRouter), "TKN:1" ); emit UpdateJoeRouter(newAddress, address(joeRouter)); IPangolinRouter _joeRouter = IPangolinRouter(newAddress); address _joePair = IPangolinFactory(joeRouter.factory()).createPair( address(this), _joeRouter.WAVAX() ); joePair = _joePair; joeRouterAddress = newAddress; } function updateSwapTokensAmount(uint256 newVal) external onlyOwner { swapTokensAmount = newVal; } function updateTeamPool(address payable newVal) external onlyOwner { teamPool = newVal; } function updateRewardsPool(address payable newVal) external onlyOwner { rewardsPool = newVal; } function updateRewardsFee(uint256 newVal) external onlyOwner { rewardsFee = newVal; totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee); } function updateLiquidityFee(uint256 newVal) external onlyOwner { liquidityPoolFee = newVal; totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee); } function updateTeamFee(uint256 newVal) external onlyOwner { teamPoolFee = newVal; totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee); } function updateCashoutFee(uint256 newVal) external onlyOwner { cashoutFee = newVal; } function updateRwSwapFee(uint256 newVal) external onlyOwner { rwSwap = newVal; } function updateSwapLiquify(bool newVal) external onlyOwner { swapLiquifyEnabled = newVal; } function updateIsTradingEnabled(bool newVal) external onlyOwner { isTradingEnabled = newVal; } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require( pair != joePair, "TKN:2" ); _setAutomatedMarketMakerPair(pair, value); } function setAntiBot(bool value) external onlyOwner { antiBot = value; } function setBlockToPass(uint value) external onlyOwner { blocktopass = value; } function setBuyTax (uint16 value) external onlyOwner { require(value <= 5000); buyTax = value; } function setSellTax (uint16 value) external onlyOwner { require(value <= 5000); sellTax = value; } function blacklistAddress(address account, bool value) public onlyOwner { isBlacklisted[account] = value; } function getBlock(address sender) public { userLastBlockBuyTransactions[sender] = block.number; } function getCurrentBlock() public { currentBlock = block.number; } // Private methods function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "TKN:3" ); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function _transfer( address from, address to, uint256 amount ) internal override { address sender = _msgSender(); if (antiBot == true) { if (from == joePair) { getBlock(sender); } if (to == joePair) { uint lastBlock = userLastBlockBuyTransactions[sender]; getCurrentBlock(); if (currentBlock <= lastBlock + blocktopass) { blacklistAddress(sender, true); } } } require( !isBlacklisted[from] && !isBlacklisted[to], "BLACKLISTED" ); require(from != address(0), "ERC20:1"); require(to != address(0), "ERC20:2"); if (from != owner() && to != joePair && to != address(joeRouter) && to != address(this) && from != address(this)) { require(isTradingEnabled, "TRADING_DISABLED"); } if (from == joePair && buyTax != 0) { uint256 taxAmount = amount * buyTax/10000; uint256 sendAmount = amount - taxAmount; require (amount == taxAmount + sendAmount, "invalid Tax"); super._transfer(from, address(this), taxAmount); super._transfer(from, to, sendAmount); } else if (to == joePair && sellTax != 0) { uint256 taxAmount = amount * sellTax/10000; uint256 sendAmount = amount - taxAmount; require (amount == taxAmount + sendAmount, "invalid Tax"); super._transfer(from, address(this), taxAmount); super._transfer(from, to, sendAmount); } else { super._transfer(from, to, amount); } } function mintRewards(address receiver, uint256 _amount) private { _mint(receiver, _amount); } function swapAndSendToFee(address destination, uint256 tokens) private { uint256 initialAVAXBalance = address(this).balance; swapTokensForAVAX(tokens); uint256 newBalance = (address(this).balance).sub(initialAVAXBalance); payable(destination).transfer(newBalance); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForAVAX(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForAVAX(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = joeRouter.WAVAX(); _approve(address(this), address(joeRouter), tokenAmount); joeRouter.swapExactTokensForAVAXSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of AVAX path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(joeRouter), tokenAmount); // add the liquidity joeRouter.addLiquidityAVAX{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0), block.timestamp ); } // External node methods function createNodeWithTokens(string memory name, uint256 amount_) external { address sender = _msgSender(); require( bytes(name).length > 3 && bytes(name).length < 32, "NC:1" ); require( sender != address(0), "NC:2" ); require(!isBlacklisted[sender], "BLACKLISTED"); require( sender != teamPool && sender != rewardsPool, "NC:4" ); require( balanceOf(sender) >= amount_, "NC:5" ); uint256 contractTokenBalance = balanceOf(address(this)); bool swapAmountOk = contractTokenBalance >= swapTokensAmount; if ( swapAmountOk && swapLiquifyEnabled && !swapping && sender != owner() && !automatedMarketMakerPairs[sender] ) { swapping = true; uint256 teamTokens = contractTokenBalance .mul(teamPoolFee) .div(10000); swapAndSendToFee(teamPool, teamTokens); uint256 rewardsPoolTokens = contractTokenBalance .mul(rewardsFee) .div(10000); uint256 rewardsTokenstoSwap = rewardsPoolTokens.mul(rwSwap).div( 10000 ); swapAndSendToFee(rewardsPool, rewardsTokenstoSwap); super._transfer( address(this), rewardsPool, rewardsPoolTokens.sub(rewardsTokenstoSwap) ); uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div( 10000 ); swapAndLiquify(swapTokens); swapTokensForAVAX(balanceOf(address(this))); swapping = false; } super._transfer(sender, address(this), amount_); nodeManager.createNode(sender, name, amount_); } function cashoutReward(uint256 blocktime) external { address sender = _msgSender(); require( sender != address(0), "CASHOUT:1" ); require( !isBlacklisted[sender], "BLACKLISTED" ); require( sender != teamPool && sender != rewardsPool, "CASHOUT:3" ); uint256 rewardAmount = nodeManager.getNodeReward(sender, blocktime); require( rewardAmount > 0, "CASHOUT:4" ); if (swapLiquifyEnabled) { uint256 feeAmount; if (cashoutFee > 0) { feeAmount = rewardAmount.mul(cashoutFee).div(10000); swapAndSendToFee(rewardsPool, feeAmount); } rewardAmount -= feeAmount; } mintRewards(sender, rewardAmount); nodeManager.cashoutNodeReward(sender, blocktime); totalClaimed += rewardAmount; emit Cashout(sender, rewardAmount, blocktime); } function cashoutAll() external { address sender = _msgSender(); require( sender != address(0), "CASHOUT:5" ); require( !isBlacklisted[sender], "BLACKLISTED" ); require( sender != teamPool && sender != rewardsPool, "CASHOUT:7" ); uint256 rewardAmount = nodeManager.getAllNodesRewards(sender); require( rewardAmount > 0, "CASHOUT:8" ); if (swapLiquifyEnabled) { uint256 feeAmount; if (cashoutFee > 0) { feeAmount = rewardAmount.mul(cashoutFee).div(10000); swapAndSendToFee(rewardsPool, feeAmount); } rewardAmount -= feeAmount; } mintRewards(sender, rewardAmount); nodeManager.cashoutAllNodesRewards(sender); totalClaimed += rewardAmount; emit Cashout(sender, rewardAmount, 0); } function compoundNodeRewards(uint256 blocktime) external { address sender = _msgSender(); require( sender != address(0), "COMP:1" ); require( !isBlacklisted[sender], "BLACKLISTED" ); require( sender != teamPool && sender != rewardsPool, "COMP:2" ); uint256 rewardAmount = nodeManager.getNodeReward(sender, blocktime); require( rewardAmount > 0, "COMP:3" ); uint256 contractTokenBalance = balanceOf(address(this)); bool swapAmountOk = contractTokenBalance >= swapTokensAmount; if ( swapAmountOk && swapLiquifyEnabled && !swapping && sender != owner() && !automatedMarketMakerPairs[sender] ) { swapping = true; uint256 teamTokens = contractTokenBalance .mul(teamPoolFee) .div(10000); swapAndSendToFee(teamPool, teamTokens); uint256 rewardsPoolTokens = contractTokenBalance .mul(rewardsFee) .div(10000); uint256 rewardsTokenstoSwap = rewardsPoolTokens.mul(rwSwap).div( 10000 ); swapAndSendToFee(rewardsPool, rewardsTokenstoSwap); super._transfer( address(this), rewardsPool, rewardsPoolTokens.sub(rewardsTokenstoSwap) ); uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div( 10000 ); swapAndLiquify(swapTokens); swapTokensForAVAX(balanceOf(address(this))); swapping = false; } mintRewards(address(this), rewardAmount); nodeManager.compoundNodeReward(sender, blocktime, rewardAmount); emit Compound(sender, rewardAmount, blocktime); } function compoundAllNodes(uint256 creationTime) external { address sender = _msgSender(); require( sender != address(0), "COMP:1" ); uint256 rewardAmount = nodeManager.getAllNodesRewards(sender); require( rewardAmount > 0, "COMP:3" ); mintRewards(address(this), rewardAmount); nodeManager.compoundNodeReward(sender, creationTime, rewardAmount); nodeManager.cashoutAllNodesRewards(sender); } function setHasMigrate(address _account, bool _migrate) private { hasMigrate[_account] = _migrate; } }
[{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"blockTime","type":"uint256"}],"name":"Cashout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"blockTime","type":"uint256"}],"name":"Compound","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":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"MaxTransferAmountRateUpdated","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":"UpdateJoeRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"maxBalanceAmountRateUpdated","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OLD_CONTRACT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocktopass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","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":"uint256","name":"creationTime","type":"uint256"}],"name":"compoundAllNodes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"compoundNodeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"createNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasMigrate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joeRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"},{"internalType":"uint256[]","name":"balances_","type":"uint256[]"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateOldNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"rewardsPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setBlockToPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"value","type":"uint16"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"value","type":"uint16"}],"name":"setSellTax","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":[],"name":"swapLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"teamPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateCashoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"updateIsTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateJoeRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateRewardsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newVal","type":"address"}],"name":"updateRewardsPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateRwSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"updateSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newVal","type":"address"}],"name":"updateTeamPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastBlockBuyTransactions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600e80547360ae616a2155ee3d9a68541ba4544862310933d46001600160a01b031991821617909155600f8054731aea17a08ede10d158baac969f809e6747cb2b22921691909117905560006018556019805462ffffff1916620101011790556003601a55601c80546001600160c01b03191677d311d77c8f4665bda9e684cd08f8991f364abef5000000001790556020805460ff19169055348015620000aa57600080fd5b50604051620054c0380380620054c0833981016040819052620000cd9162000dfe565b604080518082018252600b81526a4e6562756c614e6f64657360a81b6020808301918252835180850190945260048452634e65427560e01b90840152815188938893929091620001209160039162000c3a565b5080516200013690600490602084019062000c3a565b505050620001536200014d6200093460201b60201c565b62000938565b8051825114620001c55760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084015b60405180910390fd5b6000825111620002185760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f207061796565730000000000006044820152606401620001bc565b60005b82518110156200029c57620002878382815181106200024a57634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106200027357634e487b7160e01b600052603260045260246000fd5b60200260200101516200098a60201b60201c565b80620002938162000f8f565b9150506200021b565b50505060006001600160a01b031683600081518110620002cc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161415801562000328575060006001600160a01b0316836001815181106200031457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614155b801562000371575060006001600160a01b0316836002815181106200035d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614155b620003aa5760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3160c01b6044820152606401620001bc565b82600081518110620003cc57634e487b7160e01b600052603260045260246000fd5b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001815181106200041c57634e487b7160e01b600052603260045260246000fd5b6020026020010151601160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826002815181106200046c57634e487b7160e01b600052603260045260246000fd5b6020908102919091010151601e80546001600160a01b0319166001600160a01b03928316179055600e5416620004d05760405162461bcd60e51b815260206004820152600860248201526721a7a729aa291d1960c11b6044820152606401620001bc565b600e546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a015591600480820192602092909190829003018186803b1580156200051b57600080fd5b505afa15801562000530573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000556919062000de1565b6001600160a01b031663c9c6539630846001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b1580156200059f57600080fd5b505afa158015620005b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005da919062000de1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200062357600080fd5b505af115801562000638573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065e919062000de1565b601d80546001600160a01b038086166001600160a01b031992831617909255600d80549284169290911691909117905590506200069d81600162000b78565b83600081518110620006bf57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415801562000702575083600181518110620006f557634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b8015620007395750836002815181106200072c57634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b8015620007705750836003815181106200076357634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b620007a95760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3360c01b6044820152606401620001bc565b83600081518110620007cb57634e487b7160e01b600052603260045260246000fd5b602002602001015160148190555083600181518110620007fb57634e487b7160e01b600052603260045260246000fd5b6020026020010151601281905550836002815181106200082b57634e487b7160e01b600052603260045260246000fd5b6020026020010151601381905550836003815181106200085b57634e487b7160e01b600052603260045260246000fd5b6020026020010151601581905550836004815181106200088b57634e487b7160e01b600052603260045260246000fd5b6020026020010151601f81905550620008d2601454620008be60135460125462000c2560201b62002d391790919060201c565b62000c2560201b62002d391790919060201c565b601655826200090f5760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3760c01b6044820152606401620001bc565b6200092383670de0b6b3a764000062000f30565b6017555062000fd995505050505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620009f75760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b6064820152608401620001bc565b6000811162000a495760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a207368617265732061726520300000006044820152606401620001bc565b6001600160a01b0382166000908152600860205260409020541562000ac55760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b6064820152608401620001bc565b600a8054600181019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416908117909155600090815260086020526040902081905560065462000b2f90829062000f15565b600655604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b6001600160a01b03821660009081526023602052604090205460ff161515811515141562000bd15760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3360d81b6044820152606401620001bc565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600062000c33828462000f15565b9392505050565b82805462000c489062000f52565b90600052602060002090601f01602090048101928262000c6c576000855562000cb7565b82601f1062000c8757805160ff191683800117855562000cb7565b8280016001018555821562000cb7579182015b8281111562000cb757825182559160200191906001019062000c9a565b5062000cc592915062000cc9565b5090565b5b8082111562000cc5576000815560010162000cca565b80516001600160a01b038116811462000cf857600080fd5b919050565b600082601f83011262000d0e578081fd5b8151602062000d2762000d218362000eef565b62000ebc565b80838252828201915082860187848660051b890101111562000d47578586fd5b855b8581101562000d705762000d5d8262000ce0565b8452928401929084019060010162000d49565b5090979650505050505050565b600082601f83011262000d8e578081fd5b8151602062000da162000d218362000eef565b80838252828201915082860187848660051b890101111562000dc1578586fd5b855b8581101562000d705781518452928401929084019060010162000dc3565b60006020828403121562000df3578081fd5b62000c338262000ce0565b600080600080600060a0868803121562000e16578081fd5b85516001600160401b038082111562000e2d578283fd5b62000e3b89838a0162000cfd565b9650602088015191508082111562000e51578283fd5b62000e5f89838a0162000d7d565b9550604088015191508082111562000e75578283fd5b62000e8389838a0162000cfd565b9450606088015191508082111562000e99578283fd5b5062000ea88882890162000d7d565b925050608086015190509295509295909350565b604051601f8201601f191681016001600160401b038111828210171562000ee75762000ee762000fc3565b604052919050565b60006001600160401b0382111562000f0b5762000f0b62000fc3565b5060051b60200190565b6000821982111562000f2b5762000f2b62000fad565b500190565b600081600019048311821515161562000f4d5762000f4d62000fad565b500290565b600181811c9082168062000f6757607f821691505b6020821081141562000f8957634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000fa65762000fa662000fad565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6144d78062000fe96000396000f3fe6080604052600436106104355760003560e01c80636eacab1211610229578063b62496f51161012e578063de01e151116100b6578063f4e27dc81161007a578063f4e27dc814610d8c578063fabc403514610dac578063fb3ac5a714610dcb578063fccc281314610dfb578063fe575a8714610e1157600080fd5b8063de01e15114610d01578063e12ed13c14610d21578063e159b3ae14610d37578063e33b7de314610d57578063f2fde38b14610d6c57600080fd5b8063cc1776d3116100fd578063cc1776d314610c18578063ce7c2ac214610c39578063d54ad2a114610c6f578063d79779b214610c85578063dd62ed3e14610cbb57600080fd5b8063b62496f514610b88578063bbc6799814610bb8578063c2c7c03a14610bd8578063c3b045e414610bf857600080fd5b80639852595c116101b1578063a457c2d711610180578063a457c2d714610afd578063a74b343c14610b1d578063a9059cbb14610b32578063acedf07c14610b52578063b326a0f914610b7257600080fd5b80639852595c14610a675780639a7a23d614610a9d5780639c138b7b14610abd5780639dc29fac14610add57600080fd5b80638b83209b116101f85780638b83209b146109d45780638bc9c7b0146109f45780638da5cb5b14610a145780638e67566314610a3257806395d89b4114610a5257600080fd5b80636eacab121461094957806370a0823114610969578063715018a61461099f5780637dfcbe34146109b457600080fd5b8063455a43961161033a57806362677fee116102c25780636770474b116102865780636770474b146108b35780636815a91c146108d357806368f2c919146108f35780636bca89cb146109135780636d9ae0be1461093357600080fd5b806362677fee14610810578063629c70741461084757806365bfe4301461085d5780636653a3401461087d578063672d5d3b1461089d57600080fd5b80635455797311610309578063545579731461078f57806354f12f1f146107a45780635c69cb5d146107ba5780635cc15b65146107da5780635f1c3182146107fa57600080fd5b8063455a43961461070157806348b75044146107215780634f7041a514610741578063527509f31461076f57600080fd5b806323b872dd116103bd57806332dbbdad1161038c57806332dbbdad14610639578063395093511461066657806339636504146106865780633a98ef39146106a6578063406072a9146106bb57600080fd5b806323b872dd146105c75780632ae883fd146105e75780632bb14e1d14610607578063313ce5671461061d57600080fd5b8063095ea7b311610404578063095ea7b31461052e578063120ccbf91461054e57806313114a9d1461056e57806318160ddd1461059257806319165587146105a757600080fd5b80630359fea914610483578063064a59d0146104c057806306fdde03146104ea578063084a6bff1461050c57600080fd5b3661047e577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b34801561048f57600080fd5b506011546104a3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104cc57600080fd5b506019546104da9060ff1681565b60405190151581526020016104b7565b3480156104f657600080fd5b506104ff610e41565b6040516104b7919061419f565b34801561051857600080fd5b5061052c6105273660046140c6565b610ed3565b005b34801561053a57600080fd5b506104da610549366004613ed8565b610f2d565b34801561055a57600080fd5b5061052c6105693660046140c6565b610f43565b34801561057a57600080fd5b5061058460165481565b6040519081526020016104b7565b34801561059e57600080fd5b50600254610584565b3480156105b357600080fd5b5061052c6105c2366004613dfb565b61110e565b3480156105d357600080fd5b506104da6105e2366004613e6b565b61123c565b3480156105f357600080fd5b5061052c610602366004613fc6565b6112e8565b34801561061357600080fd5b5061058460125481565b34801561062957600080fd5b50604051601281526020016104b7565b34801561064557600080fd5b50610584610654366004613dfb565b60246020526000908152604090205481565b34801561067257600080fd5b506104da610681366004613ed8565b611325565b34801561069257600080fd5b506010546104a3906001600160a01b031681565b3480156106b257600080fd5b50600654610584565b3480156106c757600080fd5b506105846106d6366004613ffe565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b34801561070d57600080fd5b5061052c61071c366004613eab565b611361565b34801561072d57600080fd5b5061052c61073c366004613ffe565b6113b6565b34801561074d57600080fd5b50601c5461075c9061ffff1681565b60405161ffff90911681526020016104b7565b34801561077b57600080fd5b50600e546104a3906001600160a01b031681565b34801561079b57600080fd5b5061052c61159e565b3480156107b057600080fd5b5061058460135481565b3480156107c657600080fd5b5061052c6107d53660046140c6565b611859565b3480156107e657600080fd5b5061052c6107f53660046140c6565b611c2f565b34801561080657600080fd5b5061058460175481565b34801561081c57600080fd5b5061052c61082b366004613dfb565b6001600160a01b03166000908152602460205260409020439055565b34801561085357600080fd5b50610584601a5481565b34801561086957600080fd5b5061052c6108783660046140c6565b611c5e565b34801561088957600080fd5b5061052c610898366004613dfb565b611f22565b3480156108a957600080fd5b5061052c43601b55565b3480156108bf57600080fd5b5061052c6108ce3660046140c6565b611f6e565b3480156108df57600080fd5b5061052c6108ee3660046140c6565b611f9d565b3480156108ff57600080fd5b50600f546104a3906001600160a01b031681565b34801561091f57600080fd5b50600d546104a3906001600160a01b031681565b34801561093f57600080fd5b5061058460155481565b34801561095557600080fd5b5061052c610964366004613dfb565b611fcc565b34801561097557600080fd5b50610584610984366004613dfb565b6001600160a01b031660009081526020819052604090205490565b3480156109ab57600080fd5b5061052c612018565b3480156109c057600080fd5b506019546104da9062010000900460ff1681565b3480156109e057600080fd5b506104a36109ef3660046140c6565b61204e565b348015610a0057600080fd5b5061052c610a0f3660046140c6565b61208c565b348015610a2057600080fd5b506005546001600160a01b03166104a3565b348015610a3e57600080fd5b5061052c610a4d3660046140c6565b6120bb565b348015610a5e57600080fd5b506104ff6120ff565b348015610a7357600080fd5b50610584610a82366004613dfb565b6001600160a01b031660009081526009602052604090205490565b348015610aa957600080fd5b5061052c610ab8366004613eab565b61210e565b348015610ac957600080fd5b5061052c610ad83660046140a4565b61218c565b348015610ae957600080fd5b5061052c610af8366004613ed8565b6121e9565b348015610b0957600080fd5b506104da610b18366004613ed8565b61221d565b348015610b2957600080fd5b5061052c6122b6565b348015610b3e57600080fd5b506104da610b4d366004613ed8565b6124fe565b348015610b5e57600080fd5b5061052c610b6d3660046140c6565b61250b565b348015610b7e57600080fd5b5061058460145481565b348015610b9457600080fd5b506104da610ba3366004613dfb565b60236020526000908152604090205460ff1681565b348015610bc457600080fd5b5061052c610bd3366004614010565b61254f565b348015610be457600080fd5b5061052c610bf3366004613fc6565b6128be565b348015610c0457600080fd5b5061052c610c133660046140a4565b612904565b348015610c2457600080fd5b50601c5461075c9062010000900461ffff1681565b348015610c4557600080fd5b50610584610c54366004613dfb565b6001600160a01b031660009081526008602052604090205490565b348015610c7b57600080fd5b5061058460185481565b348015610c9157600080fd5b50610584610ca0366004613dfb565b6001600160a01b03166000908152600b602052604090205490565b348015610cc757600080fd5b50610584610cd6366004613e33565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0d57600080fd5b5061052c610d1c366004613f03565b612959565b348015610d2d57600080fd5b50610584601b5481565b348015610d4357600080fd5b5061052c610d52366004613dfb565b6129f9565b348015610d6357600080fd5b50600754610584565b348015610d7857600080fd5b5061052c610d87366004613dfb565b612c5a565b348015610d9857600080fd5b5061052c610da7366004613fc6565b612cf5565b348015610db857600080fd5b506019546104da90610100900460ff1681565b348015610dd757600080fd5b506104da610de6366004613dfb565b60216020526000908152604090205460ff1681565b348015610e0757600080fd5b506104a361dead81565b348015610e1d57600080fd5b506104da610e2c366004613dfb565b60226020526000908152604090205460ff1681565b606060038054610e50906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c906143fc565b8015610ec95780601f10610e9e57610100808354040283529160200191610ec9565b820191906000526020600020905b815481529060010190602001808311610eac57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610f065760405162461bcd60e51b8152600401610efd90614243565b60405180910390fd5b6012819055601454601354610f279190610f21908490612d39565b90612d39565b60165550565b6000610f3a338484612d45565b50600192915050565b3380610f7a5760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3160d01b6044820152606401610efd565b601e5460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de8879060240160206040518083038186803b158015610fc057600080fd5b505afa158015610fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff891906140de565b9050600081116110335760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3360d01b6044820152606401610efd565b61103d3082612e61565b601e5460405163cbd1499360e01b81526001600160a01b03848116600483015260248201869052604482018490529091169063cbd1499390606401600060405180830381600087803b15801561109257600080fd5b505af11580156110a6573d6000803e3d6000fd5b5050601e5460405163d3b0dba960e01b81526001600160a01b038681166004830152909116925063d3b0dba99150602401600060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b50505050505050565b6001600160a01b0381166000908152600860205260409020546111435760405162461bcd60e51b8152600401610efd906141b2565b600061114e60075490565b6111589047614362565b905060006111858383611180866001600160a01b031660009081526009602052604090205490565b612e6b565b9050806111a45760405162461bcd60e51b8152600401610efd906141f8565b6001600160a01b038316600090815260096020526040812080548392906111cc908490614362565b9250508190555080600760008282546111e59190614362565b909155506111f590508382612eb1565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b6000611249848484612fca565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112ce5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610efd565b6112db8533858403612d45565b60019150505b9392505050565b6005546001600160a01b031633146113125760405162461bcd60e51b8152600401610efd90614243565b6019805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061135c908690614362565b612d45565b6005546001600160a01b0316331461138b5760405162461bcd60e51b8152600401610efd90614243565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600860205260409020546113eb5760405162461bcd60e51b8152600401610efd906141b2565b6001600160a01b0382166000908152600b60205260408120546040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561144357600080fd5b505afa158015611457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147b91906140de565b6114859190614362565b905060006114be838361118087876001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b9050806114dd5760405162461bcd60e51b8152600401610efd906141f8565b6001600160a01b038085166000908152600c6020908152604080832093871683529290529081208054839290611514908490614362565b90915550506001600160a01b0384166000908152600b602052604081208054839290611541908490614362565b909155506115529050848483613326565b604080516001600160a01b038581168252602082018490528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a250505050565b33806115d85760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3560b81b6044820152606401610efd565b6001600160a01b03811660009081526022602052604090205460ff16156116115760405162461bcd60e51b8152600401610efd90614278565b6010546001600160a01b0382811691161480159061163d57506011546001600160a01b03828116911614155b6116755760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3760b81b6044820152606401610efd565b601e5460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de8879060240160206040518083038186803b1580156116bb57600080fd5b505afa1580156116cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f391906140de565b9050600081116117315760405162461bcd60e51b815260206004820152600960248201526808682a6909eaaa874760bb1b6044820152606401610efd565b601954610100900460ff161561179457601554600090156117865761176d6127106117676015548561337890919063ffffffff16565b90613384565b601154909150611786906001600160a01b031682613390565b61179081836143b9565b9150505b61179e8282612e61565b601e5460405163d3b0dba960e01b81526001600160a01b0384811660048301529091169063d3b0dba990602401600060405180830381600087803b1580156117e557600080fd5b505af11580156117f9573d6000803e3d6000fd5b50505050806018600082825461180f9190614362565b90915550506040518181526000906001600160a01b038416907f4f32a1005fcf45a64a68bc4258b4e0f5522b7aa6a06506781aa4e6c6395c48d09060200160405180910390a35050565b33806118905760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3160d01b6044820152606401610efd565b6001600160a01b03811660009081526022602052604090205460ff16156118c95760405162461bcd60e51b8152600401610efd90614278565b6010546001600160a01b038281169116148015906118f557506011546001600160a01b03828116911614155b61192a5760405162461bcd60e51b815260206004820152600660248201526521a7a6a81d1960d11b6044820152606401610efd565b601e5460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb9060440160206040518083038186803b15801561197757600080fd5b505afa15801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af91906140de565b9050600081116119ea5760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3360d01b6044820152606401610efd565b3060009081526020819052604090205460175481108015908190611a155750601954610100900460ff165b8015611a24575060205460ff16155b8015611a3e57506005546001600160a01b03858116911614155b8015611a6357506001600160a01b03841660009081526023602052604090205460ff16155b15611b6d576020805460ff19166001179055601454600090611a8e9061271090611767908690613378565b601054909150611aa7906001600160a01b031682613390565b6000611ac46127106117676012548761337890919063ffffffff16565b90506000611ae3612710611767601f548561337890919063ffffffff16565b601154909150611afc906001600160a01b031682613390565b601154611b1d9030906001600160a01b0316611b1885856133e6565b6133f2565b6000611b3a6127106117676013548961337890919063ffffffff16565b9050611b45816135c0565b30600090815260208190526040902054611b5e90613647565b50506020805460ff1916905550505b611b773084612e61565b601e5460405163cbd1499360e01b81526001600160a01b03868116600483015260248201889052604482018690529091169063cbd1499390606401600060405180830381600087803b158015611bcc57600080fd5b505af1158015611be0573d6000803e3d6000fd5b5050505084846001600160a01b03167f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d18687385604051611c2091815260200190565b60405180910390a35050505050565b6005546001600160a01b03163314611c595760405162461bcd60e51b8152600401610efd90614243565b601a55565b3380611c985760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3160b81b6044820152606401610efd565b6001600160a01b03811660009081526022602052604090205460ff1615611cd15760405162461bcd60e51b8152600401610efd90614278565b6010546001600160a01b03828116911614801590611cfd57506011546001600160a01b03828116911614155b611d355760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3360b81b6044820152606401610efd565b601e5460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb9060440160206040518083038186803b158015611d8257600080fd5b505afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dba91906140de565b905060008111611df85760405162461bcd60e51b815260206004820152600960248201526810d054d213d5550e8d60ba1b6044820152606401610efd565b601954610100900460ff1615611e555760155460009015611e4757611e2e6127106117676015548561337890919063ffffffff16565b601154909150611e47906001600160a01b031682613390565b611e5181836143b9565b9150505b611e5f8282612e61565b601e54604051633bcf707b60e01b81526001600160a01b0384811660048301526024820186905290911690633bcf707b90604401600060405180830381600087803b158015611ead57600080fd5b505af1158015611ec1573d6000803e3d6000fd5b505050508060186000828254611ed79190614362565b909155505060405181815283906001600160a01b038416907f4f32a1005fcf45a64a68bc4258b4e0f5522b7aa6a06506781aa4e6c6395c48d0906020015b60405180910390a3505050565b6005546001600160a01b03163314611f4c5760405162461bcd60e51b8152600401610efd90614243565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f985760405162461bcd60e51b8152600401610efd90614243565b601755565b6005546001600160a01b03163314611fc75760405162461bcd60e51b8152600401610efd90614243565b601555565b6005546001600160a01b03163314611ff65760405162461bcd60e51b8152600401610efd90614243565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146120425760405162461bcd60e51b8152600401610efd90614243565b61204c60006137cc565b565b6000600a828154811061207157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b6005546001600160a01b031633146120b65760405162461bcd60e51b8152600401610efd90614243565b601f55565b6005546001600160a01b031633146120e55760405162461bcd60e51b8152600401610efd90614243565b6013819055601454601254610f279190610f219084612d39565b606060048054610e50906143fc565b6005546001600160a01b031633146121385760405162461bcd60e51b8152600401610efd90614243565b600d546001600160a01b038381169116141561217e5760405162461bcd60e51b81526020600482015260056024820152642a25a71d1960d91b6044820152606401610efd565b612188828261381e565b5050565b6005546001600160a01b031633146121b65760405162461bcd60e51b8152600401610efd90614243565b6113888161ffff1611156121c957600080fd5b601c805461ffff909216620100000263ffff000019909216919091179055565b6005546001600160a01b031633146122135760405162461bcd60e51b8152600401610efd90614243565b61218882826138c9565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561229f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610efd565b6122ac3385858403612d45565b5060019392505050565b3360008181526021602052604090205460ff16156123165760405162461bcd60e51b815260206004820152601d60248201527f4e6f646520686173206265656e20616c7265616479206d6967726174650000006044820152606401610efd565b601c54604051633dd3264d60e21b81526001600160a01b0383811660048301526000926401000000009004169063f74c99349060240160206040518083038186803b15801561236457600080fd5b505afa158015612378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239c91906140de565b905060005b81811161244657601e54604051638f752ca560e01b81526001600160a01b0385811660048301526060602483015260076064830152664f6c646e6f646560c81b6084830152678c2a687ce7720000604483015290911690638f752ca59060a401600060405180830381600087803b15801561241b57600080fd5b505af115801561242f573d6000803e3d6000fd5b50505050808061243e90614437565b9150506123a1565b50600f546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a082319060240160206040518083038186803b15801561248d57600080fd5b505afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c591906140de565b90506124d18382612e61565b6001600160a01b0383166000908152602160205260409020805460ff19166001179055505050565b505050565b6000610f3a338484612fca565b6005546001600160a01b031633146125355760405162461bcd60e51b8152600401610efd90614243565b6014819055601354601254610f27918391610f2191612d39565b815133906003108015612563575060208351105b6125985760405162461bcd60e51b8152600401610efd906020808252600490820152634e433a3160e01b604082015260600190565b6001600160a01b0381166125d75760405162461bcd60e51b8152600401610efd9060208082526004908201526327219d1960e11b604082015260600190565b6001600160a01b03811660009081526022602052604090205460ff16156126105760405162461bcd60e51b8152600401610efd90614278565b6010546001600160a01b0382811691161480159061263c57506011546001600160a01b03828116911614155b6126715760405162461bcd60e51b8152600401610efd906020808252600490820152631390ce8d60e21b604082015260600190565b81612691826001600160a01b031660009081526020819052604090205490565b10156126c85760405162461bcd60e51b8152600401610efd906020808252600490820152634e433a3560e01b604082015260600190565b30600090815260208190526040902054601754811080159081906126f35750601954610100900460ff165b8015612702575060205460ff16155b801561271c57506005546001600160a01b03848116911614155b801561274157506001600160a01b03831660009081526023602052604090205460ff16155b15612846576020805460ff1916600117905560145460009061276c9061271090611767908690613378565b601054909150612785906001600160a01b031682613390565b60006127a26127106117676012548761337890919063ffffffff16565b905060006127c1612710611767601f548561337890919063ffffffff16565b6011549091506127da906001600160a01b031682613390565b6011546127f69030906001600160a01b0316611b1885856133e6565b60006128136127106117676013548961337890919063ffffffff16565b905061281e816135c0565b3060009081526020819052604090205461283790613647565b50506020805460ff1916905550505b6128518330866133f2565b601e54604051634810cb9960e11b81526001600160a01b03909116906390219732906128859086908990899060040161416b565b600060405180830381600087803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b031633146128e85760405162461bcd60e51b8152600401610efd90614243565b60198054911515620100000262ff000019909216919091179055565b6005546001600160a01b0316331461292e5760405162461bcd60e51b8152600401610efd90614243565b6113888161ffff16111561294157600080fd5b601c805461ffff191661ffff92909216919091179055565b6005546001600160a01b031633146129835760405162461bcd60e51b8152600401610efd90614243565b60005b82518110156124f9576129e78382815181106129b257634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106129da57634e487b7160e01b600052603260045260246000fd5b6020026020010151613a17565b806129f181614437565b915050612986565b6005546001600160a01b03163314612a235760405162461bcd60e51b8152600401610efd90614243565b601d546001600160a01b0382811691161415612a695760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3160d81b6044820152606401610efd565b601d546040516001600160a01b03918216918316907fb172ff8de0a3afc7f2ad25e3396c86087d62f54aa2b1757e9c048e3712fddbcd90600090a3601d546040805163c45a015560e01b8152905183926000926001600160a01b039091169163c45a015591600480820192602092909190829003018186803b158015612aee57600080fd5b505afa158015612b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b269190613e17565b6001600160a01b031663c9c6539630846001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6e57600080fd5b505afa158015612b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba69190613e17565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c269190613e17565b600d80546001600160a01b039283166001600160a01b031991821617909155600e8054959092169416939093179092555050565b6005546001600160a01b03163314612c845760405162461bcd60e51b8152600401610efd90614243565b6001600160a01b038116612ce95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610efd565b612cf2816137cc565b50565b6005546001600160a01b03163314612d1f5760405162461bcd60e51b8152600401610efd90614243565b601980549115156101000261ff0019909216919091179055565b60006112e18284614362565b6001600160a01b038316612da75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610efd565b6001600160a01b038216612e085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610efd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611f15565b6121888282613a17565b6006546001600160a01b03841660009081526008602052604081205490918391612e95908661439a565b612e9f919061437a565b612ea991906143b9565b949350505050565b80471015612f015760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610efd565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612f4e576040519150601f19603f3d011682016040523d82523d6000602084013e612f53565b606091505b50509050806124f95760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610efd565b60003360195490915062010000900460ff1615156001141561307657600d546001600160a01b038581169116141561301c5761301c816001600160a01b03166000908152602460205260409020439055565b600d546001600160a01b0384811691161415613076576001600160a01b03811660009081526024602052604090205461305443601b55565b601a546130619082614362565b601b541161307457613074826001611361565b505b6001600160a01b03841660009081526022602052604090205460ff161580156130b857506001600160a01b03831660009081526022602052604090205460ff16155b6130d45760405162461bcd60e51b8152600401610efd90614278565b6001600160a01b0384166131145760405162461bcd60e51b815260206004820152600760248201526645524332303a3160c81b6044820152606401610efd565b6001600160a01b0383166131545760405162461bcd60e51b815260206004820152600760248201526622a92199181d1960c91b6044820152606401610efd565b6005546001600160a01b038581169116148015906131805750600d546001600160a01b03848116911614155b801561319a5750601d546001600160a01b03848116911614155b80156131af57506001600160a01b0383163014155b80156131c457506001600160a01b0384163014155b1561320e5760195460ff1661320e5760405162461bcd60e51b815260206004820152601060248201526f15149051125391d7d11254d05093115160821b6044820152606401610efd565b600d546001600160a01b0385811691161480156132305750601c5461ffff1615155b156132ca57601c546000906127109061324d9061ffff168561439a565b613257919061437a565b9050600061326582856143b9565b90506132718183614362565b84146132ad5760405162461bcd60e51b815260206004820152600b60248201526a0d2dcecc2d8d2c840a8c2f60ab1b6044820152606401610efd565b6132b88630846133f2565b6132c38686836133f2565b5050613320565b600d546001600160a01b0384811691161480156132f25750601c5462010000900461ffff1615155b1561331557601c546000906127109061324d9062010000900461ffff168561439a565b6133208484846133f2565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124f9908490613af6565b60006112e1828461439a565b60006112e1828461437a565b4761339a82613647565b60006133a647836133e6565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f193505050501580156133df573d6000803e3d6000fd5b5050505050565b60006112e182846143b9565b6001600160a01b0383166134565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610efd565b6001600160a01b0382166134b85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610efd565b6001600160a01b038316600090815260208190526040902054818110156135305760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610efd565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613567908490614362565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135b391815260200190565b60405180910390a3613320565b60006135cd826002613384565b905060006135db83836133e6565b9050476135e783613647565b60006135f347836133e6565b90506135ff8382613bc8565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061368a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b1580156136de57600080fd5b505afa1580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137169190613e17565b8160018151811061373757634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d5461375d9130911684612d45565b601d54604051633b158ab160e11b81526001600160a01b039091169063762b15629061379690859060009086903090429060040161429d565b600060405180830381600087803b1580156137b057600080fd5b505af11580156137c4573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526023602052604090205460ff16151581151514156138755760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3360d81b6044820152606401610efd565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166139295760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610efd565b6001600160a01b0382166000908152602081905260409020548181101561399d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610efd565b6001600160a01b03831660009081526020819052604081208383039055600280548492906139cc9084906143b9565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b038216613a6d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610efd565b8060026000828254613a7f9190614362565b90915550506001600160a01b03821660009081526020819052604081208054839290613aac908490614362565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000613b4b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613c819092919063ffffffff16565b8051909150156124f95780806020019051810190613b699190613fe2565b6124f95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610efd565b601d54613be09030906001600160a01b031684612d45565b601d54604051637c8d9fb960e11b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f91b3f7290839060c4016060604051808303818588803b158015613c4857600080fd5b505af1158015613c5c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133df91906140f6565b6060612ea9848460008585843b613cda5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610efd565b600080866001600160a01b03168587604051613cf6919061414f565b60006040518083038185875af1925050503d8060008114613d33576040519150601f19603f3d011682016040523d82523d6000602084013e613d38565b606091505b5091509150613d48828286613d53565b979650505050505050565b60608315613d625750816112e1565b825115613d725782518084602001fd5b8160405162461bcd60e51b8152600401610efd919061419f565b600082601f830112613d9c578081fd5b81356020613db1613dac8361433e565b61430d565b80838252828201915082860187848660051b8901011115613dd0578586fd5b855b85811015613dee57813584529284019290840190600101613dd2565b5090979650505050505050565b600060208284031215613e0c578081fd5b81356112e18161447e565b600060208284031215613e28578081fd5b81516112e18161447e565b60008060408385031215613e45578081fd5b8235613e508161447e565b91506020830135613e608161447e565b809150509250929050565b600080600060608486031215613e7f578081fd5b8335613e8a8161447e565b92506020840135613e9a8161447e565b929592945050506040919091013590565b60008060408385031215613ebd578182fd5b8235613ec88161447e565b91506020830135613e6081614493565b60008060408385031215613eea578182fd5b8235613ef58161447e565b946020939093013593505050565b60008060408385031215613f15578182fd5b823567ffffffffffffffff80821115613f2c578384fd5b818501915085601f830112613f3f578384fd5b81356020613f4f613dac8361433e565b8083825282820191508286018a848660051b8901011115613f6e578889fd5b8896505b84871015613f99578035613f858161447e565b835260019690960195918301918301613f72565b5096505086013592505080821115613faf578283fd5b50613fbc85828601613d8c565b9150509250929050565b600060208284031215613fd7578081fd5b81356112e181614493565b600060208284031215613ff3578081fd5b81516112e181614493565b60008060408385031215613e45578182fd5b60008060408385031215614022578182fd5b823567ffffffffffffffff80821115614039578384fd5b818501915085601f83011261404c578384fd5b813560208282111561406057614060614468565b614072601f8301601f1916820161430d565b92508183528781838601011115614087578586fd5b818185018285013790820181019490945295939092013593505050565b6000602082840312156140b5578081fd5b813561ffff811681146112e1578182fd5b6000602082840312156140d7578081fd5b5035919050565b6000602082840312156140ef578081fd5b5051919050565b60008060006060848603121561410a578081fd5b8351925060208401519150604084015190509250925092565b6000815180845261413b8160208601602086016143d0565b601f01601f19169290920160200192915050565b600082516141618184602087016143d0565b9190910192915050565b6001600160a01b038416815260606020820181905260009061418f90830185614123565b9050826040830152949350505050565b6020815260006112e16020830184614123565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a10931050d2d31254d5115160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156142ec5784516001600160a01b0316835293830193918301916001016142c7565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561433657614336614468565b604052919050565b600067ffffffffffffffff82111561435857614358614468565b5060051b60200190565b6000821982111561437557614375614452565b500190565b60008261439557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156143b4576143b4614452565b500290565b6000828210156143cb576143cb614452565b500390565b60005b838110156143eb5781810151838201526020016143d3565b838111156133205750506000910152565b600181811c9082168061441057607f821691505b6020821081141561443157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561444b5761444b614452565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612cf257600080fd5b8015158114612cf257600080fdfea26469706673582212200b6bd5aabd6b9e818702b2c3eb66298354c36e1b3e7a479c16b0e629cba9093f64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f3744adead92b2ef524c7cb899d52b8fb729ceea000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c5e8ad663ed368ab41a90c8c5ad02b2145f043120000000000000000000000006912b4ee8370306c719f2f78129114b75581dcf80000000000000000000000007fb35013090590b8ffb628a89851fac6e6f0ebc90000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000026ab000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000001
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f3744adead92b2ef524c7cb899d52b8fb729ceea000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c5e8ad663ed368ab41a90c8c5ad02b2145f043120000000000000000000000006912b4ee8370306c719f2f78129114b75581dcf80000000000000000000000007fb35013090590b8ffb628a89851fac6e6f0ebc90000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000026ab000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : payees (address[]): 0xf3744adead92b2ef524c7cb899d52b8fb729ceea
Arg [1] : shares (uint256[]): 100
Arg [2] : addresses (address[]): 0xc5e8ad663ed368ab41a90c8c5ad02b2145f04312,0x6912b4ee8370306c719f2f78129114b75581dcf8,0x7fb35013090590b8ffb628a89851fac6e6f0ebc9
Arg [3] : fees (uint256[]): 100,9899,1,500,1
Arg [4] : swapAmount (uint256): 5
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 000000000000000000000000f3744adead92b2ef524c7cb899d52b8fb729ceea
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 000000000000000000000000c5e8ad663ed368ab41a90c8c5ad02b2145f04312
Arg [11] : 0000000000000000000000006912b4ee8370306c719f2f78129114b75581dcf8
Arg [12] : 0000000000000000000000007fb35013090590b8ffb628a89851fac6e6f0ebc9
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [15] : 00000000000000000000000000000000000000000000000000000000000026ab
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [17] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed ByteCode Sourcemap
53436:18547:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26405:40;23027:10;26405:40;;;-1:-1:-1;;;;;8662:32:1;;;8644:51;;26435:9:0;8726:2:1;8711:18;;8704:34;8617:18;26405:40:0;;;;;;;53436:18547;;;;;53919:26;;;;;;;;;;-1:-1:-1;53919:26:0;;;;-1:-1:-1;;;;;53919:26:0;;;;;;-1:-1:-1;;;;;8418:32:1;;;8400:51;;8388:2;8373:18;53919:26:0;;;;;;;;54198:35;;;;;;;;;;-1:-1:-1;54198:35:0;;;;;;;;;;;11389:14:1;;11382:22;11364:41;;11352:2;11337:18;54198:35:0;11319:92:1;32895:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;59090:171::-;;;;;;;;;;-1:-1:-1;59090:171:0;;;;;:::i;:::-;;:::i;:::-;;35062:169;;;;;;;;;;-1:-1:-1;35062:169:0;;;;;:::i;:::-;;:::i;71294:562::-;;;;;;;;;;-1:-1:-1;71294:562:0;;;;;:::i;:::-;;:::i;54089:24::-;;;;;;;;;;;;;;;;;;;27159:25:1;;;27147:2;27132:18;54089:24:0;27114:76:1;34015:108:0;;;;;;;;;;-1:-1:-1;34103:12:0;;34015:108;;28191:566;;;;;;;;;;-1:-1:-1;28191:566:0;;;;;:::i;:::-;;:::i;35713:492::-;;;;;;;;;;-1:-1:-1;35713:492:0;;;;;:::i;:::-;;:::i;59955:108::-;;;;;;;;;;-1:-1:-1;59955:108:0;;;;;:::i;:::-;;:::i;53954:25::-;;;;;;;;;;;;;;;;33857:93;;;;;;;;;;-1:-1:-1;33857:93:0;;33940:2;28649:36:1;;28637:2;28622:18;33857:93:0;28604:87:1;54866:60:0;;;;;;;;;;-1:-1:-1;54866:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;36614:215;;;;;;;;;;-1:-1:-1;36614:215:0;;;;;:::i;:::-;;:::i;53889:23::-;;;;;;;;;;-1:-1:-1;53889:23:0;;;;-1:-1:-1;;;;;53889:23:0;;;26536:91;;;;;;;;;;-1:-1:-1;26607:12:0;;26536:91;;27665:135;;;;;;;;;;-1:-1:-1;27665:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;27762:21:0;;;27735:7;27762:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;27665:135;60779:144;;;;;;;;;;-1:-1:-1;60779:144:0;;;;;:::i;:::-;;:::i;29025:641::-;;;;;;;;;;-1:-1:-1;29025:641:0;;;;;:::i;:::-;;:::i;54384:24::-;;;;;;;;;;-1:-1:-1;54384:24:0;;;;;;;;;;;26994:6:1;26982:19;;;26964:38;;26952:2;26937:18;54384:24:0;26919:89:1;53567:76:0;;;;;;;;;;-1:-1:-1;53567:76:0;;;;-1:-1:-1;;;;;53567:76:0;;;68223:1017;;;;;;;;;;;;;:::i;53986:31::-;;;;;;;;;;;;;;;;69248:2038;;;;;;;;;;-1:-1:-1;69248:2038:0;;;;;:::i;:::-;;:::i;60422:93::-;;;;;;;;;;-1:-1:-1;60422:93:0;;;;;:::i;:::-;;:::i;54122:31::-;;;;;;;;;;;;;;;;60931:111;;;;;;;;;;-1:-1:-1;60931:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;60983:36:0;;;;;:28;:36;;;;;61022:12;60983:51;;60931:111;54317:27;;;;;;;;;;;;;;;;67156:1059;;;;;;;;;;-1:-1:-1;67156:1059:0;;;;;:::i;:::-;;:::i;58973:109::-;;;;;;;;;;-1:-1:-1;58973:109:0;;;;;:::i;:::-;;:::i;61050:80::-;;;;;;;;;;;;61110:12;61095;:27;61050:80;58743:111;;;;;;;;;;-1:-1:-1;58743:111:0;;;;;:::i;:::-;;:::i;59633:99::-;;;;;;;;;;-1:-1:-1;59633:99:0;;;;;:::i;:::-;;:::i;53801:79::-;;;;;;;;;;-1:-1:-1;53801:79:0;;;;-1:-1:-1;;;;;53801:79:0;;;53538:22;;;;;;;;;;-1:-1:-1;53538:22:0;;;;-1:-1:-1;;;;;53538:22:0;;;54057:25;;;;;;;;;;;;;;;;58862:103;;;;;;;;;;-1:-1:-1;58862:103:0;;;;;:::i;:::-;;:::i;34186:127::-;;;;;;;;;;-1:-1:-1;34186:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;34287:18:0;34260:7;34287:18;;;;;;;;;;;;34186:127;44569:103;;;;;;;;;;;;;:::i;54284:26::-;;;;;;;;;;-1:-1:-1;54284:26:0;;;;;;;;;;;27891:100;;;;;;;;;;-1:-1:-1;27891:100:0;;;;;:::i;:::-;;:::i;59740:94::-;;;;;;;;;;-1:-1:-1;59740:94:0;;;;;:::i;:::-;;:::i;43918:87::-;;;;;;;;;;-1:-1:-1;43991:6:0;;-1:-1:-1;;;;;43991:6:0;43918:87;;59269:179;;;;;;;;;;-1:-1:-1;59269:179:0;;;;;:::i;:::-;;:::i;33114:104::-;;;;;;;;;;;;;:::i;27387:109::-;;;;;;;;;;-1:-1:-1;27387:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;27470:18:0;27443:7;27470:18;;;:9;:18;;;;;;;27387:109;60071:248;;;;;;;;;;-1:-1:-1;60071:248:0;;;;;:::i;:::-;;:::i;60650:121::-;;;;;;;;;;-1:-1:-1;60650:121:0;;;;;:::i;:::-;;:::i;58093:107::-;;;;;;;;;;-1:-1:-1;58093:107:0;;;;;:::i;:::-;;:::i;37332:413::-;;;;;;;;;;-1:-1:-1;37332:413:0;;;;;:::i;:::-;;:::i;57299:554::-;;;;;;;;;;;;;:::i;34526:175::-;;;;;;;;;;-1:-1:-1;34526:175:0;;;;;:::i;:::-;;:::i;59456:169::-;;;;;;;;;;-1:-1:-1;59456:169:0;;;;;:::i;:::-;;:::i;54024:26::-;;;;;;;;;;;;;;;;54802:57;;;;;;;;;;-1:-1:-1;54802:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;65144:2004;;;;;;;;;;-1:-1:-1;65144:2004:0;;;;;:::i;:::-;;:::i;60327:85::-;;;;;;;;;;-1:-1:-1;60327:85:0;;;;;:::i;:::-;;:::i;60523:119::-;;;;;;;;;;-1:-1:-1;60523:119:0;;;;;:::i;:::-;;:::i;54415:25::-;;;;;;;;;;-1:-1:-1;54415:25:0;;;;;;;;;;;27183:105;;;;;;;;;;-1:-1:-1;27183:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;27264:16:0;27237:7;27264:16;;;:7;:16;;;;;;;27183:105;54160:31;;;;;;;;;;;;;;;;26973:119;;;;;;;;;;-1:-1:-1;26973:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;27058:26:0;27031:7;27058:26;;;:19;:26;;;;;;;26973:119;34764:151;;;;;;;;;;-1:-1:-1;34764:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;34880:18:0;;;34853:7;34880:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;34764:151;57865:220;;;;;;;;;;-1:-1:-1;57865:220:0;;;;;:::i;:::-;;:::i;54351:24::-;;;;;;;;;;;;;;;;58208:527;;;;;;;;;;-1:-1:-1;58208:527:0;;;;;:::i;:::-;;:::i;26721:95::-;;;;;;;;;;-1:-1:-1;26794:14:0;;26721:95;;44827:201;;;;;;;;;;-1:-1:-1;44827:201:0;;;;;:::i;:::-;;:::i;59842:105::-;;;;;;;;;;-1:-1:-1;59842:105:0;;;;;:::i;:::-;;:::i;54240:37::-;;;;;;;;;;-1:-1:-1;54240:37:0;;;;;;;;;;;54701:42;;;;;;;;;;-1:-1:-1;54701:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;53713:81;;;;;;;;;;;;53752:42;53713:81;;54750:45;;;;;;;;;;-1:-1:-1;54750:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32895:100;32949:13;32982:5;32975:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32895:100;:::o;59090:171::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;;;;;;;;;59162:10:::1;:19:::0;;;59241:11:::1;::::0;59219:16:::1;::::0;59204:49:::1;::::0;59241:11;59204:32:::1;::::0;59175:6;;59204:14:::1;:32::i;:::-;:36:::0;::::1;:49::i;:::-;59192:9;:61:::0;-1:-1:-1;59090:171:0:o;35062:169::-;35145:4;35162:39;23027:10;35185:7;35194:6;35162:8;:39::i;:::-;-1:-1:-1;35219:4:0;35062:169;;;;:::o;71294:562::-;23027:10;;71402:88;;;;-1:-1:-1;;;71402:88:0;;19455:2:1;71402:88:0;;;19437:21:1;19494:1;19474:18;;;19467:29;-1:-1:-1;;;19512:18:1;;;19505:36;19558:18;;71402:88:0;19427:155:1;71402:88:0;71528:11;;:38;;-1:-1:-1;;;71528:38:0;;-1:-1:-1;;;;;8418:32:1;;;71528:38:0;;;8400:51:1;71505:20:0;;71528:11;;:30;;8373:18:1;;71528:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;71505:61;;71622:1;71607:12;:16;71581:84;;;;-1:-1:-1;;;71581:84:0;;13538:2:1;71581:84:0;;;13520:21:1;13577:1;13557:18;;;13550:29;-1:-1:-1;;;13595:18:1;;;13588:36;13641:18;;71581:84:0;13510:155:1;71581:84:0;71676:40;71696:4;71703:12;71676:11;:40::i;:::-;71727:11;;:66;;-1:-1:-1;;;71727:66:0;;-1:-1:-1;;;;;11094:32:1;;;71727:66:0;;;11076:51:1;11143:18;;;11136:34;;;11186:18;;;11179:34;;;71727:11:0;;;;:30;;11049:18:1;;71727:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;71804:11:0;;:42;;-1:-1:-1;;;71804:42:0;;-1:-1:-1;;;;;8418:32:1;;;71804:42:0;;;8400:51:1;71804:11:0;;;;-1:-1:-1;71804:34:0;;-1:-1:-1;8373:18:1;;71804:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71294:562;;;:::o;28191:566::-;-1:-1:-1;;;;;28267:16:0;;28286:1;28267:16;;;:7;:16;;;;;;28259:71;;;;-1:-1:-1;;;28259:71:0;;;;;;;:::i;:::-;28343:21;28391:15;26794:14;;;26721:95;28391:15;28367:39;;:21;:39;:::i;:::-;28343:63;;28417:15;28435:58;28451:7;28460:13;28475:17;28484:7;-1:-1:-1;;;;;27470:18:0;27443:7;27470:18;;;:9;:18;;;;;;;27387:109;28475:17;28435:15;:58::i;:::-;28417:76;-1:-1:-1;28514:12:0;28506:68;;;;-1:-1:-1;;;28506:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28587:18:0;;;;;;:9;:18;;;;;:29;;28609:7;;28587:18;:29;;28609:7;;28587:29;:::i;:::-;;;;;;;;28645:7;28627:14;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;28665:35:0;;-1:-1:-1;28683:7:0;28692;28665:17;:35::i;:::-;28716:33;;;-1:-1:-1;;;;;8662:32:1;;8644:51;;8726:2;8711:18;;8704:34;;;28716:33:0;;8617:18:1;28716:33:0;;;;;;;28191:566;;;:::o;35713:492::-;35853:4;35870:36;35880:6;35888:9;35899:6;35870:9;:36::i;:::-;-1:-1:-1;;;;;35946:19:0;;35919:24;35946:19;;;:11;:19;;;;;;;;23027:10;35946:33;;;;;;;;35998:26;;;;35990:79;;;;-1:-1:-1;;;35990:79:0;;19789:2:1;35990:79:0;;;19771:21:1;19828:2;19808:18;;;19801:30;19867:34;19847:18;;;19840:62;-1:-1:-1;;;19918:18:1;;;19911:38;19966:19;;35990:79:0;19761:230:1;35990:79:0;36105:57;36114:6;23027:10;36155:6;36136:16;:25;36105:8;:57::i;:::-;36193:4;36186:11;;;35713:492;;;;;;:::o;59955:108::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60030:16:::1;:25:::0;;-1:-1:-1;;60030:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59955:108::o;36614:215::-;23027:10;36702:4;36751:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;36751:34:0;;;;;;;;;;36702:4;;36719:80;;36742:7;;36751:47;;36788:10;;36751:47;:::i;:::-;36719:8;:80::i;60779:144::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;60885:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;60885:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;60779:144::o;29025:641::-;-1:-1:-1;;;;;29107:16:0;;29126:1;29107:16;;;:7;:16;;;;;;29099:71;;;;-1:-1:-1;;;29099:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27058:26:0;;29183:21;27058:26;;;:19;:26;;;;;;29207:30;;-1:-1:-1;;;29207:30:0;;29231:4;29207:30;;;8400:51:1;-1:-1:-1;;;;;29207:15:0;;;;;8373:18:1;;29207:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;29183:77;;29271:15;29289:65;29305:7;29314:13;29329:24;29338:5;29345:7;-1:-1:-1;;;;;27762:21:0;;;27735:7;27762:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;27665:135;29289:65;29271:83;-1:-1:-1;29375:12:0;29367:68;;;;-1:-1:-1;;;29367:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29448:21:0;;;;;;;:14;:21;;;;;;;;:30;;;;;;;;;;;:41;;29482:7;;29448:21;:41;;29482:7;;29448:41;:::i;:::-;;;;-1:-1:-1;;;;;;;29500:26:0;;;;;;:19;:26;;;;;:37;;29530:7;;29500:26;:37;;29530:7;;29500:37;:::i;:::-;;;;-1:-1:-1;29550:47:0;;-1:-1:-1;29573:5:0;29580:7;29589;29550:22;:47::i;:::-;29613:45;;;-1:-1:-1;;;;;8662:32:1;;;8644:51;;8726:2;8711:18;;8704:34;;;29613:45:0;;;;;8617:18:1;29613:45:0;;;;;;;29025:641;;;;:::o;68223:1017::-;23027:10;;68305:79;;;;-1:-1:-1;;;68305:79:0;;21559:2:1;68305:79:0;;;21541:21:1;21598:1;21578:18;;;21571:29;-1:-1:-1;;;21616:18:1;;;21609:39;21665:18;;68305:79:0;21531:158:1;68305:79:0;-1:-1:-1;;;;;68418:21:0;;;;;;:13;:21;;;;;;;;68417:22;68395:83;;;;-1:-1:-1;;;68395:83:0;;;;;;;:::i;:::-;68521:8;;-1:-1:-1;;;;;68511:18:0;;;68521:8;;68511:18;;;;:43;;-1:-1:-1;68543:11:0;;-1:-1:-1;;;;;68533:21:0;;;68543:11;;68533:21;;68511:43;68489:102;;;;-1:-1:-1;;;68489:102:0;;24490:2:1;68489:102:0;;;24472:21:1;24529:1;24509:18;;;24502:29;-1:-1:-1;;;24547:18:1;;;24540:39;24596:18;;68489:102:0;24462:158:1;68489:102:0;68625:11;;:38;;-1:-1:-1;;;68625:38:0;;-1:-1:-1;;;;;8418:32:1;;;68625:38:0;;;8400:51:1;68602:20:0;;68625:11;;:30;;8373:18:1;;68625:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;68602:61;;68711:1;68696:12;:16;68674:75;;;;-1:-1:-1;;;68674:75:0;;15019:2:1;68674:75:0;;;15001:21:1;15058:1;15038:18;;;15031:29;-1:-1:-1;;;15076:18:1;;;15069:39;15125:18;;68674:75:0;14991:158:1;68674:75:0;68764:18;;;;;;;68760:287;;;68835:10;;68799:17;;68835:14;68831:165;;68882:39;68915:5;68882:28;68899:10;;68882:12;:16;;:28;;;;:::i;:::-;:32;;:39::i;:::-;68957:11;;68870:51;;-1:-1:-1;68940:40:0;;-1:-1:-1;;;;;68957:11:0;68870:51;68940:16;:40::i;:::-;69010:25;69026:9;69010:25;;:::i;:::-;;;68760:287;;69057:33;69069:6;69077:12;69057:11;:33::i;:::-;69101:11;;:42;;-1:-1:-1;;;69101:42:0;;-1:-1:-1;;;;;8418:32:1;;;69101:42:0;;;8400:51:1;69101:11:0;;;;:34;;8373:18:1;;69101:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69170:12;69154;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;69200:32:0;;27159:25:1;;;69230:1:0;;-1:-1:-1;;;;;69200:32:0;;;;;27147:2:1;27132:18;69200:32:0;;;;;;;68223:1017;;:::o;69248:2038::-;23027:10;;69356:76;;;;-1:-1:-1;;;69356:76:0;;19455:2:1;69356:76:0;;;19437:21:1;19494:1;19474:18;;;19467:29;-1:-1:-1;;;19512:18:1;;;19505:36;19558:18;;69356:76:0;19427:155:1;69356:76:0;-1:-1:-1;;;;;69466:21:0;;;;;;:13;:21;;;;;;;;69465:22;69443:83;;;;-1:-1:-1;;;69443:83:0;;;;;;;:::i;:::-;69569:8;;-1:-1:-1;;;;;69559:18:0;;;69569:8;;69559:18;;;;:43;;-1:-1:-1;69591:11:0;;-1:-1:-1;;;;;69581:21:0;;;69591:11;;69581:21;;69559:43;69537:99;;;;-1:-1:-1;;;69537:99:0;;13204:2:1;69537:99:0;;;13186:21:1;13243:1;13223:18;;;13216:29;-1:-1:-1;;;13261:18:1;;;13254:36;13307:18;;69537:99:0;13176:155:1;69537:99:0;69670:11;;:44;;-1:-1:-1;;;69670:44:0;;-1:-1:-1;;;;;8662:32:1;;;69670:44:0;;;8644:51:1;8711:18;;;8704:34;;;69647:20:0;;69670:11;;:25;;8617:18:1;;69670:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;69647:67;;69762:1;69747:12;:16;69725:72;;;;-1:-1:-1;;;69725:72:0;;13538:2:1;69725:72:0;;;13520:21:1;13577:1;13557:18;;;13550:29;-1:-1:-1;;;13595:18:1;;;13588:36;13641:18;;69725:72:0;13510:155:1;69725:72:0;69859:4;69810:28;34287:18;;;;;;;;;;;69920:16;;69896:40;;;;;;;69965:47;;-1:-1:-1;69994:18:0;;;;;;;69965:47;:73;;;;-1:-1:-1;70030:8:0;;;;70029:9;69965:73;:107;;;;-1:-1:-1;43991:6:0;;-1:-1:-1;;;;;70055:17:0;;;43991:6;;70055:17;;69965:107;:158;;;;-1:-1:-1;;;;;;70090:33:0;;;;;;:25;:33;;;;;;;;70089:34;69965:158;69947:1148;;;70150:8;:15;;-1:-1:-1;;70150:15:0;70161:4;70150:15;;;70246:11;;70150:8;;70203:84;;70281:5;;70203:55;;:20;;:42;:55::i;:84::-;70321:8;;70182:105;;-1:-1:-1;70304:38:0;;-1:-1:-1;;;;;70321:8:0;70182:105;70304:16;:38::i;:::-;70359:25;70387:83;70464:5;70387:54;70430:10;;70387:20;:42;;:54;;;;:::i;:83::-;70359:111;;70487:27;70517:72;70569:5;70517:29;70539:6;;70517:17;:21;;:29;;;;:::i;:72::-;70623:11;;70487:102;;-1:-1:-1;70606:50:0;;-1:-1:-1;;;;;70623:11:0;70487:102;70606:16;:50::i;:::-;70739:11;;70673:153;;70715:4;;-1:-1:-1;;;;;70739:11:0;70769:42;:17;70791:19;70769:21;:42::i;:::-;70673:15;:153::i;:::-;70843:18;70864:85;70929:5;70864:42;70889:16;;70864:20;:24;;:42;;;;:::i;:85::-;70843:106;;70966:26;70981:10;70966:14;:26::i;:::-;71043:4;34260:7;34287:18;;;;;;;;;;;71007:43;;:17;:43::i;:::-;-1:-1:-1;;71067:8:0;:16;;-1:-1:-1;;71067:16:0;;;-1:-1:-1;;69947:1148:0;71105:40;71125:4;71132:12;71105:11;:40::i;:::-;71156:11;;:63;;-1:-1:-1;;;71156:63:0;;-1:-1:-1;;;;;11094:32:1;;;71156:63:0;;;11076:51:1;11143:18;;;11136:34;;;11186:18;;;11179:34;;;71156:11:0;;;;:30;;11049:18:1;;71156:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71268:9;71246:6;-1:-1:-1;;;;;71237:41:0;;71254:12;71237:41;;;;27159:25:1;;27147:2;27132:18;;27114:76;71237:41:0;;;;;;;;69248:2038;;;;;:::o;60422:93::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60488:11:::1;:19:::0;60422:93::o;67156:1059::-;23027:10;;67258:79;;;;-1:-1:-1;;;67258:79:0;;18106:2:1;67258:79:0;;;18088:21:1;18145:1;18125:18;;;18118:29;-1:-1:-1;;;18163:18:1;;;18156:39;18212:18;;67258:79:0;18078:158:1;67258:79:0;-1:-1:-1;;;;;67371:21:0;;;;;;:13;:21;;;;;;;;67370:22;67348:83;;;;-1:-1:-1;;;67348:83:0;;;;;;;:::i;:::-;67474:8;;-1:-1:-1;;;;;67464:18:0;;;67474:8;;67464:18;;;;:43;;-1:-1:-1;67496:11:0;;-1:-1:-1;;;;;67486:21:0;;;67496:11;;67486:21;;67464:43;67442:102;;;;-1:-1:-1;;;67442:102:0;;14682:2:1;67442:102:0;;;14664:21:1;14721:1;14701:18;;;14694:29;-1:-1:-1;;;14739:18:1;;;14732:39;14788:18;;67442:102:0;14654:158:1;67442:102:0;67578:11;;:44;;-1:-1:-1;;;67578:44:0;;-1:-1:-1;;;;;8662:32:1;;;67578:44:0;;;8644:51:1;8711:18;;;8704:34;;;67555:20:0;;67578:11;;:25;;8617:18:1;;67578:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67555:67;;67670:1;67655:12;:16;67633:75;;;;-1:-1:-1;;;67633:75:0;;19118:2:1;67633:75:0;;;19100:21:1;19157:1;19137:18;;;19130:29;-1:-1:-1;;;19175:18:1;;;19168:39;19224:18;;67633:75:0;19090:158:1;67633:75:0;67725:18;;;;;;;67721:287;;;67796:10;;67760:17;;67796:14;67792:165;;67843:39;67876:5;67843:28;67860:10;;67843:12;:16;;:28;;;;:::i;:39::-;67918:11;;67831:51;;-1:-1:-1;67901:40:0;;-1:-1:-1;;;;;67918:11:0;67831:51;67901:16;:40::i;:::-;67971:25;67987:9;67971:25;;:::i;:::-;;;67721:287;;68018:33;68030:6;68038:12;68018:11;:33::i;:::-;68062:11;;:48;;-1:-1:-1;;;68062:48:0;;-1:-1:-1;;;;;8662:32:1;;;68062:48:0;;;8644:51:1;8711:18;;;8704:34;;;68062:11:0;;;;:29;;8617:18:1;;68062:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68137:12;68121;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;68167:40:0;;27159:25:1;;;68197:9:0;;-1:-1:-1;;;;;68167:40:0;;;;;27147:2:1;27132:18;68167:40:0;;;;;;;;67156:1059;;;:::o;58973:109::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59054:11:::1;:20:::0;;-1:-1:-1;;;;;;59054:20:0::1;-1:-1:-1::0;;;;;59054:20:0;;;::::1;::::0;;;::::1;::::0;;58973:109::o;58743:111::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;58821:16:::1;:25:::0;58743:111::o;59633:99::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59705:10:::1;:19:::0;59633:99::o;58862:103::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;58940:8:::1;:17:::0;;-1:-1:-1;;;;;;58940:17:0::1;-1:-1:-1::0;;;;;58940:17:0;;;::::1;::::0;;;::::1;::::0;;58862:103::o;44569:::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;44634:30:::1;44661:1;44634:18;:30::i;:::-;44569:103::o:0;27891:100::-;27942:7;27969;27977:5;27969:14;;;;;;-1:-1:-1;;;27969:14:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27969:14:0;;27891:100;-1:-1:-1;;27891:100:0:o;59740:94::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59811:6:::1;:15:::0;59740:94::o;59269:179::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59343:16:::1;:25:::0;;;59428:11:::1;::::0;59391:10:::1;::::0;:49:::1;::::0;59428:11;59391:32:::1;::::0;59362:6;59391:14:::1;:32::i;33114:104::-:0;33170:13;33203:7;33196:14;;;;;:::i;60071:248::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60217:7:::1;::::0;-1:-1:-1;;;;;60209:15:0;;::::1;60217:7:::0;::::1;60209:15;;60187:70;;;::::0;-1:-1:-1;;;60187:70:0;;26689:2:1;60187:70:0::1;::::0;::::1;26671:21:1::0;26728:1;26708:18;;;26701:29;-1:-1:-1;;;26746:18:1;;;26739:35;26791:18;;60187:70:0::1;26661:154:1::0;60187:70:0::1;60270:41;60299:4;60305:5;60270:28;:41::i;:::-;60071:248:::0;;:::o;60650:121::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60732:4:::1;60723:5;:13;;;;60715:22;;;::::0;::::1;;60748:7;:15:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;60748:15:0;;::::1;::::0;;;::::1;::::0;;60650:121::o;58093:107::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;58170:22:::1;58176:7;58185:6;58170:5;:22::i;37332:413::-:0;23027:10;37425:4;37469:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;37469:34:0;;;;;;;;;;37522:35;;;;37514:85;;;;-1:-1:-1;;;37514:85:0;;25578:2:1;37514:85:0;;;25560:21:1;25617:2;25597:18;;;25590:30;25656:34;25636:18;;;25629:62;-1:-1:-1;;;25707:18:1;;;25700:35;25752:19;;37514:85:0;25550:227:1;37514:85:0;37635:67;23027:10;37658:7;37686:15;37667:16;:34;37635:8;:67::i;:::-;-1:-1:-1;37733:4:0;;37332:413;-1:-1:-1;;;37332:413:0:o;57299:554::-;23027:10;57345:14;57408:18;;;:10;:18;;;;;;;;57407:19;57385:98;;;;-1:-1:-1;;;57385:98:0;;24132:2:1;57385:98:0;;;24114:21:1;24171:2;24151:18;;;24144:30;24210:31;24190:18;;;24183:59;24259:18;;57385:98:0;24104:179:1;57385:98:0;57511:11;;:35;;-1:-1:-1;;;57511:35:0;;-1:-1:-1;;;;;8418:32:1;;;57511:11:0;:35;;8400:51:1;57494:14:0;;57511:11;;;;;:27;;8373:18:1;;57511:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57494:52;;57574:9;57569:135;57594:6;57589:1;:11;57569:135;;57626:11;;:66;;-1:-1:-1;;;57626:66:0;;-1:-1:-1;;;;;9736:32:1;;;57626:66:0;;;9718:51:1;9805:2;9785:18;;;9778:30;9844:1;9824:18;;;9817:29;-1:-1:-1;;;9862:19:1;;;9855:38;57671:20:0;9945:18:1;;;9938:34;57626:11:0;;;;:25;;9910:19:1;;57626:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57602:3;;;;;:::i;:::-;;;;57569:135;;;-1:-1:-1;57733:12:0;;:30;;-1:-1:-1;;;57733:30:0;;-1:-1:-1;;;;;8418:32:1;;;57733:30:0;;;8400:51:1;57716:14:0;;57733:12;;:22;;8373:18:1;;57733:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57716:47;;57776:27;57788:6;57796;57776:11;:27::i;:::-;-1:-1:-1;;;;;71939:20:0;;;;;;:10;:20;;;;;:31;;-1:-1:-1;;71939:31:0;57838:4;71939:31;;;57299:554;;;:::o;57816:27::-;57299:554;;;:::o;34526:175::-;34612:4;34629:42;23027:10;34653:9;34664:6;34629:9;:42::i;59456:169::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59525:11:::1;:20:::0;;;59583:16:::1;::::0;59568:10:::1;::::0;:49:::1;::::0;59539:6;;59568:32:::1;::::0;:14:::1;:32::i;65144:2004::-:0;65293:18;;23027:10;;65314:1;-1:-1:-1;65293:49:0;;;;;65340:2;65325:4;65319:18;:23;65293:49;65271:103;;;;-1:-1:-1;;;65271:103:0;;;;;;20894:2:1;20876:21;;;20933:1;20913:18;;;20906:29;-1:-1:-1;;;20966:2:1;20951:18;;20944:34;21010:2;20995:18;;20866:153;65271:103:0;-1:-1:-1;;;;;65407:20:0;;65385:74;;;;-1:-1:-1;;;65385:74:0;;;;;;23442:2:1;23424:21;;;23481:1;23461:18;;;23454:29;-1:-1:-1;;;23514:2:1;23499:18;;23492:34;23558:2;23543:18;;23414:153;65385:74:0;-1:-1:-1;;;;;65479:21:0;;;;;;:13;:21;;;;;;;;65478:22;65470:46;;;;-1:-1:-1;;;65470:46:0;;;;;;;:::i;:::-;65559:8;;-1:-1:-1;;;;;65549:18:0;;;65559:8;;65549:18;;;;:43;;-1:-1:-1;65581:11:0;;-1:-1:-1;;;;;65571:21:0;;;65581:11;;65571:21;;65549:43;65527:97;;;;-1:-1:-1;;;65527:97:0;;;;;;16170:2:1;16152:21;;;16209:1;16189:18;;;16182:29;-1:-1:-1;;;16242:2:1;16227:18;;16220:34;16286:2;16271:18;;16142:153;65527:97:0;65678:7;65657:17;65667:6;-1:-1:-1;;;;;34287:18:0;34260:7;34287:18;;;;;;;;;;;;34186:127;65657:17;:28;;65635:82;;;;-1:-1:-1;;;65635:82:0;;;;;;12469:2:1;12451:21;;;12508:1;12488:18;;;12481:29;-1:-1:-1;;;12541:2:1;12526:18;;12519:34;12585:2;12570:18;;12441:153;65635:82:0;65779:4;65730:28;34287:18;;;;;;;;;;;65840:16;;65816:40;;;;;;;65885:47;;-1:-1:-1;65914:18:0;;;;;;;65885:47;:73;;;;-1:-1:-1;65950:8:0;;;;65949:9;65885:73;:107;;;;-1:-1:-1;43991:6:0;;-1:-1:-1;;;;;65975:17:0;;;43991:6;;65975:17;;65885:107;:158;;;;-1:-1:-1;;;;;;66010:33:0;;;;;;:25;:33;;;;;;;;66009:34;65885:158;65867:1160;;;66070:8;:15;;-1:-1:-1;;66070:15:0;66081:4;66070:15;;;66178:11;;66070:8;;66135:84;;66213:5;;66135:55;;:20;;:42;:55::i;:84::-;66253:8;;66114:105;;-1:-1:-1;66236:38:0;;-1:-1:-1;;;;;66253:8:0;66114:105;66236:16;:38::i;:::-;66291:25;66319:83;66396:5;66319:54;66362:10;;66319:20;:42;;:54;;;;:::i;:83::-;66291:111;;66419:27;66449:72;66501:5;66449:29;66471:6;;66449:17;:21;;:29;;;;:::i;:72::-;66555:11;;66419:102;;-1:-1:-1;66538:50:0;;-1:-1:-1;;;;;66555:11:0;66419:102;66538:16;:50::i;:::-;66671:11;;66605:153;;66647:4;;-1:-1:-1;;;;;66671:11:0;66701:42;:17;66723:19;66701:21;:42::i;66605:153::-;66775:18;66796:85;66861:5;66796:42;66821:16;;66796:20;:24;;:42;;;;:::i;:85::-;66775:106;;66898:26;66913:10;66898:14;:26::i;:::-;66975:4;34260:7;34287:18;;;;;;;;;;;66939:43;;71007:17;:43::i;66939:::-;-1:-1:-1;;66999:8:0;:16;;-1:-1:-1;;66999:16:0;;;-1:-1:-1;;65867:1160:0;67037:47;67053:6;67069:4;67076:7;67037:15;:47::i;:::-;67095:11;;:45;;-1:-1:-1;;;67095:45:0;;-1:-1:-1;;;;;67095:11:0;;;;:22;;:45;;67118:6;;67126:4;;67132:7;;67095:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65144:2004;;;;;:::o;60327:85::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60389:7:::1;:15:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;60389:15:0;;::::1;::::0;;;::::1;::::0;;60327:85::o;60523:119::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60604:4:::1;60595:5;:13;;;;60587:22;;;::::0;::::1;;60620:6;:14:::0;;-1:-1:-1;;60620:14:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;60523:119::o;57865:220::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;57974:9:::1;57969:109;57993:10;:17;57989:1;:21;57969:109;;;58032:34;58038:10;58049:1;58038:13;;;;;;-1:-1:-1::0;;;58038:13:0::1;;;;;;;;;;;;;;;58053:9;58063:1;58053:12;;;;;;-1:-1:-1::0;;;58053:12:0::1;;;;;;;;;;;;;;;58032:5;:34::i;:::-;58012:3:::0;::::1;::::0;::::1;:::i;:::-;;;;57969:109;;58208:527:::0;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;58334:9:::1;::::0;-1:-1:-1;;;;;58312:32:0;;::::1;58334:9:::0;::::1;58312:32;;58290:87;;;::::0;-1:-1:-1;;;58290:87:0;;21896:2:1;58290:87:0::1;::::0;::::1;21878:21:1::0;21935:1;21915:18;;;21908:29;-1:-1:-1;;;21953:18:1;;;21946:35;21998:18;;58290:87:0::1;21868:154:1::0;58290:87:0::1;58429:9;::::0;58393:47:::1;::::0;-1:-1:-1;;;;;58429:9:0;;::::1;::::0;58393:47;::::1;::::0;::::1;::::0;58429:9:::1;::::0;58393:47:::1;58555:9;::::0;:19:::1;::::0;;-1:-1:-1;;;58555:19:0;;;;58497:10;;58451:27:::1;::::0;-1:-1:-1;;;;;58555:9:0;;::::1;::::0;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:9;:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;58538:48:0::1;;58609:4;58629:10;-1:-1:-1::0;;;;;58629:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58538:120;::::0;-1:-1:-1;;;;;;58538:120:0::1;::::0;;;;;;-1:-1:-1;;;;;8979:15:1;;;58538:120:0::1;::::0;::::1;8961:34:1::0;9031:15;;9011:18;;;9004:43;8896:18;;58538:120:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58669:7;:18:::0;;-1:-1:-1;;;;;58669:18:0;;::::1;-1:-1:-1::0;;;;;;58669:18:0;;::::1;;::::0;;;58698:16:::1;:29:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;58208:527:0:o;44827:201::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44916:22:0;::::1;44908:73;;;::::0;-1:-1:-1;;;44908:73:0;;13872:2:1;44908:73:0::1;::::0;::::1;13854:21:1::0;13911:2;13891:18;;;13884:30;13950:34;13930:18;;;13923:62;-1:-1:-1;;;14001:18:1;;;13994:36;14047:19;;44908:73:0::1;13844:228:1::0;44908:73:0::1;44992:28;45011:8;44992:18;:28::i;:::-;44827:201:::0;:::o;59842:105::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59912:18:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;59912:27:0;;::::1;::::0;;;::::1;::::0;;59842:105::o;48248:98::-;48306:7;48333:5;48337:1;48333;:5;:::i;41016:380::-;-1:-1:-1;;;;;41152:19:0;;41144:68;;;;-1:-1:-1;;;41144:68:0;;23037:2:1;41144:68:0;;;23019:21:1;23076:2;23056:18;;;23049:30;23115:34;23095:18;;;23088:62;-1:-1:-1;;;23166:18:1;;;23159:34;23210:19;;41144:68:0;23009:226:1;41144:68:0;-1:-1:-1;;;;;41231:21:0;;41223:68;;;;-1:-1:-1;;;41223:68:0;;14279:2:1;41223:68:0;;;14261:21:1;14318:2;14298:18;;;14291:30;14357:34;14337:18;;;14330:62;-1:-1:-1;;;14408:18:1;;;14401:32;14450:19;;41223:68:0;14251:224:1;41223:68:0;-1:-1:-1;;;;;41304:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41356:32;;27159:25:1;;;41356:32:0;;27132:18:1;41356:32:0;27114:76:1;63249:107:0;63324:24;63330:8;63340:7;63324:5;:24::i;29844:248::-;30054:12;;-1:-1:-1;;;;;30034:16:0;;29990:7;30034:16;;;:7;:16;;;;;;29990:7;;30069:15;;30018:32;;:13;:32;:::i;:::-;30017:49;;;;:::i;:::-;:67;;;;:::i;:::-;30010:74;29844:248;-1:-1:-1;;;;29844:248:0:o;8635:317::-;8750:6;8725:21;:31;;8717:73;;;;-1:-1:-1;;;8717:73:0;;16929:2:1;8717:73:0;;;16911:21:1;16968:2;16948:18;;;16941:30;17007:31;16987:18;;;16980:59;17056:18;;8717:73:0;16901:179:1;8717:73:0;8804:12;8822:9;-1:-1:-1;;;;;8822:14:0;8844:6;8822:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8803:52;;;8874:7;8866:78;;;;-1:-1:-1;;;8866:78:0;;16502:2:1;8866:78:0;;;16484:21:1;16541:2;16521:18;;;16514:30;16580:34;16560:18;;;16553:62;16651:28;16631:18;;;16624:56;16697:19;;8866:78:0;16474:248:1;61466:1775:0;61590:14;23027:10;61634:7;;61590:29;;-1:-1:-1;61634:7:0;;;;;:15;;61645:4;61634:15;61630:424;;;61678:7;;-1:-1:-1;;;;;61670:15:0;;;61678:7;;61670:15;61666:72;;;61706:16;61715:6;-1:-1:-1;;;;;60983:36:0;;;;;:28;:36;;;;;61022:12;60983:51;;60931:111;61706:16;61774:7;;-1:-1:-1;;;;;61768:13:0;;;61774:7;;61768:13;61764:279;;;-1:-1:-1;;;;;61819:36:0;;61802:14;61819:36;;;:28;:36;;;;;;61874:17;61110:12;61095;:27;61050:80;61874:17;61942:11;;61930:23;;:9;:23;:::i;:::-;61914:12;;:39;61910:118;;61978:30;61995:6;62003:4;61978:16;:30::i;:::-;61764:279;;-1:-1:-1;;;;;62087:19:0;;;;;;:13;:19;;;;;;;;62086:20;:42;;;;-1:-1:-1;;;;;;62111:17:0;;;;;;:13;:17;;;;;;;;62110:18;62086:42;62064:103;;;;-1:-1:-1;;;62064:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;62186:18:0;;62178:38;;;;-1:-1:-1;;;62178:38:0;;20198:2:1;62178:38:0;;;20180:21:1;20237:1;20217:18;;;20210:29;-1:-1:-1;;;20255:18:1;;;20248:37;20302:18;;62178:38:0;20170:156:1;62178:38:0;-1:-1:-1;;;;;62235:16:0;;62227:36;;;;-1:-1:-1;;;62227:36:0;;18783:2:1;62227:36:0;;;18765:21:1;18822:1;18802:18;;;18795:29;-1:-1:-1;;;18840:18:1;;;18833:37;18887:18;;62227:36:0;18755:156:1;62227:36:0;43991:6;;-1:-1:-1;;;;;62278:15:0;;;43991:6;;62278:15;;;;:32;;-1:-1:-1;62303:7:0;;-1:-1:-1;;;;;62297:13:0;;;62303:7;;62297:13;;62278:32;:60;;;;-1:-1:-1;62328:9:0;;-1:-1:-1;;;;;62314:24:0;;;62328:9;;62314:24;;62278:60;:83;;;;-1:-1:-1;;;;;;62342:19:0;;62356:4;62342:19;;62278:83;:108;;;;-1:-1:-1;;;;;;62365:21:0;;62381:4;62365:21;;62278:108;62274:186;;;62411:16;;;;62403:45;;;;-1:-1:-1;;;62403:45:0;;26344:2:1;62403:45:0;;;26326:21:1;26383:2;26363:18;;;26356:30;-1:-1:-1;;;26402:18:1;;;26395:46;26458:18;;62403:45:0;26316:166:1;62403:45:0;62484:7;;-1:-1:-1;;;;;62476:15:0;;;62484:7;;62476:15;:30;;;;-1:-1:-1;62495:6:0;;;;:11;;62476:30;62472:760;;;62552:6;;62523:17;;62559:5;;62543:15;;62552:6;;62543;:15;:::i;:::-;:21;;;;:::i;:::-;62523:41;-1:-1:-1;62579:18:0;62600;62523:41;62600:6;:18;:::i;:::-;62579:39;-1:-1:-1;62652:22:0;62579:39;62652:9;:22;:::i;:::-;62642:6;:32;62633:57;;;;-1:-1:-1;;;62633:57:0;;18443:2:1;62633:57:0;;;18425:21:1;18482:2;18462:18;;;18455:30;-1:-1:-1;;;18501:18:1;;;18494:41;18552:18;;62633:57:0;18415:161:1;62633:57:0;62705:47;62721:4;62735;62742:9;62705:15;:47::i;:::-;62767:37;62783:4;62789:2;62793:10;62767:15;:37::i;:::-;62472:760;;;;;62832:7;;-1:-1:-1;;;;;62826:13:0;;;62832:7;;62826:13;:29;;;;-1:-1:-1;62843:7:0;;;;;;;:12;;62826:29;62822:410;;;62901:7;;62872:17;;62909:5;;62892:16;;62901:7;;;;;62892:6;:16;:::i;62822:410::-;63187:33;63203:4;63209:2;63213:6;63187:15;:33::i;:::-;61466:1775;;;;:::o;18237:211::-;18381:58;;;-1:-1:-1;;;;;8662:32:1;;18381:58:0;;;8644:51:1;8711:18;;;;8704:34;;;18381:58:0;;;;;;;;;;8617:18:1;;;;18381:58:0;;;;;;;;-1:-1:-1;;;;;18381:58:0;-1:-1:-1;;;18381:58:0;;;18354:86;;18374:5;;18354:19;:86::i;48986:98::-;49044:7;49071:5;49075:1;49071;:5;:::i;49385:98::-;49443:7;49470:5;49474:1;49470;:5;:::i;63364:309::-;63475:21;63509:25;63527:6;63509:17;:25::i;:::-;63545:18;63566:47;63567:21;63594:18;63566:27;:47::i;:::-;63624:41;;63545:68;;-1:-1:-1;;;;;;63624:29:0;;;:41;;;;;63545:68;;63624:41;;;;63545:68;63624:29;:41;;;;;;;;;;;;;;;;;;;;;63364:309;;;;:::o;48629:98::-;48687:7;48714:5;48718:1;48714;:5;:::i;38235:733::-;-1:-1:-1;;;;;38375:20:0;;38367:70;;;;-1:-1:-1;;;38367:70:0;;22631:2:1;38367:70:0;;;22613:21:1;22670:2;22650:18;;;22643:30;22709:34;22689:18;;;22682:62;-1:-1:-1;;;22760:18:1;;;22753:35;22805:19;;38367:70:0;22603:227:1;38367:70:0;-1:-1:-1;;;;;38456:23:0;;38448:71;;;;-1:-1:-1;;;38448:71:0;;12065:2:1;38448:71:0;;;12047:21:1;12104:2;12084:18;;;12077:30;12143:34;12123:18;;;12116:62;-1:-1:-1;;;12194:18:1;;;12187:33;12237:19;;38448:71:0;12037:225:1;38448:71:0;-1:-1:-1;;;;;38616:17:0;;38592:21;38616:17;;;;;;;;;;;38652:23;;;;38644:74;;;;-1:-1:-1;;;38644:74:0;;15356:2:1;38644:74:0;;;15338:21:1;15395:2;15375:18;;;15368:30;15434:34;15414:18;;;15407:62;-1:-1:-1;;;15485:18:1;;;15478:36;15531:19;;38644:74:0;15328:228:1;38644:74:0;-1:-1:-1;;;;;38754:17:0;;;:9;:17;;;;;;;;;;;38774:22;;;38754:42;;38818:20;;;;;;;;:30;;38790:6;;38754:9;38818:30;;38790:6;;38818:30;:::i;:::-;;;;;;;;38883:9;-1:-1:-1;;;;;38866:35:0;38875:6;-1:-1:-1;;;;;38866:35:0;;38894:6;38866:35;;;;27159:25:1;;27147:2;27132:18;;27114:76;38866:35:0;;;;;;;;38914:46;57299:554;63681:413;63740:12;63755:13;:6;63766:1;63755:10;:13::i;:::-;63740:28;-1:-1:-1;63779:17:0;63799:16;:6;63740:28;63799:10;:16::i;:::-;63779:36;-1:-1:-1;63851:21:0;63883:23;63901:4;63883:17;:23::i;:::-;63919:18;63940:41;:21;63966:14;63940:25;:41::i;:::-;63919:62;;63992:35;64005:9;64016:10;63992:12;:35::i;:::-;64043:43;;;28385:25:1;;;28441:2;28426:18;;28419:34;;;28469:18;;;28462:34;;;64043:43:0;;28373:2:1;28358:18;64043:43:0;;;;;;;63681:413;;;;;:::o;64102:489::-;64193:16;;;64207:1;64193:16;;;;;;;;64169:21;;64193:16;;;;;;;;;;-1:-1:-1;64193:16:0;64169:40;;64238:4;64220;64225:1;64220:7;;;;;;-1:-1:-1;;;64220:7:0;;;;;;;;;-1:-1:-1;;;;;64220:23:0;;;:7;;;;;;;;;;:23;;;;64264:9;;:17;;;-1:-1:-1;;;64264:17:0;;;;:9;;;;;:15;;:17;;;;;64220:7;;64264:17;;;;;:9;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64254:4;64259:1;64254:7;;;;;;-1:-1:-1;;;64254:7:0;;;;;;;;;-1:-1:-1;;;;;64254:27:0;;;:7;;;;;;;;;:27;64326:9;;64294:56;;64311:4;;64326:9;64338:11;64294:8;:56::i;:::-;64363:9;;:220;;-1:-1:-1;;;64363:220:0;;-1:-1:-1;;;;;64363:9:0;;;;:61;;:220;;64439:11;;64363:9;;64510:4;;64537;;64557:15;;64363:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64102:489;;:::o;45188:191::-;45281:6;;;-1:-1:-1;;;;;45298:17:0;;;-1:-1:-1;;;;;;45298:17:0;;;;;;;45331:40;;45281:6;;;45298:17;45281:6;;45331:40;;45262:16;;45331:40;45188:191;;:::o;61164:294::-;-1:-1:-1;;;;;61269:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;61247:95;;;;-1:-1:-1;;;61247:95:0;;21226:2:1;61247:95:0;;;21208:21:1;21265:1;21245:18;;;21238:29;-1:-1:-1;;;21283:18:1;;;21276:35;21328:18;;61247:95:0;21198:154:1;61247:95:0;-1:-1:-1;;;;;61353:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;61353:39:0;;;;;;;;;;61410:40;;61353:39;;:31;61410:40;;;61164:294;;:::o;39987:591::-;-1:-1:-1;;;;;40071:21:0;;40063:67;;;;-1:-1:-1;;;40063:67:0;;22229:2:1;40063:67:0;;;22211:21:1;22268:2;22248:18;;;22241:30;22307:34;22287:18;;;22280:62;-1:-1:-1;;;22358:18:1;;;22351:31;22399:19;;40063:67:0;22201:223:1;40063:67:0;-1:-1:-1;;;;;40230:18:0;;40205:22;40230:18;;;;;;;;;;;40267:24;;;;40259:71;;;;-1:-1:-1;;;40259:71:0;;12801:2:1;40259:71:0;;;12783:21:1;12840:2;12820:18;;;12813:30;12879:34;12859:18;;;12852:62;-1:-1:-1;;;12930:18:1;;;12923:32;12972:19;;40259:71:0;12773:224:1;40259:71:0;-1:-1:-1;;;;;40366:18:0;;:9;:18;;;;;;;;;;40387:23;;;40366:44;;40432:12;:22;;40404:6;;40366:9;40432:22;;40404:6;;40432:22;:::i;:::-;;;;-1:-1:-1;;40472:37:0;;27159:25:1;;;40498:1:0;;-1:-1:-1;;;;;40472:37:0;;;;;27147:2:1;27132:18;40472:37:0;;;;;;;57299:554;;;:::o;39255:399::-;-1:-1:-1;;;;;39339:21:0;;39331:65;;;;-1:-1:-1;;;39331:65:0;;25984:2:1;39331:65:0;;;25966:21:1;26023:2;26003:18;;;25996:30;26062:33;26042:18;;;26035:61;26113:18;;39331:65:0;25956:181:1;39331:65:0;39487:6;39471:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;39504:18:0;;:9;:18;;;;;;;;;;:28;;39526:6;;39504:9;:28;;39526:6;;39504:28;:::i;:::-;;;;-1:-1:-1;;39548:37:0;;27159:25:1;;;-1:-1:-1;;;;;39548:37:0;;;39565:1;;39548:37;;27147:2:1;27132:18;39548:37:0;;;;;;;60071:248;;:::o;20810:716::-;21234:23;21260:69;21288:4;21260:69;;;;;;;;;;;;;;;;;21268:5;-1:-1:-1;;;;;21260:27:0;;;:69;;;;;:::i;:::-;21344:17;;21234:95;;-1:-1:-1;21344:21:0;21340:179;;21441:10;21430:30;;;;;;;;;;;;:::i;:::-;21422:85;;;;-1:-1:-1;;;21422:85:0;;24827:2:1;21422:85:0;;;24809:21:1;24866:2;24846:18;;;24839:30;24905:34;24885:18;;;24878:62;-1:-1:-1;;;24956:18:1;;;24949:40;25006:19;;21422:85:0;24799:232:1;64599:505:0;64779:9;;64747:56;;64764:4;;-1:-1:-1;;;;;64779:9:0;64791:11;64747:8;:56::i;:::-;64846:9;;:250;;-1:-1:-1;;;64846:250:0;;64913:4;64846:250;;;10603:34:1;10653:18;;;10646:34;;;64846:9:0;10696:18:1;;;10689:34;;;10739:18;;;10732:34;;;10782:19;;;10775:44;65070:15:0;10835:19:1;;;10828:35;-1:-1:-1;;;;;64846:9:0;;;;:26;;64880:9;;10537:19:1;;64846:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10119:229::-;10256:12;10288:52;10310:6;10318:4;10324:1;10327:12;10256;7636:20;;11526:60;;;;-1:-1:-1;;;11526:60:0;;23774:2:1;11526:60:0;;;23756:21:1;23813:2;23793:18;;;23786:30;23852:31;23832:18;;;23825:59;23901:18;;11526:60:0;23746:179:1;11526:60:0;11600:12;11614:23;11641:6;-1:-1:-1;;;;;11641:11:0;11660:5;11667:4;11641:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11599:73;;;;11690:51;11707:7;11716:10;11728:12;11690:16;:51::i;:::-;11683:58;11239:510;-1:-1:-1;;;;;;;11239:510:0:o;13925:712::-;14075:12;14104:7;14100:530;;;-1:-1:-1;14135:10:0;14128:17;;14100:530;14249:17;;:21;14245:374;;14447:10;14441:17;14508:15;14495:10;14491:2;14487:19;14480:44;14395:148;14590:12;14583:20;;-1:-1:-1;;;14583:20:0;;;;;;;;:::i;14:693:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:163;529:2;526:1;523:9;515:163;;;586:17;;574:30;;624:12;;;;656;;;;547:1;540:9;515:163;;;-1:-1:-1;696:5:1;;78:629;-1:-1:-1;;;;;;;78:629:1:o;712:257::-;771:6;824:2;812:9;803:7;799:23;795:32;792:2;;;845:6;837;830:22;792:2;889:9;876:23;908:31;933:5;908:31;:::i;974:261::-;1044:6;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1155:9;1149:16;1174:31;1199:5;1174:31;:::i;1510:398::-;1578:6;1586;1639:2;1627:9;1618:7;1614:23;1610:32;1607:2;;;1660:6;1652;1645:22;1607:2;1704:9;1691:23;1723:31;1748:5;1723:31;:::i;:::-;1773:5;-1:-1:-1;1830:2:1;1815:18;;1802:32;1843:33;1802:32;1843:33;:::i;:::-;1895:7;1885:17;;;1597:311;;;;;:::o;1913:466::-;1990:6;1998;2006;2059:2;2047:9;2038:7;2034:23;2030:32;2027:2;;;2080:6;2072;2065:22;2027:2;2124:9;2111:23;2143:31;2168:5;2143:31;:::i;:::-;2193:5;-1:-1:-1;2250:2:1;2235:18;;2222:32;2263:33;2222:32;2263:33;:::i;:::-;2017:362;;2315:7;;-1:-1:-1;;;2369:2:1;2354:18;;;;2341:32;;2017:362::o;2384:392::-;2449:6;2457;2510:2;2498:9;2489:7;2485:23;2481:32;2478:2;;;2531:6;2523;2516:22;2478:2;2575:9;2562:23;2594:31;2619:5;2594:31;:::i;:::-;2644:5;-1:-1:-1;2701:2:1;2686:18;;2673:32;2714:30;2673:32;2714:30;:::i;2781:325::-;2849:6;2857;2910:2;2898:9;2889:7;2885:23;2881:32;2878:2;;;2931:6;2923;2916:22;2878:2;2975:9;2962:23;2994:31;3019:5;2994:31;:::i;:::-;3044:5;3096:2;3081:18;;;;3068:32;;-1:-1:-1;;;2868:238:1:o;3111:1281::-;3229:6;3237;3290:2;3278:9;3269:7;3265:23;3261:32;3258:2;;;3311:6;3303;3296:22;3258:2;3356:9;3343:23;3385:18;3426:2;3418:6;3415:14;3412:2;;;3447:6;3439;3432:22;3412:2;3490:6;3479:9;3475:22;3465:32;;3535:7;3528:4;3524:2;3520:13;3516:27;3506:2;;3562:6;3554;3547:22;3506:2;3603;3590:16;3625:4;3649:60;3665:43;3705:2;3665:43;:::i;3649:60::-;3731:3;3755:2;3750:3;3743:15;3783:2;3778:3;3774:12;3767:19;;3814:2;3810;3806:11;3862:7;3857:2;3851;3848:1;3844:10;3840:2;3836:19;3832:28;3829:41;3826:2;;;3888:6;3880;3873:22;3826:2;3915:6;3906:15;;3930:238;3944:2;3941:1;3938:9;3930:238;;;4015:3;4002:17;4032:31;4057:5;4032:31;:::i;:::-;4076:18;;3962:1;3955:9;;;;;4114:12;;;;4146;;3930:238;;;-1:-1:-1;4187:5:1;-1:-1:-1;;4230:18:1;;4217:32;;-1:-1:-1;;4261:16:1;;;4258:2;;;4295:6;4287;4280:22;4258:2;;4323:63;4378:7;4367:8;4356:9;4352:24;4323:63;:::i;:::-;4313:73;;;3248:1144;;;;;:::o;4397:251::-;4453:6;4506:2;4494:9;4485:7;4481:23;4477:32;4474:2;;;4527:6;4519;4512:22;4474:2;4571:9;4558:23;4590:28;4612:5;4590:28;:::i;4653:255::-;4720:6;4773:2;4761:9;4752:7;4748:23;4744:32;4741:2;;;4794:6;4786;4779:22;4741:2;4831:9;4825:16;4850:28;4872:5;4850:28;:::i;5189:412::-;5271:6;5279;5332:2;5320:9;5311:7;5307:23;5303:32;5300:2;;;5353:6;5345;5338:22;5606:879;5684:6;5692;5745:2;5733:9;5724:7;5720:23;5716:32;5713:2;;;5766:6;5758;5751:22;5713:2;5811:9;5798:23;5840:18;5881:2;5873:6;5870:14;5867:2;;;5902:6;5894;5887:22;5867:2;5945:6;5934:9;5930:22;5920:32;;5990:7;5983:4;5979:2;5975:13;5971:27;5961:2;;6017:6;6009;6002:22;5961:2;6058;6045:16;6080:4;6103:2;6099;6096:10;6093:2;;;6109:18;;:::i;:::-;6151:53;6194:2;6175:13;;-1:-1:-1;;6171:27:1;6167:36;;6151:53;:::i;:::-;6138:66;;6227:2;6220:5;6213:17;6267:7;6262:2;6257;6253;6249:11;6245:20;6242:33;6239:2;;;6293:6;6285;6278:22;6239:2;6353;6348;6344;6340:11;6335:2;6328:5;6324:14;6311:45;6376:14;;;6372:23;;6365:39;;;;6380:5;6460:18;;;;6447:32;;-1:-1:-1;;;5703:782:1:o;6490:292::-;6548:6;6601:2;6589:9;6580:7;6576:23;6572:32;6569:2;;;6622:6;6614;6607:22;6569:2;6666:9;6653:23;6716:6;6709:5;6705:18;6698:5;6695:29;6685:2;;6743:6;6735;6728:22;6787:190;6846:6;6899:2;6887:9;6878:7;6874:23;6870:32;6867:2;;;6920:6;6912;6905:22;6867:2;-1:-1:-1;6948:23:1;;6857:120;-1:-1:-1;6857:120:1:o;6982:194::-;7052:6;7105:2;7093:9;7084:7;7080:23;7076:32;7073:2;;;7126:6;7118;7111:22;7073:2;-1:-1:-1;7154:16:1;;7063:113;-1:-1:-1;7063:113:1:o;7181:316::-;7269:6;7277;7285;7338:2;7326:9;7317:7;7313:23;7309:32;7306:2;;;7359:6;7351;7344:22;7306:2;7393:9;7387:16;7377:26;;7443:2;7432:9;7428:18;7422:25;7412:35;;7487:2;7476:9;7472:18;7466:25;7456:35;;7296:201;;;;;:::o;7502:258::-;7544:3;7582:5;7576:12;7609:6;7604:3;7597:19;7625:63;7681:6;7674:4;7669:3;7665:14;7658:4;7651:5;7647:16;7625:63;:::i;:::-;7742:2;7721:15;-1:-1:-1;;7717:29:1;7708:39;;;;7749:4;7704:50;;7552:208;-1:-1:-1;;7552:208:1:o;7765:274::-;7894:3;7932:6;7926:13;7948:53;7994:6;7989:3;7982:4;7974:6;7970:17;7948:53;:::i;:::-;8017:16;;;;;7902:137;-1:-1:-1;;7902:137:1:o;9058:388::-;-1:-1:-1;;;;;9263:32:1;;9245:51;;9332:2;9327;9312:18;;9305:30;;;-1:-1:-1;;9352:45:1;;9378:18;;9370:6;9352:45;:::i;:::-;9344:53;;9433:6;9428:2;9417:9;9413:18;9406:34;9235:211;;;;;;:::o;11638:220::-;11787:2;11776:9;11769:21;11750:4;11807:45;11848:2;11837:9;11833:18;11825:6;11807:45;:::i;15561:402::-;15763:2;15745:21;;;15802:2;15782:18;;;15775:30;15841:34;15836:2;15821:18;;15814:62;-1:-1:-1;;;15907:2:1;15892:18;;15885:36;15953:3;15938:19;;15735:228::o;17492:407::-;17694:2;17676:21;;;17733:2;17713:18;;;17706:30;17772:34;17767:2;17752:18;;17745:62;-1:-1:-1;;;17838:2:1;17823:18;;17816:41;17889:3;17874:19;;17666:233::o;20331:356::-;20533:2;20515:21;;;20552:18;;;20545:30;20611:34;20606:2;20591:18;;20584:62;20678:2;20663:18;;20505:182::o;25036:335::-;25238:2;25220:21;;;25277:2;25257:18;;;25250:30;-1:-1:-1;;;25311:2:1;25296:18;;25289:41;25362:2;25347:18;;25210:161::o;27195:983::-;27457:4;27505:3;27494:9;27490:19;27536:6;27525:9;27518:25;27562:2;27600:6;27595:2;27584:9;27580:18;27573:34;27643:3;27638:2;27627:9;27623:18;27616:31;27667:6;27702;27696:13;27733:6;27725;27718:22;27771:3;27760:9;27756:19;27749:26;;27810:2;27802:6;27798:15;27784:29;;27831:4;27844:195;27858:6;27855:1;27852:13;27844:195;;;27923:13;;-1:-1:-1;;;;;27919:39:1;27907:52;;28014:15;;;;27979:12;;;;27955:1;27873:9;27844:195;;;-1:-1:-1;;;;;;;28095:32:1;;;;28090:2;28075:18;;28068:60;-1:-1:-1;;;28159:3:1;28144:19;28137:35;28056:3;27466:712;-1:-1:-1;;;27466:712:1:o;28696:275::-;28767:2;28761:9;28832:2;28813:13;;-1:-1:-1;;28809:27:1;28797:40;;28867:18;28852:34;;28888:22;;;28849:62;28846:2;;;28914:18;;:::i;:::-;28950:2;28943:22;28741:230;;-1:-1:-1;28741:230:1:o;28976:183::-;29036:4;29069:18;29061:6;29058:30;29055:2;;;29091:18;;:::i;:::-;-1:-1:-1;29136:1:1;29132:14;29148:4;29128:25;;29045:114::o;29164:128::-;29204:3;29235:1;29231:6;29228:1;29225:13;29222:2;;;29241:18;;:::i;:::-;-1:-1:-1;29277:9:1;;29212:80::o;29297:217::-;29337:1;29363;29353:2;;-1:-1:-1;;;29388:31:1;;29442:4;29439:1;29432:15;29470:4;29395:1;29460:15;29353:2;-1:-1:-1;29499:9:1;;29343:171::o;29519:168::-;29559:7;29625:1;29621;29617:6;29613:14;29610:1;29607:21;29602:1;29595:9;29588:17;29584:45;29581:2;;;29632:18;;:::i;:::-;-1:-1:-1;29672:9:1;;29571:116::o;29692:125::-;29732:4;29760:1;29757;29754:8;29751:2;;;29765:18;;:::i;:::-;-1:-1:-1;29802:9:1;;29741:76::o;29822:258::-;29894:1;29904:113;29918:6;29915:1;29912:13;29904:113;;;29994:11;;;29988:18;29975:11;;;29968:39;29940:2;29933:10;29904:113;;;30035:6;30032:1;30029:13;30026:2;;;-1:-1:-1;;30070:1:1;30052:16;;30045:27;29875:205::o;30085:380::-;30164:1;30160:12;;;;30207;;;30228:2;;30282:4;30274:6;30270:17;30260:27;;30228:2;30335;30327:6;30324:14;30304:18;30301:38;30298:2;;;30381:10;30376:3;30372:20;30369:1;30362:31;30416:4;30413:1;30406:15;30444:4;30441:1;30434:15;30298:2;;30140:325;;;:::o;30470:135::-;30509:3;-1:-1:-1;;30530:17:1;;30527:2;;;30550:18;;:::i;:::-;-1:-1:-1;30597:1:1;30586:13;;30517:88::o;30610:127::-;30671:10;30666:3;30662:20;30659:1;30652:31;30702:4;30699:1;30692:15;30726:4;30723:1;30716:15;30742:127;30803:10;30798:3;30794:20;30791:1;30784:31;30834:4;30831:1;30824:15;30858:4;30855:1;30848:15;30874:131;-1:-1:-1;;;;;30949:31:1;;30939:42;;30929:2;;30995:1;30992;30985:12;31010:118;31096:5;31089:13;31082:21;31075:5;31072:32;31062:2;;31118:1;31115;31108:12
Swarm Source
ipfs://0b6bd5aabd6b9e818702b2c3eb66298354c36e1b3e7a479c16b0e629cba9093f
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.