More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 34 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transmute Claim ... | 19887974 | 70 days ago | IN | 0 ETH | 0.00048505 | ||||
Stake | 19887951 | 70 days ago | IN | 0 ETH | 0.00065248 | ||||
Transmute Claim ... | 19380398 | 141 days ago | IN | 0 ETH | 0.00785678 | ||||
Stake | 19380390 | 141 days ago | IN | 0 ETH | 0.0076527 | ||||
Transmute And Cl... | 18588740 | 252 days ago | IN | 0 ETH | 0.00263016 | ||||
Stake | 18588730 | 252 days ago | IN | 0 ETH | 0.00432539 | ||||
Transmute Claim ... | 18163542 | 311 days ago | IN | 0 ETH | 0.00272928 | ||||
Stake | 17716262 | 374 days ago | IN | 0 ETH | 0.00287408 | ||||
Transmute Claim ... | 16713158 | 515 days ago | IN | 0 ETH | 0.00301302 | ||||
Stake | 16618492 | 529 days ago | IN | 0 ETH | 0.00263472 | ||||
Transmute And Cl... | 15838437 | 637 days ago | IN | 0 ETH | 0.00093876 | ||||
Stake | 15837700 | 638 days ago | IN | 0 ETH | 0.00156056 | ||||
Transmute Claim ... | 15356251 | 709 days ago | IN | 0 ETH | 0.00227791 | ||||
Stake | 15242100 | 727 days ago | IN | 0 ETH | 0.0012253 | ||||
Transmute And Cl... | 15152975 | 740 days ago | IN | 0 ETH | 0.00153219 | ||||
Stake | 15152952 | 740 days ago | IN | 0 ETH | 0.00153828 | ||||
Transmute And Cl... | 15152941 | 740 days ago | IN | 0 ETH | 0.00263082 | ||||
Stake | 15152927 | 740 days ago | IN | 0 ETH | 0.00233193 | ||||
Transmute Claim ... | 15141576 | 742 days ago | IN | 0 ETH | 0.00356287 | ||||
Force Transmute | 15141570 | 742 days ago | IN | 0 ETH | 0.00297245 | ||||
Stake | 15141559 | 742 days ago | IN | 0 ETH | 0.00230408 | ||||
Stake | 15135227 | 743 days ago | IN | 0 ETH | 0.00940566 | ||||
Transmute Claim ... | 15115104 | 746 days ago | IN | 0 ETH | 0.00334351 | ||||
Force Transmute | 15115093 | 746 days ago | IN | 0 ETH | 0.00365789 | ||||
Stake | 15111471 | 747 days ago | IN | 0 ETH | 0.00438235 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MigratableTransmuterV3
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-17 */ /** *Submitted for verification at Etherscan.io on 2021-04-24 */ // Sources flattened with hardhat v2.1.1 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/GSN/[email protected] pragma solidity >=0.6.0 <0.8.0; // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <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/math/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.2 <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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <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 SafeMath for uint256; 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' // solhint-disable-next-line max-line-length 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).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _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 // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/interfaces/IERC20Burnable.sol pragma solidity ^0.6.8; interface IERC20Burnable is IERC20 { function burn(uint256 amount) external; function burnFrom(address account, uint256 amount) external; } // File contracts/interfaces/ITransmuter.sol pragma solidity ^0.6.12; interface ITransmuter { function distribute (address origin, uint256 amount) external; } // File hardhat/[email protected] pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } } // File contracts/MigratableTransmuterV3.sol pragma solidity 0.6.12; /** * @dev Implementation of the {IERC20Burnable} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20Burnable-approve}. */ contract MigratableTransmuterV3 is Context { using SafeMath for uint256; using SafeERC20 for IERC20Burnable; using Address for address; address public constant ZERO_ADDRESS = address(0); uint256 public TRANSMUTATION_PERIOD; address public WaToken; address public Token; mapping(address => uint256) public depositedWaTokens; mapping(address => uint256) public tokensInBucket; mapping(address => uint256) public realisedTokens; mapping(address => uint256) public lastDividendPoints; mapping(address => bool) public userIsKnown; mapping(uint256 => address) public userList; uint256 public nextUser; uint256 public totalSupplyWaTokens; uint256 public buffer; uint256 public lastDepositBlock; ///@dev values needed to calculate the distribution of base asset in proportion for waTokens staked uint256 public pointMultiplier = 10e18; uint256 public totalDividendPoints; uint256 public unclaimedDividends; /// @dev alchemist addresses whitelisted mapping (address => bool) public whiteList; /// @dev The address of the account which currently has administrative capabilities over this contract. address public governance; /// @dev The address of the pending governance. address public pendingGovernance; /// @dev A flag indicating if deposits and flushes should be halted and if all parties should be able to recall /// from the active vault. bool public pause; event GovernanceUpdated( address governance ); event PendingGovernanceUpdated( address pendingGovernance ); event TransmuterPeriodUpdated( uint256 newTransmutationPeriod ); event PauseUpdated( bool status ); event MigrationComplete( address migrateTo, uint256 fundsMigrated ); constructor(address _WaToken, address _Token, address _governance) public { require(_governance != ZERO_ADDRESS, "MigratableTransmuterV3: 0 gov"); governance = _governance; WaToken = _WaToken; Token = _Token; TRANSMUTATION_PERIOD = 50; } ///@return displays the user's share of the pooled waTokens. function dividendsOwing(address account) public view returns (uint256) { uint256 newDividendPoints = totalDividendPoints.sub(lastDividendPoints[account]); return depositedWaTokens[account].mul(newDividendPoints).div(pointMultiplier); } ///@dev modifier to fill the bucket and keep bookkeeping correct incase of increase/decrease in shares modifier updateAccount(address account) { uint256 owing = dividendsOwing(account); if (owing > 0) { unclaimedDividends = unclaimedDividends.sub(owing); tokensInBucket[account] = tokensInBucket[account].add(owing); } lastDividendPoints[account] = totalDividendPoints; _; } ///@dev modifier add users to userlist. Users are indexed in order to keep track of when a bond has been filled modifier checkIfNewUser() { if (!userIsKnown[msg.sender]) { userList[nextUser] = msg.sender; userIsKnown[msg.sender] = true; nextUser++; } _; } ///@dev run the phased distribution of the buffered funds modifier runPhasedDistribution() { uint256 _lastDepositBlock = lastDepositBlock; uint256 _currentBlock = block.number; uint256 _toDistribute = 0; uint256 _buffer = buffer; // check if there is something in bufffer if (_buffer > 0) { // NOTE: if last deposit was updated in the same block as the current call // then the below logic gates will fail //calculate diffrence in time uint256 deltaTime = _currentBlock.sub(_lastDepositBlock); // distribute all if bigger than timeframe if(deltaTime >= TRANSMUTATION_PERIOD) { _toDistribute = _buffer; } else { //needs to be bigger than 0 cuzz solidity no decimals if(_buffer.mul(deltaTime) > TRANSMUTATION_PERIOD) { _toDistribute = _buffer.mul(deltaTime).div(TRANSMUTATION_PERIOD); } } // factually allocate if any needs distribution if(_toDistribute > 0){ // remove from buffer buffer = _buffer.sub(_toDistribute); // increase the allocation increaseAllocations(_toDistribute); } } // current timeframe is now the last lastDepositBlock = _currentBlock; _; } /// @dev A modifier which checks if whitelisted for minting. modifier onlyWhitelisted() { require(whiteList[msg.sender], "MigratableTransmuterV3: !whitelisted"); _; } /// @dev Checks that the current message sender or caller is the governance address. /// /// modifier onlyGov() { require(msg.sender == governance, "MigratableTransmuterV3: !governance"); _; } ///@dev set the TRANSMUTATION_PERIOD variable /// /// sets the length (in blocks) of one full distribution phase function setTransmutationPeriod(uint256 newTransmutationPeriod) public onlyGov() { TRANSMUTATION_PERIOD = newTransmutationPeriod; emit TransmuterPeriodUpdated(TRANSMUTATION_PERIOD); } ///@dev claims the base token after it has been transmuted /// ///This function reverts if there is no realisedToken balance function claim() public { address sender = msg.sender; require(realisedTokens[sender] > 0); uint256 value = realisedTokens[sender]; realisedTokens[sender] = 0; IERC20Burnable(Token).transfer(sender, value); } ///@dev Withdraws staked waTokens from the transmuter /// /// This function reverts if you try to draw more tokens than you deposited /// ///@param amount the amount of waTokens to unstake function unstake(uint256 amount) public updateAccount(msg.sender) { // by calling this function before transmuting you forfeit your gained allocation address sender = msg.sender; require(depositedWaTokens[sender] >= amount,"MigratableTransmuterV3: unstake amount exceeds deposited amount"); depositedWaTokens[sender] = depositedWaTokens[sender].sub(amount); totalSupplyWaTokens = totalSupplyWaTokens.sub(amount); IERC20Burnable(WaToken).safeTransfer(sender, amount); } ///@dev Deposits waTokens into the transmuter /// ///@param amount the amount of waTokens to stake function stake(uint256 amount) public runPhasedDistribution() updateAccount(msg.sender) checkIfNewUser() { require(!pause, "emergency pause enabled"); // requires approval of waToken first address sender = msg.sender; //require tokens transferred in; IERC20Burnable(WaToken).safeTransferFrom(sender, address(this), amount); totalSupplyWaTokens = totalSupplyWaTokens.add(amount); depositedWaTokens[sender] = depositedWaTokens[sender].add(amount); } /// @dev Converts the staked waTokens to the base tokens in amount of the sum of pendingdivs and tokensInBucket /// /// once the waToken has been converted, it is burned, and the base token becomes realisedTokens which can be recieved using claim() /// /// reverts if there are no pendingdivs or tokensInBucket function transmute() public runPhasedDistribution() updateAccount(msg.sender) { address sender = msg.sender; uint256 pendingz = tokensInBucket[sender]; uint256 diff; require(pendingz > 0, "need to have pending in bucket"); tokensInBucket[sender] = 0; // check bucket overflow if (pendingz > depositedWaTokens[sender]) { diff = pendingz.sub(depositedWaTokens[sender]); // remove overflow pendingz = depositedWaTokens[sender]; } // decrease watokens depositedWaTokens[sender] = depositedWaTokens[sender].sub(pendingz); // BURN WATOKENS IERC20Burnable(WaToken).burn(pendingz); // adjust total totalSupplyWaTokens = totalSupplyWaTokens.sub(pendingz); // reallocate overflow increaseAllocations(diff); // add payout realisedTokens[sender] = realisedTokens[sender].add(pendingz); } /// @dev Executes transmute() on another account that has had more base tokens allocated to it than waTokens staked. /// /// The caller of this function will have the surlus base tokens credited to their tokensInBucket balance, rewarding them for performing this action /// /// This function reverts if the address to transmute is not over-filled. /// /// @param toTransmute address of the account you will force transmute. function forceTransmute(address toTransmute) public runPhasedDistribution() updateAccount(msg.sender) updateAccount(toTransmute) { //load into memory address sender = msg.sender; uint256 pendingz = tokensInBucket[toTransmute]; // check restrictions require( pendingz > depositedWaTokens[toTransmute], "MigratableTransmuterV3: !overflow" ); // empty bucket tokensInBucket[toTransmute] = 0; // calculaate diffrence uint256 diff = pendingz.sub(depositedWaTokens[toTransmute]); // remove overflow pendingz = depositedWaTokens[toTransmute]; // decrease waTokens depositedWaTokens[toTransmute] = 0; // BURN WATOKENS IERC20Burnable(WaToken).burn(pendingz); // adjust total totalSupplyWaTokens = totalSupplyWaTokens.sub(pendingz); // reallocate overflow tokensInBucket[sender] = tokensInBucket[sender].add(diff); // add payout realisedTokens[toTransmute] = realisedTokens[toTransmute].add(pendingz); // force payout of realised tokens of the toTransmute address if (realisedTokens[toTransmute] > 0) { uint256 value = realisedTokens[toTransmute]; realisedTokens[toTransmute] = 0; IERC20Burnable(Token).safeTransfer(toTransmute, value); } } /// @dev Transmutes and unstakes all waTokens /// /// This function combines the transmute and unstake functions for ease of use function exit() public { transmute(); uint256 toWithdraw = depositedWaTokens[msg.sender]; unstake(toWithdraw); } /// @dev Transmutes and claims all converted base tokens. /// /// This function combines the transmute and claim functions while leaving your remaining WaTokens staked. function transmuteAndClaim() public { transmute(); claim(); } /// @dev Transmutes, claims base tokens, and withdraws waTokens. /// /// This function helps users to exit the transmuter contract completely after converting their WaTokens to the base pair. function transmuteClaimAndWithdraw() public { transmute(); claim(); uint256 toWithdraw = depositedWaTokens[msg.sender]; unstake(toWithdraw); } /// @dev Distributes the base token proportionally to all waToken stakers. /// /// This function is meant to be called by the Alchemist contract for when it is sending yield to the transmuter. /// Anyone can call this and add funds, idk why they would do that though... /// /// @param origin the account that is sending the tokens to be distributed. /// @param amount the amount of base tokens to be distributed to the transmuter. function distribute(address origin, uint256 amount) public onlyWhitelisted() runPhasedDistribution() { require(!pause, "emergency pause enabled"); IERC20Burnable(Token).safeTransferFrom(origin, address(this), amount); buffer = buffer.add(amount); } /// @dev Allocates the incoming yield proportionally to all waToken stakers. /// /// @param amount the amount of base tokens to be distributed in the transmuter. function increaseAllocations(uint256 amount) internal { if(totalSupplyWaTokens > 0 && amount > 0) { totalDividendPoints = totalDividendPoints.add( amount.mul(pointMultiplier).div(totalSupplyWaTokens) ); unclaimedDividends = unclaimedDividends.add(amount); } else { buffer = buffer.add(amount); } } /// @dev Gets the status of a user's staking position. /// /// The total amount allocated to a user is the sum of pendingdivs and inbucket. /// /// @param user the address of the user you wish to query. /// /// returns user status function userInfo(address user) public view returns ( uint256 depositedAl, uint256 pendingdivs, uint256 inbucket, uint256 realised ) { uint256 _depositedAl = depositedWaTokens[user]; uint256 _toDistribute = buffer.mul(block.number.sub(lastDepositBlock)).div(TRANSMUTATION_PERIOD); if(block.number.sub(lastDepositBlock) > TRANSMUTATION_PERIOD){ _toDistribute = buffer; } uint256 _pendingdivs = _toDistribute.mul(depositedWaTokens[user]).div(totalSupplyWaTokens); uint256 _inbucket = tokensInBucket[user].add(dividendsOwing(user)); uint256 _realised = realisedTokens[user]; return (_depositedAl, _pendingdivs, _inbucket, _realised); } /// @dev Gets the status of multiple users in one call /// /// This function is used to query the contract to check for /// accounts that have overfilled positions in order to check /// who can be force transmuted. /// /// @param from the first index of the userList /// @param to the last index of the userList /// /// returns the userList with their staking status in paginated form. function getMultipleUserInfo(uint256 from, uint256 to) public view returns (address[] memory theUserList, uint256[] memory theUserData) { uint256 i = from; uint256 delta = to - from; address[] memory _theUserList = new address[](delta); //user uint256[] memory _theUserData = new uint256[](delta * 2); //deposited-bucket uint256 y = 0; uint256 _toDistribute = buffer.mul(block.number.sub(lastDepositBlock)).div(TRANSMUTATION_PERIOD); if(block.number.sub(lastDepositBlock) > TRANSMUTATION_PERIOD){ _toDistribute = buffer; } for (uint256 x = 0; x < delta; x += 1) { _theUserList[x] = userList[i]; _theUserData[y] = depositedWaTokens[userList[i]]; _theUserData[y + 1] = dividendsOwing(userList[i]).add(tokensInBucket[userList[i]]).add(_toDistribute.mul(depositedWaTokens[userList[i]]).div(totalSupplyWaTokens)); y += 2; i += 1; } return (_theUserList, _theUserData); } /// @dev Gets info on the buffer /// /// This function is used to query the contract to get the /// latest state of the buffer /// /// @return _toDistribute the amount ready to be distributed /// @return _deltaBlocks the amount of time since the last phased distribution /// @return _buffer the amount in the buffer function bufferInfo() public view returns (uint256 _toDistribute, uint256 _deltaBlocks, uint256 _buffer){ _deltaBlocks = block.number.sub(lastDepositBlock); _buffer = buffer; _toDistribute = _buffer.mul(_deltaBlocks).div(TRANSMUTATION_PERIOD); } /// @dev Sets the pending governance. /// /// This function reverts if the new pending governance is the zero address or the caller is not the current /// governance. This is to prevent the contract governance being set to the zero address which would deadlock /// privileged contract functionality. /// /// @param _pendingGovernance the new pending governance. function setPendingGovernance(address _pendingGovernance) external onlyGov { require(_pendingGovernance != ZERO_ADDRESS, "MigratableTransmuterV3: 0 gov"); pendingGovernance = _pendingGovernance; emit PendingGovernanceUpdated(_pendingGovernance); } /// @dev Accepts the role as governance. /// /// This function reverts if the caller is not the new pending governance. function acceptGovernance() external { require(msg.sender == pendingGovernance,"!pendingGovernance"); address _pendingGovernance = pendingGovernance; governance = _pendingGovernance; emit GovernanceUpdated(_pendingGovernance); } /// This function reverts if the caller is not governance /// /// @param _toWhitelist the account to mint tokens to. /// @param _state the whitelist state. function setWhitelist(address _toWhitelist, bool _state) external onlyGov { whiteList[_toWhitelist] = _state; } /// @dev Sets if the contract should enter emergency exit mode. /// /// There are 2 main reasons to pause: /// 1. Need to shut down deposits in case of an emergency in one of the vaults /// 2. Need to migrate to a new transmuter /// /// While the transmuter is paused, stake() and distribute() are disabled /// /// @param _pause if the contract should enter emergency exit mode. function setPause(bool _pause) external onlyGov { pause = _pause; emit PauseUpdated(_pause); } /// @dev Migrates transmuter funds to a new transmuter /// /// @param migrateTo address of the new transmuter function migrateFunds(address migrateTo) external onlyGov { require(migrateTo != address(0), "cannot migrate to 0x0"); require(pause, "migrate: set emergency exit first"); // leave enough funds to service any pending transmutations uint256 totalFunds = IERC20Burnable(Token).balanceOf(address(this)); uint256 migratableFunds = totalFunds.sub(totalSupplyWaTokens, "not enough funds to service stakes"); IERC20Burnable(Token).approve(migrateTo, migratableFunds); ITransmuter(migrateTo).distribute(address(this), migratableFunds); emit MigrationComplete(migrateTo, migratableFunds); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_WaToken","type":"address"},{"internalType":"address","name":"_Token","type":"address"},{"internalType":"address","name":"_governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"GovernanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"migrateTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"fundsMigrated","type":"uint256"}],"name":"MigrationComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"PauseUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingGovernance","type":"address"}],"name":"PendingGovernanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTransmutationPeriod","type":"uint256"}],"name":"TransmuterPeriodUpdated","type":"event"},{"inputs":[],"name":"TRANSMUTATION_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WaToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bufferInfo","outputs":[{"internalType":"uint256","name":"_toDistribute","type":"uint256"},{"internalType":"uint256","name":"_deltaBlocks","type":"uint256"},{"internalType":"uint256","name":"_buffer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedWaTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"origin","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendsOwing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toTransmute","type":"address"}],"name":"forceTransmute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getMultipleUserInfo","outputs":[{"internalType":"address[]","name":"theUserList","type":"address[]"},{"internalType":"uint256[]","name":"theUserData","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDepositBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastDividendPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"migrateTo","type":"address"}],"name":"migrateFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"realisedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pendingGovernance","type":"address"}],"name":"setPendingGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransmutationPeriod","type":"uint256"}],"name":"setTransmutationPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_toWhitelist","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensInBucket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyWaTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transmute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transmuteAndClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transmuteClaimAndWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"depositedAl","type":"uint256"},{"internalType":"uint256","name":"pendingdivs","type":"uint256"},{"internalType":"uint256","name":"inbucket","type":"uint256"},{"internalType":"uint256","name":"realised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userIsKnown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052678ac7230489e80000600d553480156200001d57600080fd5b506040516200433138038062004331833981810160405260608110156200004357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200010c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696772617461626c655472616e736d7574657256333a203020676f7600000081525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260008190555050505061414780620001ea6000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80636e3735b41161013b578063bedb86fb116100b8578063e9fad8ee1161007c578063e9fad8ee14610a3f578063edaafe2014610a49578063f1f7920014610a67578063f39c38a014610a71578063fb93210814610aa557610248565b8063bedb86fb14610949578063bf51929f14610979578063bff170b9146109bd578063c241267614610a01578063e044205e14610a3557610248565b80639f4216e8116100ff5780639f4216e81461081f578063a02fbe2d14610877578063a196cf2e146108a5578063a694fc3a146108c3578063b870d598146108f157610248565b80636e3735b41461069d57806379070a12146106f5578063806985f71461074f5780638391e45c146107a75780638456cb59146107ff57610248565b80632e17de78116101c9578063527100071161018d578063527100071461056f578063538ba4f9146105c757806353d6fd59146105fb5780635aa6e6751461064b578063658b98a91461067f57610248565b80632e17de78146104a1578063372c12b1146104cf5780633cb802b9146105295780633dce68ea146105475780634e71d92d1461056557610248565b80631959a002116102105780631959a002146103e45780632113342d14610451578063238efcbc1461046f5780632a03cf68146104795780632a3d7c811461048357610248565b806301f50c861461024d578063030362901461026b57806305d2301d146103405780630abb60351461036c578063192bfc92146103b0575b600080fd5b610255610af3565b6040518082815260200191505060405180910390f35b6102a16004803603604081101561028157600080fd5b810190808035906020019092919080359060200190929190505050610af9565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156102e85780820151818401526020810190506102cd565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561032a57808201518184015260208101905061030f565b5050505090500194505050505060405180910390f35b610348610ec7565b60405180848152602001838152602001828152602001935050505060405180910390f35b6103ae6004803603602081101561038257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f16565b005b6103b86110f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610426600480360360208110156103fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611116565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6104596112e9565b6040518082815260200191505060405180910390f35b6104776112ef565b005b61048161146a565b005b61048b61147c565b6040518082815260200191505060405180910390f35b6104cd600480360360208110156104b757600080fd5b8101908080359060200190929190505050611482565b005b610511600480360360208110156104e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611730565b60405180821515815260200191505060405180910390f35b610531611750565b6040518082815260200191505060405180910390f35b61054f611756565b6040518082815260200191505060405180910390f35b61056d61175c565b005b6105b16004803603602081101561058557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611909565b6040518082815260200191505060405180910390f35b6105cf611921565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106496004803603604081101561061157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611926565b005b610653611a27565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610687611a4d565b6040518082815260200191505060405180910390f35b6106df600480360360208110156106b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a53565b6040518082815260200191505060405180910390f35b6107376004803603602081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6b565b60405180821515815260200191505060405180910390f35b6107916004803603602081101561076557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a8b565b6040518082815260200191505060405180910390f35b6107e9600480360360208110156107bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa3565b6040518082815260200191505060405180910390f35b610807611b6a565b60405180821515815260200191505060405180910390f35b61084b6004803603602081101561083557600080fd5b8101908080359060200190929190505050611b7d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108a36004803603602081101561088d57600080fd5b8101908080359060200190929190505050611bb0565b005b6108ad611c99565b6040518082815260200191505060405180910390f35b6108ef600480360360208110156108d957600080fd5b8101908080359060200190929190505050611c9f565b005b6109336004803603602081101561090757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061210f565b6040518082815260200191505060405180910390f35b6109776004803603602081101561095f57600080fd5b81019080803515159060200190929190505050612127565b005b6109bb6004803603602081101561098f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612223565b005b6109ff600480360360208110156109d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061267e565b005b610a09612e5d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a3d612e83565b005b610a47612ee3565b005b610a51612f3b565b6040518082815260200191505060405180910390f35b610a6f612f41565b005b610a796134d9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610af160048036036040811015610abb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506134ff565b005b60005481565b60608060008490506000858503905060608167ffffffffffffffff81118015610b2157600080fd5b50604051908082528060200260200182016040528015610b505781602001602082028036833780820191505090505b50905060606002830267ffffffffffffffff81118015610b6f57600080fd5b50604051908082528060200260200182016040528015610b9e5781602001602082028036833780820191505090505b509050600080610be1600054610bd3610bc2600c544361375790919063ffffffff16565b600b546137da90919063ffffffff16565b61386090919063ffffffff16565b9050600054610bfb600c544361375790919063ffffffff16565b1115610c0757600b5490505b60005b85811015610eb3576008600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858281518110610c5257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060036000600860008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054848481518110610d0b57fe5b602002602001018181525050610e81610db3600a54610da560036000600860008e815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866137da90919063ffffffff16565b61386090919063ffffffff16565b610e7360046000600860008d815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e65600860008d815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611aa3565b6138e990919063ffffffff16565b6138e990919063ffffffff16565b846001850181518110610e9057fe5b602002602001018181525050600283019250600187019650600181019050610c0a565b508383975097505050505050509250929050565b6000806000610ee1600c544361375790919063ffffffff16565b9150600b549050610f0f600054610f0184846137da90919063ffffffff16565b61386090919063ffffffff16565b9250909192565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696772617461626c655472616e736d7574657256333a203020676f7600000081525060200191505060405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc9e2377236eab4280090ce8f2317332649736d92f00dcf20a8dd6684ec5e783981604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061119f600054611191611180600c544361375790919063ffffffff16565b600b546137da90919063ffffffff16565b61386090919063ffffffff16565b90506000546111b9600c544361375790919063ffffffff16565b11156111c557600b5490505b600061122d600a5461121f600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856137da90919063ffffffff16565b61386090919063ffffffff16565b9050600061128b61123d8a611aa3565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b90506000600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084838383985098509850985050505050509193509193565b600e5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f2170656e64696e67476f7665726e616e6365000000000000000000000000000081525060200191505060405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b611472612f41565b61147a61175c565b565b600c5481565b33600061148e82611aa3565b9050600081111561154a576114ae81600f5461375790919063ffffffff16565b600f8190555061150681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600033905083600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613fd9603f913960400191505060405180910390fd5b61167f84600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375790919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116d784600a5461375790919063ffffffff16565b600a8190555061172a8185600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139719092919063ffffffff16565b50505050565b60106020528060005260406000206000915054906101000a900460ff1681565b600f5481565b600a5481565b60003390506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116117ad57600080fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118c957600080fd5b505af11580156118dd573d6000803e3d6000fd5b505050506040513d60208110156118f357600080fd5b8101908080519060200190929190505050505050565b60056020528060005260406000206000915090505481565b600081565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60036020528060005260406000206000915090505481565b60076020528060005260406000206000915054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b600080611afa600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600e5461375790919063ffffffff16565b9050611b62600d54611b5483600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137da90919063ffffffff16565b61386090919063ffffffff16565b915050919050565b601260149054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b806000819055507fc2965d898897107f6f1d0e43c043ca07b7a51d487acfac1decec2ec8405364406000546040518082815260200191505060405180910390a150565b60095481565b6000600c5490506000439050600080600b5490506000811115611d59576000611cd1858561375790919063ffffffff16565b90506000548110611ce457819250611d2b565b600054611cfa82846137da90919063ffffffff16565b1115611d2a57611d27600054611d1983856137da90919063ffffffff16565b61386090919063ffffffff16565b92505b5b6000831115611d5757611d47838361375790919063ffffffff16565b600b81905550611d5683613a13565b5b505b82600c81905550336000611d6c82611aa3565b90506000811115611e2857611d8c81600f5461375790919063ffffffff16565b600f81905550611de481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f7e573360086000600954815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009600081548092919060010191905055505b601260149054906101000a900460ff1615612001576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f656d657267656e637920706175736520656e61626c656400000000000000000081525060200191505060405180910390fd5b600033905061205581308a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613aac909392919063ffffffff16565b61206a88600a546138e990919063ffffffff16565b600a819055506120c288600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050505050565b60046020528060005260406000206000915090505481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b80601260146101000a81548160ff0219169083151502179055507f77860e247ab9186dbe64e5bd0e0b93273cc4273e01818420e788f500078886f58160405180821515815260200191505060405180910390a150565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561236c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f63616e6e6f74206d69677261746520746f20307830000000000000000000000081525060200191505060405180910390fd5b601260149054906101000a900460ff166123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140a66021913960400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561245c57600080fd5b505afa158015612470573d6000803e3d6000fd5b505050506040513d602081101561248657600080fd5b8101908080519060200190929190505050905060006124ca600a54604051806060016040528060228152602001613fb76022913984613b6d9092919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561255f57600080fd5b505af1158015612573573d6000803e3d6000fd5b505050506040513d602081101561258957600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff1663fb93210830836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561260c57600080fd5b505af1158015612620573d6000803e3d6000fd5b505050507f491c0362a655f805cc3d5ab67c471c6b4e517051540c85134456449ce6c1a6798382604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b6000600c5490506000439050600080600b54905060008111156127385760006126b0858561375790919063ffffffff16565b905060005481106126c35781925061270a565b6000546126d982846137da90919063ffffffff16565b1115612709576127066000546126f883856137da90919063ffffffff16565b61386090919063ffffffff16565b92505b5b600083111561273657612726838361375790919063ffffffff16565b600b8190555061273583613a13565b5b505b82600c8190555033600061274b82611aa3565b905060008111156128075761276b81600f5461375790919063ffffffff16565b600f819055506127c381600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600061285982611aa3565b905060008111156129155761287981600f5461375790919063ffffffff16565b600f819055506128d181600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003390506000600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111612a3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140c76021913960400191505060405180910390fd5b6000600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612ad4600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361375790919063ffffffff16565b9050600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b50505050612bff82600a5461375790919063ffffffff16565b600a81905550612c5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cec82600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612e4f576000600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4d8d82600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139719092919063ffffffff16565b505b505050505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612e8b612f41565b612e9361175c565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612ee081611482565b50565b612eeb612f41565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612f3881611482565b50565b600b5481565b6000600c5490506000439050600080600b5490506000811115612ffb576000612f73858561375790919063ffffffff16565b90506000548110612f8657819250612fcd565b600054612f9c82846137da90919063ffffffff16565b1115612fcc57612fc9600054612fbb83856137da90919063ffffffff16565b61386090919063ffffffff16565b92505b5b6000831115612ff957612fe9838361375790919063ffffffff16565b600b81905550612ff883613a13565b5b505b82600c8190555033600061300e82611aa3565b905060008111156130ca5761302e81600f5461375790919063ffffffff16565b600f8190555061308681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003390506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116131d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6e65656420746f20686176652070656e64696e6720696e206275636b6574000081525060200191505060405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156132f3576132ae600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361375790919063ffffffff16565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491505b61334582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156133fd57600080fd5b505af1158015613411573d6000803e3d6000fd5b5050505061342a82600a5461375790919063ffffffff16565b600a8190555061343981613a13565b61348b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061403e6024913960400191505060405180910390fd5b6000600c5490506000439050600080600b549050600081111561365b5760006135d3858561375790919063ffffffff16565b905060005481106135e65781925061362d565b6000546135fc82846137da90919063ffffffff16565b111561362c5761362960005461361b83856137da90919063ffffffff16565b61386090919063ffffffff16565b92505b5b600083111561365957613649838361375790919063ffffffff16565b600b8190555061365883613a13565b5b505b82600c81905550601260149054906101000a900460ff16156136e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f656d657267656e637920706175736520656e61626c656400000000000000000081525060200191505060405180910390fd5b613734863087600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613aac909392919063ffffffff16565b61374985600b546138e990919063ffffffff16565b600b81905550505050505050565b6000828211156137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808314156137ed576000905061385a565b60008284029050828482816137fe57fe5b0414613855576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140626021913960400191505060405180910390fd5b809150505b92915050565b60008082116138d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816138e057fe5b04905092915050565b600080828401905083811015613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613a0e8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c27565b505050565b6000600a54118015613a255750600081115b15613a8d57613a67613a56600a54613a48600d54856137da90919063ffffffff16565b61386090919063ffffffff16565b600e546138e990919063ffffffff16565b600e81905550613a8281600f546138e990919063ffffffff16565b600f81905550613aa9565b613aa281600b546138e990919063ffffffff16565b600b819055505b50565b613b67846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c27565b50505050565b6000838311158290613c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bdf578082015181840152602081019050613bc4565b50505050905090810190601f168015613c0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b6060613c89826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613d169092919063ffffffff16565b9050600081511115613d1157808060200190516020811015613caa57600080fd5b8101908080519060200190929190505050613d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806140e8602a913960400191505060405180910390fd5b5b505050565b6060613d258484600085613d2e565b90509392505050565b606082471015613d89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806140186026913960400191505060405180910390fd5b613d9285613ed7565b613e04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613e545780518252602082019150602081019050602083039250613e31565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613eb6576040519150601f19603f3d011682016040523d82523d6000602084013e613ebb565b606091505b5091509150613ecb828286613eea565b92505050949350505050565b600080823b905060008111915050919050565b60608315613efa57829050613faf565b600083511115613f0d5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f74578082015181840152602081019050613f59565b50505050905090810190601f168015613fa15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe6e6f7420656e6f7567682066756e647320746f2073657276696365207374616b65734d696772617461626c655472616e736d7574657256333a20756e7374616b6520616d6f756e742065786365656473206465706f736974656420616d6f756e74416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4d696772617461626c655472616e736d7574657256333a202177686974656c6973746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d696772617461626c655472616e736d7574657256333a2021676f7665726e616e63656d6967726174653a2073657420656d657267656e637920657869742066697273744d696772617461626c655472616e736d7574657256333a20216f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212207b01611c9e96358535108c981792ea6eaf7af3fc9a1087a87c436c17ffa7f8dd64736f6c634300060c0033000000000000000000000000cbf335bb8ee86a5a88bebcda4506a665aa8d70220000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba000000000000000000000000068284083acbabcb6da84f62ea341dd8c30500eee
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c80636e3735b41161013b578063bedb86fb116100b8578063e9fad8ee1161007c578063e9fad8ee14610a3f578063edaafe2014610a49578063f1f7920014610a67578063f39c38a014610a71578063fb93210814610aa557610248565b8063bedb86fb14610949578063bf51929f14610979578063bff170b9146109bd578063c241267614610a01578063e044205e14610a3557610248565b80639f4216e8116100ff5780639f4216e81461081f578063a02fbe2d14610877578063a196cf2e146108a5578063a694fc3a146108c3578063b870d598146108f157610248565b80636e3735b41461069d57806379070a12146106f5578063806985f71461074f5780638391e45c146107a75780638456cb59146107ff57610248565b80632e17de78116101c9578063527100071161018d578063527100071461056f578063538ba4f9146105c757806353d6fd59146105fb5780635aa6e6751461064b578063658b98a91461067f57610248565b80632e17de78146104a1578063372c12b1146104cf5780633cb802b9146105295780633dce68ea146105475780634e71d92d1461056557610248565b80631959a002116102105780631959a002146103e45780632113342d14610451578063238efcbc1461046f5780632a03cf68146104795780632a3d7c811461048357610248565b806301f50c861461024d578063030362901461026b57806305d2301d146103405780630abb60351461036c578063192bfc92146103b0575b600080fd5b610255610af3565b6040518082815260200191505060405180910390f35b6102a16004803603604081101561028157600080fd5b810190808035906020019092919080359060200190929190505050610af9565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156102e85780820151818401526020810190506102cd565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561032a57808201518184015260208101905061030f565b5050505090500194505050505060405180910390f35b610348610ec7565b60405180848152602001838152602001828152602001935050505060405180910390f35b6103ae6004803603602081101561038257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f16565b005b6103b86110f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610426600480360360208110156103fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611116565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6104596112e9565b6040518082815260200191505060405180910390f35b6104776112ef565b005b61048161146a565b005b61048b61147c565b6040518082815260200191505060405180910390f35b6104cd600480360360208110156104b757600080fd5b8101908080359060200190929190505050611482565b005b610511600480360360208110156104e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611730565b60405180821515815260200191505060405180910390f35b610531611750565b6040518082815260200191505060405180910390f35b61054f611756565b6040518082815260200191505060405180910390f35b61056d61175c565b005b6105b16004803603602081101561058557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611909565b6040518082815260200191505060405180910390f35b6105cf611921565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106496004803603604081101561061157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611926565b005b610653611a27565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610687611a4d565b6040518082815260200191505060405180910390f35b6106df600480360360208110156106b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a53565b6040518082815260200191505060405180910390f35b6107376004803603602081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6b565b60405180821515815260200191505060405180910390f35b6107916004803603602081101561076557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a8b565b6040518082815260200191505060405180910390f35b6107e9600480360360208110156107bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa3565b6040518082815260200191505060405180910390f35b610807611b6a565b60405180821515815260200191505060405180910390f35b61084b6004803603602081101561083557600080fd5b8101908080359060200190929190505050611b7d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108a36004803603602081101561088d57600080fd5b8101908080359060200190929190505050611bb0565b005b6108ad611c99565b6040518082815260200191505060405180910390f35b6108ef600480360360208110156108d957600080fd5b8101908080359060200190929190505050611c9f565b005b6109336004803603602081101561090757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061210f565b6040518082815260200191505060405180910390f35b6109776004803603602081101561095f57600080fd5b81019080803515159060200190929190505050612127565b005b6109bb6004803603602081101561098f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612223565b005b6109ff600480360360208110156109d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061267e565b005b610a09612e5d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a3d612e83565b005b610a47612ee3565b005b610a51612f3b565b6040518082815260200191505060405180910390f35b610a6f612f41565b005b610a796134d9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610af160048036036040811015610abb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506134ff565b005b60005481565b60608060008490506000858503905060608167ffffffffffffffff81118015610b2157600080fd5b50604051908082528060200260200182016040528015610b505781602001602082028036833780820191505090505b50905060606002830267ffffffffffffffff81118015610b6f57600080fd5b50604051908082528060200260200182016040528015610b9e5781602001602082028036833780820191505090505b509050600080610be1600054610bd3610bc2600c544361375790919063ffffffff16565b600b546137da90919063ffffffff16565b61386090919063ffffffff16565b9050600054610bfb600c544361375790919063ffffffff16565b1115610c0757600b5490505b60005b85811015610eb3576008600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858281518110610c5257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060036000600860008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054848481518110610d0b57fe5b602002602001018181525050610e81610db3600a54610da560036000600860008e815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866137da90919063ffffffff16565b61386090919063ffffffff16565b610e7360046000600860008d815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e65600860008d815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611aa3565b6138e990919063ffffffff16565b6138e990919063ffffffff16565b846001850181518110610e9057fe5b602002602001018181525050600283019250600187019650600181019050610c0a565b508383975097505050505050509250929050565b6000806000610ee1600c544361375790919063ffffffff16565b9150600b549050610f0f600054610f0184846137da90919063ffffffff16565b61386090919063ffffffff16565b9250909192565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696772617461626c655472616e736d7574657256333a203020676f7600000081525060200191505060405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc9e2377236eab4280090ce8f2317332649736d92f00dcf20a8dd6684ec5e783981604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061119f600054611191611180600c544361375790919063ffffffff16565b600b546137da90919063ffffffff16565b61386090919063ffffffff16565b90506000546111b9600c544361375790919063ffffffff16565b11156111c557600b5490505b600061122d600a5461121f600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856137da90919063ffffffff16565b61386090919063ffffffff16565b9050600061128b61123d8a611aa3565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b90506000600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084838383985098509850985050505050509193509193565b600e5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f2170656e64696e67476f7665726e616e6365000000000000000000000000000081525060200191505060405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b611472612f41565b61147a61175c565b565b600c5481565b33600061148e82611aa3565b9050600081111561154a576114ae81600f5461375790919063ffffffff16565b600f8190555061150681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600033905083600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613fd9603f913960400191505060405180910390fd5b61167f84600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375790919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116d784600a5461375790919063ffffffff16565b600a8190555061172a8185600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139719092919063ffffffff16565b50505050565b60106020528060005260406000206000915054906101000a900460ff1681565b600f5481565b600a5481565b60003390506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116117ad57600080fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118c957600080fd5b505af11580156118dd573d6000803e3d6000fd5b505050506040513d60208110156118f357600080fd5b8101908080519060200190929190505050505050565b60056020528060005260406000206000915090505481565b600081565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60036020528060005260406000206000915090505481565b60076020528060005260406000206000915054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b600080611afa600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600e5461375790919063ffffffff16565b9050611b62600d54611b5483600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137da90919063ffffffff16565b61386090919063ffffffff16565b915050919050565b601260149054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b806000819055507fc2965d898897107f6f1d0e43c043ca07b7a51d487acfac1decec2ec8405364406000546040518082815260200191505060405180910390a150565b60095481565b6000600c5490506000439050600080600b5490506000811115611d59576000611cd1858561375790919063ffffffff16565b90506000548110611ce457819250611d2b565b600054611cfa82846137da90919063ffffffff16565b1115611d2a57611d27600054611d1983856137da90919063ffffffff16565b61386090919063ffffffff16565b92505b5b6000831115611d5757611d47838361375790919063ffffffff16565b600b81905550611d5683613a13565b5b505b82600c81905550336000611d6c82611aa3565b90506000811115611e2857611d8c81600f5461375790919063ffffffff16565b600f81905550611de481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f7e573360086000600954815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009600081548092919060010191905055505b601260149054906101000a900460ff1615612001576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f656d657267656e637920706175736520656e61626c656400000000000000000081525060200191505060405180910390fd5b600033905061205581308a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613aac909392919063ffffffff16565b61206a88600a546138e990919063ffffffff16565b600a819055506120c288600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050505050565b60046020528060005260406000206000915090505481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b80601260146101000a81548160ff0219169083151502179055507f77860e247ab9186dbe64e5bd0e0b93273cc4273e01818420e788f500078886f58160405180821515815260200191505060405180910390a150565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140836023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561236c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f63616e6e6f74206d69677261746520746f20307830000000000000000000000081525060200191505060405180910390fd5b601260149054906101000a900460ff166123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140a66021913960400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561245c57600080fd5b505afa158015612470573d6000803e3d6000fd5b505050506040513d602081101561248657600080fd5b8101908080519060200190929190505050905060006124ca600a54604051806060016040528060228152602001613fb76022913984613b6d9092919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561255f57600080fd5b505af1158015612573573d6000803e3d6000fd5b505050506040513d602081101561258957600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff1663fb93210830836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561260c57600080fd5b505af1158015612620573d6000803e3d6000fd5b505050507f491c0362a655f805cc3d5ab67c471c6b4e517051540c85134456449ce6c1a6798382604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b6000600c5490506000439050600080600b54905060008111156127385760006126b0858561375790919063ffffffff16565b905060005481106126c35781925061270a565b6000546126d982846137da90919063ffffffff16565b1115612709576127066000546126f883856137da90919063ffffffff16565b61386090919063ffffffff16565b92505b5b600083111561273657612726838361375790919063ffffffff16565b600b8190555061273583613a13565b5b505b82600c8190555033600061274b82611aa3565b905060008111156128075761276b81600f5461375790919063ffffffff16565b600f819055506127c381600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600061285982611aa3565b905060008111156129155761287981600f5461375790919063ffffffff16565b600f819055506128d181600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003390506000600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111612a3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140c76021913960400191505060405180910390fd5b6000600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612ad4600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361375790919063ffffffff16565b9050600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b50505050612bff82600a5461375790919063ffffffff16565b600a81905550612c5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cec82600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612e4f576000600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4d8d82600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139719092919063ffffffff16565b505b505050505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612e8b612f41565b612e9361175c565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612ee081611482565b50565b612eeb612f41565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612f3881611482565b50565b600b5481565b6000600c5490506000439050600080600b5490506000811115612ffb576000612f73858561375790919063ffffffff16565b90506000548110612f8657819250612fcd565b600054612f9c82846137da90919063ffffffff16565b1115612fcc57612fc9600054612fbb83856137da90919063ffffffff16565b61386090919063ffffffff16565b92505b5b6000831115612ff957612fe9838361375790919063ffffffff16565b600b81905550612ff883613a13565b5b505b82600c8190555033600061300e82611aa3565b905060008111156130ca5761302e81600f5461375790919063ffffffff16565b600f8190555061308681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e54600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003390506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116131d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6e65656420746f20686176652070656e64696e6720696e206275636b6574000081525060200191505060405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156132f3576132ae600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361375790919063ffffffff16565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491505b61334582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156133fd57600080fd5b505af1158015613411573d6000803e3d6000fd5b5050505061342a82600a5461375790919063ffffffff16565b600a8190555061343981613a13565b61348b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e990919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061403e6024913960400191505060405180910390fd5b6000600c5490506000439050600080600b549050600081111561365b5760006135d3858561375790919063ffffffff16565b905060005481106135e65781925061362d565b6000546135fc82846137da90919063ffffffff16565b111561362c5761362960005461361b83856137da90919063ffffffff16565b61386090919063ffffffff16565b92505b5b600083111561365957613649838361375790919063ffffffff16565b600b8190555061365883613a13565b5b505b82600c81905550601260149054906101000a900460ff16156136e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f656d657267656e637920706175736520656e61626c656400000000000000000081525060200191505060405180910390fd5b613734863087600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613aac909392919063ffffffff16565b61374985600b546138e990919063ffffffff16565b600b81905550505050505050565b6000828211156137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808314156137ed576000905061385a565b60008284029050828482816137fe57fe5b0414613855576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140626021913960400191505060405180910390fd5b809150505b92915050565b60008082116138d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816138e057fe5b04905092915050565b600080828401905083811015613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613a0e8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c27565b505050565b6000600a54118015613a255750600081115b15613a8d57613a67613a56600a54613a48600d54856137da90919063ffffffff16565b61386090919063ffffffff16565b600e546138e990919063ffffffff16565b600e81905550613a8281600f546138e990919063ffffffff16565b600f81905550613aa9565b613aa281600b546138e990919063ffffffff16565b600b819055505b50565b613b67846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c27565b50505050565b6000838311158290613c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bdf578082015181840152602081019050613bc4565b50505050905090810190601f168015613c0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b6060613c89826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613d169092919063ffffffff16565b9050600081511115613d1157808060200190516020811015613caa57600080fd5b8101908080519060200190929190505050613d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806140e8602a913960400191505060405180910390fd5b5b505050565b6060613d258484600085613d2e565b90509392505050565b606082471015613d89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806140186026913960400191505060405180910390fd5b613d9285613ed7565b613e04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613e545780518252602082019150602081019050602083039250613e31565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613eb6576040519150601f19603f3d011682016040523d82523d6000602084013e613ebb565b606091505b5091509150613ecb828286613eea565b92505050949350505050565b600080823b905060008111915050919050565b60608315613efa57829050613faf565b600083511115613f0d5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f74578082015181840152602081019050613f59565b50505050905090810190601f168015613fa15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe6e6f7420656e6f7567682066756e647320746f2073657276696365207374616b65734d696772617461626c655472616e736d7574657256333a20756e7374616b6520616d6f756e742065786365656473206465706f736974656420616d6f756e74416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4d696772617461626c655472616e736d7574657256333a202177686974656c6973746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d696772617461626c655472616e736d7574657256333a2021676f7665726e616e63656d6967726174653a2073657420656d657267656e637920657869742066697273744d696772617461626c655472616e736d7574657256333a20216f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212207b01611c9e96358535108c981792ea6eaf7af3fc9a1087a87c436c17ffa7f8dd64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cbf335bb8ee86a5a88bebcda4506a665aa8d70220000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba000000000000000000000000068284083acbabcb6da84f62ea341dd8c30500eee
-----Decoded View---------------
Arg [0] : _WaToken (address): 0xcbf335Bb8eE86A5A88bEbCda4506a665aA8d7022
Arg [1] : _Token (address): 0x5f98805A4E8be255a32880FDeC7F6728C6568bA0
Arg [2] : _governance (address): 0x68284083acbabCb6da84f62ea341dd8c30500EEE
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000cbf335bb8ee86a5a88bebcda4506a665aa8d7022
Arg [1] : 0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0
Arg [2] : 00000000000000000000000068284083acbabcb6da84f62ea341dd8c30500eee
Deployed Bytecode Sourcemap
88616:19080:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;88830:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;103209:1079;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104652:277;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;105334:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;88874:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;101950:815;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89558:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;105760:272;;;:::i;:::-;;99855:84;;;:::i;:::-;;89366:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;94870:527;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;89687:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;89599:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;89297:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;94390:258;;;:::i;:::-;;89047:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;88774;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;106218:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;89847:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;89511:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;88932:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;89165:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;89103:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;90902:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;90124:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;89215:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;94036:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;89265:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;95517:558;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;88991:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;106783:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;107033:660;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;97883:1484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;88903:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;100154:183;;;:::i;:::-;;99519:144;;;:::i;:::-;;89338:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;96417:999;;;:::i;:::-;;89934:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;100811:280;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;88830:35;;;;:::o;103209:1079::-;103312:28;103342;103388:9;103400:4;103388:16;;103415:13;103436:4;103431:2;:9;103415:25;;103451:29;103497:5;103483:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;103451:52;;103521:29;103575:1;103567:5;:9;103553:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;103521:56;;103607:9;103631:21;103655:72;103706:20;;103655:46;103666:34;103683:16;;103666:12;:16;;:34;;;;:::i;:::-;103655:6;;:10;;:46;;;;:::i;:::-;:50;;:72;;;;:::i;:::-;103631:96;;103778:20;;103741:34;103758:16;;103741:12;:16;;:34;;;;:::i;:::-;:57;103738:110;;;103830:6;;103814:22;;103738:110;103863:9;103858:377;103882:5;103878:1;:9;103858:377;;;103930:8;:11;103939:1;103930:11;;;;;;;;;;;;;;;;;;;;;103912:12;103925:1;103912:15;;;;;;;;;;;;;:29;;;;;;;;;;;103974:17;:30;103992:8;:11;104001:1;103992:11;;;;;;;;;;;;;;;;;;;;;103974:30;;;;;;;;;;;;;;;;103956:12;103969:1;103956:15;;;;;;;;;;;;;:48;;;;;104041:140;104106:74;104160:19;;104106:49;104124:17;:30;104142:8;:11;104151:1;104142:11;;;;;;;;;;;;;;;;;;;;;104124:30;;;;;;;;;;;;;;;;104106:13;:17;;:49;;;;:::i;:::-;:53;;:74;;;;:::i;:::-;104041:60;104073:14;:27;104088:8;:11;104097:1;104088:11;;;;;;;;;;;;;;;;;;;;;104073:27;;;;;;;;;;;;;;;;104041;104056:8;:11;104065:1;104056:11;;;;;;;;;;;;;;;;;;;;;104041:14;:27::i;:::-;:31;;:60;;;;:::i;:::-;:64;;:140;;;;:::i;:::-;104019:12;104036:1;104032;:5;104019:19;;;;;;;;;;;;;:162;;;;;104201:1;104196:6;;;;104222:1;104217:6;;;;103894:1;103889:6;;;;103858:377;;;;104253:12;104267;104245:35;;;;;;;;;;103209:1079;;;;;:::o;104652:277::-;104695:21;104718:20;104740:15;104782:34;104799:16;;104782:12;:16;;:34;;;;:::i;:::-;104767:49;;104837:6;;104827:16;;104870:51;104900:20;;104870:25;104882:12;104870:7;:11;;:25;;;;:::i;:::-;:29;;:51;;;;:::i;:::-;104854:67;;104652:277;;;:::o;105334:283::-;93830:10;;;;;;;;;;;93816:24;;:10;:24;;;93808:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;88821:1:::1;105428:34;;:18;:34;;;;105420:76;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;105529:18;105509:17;;:38;;;;;;;;;;;;;;;;;;105565:44;105590:18;105565:44;;;;;;;;;;;;;;;;;;;;105334:283:::0;:::o;88874:22::-;;;;;;;;;;;;;:::o;101950:815::-;102044:19;102078;102112:16;102143;102187:20;102210:17;:23;102228:4;102210:23;;;;;;;;;;;;;;;;102187:46;;102244:21;102268:72;102319:20;;102268:46;102279:34;102296:16;;102279:12;:16;;:34;;;;:::i;:::-;102268:6;;:10;;:46;;;;:::i;:::-;:50;;:72;;;;:::i;:::-;102244:96;;102391:20;;102354:34;102371:16;;102354:12;:16;;:34;;;;:::i;:::-;:57;102351:110;;;102443:6;;102427:22;;102351:110;102471:20;102494:67;102541:19;;102494:42;102512:17;:23;102530:4;102512:23;;;;;;;;;;;;;;;;102494:13;:17;;:42;;;;:::i;:::-;:46;;:67;;;;:::i;:::-;102471:90;;102572:17;102592:46;102617:20;102632:4;102617:14;:20::i;:::-;102592:14;:20;102607:4;102592:20;;;;;;;;;;;;;;;;:24;;:46;;;;:::i;:::-;102572:66;;102649:17;102669:14;:20;102684:4;102669:20;;;;;;;;;;;;;;;;102649:40;;102708:12;102722;102736:9;102747;102700:57;;;;;;;;;;;;;101950:815;;;;;:::o;89558:34::-;;;;:::o;105760:272::-;105831:17;;;;;;;;;;;105817:31;;:10;:31;;;105809:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;105881:26;105910:17;;;;;;;;;;;105881:46;;105951:18;105938:10;;:31;;;;;;;;;;;;;;;;;;105987:37;106005:18;105987:37;;;;;;;;;;;;;;;;;;;;105760:272;:::o;99855:84::-;99902:11;:9;:11::i;:::-;99924:7;:5;:7::i;:::-;99855:84::o;89366:31::-;;;;:::o;94870:527::-;94924:10;91327:13;91343:23;91358:7;91343:14;:23::i;:::-;91327:39;;91389:1;91381:5;:9;91377:167;;;91428:29;91451:5;91428:18;;:22;;:29;;;;:::i;:::-;91407:18;:50;;;;91498:34;91526:5;91498:14;:23;91513:7;91498:23;;;;;;;;;;;;;;;;:27;;:34;;;;:::i;:::-;91472:14;:23;91487:7;91472:23;;;;;;;;;;;;;;;:60;;;;91377:167;91584:19;;91554:18;:27;91573:7;91554:27;;;;;;;;;;;;;;;:49;;;;95038:14:::1;95055:10;95038:27;;95113:6;95084:17;:25;95102:6;95084:25;;;;;;;;;;;;;;;;:35;;95076:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;95225:37;95255:6;95225:17;:25;95243:6;95225:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;95197:17;:25;95215:6;95197:25;;;;;;;;;;;;;;;:65;;;;95295:31;95319:6;95295:19;;:23;;:31;;;;:::i;:::-;95273:19;:53;;;;95337:52;95374:6;95382;95352:7;;;;;;;;;;;95337:36;;;;:52;;;;;:::i;:::-;91614:1;94870:527:::0;;;:::o;89687:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;89599:33::-;;;;:::o;89297:34::-;;;;:::o;94390:258::-;94425:14;94442:10;94425:27;;94496:1;94471:14;:22;94486:6;94471:22;;;;;;;;;;;;;;;;:26;94463:35;;;;;;94509:13;94525:14;:22;94540:6;94525:22;;;;;;;;;;;;;;;;94509:38;;94583:1;94558:14;:22;94573:6;94558:22;;;;;;;;;;;;;;;:26;;;;94610:5;;;;;;;;;;;94595:30;;;94626:6;94634:5;94595:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94390:258;;:::o;89047:49::-;;;;;;;;;;;;;;;;;:::o;88774:::-;88821:1;88774:49;:::o;106218:125::-;93830:10;;;;;;;;;;;93816:24;;:10;:24;;;93808:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;106329:6:::1;106303:9;:23;106313:12;106303:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;106218:125:::0;;:::o;89847:25::-;;;;;;;;;;;;;:::o;89511:38::-;;;;:::o;88932:52::-;;;;;;;;;;;;;;;;;:::o;89165:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;89103:53::-;;;;;;;;;;;;;;;;;:::o;90902:258::-;90964:7;90984:25;91012:52;91036:18;:27;91055:7;91036:27;;;;;;;;;;;;;;;;91012:19;;:23;;:52;;;;:::i;:::-;90984:80;;91082:70;91136:15;;91082:49;91113:17;91082;:26;91100:7;91082:26;;;;;;;;;;;;;;;;:30;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;91075:77;;;90902:258;;;:::o;90124:17::-;;;;;;;;;;;;;:::o;89215:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;94036:206::-;93830:10;;;;;;;;;;;93816:24;;:10;:24;;;93808:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94151:22:::1;94128:20;:45;;;;94189;94213:20;;94189:45;;;;;;;;;;;;;;;;;;94036:206:::0;:::o;89265:23::-;;;;:::o;95517:558::-;92075:25;92103:16;;92075:44;;92130:21;92154:12;92130:36;;92177:21;92213:15;92231:6;;92213:24;;92315:1;92305:7;:11;92301:1049;;;92519:17;92539:36;92557:17;92539:13;:17;;:36;;;;:::i;:::-;92519:56;;92664:20;;92651:9;:33;92648:383;;92721:7;92705:23;;92648:383;;;92870:20;;92845:22;92857:9;92845:7;:11;;:22;;;;:::i;:::-;:45;92842:174;;;92948:48;92975:20;;92948:22;92960:9;92948:7;:11;;:22;;;;:::i;:::-;:26;;:48;;;;:::i;:::-;92932:64;;92842:174;92648:383;93127:1;93111:13;:17;93108:231;;;93198:26;93210:13;93198:7;:11;;:26;;;;:::i;:::-;93189:6;:35;;;;93289:34;93309:13;93289:19;:34::i;:::-;93108:231;92301:1049;;93427:13;93408:16;:32;;;;95620:10:::1;91327:13;91343:23;91358:7;91343:14;:23::i;:::-;91327:39;;91389:1;91381:5;:9;91377:167;;;91428:29;91451:5;91428:18;;:22;;:29;;;;:::i;:::-;91407:18;:50;;;;91498:34;91526:5;91498:14;:23;91513:7;91498:23;;;;;;;;;;;;;;;;:27;;:34;;;;:::i;:::-;91472:14;:23;91487:7;91472:23;;;;;;;;;;;;;;;:60;;;;91377:167;91584:19;;91554:18;:27;91573:7;91554:27;;;;;;;;;;;;;;;:49;;;;91788:11:::2;:23;91800:10;91788:23;;;;;;;;;;;;;;;;;;;;;;;;;91783:158;;91849:10;91828:8;:18;91837:8;;91828:18;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;91900:4;91874:11;:23;91886:10;91874:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;91919:8;;:10;;;;;;;;;;;;;91783:158;95683:5:::3;;;;;;;;;;;95682:6;95674:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;95776:14;95793:10;95776:27;;95856:71;95897:6;95913:4;95920:6;95871:7;;;;;;;;;;;95856:40;;;;:71;;;;;;:::i;:::-;95960:31;95984:6;95960:19;;:23;;:31;;;;:::i;:::-;95938:19;:53;;;;96030:37;96060:6;96030:17;:25;96048:6;96030:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;96002:17;:25;96020:6;96002:25;;;;;;;;;;;;;;;:65;;;;91951:1;93451::::1;;95517:558:::0;;;;;:::o;88991:49::-;;;;;;;;;;;;;;;;;:::o;106783:117::-;93830:10;;;;;;;;;;;93816:24;;:10;:24;;;93808:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;106850:6:::1;106842:5;;:14;;;;;;;;;;;;;;;;;;106872:20;106885:6;106872:20;;;;;;;;;;;;;;;;;;;;106783:117:::0;:::o;107033:660::-;93830:10;;;;;;;;;;;93816:24;;:10;:24;;;93808:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;107131:1:::1;107110:23;;:9;:23;;;;107102:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;107178:5;;;;;;;;;;;107170:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;107303:18;107339:5;;;;;;;;;;;107324:31;;;107364:4;107324:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;107303:67;;107381:23;107407:73;107422:19;;107407:73;;;;;;;;;;;;;;;;;:10;:14;;:73;;;;;:::i;:::-;107381:99;;107506:5;;;;;;;;;;;107491:29;;;107521:9;107532:15;107491:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;107571:9;107559:33;;;107601:4;107608:15;107559:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;107640:45;107658:9;107669:15;107640:45;;;;;;;;;;;;;;;;;;;;;;;;;;93891:1;;107033:660:::0;:::o;97883:1484::-;92075:25;92103:16;;92075:44;;92130:21;92154:12;92130:36;;92177:21;92213:15;92231:6;;92213:24;;92315:1;92305:7;:11;92301:1049;;;92519:17;92539:36;92557:17;92539:13;:17;;:36;;;;:::i;:::-;92519:56;;92664:20;;92651:9;:33;92648:383;;92721:7;92705:23;;92648:383;;;92870:20;;92845:22;92857:9;92845:7;:11;;:22;;;;:::i;:::-;:45;92842:174;;;92948:48;92975:20;;92948:22;92960:9;92948:7;:11;;:22;;;;:::i;:::-;:26;;:48;;;;:::i;:::-;92932:64;;92842:174;92648:383;93127:1;93111:13;:17;93108:231;;;93198:26;93210:13;93198:7;:11;;:26;;;;:::i;:::-;93189:6;:35;;;;93289:34;93309:13;93289:19;:34::i;:::-;93108:231;92301:1049;;93427:13;93408:16;:32;;;;98000:10:::1;91327:13;91343:23;91358:7;91343:14;:23::i;:::-;91327:39;;91389:1;91381:5;:9;91377:167;;;91428:29;91451:5;91428:18;;:22;;:29;;;;:::i;:::-;91407:18;:50;;;;91498:34;91526:5;91498:14;:23;91513:7;91498:23;;;;;;;;;;;;;;;;:27;;:34;;;;:::i;:::-;91472:14;:23;91487:7;91472:23;;;;;;;;;;;;;;;:60;;;;91377:167;91584:19;;91554:18;:27;91573:7;91554:27;;;;;;;;;;;;;;;:49;;;;98035:11:::2;91327:13;91343:23;91358:7;91343:14;:23::i;:::-;91327:39;;91389:1;91381:5;:9;91377:167;;;91428:29;91451:5;91428:18;;:22;;:29;;;;:::i;:::-;91407:18;:50;;;;91498:34;91526:5;91498:14;:23;91513:7;91498:23;;;;;;;;;;;;;;;;:27;;:34;;;;:::i;:::-;91472:14;:23;91487:7;91472:23;;;;;;;;;;;;;;;:60;;;;91377:167;91584:19;;91554:18;:27;91573:7;91554:27;;;;;;;;;;;;;;;:49;;;;98092:14:::3;98109:10;98092:27;;98130:16;98149:14;:27;98164:11;98149:27;;;;;;;;;;;;;;;;98130:46;;98251:17;:30;98269:11;98251:30;;;;;;;;;;;;;;;;98240:8;:41;98218:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98410:1;98380:14;:27;98395:11;98380:27;;;;;;;;;;;;;;;:31;;;;98457:12;98472:44;98485:17;:30;98503:11;98485:30;;;;;;;;;;;;;;;;98472:8;:12;;:44;;;;:::i;:::-;98457:59;;98568:17;:30;98586:11;98568:30;;;;;;;;;;;;;;;;98557:41;;98674:1;98641:17;:30;98659:11;98641:30;;;;;;;;;;;;;;;:34;;;;98729:7;;;;;;;;;;;98714:28;;;98743:8;98714:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;98812:33;98836:8;98812:19;;:23;;:33;;;;:::i;:::-;98790:19;:55;;;;98915:32;98942:4;98915:14;:22;98930:6;98915:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;98890:14;:22;98905:6;98890:22;;;;;;;;;;;;;;;:57;;;;99013:41;99045:8;99013:14;:27;99028:11;99013:27;;;;;;;;;;;;;;;;:31;;:41;;;;:::i;:::-;98983:14;:27;98998:11;98983:27;;;;;;;;;;;;;;;:71;;;;99172:1;99142:14;:27;99157:11;99142:27;;;;;;;;;;;;;;;;:31;99138:222;;;99190:13;99206:14;:27;99221:11;99206:27;;;;;;;;;;;;;;;;99190:43;;99278:1;99248:14;:27;99263:11;99248:27;;;;;;;;;;;;;;;:31;;;;99294:54;99329:11;99342:5;99309;;;;;;;;;;;99294:34;;;;:54;;;;;:::i;:::-;99138:222;;91614:1;;;::::2;;93451::::1;;97883:1484:::0;;;;;:::o;88903:20::-;;;;;;;;;;;;;:::o;100154:183::-;100209:11;:9;:11::i;:::-;100231:7;:5;:7::i;:::-;100249:18;100270:17;:29;100288:10;100270:29;;;;;;;;;;;;;;;;100249:50;;100310:19;100318:10;100310:7;:19::i;:::-;100154:183;:::o;99519:144::-;99553:11;:9;:11::i;:::-;99575:18;99596:17;:29;99614:10;99596:29;;;;;;;;;;;;;;;;99575:50;;99636:19;99644:10;99636:7;:19::i;:::-;99519:144;:::o;89338:21::-;;;;:::o;96417:999::-;92075:25;92103:16;;92075:44;;92130:21;92154:12;92130:36;;92177:21;92213:15;92231:6;;92213:24;;92315:1;92305:7;:11;92301:1049;;;92519:17;92539:36;92557:17;92539:13;:17;;:36;;;;:::i;:::-;92519:56;;92664:20;;92651:9;:33;92648:383;;92721:7;92705:23;;92648:383;;;92870:20;;92845:22;92857:9;92845:7;:11;;:22;;;;:::i;:::-;:45;92842:174;;;92948:48;92975:20;;92948:22;92960:9;92948:7;:11;;:22;;;;:::i;:::-;:26;;:48;;;;:::i;:::-;92932:64;;92842:174;92648:383;93127:1;93111:13;:17;93108:231;;;93198:26;93210:13;93198:7;:11;;:26;;;;:::i;:::-;93189:6;:35;;;;93289:34;93309:13;93289:19;:34::i;:::-;93108:231;92301:1049;;93427:13;93408:16;:32;;;;96483:10:::1;91327:13;91343:23;91358:7;91343:14;:23::i;:::-;91327:39;;91389:1;91381:5;:9;91377:167;;;91428:29;91451:5;91428:18;;:22;;:29;;;;:::i;:::-;91407:18;:50;;;;91498:34;91526:5;91498:14;:23;91513:7;91498:23;;;;;;;;;;;;;;;;:27;;:34;;;;:::i;:::-;91472:14;:23;91487:7;91472:23;;;;;;;;;;;;;;;:60;;;;91377:167;91584:19;;91554:18;:27;91573:7;91554:27;;;;;;;;;;;;;;;:49;;;;96506:14:::2;96523:10;96506:27;;96544:16;96563:14;:22;96578:6;96563:22;;;;;;;;;;;;;;;;96544:41;;96596:12;96640:1:::0;96629:8:::2;:12;96621:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;96714:1;96689:14;:22;96704:6;96689:22;;;;;;;;;;;;;;;:26;;;;96777:17;:25;96795:6;96777:25;;;;;;;;;;;;;;;;96766:8;:36;96762:200;;;96826:39;96839:17;:25;96857:6;96839:25;;;;;;;;;;;;;;;;96826:8;:12;;:39;;;;:::i;:::-;96819:46;;96925:17;:25;96943:6;96925:25;;;;;;;;;;;;;;;;96914:36;;96762:200;97032:39;97062:8;97032:17;:25;97050:6;97032:25;;;;;;;;;;;;;;;;:29;;:39;;;;:::i;:::-;97004:17;:25;97022:6;97004:25;;;;;;;;;;;;;;;:67;;;;97125:7;;;;;;;;;;;97110:28;;;97139:8;97110:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;97208:33;97232:8;97208:19;;:23;;:33;;;;:::i;:::-;97186:19;:55;;;;97286:25;97306:4;97286:19;:25::i;:::-;97372:36;97399:8;97372:14;:22;97387:6;97372:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;97347:14;:22;97362:6;97347:22;;;;;;;;;;;;;;;:61;;;;91614:1;;;93451::::1;;96417:999:::0;;;;:::o;89934:32::-;;;;;;;;;;;;;:::o;100811:280::-;93580:9;:21;93590:10;93580:21;;;;;;;;;;;;;;;;;;;;;;;;;93572:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92075:25:::1;92103:16;;92075:44;;92130:21;92154:12;92130:36;;92177:21;92213:15:::0;92231:6:::1;;92213:24;;92315:1;92305:7;:11;92301:1049;;;92519:17;92539:36;92557:17;92539:13;:17;;:36;;;;:::i;:::-;92519:56;;92664:20;;92651:9;:33;92648:383;;92721:7;92705:23;;92648:383;;;92870:20;;92845:22;92857:9;92845:7;:11;;:22;;;;:::i;:::-;:45;92842:174;;;92948:48;92975:20;;92948:22;92960:9;92948:7;:11;;:22;;;;:::i;:::-;:26;;:48;;;;:::i;:::-;92932:64;;92842:174;92648:383;93127:1;93111:13;:17;93108:231;;;93198:26;93210:13;93198:7;:11;;:26;;;;:::i;:::-;93189:6;:35;;;;93289:34;93309:13;93289:19;:34::i;:::-;93108:231;92301:1049;;93427:13;93408:16;:32;;;;100932:5:::2;;;;;;;;;;;100931:6;100923:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;100976:69;101015:6;101031:4;101038:6;100991:5;;;;;;;;;;;100976:38;;;;:69;;;;;;:::i;:::-;101065:18;101076:6;101065;;:10;;:18;;;;:::i;:::-;101056:6;:27;;;;93653:1:::1;;;;100811:280:::0;;:::o;7343:158::-;7401:7;7434:1;7429;:6;;7421:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7492:1;7488;:5;7481:12;;7343:158;;;;:::o;7760:220::-;7818:7;7847:1;7842;:6;7838:20;;;7857:1;7850:8;;;;7838:20;7869:9;7885:1;7881;:5;7869:17;;7914:1;7909;7905;:5;;;;;;:10;7897:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7971:1;7964:8;;;7760:220;;;;;:::o;8458:153::-;8516:7;8548:1;8544;:5;8536:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8602:1;8598;:5;;;;;;8591:12;;8458:153;;;;:::o;6881:179::-;6939:7;6959:9;6975:1;6971;:5;6959:17;;7000:1;6995;:6;;6987:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7051:1;7044:8;;;6881:179;;;;:::o;20257:177::-;20340:86;20360:5;20390:23;;;20415:2;20419:5;20367:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20340:19;:86::i;:::-;20257:177;;;:::o;101276:398::-;101366:1;101344:19;;:23;:37;;;;;101380:1;101371:6;:10;101344:37;101341:326;;;101420:109;101462:52;101494:19;;101462:27;101473:15;;101462:6;:10;;:27;;;;:::i;:::-;:31;;:52;;;;:::i;:::-;101420:19;;:23;;:109;;;;:::i;:::-;101398:19;:131;;;;101565:30;101588:6;101565:18;;:22;;:30;;;;:::i;:::-;101544:18;:51;;;;101341:326;;;101637:18;101648:6;101637;;:10;;:18;;;;:::i;:::-;101628:6;:27;;;;101341:326;101276:398;:::o;20442:205::-;20543:96;20563:5;20593:27;;;20622:4;20628:2;20632:5;20570:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20543:19;:96::i;:::-;20442:205;;;;:::o;9708:166::-;9794:7;9827:1;9822;:6;;9830:12;9814:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9865:1;9861;:5;9854:12;;9708:166;;;;;:::o;22562:761::-;22986:23;23012:69;23040:4;23012:69;;;;;;;;;;;;;;;;;23020:5;23012:27;;;;:69;;;;;:::i;:::-;22986:95;;23116:1;23096:10;:17;:21;23092:224;;;23238:10;23227:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23219:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23092:224;22562:761;;;:::o;15246:195::-;15349:12;15381:52;15403:6;15411:4;15417:1;15420:12;15381:21;:52::i;:::-;15374:59;;15246:195;;;;;:::o;16298:530::-;16425:12;16483:5;16458:21;:30;;16450:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16550:18;16561:6;16550:10;:18::i;:::-;16542:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16676:12;16690:23;16717:6;:11;;16737:5;16745:4;16717:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16675:75;;;;16768:52;16786:7;16795:10;16807:12;16768:17;:52::i;:::-;16761:59;;;;16298:530;;;;;;:::o;12328:422::-;12388:4;12596:12;12707:7;12695:20;12687:28;;12741:1;12734:4;:8;12727:15;;;12328:422;;;:::o;18838:742::-;18953:12;18982:7;18978:595;;;19013:10;19006:17;;;;18978:595;19147:1;19127:10;:17;:21;19123:439;;;19390:10;19384:17;19451:15;19438:10;19434:2;19430:19;19423:44;19338:148;19533:12;19526:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18838:742;;;;;;:::o
Swarm Source
ipfs://7b01611c9e96358535108c981792ea6eaf7af3fc9a1087a87c436c17ffa7f8dd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.999048 | 89,278.3964 | $89,193.42 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.