Contract
0x0be0d3d0c3a122b7f57b6119766880a83f95ae9f
3
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
MasterChef
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2021-11-05 */ // File: contracts/interfaces/IDCAU.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IDCAU { function mint(address _to, uint256 _amount) external; } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/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/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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/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/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/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 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: contracts/DCAU.sol pragma solidity ^0.8.0; // MasterChef is the master of DCAU(Dragon Crypto Aurum). He can make DCAU and he is a fair guy. // // Note that it's ownable and the owner wields tremendous power. The ownership // will be transferred to a governance smart contract once DCAU is sufficiently // distributed and the community can show to govern itself. // // Have fun reading it. Hopefully it's bug-free. God bless. contract MasterChef is ERC721Holder, Ownable, ReentrancyGuard { event AddPool(uint256 indexed pid, address lpToken, uint256 allocPoint, uint256 depositFeeBP); event SetPool(uint256 indexed pid, address lpToken, uint256 allocPoint, uint256 depositFeeBP); event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); event SetFeeAddress(address indexed user, address indexed newAddress); event UpdateStartBlock(uint256 newStartBlock); event SetDCAUPerSecond(uint256 amount); event SetEmissionEndTime(uint256 emissionEndTime); event DragonNestStaked(address indexed user, uint256 indexed tokenId); event DragonNestWithdrawn(address indexed user, uint256 indexed tokenId); event MarketDCAUDeposited(address indexed user, uint256 indexed pid, uint256 amount); using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. // // We do some fancy math here. Basically, any point in time, the amount of DCAUs // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accDCAUPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accDCAUPerShare` (and `lastRewardTime`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. } // Info of each pool. struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. DCAUs to distribute per block. 100 - 1point uint256 lastRewardTime; // Last block timestamp that DCAUs distribution occurs. uint256 accDCAUPerShare; // Accumulated DCAUs per share, times 1e12. See below. uint16 depositFeeBP; // Deposit fee in basis points 10000 - 100% uint256 lpSupply; } struct PoolDragonNestInfo { uint256 accDepFeePerShare; // Accumulated LP token(from deposit fee) per share, times 1e12. See below. uint256 pendingDepFee; // pending deposit fee for the reward for the Dragon Nest Supporters } mapping(uint256 => PoolDragonNestInfo) public poolDragonNestInfo; // poolId => poolDragonNestInfo mapping(uint256 => mapping(uint256 => uint256)) public dragonNestInfo; // poolId => (nestId => rewardDebt), nestId: NFT tokenId mapping(uint256 => address) nestSupporters; // tokenId => nest supporter; uint256 public nestSupportersLength; uint256 public constant DCAU_MAX_SUPPLY = 155000 * (10**18); uint256 public constant MAX_EMISSION_RATE = 1 * (10**18); // The Dragon Cyrpto AU TOKEN! address public immutable DCAU; uint256 public dcauPerSecond; address public immutable DRAGON_NEST_SUPPORTER; // Deposit Fee address address public immutable FEEADDRESS; address public immutable GAMEADDRESS; address public immutable NFT_MARKET; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The time when Dragon mining starts. uint256 public startTime; // The time when Dragon mining ends. uint256 public emissionEndTime = type(uint256).max; address public immutable DEVADDRESS; constructor( address _DCAU, address _DRAGON_NEST_SUPPORTER, address _gameAddress, address _feeAddress, uint256 _startTime, uint256 _dcauPerSecond, address _devAddress, address _NFT_MARKET ) { require(_DCAU != address(0), "must be valid address"); require(_DRAGON_NEST_SUPPORTER != address(0), "must be valid address"); require(_gameAddress != address(0), "must be valid address"); require(_feeAddress != address(0), "must be valid address"); require(_startTime > block.timestamp, "must start in the future"); require(_dcauPerSecond <= MAX_EMISSION_RATE, "emission rate too high"); require(_devAddress != address(0), "must be valid address"); require(_NFT_MARKET != address(0), "must be valid address"); DCAU = _DCAU; DRAGON_NEST_SUPPORTER = _DRAGON_NEST_SUPPORTER; FEEADDRESS = _feeAddress; startTime = _startTime; dcauPerSecond = _dcauPerSecond; DEVADDRESS = _devAddress; GAMEADDRESS = _gameAddress; NFT_MARKET = _NFT_MARKET; } function poolLength() external view returns (uint256) { return poolInfo.length; } mapping(IERC20 => bool) public poolExistence; modifier nonDuplicated(IERC20 _lpToken) { require(poolExistence[_lpToken] == false, "nonDuplicated: duplicated"); _; } // Add a new lp to the pool. Can only be called by the owner. function add( uint256 _allocPoint, IERC20 _lpToken, uint16 _depositFeeBP, bool _withUpdate ) external onlyOwner nonDuplicated(_lpToken) { require(poolInfo.length < 20, "too many pools"); // Make sure the provided token is ERC20 _lpToken.balanceOf(address(this)); require(_depositFeeBP <= 401, "add: invalid deposit fee basis points"); if (_withUpdate) { massUpdatePools(); } uint256 lastRewardTime = block.timestamp > startTime ? block.timestamp : startTime; totalAllocPoint = totalAllocPoint + _allocPoint; poolExistence[_lpToken] = true; poolInfo.push( PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardTime: lastRewardTime, accDCAUPerShare: 0, depositFeeBP: _depositFeeBP, lpSupply: 0 }) ); emit AddPool(poolInfo.length - 1, address(_lpToken), _allocPoint, _depositFeeBP); } // Update the given pool's DCAU allocation point and deposit fee. Can only be called by the owner. function set( uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate ) external onlyOwner { require(_depositFeeBP <= 401, "set: invalid deposit fee basis points"); require(_pid < poolInfo.length, "Dragon: Non-existent pool"); if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint; poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].depositFeeBP = _depositFeeBP; emit SetPool(_pid, address(poolInfo[_pid].lpToken), _allocPoint, _depositFeeBP); } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { // As we set the multiplier to 0 here after emissionEndTime // deposits aren't blocked after farming ends. // reward every 1 seconds if (_from > emissionEndTime) return 0; if (_to > emissionEndTime) return (emissionEndTime - _from); else return (_to - _from); } // View function to see pending DCAUs on frontend. function pendingDcau(uint256 _pid, address _user) external view returns (uint256) { require(_pid < poolInfo.length, "Dragon: Non-existent pool"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accDcauPerShare = pool.accDCAUPerShare; if (block.timestamp > pool.lastRewardTime && pool.lpSupply != 0 && totalAllocPoint > 0) { uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 dcauReward = (multiplier * dcauPerSecond * pool.allocPoint) / totalAllocPoint; uint256 dcauTotalSupply = IERC20(DCAU).totalSupply(); uint256 gameDevDcauReward = dcauReward / 15; // This shouldn't happen, but just in case we stop rewards. if (dcauTotalSupply >= DCAU_MAX_SUPPLY) { dcauReward = 0; } else if ((dcauTotalSupply + dcauReward + gameDevDcauReward) > DCAU_MAX_SUPPLY) { uint256 dcauSupplyRemaining = DCAU_MAX_SUPPLY - dcauTotalSupply; dcauReward = (dcauSupplyRemaining * 15) / 16; } accDcauPerShare = accDcauPerShare + ((dcauReward * 1e12) / pool.lpSupply); } return ((user.amount * accDcauPerShare) / 1e12) - user.rewardDebt; } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { require(_pid < poolInfo.length, "Dragon: Non-existent pool"); PoolInfo storage pool = poolInfo[_pid]; if (block.timestamp <= pool.lastRewardTime) { return; } if (pool.lpSupply == 0 || pool.allocPoint == 0) { pool.lastRewardTime = block.timestamp; return; } uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 dcauReward = (multiplier * dcauPerSecond * pool.allocPoint) / totalAllocPoint; uint256 dcauTotalSupply = IERC20(DCAU).totalSupply(); uint256 gameDevDcauReward = dcauReward / 15; // This shouldn't happen, but just in case we stop rewards. if (dcauTotalSupply >= DCAU_MAX_SUPPLY) { dcauReward = 0; gameDevDcauReward = 0; } else if ((dcauTotalSupply + dcauReward + gameDevDcauReward) > DCAU_MAX_SUPPLY) { uint256 dcauSupplyRemaining = DCAU_MAX_SUPPLY - dcauTotalSupply; dcauReward = (dcauSupplyRemaining * 15) / 16; gameDevDcauReward = dcauSupplyRemaining - dcauReward; } if (dcauReward > 0) { IDCAU(DCAU).mint(address(this), dcauReward); } if (gameDevDcauReward > 0) { uint256 devReward = (gameDevDcauReward * 1) / 3; uint256 gameReward = gameDevDcauReward - devReward; IDCAU(DCAU).mint(DEVADDRESS, devReward); IDCAU(DCAU).mint(GAMEADDRESS, gameReward); } dcauTotalSupply = IERC20(DCAU).totalSupply(); // The first time we reach DCAU's max supply we solidify the end of farming. if (dcauTotalSupply >= DCAU_MAX_SUPPLY && emissionEndTime == type(uint256).max) emissionEndTime = block.timestamp; pool.accDCAUPerShare = pool.accDCAUPerShare + ((dcauReward * 1e12) / pool.lpSupply); pool.lastRewardTime = block.timestamp; } // Deposit LP tokens to MasterChef for DCAU allocation. function deposit(uint256 _pid, uint256 _amount) external nonReentrant { require(_pid < poolInfo.length, "Dragon: Non-existent pool"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 pending = ((user.amount * pool.accDCAUPerShare) / 1e12) - user.rewardDebt; if (pending > 0) { safeDcauTransfer(msg.sender, pending); } } if (_amount > 0) { // We are considering tokens which takes accounts fees when trasnsferring such like reflect finance IERC20 _lpToken = pool.lpToken; { uint256 balanceBefore = _lpToken.balanceOf(address(this)); _lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); _amount = _lpToken.balanceOf(address(this)) - balanceBefore; require(_amount > 0, "We only accept amount > 0"); } if (pool.depositFeeBP > 0) { uint256 depositFee = (_amount * pool.depositFeeBP) / 10000; // We split this fee to feeAddress and Dragon Nest supporters - 90% 10% _lpToken.safeTransfer(FEEADDRESS, (depositFee * 9000) / 10000); poolDragonNestInfo[_pid].pendingDepFee += (depositFee * 1000) / 10000; user.amount = user.amount + _amount - depositFee; pool.lpSupply = pool.lpSupply + _amount - depositFee; } else { user.amount = user.amount + _amount; pool.lpSupply = pool.lpSupply + _amount; } } user.rewardDebt = (user.amount * pool.accDCAUPerShare) / 1e12; emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) external nonReentrant { require(_pid < poolInfo.length, "Dragon: Non-existent pool"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "Withdraw: not good"); updatePool(_pid); uint256 pending = ((user.amount * pool.accDCAUPerShare) / 1e12) - user.rewardDebt; if (pending > 0) { safeDcauTransfer(msg.sender, pending); } if (_amount > 0) { user.amount = user.amount - _amount; pool.lpToken.safeTransfer(address(msg.sender), _amount); pool.lpSupply = pool.lpSupply - _amount; } user.rewardDebt = (user.amount * pool.accDCAUPerShare) / 1e12; emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) external nonReentrant { require(_pid < poolInfo.length, "Dragon: Non-existent pool"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; pool.lpToken.safeTransfer(address(msg.sender), amount); // In the case of an accounting error, we choose to let the user emergency withdraw anyway if (pool.lpSupply >= amount) pool.lpSupply = pool.lpSupply - amount; else pool.lpSupply = 0; emit EmergencyWithdraw(msg.sender, _pid, amount); } // Safe DCAU transfer function, just in case if rounding error causes pool to not have enough DCAUs. function safeDcauTransfer(address _to, uint256 _amount) internal { uint256 dcauBal = IERC20(DCAU).balanceOf(address(this)); bool transferSuccess = false; if (_amount > dcauBal) { transferSuccess = IERC20(DCAU).transfer(_to, dcauBal); } else { transferSuccess = IERC20(DCAU).transfer(_to, _amount); } require(transferSuccess, "safeDcauTransfer: transfer failed"); } function setStartTime(uint256 _newStartTime) external onlyOwner { require(poolInfo.length == 0, "no changing startTime after pools have been added"); require(block.timestamp < startTime, "cannot change start time if sale has already commenced"); require(block.timestamp < _newStartTime, "cannot set start time in the past"); startTime = _newStartTime; emit UpdateStartBlock(startTime); } function setDcauPerSecond(uint256 _dcauPerSecond) external onlyOwner { require(_dcauPerSecond <= MAX_EMISSION_RATE, "emissions too high limited to 1 per second"); massUpdatePools(); dcauPerSecond = _dcauPerSecond; emit SetDCAUPerSecond(_dcauPerSecond); } function setEmissionEndTime(uint256 _emissionEndTime) external onlyOwner { require(_emissionEndTime > block.timestamp, "Emission can not be end in the past"); emissionEndTime = _emissionEndTime; emit SetEmissionEndTime(_emissionEndTime); } function massUpdatePoolDragonNests() external nonReentrant { _massUpdatePoolDragonNests(); } function _massUpdatePoolDragonNests() private { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { _updatePoolDragonNest(pid); } } // Update dragon nest. function updatePoolDragonNest(uint256 _pid) external nonReentrant { _updatePoolDragonNest(_pid); } function _updatePoolDragonNest(uint256 _pid) private { require(nestSupportersLength > 0, "Must have supporters"); PoolDragonNestInfo storage poolDragonNest = poolDragonNestInfo[_pid]; uint256 _pendingDepFee = poolDragonNest.pendingDepFee; if (_pendingDepFee > 0) { poolDragonNest.accDepFeePerShare += _pendingDepFee / nestSupportersLength; poolDragonNest.pendingDepFee = 0; } } /** * These functions are private function for using contract internal. * These functions will be used when user stakes new DragonNestSupporter */ function massUpdatePoolDragonNestsWithNewToken(uint256 _tokenId) private { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePoolDragonNestWithNewToken(pid, _tokenId); } } function updatePoolDragonNestWithNewToken(uint256 _pid, uint256 _tokenId) private { PoolDragonNestInfo storage _poolDragonNestInfo = poolDragonNestInfo[_pid]; uint256 _pendingDepFee = _poolDragonNestInfo.pendingDepFee; uint256 accDepFeePerShare = _poolDragonNestInfo.accDepFeePerShare; if (_pendingDepFee > 0 && nestSupportersLength > 0) { _poolDragonNestInfo.accDepFeePerShare = accDepFeePerShare + _pendingDepFee / nestSupportersLength; _poolDragonNestInfo.pendingDepFee = 0; } dragonNestInfo[_pid][_tokenId] = accDepFeePerShare; } function stakeDragonNest(uint256 tokenId) external nonReentrant { massUpdatePoolDragonNestsWithNewToken(tokenId); IERC721 _dragonNest = IERC721(DRAGON_NEST_SUPPORTER); _dragonNest.safeTransferFrom(msg.sender, address(this), tokenId); nestSupporters[tokenId] = msg.sender; nestSupportersLength++; emit DragonNestStaked(msg.sender, tokenId); } function withdrawDragonNest(uint256 tokenId) external nonReentrant { require(nestSupporters[tokenId] == msg.sender, "Dragon: Forbidden"); nestSupporters[tokenId] = address(0); _massUpdatePoolDragonNests(); // transfer in for loop? It's Okay. We should do with a few number of pools uint256 len = poolInfo.length; for (uint256 pid = 0; pid < len; pid++) { PoolInfo storage pool = poolInfo[pid]; pool.lpToken.safeTransfer( address(msg.sender), poolDragonNestInfo[pid].accDepFeePerShare - dragonNestInfo[pid][tokenId] ); dragonNestInfo[pid][tokenId] = 0; } IERC721 _dragonNest = IERC721(DRAGON_NEST_SUPPORTER); _dragonNest.safeTransferFrom(address(this), msg.sender, tokenId); nestSupportersLength--; emit DragonNestWithdrawn(msg.sender, tokenId); } // View function to see pending DCAUs on frontend. function pendingDcauOfDragonNest(uint256 _pid, uint256 _tokenId) external view returns (uint256) { PoolDragonNestInfo storage poolDragonNest = poolDragonNestInfo[_pid]; uint256 _pendingDepFee = poolDragonNest.pendingDepFee; uint256 accDepFeePerShare = 0; if (nestSupportersLength > 0) { accDepFeePerShare = poolDragonNest.accDepFeePerShare + _pendingDepFee / nestSupportersLength; } else { accDepFeePerShare = poolDragonNest.accDepFeePerShare + _pendingDepFee; } return accDepFeePerShare - dragonNestInfo[_pid][_tokenId]; } function stakedAddressForDragonNest(uint256 _tokenId) external view returns (address) { require(_tokenId <= 25, "token does not exist"); return nestSupporters[_tokenId]; } /** * @dev This function is used for depositing DCAU from market */ function depositMarketFee(uint256 _pid, uint256 _amount) external nonReentrant { require(_pid < poolInfo.length, "pool does not exist"); require(address(poolInfo[_pid].lpToken) == DCAU, "Should be DCAU pool"); require(msg.sender == NFT_MARKET, "Available from only market"); IERC20(DCAU).safeTransferFrom(address(msg.sender), address(this), _amount); poolDragonNestInfo[_pid].pendingDepFee += _amount; emit MarketDCAUDeposited(msg.sender, _pid, _amount); } }
[{"inputs":[{"internalType":"address","name":"_DCAU","type":"address"},{"internalType":"address","name":"_DRAGON_NEST_SUPPORTER","type":"address"},{"internalType":"address","name":"_gameAddress","type":"address"},{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_dcauPerSecond","type":"uint256"},{"internalType":"address","name":"_devAddress","type":"address"},{"internalType":"address","name":"_NFT_MARKET","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"address","name":"lpToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositFeeBP","type":"uint256"}],"name":"AddPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"DragonNestStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"DragonNestWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MarketDCAUDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetDCAUPerSecond","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"emissionEndTime","type":"uint256"}],"name":"SetEmissionEndTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"address","name":"lpToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositFeeBP","type":"uint256"}],"name":"SetPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newStartBlock","type":"uint256"}],"name":"UpdateStartBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"DCAU","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DCAU_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEVADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DRAGON_NEST_SUPPORTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEEADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAMEADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EMISSION_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_MARKET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dcauPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositMarketFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"dragonNestInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emissionEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePoolDragonNests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nestSupportersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingDcau","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"pendingDcauOfDragonNest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolDragonNestInfo","outputs":[{"internalType":"uint256","name":"accDepFeePerShare","type":"uint256"},{"internalType":"uint256","name":"pendingDepFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"name":"poolExistence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accDCAUPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"lpSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dcauPerSecond","type":"uint256"}],"name":"setDcauPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_emissionEndTime","type":"uint256"}],"name":"setEmissionEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newStartTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakeDragonNest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"stakedAddressForDragonNest","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePoolDragonNest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"withdrawDragonNest","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61014060405260006009557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b553480156200003b57600080fd5b5060405162005b1338038062005b1383398181016040528101906200006191906200062f565b62000081620000756200053560201b60201c565b6200053d60201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415620000fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f290620007da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156200016e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016590620007da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415620001e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d890620007da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562000254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200024b90620007da565b60405180910390fd5b42841162000299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029090620007fc565b60405180910390fd5b670de0b6b3a7640000831115620002e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002de90620007b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200035a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035190620007da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c490620007da565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508673ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508473ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505083600a81905550826006819055508173ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff1660601b815250508573ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050505050505050620008a1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008151905062000612816200086d565b92915050565b600081519050620006298162000887565b92915050565b600080600080600080600080610100898b0312156200064d57600080fd5b60006200065d8b828c0162000601565b9850506020620006708b828c0162000601565b9750506040620006838b828c0162000601565b9650506060620006968b828c0162000601565b9550506080620006a98b828c0162000618565b94505060a0620006bc8b828c0162000618565b93505060c0620006cf8b828c0162000601565b92505060e0620006e28b828c0162000601565b9150509295985092959890939650565b6000620007016016836200081e565b91507f656d697373696f6e207261746520746f6f2068696768000000000000000000006000830152602082019050919050565b6000620007436015836200081e565b91507f6d7573742062652076616c6964206164647265737300000000000000000000006000830152602082019050919050565b6000620007856018836200081e565b91507f6d75737420737461727420696e207468652066757475726500000000000000006000830152602082019050919050565b60006020820190508181036000830152620007d381620006f2565b9050919050565b60006020820190508181036000830152620007f58162000734565b9050919050565b60006020820190508181036000830152620008178162000776565b9050919050565b600082825260208201905092915050565b60006200083c8262000843565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b62000878816200082f565b81146200088457600080fd5b50565b620008928162000863565b81146200089e57600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6151996200097a600039600081816113660152612507015260008181611812015261211701526000818161141301526117ee015260008181611eb40152612bea01526000818161252b01528181612df301526131be015260008181610855015281816109d801528181611120015281816112660152818161132a015281816113d7015281816114870152818161201e015281816121ab015281816133c80152818161347d015261353101526151996000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063c85dad77116100c3578063d963842211610087578063d963842214610708578063e2bbb15814610724578063e63a602614610740578063e80422321461075c578063f2fde38b14610778578063f648345f146107945761025e565b8063c85dad7714610676578063c9932dee14610692578063cbd258b51461069c578063ccbe3c5b146106cc578063d60336c5146106ea5761025e565b8063ad8913c61161010a578063ad8913c6146105d1578063ae6b40ba146105ef578063b105bf5b14610620578063b27768d91461063e578063bf2695e21461065a5761025e565b80638da5cb5b146105045780638dbb1e3a1461052257806393f1a40b1461055257806396501e6a14610583578063a7174aa6146105a15761025e565b806351eb05a6116101df5780635b0eacb3116101a35780635b0eacb31461046a578063630b5ba1146104865780636383fd7014610490578063715018a6146104c057806378e97925146104ca57806384e82a33146104e85761025e565b806351eb05a6146103d85780635312ea8e146103f457806356209b89146104105780635653df991461042e5780635705799e1461044c5761025e565b8063312fc8a011610226578063312fc8a0146103225780633e0a322d1461035257806341a73c421461036e578063436cc3d61461039e578063441a3e70146103bc5761025e565b8063081e3eda14610263578063150b7a02146102815780631526fe27146102b157806317caf6f1146102e65780632e51e1bb14610304575b600080fd5b61026b6107b2565b6040516102789190614ce7565b60405180910390f35b61029b60048036038101906102969190613d33565b6107bf565b6040516102a89190614929565b60405180910390f35b6102cb60048036038101906102c69190613e00565b6107d3565b6040516102dd96959493929190614944565b60405180910390f35b6102ee61084d565b6040516102fb9190614ce7565b60405180910390f35b61030c610853565b604051610319919061485c565b60405180910390f35b61033c60048036038101906103379190613e52565b610877565b6040516103499190614ce7565b60405180910390f35b61036c60048036038101906103679190613e00565b610b6d565b005b61038860048036038101906103839190613ef1565b610cfa565b6040516103959190614ce7565b60405180910390f35b6103a6610d1f565b6040516103b39190614ce7565b60405180910390f35b6103d660048036038101906103d19190613ef1565b610d2b565b005b6103f260048036038101906103ed9190613e00565b61100d565b005b61040e60048036038101906104099190613e00565b6115b6565b005b6104186117e6565b6040516104259190614ce7565b60405180910390f35b6104366117ec565b604051610443919061485c565b60405180910390f35b610454611810565b604051610461919061485c565b60405180910390f35b610484600480360381019061047f9190613e00565b611834565b005b61048e611895565b005b6104aa60048036038101906104a59190613ef1565b6118c8565b6040516104b79190614ce7565b60405180910390f35b6104c8611967565b005b6104d26119ef565b6040516104df9190614ce7565b60405180910390f35b61050260048036038101906104fd9190613e8e565b6119f5565b005b61050c611e0f565b604051610519919061485c565b60405180910390f35b61053c60048036038101906105379190613ef1565b611e38565b6040516105499190614ce7565b60405180910390f35b61056c60048036038101906105679190613e52565b611e81565b60405161057a929190614d02565b60405180910390f35b61058b611eb2565b604051610598919061485c565b60405180910390f35b6105bb60048036038101906105b69190613e00565b611ed6565b6040516105c8919061485c565b60405180910390f35b6105d9611f57565b6040516105e69190614ce7565b60405180910390f35b61060960048036038101906106049190613e00565b611f5d565b604051610617929190614d02565b60405180910390f35b610628611f81565b6040516106359190614ce7565b60405180910390f35b61065860048036038101906106539190613ef1565b611f87565b005b610674600480360381019061066f9190613e00565b612277565b005b610690600480360381019061068b9190613e00565b612376565b005b61069a612486565b005b6106b660048036038101906106b19190613dd7565b6124e5565b6040516106c3919061490e565b60405180910390f35b6106d4612505565b6040516106e1919061485c565b60405180910390f35b6106f2612529565b6040516106ff919061485c565b60405180910390f35b610722600480360381019061071d9190613f2d565b61254d565b005b61073e60048036038101906107399190613ef1565b612835565b005b61075a60048036038101906107559190613e00565b612d98565b005b61077660048036038101906107719190613e00565b612f3c565b005b610792600480360381019061078d9190613d0a565b6132b6565b005b61079c6133ae565b6040516107a99190614ce7565b60405180910390f35b6000600780549050905090565b600063150b7a0260e01b9050949350505050565b600781815481106107e357600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900461ffff16908060050154905086565b60095481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600060078054905083106108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790614a47565b60405180910390fd5b6000600784815481106108fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060060201905060006008600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905082600201544211801561098157506000836005015414155b801561098f57506000600954115b15610b335760006109a4846002015442611e38565b905060006009548560010154600654846109be9190614e45565b6109c89190614e45565b6109d29190614e14565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3c57600080fd5b505afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a749190613e29565b90506000600f83610a859190614e14565b90506920d2911c36cdcae000008210610aa15760009250610b01565b6920d2911c36cdcae00000818484610ab99190614dbe565b610ac39190614dbe565b1115610b00576000826920d2911c36cdcae00000610ae19190614e9f565b90506010600f82610af29190614e45565b610afc9190614e14565b9350505b5b866005015464e8d4a5100084610b179190614e45565b610b219190614e14565b85610b2c9190614dbe565b9450505050505b816001015464e8d4a51000828460000154610b4e9190614e45565b610b589190614e14565b610b629190614e9f565b935050505092915050565b610b756133bc565b73ffffffffffffffffffffffffffffffffffffffff16610b93611e0f565b73ffffffffffffffffffffffffffffffffffffffff1614610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be090614bc7565b60405180910390fd5b600060078054905014610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890614c67565b60405180910390fd5b600a544210610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90614ba7565b60405180910390fd5b804210610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90614b07565b60405180910390fd5b80600a819055507f1ff2238e284780b094bb341b41af7e6ce294dee1da3799ae49cd0e29fbe12709600a54604051610cef9190614ce7565b60405180910390a150565b6003602052816000526040600020602052806000526040600020600091509150505481565b670de0b6b3a764000081565b60026001541415610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890614ca7565b60405180910390fd5b60026001819055506007805490508210610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790614a47565b60405180910390fd5b600060078381548110610dfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060060201905060006008600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90614be7565b60405180910390fd5b610eb08461100d565b6000816001015464e8d4a5100084600301548460000154610ed19190614e45565b610edb9190614e14565b610ee59190614e9f565b90506000811115610efb57610efa33826133c4565b5b6000841115610f8457838260000154610f149190614e9f565b8260000181905550610f6b33858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166136259092919063ffffffff16565b838360050154610f7b9190614e9f565b83600501819055505b64e8d4a5100083600301548360000154610f9e9190614e45565b610fa89190614e14565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56886604051610ff79190614ce7565b60405180910390a3505050600180819055505050565b6007805490508110611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90614a47565b60405180910390fd5b600060078281548110611090577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602019050806002015442116110b157506115b3565b6000816005015414806110c8575060008160010154145b156110dc57428160020181905550506115b3565b60006110ec826002015442611e38565b905060006009548360010154600654846111069190614e45565b6111109190614e45565b61111a9190614e14565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561118457600080fd5b505afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190613e29565b90506000600f836111cd9190614e14565b90506920d2911c36cdcae0000082106111ed57600092506000905061125b565b6920d2911c36cdcae000008184846112059190614dbe565b61120f9190614dbe565b111561125a576000826920d2911c36cdcae0000061122d9190614e9f565b90506010600f8261123e9190614e45565b6112489190614e14565b935083816112569190614e9f565b9150505b5b60008311156112f2577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1930856040518363ffffffff1660e01b81526004016112bf9291906148ae565b600060405180830381600087803b1580156112d957600080fd5b505af11580156112ed573d6000803e3d6000fd5b505050505b6000811115611485576000600360018361130c9190614e45565b6113169190614e14565b9050600081836113269190614e9f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f197f0000000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b81526004016113a39291906148ae565b600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f197f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b81526004016114509291906148ae565b600060405180830381600087803b15801561146a57600080fd5b505af115801561147e573d6000803e3d6000fd5b5050505050505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114eb57600080fd5b505afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190613e29565b91506920d2911c36cdcae00000821015801561156057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b54145b1561156d5742600b819055505b846005015464e8d4a51000846115839190614e45565b61158d9190614e14565b856003015461159c9190614dbe565b856003018190555042856002018190555050505050505b50565b600260015414156115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f390614ca7565b60405180910390fd5b6002600181905550600780549050811061164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290614a47565b60405180910390fd5b600060078281548110611687577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060060201905060006008600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050600082600001819055506000826001018190555061175733828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166136259092919063ffffffff16565b8083600501541061177f578083600501546117729190614e9f565b836005018190555061178a565b600083600501819055505b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040516117d19190614ce7565b60405180910390a35050506001808190555050565b60055481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6002600154141561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614ca7565b60405180910390fd5b600260018190555061188b816136ab565b6001808190555050565b6000600780549050905060005b818110156118c4576118b38161100d565b806118bd90615009565b90506118a2565b5050565b600080600260008581526020019081526020016000209050600081600101549050600080600554111561191957600554826119039190614e14565b83600001546119129190614dbe565b905061192c565b8183600001546119299190614dbe565b90505b600360008781526020019081526020016000206000868152602001908152602001600020548161195c9190614e9f565b935050505092915050565b61196f6133bc565b73ffffffffffffffffffffffffffffffffffffffff1661198d611e0f565b73ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614bc7565b60405180910390fd5b6119ed6000613751565b565b600a5481565b6119fd6133bc565b73ffffffffffffffffffffffffffffffffffffffff16611a1b611e0f565b73ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890614bc7565b60405180910390fd5b8260001515600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90614c47565b60405180910390fd5b601460078054905010611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490614a27565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b86919061485c565b60206040518083038186803b158015611b9e57600080fd5b505afa158015611bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd69190613e29565b506101918361ffff161115611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c17906149c7565b60405180910390fd5b8115611c2f57611c2e611895565b5b6000600a544211611c4257600a54611c44565b425b905085600954611c549190614dbe565b6009819055506001600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060076040518060c001604052808773ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001600081526020018661ffff1681526020016000815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548161ffff021916908361ffff16021790555060a0820151816005015550506001600780549050611dcc9190614e9f565b7fa69d86e67bfa14ad558a2599f0df3af0dff00c36be738f9118440420f1c27067868887604051611dff939291906148d7565b60405180910390a2505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600b54831115611e4d5760009050611e7b565b600b54821115611e6c5782600b54611e659190614e9f565b9050611e7b565b8282611e789190614e9f565b90505b92915050565b6008602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006019821115611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614cc7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b5481565b60026020528060005260406000206000915090508060000154908060010154905082565b60065481565b60026001541415611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc490614ca7565b60405180910390fd5b6002600181905550600780549050821061201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390614c07565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166007838154811061208d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906149e7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614b67565b60405180910390fd5b6121f03330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16613815909392919063ffffffff16565b806002600084815260200190815260200160002060010160008282546122169190614dbe565b92505081905550813373ffffffffffffffffffffffffffffffffffffffff167ffb34cb7cc8899e2bac8b63f7a320fa01229cc33929c97ada0e5a61aa0e96275b836040516122649190614ce7565b60405180910390a3600180819055505050565b61227f6133bc565b73ffffffffffffffffffffffffffffffffffffffff1661229d611e0f565b73ffffffffffffffffffffffffffffffffffffffff16146122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614bc7565b60405180910390fd5b428111612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614b27565b60405180910390fd5b80600b819055507fa10b761a678a8dae9101bf9e96bfa7261fc033eeb4eab101834145e002501b838160405161236b9190614ce7565b60405180910390a150565b61237e6133bc565b73ffffffffffffffffffffffffffffffffffffffff1661239c611e0f565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990614bc7565b60405180910390fd5b670de0b6b3a764000081111561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614a67565b60405180910390fd5b612445611895565b806006819055507f4820a0ec9a3a52f9c9cabd7f18abf7ab028aa95a47535abc448aecea4b9e1edb8160405161247b9190614ce7565b60405180910390a150565b600260015414156124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c390614ca7565b60405180910390fd5b60026001819055506124dc61389e565b60018081905550565b600c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6125556133bc565b73ffffffffffffffffffffffffffffffffffffffff16612573611e0f565b73ffffffffffffffffffffffffffffffffffffffff16146125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090614bc7565b60405180910390fd5b6101918261ffff161115612612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260990614b87565b60405180910390fd5b6007805490508410612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265090614a47565b60405180910390fd5b801561266857612667611895565b5b82600785815481106126a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060060201600101546009546126c29190614e9f565b6126cc9190614dbe565b600981905550826007858154811061270d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160010181905550816007858154811061275d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160040160006101000a81548161ffff021916908361ffff160217905550837f22d010b39cce830b2f23926bfb7551a230dbe713d1f6085480fef4a6ad7a4aaa600786815481106127e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168585604051612827939291906148d7565b60405180910390a250505050565b6002600154141561287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287290614ca7565b60405180910390fd5b600260018190555060078054905082106128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c190614a47565b60405180910390fd5b600060078381548110612906577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060060201905060006008600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506129738461100d565b6000816000015411156129cd576000816001015464e8d4a51000846003015484600001546129a19190614e45565b6129ab9190614e14565b6129b59190614e9f565b905060008111156129cb576129ca33826133c4565b5b505b6000831115612d105760008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612a3a919061485c565b60206040518083038186803b158015612a5257600080fd5b505afa158015612a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8a9190613e29565b9050612ab93330878573ffffffffffffffffffffffffffffffffffffffff16613815909392919063ffffffff16565b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612af3919061485c565b60206040518083038186803b158015612b0b57600080fd5b505afa158015612b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b439190613e29565b612b4d9190614e9f565b945060008511612b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8990614aa7565b60405180910390fd5b5060008360040160009054906101000a900461ffff1661ffff161115612cdd5760006127108460040160009054906101000a900461ffff1661ffff1686612bd99190614e45565b612be39190614e14565b9050612c4a7f000000000000000000000000000000000000000000000000000000000000000061271061232884612c1a9190614e45565b612c249190614e14565b8473ffffffffffffffffffffffffffffffffffffffff166136259092919063ffffffff16565b6127106103e882612c5b9190614e45565b612c659190614e14565b600260008881526020019081526020016000206001016000828254612c8a9190614dbe565b9250508190555080858460000154612ca29190614dbe565b612cac9190614e9f565b836000018190555080858560050154612cc59190614dbe565b612ccf9190614e9f565b846005018190555050612d0e565b838260000154612ced9190614dbe565b8260000181905550838360050154612d059190614dbe565b83600501819055505b505b64e8d4a5100082600301548260000154612d2a9190614e45565b612d349190614e14565b8160010181905550833373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1585604051612d839190614ce7565b60405180910390a35050600180819055505050565b60026001541415612dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd590614ca7565b60405180910390fd5b6002600181905550612def816138d1565b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff166342842e0e3330856040518463ffffffff1660e01b8152600401612e5193929190614877565b600060405180830381600087803b158015612e6b57600080fd5b505af1158015612e7f573d6000803e3d6000fd5b50505050336004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060056000815480929190612ee890615009565b9190505550813373ffffffffffffffffffffffffffffffffffffffff167fb2207c94fe68ae9ff67efed40ab40ef3083631e580a5cc4cdf5c8cb32211614560405160405180910390a3506001808190555050565b60026001541415612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7990614ca7565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290614a87565b60405180910390fd5b60006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061308661389e565b6000600780549050905060005b818110156131b9576000600782815481106130d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060060201905061317b336003600085815260200190815260200160002060008781526020019081526020016000205460026000868152602001908152602001600020600001546131319190614e9f565b8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166136259092919063ffffffff16565b6000600360008481526020019081526020016000206000868152602001908152602001600020819055505080806131b190615009565b915050613093565b5060007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff166342842e0e3033866040518463ffffffff1660e01b815260040161321c93929190614877565b600060405180830381600087803b15801561323657600080fd5b505af115801561324a573d6000803e3d6000fd5b505050506005600081548092919061326190614fdf565b9190505550823373ffffffffffffffffffffffffffffffffffffffff167f96240986bbd1529d69d4ab20ce2fe2bc98a937e7cd49ad5086e6a47248a2c84760405160405180910390a350506001808190555050565b6132be6133bc565b73ffffffffffffffffffffffffffffffffffffffff166132dc611e0f565b73ffffffffffffffffffffffffffffffffffffffff1614613332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332990614bc7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339990614a07565b60405180910390fd5b6133ab81613751565b50565b6920d2911c36cdcae0000081565b600033905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161341f919061485c565b60206040518083038186803b15801561343757600080fd5b505afa15801561344b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346f9190613e29565b905060008183111561352f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b81526004016134d69291906148ae565b602060405180830381600087803b1580156134f057600080fd5b505af1158015613504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135289190613dae565b90506135df565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b815260040161358a9291906148ae565b602060405180830381600087803b1580156135a457600080fd5b505af11580156135b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135dc9190613dae565b90505b8061361f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361690614b47565b60405180910390fd5b50505050565b6136a68363a9059cbb60e01b84846040516024016136449291906148ae565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613906565b505050565b6000600554116136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e790614ac7565b60405180910390fd5b6000600260008381526020019081526020016000209050600081600101549050600081111561374c57600554816137279190614e14565b82600001600082825461373a9190614dbe565b92505081905550600082600101819055505b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613898846323b872dd60e01b85858560405160240161383693929190614877565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613906565b50505050565b6000600780549050905060005b818110156138cd576138bc816136ab565b806138c690615009565b90506138ab565b5050565b6000600780549050905060005b81811015613901576138f081846139cd565b806138fa90615009565b90506138de565b505050565b6000613968826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613a699092919063ffffffff16565b90506000815111156139c857808060200190518101906139889190613dae565b6139c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139be90614c87565b60405180910390fd5b5b505050565b6000600260008481526020019081526020016000209050600081600101549050600082600001549050600082118015613a0857506000600554115b15613a395760055482613a1b9190614e14565b81613a269190614dbe565b8360000181905550600083600101819055505b80600360008781526020019081526020016000206000868152602001908152602001600020819055505050505050565b6060613a788484600085613a81565b90509392505050565b606082471015613ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613abd90614ae7565b60405180910390fd5b613acf85613b95565b613b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0590614c27565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613b379190614845565b60006040518083038185875af1925050503d8060008114613b74576040519150601f19603f3d011682016040523d82523d6000602084013e613b79565b606091505b5091509150613b89828286613ba8565b92505050949350505050565b600080823b905060008111915050919050565b60608315613bb857829050613c08565b600083511115613bcb5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bff91906149a5565b60405180910390fd5b9392505050565b6000613c22613c1d84614d5c565b614d2b565b905082815260208101848484011115613c3a57600080fd5b613c45848285614f9d565b509392505050565b600081359050613c5c816150f0565b92915050565b600081359050613c7181615107565b92915050565b600081519050613c8681615107565b92915050565b600082601f830112613c9d57600080fd5b8135613cad848260208601613c0f565b91505092915050565b600081359050613cc58161511e565b92915050565b600081359050613cda81615135565b92915050565b600081359050613cef8161514c565b92915050565b600081519050613d048161514c565b92915050565b600060208284031215613d1c57600080fd5b6000613d2a84828501613c4d565b91505092915050565b60008060008060808587031215613d4957600080fd5b6000613d5787828801613c4d565b9450506020613d6887828801613c4d565b9350506040613d7987828801613ce0565b925050606085013567ffffffffffffffff811115613d9657600080fd5b613da287828801613c8c565b91505092959194509250565b600060208284031215613dc057600080fd5b6000613dce84828501613c77565b91505092915050565b600060208284031215613de957600080fd5b6000613df784828501613cb6565b91505092915050565b600060208284031215613e1257600080fd5b6000613e2084828501613ce0565b91505092915050565b600060208284031215613e3b57600080fd5b6000613e4984828501613cf5565b91505092915050565b60008060408385031215613e6557600080fd5b6000613e7385828601613ce0565b9250506020613e8485828601613c4d565b9150509250929050565b60008060008060808587031215613ea457600080fd5b6000613eb287828801613ce0565b9450506020613ec387828801613cb6565b9350506040613ed487828801613ccb565b9250506060613ee587828801613c62565b91505092959194509250565b60008060408385031215613f0457600080fd5b6000613f1285828601613ce0565b9250506020613f2385828601613ce0565b9150509250929050565b60008060008060808587031215613f4357600080fd5b6000613f5187828801613ce0565b9450506020613f6287828801613ce0565b9350506040613f7387828801613ccb565b9250506060613f8487828801613c62565b91505092959194509250565b613f9981614ed3565b82525050565b613fa881614ee5565b82525050565b613fb781614ef1565b82525050565b6000613fc882614d8c565b613fd28185614da2565b9350613fe2818560208601614fac565b80840191505092915050565b613ff781614f67565b82525050565b600061400882614d97565b6140128185614dad565b9350614022818560208601614fac565b61402b816150df565b840191505092915050565b6000614043602583614dad565b91507f6164643a20696e76616c6964206465706f73697420666565206261736973207060008301527f6f696e74730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140a9601383614dad565b91507f53686f756c64206265204443415520706f6f6c000000000000000000000000006000830152602082019050919050565b60006140e9602683614dad565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061414f600e83614dad565b91507f746f6f206d616e7920706f6f6c730000000000000000000000000000000000006000830152602082019050919050565b600061418f601983614dad565b91507f447261676f6e3a204e6f6e2d6578697374656e7420706f6f6c000000000000006000830152602082019050919050565b60006141cf602a83614dad565b91507f656d697373696f6e7320746f6f2068696768206c696d6974656420746f20312060008301527f706572207365636f6e64000000000000000000000000000000000000000000006020830152604082019050919050565b6000614235601183614dad565b91507f447261676f6e3a20466f7262696464656e0000000000000000000000000000006000830152602082019050919050565b6000614275601983614dad565b91507f5765206f6e6c792061636365707420616d6f756e74203e2030000000000000006000830152602082019050919050565b60006142b5601483614dad565b91507f4d757374206861766520737570706f72746572730000000000000000000000006000830152602082019050919050565b60006142f5602683614dad565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061435b602183614dad565b91507f63616e6e6f74207365742073746172742074696d6520696e207468652070617360008301527f74000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143c1602383614dad565b91507f456d697373696f6e2063616e206e6f7420626520656e6420696e20746865207060008301527f61737400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614427602183614dad565b91507f73616665446361755472616e736665723a207472616e73666572206661696c6560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061448d601a83614dad565b91507f417661696c61626c652066726f6d206f6e6c79206d61726b65740000000000006000830152602082019050919050565b60006144cd602583614dad565b91507f7365743a20696e76616c6964206465706f73697420666565206261736973207060008301527f6f696e74730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614533603683614dad565b91507f63616e6e6f74206368616e67652073746172742074696d652069662073616c6560008301527f2068617320616c726561647920636f6d6d656e636564000000000000000000006020830152604082019050919050565b6000614599602083614dad565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006145d9601283614dad565b91507f57697468647261773a206e6f7420676f6f6400000000000000000000000000006000830152602082019050919050565b6000614619601383614dad565b91507f706f6f6c20646f6573206e6f74206578697374000000000000000000000000006000830152602082019050919050565b6000614659601d83614dad565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614699601983614dad565b91507f6e6f6e4475706c6963617465643a206475706c696361746564000000000000006000830152602082019050919050565b60006146d9603183614dad565b91507f6e6f206368616e67696e6720737461727454696d6520616674657220706f6f6c60008301527f732068617665206265656e2061646465640000000000000000000000000000006020830152604082019050919050565b600061473f602a83614dad565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006147a5601f83614dad565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006147e5601483614dad565b91507f746f6b656e20646f6573206e6f742065786973740000000000000000000000006000830152602082019050919050565b61482181614f2f565b82525050565b61483081614f8b565b82525050565b61483f81614f5d565b82525050565b60006148518284613fbd565b915081905092915050565b60006020820190506148716000830184613f90565b92915050565b600060608201905061488c6000830186613f90565b6148996020830185613f90565b6148a66040830184614836565b949350505050565b60006040820190506148c36000830185613f90565b6148d06020830184614836565b9392505050565b60006060820190506148ec6000830186613f90565b6148f96020830185614836565b6149066040830184614827565b949350505050565b60006020820190506149236000830184613f9f565b92915050565b600060208201905061493e6000830184613fae565b92915050565b600060c0820190506149596000830189613fee565b6149666020830188614836565b6149736040830187614836565b6149806060830186614836565b61498d6080830185614818565b61499a60a0830184614836565b979650505050505050565b600060208201905081810360008301526149bf8184613ffd565b905092915050565b600060208201905081810360008301526149e081614036565b9050919050565b60006020820190508181036000830152614a008161409c565b9050919050565b60006020820190508181036000830152614a20816140dc565b9050919050565b60006020820190508181036000830152614a4081614142565b9050919050565b60006020820190508181036000830152614a6081614182565b9050919050565b60006020820190508181036000830152614a80816141c2565b9050919050565b60006020820190508181036000830152614aa081614228565b9050919050565b60006020820190508181036000830152614ac081614268565b9050919050565b60006020820190508181036000830152614ae0816142a8565b9050919050565b60006020820190508181036000830152614b00816142e8565b9050919050565b60006020820190508181036000830152614b208161434e565b9050919050565b60006020820190508181036000830152614b40816143b4565b9050919050565b60006020820190508181036000830152614b608161441a565b9050919050565b60006020820190508181036000830152614b8081614480565b9050919050565b60006020820190508181036000830152614ba0816144c0565b9050919050565b60006020820190508181036000830152614bc081614526565b9050919050565b60006020820190508181036000830152614be08161458c565b9050919050565b60006020820190508181036000830152614c00816145cc565b9050919050565b60006020820190508181036000830152614c208161460c565b9050919050565b60006020820190508181036000830152614c408161464c565b9050919050565b60006020820190508181036000830152614c608161468c565b9050919050565b60006020820190508181036000830152614c80816146cc565b9050919050565b60006020820190508181036000830152614ca081614732565b9050919050565b60006020820190508181036000830152614cc081614798565b9050919050565b60006020820190508181036000830152614ce0816147d8565b9050919050565b6000602082019050614cfc6000830184614836565b92915050565b6000604082019050614d176000830185614836565b614d246020830184614836565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715614d5257614d516150b0565b5b8060405250919050565b600067ffffffffffffffff821115614d7757614d766150b0565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000614dc982614f5d565b9150614dd483614f5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e0957614e08615052565b5b828201905092915050565b6000614e1f82614f5d565b9150614e2a83614f5d565b925082614e3a57614e39615081565b5b828204905092915050565b6000614e5082614f5d565b9150614e5b83614f5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e9457614e93615052565b5b828202905092915050565b6000614eaa82614f5d565b9150614eb583614f5d565b925082821015614ec857614ec7615052565b5b828203905092915050565b6000614ede82614f3d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614f2882614ed3565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614f7282614f79565b9050919050565b6000614f8482614f3d565b9050919050565b6000614f9682614f2f565b9050919050565b82818337600083830152505050565b60005b83811015614fca578082015181840152602081019050614faf565b83811115614fd9576000848401525b50505050565b6000614fea82614f5d565b91506000821415614ffe57614ffd615052565b5b600182039050919050565b600061501482614f5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561504757615046615052565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6150f981614ed3565b811461510457600080fd5b50565b61511081614ee5565b811461511b57600080fd5b50565b61512781614f1d565b811461513257600080fd5b50565b61513e81614f2f565b811461514957600080fd5b50565b61515581614f5d565b811461516057600080fd5b5056fea264697066735822122046ed3e08e709819a98c2ccd9185ef7514366d7648fab45f769b9942716b9412764736f6c63430008000033000000000000000000000000100cc3a819dd3e8573fd2e46d1e66ee866068f30000000000000000000000000253f2bf92aa76e0e448a77ed98197f44eec96a9f00000000000000000000000007a6597abb94bd91783e992c4f469878f9544177000000000000000000000000306e5f7fae63a86b3e2d88f94cca8d7614684d910000000000000000000000000000000000000000000000000000000061885b7e000000000000000000000000000000000000000000000000003a9ea99ecb4000000000000000000000000000306e5f7fae63a86b3e2d88f94cca8d7614684d910000000000000000000000000144719fe9051af2eb1bf31fe8c975e323974fd3
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000100cc3a819dd3e8573fd2e46d1e66ee866068f30000000000000000000000000253f2bf92aa76e0e448a77ed98197f44eec96a9f00000000000000000000000007a6597abb94bd91783e992c4f469878f9544177000000000000000000000000306e5f7fae63a86b3e2d88f94cca8d7614684d910000000000000000000000000000000000000000000000000000000061885b7e000000000000000000000000000000000000000000000000003a9ea99ecb4000000000000000000000000000306e5f7fae63a86b3e2d88f94cca8d7614684d910000000000000000000000000144719fe9051af2eb1bf31fe8c975e323974fd3
-----Decoded View---------------
Arg [0] : _DCAU (address): 0x100cc3a819dd3e8573fd2e46d1e66ee866068f30
Arg [1] : _DRAGON_NEST_SUPPORTER (address): 0x253f2bf92aa76e0e448a77ed98197f44eec96a9f
Arg [2] : _gameAddress (address): 0x07a6597abb94bd91783e992c4f469878f9544177
Arg [3] : _feeAddress (address): 0x306e5f7fae63a86b3e2d88f94cca8d7614684d91
Arg [4] : _startTime (uint256): 1636326270
Arg [5] : _dcauPerSecond (uint256): 16500000000000000
Arg [6] : _devAddress (address): 0x306e5f7fae63a86b3e2d88f94cca8d7614684d91
Arg [7] : _NFT_MARKET (address): 0x0144719fe9051af2eb1bf31fe8c975e323974fd3
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000100cc3a819dd3e8573fd2e46d1e66ee866068f30
Arg [1] : 000000000000000000000000253f2bf92aa76e0e448a77ed98197f44eec96a9f
Arg [2] : 00000000000000000000000007a6597abb94bd91783e992c4f469878f9544177
Arg [3] : 000000000000000000000000306e5f7fae63a86b3e2d88f94cca8d7614684d91
Arg [4] : 0000000000000000000000000000000000000000000000000000000061885b7e
Arg [5] : 000000000000000000000000000000000000000000000000003a9ea99ecb4000
Arg [6] : 000000000000000000000000306e5f7fae63a86b3e2d88f94cca8d7614684d91
Arg [7] : 0000000000000000000000000144719fe9051af2eb1bf31fe8c975e323974fd3
Deployed ByteCode Sourcemap
28732:21666:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33863:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15641:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32197:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;32438:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31891:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36648:1340;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44516:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31466:69;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31790:56;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42314:872;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38327:2002;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43257:688;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31678:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32085:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32128:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45902:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38071:180;;;:::i;:::-;;48958:623;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5411:94;;;:::i;:::-;;32523:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34233:1095;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4760:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36181:403;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32279:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;32043:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49589:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32596:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31363:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;31927:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49876:519;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45270:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44963:299;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45549:106;;;:::i;:::-;;33966:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32655:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31962:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35440:665;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40398:1864;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47544:402;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47954:940;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5660:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31722:59;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33863:95;33908:7;33935:8;:15;;;;33928:22;;33863:95;:::o;15641:207::-;15784:6;15810:30;;;15803:37;;15641:207;;;;;;:::o;32197:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32438:34::-;;;;:::o;31891:29::-;;;:::o;36648:1340::-;36721:7;36756:8;:15;;;;36749:4;:22;36741:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36814:21;36838:8;36847:4;36838:14;;;;;;;;;;;;;;;;;;;;;;;;;;36814:38;;36863:21;36887:8;:14;36896:4;36887:14;;;;;;;;;;;:21;36902:5;36887:21;;;;;;;;;;;;;;;36863:45;;36919:23;36945:4;:20;;;36919:46;;37000:4;:19;;;36982:15;:37;:59;;;;;37040:1;37023:4;:13;;;:18;;36982:59;:82;;;;;37063:1;37045:15;;:19;36982:82;36978:925;;;37081:18;37102:51;37116:4;:19;;;37137:15;37102:13;:51::i;:::-;37081:72;;37168:18;37238:15;;37219:4;:15;;;37203:13;;37190:10;:26;;;;:::i;:::-;:44;;;;:::i;:::-;37189:64;;;;:::i;:::-;37168:85;;37270:23;37303:4;37296:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37270:52;;37339:25;37380:2;37367:10;:15;;;;:::i;:::-;37339:43;;31764:17;37476:15;:34;37472:330;;37544:1;37531:14;;37472:330;;;31764:17;37603;37590:10;37572:15;:28;;;;:::i;:::-;:48;;;;:::i;:::-;37571:68;37567:235;;;37660:27;37708:15;31764:17;37690:33;;;;:::i;:::-;37660:63;;37784:2;37778;37756:19;:24;;;;:::i;:::-;37755:31;;;;:::i;:::-;37742:44;;37567:235;;37472:330;37877:4;:13;;;37869:4;37856:10;:17;;;;:::i;:::-;37855:35;;;;:::i;:::-;37836:15;:55;;;;:::i;:::-;37818:73;;36978:925;;;;;37965:4;:15;;;37957:4;37938:15;37924:4;:11;;;:29;;;;:::i;:::-;37923:38;;;;:::i;:::-;37922:58;;;;:::i;:::-;37915:65;;;;;36648:1340;;;;:::o;44516:439::-;4991:12;:10;:12::i;:::-;4980:23;;:7;:5;:7::i;:::-;:23;;;4972:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44618:1:::1;44599:8;:15;;;;:20;44591:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44710:9;;44692:15;:27;44684:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;44815:13;44797:15;:31;44789:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44889:13;44877:9;:25;;;;44920:27;44937:9;;44920:27;;;;;;:::i;:::-;;;;;;;;44516:439:::0;:::o;31466:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31790:56::-;31834:12;31790:56;:::o;42314:872::-;1978:1;2574:7;;:19;;2566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1978:1;2707:7;:18;;;;42411:8:::1;:15;;;;42404:4;:22;42396:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42469:21;42493:8;42502:4;42493:14;;;;;;;;;;;;;;;;;;;;;;;;;;42469:38;;42518:21;42542:8;:14;42551:4;42542:14;;;;;;;;;;;:26;42557:10;42542:26;;;;;;;;;;;;;;;42518:50;;42602:7;42587:4;:11;;;:22;;42579:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42643:16;42654:4;42643:10;:16::i;:::-;42670:15;42736:4;:15;;;42728:4;42704;:20;;;42690:4;:11;;;:34;;;;:::i;:::-;42689:43;;;;:::i;:::-;42688:63;;;;:::i;:::-;42670:81;;42776:1;42766:7;:11;42762:81;;;42794:37;42811:10;42823:7;42794:16;:37::i;:::-;42762:81;42867:1;42857:7;:11;42853:203;;;42913:7;42899:4;:11;;;:21;;;;:::i;:::-;42885:4;:11;;:35;;;;42935:55;42969:10;42982:7;42935:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;43037:7;43021:4;:13;;;:23;;;;:::i;:::-;43005:4;:13;;:39;;;;42853:203;43123:4;43099;:20;;;43085:4;:11;;;:34;;;;:::i;:::-;43084:43;;;;:::i;:::-;43066:4;:15;;:61;;;;43164:4;43152:10;43143:35;;;43170:7;43143:35;;;;;;:::i;:::-;;;;;;;;2738:1;;;1934::::0;2886:7;:22;;;;42314:872;;:::o;38327:2002::-;38394:8;:15;;;;38387:4;:22;38379:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38452:21;38476:8;38485:4;38476:14;;;;;;;;;;;;;;;;;;;;;;;;;;38452:38;;38524:4;:19;;;38505:15;:38;38501:77;;38560:7;;;38501:77;38611:1;38594:4;:13;;;:18;:42;;;;38635:1;38616:4;:15;;;:20;38594:42;38590:133;;;38675:15;38653:4;:19;;:37;;;;38705:7;;;38590:133;38735:18;38756:51;38770:4;:19;;;38791:15;38756:13;:51::i;:::-;38735:72;;38818:18;38888:15;;38869:4;:15;;;38853:13;;38840:10;:26;;;;:::i;:::-;:44;;;;:::i;:::-;38839:64;;;;:::i;:::-;38818:85;;38914:23;38947:4;38940:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38914:52;;38979:25;39020:2;39007:10;:15;;;;:::i;:::-;38979:43;;31764:17;39108:15;:34;39104:413;;39172:1;39159:14;;39208:1;39188:21;;39104:413;;;31764:17;39263;39250:10;39232:15;:28;;;;:::i;:::-;:48;;;;:::i;:::-;39231:68;39227:290;;;39316:27;39364:15;31764:17;39346:33;;;;:::i;:::-;39316:63;;39436:2;39430;39408:19;:24;;;;:::i;:::-;39407:31;;;;:::i;:::-;39394:44;;39495:10;39473:19;:32;;;;:::i;:::-;39453:52;;39227:290;;39104:413;39546:1;39533:10;:14;39529:90;;;39570:4;39564:16;;;39589:4;39596:10;39564:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39529:90;39655:1;39635:17;:21;39631:278;;;39673:17;39719:1;39714;39694:17;:21;;;;:::i;:::-;39693:27;;;;:::i;:::-;39673:47;;39735:18;39776:9;39756:17;:29;;;;:::i;:::-;39735:50;;39808:4;39802:16;;;39819:10;39831:9;39802:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39862:4;39856:16;;;39873:11;39886:10;39856:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39631:278;;;39946:4;39939:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39921:44;;31764:17;40068:15;:34;;:74;;;;;40125:17;40106:15;;:36;40068:74;40064:113;;;40162:15;40144;:33;;;;40064:113;40259:4;:13;;;40251:4;40238:10;:17;;;;:::i;:::-;40237:35;;;;:::i;:::-;40213:4;:20;;;:60;;;;:::i;:::-;40190:4;:20;;:83;;;;40306:15;40284:4;:19;;:37;;;;38327:2002;;;;;;;:::o;43257:688::-;1978:1;2574:7;;:19;;2566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1978:1;2707:7;:18;;;;43346:8:::1;:15;;;;43339:4;:22;43331:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43404:21;43428:8;43437:4;43428:14;;;;;;;;;;;;;;;;;;;;;;;;;;43404:38;;43453:21;43477:8;:14;43486:4;43477:14;;;;;;;;;;;:26;43492:10;43477:26;;;;;;;;;;;;;;;43453:50;;43514:14;43531:4;:11;;;43514:28;;43567:1;43553:4;:11;;:15;;;;43597:1;43579:4;:15;;:19;;;;43609:54;43643:10;43656:6;43609:4;:12;;;;;;;;;;;;:25;;;;:54;;;;;:::i;:::-;43797:6;43780:4;:13;;;:23;43776:100;;43837:6;43821:4;:13;;;:22;;;;:::i;:::-;43805:4;:13;;:38;;;;43776:100;;;43875:1;43859:4;:13;;:17;;;;43776:100;43924:4;43912:10;43894:43;;;43930:6;43894:43;;;;;;:::i;:::-;;;;;;;;2738:1;;;1934::::0;2886:7;:22;;;;43257:688;:::o;31678:35::-;;;;:::o;32085:36::-;;;:::o;32128:35::-;;;:::o;45902:112::-;1978:1;2574:7;;:19;;2566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1978:1;2707:7;:18;;;;45979:27:::1;46001:4;45979:21;:27::i;:::-;1934:1:::0;2886:7;:22;;;;45902:112;:::o;38071:180::-;38116:14;38133:8;:15;;;;38116:32;;38164:11;38159:85;38187:6;38181:3;:12;38159:85;;;38217:15;38228:3;38217:10;:15::i;:::-;38195:5;;;;:::i;:::-;;;38159:85;;;;38071:180;:::o;48958:623::-;49046:7;49066:41;49110:18;:24;49129:4;49110:24;;;;;;;;;;;49066:68;;49145:22;49170:14;:28;;;49145:53;;49211:25;49280:1;49257:20;;:24;49253:251;;;49370:20;;49353:14;:37;;;;:::i;:::-;49318:14;:32;;;:72;;;;:::i;:::-;49298:92;;49253:251;;;49478:14;49443;:32;;;:49;;;;:::i;:::-;49423:69;;49253:251;49543:14;:20;49558:4;49543:20;;;;;;;;;;;:30;49564:8;49543:30;;;;;;;;;;;;49523:17;:50;;;;:::i;:::-;49516:57;;;;;48958:623;;;;:::o;5411:94::-;4991:12;:10;:12::i;:::-;4980:23;;:7;:5;:7::i;:::-;:23;;;4972:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5476:21:::1;5494:1;5476:9;:21::i;:::-;5411:94::o:0;32523:24::-;;;;:::o;34233:1095::-;4991:12;:10;:12::i;:::-;4980:23;;:7;:5;:7::i;:::-;:23;;;4972:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34400:8:::1;34103:5;34076:32;;:13;:23;34090:8;34076:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;34068:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34447:2:::2;34429:8;:15;;;;:20;34421:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;34531:8;:18;;;34558:4;34531:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34602:3;34585:13;:20;;;;34577:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34662:11;34658:61;;;34690:17;:15;:17::i;:::-;34658:61;34729:22;34772:9;;34754:15;:27;:57;;34802:9;;34754:57;;;34784:15;34754:57;34729:82;;34858:11;34840:15;;:29;;;;:::i;:::-;34822:15;:47;;;;34906:4;34880:13;:23;34894:8;34880:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;34923:8;34951:265;;;;;;;;34988:8;34951:265;;;;;;35027:11;34951:265;;;;35073:14;34951:265;;;;35123:1;34951:265;;;;35157:13;34951:265;;;;;;35199:1;34951:265;;::::0;34923:304:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35271:1;35253:8;:15;;;;:19;;;;:::i;:::-;35245:75;35282:8;35293:11;35306:13;35245:75;;;;;;;;:::i;:::-;;;;;;;;34149:1;5051::::1;34233:1095:::0;;;;:::o;4760:87::-;4806:7;4833:6;;;;;;;;;;;4826:13;;4760:87;:::o;36181:403::-;36253:7;36445:15;;36437:5;:23;36433:37;;;36469:1;36462:8;;;;36433:37;36491:15;;36485:3;:21;36481:95;;;36534:5;36516:15;;:23;;;;:::i;:::-;36508:32;;;;36481:95;36570:5;36564:3;:11;;;;:::i;:::-;36556:20;;36181:403;;;;;:::o;32279:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32043:35::-;;;:::o;49589:194::-;49666:7;49706:2;49694:8;:14;;49686:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;49751:14;:24;49766:8;49751:24;;;;;;;;;;;;;;;;;;;;;49744:31;;49589:194;;;:::o;32596:50::-;;;;:::o;31363:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31927:28::-;;;;:::o;49876:519::-;1978:1;2574:7;;:19;;2566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1978:1;2707:7;:18;;;;49981:8:::1;:15;;;;49974:4;:22;49966:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50074:4;50039:39;;50047:8;50056:4;50047:14;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;50039:39;;;50031:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50135:10;50121:24;;:10;:24;;;50113:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;50189:74;50227:10;50248:4;50255:7;50196:4;50189:29;;;;:74;;;;;;:::i;:::-;50316:7;50274:18;:24;50293:4;50274:24;;;;;;;;;;;:38;;;:49;;;;;;;:::i;:::-;;;;;;;;50373:4;50361:10;50341:46;;;50379:7;50341:46;;;;;;:::i;:::-;;;;;;;;1934:1:::0;2886:7;:22;;;;49876:519;;:::o;45270:271::-;4991:12;:10;:12::i;:::-;4980:23;;:7;:5;:7::i;:::-;:23;;;4972:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45381:15:::1;45362:16;:34;45354:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45465:16;45447:15;:34;;;;45497:36;45516:16;45497:36;;;;;;:::i;:::-;;;;;;;;45270:271:::0;:::o;44963:299::-;4991:12;:10;:12::i;:::-;4980:23;;:7;:5;:7::i;:::-;:23;;;4972:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31834:12:::1;45051:14;:35;;45043:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45146:17;:15;:17::i;:::-;45192:14;45176:13;:30;;;;45222:32;45239:14;45222:32;;;;;;:::i;:::-;;;;;;;;44963:299:::0;:::o;45549:106::-;1978:1;2574:7;;:19;;2566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1978:1;2707:7;:18;;;;45619:28:::1;:26;:28::i;:::-;1934:1:::0;2886:7;:22;;;;45549:106::o;33966:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;32655:35::-;;;:::o;31962:46::-;;;:::o;35440:665::-;4991:12;:10;:12::i;:::-;4980:23;;:7;:5;:7::i;:::-;:23;;;4972:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35626:3:::1;35609:13;:20;;;;35601:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35697:8;:15;;;;35690:4;:22;35682:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35759:11;35755:61;;;35787:17;:15;:17::i;:::-;35755:61;35890:11;35862:8;35871:4;35862:14;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;35844:15;;:43;;;;:::i;:::-;:57;;;;:::i;:::-;35826:15;:75;;;;35940:11;35912:8;35921:4;35912:14;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:39;;;;35992:13;35962:8;35971:4;35962:14;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;36031:4;36023:74;36045:8;36054:4;36045:14;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;36070:11;36083:13;36023:74;;;;;;;;:::i;:::-;;;;;;;;35440:665:::0;;;;:::o;40398:1864::-;1978:1;2574:7;;:19;;2566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1978:1;2707:7;:18;;;;40494:8:::1;:15;;;;40487:4;:22;40479:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40550:21;40574:8;40583:4;40574:14;;;;;;;;;;;;;;;;;;;;;;;;;;40550:38;;40599:21;40623:8;:14;40632:4;40623:14;;;;;;;;;;;:26;40638:10;40623:26;;;;;;;;;;;;;;;40599:50;;40660:16;40671:4;40660:10;:16::i;:::-;40705:1;40691:4;:11;;;:15;40687:232;;;40723:15;40789:4;:15;;;40781:4;40757;:20;;;40743:4;:11;;;:34;;;;:::i;:::-;40742:43;;;;:::i;:::-;40741:63;;;;:::i;:::-;40723:81;;40833:1;40823:7;:11;40819:89;;;40855:37;40872:10;40884:7;40855:16;:37::i;:::-;40819:89;40687:232;;40945:1;40935:7;:11;40931:1198;;;41076:15;41094:4;:12;;;;;;;;;;;;41076:30;;41140:21;41164:8;:18;;;41191:4;41164:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41140:57;;41216:70;41250:10;41271:4;41278:7;41216:8;:25;;;;:70;;;;;;:::i;:::-;41351:13;41315:8;:18;;;41342:4;41315:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;:::i;:::-;41305:59;;41401:1;41391:7;:11;41383:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;40931:1198;41488:1;41468:4;:17;;;;;;;;;;;;:21;;;41464:654;;;41510:18;41563:5;41542:4;:17;;;;;;;;;;;;41532:27;;:7;:27;;;;:::i;:::-;41531:37;;;;:::i;:::-;41510:58;;41676:62;41698:10;41732:5;41724:4;41711:10;:17;;;;:::i;:::-;41710:27;;;;:::i;:::-;41676:8;:21;;;;:62;;;;;:::i;:::-;41823:5;41815:4;41802:10;:17;;;;:::i;:::-;41801:27;;;;:::i;:::-;41759:18;:24;41778:4;41759:24;;;;;;;;;;;:38;;;:69;;;;;;;:::i;:::-;;;;;;;;41887:10;41877:7;41863:4;:11;;;:21;;;;:::i;:::-;:34;;;;:::i;:::-;41849:4;:11;;:48;;;;41958:10;41948:7;41932:4;:13;;;:23;;;;:::i;:::-;:36;;;;:::i;:::-;41916:4;:13;;:52;;;;41464:654;;;;42037:7;42023:4;:11;;;:21;;;;:::i;:::-;42009:4;:11;;:35;;;;42095:7;42079:4;:13;;;:23;;;;:::i;:::-;42063:4;:13;;:39;;;;41464:654;40931:1198;;42198:4;42174;:20;;;42160:4;:11;;;:34;;;;:::i;:::-;42159:43;;;;:::i;:::-;42141:4;:15;;:61;;;;42240:4;42228:10;42220:34;;;42246:7;42220:34;;;;;;:::i;:::-;;;;;;;;2738:1;;1934::::0;2886:7;:22;;;;40398:1864;;:::o;47544:402::-;1978:1;2574:7;;:19;;2566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1978:1;2707:7;:18;;;;47619:46:::1;47657:7;47619:37;:46::i;:::-;47676:19;47706:21;47676:52;;47739:11;:28;;;47768:10;47788:4;47795:7;47739:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47840:10;47814:14;:23;47829:7;47814:23;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;47861:20;;:22;;;;;;;;;:::i;:::-;;;;;;47930:7;47918:10;47901:37;;;;;;;;;;;;2738:1;1934::::0;2886:7;:22;;;;47544:402;:::o;47954:940::-;1978:1;2574:7;;:19;;2566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1978:1;2707:7;:18;;;;48067:10:::1;48040:37;;:14;:23;48055:7;48040:23;;;;;;;;;;;;;;;;;;;;;:37;;;48032:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48144:1;48110:14;:23;48125:7;48110:23;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;48157:28;:26;:28::i;:::-;48281:11;48295:8;:15;;;;48281:29;;48326:11;48321:335;48349:3;48343;:9;48321:335;;;48376:21;48400:8;48409:3;48400:13;;;;;;;;;;;;;;;;;;;;;;;;;;48376:37;;48428:169;48480:10;48554:14;:19;48569:3;48554:19;;;;;;;;;;;:28;48574:7;48554:28;;;;;;;;;;;;48510:18;:23;48529:3;48510:23;;;;;;;;;;;:41;;;:72;;;;:::i;:::-;48428:4;:12;;;;;;;;;;;;:25;;;;:169;;;;;:::i;:::-;48643:1;48612:14;:19;48627:3;48612:19;;;;;;;;;;;:28;48632:7;48612:28;;;;;;;;;;;:32;;;;48321:335;48354:5;;;;;:::i;:::-;;;;48321:335;;;;48668:19;48698:21;48668:52;;48731:11;:28;;;48768:4;48775:10;48787:7;48731:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48806:20;;:22;;;;;;;;;:::i;:::-;;;;;;48878:7;48866:10;48846:40;;;;;;;;;;;;2738:1;;1934::::0;2886:7;:22;;;;47954:940;:::o;5660:192::-;4991:12;:10;:12::i;:::-;4980:23;;:7;:5;:7::i;:::-;:23;;;4972:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5769:1:::1;5749:22;;:8;:22;;;;5741:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5825:19;5835:8;5825:9;:19::i;:::-;5660:192:::0;:::o;31722:59::-;31764:17;31722:59;:::o;3548:98::-;3601:7;3628:10;3621:17;;3548:98;:::o;44059:449::-;44135:15;44160:4;44153:22;;;44184:4;44153:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44135:55;;44201:20;44254:7;44244;:17;44240:189;;;44303:4;44296:21;;;44318:3;44323:7;44296:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44278:53;;44240:189;;;44389:4;44382:21;;;44404:3;44409:7;44382:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44364:53;;44240:189;44447:15;44439:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44059:449;;;;:::o;24971:211::-;25088:86;25108:5;25138:23;;;25163:2;25167:5;25115:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25088:19;:86::i;:::-;24971:211;;;:::o;46022:457::-;46117:1;46094:20;;:24;46086:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46156:41;46200:18;:24;46219:4;46200:24;;;;;;;;;;;46156:68;;46235:22;46260:14;:28;;;46235:53;;46322:1;46305:14;:18;46301:171;;;46393:20;;46376:14;:37;;;;:::i;:::-;46340:14;:32;;;:73;;;;;;;:::i;:::-;;;;;;;;46459:1;46428:14;:28;;:32;;;;46301:171;46022:457;;;:::o;5860:173::-;5916:16;5935:6;;;;;;;;;;;5916:25;;5961:8;5952:6;;:17;;;;;;;;;;;;;;;;;;6016:8;5985:40;;6006:8;5985:40;;;;;;;;;;;;5860:173;;:::o;25190:248::-;25334:96;25354:5;25384:27;;;25413:4;25419:2;25423:5;25361:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25334:19;:96::i;:::-;25190:248;;;;:::o;45663:203::-;45720:14;45737:8;:15;;;;45720:32;;45768:11;45763:96;45791:6;45785:3;:12;45763:96;;;45821:26;45843:3;45821:21;:26::i;:::-;45799:5;;;;:::i;:::-;;;45763:96;;;;45663:203;:::o;46657:251::-;46741:14;46758:8;:15;;;;46741:32;;46789:11;46784:117;46812:6;46806:3;:12;46784:117;;;46842:47;46875:3;46880:8;46842:32;:47::i;:::-;46820:5;;;;:::i;:::-;;;46784:117;;;;46657:251;;:::o;27544:716::-;27968:23;27994:69;28022:4;27994:69;;;;;;;;;;;;;;;;;28002:5;27994:27;;;;:69;;;;;:::i;:::-;27968:95;;28098:1;28078:10;:17;:21;28074:179;;;28175:10;28164:30;;;;;;;;;;;;:::i;:::-;28156:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28074:179;27544:716;;;:::o;46916:620::-;47009:46;47058:18;:24;47077:4;47058:24;;;;;;;;;;;47009:73;;47093:22;47118:19;:33;;;47093:58;;47164:25;47192:19;:37;;;47164:65;;47261:1;47244:14;:18;:46;;;;;47289:1;47266:20;;:24;47244:46;47240:228;;;47384:20;;47367:14;:37;;;;:::i;:::-;47347:17;:57;;;;:::i;:::-;47307:19;:37;;:97;;;;47455:1;47419:19;:33;;:37;;;;47240:228;47511:17;47478:14;:20;47493:4;47478:20;;;;;;;;;;;:30;47499:8;47478:30;;;;;;;;;;;:50;;;;46916:620;;;;;:::o;9612:229::-;9749:12;9781:52;9803:6;9811:4;9817:1;9820:12;9781:21;:52::i;:::-;9774:59;;9612:229;;;;;:::o;10732:510::-;10902:12;10960:5;10935:21;:30;;10927:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11027:18;11038:6;11027:10;:18::i;:::-;11019:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11093:12;11107:23;11134:6;:11;;11153:5;11160:4;11134:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11092:73;;;;11183:51;11200:7;11209:10;11221:12;11183:16;:51::i;:::-;11176:58;;;;10732:510;;;;;;:::o;6806:387::-;6866:4;7074:12;7141:7;7129:20;7121:28;;7184:1;7177:4;:8;7170:15;;;6806:387;;;:::o;13418:712::-;13568:12;13597:7;13593:530;;;13628:10;13621:17;;;;13593:530;13762:1;13742:10;:17;:21;13738:374;;;13940:10;13934:17;14001:15;13988:10;13984:2;13980:19;13973:44;13888:148;14083:12;14076:20;;;;;;;;;;;:::i;:::-;;;;;;;;13418:712;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;724:6;718:13;709:22;;740:30;764:5;740:30;:::i;:::-;699:77;;;;:::o;795:271::-;;899:3;892:4;884:6;880:17;876:27;866:2;;917:1;914;907:12;866:2;957:6;944:20;982:78;1056:3;1048:6;1041:4;1033:6;1029:17;982:78;:::i;:::-;973:87;;856:210;;;;;:::o;1072:167::-;;1170:6;1157:20;1148:29;;1186:47;1227:5;1186:47;:::i;:::-;1138:101;;;;:::o;1245:137::-;;1328:6;1315:20;1306:29;;1344:32;1370:5;1344:32;:::i;:::-;1296:86;;;;:::o;1388:139::-;;1472:6;1459:20;1450:29;;1488:33;1515:5;1488:33;:::i;:::-;1440:87;;;;:::o;1533:143::-;;1621:6;1615:13;1606:22;;1637:33;1664:5;1637:33;:::i;:::-;1596:80;;;;:::o;1682:262::-;;1790:2;1778:9;1769:7;1765:23;1761:32;1758:2;;;1806:1;1803;1796:12;1758:2;1849:1;1874:53;1919:7;1910:6;1899:9;1895:22;1874:53;:::i;:::-;1864:63;;1820:117;1748:196;;;;:::o;1950:809::-;;;;;2118:3;2106:9;2097:7;2093:23;2089:33;2086:2;;;2135:1;2132;2125:12;2086:2;2178:1;2203:53;2248:7;2239:6;2228:9;2224:22;2203:53;:::i;:::-;2193:63;;2149:117;2305:2;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2276:118;2433:2;2459:53;2504:7;2495:6;2484:9;2480:22;2459:53;:::i;:::-;2449:63;;2404:118;2589:2;2578:9;2574:18;2561:32;2620:18;2612:6;2609:30;2606:2;;;2652:1;2649;2642:12;2606:2;2680:62;2734:7;2725:6;2714:9;2710:22;2680:62;:::i;:::-;2670:72;;2532:220;2076:683;;;;;;;:::o;2765:278::-;;2881:2;2869:9;2860:7;2856:23;2852:32;2849:2;;;2897:1;2894;2887:12;2849:2;2940:1;2965:61;3018:7;3009:6;2998:9;2994:22;2965:61;:::i;:::-;2955:71;;2911:125;2839:204;;;;:::o;3049:290::-;;3171:2;3159:9;3150:7;3146:23;3142:32;3139:2;;;3187:1;3184;3177:12;3139:2;3230:1;3255:67;3314:7;3305:6;3294:9;3290:22;3255:67;:::i;:::-;3245:77;;3201:131;3129:210;;;;:::o;3345:262::-;;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:284::-;;3732:2;3720:9;3711:7;3707:23;3703:32;3700:2;;;3748:1;3745;3738:12;3700:2;3791:1;3816:64;3872:7;3863:6;3852:9;3848:22;3816:64;:::i;:::-;3806:74;;3762:128;3690:207;;;;:::o;3903:407::-;;;4028:2;4016:9;4007:7;4003:23;3999:32;3996:2;;;4044:1;4041;4034:12;3996:2;4087:1;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4058:117;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3986:324;;;;;:::o;4316:718::-;;;;;4485:3;4473:9;4464:7;4460:23;4456:33;4453:2;;;4502:1;4499;4492:12;4453:2;4545:1;4570:53;4615:7;4606:6;4595:9;4591:22;4570:53;:::i;:::-;4560:63;;4516:117;4672:2;4698:67;4757:7;4748:6;4737:9;4733:22;4698:67;:::i;:::-;4688:77;;4643:132;4814:2;4840:52;4884:7;4875:6;4864:9;4860:22;4840:52;:::i;:::-;4830:62;;4785:117;4941:2;4967:50;5009:7;5000:6;4989:9;4985:22;4967:50;:::i;:::-;4957:60;;4912:115;4443:591;;;;;;;:::o;5040:407::-;;;5165:2;5153:9;5144:7;5140:23;5136:32;5133:2;;;5181:1;5178;5171:12;5133:2;5224:1;5249:53;5294:7;5285:6;5274:9;5270:22;5249:53;:::i;:::-;5239:63;;5195:117;5351:2;5377:53;5422:7;5413:6;5402:9;5398:22;5377:53;:::i;:::-;5367:63;;5322:118;5123:324;;;;;:::o;5453:690::-;;;;;5608:3;5596:9;5587:7;5583:23;5579:33;5576:2;;;5625:1;5622;5615:12;5576:2;5668:1;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5639:117;5795:2;5821:53;5866:7;5857:6;5846:9;5842:22;5821:53;:::i;:::-;5811:63;;5766:118;5923:2;5949:52;5993:7;5984:6;5973:9;5969:22;5949:52;:::i;:::-;5939:62;;5894:117;6050:2;6076:50;6118:7;6109:6;6098:9;6094:22;6076:50;:::i;:::-;6066:60;;6021:115;5566:577;;;;;;;:::o;6149:118::-;6236:24;6254:5;6236:24;:::i;:::-;6231:3;6224:37;6214:53;;:::o;6273:109::-;6354:21;6369:5;6354:21;:::i;:::-;6349:3;6342:34;6332:50;;:::o;6388:115::-;6473:23;6490:5;6473:23;:::i;:::-;6468:3;6461:36;6451:52;;:::o;6509:373::-;;6641:38;6673:5;6641:38;:::i;:::-;6695:88;6776:6;6771:3;6695:88;:::i;:::-;6688:95;;6792:52;6837:6;6832:3;6825:4;6818:5;6814:16;6792:52;:::i;:::-;6869:6;6864:3;6860:16;6853:23;;6617:265;;;;;:::o;6888:159::-;6989:51;7034:5;6989:51;:::i;:::-;6984:3;6977:64;6967:80;;:::o;7053:364::-;;7169:39;7202:5;7169:39;:::i;:::-;7224:71;7288:6;7283:3;7224:71;:::i;:::-;7217:78;;7304:52;7349:6;7344:3;7337:4;7330:5;7326:16;7304:52;:::i;:::-;7381:29;7403:6;7381:29;:::i;:::-;7376:3;7372:39;7365:46;;7145:272;;;;;:::o;7423:369::-;;7586:67;7650:2;7645:3;7586:67;:::i;:::-;7579:74;;7683:34;7679:1;7674:3;7670:11;7663:55;7749:7;7744:2;7739:3;7735:12;7728:29;7783:2;7778:3;7774:12;7767:19;;7569:223;;;:::o;7798:317::-;;7961:67;8025:2;8020:3;7961:67;:::i;:::-;7954:74;;8058:21;8054:1;8049:3;8045:11;8038:42;8106:2;8101:3;8097:12;8090:19;;7944:171;;;:::o;8121:370::-;;8284:67;8348:2;8343:3;8284:67;:::i;:::-;8277:74;;8381:34;8377:1;8372:3;8368:11;8361:55;8447:8;8442:2;8437:3;8433:12;8426:30;8482:2;8477:3;8473:12;8466:19;;8267:224;;;:::o;8497:312::-;;8660:67;8724:2;8719:3;8660:67;:::i;:::-;8653:74;;8757:16;8753:1;8748:3;8744:11;8737:37;8800:2;8795:3;8791:12;8784:19;;8643:166;;;:::o;8815:323::-;;8978:67;9042:2;9037:3;8978:67;:::i;:::-;8971:74;;9075:27;9071:1;9066:3;9062:11;9055:48;9129:2;9124:3;9120:12;9113:19;;8961:177;;;:::o;9144:374::-;;9307:67;9371:2;9366:3;9307:67;:::i;:::-;9300:74;;9404:34;9400:1;9395:3;9391:11;9384:55;9470:12;9465:2;9460:3;9456:12;9449:34;9509:2;9504:3;9500:12;9493:19;;9290:228;;;:::o;9524:315::-;;9687:67;9751:2;9746:3;9687:67;:::i;:::-;9680:74;;9784:19;9780:1;9775:3;9771:11;9764:40;9830:2;9825:3;9821:12;9814:19;;9670:169;;;:::o;9845:323::-;;10008:67;10072:2;10067:3;10008:67;:::i;:::-;10001:74;;10105:27;10101:1;10096:3;10092:11;10085:48;10159:2;10154:3;10150:12;10143:19;;9991:177;;;:::o;10174:318::-;;10337:67;10401:2;10396:3;10337:67;:::i;:::-;10330:74;;10434:22;10430:1;10425:3;10421:11;10414:43;10483:2;10478:3;10474:12;10467:19;;10320:172;;;:::o;10498:370::-;;10661:67;10725:2;10720:3;10661:67;:::i;:::-;10654:74;;10758:34;10754:1;10749:3;10745:11;10738:55;10824:8;10819:2;10814:3;10810:12;10803:30;10859:2;10854:3;10850:12;10843:19;;10644:224;;;:::o;10874:365::-;;11037:67;11101:2;11096:3;11037:67;:::i;:::-;11030:74;;11134:34;11130:1;11125:3;11121:11;11114:55;11200:3;11195:2;11190:3;11186:12;11179:25;11230:2;11225:3;11221:12;11214:19;;11020:219;;;:::o;11245:367::-;;11408:67;11472:2;11467:3;11408:67;:::i;:::-;11401:74;;11505:34;11501:1;11496:3;11492:11;11485:55;11571:5;11566:2;11561:3;11557:12;11550:27;11603:2;11598:3;11594:12;11587:19;;11391:221;;;:::o;11618:365::-;;11781:67;11845:2;11840:3;11781:67;:::i;:::-;11774:74;;11878:34;11874:1;11869:3;11865:11;11858:55;11944:3;11939:2;11934:3;11930:12;11923:25;11974:2;11969:3;11965:12;11958:19;;11764:219;;;:::o;11989:324::-;;12152:67;12216:2;12211:3;12152:67;:::i;:::-;12145:74;;12249:28;12245:1;12240:3;12236:11;12229:49;12304:2;12299:3;12295:12;12288:19;;12135:178;;;:::o;12319:369::-;;12482:67;12546:2;12541:3;12482:67;:::i;:::-;12475:74;;12579:34;12575:1;12570:3;12566:11;12559:55;12645:7;12640:2;12635:3;12631:12;12624:29;12679:2;12674:3;12670:12;12663:19;;12465:223;;;:::o;12694:386::-;;12857:67;12921:2;12916:3;12857:67;:::i;:::-;12850:74;;12954:34;12950:1;12945:3;12941:11;12934:55;13020:24;13015:2;13010:3;13006:12;12999:46;13071:2;13066:3;13062:12;13055:19;;12840:240;;;:::o;13086:330::-;;13249:67;13313:2;13308:3;13249:67;:::i;:::-;13242:74;;13346:34;13342:1;13337:3;13333:11;13326:55;13407:2;13402:3;13398:12;13391:19;;13232:184;;;:::o;13422:316::-;;13585:67;13649:2;13644:3;13585:67;:::i;:::-;13578:74;;13682:20;13678:1;13673:3;13669:11;13662:41;13729:2;13724:3;13720:12;13713:19;;13568:170;;;:::o;13744:317::-;;13907:67;13971:2;13966:3;13907:67;:::i;:::-;13900:74;;14004:21;14000:1;13995:3;13991:11;13984:42;14052:2;14047:3;14043:12;14036:19;;13890:171;;;:::o;14067:327::-;;14230:67;14294:2;14289:3;14230:67;:::i;:::-;14223:74;;14327:31;14323:1;14318:3;14314:11;14307:52;14385:2;14380:3;14376:12;14369:19;;14213:181;;;:::o;14400:323::-;;14563:67;14627:2;14622:3;14563:67;:::i;:::-;14556:74;;14660:27;14656:1;14651:3;14647:11;14640:48;14714:2;14709:3;14705:12;14698:19;;14546:177;;;:::o;14729:381::-;;14892:67;14956:2;14951:3;14892:67;:::i;:::-;14885:74;;14989:34;14985:1;14980:3;14976:11;14969:55;15055:19;15050:2;15045:3;15041:12;15034:41;15101:2;15096:3;15092:12;15085:19;;14875:235;;;:::o;15116:374::-;;15279:67;15343:2;15338:3;15279:67;:::i;:::-;15272:74;;15376:34;15372:1;15367:3;15363:11;15356:55;15442:12;15437:2;15432:3;15428:12;15421:34;15481:2;15476:3;15472:12;15465:19;;15262:228;;;:::o;15496:329::-;;15659:67;15723:2;15718:3;15659:67;:::i;:::-;15652:74;;15756:33;15752:1;15747:3;15743:11;15736:54;15816:2;15811:3;15807:12;15800:19;;15642:183;;;:::o;15831:318::-;;15994:67;16058:2;16053:3;15994:67;:::i;:::-;15987:74;;16091:22;16087:1;16082:3;16078:11;16071:43;16140:2;16135:3;16131:12;16124:19;;15977:172;;;:::o;16155:115::-;16240:23;16257:5;16240:23;:::i;:::-;16235:3;16228:36;16218:52;;:::o;16276:129::-;16362:36;16392:5;16362:36;:::i;:::-;16357:3;16350:49;16340:65;;:::o;16411:118::-;16498:24;16516:5;16498:24;:::i;:::-;16493:3;16486:37;16476:53;;:::o;16535:271::-;;16687:93;16776:3;16767:6;16687:93;:::i;:::-;16680:100;;16797:3;16790:10;;16669:137;;;;:::o;16812:222::-;;16943:2;16932:9;16928:18;16920:26;;16956:71;17024:1;17013:9;17009:17;17000:6;16956:71;:::i;:::-;16910:124;;;;:::o;17040:442::-;;17227:2;17216:9;17212:18;17204:26;;17240:71;17308:1;17297:9;17293:17;17284:6;17240:71;:::i;:::-;17321:72;17389:2;17378:9;17374:18;17365:6;17321:72;:::i;:::-;17403;17471:2;17460:9;17456:18;17447:6;17403:72;:::i;:::-;17194:288;;;;;;:::o;17488:332::-;;17647:2;17636:9;17632:18;17624:26;;17660:71;17728:1;17717:9;17713:17;17704:6;17660:71;:::i;:::-;17741:72;17809:2;17798:9;17794:18;17785:6;17741:72;:::i;:::-;17614:206;;;;;:::o;17826:440::-;;18012:2;18001:9;17997:18;17989:26;;18025:71;18093:1;18082:9;18078:17;18069:6;18025:71;:::i;:::-;18106:72;18174:2;18163:9;18159:18;18150:6;18106:72;:::i;:::-;18188:71;18255:2;18244:9;18240:18;18231:6;18188:71;:::i;:::-;17979:287;;;;;;:::o;18272:210::-;;18397:2;18386:9;18382:18;18374:26;;18410:65;18472:1;18461:9;18457:17;18448:6;18410:65;:::i;:::-;18364:118;;;;:::o;18488:218::-;;18617:2;18606:9;18602:18;18594:26;;18630:69;18696:1;18685:9;18681:17;18672:6;18630:69;:::i;:::-;18584:122;;;;:::o;18712:799::-;;18995:3;18984:9;18980:19;18972:27;;19009:85;19091:1;19080:9;19076:17;19067:6;19009:85;:::i;:::-;19104:72;19172:2;19161:9;19157:18;19148:6;19104:72;:::i;:::-;19186;19254:2;19243:9;19239:18;19230:6;19186:72;:::i;:::-;19268;19336:2;19325:9;19321:18;19312:6;19268:72;:::i;:::-;19350:71;19416:3;19405:9;19401:19;19392:6;19350:71;:::i;:::-;19431:73;19499:3;19488:9;19484:19;19475:6;19431:73;:::i;:::-;18962:549;;;;;;;;;:::o;19517:313::-;;19668:2;19657:9;19653:18;19645:26;;19717:9;19711:4;19707:20;19703:1;19692:9;19688:17;19681:47;19745:78;19818:4;19809:6;19745:78;:::i;:::-;19737:86;;19635:195;;;;:::o;19836:419::-;;20040:2;20029:9;20025:18;20017:26;;20089:9;20083:4;20079:20;20075:1;20064:9;20060:17;20053:47;20117:131;20243:4;20117:131;:::i;:::-;20109:139;;20007:248;;;:::o;20261:419::-;;20465:2;20454:9;20450:18;20442:26;;20514:9;20508:4;20504:20;20500:1;20489:9;20485:17;20478:47;20542:131;20668:4;20542:131;:::i;:::-;20534:139;;20432:248;;;:::o;20686:419::-;;20890:2;20879:9;20875:18;20867:26;;20939:9;20933:4;20929:20;20925:1;20914:9;20910:17;20903:47;20967:131;21093:4;20967:131;:::i;:::-;20959:139;;20857:248;;;:::o;21111:419::-;;21315:2;21304:9;21300:18;21292:26;;21364:9;21358:4;21354:20;21350:1;21339:9;21335:17;21328:47;21392:131;21518:4;21392:131;:::i;:::-;21384:139;;21282:248;;;:::o;21536:419::-;;21740:2;21729:9;21725:18;21717:26;;21789:9;21783:4;21779:20;21775:1;21764:9;21760:17;21753:47;21817:131;21943:4;21817:131;:::i;:::-;21809:139;;21707:248;;;:::o;21961:419::-;;22165:2;22154:9;22150:18;22142:26;;22214:9;22208:4;22204:20;22200:1;22189:9;22185:17;22178:47;22242:131;22368:4;22242:131;:::i;:::-;22234:139;;22132:248;;;:::o;22386:419::-;;22590:2;22579:9;22575:18;22567:26;;22639:9;22633:4;22629:20;22625:1;22614:9;22610:17;22603:47;22667:131;22793:4;22667:131;:::i;:::-;22659:139;;22557:248;;;:::o;22811:419::-;;23015:2;23004:9;23000:18;22992:26;;23064:9;23058:4;23054:20;23050:1;23039:9;23035:17;23028:47;23092:131;23218:4;23092:131;:::i;:::-;23084:139;;22982:248;;;:::o;23236:419::-;;23440:2;23429:9;23425:18;23417:26;;23489:9;23483:4;23479:20;23475:1;23464:9;23460:17;23453:47;23517:131;23643:4;23517:131;:::i;:::-;23509:139;;23407:248;;;:::o;23661:419::-;;23865:2;23854:9;23850:18;23842:26;;23914:9;23908:4;23904:20;23900:1;23889:9;23885:17;23878:47;23942:131;24068:4;23942:131;:::i;:::-;23934:139;;23832:248;;;:::o;24086:419::-;;24290:2;24279:9;24275:18;24267:26;;24339:9;24333:4;24329:20;24325:1;24314:9;24310:17;24303:47;24367:131;24493:4;24367:131;:::i;:::-;24359:139;;24257:248;;;:::o;24511:419::-;;24715:2;24704:9;24700:18;24692:26;;24764:9;24758:4;24754:20;24750:1;24739:9;24735:17;24728:47;24792:131;24918:4;24792:131;:::i;:::-;24784:139;;24682:248;;;:::o;24936:419::-;;25140:2;25129:9;25125:18;25117:26;;25189:9;25183:4;25179:20;25175:1;25164:9;25160:17;25153:47;25217:131;25343:4;25217:131;:::i;:::-;25209:139;;25107:248;;;:::o;25361:419::-;;25565:2;25554:9;25550:18;25542:26;;25614:9;25608:4;25604:20;25600:1;25589:9;25585:17;25578:47;25642:131;25768:4;25642:131;:::i;:::-;25634:139;;25532:248;;;:::o;25786:419::-;;25990:2;25979:9;25975:18;25967:26;;26039:9;26033:4;26029:20;26025:1;26014:9;26010:17;26003:47;26067:131;26193:4;26067:131;:::i;:::-;26059:139;;25957:248;;;:::o;26211:419::-;;26415:2;26404:9;26400:18;26392:26;;26464:9;26458:4;26454:20;26450:1;26439:9;26435:17;26428:47;26492:131;26618:4;26492:131;:::i;:::-;26484:139;;26382:248;;;:::o;26636:419::-;;26840:2;26829:9;26825:18;26817:26;;26889:9;26883:4;26879:20;26875:1;26864:9;26860:17;26853:47;26917:131;27043:4;26917:131;:::i;:::-;26909:139;;26807:248;;;:::o;27061:419::-;;27265:2;27254:9;27250:18;27242:26;;27314:9;27308:4;27304:20;27300:1;27289:9;27285:17;27278:47;27342:131;27468:4;27342:131;:::i;:::-;27334:139;;27232:248;;;:::o;27486:419::-;;27690:2;27679:9;27675:18;27667:26;;27739:9;27733:4;27729:20;27725:1;27714:9;27710:17;27703:47;27767:131;27893:4;27767:131;:::i;:::-;27759:139;;27657:248;;;:::o;27911:419::-;;28115:2;28104:9;28100:18;28092:26;;28164:9;28158:4;28154:20;28150:1;28139:9;28135:17;28128:47;28192:131;28318:4;28192:131;:::i;:::-;28184:139;;28082:248;;;:::o;28336:419::-;;28540:2;28529:9;28525:18;28517:26;;28589:9;28583:4;28579:20;28575:1;28564:9;28560:17;28553:47;28617:131;28743:4;28617:131;:::i;:::-;28609:139;;28507:248;;;:::o;28761:419::-;;28965:2;28954:9;28950:18;28942:26;;29014:9;29008:4;29004:20;29000:1;28989:9;28985:17;28978:47;29042:131;29168:4;29042:131;:::i;:::-;29034:139;;28932:248;;;:::o;29186:419::-;;29390:2;29379:9;29375:18;29367:26;;29439:9;29433:4;29429:20;29425:1;29414:9;29410:17;29403:47;29467:131;29593:4;29467:131;:::i;:::-;29459:139;;29357:248;;;:::o;29611:419::-;;29815:2;29804:9;29800:18;29792:26;;29864:9;29858:4;29854:20;29850:1;29839:9;29835:17;29828:47;29892:131;30018:4;29892:131;:::i;:::-;29884:139;;29782:248;;;:::o;30036:419::-;;30240:2;30229:9;30225:18;30217:26;;30289:9;30283:4;30279:20;30275:1;30264:9;30260:17;30253:47;30317:131;30443:4;30317:131;:::i;:::-;30309:139;;30207:248;;;:::o;30461:222::-;;30592:2;30581:9;30577:18;30569:26;;30605:71;30673:1;30662:9;30658:17;30649:6;30605:71;:::i;:::-;30559:124;;;;:::o;30689:332::-;;30848:2;30837:9;30833:18;30825:26;;30861:71;30929:1;30918:9;30914:17;30905:6;30861:71;:::i;:::-;30942:72;31010:2;30999:9;30995:18;30986:6;30942:72;:::i;:::-;30815:206;;;;;:::o;31027:283::-;;31093:2;31087:9;31077:19;;31135:4;31127:6;31123:17;31242:6;31230:10;31227:22;31206:18;31194:10;31191:34;31188:62;31185:2;;;31253:18;;:::i;:::-;31185:2;31293:10;31289:2;31282:22;31067:243;;;;:::o;31316:331::-;;31467:18;31459:6;31456:30;31453:2;;;31489:18;;:::i;:::-;31453:2;31574:4;31570:9;31563:4;31555:6;31551:17;31547:33;31539:41;;31635:4;31629;31625:15;31617:23;;31382:265;;;:::o;31653:98::-;;31738:5;31732:12;31722:22;;31711:40;;;:::o;31757:99::-;;31843:5;31837:12;31827:22;;31816:40;;;:::o;31862:147::-;;32000:3;31985:18;;31975:34;;;;:::o;32015:169::-;;32133:6;32128:3;32121:19;32173:4;32168:3;32164:14;32149:29;;32111:73;;;;:::o;32190:305::-;;32249:20;32267:1;32249:20;:::i;:::-;32244:25;;32283:20;32301:1;32283:20;:::i;:::-;32278:25;;32437:1;32369:66;32365:74;32362:1;32359:81;32356:2;;;32443:18;;:::i;:::-;32356:2;32487:1;32484;32480:9;32473:16;;32234:261;;;;:::o;32501:185::-;;32558:20;32576:1;32558:20;:::i;:::-;32553:25;;32592:20;32610:1;32592:20;:::i;:::-;32587:25;;32631:1;32621:2;;32636:18;;:::i;:::-;32621:2;32678:1;32675;32671:9;32666:14;;32543:143;;;;:::o;32692:348::-;;32755:20;32773:1;32755:20;:::i;:::-;32750:25;;32789:20;32807:1;32789:20;:::i;:::-;32784:25;;32977:1;32909:66;32905:74;32902:1;32899:81;32894:1;32887:9;32880:17;32876:105;32873:2;;;32984:18;;:::i;:::-;32873:2;33032:1;33029;33025:9;33014:20;;32740:300;;;;:::o;33046:191::-;;33106:20;33124:1;33106:20;:::i;:::-;33101:25;;33140:20;33158:1;33140:20;:::i;:::-;33135:25;;33179:1;33176;33173:8;33170:2;;;33184:18;;:::i;:::-;33170:2;33229:1;33226;33222:9;33214:17;;33091:146;;;;:::o;33243:96::-;;33309:24;33327:5;33309:24;:::i;:::-;33298:35;;33288:51;;;:::o;33345:90::-;;33422:5;33415:13;33408:21;33397:32;;33387:48;;;:::o;33441:149::-;;33517:66;33510:5;33506:78;33495:89;;33485:105;;;:::o;33596:110::-;;33676:24;33694:5;33676:24;:::i;:::-;33665:35;;33655:51;;;:::o;33712:89::-;;33788:6;33781:5;33777:18;33766:29;;33756:45;;;:::o;33807:126::-;;33884:42;33877:5;33873:54;33862:65;;33852:81;;;:::o;33939:77::-;;34005:5;33994:16;;33984:32;;;:::o;34022:154::-;;34119:51;34164:5;34119:51;:::i;:::-;34106:64;;34096:80;;;:::o;34182:127::-;;34279:24;34297:5;34279:24;:::i;:::-;34266:37;;34256:53;;;:::o;34315:111::-;;34397:23;34414:5;34397:23;:::i;:::-;34384:36;;34374:52;;;:::o;34432:154::-;34516:6;34511:3;34506;34493:30;34578:1;34569:6;34564:3;34560:16;34553:27;34483:103;;;:::o;34592:307::-;34660:1;34670:113;34684:6;34681:1;34678:13;34670:113;;;34769:1;34764:3;34760:11;34754:18;34750:1;34745:3;34741:11;34734:39;34706:2;34703:1;34699:10;34694:15;;34670:113;;;34801:6;34798:1;34795:13;34792:2;;;34881:1;34872:6;34867:3;34863:16;34856:27;34792:2;34641:258;;;;:::o;34905:171::-;;34967:24;34985:5;34967:24;:::i;:::-;34958:33;;35013:4;35006:5;35003:15;35000:2;;;35021:18;;:::i;:::-;35000:2;35068:1;35061:5;35057:13;35050:20;;34948:128;;;:::o;35082:233::-;;35144:24;35162:5;35144:24;:::i;:::-;35135:33;;35190:66;35183:5;35180:77;35177:2;;;35260:18;;:::i;:::-;35177:2;35307:1;35300:5;35296:13;35289:20;;35125:190;;;:::o;35321:180::-;35369:77;35366:1;35359:88;35466:4;35463:1;35456:15;35490:4;35487:1;35480:15;35507:180;35555:77;35552:1;35545:88;35652:4;35649:1;35642:15;35676:4;35673:1;35666:15;35693:180;35741:77;35738:1;35731:88;35838:4;35835:1;35828:15;35862:4;35859:1;35852:15;35879:102;;35971:2;35967:7;35962:2;35955:5;35951:14;35947:28;35937:38;;35927:54;;;:::o;35987:122::-;36060:24;36078:5;36060:24;:::i;:::-;36053:5;36050:35;36040:2;;36099:1;36096;36089:12;36040:2;36030:79;:::o;36115:116::-;36185:21;36200:5;36185:21;:::i;:::-;36178:5;36175:32;36165:2;;36221:1;36218;36211:12;36165:2;36155:76;:::o;36237:150::-;36324:38;36356:5;36324:38;:::i;:::-;36317:5;36314:49;36304:2;;36377:1;36374;36367:12;36304:2;36294:93;:::o;36393:120::-;36465:23;36482:5;36465:23;:::i;:::-;36458:5;36455:34;36445:2;;36503:1;36500;36493:12;36445:2;36435:78;:::o;36519:122::-;36592:24;36610:5;36592:24;:::i;:::-;36585:5;36582:35;36572:2;;36631:1;36628;36621:12;36572:2;36562:79;:::o
Swarm Source
ipfs://46ed3e08e709819a98c2ccd9185ef7514366d7648fab45f769b9942716b94127
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.