Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 148 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exchange | 19096163 | 252 days ago | IN | 0.00174558 ETH | 0.00119385 | ||||
Exchange | 19011422 | 264 days ago | IN | 0.0085516 ETH | 0.00092447 | ||||
Exchange | 19011385 | 264 days ago | IN | 0.00855179 ETH | 0.00091136 | ||||
Exchange | 19011304 | 264 days ago | IN | 0.00855198 ETH | 0.00067504 | ||||
Exchange | 19005224 | 265 days ago | IN | 0.00209316 ETH | 0.00477225 | ||||
Exchange | 18952020 | 272 days ago | IN | 0 ETH | 0.00120038 | ||||
Exchange | 18907833 | 278 days ago | IN | 0.02513674 ETH | 0.00029968 | ||||
Exchange | 18849288 | 287 days ago | IN | 0.00394865 ETH | 0.00054415 | ||||
Exchange | 18775480 | 297 days ago | IN | 0.00218707 ETH | 0.00192219 | ||||
Exchange | 18775480 | 297 days ago | IN | 0.00229643 ETH | 0.00379488 | ||||
Exchange | 18770494 | 298 days ago | IN | 0 ETH | 0.00419554 | ||||
Exchange | 18712251 | 306 days ago | IN | 0.00268436 ETH | 0.00512101 | ||||
Exchange | 18695028 | 308 days ago | IN | 0.0103607 ETH | 0.00168001 | ||||
Exchange | 18636349 | 316 days ago | IN | 0 ETH | 0.00238941 | ||||
Exchange | 18632658 | 317 days ago | IN | 0.00292801 ETH | 0.00138855 | ||||
Exchange | 18632658 | 317 days ago | IN | 0.00292801 ETH | 0.00258871 | ||||
Exchange | 18623201 | 318 days ago | IN | 0.00243787 ETH | 0.00097417 | ||||
Exchange | 18623191 | 318 days ago | IN | 0.00243587 ETH | 0.0009669 | ||||
Exchange | 18623176 | 318 days ago | IN | 0.00243787 ETH | 0.00101245 | ||||
Exchange | 18589833 | 323 days ago | IN | 0.00112593 ETH | 0.00198449 | ||||
Exchange | 18587989 | 323 days ago | IN | 0.02268734 ETH | 0.00058923 | ||||
Exchange | 18584309 | 324 days ago | IN | 0 ETH | 0.00324342 | ||||
Exchange | 18558557 | 327 days ago | IN | 0.00756244 ETH | 0.00149004 | ||||
Exchange | 18558461 | 327 days ago | IN | 0.32880207 ETH | 0.00235201 | ||||
Exchange | 18558402 | 327 days ago | IN | 0 ETH | 0.0026407 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19096163 | 252 days ago | 0.00174558 ETH | ||||
19096160 | 252 days ago | 0.12716556 ETH | ||||
19096160 | 252 days ago | 0.12716556 ETH | ||||
19005224 | 265 days ago | 0.00209316 ETH | ||||
19005223 | 265 days ago | 0.16887423 ETH | ||||
19005223 | 265 days ago | 0.16887423 ETH | ||||
18775480 | 297 days ago | 0.00229643 ETH | ||||
18775478 | 297 days ago | 0.18442492 ETH | ||||
18775478 | 297 days ago | 0.18442492 ETH | ||||
18712251 | 306 days ago | 0.00268436 ETH | ||||
18712250 | 306 days ago | 0.2144185 ETH | ||||
18712250 | 306 days ago | 0.2144185 ETH | ||||
18632658 | 317 days ago | 0.00292801 ETH | ||||
18632655 | 317 days ago | 0.2466284 ETH | ||||
18632655 | 317 days ago | 0.2466284 ETH | ||||
18589833 | 323 days ago | 0.00112593 ETH | ||||
18589827 | 323 days ago | 0.10220734 ETH | ||||
18589827 | 323 days ago | 0.10220734 ETH | ||||
18554109 | 328 days ago | 0.00227238 ETH | ||||
18554104 | 328 days ago | 0.20386413 ETH | ||||
18554104 | 328 days ago | 0.20386413 ETH | ||||
18511511 | 334 days ago | 0.00175962 ETH | ||||
18511508 | 334 days ago | 0.16585739 ETH | ||||
18511508 | 334 days ago | 0.16585739 ETH | ||||
18482633 | 338 days ago | 0.00141265 ETH |
Loading...
Loading
Contract Name:
ExchangePool
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-24 */ /** *Submitted for verification at Etherscan.io on 2023-07-23 */ // File: contracts/util/IERC20.sol pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } /** * @dev Interface of the PERC20 */ interface IPERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); function mint(address _receiver, uint256 _amount) external; } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/ExchangePool.sol pragma solidity ^0.8.0; pragma abicoder v2; interface ILockPoolHONO { function getHONOSPlitterRate() external view returns (uint256, uint256, uint256, address, address, address); function getHONOSPlitterRateAfterXHhonoPoolDepleted() external view returns (uint256, uint256, uint256, address, address, address); } interface ILockPoolETH { function getETHSplitterRate() external view returns (uint256, uint256, address, address); function getETHSPlitterRateAfterXHhonoPoolDepleted() external view returns (uint256, uint256, address, address); } interface iHONO { function mint() external payable; function burn(uint256 _amount) external; function ETHToHONO(uint256 value) external view returns (uint256); function HONOToETH(uint256 value) external view returns (uint256); } contract ExchangePool is Ownable, Pausable, ReentrancyGuard { using SafeERC20 for IERC20; using SafeMath for uint256; address immutable public DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD; modifier onlyPermissionedAddresses() { require(permissionedAddresses[msg.sender] || msg.sender == owner() || msg.sender == distributor, "You cant"); _; } mapping(address => bool) public permissionedAddresses; IERC20 public xHONO; IERC20 public HONO; ILockPoolETH public lockPoolETH; ILockPoolHONO public lockPoolHONO; address public distributor; uint256 public exchangeFee = 25; uint256 public maxHonoToXHono = 499995000000000000000000; uint256 public totalHonoToXHonoReceived = 0; uint256 public totalHonoToXHonoConverted = 0; // EVENTS event Exchange(IERC20 _xHONO, IERC20 _HONO, uint256 _amount, uint256 _outputAmount, address _sender); constructor(IERC20 _xHONO, IERC20 _HONO, address _defaultDistributor) { xHONO = _xHONO; HONO = _HONO; if(_defaultDistributor!=0x0000000000000000000000000000000000000000) { distributor = _defaultDistributor; permissionedAddresses[_defaultDistributor] = true; } } function updateDistributor(address _distributor) external onlyOwner { distributor = _distributor; } function updateFee(uint256 _exchangeFee) external onlyOwner { exchangeFee = _exchangeFee; } function updateLockPoolETH(ILockPoolETH _lockPool) external onlyOwner { lockPoolETH = _lockPool; } function updateLockPoolHONO(ILockPoolHONO _lockPool) external onlyOwner { lockPoolHONO = _lockPool; } function updatexHONO(IERC20 _xHONO) external onlyOwner { xHONO = _xHONO; } function updateHONO(IERC20 _HONO) external onlyOwner { HONO = _HONO; } function updatetotalHonoToXHonoReceived(uint256 _totalHonoToXHonoReceived) external onlyOwner { totalHonoToXHonoReceived = _totalHonoToXHonoReceived; } function getMaxOutputAmount() public view returns (uint256) { if(totalHonoToXHonoConverted >= maxHonoToXHono) { return 0; } if(maxHonoToXHono - totalHonoToXHonoConverted < HONO.balanceOf(address(this))) { return maxHonoToXHono - totalHonoToXHonoConverted; } return HONO.balanceOf(address(this)); } function exchange(uint256 _amount) external payable whenNotPaused nonReentrant { require(xHONO.balanceOf(msg.sender) >= _amount, "token balance too low"); uint256 maxOutput = getMaxOutputAmount(); require(_amount <= maxOutput, "Exceed max amount!"); xHONO.safeTransferFrom(msg.sender, DEAD_ADDRESS, _amount); HONO.safeTransfer(msg.sender, _amount); uint256 fee = iHONO(address(HONO)).HONOToETH(_amount)*25/1000; require(fee <= msg.value, "Not enuf fee"); sendETH(distributor, msg.value); totalHonoToXHonoConverted = totalHonoToXHonoConverted + _amount; emit Exchange(xHONO, HONO, _amount, _amount, msg.sender); } // Owner can drain tokens that are sent here by mistake function drainToken(IERC20 _token, uint256 _amount, address _to) external onlyOwner { _token.safeTransfer(_to, _amount); } receive() external payable { if(permissionedAddresses[msg.sender] == true || msg.sender == distributor) { uint256 preMintBalance = HONO.balanceOf(address(this)); iHONO(address(HONO)).mint{value: msg.value}(); uint256 amount = HONO.balanceOf(address(this)) - preMintBalance; (uint256 daoRatio, uint256 xhonoRatio, address daoAddress, address xhonoPoolAddress) = lockPoolETH.getETHSplitterRate(); if(totalHonoToXHonoReceived >= maxHonoToXHono) { (daoRatio, xhonoRatio, daoAddress, xhonoPoolAddress) = lockPoolETH.getETHSPlitterRateAfterXHhonoPoolDepleted(); } uint256 daoAmount = amount * daoRatio / (daoRatio + xhonoRatio); uint256 xHONOAmount = amount - daoAmount; if(totalHonoToXHonoReceived + xHONOAmount > maxHonoToXHono && xhonoPoolAddress == address(this) && totalHonoToXHonoReceived < maxHonoToXHono) { xHONOAmount = maxHonoToXHono - totalHonoToXHonoReceived; daoAmount = amount - xHONOAmount; totalHonoToXHonoReceived = maxHonoToXHono; } if(daoAmount != 0) { HONO.transfer(daoAddress,daoAmount); } if(xHONOAmount != 0) { if(xhonoPoolAddress != address(this)) { HONO.transfer(xhonoPoolAddress,xHONOAmount); } else { totalHonoToXHonoReceived = totalHonoToXHonoReceived + xHONOAmount; } } } } function deposit(uint256 amount) external onlyPermissionedAddresses{ HONO.safeTransferFrom(msg.sender, address(this), amount); (uint256 nftTreasuryRatio, uint256 xhonoRatio, uint256 burnRatio, address nftAddress, address xhonoPoolAddress, address receiver3) = lockPoolHONO.getHONOSPlitterRate(); if(totalHonoToXHonoReceived >= maxHonoToXHono) { (nftTreasuryRatio, xhonoRatio, burnRatio, nftAddress, xhonoPoolAddress, receiver3) = lockPoolHONO.getHONOSPlitterRateAfterXHhonoPoolDepleted(); } uint256 nftTreasuryAmount = amount * nftTreasuryRatio / (nftTreasuryRatio + xhonoRatio + burnRatio); uint256 burnAmount = amount * burnRatio / (nftTreasuryRatio + xhonoRatio + burnRatio); uint256 xHONOAmount = amount - burnAmount - nftTreasuryAmount; if(totalHonoToXHonoReceived + xHONOAmount > maxHonoToXHono && xhonoPoolAddress == address(this) && totalHonoToXHonoReceived < maxHonoToXHono) { uint256 extrasAmount = totalHonoToXHonoReceived + xHONOAmount - maxHonoToXHono; nftTreasuryAmount = nftTreasuryAmount + extrasAmount*nftTreasuryRatio/(nftTreasuryRatio+burnRatio); burnAmount = burnAmount + extrasAmount - nftTreasuryAmount; xHONOAmount = xHONOAmount - extrasAmount; totalHonoToXHonoReceived = maxHonoToXHono; } if(nftTreasuryAmount != 0) { IERC20(HONO).transfer(nftAddress,nftTreasuryAmount); } if(burnAmount != 0) { if(receiver3 == DEAD_ADDRESS) { iHONO(address(HONO)).burn(burnAmount); } else { IERC20(HONO).transfer(receiver3,burnAmount); } } //the rest keep in the pool if(xHONOAmount != 0) { if(xhonoPoolAddress == address(this)) { totalHonoToXHonoReceived = totalHonoToXHonoReceived + xHONOAmount; } else { IERC20(HONO).transfer(xhonoPoolAddress, xHONOAmount); } } } function sendETH(address reciever, uint256 amount) internal { (bool success1, ) = reciever.call{value: amount}(""); require(success1, "Can't send ETH to reciever"); } function updateMinterAddress(address _botaddress, bool allow) external onlyOwner { permissionedAddresses[_botaddress] = allow; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_xHONO","type":"address"},{"internalType":"contract IERC20","name":"_HONO","type":"address"},{"internalType":"address","name":"_defaultDistributor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"_xHONO","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"_HONO","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_outputAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_sender","type":"address"}],"name":"Exchange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HONO","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"drainToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"exchange","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"exchangeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxOutputAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockPoolETH","outputs":[{"internalType":"contract ILockPoolETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockPoolHONO","outputs":[{"internalType":"contract ILockPoolHONO","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHonoToXHono","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"permissionedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalHonoToXHonoConverted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHonoToXHonoReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distributor","type":"address"}],"name":"updateDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_exchangeFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_HONO","type":"address"}],"name":"updateHONO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ILockPoolETH","name":"_lockPool","type":"address"}],"name":"updateLockPoolETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ILockPoolHONO","name":"_lockPool","type":"address"}],"name":"updateLockPoolHONO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_botaddress","type":"address"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"updateMinterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalHonoToXHonoReceived","type":"uint256"}],"name":"updatetotalHonoToXHonoReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_xHONO","type":"address"}],"name":"updatexHONO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xHONO","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405261dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525060196008556969e0c883d4f48b8c00006009556000600a556000600b553480156200006357600080fd5b50604051620036633803806200366383398181016040528101906200008991906200039f565b620000a96200009d6200022460201b60201c565b6200022c60201b60201c565b60008060146101000a81548160ff0219169083151502179055506001808190555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146200021b5780600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b505050620003fb565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200032282620002f5565b9050919050565b6000620003368262000315565b9050919050565b620003488162000329565b81146200035457600080fd5b50565b60008151905062000368816200033d565b92915050565b620003798162000315565b81146200038557600080fd5b50565b60008151905062000399816200036e565b92915050565b600080600060608486031215620003bb57620003ba620002f0565b5b6000620003cb8682870162000357565b9350506020620003de8682870162000357565b9250506040620003f18682870162000388565b9150509250925092565b60805161323e6200042560003960008181610cec01528181610e770152611707015261323e6000f3fe6080604052600436106101a05760003560e01c80638da5cb5b116100ec578063c6e1715e1161008a578063deec834411610064578063deec834414610b98578063f2fde38b14610bc1578063f5ddd22814610bea578063f9b1adb614610c15576107d9565b8063c6e1715e14610b19578063c8863e8a14610b44578063d4a1754114610b6f576107d9565b8063b6b55f25116100c6578063b6b55f2514610a73578063bc30a61814610a9c578063bfe1092814610ac5578063c564edb214610af0576107d9565b80638da5cb5b146109f65780639012c4a814610a21578063ac7216ea14610a4a576107d9565b80634eb0e0e0116101595780635f0f3cf3116101335780635f0f3cf31461096257806360f9732b1461098d578063715018a6146109b65780638d82000b146109cd576107d9565b80634eb0e0e0146108f0578063535565591461091b5780635c975abb14610937576107d9565b806311376314146107de57806315520ee51461081b57806319ff1cf5146108465780632ecd3be41461086f5780634ba191701461089a5780634e6fd6c4146108c5576107d9565b366107d95760011515600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806102515750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156107d7576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016102b39190612394565b602060405180830381865afa1580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f491906123ea565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631249c58b346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561036057600080fd5b505af1158015610374573d6000803e3d6000fd5b5050505050600081600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103d79190612394565b602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906123ea565b6104229190612446565b9050600080600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631e75d1bc6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb91906124a6565b9350935093509350600954600a541061057057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd7dcb5d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801561053b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055f91906124a6565b809450819550829650839750505050505b6000838561057e919061250d565b858761058a9190612541565b61059491906125b2565b9050600081876105a49190612446565b905060095481600a546105b7919061250d565b1180156105ef57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156105fe5750600954600a54105b1561062d57600a546009546106139190612446565b905080876106219190612446565b9150600954600a819055505b600082146106d757600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b81526004016106929291906125f2565b6020604051808303816000875af11580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190612653565b505b600081146107ce573073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146107b857600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161076f9291906125f2565b6020604051808303816000875af115801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b29190612653565b506107cd565b80600a546107c6919061250d565b600a819055505b5b50505050505050505b005b600080fd5b3480156107ea57600080fd5b5061080560048036038101906108009190612695565b610c40565b60405161081291906126d1565b60405180910390f35b34801561082757600080fd5b50610830610c60565b60405161083d919061274b565b60405180910390f35b34801561085257600080fd5b5061086d600480360381019061086891906127b9565b610c86565b005b34801561087b57600080fd5b50610884610cbe565b604051610891919061280c565b60405180910390f35b3480156108a657600080fd5b506108af610cc4565b6040516108bc9190612848565b60405180910390f35b3480156108d157600080fd5b506108da610cea565b6040516108e79190612394565b60405180910390f35b3480156108fc57600080fd5b50610905610d0e565b6040516109129190612848565b60405180910390f35b61093560048036038101906109309190612863565b610d34565b005b34801561094357600080fd5b5061094c6110f9565b60405161095991906126d1565b60405180910390f35b34801561096e57600080fd5b5061097761110f565b60405161098491906128b1565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af91906128cc565b611135565b005b3480156109c257600080fd5b506109cb611181565b005b3480156109d957600080fd5b506109f460048036038101906109ef9190612863565b611195565b005b348015610a0257600080fd5b50610a0b6111a7565b604051610a189190612394565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190612863565b6111d0565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190612937565b6111e2565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a959190612863565b61122e565b005b348015610aa857600080fd5b50610ac36004803603810190610abe9190612695565b611990565b005b348015610ad157600080fd5b50610ada6119dc565b604051610ae79190612394565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b1291906128cc565b611a02565b005b348015610b2557600080fd5b50610b2e611a4e565b604051610b3b919061280c565b60405180910390f35b348015610b5057600080fd5b50610b59611a54565b604051610b66919061280c565b60405180910390f35b348015610b7b57600080fd5b50610b966004803603810190610b919190612979565b611a5a565b005b348015610ba457600080fd5b50610bbf6004803603810190610bba91906129f7565b611abd565b005b348015610bcd57600080fd5b50610be86004803603810190610be39190612695565b611b09565b005b348015610bf657600080fd5b50610bff611b8c565b604051610c0c919061280c565b60405180910390f35b348015610c2157600080fd5b50610c2a611b92565b604051610c37919061280c565b60405180910390f35b60026020528060005260406000206000915054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c8e611d13565b610cb981838573ffffffffffffffffffffffffffffffffffffffff16611d919092919063ffffffff16565b505050565b60085481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d3c611e17565b610d44611e61565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610da09190612394565b602060405180830381865afa158015610dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de191906123ea565b1015610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990612a81565b60405180910390fd5b6000610e2c611b92565b905080821115610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890612aed565b60405180910390fd5b610ee0337f000000000000000000000000000000000000000000000000000000000000000084600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611eb0909392919063ffffffff16565b610f2d3383600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611d919092919063ffffffff16565b60006103e86019600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663025da47e866040518263ffffffff1660e01b8152600401610f8f919061280c565b602060405180830381865afa158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd091906123ea565b610fda9190612541565b610fe491906125b2565b905034811115611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090612b59565b60405180910390fd5b611055600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634611f39565b82600b54611063919061250d565b600b819055507fdc8e0b486b655134c3cd2571f9277811cf6615c123b8b5c0879ceb1b0c234978600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168586336040516110e4959493929190612b79565b60405180910390a150506110f6611fea565b50565b60008060149054906101000a900460ff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61113d611d13565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611189611d13565b6111936000611ff3565b565b61119d611d13565b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111d8611d13565b8060088190555050565b6111ea611d13565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112b857506112896111a7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113105750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134690612c18565b60405180910390fd5b61139e333083600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611eb0909392919063ffffffff16565b600080600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398feb4846040518163ffffffff1660e01b815260040160c060405180830381865afa158015611414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114389190612c38565b955095509550955095509550600954600a54106114f957600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e050f6046040518163ffffffff1660e01b815260040160c060405180830381865afa1580156114bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e09190612c38565b809650819750829850839950849a50859b505050505050505b6000848688611508919061250d565b611512919061250d565b878961151e9190612541565b61152891906125b2565b90506000858789611539919061250d565b611543919061250d565b868a61154f9190612541565b61155991906125b2565b9050600082828b61156a9190612446565b6115749190612446565b905060095481600a54611587919061250d565b1180156115bf57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156115ce5750600954600a54105b1561165357600060095482600a546115e6919061250d565b6115f09190612446565b9050878a6115fe919061250d565b8a8261160a9190612541565b61161491906125b2565b8461161f919061250d565b935083818461162e919061250d565b6116389190612446565b925080826116469190612446565b9150600954600a81905550505b600083146116fd57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87856040518363ffffffff1660e01b81526004016116b89291906125f2565b6020604051808303816000875af11580156116d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fb9190612653565b505b6000821461188d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117ea57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b81526004016117b3919061280c565b600060405180830381600087803b1580156117cd57600080fd5b505af11580156117e1573d6000803e3d6000fd5b5050505061188c565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b81526004016118479291906125f2565b6020604051808303816000875af1158015611866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188a9190612653565b505b5b60008114611984573073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036118e15780600a546118d6919061250d565b600a81905550611983565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b815260040161193e9291906125f2565b6020604051808303816000875af115801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190612653565b505b5b50505050505050505050565b611998611d13565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a0a611d13565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b600a5481565b611a62611d13565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ac5611d13565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b11611d13565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790612d37565b60405180910390fd5b611b8981611ff3565b50565b60095481565b6000600954600b5410611ba85760009050611d10565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c039190612394565b602060405180830381865afa158015611c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4491906123ea565b600b54600954611c549190612446565b1015611c7157600b54600954611c6a9190612446565b9050611d10565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ccc9190612394565b602060405180830381865afa158015611ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0d91906123ea565b90505b90565b611d1b6120b7565b73ffffffffffffffffffffffffffffffffffffffff16611d396111a7565b73ffffffffffffffffffffffffffffffffffffffff1614611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690612da3565b60405180910390fd5b565b611e128363a9059cbb60e01b8484604051602401611db09291906125f2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120bf565b505050565b611e1f6110f9565b15611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690612e0f565b60405180910390fd5b565b600260015403611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90612e7b565b60405180910390fd5b6002600181905550565b611f33846323b872dd60e01b858585604051602401611ed193929190612e9b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120bf565b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611f5f90612f03565b60006040518083038185875af1925050503d8060008114611f9c576040519150601f19603f3d011682016040523d82523d6000602084013e611fa1565b606091505b5050905080611fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdc90612f64565b60405180910390fd5b505050565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000612121826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121869092919063ffffffff16565b905060008151111561218157808060200190518101906121419190612653565b612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790612ff6565b60405180910390fd5b5b505050565b6060612195848460008561219e565b90509392505050565b6060824710156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90613088565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161220c919061310e565b60006040518083038185875af1925050503d8060008114612249576040519150601f19603f3d011682016040523d82523d6000602084013e61224e565b606091505b509150915061225f8783838761226b565b92505050949350505050565b606083156122cd5760008351036122c557612285856122e0565b6122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90613171565b60405180910390fd5b5b8290506122d8565b6122d78383612303565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156123165781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a91906131e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061237e82612353565b9050919050565b61238e81612373565b82525050565b60006020820190506123a96000830184612385565b92915050565b600080fd5b6000819050919050565b6123c7816123b4565b81146123d257600080fd5b50565b6000815190506123e4816123be565b92915050565b600060208284031215612400576123ff6123af565b5b600061240e848285016123d5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612451826123b4565b915061245c836123b4565b925082820390508181111561247457612473612417565b5b92915050565b61248381612373565b811461248e57600080fd5b50565b6000815190506124a08161247a565b92915050565b600080600080608085870312156124c0576124bf6123af565b5b60006124ce878288016123d5565b94505060206124df878288016123d5565b93505060406124f087828801612491565b925050606061250187828801612491565b91505092959194509250565b6000612518826123b4565b9150612523836123b4565b925082820190508082111561253b5761253a612417565b5b92915050565b600061254c826123b4565b9150612557836123b4565b9250828202612565816123b4565b9150828204841483151761257c5761257b612417565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125bd826123b4565b91506125c8836123b4565b9250826125d8576125d7612583565b5b828204905092915050565b6125ec816123b4565b82525050565b60006040820190506126076000830185612385565b61261460208301846125e3565b9392505050565b60008115159050919050565b6126308161261b565b811461263b57600080fd5b50565b60008151905061264d81612627565b92915050565b600060208284031215612669576126686123af565b5b60006126778482850161263e565b91505092915050565b60008135905061268f8161247a565b92915050565b6000602082840312156126ab576126aa6123af565b5b60006126b984828501612680565b91505092915050565b6126cb8161261b565b82525050565b60006020820190506126e660008301846126c2565b92915050565b6000819050919050565b600061271161270c61270784612353565b6126ec565b612353565b9050919050565b6000612723826126f6565b9050919050565b600061273582612718565b9050919050565b6127458161272a565b82525050565b6000602082019050612760600083018461273c565b92915050565b600061277182612373565b9050919050565b61278181612766565b811461278c57600080fd5b50565b60008135905061279e81612778565b92915050565b6000813590506127b3816123be565b92915050565b6000806000606084860312156127d2576127d16123af565b5b60006127e08682870161278f565b93505060206127f1868287016127a4565b925050604061280286828701612680565b9150509250925092565b600060208201905061282160008301846125e3565b92915050565b600061283282612718565b9050919050565b61284281612827565b82525050565b600060208201905061285d6000830184612839565b92915050565b600060208284031215612879576128786123af565b5b6000612887848285016127a4565b91505092915050565b600061289b82612718565b9050919050565b6128ab81612890565b82525050565b60006020820190506128c660008301846128a2565b92915050565b6000602082840312156128e2576128e16123af565b5b60006128f08482850161278f565b91505092915050565b600061290482612373565b9050919050565b612914816128f9565b811461291f57600080fd5b50565b6000813590506129318161290b565b92915050565b60006020828403121561294d5761294c6123af565b5b600061295b84828501612922565b91505092915050565b60008135905061297381612627565b92915050565b600080604083850312156129905761298f6123af565b5b600061299e85828601612680565b92505060206129af85828601612964565b9150509250929050565b60006129c482612373565b9050919050565b6129d4816129b9565b81146129df57600080fd5b50565b6000813590506129f1816129cb565b92915050565b600060208284031215612a0d57612a0c6123af565b5b6000612a1b848285016129e2565b91505092915050565b600082825260208201905092915050565b7f746f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b6000612a6b601583612a24565b9150612a7682612a35565b602082019050919050565b60006020820190508181036000830152612a9a81612a5e565b9050919050565b7f457863656564206d617820616d6f756e74210000000000000000000000000000600082015250565b6000612ad7601283612a24565b9150612ae282612aa1565b602082019050919050565b60006020820190508181036000830152612b0681612aca565b9050919050565b7f4e6f7420656e7566206665650000000000000000000000000000000000000000600082015250565b6000612b43600c83612a24565b9150612b4e82612b0d565b602082019050919050565b60006020820190508181036000830152612b7281612b36565b9050919050565b600060a082019050612b8e6000830188612839565b612b9b6020830187612839565b612ba860408301866125e3565b612bb560608301856125e3565b612bc26080830184612385565b9695505050505050565b7f596f752063616e74000000000000000000000000000000000000000000000000600082015250565b6000612c02600883612a24565b9150612c0d82612bcc565b602082019050919050565b60006020820190508181036000830152612c3181612bf5565b9050919050565b60008060008060008060c08789031215612c5557612c546123af565b5b6000612c6389828a016123d5565b9650506020612c7489828a016123d5565b9550506040612c8589828a016123d5565b9450506060612c9689828a01612491565b9350506080612ca789828a01612491565b92505060a0612cb889828a01612491565b9150509295509295509295565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d21602683612a24565b9150612d2c82612cc5565b604082019050919050565b60006020820190508181036000830152612d5081612d14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d8d602083612a24565b9150612d9882612d57565b602082019050919050565b60006020820190508181036000830152612dbc81612d80565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612df9601083612a24565b9150612e0482612dc3565b602082019050919050565b60006020820190508181036000830152612e2881612dec565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612e65601f83612a24565b9150612e7082612e2f565b602082019050919050565b60006020820190508181036000830152612e9481612e58565b9050919050565b6000606082019050612eb06000830186612385565b612ebd6020830185612385565b612eca60408301846125e3565b949350505050565b600081905092915050565b50565b6000612eed600083612ed2565b9150612ef882612edd565b600082019050919050565b6000612f0e82612ee0565b9150819050919050565b7f43616e27742073656e642045544820746f207265636965766572000000000000600082015250565b6000612f4e601a83612a24565b9150612f5982612f18565b602082019050919050565b60006020820190508181036000830152612f7d81612f41565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612fe0602a83612a24565b9150612feb82612f84565b604082019050919050565b6000602082019050818103600083015261300f81612fd3565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613072602683612a24565b915061307d82613016565b604082019050919050565b600060208201905081810360008301526130a181613065565b9050919050565b600081519050919050565b60005b838110156130d15780820151818401526020810190506130b6565b60008484015250505050565b60006130e8826130a8565b6130f28185612ed2565b93506131028185602086016130b3565b80840191505092915050565b600061311a82846130dd565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061315b601d83612a24565b915061316682613125565b602082019050919050565b6000602082019050818103600083015261318a8161314e565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006131b882613191565b6131c28185612a24565b93506131d28185602086016130b3565b6131db8161319c565b840191505092915050565b6000602082019050818103600083015261320081846131ad565b90509291505056fea2646970667358221220ea01c4729a3f368d34d27441a6d876b6f8a738ee34780f8f90a66c2f50ff0b4264736f6c6343000812003300000000000000000000000074e4c18eb9d7390f6bf7bc477d94b516083660480000000000000000000000008f5ac7f3cfeffb6eb638a8add2d32661f82c03fd000000000000000000000000741dfc87852ddcf8791c04de1e1f832fa3445f56
Deployed Bytecode
0x6080604052600436106101a05760003560e01c80638da5cb5b116100ec578063c6e1715e1161008a578063deec834411610064578063deec834414610b98578063f2fde38b14610bc1578063f5ddd22814610bea578063f9b1adb614610c15576107d9565b8063c6e1715e14610b19578063c8863e8a14610b44578063d4a1754114610b6f576107d9565b8063b6b55f25116100c6578063b6b55f2514610a73578063bc30a61814610a9c578063bfe1092814610ac5578063c564edb214610af0576107d9565b80638da5cb5b146109f65780639012c4a814610a21578063ac7216ea14610a4a576107d9565b80634eb0e0e0116101595780635f0f3cf3116101335780635f0f3cf31461096257806360f9732b1461098d578063715018a6146109b65780638d82000b146109cd576107d9565b80634eb0e0e0146108f0578063535565591461091b5780635c975abb14610937576107d9565b806311376314146107de57806315520ee51461081b57806319ff1cf5146108465780632ecd3be41461086f5780634ba191701461089a5780634e6fd6c4146108c5576107d9565b366107d95760011515600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806102515750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156107d7576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016102b39190612394565b602060405180830381865afa1580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f491906123ea565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631249c58b346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561036057600080fd5b505af1158015610374573d6000803e3d6000fd5b5050505050600081600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103d79190612394565b602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906123ea565b6104229190612446565b9050600080600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631e75d1bc6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb91906124a6565b9350935093509350600954600a541061057057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd7dcb5d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801561053b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055f91906124a6565b809450819550829650839750505050505b6000838561057e919061250d565b858761058a9190612541565b61059491906125b2565b9050600081876105a49190612446565b905060095481600a546105b7919061250d565b1180156105ef57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156105fe5750600954600a54105b1561062d57600a546009546106139190612446565b905080876106219190612446565b9150600954600a819055505b600082146106d757600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b81526004016106929291906125f2565b6020604051808303816000875af11580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190612653565b505b600081146107ce573073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146107b857600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161076f9291906125f2565b6020604051808303816000875af115801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b29190612653565b506107cd565b80600a546107c6919061250d565b600a819055505b5b50505050505050505b005b600080fd5b3480156107ea57600080fd5b5061080560048036038101906108009190612695565b610c40565b60405161081291906126d1565b60405180910390f35b34801561082757600080fd5b50610830610c60565b60405161083d919061274b565b60405180910390f35b34801561085257600080fd5b5061086d600480360381019061086891906127b9565b610c86565b005b34801561087b57600080fd5b50610884610cbe565b604051610891919061280c565b60405180910390f35b3480156108a657600080fd5b506108af610cc4565b6040516108bc9190612848565b60405180910390f35b3480156108d157600080fd5b506108da610cea565b6040516108e79190612394565b60405180910390f35b3480156108fc57600080fd5b50610905610d0e565b6040516109129190612848565b60405180910390f35b61093560048036038101906109309190612863565b610d34565b005b34801561094357600080fd5b5061094c6110f9565b60405161095991906126d1565b60405180910390f35b34801561096e57600080fd5b5061097761110f565b60405161098491906128b1565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af91906128cc565b611135565b005b3480156109c257600080fd5b506109cb611181565b005b3480156109d957600080fd5b506109f460048036038101906109ef9190612863565b611195565b005b348015610a0257600080fd5b50610a0b6111a7565b604051610a189190612394565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190612863565b6111d0565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190612937565b6111e2565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a959190612863565b61122e565b005b348015610aa857600080fd5b50610ac36004803603810190610abe9190612695565b611990565b005b348015610ad157600080fd5b50610ada6119dc565b604051610ae79190612394565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b1291906128cc565b611a02565b005b348015610b2557600080fd5b50610b2e611a4e565b604051610b3b919061280c565b60405180910390f35b348015610b5057600080fd5b50610b59611a54565b604051610b66919061280c565b60405180910390f35b348015610b7b57600080fd5b50610b966004803603810190610b919190612979565b611a5a565b005b348015610ba457600080fd5b50610bbf6004803603810190610bba91906129f7565b611abd565b005b348015610bcd57600080fd5b50610be86004803603810190610be39190612695565b611b09565b005b348015610bf657600080fd5b50610bff611b8c565b604051610c0c919061280c565b60405180910390f35b348015610c2157600080fd5b50610c2a611b92565b604051610c37919061280c565b60405180910390f35b60026020528060005260406000206000915054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c8e611d13565b610cb981838573ffffffffffffffffffffffffffffffffffffffff16611d919092919063ffffffff16565b505050565b60085481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000dead81565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d3c611e17565b610d44611e61565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610da09190612394565b602060405180830381865afa158015610dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de191906123ea565b1015610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990612a81565b60405180910390fd5b6000610e2c611b92565b905080821115610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890612aed565b60405180910390fd5b610ee0337f000000000000000000000000000000000000000000000000000000000000dead84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611eb0909392919063ffffffff16565b610f2d3383600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611d919092919063ffffffff16565b60006103e86019600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663025da47e866040518263ffffffff1660e01b8152600401610f8f919061280c565b602060405180830381865afa158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd091906123ea565b610fda9190612541565b610fe491906125b2565b905034811115611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090612b59565b60405180910390fd5b611055600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634611f39565b82600b54611063919061250d565b600b819055507fdc8e0b486b655134c3cd2571f9277811cf6615c123b8b5c0879ceb1b0c234978600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168586336040516110e4959493929190612b79565b60405180910390a150506110f6611fea565b50565b60008060149054906101000a900460ff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61113d611d13565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611189611d13565b6111936000611ff3565b565b61119d611d13565b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111d8611d13565b8060088190555050565b6111ea611d13565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112b857506112896111a7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113105750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134690612c18565b60405180910390fd5b61139e333083600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611eb0909392919063ffffffff16565b600080600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398feb4846040518163ffffffff1660e01b815260040160c060405180830381865afa158015611414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114389190612c38565b955095509550955095509550600954600a54106114f957600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e050f6046040518163ffffffff1660e01b815260040160c060405180830381865afa1580156114bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e09190612c38565b809650819750829850839950849a50859b505050505050505b6000848688611508919061250d565b611512919061250d565b878961151e9190612541565b61152891906125b2565b90506000858789611539919061250d565b611543919061250d565b868a61154f9190612541565b61155991906125b2565b9050600082828b61156a9190612446565b6115749190612446565b905060095481600a54611587919061250d565b1180156115bf57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156115ce5750600954600a54105b1561165357600060095482600a546115e6919061250d565b6115f09190612446565b9050878a6115fe919061250d565b8a8261160a9190612541565b61161491906125b2565b8461161f919061250d565b935083818461162e919061250d565b6116389190612446565b925080826116469190612446565b9150600954600a81905550505b600083146116fd57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87856040518363ffffffff1660e01b81526004016116b89291906125f2565b6020604051808303816000875af11580156116d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fb9190612653565b505b6000821461188d577f000000000000000000000000000000000000000000000000000000000000dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117ea57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b81526004016117b3919061280c565b600060405180830381600087803b1580156117cd57600080fd5b505af11580156117e1573d6000803e3d6000fd5b5050505061188c565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b81526004016118479291906125f2565b6020604051808303816000875af1158015611866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188a9190612653565b505b5b60008114611984573073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036118e15780600a546118d6919061250d565b600a81905550611983565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b815260040161193e9291906125f2565b6020604051808303816000875af115801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190612653565b505b5b50505050505050505050565b611998611d13565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a0a611d13565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b600a5481565b611a62611d13565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ac5611d13565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b11611d13565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790612d37565b60405180910390fd5b611b8981611ff3565b50565b60095481565b6000600954600b5410611ba85760009050611d10565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c039190612394565b602060405180830381865afa158015611c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4491906123ea565b600b54600954611c549190612446565b1015611c7157600b54600954611c6a9190612446565b9050611d10565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ccc9190612394565b602060405180830381865afa158015611ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0d91906123ea565b90505b90565b611d1b6120b7565b73ffffffffffffffffffffffffffffffffffffffff16611d396111a7565b73ffffffffffffffffffffffffffffffffffffffff1614611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690612da3565b60405180910390fd5b565b611e128363a9059cbb60e01b8484604051602401611db09291906125f2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120bf565b505050565b611e1f6110f9565b15611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690612e0f565b60405180910390fd5b565b600260015403611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90612e7b565b60405180910390fd5b6002600181905550565b611f33846323b872dd60e01b858585604051602401611ed193929190612e9b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120bf565b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611f5f90612f03565b60006040518083038185875af1925050503d8060008114611f9c576040519150601f19603f3d011682016040523d82523d6000602084013e611fa1565b606091505b5050905080611fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdc90612f64565b60405180910390fd5b505050565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000612121826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121869092919063ffffffff16565b905060008151111561218157808060200190518101906121419190612653565b612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790612ff6565b60405180910390fd5b5b505050565b6060612195848460008561219e565b90509392505050565b6060824710156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90613088565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161220c919061310e565b60006040518083038185875af1925050503d8060008114612249576040519150601f19603f3d011682016040523d82523d6000602084013e61224e565b606091505b509150915061225f8783838761226b565b92505050949350505050565b606083156122cd5760008351036122c557612285856122e0565b6122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90613171565b60405180910390fd5b5b8290506122d8565b6122d78383612303565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156123165781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a91906131e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061237e82612353565b9050919050565b61238e81612373565b82525050565b60006020820190506123a96000830184612385565b92915050565b600080fd5b6000819050919050565b6123c7816123b4565b81146123d257600080fd5b50565b6000815190506123e4816123be565b92915050565b600060208284031215612400576123ff6123af565b5b600061240e848285016123d5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612451826123b4565b915061245c836123b4565b925082820390508181111561247457612473612417565b5b92915050565b61248381612373565b811461248e57600080fd5b50565b6000815190506124a08161247a565b92915050565b600080600080608085870312156124c0576124bf6123af565b5b60006124ce878288016123d5565b94505060206124df878288016123d5565b93505060406124f087828801612491565b925050606061250187828801612491565b91505092959194509250565b6000612518826123b4565b9150612523836123b4565b925082820190508082111561253b5761253a612417565b5b92915050565b600061254c826123b4565b9150612557836123b4565b9250828202612565816123b4565b9150828204841483151761257c5761257b612417565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125bd826123b4565b91506125c8836123b4565b9250826125d8576125d7612583565b5b828204905092915050565b6125ec816123b4565b82525050565b60006040820190506126076000830185612385565b61261460208301846125e3565b9392505050565b60008115159050919050565b6126308161261b565b811461263b57600080fd5b50565b60008151905061264d81612627565b92915050565b600060208284031215612669576126686123af565b5b60006126778482850161263e565b91505092915050565b60008135905061268f8161247a565b92915050565b6000602082840312156126ab576126aa6123af565b5b60006126b984828501612680565b91505092915050565b6126cb8161261b565b82525050565b60006020820190506126e660008301846126c2565b92915050565b6000819050919050565b600061271161270c61270784612353565b6126ec565b612353565b9050919050565b6000612723826126f6565b9050919050565b600061273582612718565b9050919050565b6127458161272a565b82525050565b6000602082019050612760600083018461273c565b92915050565b600061277182612373565b9050919050565b61278181612766565b811461278c57600080fd5b50565b60008135905061279e81612778565b92915050565b6000813590506127b3816123be565b92915050565b6000806000606084860312156127d2576127d16123af565b5b60006127e08682870161278f565b93505060206127f1868287016127a4565b925050604061280286828701612680565b9150509250925092565b600060208201905061282160008301846125e3565b92915050565b600061283282612718565b9050919050565b61284281612827565b82525050565b600060208201905061285d6000830184612839565b92915050565b600060208284031215612879576128786123af565b5b6000612887848285016127a4565b91505092915050565b600061289b82612718565b9050919050565b6128ab81612890565b82525050565b60006020820190506128c660008301846128a2565b92915050565b6000602082840312156128e2576128e16123af565b5b60006128f08482850161278f565b91505092915050565b600061290482612373565b9050919050565b612914816128f9565b811461291f57600080fd5b50565b6000813590506129318161290b565b92915050565b60006020828403121561294d5761294c6123af565b5b600061295b84828501612922565b91505092915050565b60008135905061297381612627565b92915050565b600080604083850312156129905761298f6123af565b5b600061299e85828601612680565b92505060206129af85828601612964565b9150509250929050565b60006129c482612373565b9050919050565b6129d4816129b9565b81146129df57600080fd5b50565b6000813590506129f1816129cb565b92915050565b600060208284031215612a0d57612a0c6123af565b5b6000612a1b848285016129e2565b91505092915050565b600082825260208201905092915050565b7f746f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b6000612a6b601583612a24565b9150612a7682612a35565b602082019050919050565b60006020820190508181036000830152612a9a81612a5e565b9050919050565b7f457863656564206d617820616d6f756e74210000000000000000000000000000600082015250565b6000612ad7601283612a24565b9150612ae282612aa1565b602082019050919050565b60006020820190508181036000830152612b0681612aca565b9050919050565b7f4e6f7420656e7566206665650000000000000000000000000000000000000000600082015250565b6000612b43600c83612a24565b9150612b4e82612b0d565b602082019050919050565b60006020820190508181036000830152612b7281612b36565b9050919050565b600060a082019050612b8e6000830188612839565b612b9b6020830187612839565b612ba860408301866125e3565b612bb560608301856125e3565b612bc26080830184612385565b9695505050505050565b7f596f752063616e74000000000000000000000000000000000000000000000000600082015250565b6000612c02600883612a24565b9150612c0d82612bcc565b602082019050919050565b60006020820190508181036000830152612c3181612bf5565b9050919050565b60008060008060008060c08789031215612c5557612c546123af565b5b6000612c6389828a016123d5565b9650506020612c7489828a016123d5565b9550506040612c8589828a016123d5565b9450506060612c9689828a01612491565b9350506080612ca789828a01612491565b92505060a0612cb889828a01612491565b9150509295509295509295565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d21602683612a24565b9150612d2c82612cc5565b604082019050919050565b60006020820190508181036000830152612d5081612d14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d8d602083612a24565b9150612d9882612d57565b602082019050919050565b60006020820190508181036000830152612dbc81612d80565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612df9601083612a24565b9150612e0482612dc3565b602082019050919050565b60006020820190508181036000830152612e2881612dec565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612e65601f83612a24565b9150612e7082612e2f565b602082019050919050565b60006020820190508181036000830152612e9481612e58565b9050919050565b6000606082019050612eb06000830186612385565b612ebd6020830185612385565b612eca60408301846125e3565b949350505050565b600081905092915050565b50565b6000612eed600083612ed2565b9150612ef882612edd565b600082019050919050565b6000612f0e82612ee0565b9150819050919050565b7f43616e27742073656e642045544820746f207265636965766572000000000000600082015250565b6000612f4e601a83612a24565b9150612f5982612f18565b602082019050919050565b60006020820190508181036000830152612f7d81612f41565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612fe0602a83612a24565b9150612feb82612f84565b604082019050919050565b6000602082019050818103600083015261300f81612fd3565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613072602683612a24565b915061307d82613016565b604082019050919050565b600060208201905081810360008301526130a181613065565b9050919050565b600081519050919050565b60005b838110156130d15780820151818401526020810190506130b6565b60008484015250505050565b60006130e8826130a8565b6130f28185612ed2565b93506131028185602086016130b3565b80840191505092915050565b600061311a82846130dd565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061315b601d83612a24565b915061316682613125565b602082019050919050565b6000602082019050818103600083015261318a8161314e565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006131b882613191565b6131c28185612a24565b93506131d28185602086016130b3565b6131db8161319c565b840191505092915050565b6000602082019050818103600083015261320081846131ad565b90509291505056fea2646970667358221220ea01c4729a3f368d34d27441a6d876b6f8a738ee34780f8f90a66c2f50ff0b4264736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000074e4c18eb9d7390f6bf7bc477d94b516083660480000000000000000000000008f5ac7f3cfeffb6eb638a8add2d32661f82c03fd000000000000000000000000741dfc87852ddcf8791c04de1e1f832fa3445f56
-----Decoded View---------------
Arg [0] : _xHONO (address): 0x74e4C18Eb9D7390f6Bf7BC477d94B51608366048
Arg [1] : _HONO (address): 0x8F5ac7F3cfeFfB6EB638A8aDd2d32661F82C03FD
Arg [2] : _defaultDistributor (address): 0x741DFc87852ddCF8791c04DE1e1F832FA3445F56
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000074e4c18eb9d7390f6bf7bc477d94b51608366048
Arg [1] : 0000000000000000000000008f5ac7f3cfeffb6eb638a8add2d32661f82c03fd
Arg [2] : 000000000000000000000000741dfc87852ddcf8791c04de1e1f832fa3445f56
Deployed Bytecode Sourcemap
38117:7840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41713:4;41676:41;;:21;:33;41698:10;41676:33;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;:70;;;;41735:11;;;;;;;;;;;41721:25;;:10;:25;;;41676:70;41673:1682;;;41772:22;41797:4;;;;;;;;;;;:14;;;41820:4;41797:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41772:54;;41855:4;;;;;;;;;;;41841:25;;;41874:9;41841:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41901:14;41950;41918:4;;;;;;;;;;;:14;;;41941:4;41918:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;41901:63;;41994:16;42012:18;42032;42052:24;42080:11;;;;;;;;;;;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41993:119;;;;;;;;42172:14;;42144:24;;:42;42141:205;;42275:11;;;;;;;;;;;:53;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42220:110;;;;;;;;;;;;;;;;42141:205;42362:17;42414:10;42403:8;:21;;;;:::i;:::-;42391:8;42382:6;:17;;;;:::i;:::-;:43;;;;:::i;:::-;42362:63;;42440:19;42471:9;42462:6;:18;;;;:::i;:::-;42440:40;;42541:14;;42527:11;42500:24;;:38;;;;:::i;:::-;:55;:92;;;;;42587:4;42559:33;;:16;:33;;;42500:92;:137;;;;;42623:14;;42596:24;;:41;42500:137;42497:356;;;42702:24;;42685:14;;:41;;;;:::i;:::-;42671:55;;42766:11;42757:6;:20;;;;:::i;:::-;42745:32;;42823:14;;42796:24;:41;;;;42497:356;42885:1;42872:9;:14;42869:102;;42920:4;;;;;;;;;;;:13;;;42934:10;42945:9;42920:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42869:102;43005:1;42990:11;:16;42987:357;;43071:4;43043:33;;:16;:33;;;43040:289;;43118:4;;;;;;;;;;;:13;;;43132:16;43149:11;43118:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43040:289;;;43298:11;43271:24;;:38;;;;:::i;:::-;43244:24;:65;;;;43040:289;42987:357;41757:1598;;;;;;;;41673:1682;38117:7840;;;;;38531:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38644:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41487:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38755:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38619:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38260:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38593:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40711:707;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33576:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38682:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39939:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36434:103;;;;;;;;;;;;;:::i;:::-;;40127:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35793:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39583:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39696:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43370:2232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39462:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38722:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40035:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38906:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38856:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45812:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39816:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36692:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38793:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40300:403;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38531:53;;;;;;;;;;;;;;;;;;;;;;:::o;38644:31::-;;;;;;;;;;;;;:::o;41487:136::-;35679:13;:11;:13::i;:::-;41582:33:::1;41602:3;41607:7;41582:6;:19;;;;:33;;;;;:::i;:::-;41487:136:::0;;;:::o;38755:31::-;;;;:::o;38619:18::-;;;;;;;;;;;;;:::o;38260:82::-;;;:::o;38593:19::-;;;;;;;;;;;;;:::o;40711:707::-;33181:19;:17;:19::i;:::-;2307:21:::1;:19;:21::i;:::-;40840:7:::2;40809:5;;;;;;;;;;;:15;;;40825:10;40809:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;40801:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;40884:17;40904:20;:18;:20::i;:::-;40884:40;;40954:9;40943:7;:20;;40935:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40997:57;41020:10;41032:12;41046:7;40997:5;;;;;;;;;;;:22;;;;:57;;;;;;:::i;:::-;41065:38;41083:10;41095:7;41065:4;;;;;;;;;;;:17;;;;:38;;;;;:::i;:::-;41114:11;41171:4;41168:2;41142:4;;;;;;;;;;;41128:30;;;41159:7;41128:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;:47;;;;:::i;:::-;41114:61;;41201:9;41194:3;:16;;41186:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;41238:31;41246:11;;;;;;;;;;;41259:9;41238:7;:31::i;:::-;41336:7;41308:25;;:35;;;;:::i;:::-;41280:25;:63;;;;41359:51;41368:5;;;;;;;;;;;41375:4;;;;;;;;;;;41381:7;41390;41399:10;41359:51;;;;;;;;;;:::i;:::-;;;;;;;;40790:628;;2351:20:::1;:18;:20::i;:::-;40711:707:::0;:::o;33576:86::-;33623:4;33647:7;;;;;;;;;;;33640:14;;33576:86;:::o;38682:33::-;;;;;;;;;;;;;:::o;39939:88::-;35679:13;:11;:13::i;:::-;40013:6:::1;40005:5;;:14;;;;;;;;;;;;;;;;;;39939:88:::0;:::o;36434:103::-;35679:13;:11;:13::i;:::-;36499:30:::1;36526:1;36499:18;:30::i;:::-;36434:103::o:0;40127:165::-;35679:13;:11;:13::i;:::-;40259:25:::1;40232:24;:52;;;;40127:165:::0;:::o;35793:87::-;35839:7;35866:6;;;;;;;;;;;35859:13;;35793:87;:::o;39583:105::-;35679:13;:11;:13::i;:::-;39668:12:::1;39654:11;:26;;;;39583:105:::0;:::o;39696:112::-;35679:13;:11;:13::i;:::-;39791:9:::1;39777:11;;:23;;;;;;;;;;;;;;;;;;39696:112:::0;:::o;43370:2232::-;38405:21;:33;38427:10;38405:33;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;38456:7;:5;:7::i;:::-;38442:21;;:10;:21;;;38405:58;:87;;;;38481:11;;;;;;;;;;;38467:25;;:10;:25;;;38405:87;38397:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;43448:56:::1;43470:10;43490:4;43497:6;43448:4;;;;;;;;;;;:21;;;;:56;;;;;;:::i;:::-;43516:24;43542:18:::0;43562:17:::1;43581:18:::0;43601:24:::1;43627:17:::0;43648:12:::1;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43515:167;;;;;;;;;;;;43734:14;;43706:24;;:42;43703:224;;43858:12;;;;;;;;;;;:55;;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43773:142;;;;;;;;;;;;;;;;;;;;;;;;43703:224;43939:25;44028:9;44015:10;43996:16;:29;;;;:::i;:::-;:41;;;;:::i;:::-;43976:16;43967:6;:25;;;;:::i;:::-;:71;;;;:::i;:::-;43939:99;;44049:18;44124:9;44111:10;44092:16;:29;;;;:::i;:::-;:41;;;;:::i;:::-;44079:9;44070:6;:18;;;;:::i;:::-;:64;;;;:::i;:::-;44049:85;;44145:19;44189:17;44176:10;44167:6;:19;;;;:::i;:::-;:39;;;;:::i;:::-;44145:61;;44263:14;;44249:11;44222:24;;:38;;;;:::i;:::-;:55;:102;;;;;44319:4;44291:33;;:16;:33;;;44222:102;:156;;;;;44364:14;;44337:24;;:41;44222:156;44219:573;;;44404:20;44469:14;;44454:11;44427:24;;:38;;;;:::i;:::-;:56;;;;:::i;:::-;44404:79;;44586:9;44569:16;:26;;;;:::i;:::-;44551:16;44538:12;:29;;;;:::i;:::-;:58;;;;:::i;:::-;44518:17;:78;;;;:::i;:::-;44498:98;;44652:17;44637:12;44624:10;:25;;;;:::i;:::-;:45;;;;:::i;:::-;44611:58;;44712:12;44698:11;:26;;;;:::i;:::-;44684:40;;44766:14;;44739:24;:41;;;;44389:403;44219:573;44828:1;44807:17;:22;44804:114;;44862:4;;;;;;;;;;;44855:21;;;44877:10;44888:17;44855:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44804:114;44945:1;44931:10;:15;44928:280;;44988:12;44975:25;;:9;:25;;::::0;44972:225:::1;;45048:4;;;;;;;;;;;45034:25;;;45060:10;45034:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44972:225;;;45145:4;;;;;;;;;;;45138:21;;;45160:9;45170:10;45138:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44972:225;44928:280;45273:1;45258:11;:16;45255:340;;45331:4;45303:33;;:16;:33;;::::0;45300:270:::1;;45424:11;45397:24;;:38;;;;:::i;:::-;45370:24;:65;;;;45300:270;;;45509:4;;;;;;;;;;;45502:21;;;45524:16;45542:11;45502:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45300:270;45255:340;43437:2165;;;;;;;;;43370:2232:::0;:::o;39462:113::-;35679:13;:11;:13::i;:::-;39555:12:::1;39541:11;;:26;;;;;;;;;;;;;;;;;;39462:113:::0;:::o;38722:26::-;;;;;;;;;;;;;:::o;40035:84::-;35679:13;:11;:13::i;:::-;40106:5:::1;40099:4;;:12;;;;;;;;;;;;;;;;;;40035:84:::0;:::o;38906:44::-;;;;:::o;38856:43::-;;;;:::o;45812:142::-;35679:13;:11;:13::i;:::-;45941:5:::1;45904:21;:34;45926:11;45904:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;45812:142:::0;;:::o;39816:115::-;35679:13;:11;:13::i;:::-;39914:9:::1;39899:12;;:24;;;;;;;;;;;;;;;;;;39816:115:::0;:::o;36692:201::-;35679:13;:11;:13::i;:::-;36801:1:::1;36781:22;;:8;:22;;::::0;36773:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36857:28;36876:8;36857:18;:28::i;:::-;36692:201:::0;:::o;38793:56::-;;;;:::o;40300:403::-;40351:7;40403:14;;40374:25;;:43;40371:92;;40450:1;40443:8;;;;40371:92;40523:4;;;;;;;;;;;:14;;;40546:4;40523:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40495:25;;40478:14;;:42;;;;:::i;:::-;:74;40475:164;;;40602:25;;40585:14;;:42;;;;:::i;:::-;40578:49;;;;40475:164;40666:4;;;;;;;;;;;:14;;;40689:4;40666:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40659:36;;40300:403;;:::o;35958:132::-;36033:12;:10;:12::i;:::-;36022:23;;:7;:5;:7::i;:::-;:23;;;36014:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35958:132::o;24470:211::-;24587:86;24607:5;24637:23;;;24662:2;24666:5;24614:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24587:19;:86::i;:::-;24470:211;;;:::o;33735:108::-;33806:8;:6;:8::i;:::-;33805:9;33797:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33735:108::o;2387:293::-;1789:1;2521:7;;:19;2513:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1789:1;2654:7;:18;;;;2387:293::o;24689:248::-;24833:96;24853:5;24883:27;;;24912:4;24918:2;24922:5;24860:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24833:19;:96::i;:::-;24689:248;;;;:::o;45610:194::-;45687:13;45706:8;:13;;45727:6;45706:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45686:52;;;45757:8;45749:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45675:129;45610:194;;:::o;2688:213::-;1745:1;2871:7;:22;;;;2688:213::o;37053:191::-;37127:16;37146:6;;;;;;;;;;;37127:25;;37172:8;37163:6;;:17;;;;;;;;;;;;;;;;;;37227:8;37196:40;;37217:8;37196:40;;;;;;;;;;;;37116:128;37053:191;:::o;31689:98::-;31742:7;31769:10;31762:17;;31689:98;:::o;27537:716::-;27961:23;27987:69;28015:4;27987:69;;;;;;;;;;;;;;;;;27995:5;27987:27;;;;:69;;;;;:::i;:::-;27961:95;;28091:1;28071:10;:17;:21;28067:179;;;28168:10;28157:30;;;;;;;;;;;;:::i;:::-;28149:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28067:179;27607:646;27537:716;;:::o;13623:229::-;13760:12;13792:52;13814:6;13822:4;13828:1;13831:12;13792:21;:52::i;:::-;13785:59;;13623:229;;;;;:::o;14743:455::-;14913:12;14971:5;14946:21;:30;;14938:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;15031:12;15045:23;15072:6;:11;;15091:5;15098:4;15072:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15030:73;;;;15121:69;15148:6;15156:7;15165:10;15177:12;15121:26;:69::i;:::-;15114:76;;;;14743:455;;;;;;:::o;17316:644::-;17501:12;17530:7;17526:427;;;17579:1;17558:10;:17;:22;17554:290;;17776:18;17787:6;17776:10;:18::i;:::-;17768:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17554:290;17865:10;17858:17;;;;17526:427;17908:33;17916:10;17928:12;17908:7;:33::i;:::-;17316:644;;;;;;;:::o;10866:326::-;10926:4;11183:1;11161:7;:19;;;:23;11154:30;;10866:326;;;:::o;18502:552::-;18683:1;18663:10;:17;:21;18659:388;;;18895:10;18889:17;18952:15;18939:10;18935:2;18931:19;18924:44;18659:388;19022:12;19015:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:126:1;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;674:117::-;783:1;780;773:12;920:77;957:7;986:5;975:16;;920:77;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:143::-;1188:5;1219:6;1213:13;1204:22;;1235:33;1262:5;1235:33;:::i;:::-;1131:143;;;;:::o;1280:351::-;1350:6;1399:2;1387:9;1378:7;1374:23;1370:32;1367:119;;;1405:79;;:::i;:::-;1367:119;1525:1;1550:64;1606:7;1597:6;1586:9;1582:22;1550:64;:::i;:::-;1540:74;;1496:128;1280:351;;;;:::o;1637:180::-;1685:77;1682:1;1675:88;1782:4;1779:1;1772:15;1806:4;1803:1;1796:15;1823:194;1863:4;1883:20;1901:1;1883:20;:::i;:::-;1878:25;;1917:20;1935:1;1917:20;:::i;:::-;1912:25;;1961:1;1958;1954:9;1946:17;;1985:1;1979:4;1976:11;1973:37;;;1990:18;;:::i;:::-;1973:37;1823:194;;;;:::o;2023:122::-;2096:24;2114:5;2096:24;:::i;:::-;2089:5;2086:35;2076:63;;2135:1;2132;2125:12;2076:63;2023:122;:::o;2151:143::-;2208:5;2239:6;2233:13;2224:22;;2255:33;2282:5;2255:33;:::i;:::-;2151:143;;;;:::o;2300:820::-;2397:6;2405;2413;2421;2470:3;2458:9;2449:7;2445:23;2441:33;2438:120;;;2477:79;;:::i;:::-;2438:120;2597:1;2622:64;2678:7;2669:6;2658:9;2654:22;2622:64;:::i;:::-;2612:74;;2568:128;2735:2;2761:64;2817:7;2808:6;2797:9;2793:22;2761:64;:::i;:::-;2751:74;;2706:129;2874:2;2900:64;2956:7;2947:6;2936:9;2932:22;2900:64;:::i;:::-;2890:74;;2845:129;3013:2;3039:64;3095:7;3086:6;3075:9;3071:22;3039:64;:::i;:::-;3029:74;;2984:129;2300:820;;;;;;;:::o;3126:191::-;3166:3;3185:20;3203:1;3185:20;:::i;:::-;3180:25;;3219:20;3237:1;3219:20;:::i;:::-;3214:25;;3262:1;3259;3255:9;3248:16;;3283:3;3280:1;3277:10;3274:36;;;3290:18;;:::i;:::-;3274:36;3126:191;;;;:::o;3323:410::-;3363:7;3386:20;3404:1;3386:20;:::i;:::-;3381:25;;3420:20;3438:1;3420:20;:::i;:::-;3415:25;;3475:1;3472;3468:9;3497:30;3515:11;3497:30;:::i;:::-;3486:41;;3676:1;3667:7;3663:15;3660:1;3657:22;3637:1;3630:9;3610:83;3587:139;;3706:18;;:::i;:::-;3587:139;3371:362;3323:410;;;;:::o;3739:180::-;3787:77;3784:1;3777:88;3884:4;3881:1;3874:15;3908:4;3905:1;3898:15;3925:185;3965:1;3982:20;4000:1;3982:20;:::i;:::-;3977:25;;4016:20;4034:1;4016:20;:::i;:::-;4011:25;;4055:1;4045:35;;4060:18;;:::i;:::-;4045:35;4102:1;4099;4095:9;4090:14;;3925:185;;;;:::o;4116:118::-;4203:24;4221:5;4203:24;:::i;:::-;4198:3;4191:37;4116:118;;:::o;4240:332::-;4361:4;4399:2;4388:9;4384:18;4376:26;;4412:71;4480:1;4469:9;4465:17;4456:6;4412:71;:::i;:::-;4493:72;4561:2;4550:9;4546:18;4537:6;4493:72;:::i;:::-;4240:332;;;;;:::o;4578:90::-;4612:7;4655:5;4648:13;4641:21;4630:32;;4578:90;;;:::o;4674:116::-;4744:21;4759:5;4744:21;:::i;:::-;4737:5;4734:32;4724:60;;4780:1;4777;4770:12;4724:60;4674:116;:::o;4796:137::-;4850:5;4881:6;4875:13;4866:22;;4897:30;4921:5;4897:30;:::i;:::-;4796:137;;;;:::o;4939:345::-;5006:6;5055:2;5043:9;5034:7;5030:23;5026:32;5023:119;;;5061:79;;:::i;:::-;5023:119;5181:1;5206:61;5259:7;5250:6;5239:9;5235:22;5206:61;:::i;:::-;5196:71;;5152:125;4939:345;;;;:::o;5290:139::-;5336:5;5374:6;5361:20;5352:29;;5390:33;5417:5;5390:33;:::i;:::-;5290:139;;;;:::o;5435:329::-;5494:6;5543:2;5531:9;5522:7;5518:23;5514:32;5511:119;;;5549:79;;:::i;:::-;5511:119;5669:1;5694:53;5739:7;5730:6;5719:9;5715:22;5694:53;:::i;:::-;5684:63;;5640:117;5435:329;;;;:::o;5770:109::-;5851:21;5866:5;5851:21;:::i;:::-;5846:3;5839:34;5770:109;;:::o;5885:210::-;5972:4;6010:2;5999:9;5995:18;5987:26;;6023:65;6085:1;6074:9;6070:17;6061:6;6023:65;:::i;:::-;5885:210;;;;:::o;6101:60::-;6129:3;6150:5;6143:12;;6101:60;;;:::o;6167:142::-;6217:9;6250:53;6268:34;6277:24;6295:5;6277:24;:::i;:::-;6268:34;:::i;:::-;6250:53;:::i;:::-;6237:66;;6167:142;;;:::o;6315:126::-;6365:9;6398:37;6429:5;6398:37;:::i;:::-;6385:50;;6315:126;;;:::o;6447:147::-;6518:9;6551:37;6582:5;6551:37;:::i;:::-;6538:50;;6447:147;;;:::o;6600:173::-;6708:58;6760:5;6708:58;:::i;:::-;6703:3;6696:71;6600:173;;:::o;6779:264::-;6893:4;6931:2;6920:9;6916:18;6908:26;;6944:92;7033:1;7022:9;7018:17;7009:6;6944:92;:::i;:::-;6779:264;;;;:::o;7049:110::-;7100:7;7129:24;7147:5;7129:24;:::i;:::-;7118:35;;7049:110;;;:::o;7165:150::-;7252:38;7284:5;7252:38;:::i;:::-;7245:5;7242:49;7232:77;;7305:1;7302;7295:12;7232:77;7165:150;:::o;7321:167::-;7381:5;7419:6;7406:20;7397:29;;7435:47;7476:5;7435:47;:::i;:::-;7321:167;;;;:::o;7494:139::-;7540:5;7578:6;7565:20;7556:29;;7594:33;7621:5;7594:33;:::i;:::-;7494:139;;;;:::o;7639:647::-;7730:6;7738;7746;7795:2;7783:9;7774:7;7770:23;7766:32;7763:119;;;7801:79;;:::i;:::-;7763:119;7921:1;7946:67;8005:7;7996:6;7985:9;7981:22;7946:67;:::i;:::-;7936:77;;7892:131;8062:2;8088:53;8133:7;8124:6;8113:9;8109:22;8088:53;:::i;:::-;8078:63;;8033:118;8190:2;8216:53;8261:7;8252:6;8241:9;8237:22;8216:53;:::i;:::-;8206:63;;8161:118;7639:647;;;;;:::o;8292:222::-;8385:4;8423:2;8412:9;8408:18;8400:26;;8436:71;8504:1;8493:9;8489:17;8480:6;8436:71;:::i;:::-;8292:222;;;;:::o;8520:140::-;8584:9;8617:37;8648:5;8617:37;:::i;:::-;8604:50;;8520:140;;;:::o;8666:159::-;8767:51;8812:5;8767:51;:::i;:::-;8762:3;8755:64;8666:159;;:::o;8831:250::-;8938:4;8976:2;8965:9;8961:18;8953:26;;8989:85;9071:1;9060:9;9056:17;9047:6;8989:85;:::i;:::-;8831:250;;;;:::o;9087:329::-;9146:6;9195:2;9183:9;9174:7;9170:23;9166:32;9163:119;;;9201:79;;:::i;:::-;9163:119;9321:1;9346:53;9391:7;9382:6;9371:9;9367:22;9346:53;:::i;:::-;9336:63;;9292:117;9087:329;;;;:::o;9422:148::-;9494:9;9527:37;9558:5;9527:37;:::i;:::-;9514:50;;9422:148;;;:::o;9576:175::-;9685:59;9738:5;9685:59;:::i;:::-;9680:3;9673:72;9576:175;;:::o;9757:266::-;9872:4;9910:2;9899:9;9895:18;9887:26;;9923:93;10013:1;10002:9;9998:17;9989:6;9923:93;:::i;:::-;9757:266;;;;:::o;10029:357::-;10102:6;10151:2;10139:9;10130:7;10126:23;10122:32;10119:119;;;10157:79;;:::i;:::-;10119:119;10277:1;10302:67;10361:7;10352:6;10341:9;10337:22;10302:67;:::i;:::-;10292:77;;10248:131;10029:357;;;;:::o;10392:117::-;10450:7;10479:24;10497:5;10479:24;:::i;:::-;10468:35;;10392:117;;;:::o;10515:164::-;10609:45;10648:5;10609:45;:::i;:::-;10602:5;10599:56;10589:84;;10669:1;10666;10659:12;10589:84;10515:164;:::o;10685:181::-;10752:5;10790:6;10777:20;10768:29;;10806:54;10854:5;10806:54;:::i;:::-;10685:181;;;;:::o;10872:371::-;10952:6;11001:2;10989:9;10980:7;10976:23;10972:32;10969:119;;;11007:79;;:::i;:::-;10969:119;11127:1;11152:74;11218:7;11209:6;11198:9;11194:22;11152:74;:::i;:::-;11142:84;;11098:138;10872:371;;;;:::o;11249:133::-;11292:5;11330:6;11317:20;11308:29;;11346:30;11370:5;11346:30;:::i;:::-;11249:133;;;;:::o;11388:468::-;11453:6;11461;11510:2;11498:9;11489:7;11485:23;11481:32;11478:119;;;11516:79;;:::i;:::-;11478:119;11636:1;11661:53;11706:7;11697:6;11686:9;11682:22;11661:53;:::i;:::-;11651:63;;11607:117;11763:2;11789:50;11831:7;11822:6;11811:9;11807:22;11789:50;:::i;:::-;11779:60;;11734:115;11388:468;;;;;:::o;11862:118::-;11921:7;11950:24;11968:5;11950:24;:::i;:::-;11939:35;;11862:118;;;:::o;11986:166::-;12081:46;12121:5;12081:46;:::i;:::-;12074:5;12071:57;12061:85;;12142:1;12139;12132:12;12061:85;11986:166;:::o;12158:183::-;12226:5;12264:6;12251:20;12242:29;;12280:55;12329:5;12280:55;:::i;:::-;12158:183;;;;:::o;12347:373::-;12428:6;12477:2;12465:9;12456:7;12452:23;12448:32;12445:119;;;12483:79;;:::i;:::-;12445:119;12603:1;12628:75;12695:7;12686:6;12675:9;12671:22;12628:75;:::i;:::-;12618:85;;12574:139;12347:373;;;;:::o;12726:169::-;12810:11;12844:6;12839:3;12832:19;12884:4;12879:3;12875:14;12860:29;;12726:169;;;;:::o;12901:171::-;13041:23;13037:1;13029:6;13025:14;13018:47;12901:171;:::o;13078:366::-;13220:3;13241:67;13305:2;13300:3;13241:67;:::i;:::-;13234:74;;13317:93;13406:3;13317:93;:::i;:::-;13435:2;13430:3;13426:12;13419:19;;13078:366;;;:::o;13450:419::-;13616:4;13654:2;13643:9;13639:18;13631:26;;13703:9;13697:4;13693:20;13689:1;13678:9;13674:17;13667:47;13731:131;13857:4;13731:131;:::i;:::-;13723:139;;13450:419;;;:::o;13875:168::-;14015:20;14011:1;14003:6;13999:14;13992:44;13875:168;:::o;14049:366::-;14191:3;14212:67;14276:2;14271:3;14212:67;:::i;:::-;14205:74;;14288:93;14377:3;14288:93;:::i;:::-;14406:2;14401:3;14397:12;14390:19;;14049:366;;;:::o;14421:419::-;14587:4;14625:2;14614:9;14610:18;14602:26;;14674:9;14668:4;14664:20;14660:1;14649:9;14645:17;14638:47;14702:131;14828:4;14702:131;:::i;:::-;14694:139;;14421:419;;;:::o;14846:162::-;14986:14;14982:1;14974:6;14970:14;14963:38;14846:162;:::o;15014:366::-;15156:3;15177:67;15241:2;15236:3;15177:67;:::i;:::-;15170:74;;15253:93;15342:3;15253:93;:::i;:::-;15371:2;15366:3;15362:12;15355:19;;15014:366;;;:::o;15386:419::-;15552:4;15590:2;15579:9;15575:18;15567:26;;15639:9;15633:4;15629:20;15625:1;15614:9;15610:17;15603:47;15667:131;15793:4;15667:131;:::i;:::-;15659:139;;15386:419;;;:::o;15811:720::-;16044:4;16082:3;16071:9;16067:19;16059:27;;16096:85;16178:1;16167:9;16163:17;16154:6;16096:85;:::i;:::-;16191:86;16273:2;16262:9;16258:18;16249:6;16191:86;:::i;:::-;16287:72;16355:2;16344:9;16340:18;16331:6;16287:72;:::i;:::-;16369;16437:2;16426:9;16422:18;16413:6;16369:72;:::i;:::-;16451:73;16519:3;16508:9;16504:19;16495:6;16451:73;:::i;:::-;15811:720;;;;;;;;:::o;16537:158::-;16677:10;16673:1;16665:6;16661:14;16654:34;16537:158;:::o;16701:365::-;16843:3;16864:66;16928:1;16923:3;16864:66;:::i;:::-;16857:73;;16939:93;17028:3;16939:93;:::i;:::-;17057:2;17052:3;17048:12;17041:19;;16701:365;;;:::o;17072:419::-;17238:4;17276:2;17265:9;17261:18;17253:26;;17325:9;17319:4;17315:20;17311:1;17300:9;17296:17;17289:47;17353:131;17479:4;17353:131;:::i;:::-;17345:139;;17072:419;;;:::o;17497:1134::-;17612:6;17620;17628;17636;17644;17652;17701:3;17689:9;17680:7;17676:23;17672:33;17669:120;;;17708:79;;:::i;:::-;17669:120;17828:1;17853:64;17909:7;17900:6;17889:9;17885:22;17853:64;:::i;:::-;17843:74;;17799:128;17966:2;17992:64;18048:7;18039:6;18028:9;18024:22;17992:64;:::i;:::-;17982:74;;17937:129;18105:2;18131:64;18187:7;18178:6;18167:9;18163:22;18131:64;:::i;:::-;18121:74;;18076:129;18244:2;18270:64;18326:7;18317:6;18306:9;18302:22;18270:64;:::i;:::-;18260:74;;18215:129;18383:3;18410:64;18466:7;18457:6;18446:9;18442:22;18410:64;:::i;:::-;18400:74;;18354:130;18523:3;18550:64;18606:7;18597:6;18586:9;18582:22;18550:64;:::i;:::-;18540:74;;18494:130;17497:1134;;;;;;;;:::o;18637:225::-;18777:34;18773:1;18765:6;18761:14;18754:58;18846:8;18841:2;18833:6;18829:15;18822:33;18637:225;:::o;18868:366::-;19010:3;19031:67;19095:2;19090:3;19031:67;:::i;:::-;19024:74;;19107:93;19196:3;19107:93;:::i;:::-;19225:2;19220:3;19216:12;19209:19;;18868:366;;;:::o;19240:419::-;19406:4;19444:2;19433:9;19429:18;19421:26;;19493:9;19487:4;19483:20;19479:1;19468:9;19464:17;19457:47;19521:131;19647:4;19521:131;:::i;:::-;19513:139;;19240:419;;;:::o;19665:182::-;19805:34;19801:1;19793:6;19789:14;19782:58;19665:182;:::o;19853:366::-;19995:3;20016:67;20080:2;20075:3;20016:67;:::i;:::-;20009:74;;20092:93;20181:3;20092:93;:::i;:::-;20210:2;20205:3;20201:12;20194:19;;19853:366;;;:::o;20225:419::-;20391:4;20429:2;20418:9;20414:18;20406:26;;20478:9;20472:4;20468:20;20464:1;20453:9;20449:17;20442:47;20506:131;20632:4;20506:131;:::i;:::-;20498:139;;20225:419;;;:::o;20650:166::-;20790:18;20786:1;20778:6;20774:14;20767:42;20650:166;:::o;20822:366::-;20964:3;20985:67;21049:2;21044:3;20985:67;:::i;:::-;20978:74;;21061:93;21150:3;21061:93;:::i;:::-;21179:2;21174:3;21170:12;21163:19;;20822:366;;;:::o;21194:419::-;21360:4;21398:2;21387:9;21383:18;21375:26;;21447:9;21441:4;21437:20;21433:1;21422:9;21418:17;21411:47;21475:131;21601:4;21475:131;:::i;:::-;21467:139;;21194:419;;;:::o;21619:181::-;21759:33;21755:1;21747:6;21743:14;21736:57;21619:181;:::o;21806:366::-;21948:3;21969:67;22033:2;22028:3;21969:67;:::i;:::-;21962:74;;22045:93;22134:3;22045:93;:::i;:::-;22163:2;22158:3;22154:12;22147:19;;21806:366;;;:::o;22178:419::-;22344:4;22382:2;22371:9;22367:18;22359:26;;22431:9;22425:4;22421:20;22417:1;22406:9;22402:17;22395:47;22459:131;22585:4;22459:131;:::i;:::-;22451:139;;22178:419;;;:::o;22603:442::-;22752:4;22790:2;22779:9;22775:18;22767:26;;22803:71;22871:1;22860:9;22856:17;22847:6;22803:71;:::i;:::-;22884:72;22952:2;22941:9;22937:18;22928:6;22884:72;:::i;:::-;22966;23034:2;23023:9;23019:18;23010:6;22966:72;:::i;:::-;22603:442;;;;;;:::o;23051:147::-;23152:11;23189:3;23174:18;;23051:147;;;;:::o;23204:114::-;;:::o;23324:398::-;23483:3;23504:83;23585:1;23580:3;23504:83;:::i;:::-;23497:90;;23596:93;23685:3;23596:93;:::i;:::-;23714:1;23709:3;23705:11;23698:18;;23324:398;;;:::o;23728:379::-;23912:3;23934:147;24077:3;23934:147;:::i;:::-;23927:154;;24098:3;24091:10;;23728:379;;;:::o;24113:176::-;24253:28;24249:1;24241:6;24237:14;24230:52;24113:176;:::o;24295:366::-;24437:3;24458:67;24522:2;24517:3;24458:67;:::i;:::-;24451:74;;24534:93;24623:3;24534:93;:::i;:::-;24652:2;24647:3;24643:12;24636:19;;24295:366;;;:::o;24667:419::-;24833:4;24871:2;24860:9;24856:18;24848:26;;24920:9;24914:4;24910:20;24906:1;24895:9;24891:17;24884:47;24948:131;25074:4;24948:131;:::i;:::-;24940:139;;24667:419;;;:::o;25092:229::-;25232:34;25228:1;25220:6;25216:14;25209:58;25301:12;25296:2;25288:6;25284:15;25277:37;25092:229;:::o;25327:366::-;25469:3;25490:67;25554:2;25549:3;25490:67;:::i;:::-;25483:74;;25566:93;25655:3;25566:93;:::i;:::-;25684:2;25679:3;25675:12;25668:19;;25327:366;;;:::o;25699:419::-;25865:4;25903:2;25892:9;25888:18;25880:26;;25952:9;25946:4;25942:20;25938:1;25927:9;25923:17;25916:47;25980:131;26106:4;25980:131;:::i;:::-;25972:139;;25699:419;;;:::o;26124:225::-;26264:34;26260:1;26252:6;26248:14;26241:58;26333:8;26328:2;26320:6;26316:15;26309:33;26124:225;:::o;26355:366::-;26497:3;26518:67;26582:2;26577:3;26518:67;:::i;:::-;26511:74;;26594:93;26683:3;26594:93;:::i;:::-;26712:2;26707:3;26703:12;26696:19;;26355:366;;;:::o;26727:419::-;26893:4;26931:2;26920:9;26916:18;26908:26;;26980:9;26974:4;26970:20;26966:1;26955:9;26951:17;26944:47;27008:131;27134:4;27008:131;:::i;:::-;27000:139;;26727:419;;;:::o;27152:98::-;27203:6;27237:5;27231:12;27221:22;;27152:98;;;:::o;27256:246::-;27337:1;27347:113;27361:6;27358:1;27355:13;27347:113;;;27446:1;27441:3;27437:11;27431:18;27427:1;27422:3;27418:11;27411:39;27383:2;27380:1;27376:10;27371:15;;27347:113;;;27494:1;27485:6;27480:3;27476:16;27469:27;27318:184;27256:246;;;:::o;27508:386::-;27612:3;27640:38;27672:5;27640:38;:::i;:::-;27694:88;27775:6;27770:3;27694:88;:::i;:::-;27687:95;;27791:65;27849:6;27844:3;27837:4;27830:5;27826:16;27791:65;:::i;:::-;27881:6;27876:3;27872:16;27865:23;;27616:278;27508:386;;;;:::o;27900:271::-;28030:3;28052:93;28141:3;28132:6;28052:93;:::i;:::-;28045:100;;28162:3;28155:10;;27900:271;;;;:::o;28177:179::-;28317:31;28313:1;28305:6;28301:14;28294:55;28177:179;:::o;28362:366::-;28504:3;28525:67;28589:2;28584:3;28525:67;:::i;:::-;28518:74;;28601:93;28690:3;28601:93;:::i;:::-;28719:2;28714:3;28710:12;28703:19;;28362:366;;;:::o;28734:419::-;28900:4;28938:2;28927:9;28923:18;28915:26;;28987:9;28981:4;28977:20;28973:1;28962:9;28958:17;28951:47;29015:131;29141:4;29015:131;:::i;:::-;29007:139;;28734:419;;;:::o;29159:99::-;29211:6;29245:5;29239:12;29229:22;;29159:99;;;:::o;29264:102::-;29305:6;29356:2;29352:7;29347:2;29340:5;29336:14;29332:28;29322:38;;29264:102;;;:::o;29372:377::-;29460:3;29488:39;29521:5;29488:39;:::i;:::-;29543:71;29607:6;29602:3;29543:71;:::i;:::-;29536:78;;29623:65;29681:6;29676:3;29669:4;29662:5;29658:16;29623:65;:::i;:::-;29713:29;29735:6;29713:29;:::i;:::-;29708:3;29704:39;29697:46;;29464:285;29372:377;;;;:::o;29755:313::-;29868:4;29906:2;29895:9;29891:18;29883:26;;29955:9;29949:4;29945:20;29941:1;29930:9;29926:17;29919:47;29983:78;30056:4;30047:6;29983:78;:::i;:::-;29975:86;;29755:313;;;;:::o
Swarm Source
ipfs://ea01c4729a3f368d34d27441a6d876b6f8a738ee34780f8f90a66c2f50ff0b42
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.