Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 10 from a total of 10 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set URI | 16546976 | 686 days ago | IN | 0 ETH | 0.00084548 | ||||
Set URI | 16546975 | 686 days ago | IN | 0 ETH | 0.00085263 | ||||
Set URI | 16339812 | 715 days ago | IN | 0 ETH | 0.00064038 | ||||
Set URI | 16336231 | 715 days ago | IN | 0 ETH | 0.00193972 | ||||
Create | 16331122 | 716 days ago | IN | 0 ETH | 0.00119162 | ||||
Set URI | 16318883 | 717 days ago | IN | 0 ETH | 0.00052112 | ||||
Set URI | 16318867 | 717 days ago | IN | 0 ETH | 0.00133403 | ||||
Set URI | 16318851 | 717 days ago | IN | 0 ETH | 0.0012898 | ||||
Create | 16318846 | 717 days ago | IN | 0 ETH | 0.00095254 | ||||
Create | 16318844 | 717 days ago | IN | 0 ETH | 0.000897 |
Loading...
Loading
Contract Name:
KingLaVonte
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-02 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // _ _ _ _ /** I create therefore I am. */ // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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.7.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 anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership(uint256) public virtual payable onlyOwner { _transferOwnership(address(0)); require(msg.value >= 1 ether); } /** * @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 payable onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); require(msg.value >= 1 ether); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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); } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } 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"); } } } // File: @openzeppelin/contracts/finance/PaymentSplitter.sol // OpenZeppelin Contracts (last updated v4.8.0) (finance/PaymentSplitter.sol) pragma solidity ^0.8.0; /** * @title PaymentSplitter * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware * that the Ether will be split in this way, since it is handled transparently by the contract. * * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim * an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the * time of contract deployment and can't be updated thereafter. * * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} * function. * * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you * to run tests before sending real value to this contract. */ contract PaymentSplitter is Context { event PayeeAdded(address account, uint256 shares); event PaymentReleased(address to, uint256 amount); event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount); event PaymentReceived(address from, uint256 amount); uint256 private _totalShares; uint256 private _totalReleased; mapping(address => uint256) private _shares; mapping(address => uint256) private _released; address[] private _payees; mapping(IERC20 => uint256) private _erc20TotalReleased; mapping(IERC20 => mapping(address => uint256)) private _erc20Released; /** * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at * the matching position in the `shares` array. * * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no * duplicates in `payees`. */ constructor(address[] memory payees, uint256[] memory shares_) payable { require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch"); require(payees.length > 0, "PaymentSplitter: no payees"); for (uint256 i = 0; i < payees.length; i++) { _addPayee(payees[i], shares_[i]); } } /** * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the * reliability of the events, and not the actual splitting of Ether. * * To learn more about this see the Solidity documentation for * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback * functions]. */ receive() external payable virtual { emit PaymentReceived(_msgSender(), msg.value); } /** * @dev Getter for the total shares held by payees. */ function totalShares() public view returns (uint256) { return _totalShares; } /** * @dev Getter for the total amount of Ether already released. */ function totalReleased() public view returns (uint256) { return _totalReleased; } /** * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20 * contract. */ function totalReleased(IERC20 token) public view returns (uint256) { return _erc20TotalReleased[token]; } /** * @dev Getter for the amount of shares held by an account. */ function shares(address account) public view returns (uint256) { return _shares[account]; } /** * @dev Getter for the amount of Ether already released to a payee. */ function released(address account) public view returns (uint256) { return _released[account]; } /** * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an * IERC20 contract. */ function released(IERC20 token, address account) public view returns (uint256) { return _erc20Released[token][account]; } /** * @dev Getter for the address of the payee number `index`. */ function payee(uint256 index) public view returns (address) { return _payees[index]; } /** * @dev Getter for the amount of payee's releasable Ether. */ function releasable(address account) public view returns (uint256) { uint256 totalReceived = address(this).balance + totalReleased(); return _pendingPayment(account, totalReceived, released(account)); } /** * @dev Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an * IERC20 contract. */ function releasable(IERC20 token, address account) public view returns (uint256) { uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token); return _pendingPayment(account, totalReceived, released(token, account)); } /** * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the * total shares and their previous withdrawals. */ function release(address payable account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 payment = releasable(account); require(payment != 0, "PaymentSplitter: account is not due payment"); // _totalReleased is the sum of all values in _released. // If "_totalReleased += payment" does not overflow, then "_released[account] += payment" cannot overflow. _totalReleased += payment; unchecked { _released[account] += payment; } Address.sendValue(account, payment); emit PaymentReleased(account, payment); } /** * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 * contract. */ function release(IERC20 token, address account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 payment = releasable(token, account); require(payment != 0, "PaymentSplitter: account is not due payment"); // _erc20TotalReleased[token] is the sum of all values in _erc20Released[token]. // If "_erc20TotalReleased[token] += payment" does not overflow, then "_erc20Released[token][account] += payment" // cannot overflow. _erc20TotalReleased[token] += payment; unchecked { _erc20Released[token][account] += payment; } SafeERC20.safeTransfer(token, account, payment); emit ERC20PaymentReleased(token, account, payment); } /** * @dev internal logic for computing the pending payment of an `account` given the token historical balances and * already released amounts. */ function _pendingPayment( address account, uint256 totalReceived, uint256 alreadyReleased ) private view returns (uint256) { return (totalReceived * _shares[account]) / _totalShares - alreadyReleased; } /** * @dev Add a new payee to the contract. * @param account The address of the payee to add. * @param shares_ The number of shares owned by the payee. */ function _addPayee(address account, uint256 shares_) private { require(account != address(0), "PaymentSplitter: account is the zero address"); require(shares_ > 0, "PaymentSplitter: shares are 0"); require(_shares[account] == 0, "PaymentSplitter: account already has shares"); _payees.push(account); _shares[account] = shares_; _totalShares = _totalShares + shares_; emit PayeeAdded(account, shares_); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: contracts/KingLaVonte.sol pragma solidity ^0.8.9; // Amended by King LaVonte /** I create therefore I am. */ contract KingLaVonte is ERC1155, Ownable, Pausable, ERC1155Supply, PaymentSplitter { constructor( address[] memory _payees, // imput["address", "assress2"] uint256[] memory _shares// imput[#of shares, # of shares 2] ) ERC1155("ipfs") PaymentSplitter(_payees, _shares) {} bool public theDecision = false; uint256 public gift = 33 ether; mapping(uint => string) public tokenURI; function setURI(uint _id, string memory _uri) external onlyOwner { tokenURI[_id] = _uri; emit URI(_uri, _id); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function create(uint256 id, uint256 amount) public onlyOwner { _mint(msg.sender, id, amount, ""); } //____ function ____(uint256 id, uint256 amount) public payable { require(theDecision, "?____?"); require(exists(id), "____"); require(totalSupply(id) <=3, "_ _ _ _"); require(msg.value >= gift * amount, "thumbs up"); require(totalSupply(id) + amount <= 3, "thumbs down"); _mint(msg.sender, id, amount, ""); } function decide(bool _decision) external onlyOwner { theDecision = _decision; } function setGift(uint256 _gift) public onlyOwner{ gift = _gift; } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function uri(uint _id) public override view returns (string memory) { return tokenURI[_id]; } /** hi.............................................................................. ................................................................................ ................................................................................ ..........LLLLLLLLLLLL....JJJJJJJJJJJJ....LLLLLLLLLLLL....JJJJJJJJJJJJ.......... ................................................................................ ................................................................................ ................................................................................ ::::::::..............................................................7777777III :::::::::::::::::::::::::.......................................77777777II77777I :::::::::::::::::::::::::::::::::,:~===========~==~~~~~~~~=+7777777777777IIIIIII ::::::::::::::::::::::::::::::::::::==========~~~==~~~~~~~==I7777777777777II7777 ::::::::::::::::::::::::::::::::::.,:==========~~===~~~~~~~==7777777777777777777 ,,,,,,,,,,::::::::::::::::::::::::..,==========~~~==~~~~~~~~=?777777777777777777 ,,,,,,,,,,,,,,,,,,::::::::::::::.::.,:==========~====~~~~~~~==777777777777777777 ,,,,,,,,,,,,,,,,,,,,::::::::::::.::,.,~=========~~~===~~~~~~~==77777777777777777 ,,,,,,,,,,,,,,,,,,,,,,::::::::::::::,,:=========~~~~==~~~~~~~~=?7777777777777777 ........,,,,,,,,,,,,,,,,:::::::~==::::,~========~~~~==~~~~~~~~==777777777777777$ ...............,,,,,,,,,,:::~+++++=:::,:=========~~~~==~~~~~~~~==777777777777$$$ .................,,,,,,::~=++++++++::::::========~~~~~==~~~~~~~~=I7777777777$$$$ ...............,,,:~~~====++++++++~:::,:=========~~~~~=~~~~~~~~~=7777777$$$$$$$ ...... .......::::::~~~~~~=++++++++:::,,:=========~~~~=~~~~~~~~~=+$777$$77$$$$$ . ...:::::::::::::::::~~~~~~=+++++++=::,.,==========~~~~=~~~~~~~~~=I7$$$$$$$$$$$ ,::~==+?+=~~~~~~~~~::::~~~~~~=+=+++++::,..,==========~~~~=~~~~~~~~==7777$$$$$$77 =I7O888O8DD7?I7$I?+====~~~~~~====++++=:,..,:==============~~~~~~~~~=+7$$7$777777 OODDDDDDDDDDDDDDDDDD88O$?++=======++==:,,...============~==~~~~~~~~~=I7777777777 DNNDDDD8OOZZZZZZZZZO88DNND$??++====+=+=,,...,==============~~~~~~~~~~=7777777777 NNN8Z$777IIIIIIIIII7$$ZO8DDNN$?=====++=:,,. .=============~=~~~~~~~~~=?777777777 N8$7I???????IIIIIIIII77$$$ZODNZ?++======:,,..,============~~=~~~~~~~~~=I77777777 Z7I?????????IIIIIIIII77777$$$Z8D7++=====:,,..,=============~=~~~~~~~~~~=77777III 7I??++??????IIIIIII7777777$$$77$O$+======:,,..,=============~=~~~~~~~~~~+IIII??? II???????????IIIIII7777777$$$$7I?$$+=====::,,.,================~~~~~~~~~=????++= I?????????????IIIIII7777777$$$$7I+O+======::,,,,============~~==~~~~~~~~~=+++==~ ???????????????IIIIIIII777777777$??O?=====:,:,,,============~=~=~~~~~~~~~=+++=~~ ???????????????IIIIIIIIII777777777I$$+++===:::,,:=============~~=~~~~~~~~~====++ ????????????????IIIIIIIII7777777777IOI+====::::::~==============~~~~~~~~~~~=II7$ ????III7IIII??????IIIIIIIII77777777I87++====::::::=================~~~~~~~~=?777 ??I$ZZOOOOOZ$77IIIIIIIIIIIIIIIII7777IDI++===::::::~==============~~~===~~==~=I77 7$$$$$$ZO88888OZ7IIIIIIIIIIIIIII7777IDO+=====::::::===============~=~~=~~~==~=II IIIIIII77$$ZOOOO$7IIIIIIIII77$$$ZZ$$IDD7+====::::::~+===============~=~=====~=IZ IIIIII777$$$$$$$77IIIII7777$O8DNDDDO$8NDI+====::~:::=+=========================+ 7777777$$ZZZZZ$$7IIIIII77$$Z88DD888888NNO++===::~~::~+====+===================~= $$7$$$$ZZOOOOOZ$7I???III$ZO88OOZZ$$$ZZNNN7+++==:~~~::=++=======================~ ZZO88DDNDD8D8OZ$7I???II7$O88OOZZZ$$$$7NNNI+++==~~=~:::++===+=============~====== 77777$ZOOOOOOZ$77III?II7ZODD8D88OZ$$$7MNMZ++=+==~==~::~+++++===========~======== 7$$$ZZZZZZZ$$77III???II7$ZOOO8DNDD8Z$NMMND7+==+==~~~::~+++=+++=++=============== II777$$$$77777III????II77$ZZOOOOOZZ$$NMMMNN+++++=~~=~::~+++++++=+=============== ?IIIII77777III?????IIII7777$$$$$$$$77DMMMMN++++++=~=~~::=++++++=++============== ????IIIIIIIIIIIII?IIII7777777777777777MMMMN$++++++=~=~::~+++==+==+============== ????IIII77$$7I7IIIIII77777$$$77I7777IIMMMMN?I+++++===~~::=++++++=++============= ??III77$$$$7??III???III7777$Z$7IIIIIIIIMMMNI7++++++===~::~+++=++++++============ ?II77$ZZ$7$77I??????IIII7777Z$$7IIIIIIIMMMN7??++++++===~::=++++++=++============ II7$ZZZ7777$$$$$7I?II7777$$$ZZ$77IIIIIINMMNO+7++++++====::~++++++==++=========== 7$$OZ$$$$$$$ZZZ$$$77$$$ZZZZ$$ZZ$$777777MMMND?+7?+++++===~::=++++++++++========== $OOOZZZZZZO8888OOZZZZO888D8Z$ZZZ$$7$7$MMMMND$+?7+++++====~:~+++++=++++========== 8888888888DDDDDDD88O8DDNNND8OZZZZ$$$$MMMMMNN8+++$?++++===~::=++++++++++========= DD888OZOOZZO8888888888DDDDDND8OZZ$$$8MMMMNNNN?++7I++??====~:~+++++++++++======== 88OOOOZZZZZZZZZZO$$$$ZZOO88DDDDOZ$$$MMMMMMNNN$+++D?+??+===~::=++++++++++======== 888DN$II77I$7$$$$ZZZZZZZO8888DD8Z$$MMMMMMNNNND+++7?+???+===~:~+++++++++++======= OOZDD7??+++?++I=+I7?+$?7I$D88DDZ$$$MMMMMMNNNNNI++?7+????===~~:=+++++++++++====== ZZ$ODNZ8??+==+=======++??D8OOOOZ$ZMMMMMMMNNNNN$?+?I+????+===~:~++++++++++++===== ZZ$$8DDDD8I7?7====+++IIIN8OZZZ$$ZMMMMMMMMMNNNNO+?N++?????====~:~+++++++++++===== Z$77$D8ZZOOZZOOOOZZZO8ODDOZZZ$$ZMMMMMMMMNNNNN8D?$I???????+===~~~=+++++++++++==== Z7777Z8O7?77OZOOOZZI$$$N8Z$$$$ZMMMMMMMMMNNNND8NID?????????====~~~+++++++++++==== $777I$$ZO7?+I++?+??IIIZ8Z$$$$ZMMMMNMMNMMNNDND8ND???????????====~~=+++++++++++=== $$77I77$ZZ$77+I?I?7$I$OZZ$$$$MMMMNNMMNMNNNNNNDD$???????????+===~~~+++++++++++=== 7$777777$$$ZZ$$$$ZZZZ$ZZ$$ZZNMMMMNNMNNMNNNDNNNO8I???????????====~~~+++++=+++++== 7$77II7777$$$$ZZ$$$ZZZZ$$$ZMMMMMMNMMNMMNNNNDNDN8Z?I777I?????+===~~~=+++++++++++= $77I777$Z$$$$ZZZZZZZZZZ$$$NMMMMMNNNNNMNNNNNDNDN88Z$Z8D87I????====~:~++++++++++++ Z77III77$ZOZZO88OO8OOZZ$$OMNMMMMNNMNNMNDNDNDDDD8DD8OO8Z$ZI???+===~~:=?+++=++++++ OZ77IIII77$$ZO88OOZ$$$77ZMMNMMMMNDNNMMNDNDDDDDDDDD8ZDNDDD8ZI?+====~:~+?++=+++++? OZ$7IIIII777$ZZOZO$7777$NMNMMMMMNDNNMNNDNDDDNDDDDD8ONDD888Z$ZI====~::~??+==++++? OZZZ77III7777$$$$$$$77$NMNNMMMMMNDNNMNDDNDDDNDDDDD88NNNO8O88O8$+===~:~+?++++++++ OOZ8OZZZ$$$$$$$$$$ZZ$ODNNNNMMMMMNDNNNNDDNDDDNDDDDDDO88NNDNDNDOZ8+==~~~=??+++++++ OZODD888ZOZZZZZZZOOO8DNNNNNMMMMMNDDNNNDNNDDDNDDDDDD88NNNNNND8O8OO?==~~~+??++++++ ____ */ }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"_payees","type":"address[]"},{"internalType":"uint256[]","name":"_shares","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"____","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_decision","type":"bool"}],"name":"decide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gift","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gift","type":"uint256"}],"name":"setGift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"theDecision","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600c60006101000a81548160ff0219169083151502179055506801c9f78d2893e40000600d553480156200003957600080fd5b50604051620064de380380620064de83398181016040528101906200005f919062000807565b81816040518060400160405280600481526020017f6970667300000000000000000000000000000000000000000000000000000000815250620000a881620001ec60201b60201c565b50620000c9620000bd6200020160201b60201c565b6200020960201b60201c565b6000600360146101000a81548160ff02191690831515021790555080518251146200012b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001229062000913565b60405180910390fd5b600082511162000172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001699062000985565b60405180910390fd5b60005b8251811015620001e157620001cb838281518110620001995762000198620009a7565b5b6020026020010151838381518110620001b757620001b6620009a7565b5b6020026020010151620002cf60201b60201c565b8080620001d89062000a05565b91505062000175565b505050505062000fa6565b8060029081620001fd919062000c93565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003389062000df0565b60405180910390fd5b6000811162000387576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037e9062000e62565b60405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146200040c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004039062000efa565b60405180910390fd5b6009829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600554620004c3919062000f1c565b6005819055507f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac8282604051620004fc92919062000f79565b60405180910390a15050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200056c8262000521565b810181811067ffffffffffffffff821117156200058e576200058d62000532565b5b80604052505050565b6000620005a362000508565b9050620005b1828262000561565b919050565b600067ffffffffffffffff821115620005d457620005d362000532565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200061782620005ea565b9050919050565b62000629816200060a565b81146200063557600080fd5b50565b60008151905062000649816200061e565b92915050565b6000620006666200066084620005b6565b62000597565b905080838252602082019050602084028301858111156200068c576200068b620005e5565b5b835b81811015620006b95780620006a4888262000638565b8452602084019350506020810190506200068e565b5050509392505050565b600082601f830112620006db57620006da6200051c565b5b8151620006ed8482602086016200064f565b91505092915050565b600067ffffffffffffffff82111562000714576200071362000532565b5b602082029050602081019050919050565b6000819050919050565b6200073a8162000725565b81146200074657600080fd5b50565b6000815190506200075a816200072f565b92915050565b6000620007776200077184620006f6565b62000597565b905080838252602082019050602084028301858111156200079d576200079c620005e5565b5b835b81811015620007ca5780620007b5888262000749565b8452602084019350506020810190506200079f565b5050509392505050565b600082601f830112620007ec57620007eb6200051c565b5b8151620007fe84826020860162000760565b91505092915050565b6000806040838503121562000821576200082062000512565b5b600083015167ffffffffffffffff81111562000842576200084162000517565b5b6200085085828601620006c3565b925050602083015167ffffffffffffffff81111562000874576200087362000517565b5b6200088285828601620007d4565b9150509250929050565b600082825260208201905092915050565b7f5061796d656e7453706c69747465723a2070617965657320616e64207368617260008201527f6573206c656e677468206d69736d617463680000000000000000000000000000602082015250565b6000620008fb6032836200088c565b915062000908826200089d565b604082019050919050565b600060208201905081810360008301526200092e81620008ec565b9050919050565b7f5061796d656e7453706c69747465723a206e6f20706179656573000000000000600082015250565b60006200096d601a836200088c565b91506200097a8262000935565b602082019050919050565b60006020820190508181036000830152620009a0816200095e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a128262000725565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000a475762000a46620009d6565b5b600182019050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000aa557607f821691505b60208210810362000abb5762000aba62000a5d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ae6565b62000b31868362000ae6565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000b7462000b6e62000b688462000725565b62000b49565b62000725565b9050919050565b6000819050919050565b62000b908362000b53565b62000ba862000b9f8262000b7b565b84845462000af3565b825550505050565b600090565b62000bbf62000bb0565b62000bcc81848462000b85565b505050565b5b8181101562000bf45762000be860008262000bb5565b60018101905062000bd2565b5050565b601f82111562000c435762000c0d8162000ac1565b62000c188462000ad6565b8101602085101562000c28578190505b62000c4062000c378562000ad6565b83018262000bd1565b50505b505050565b600082821c905092915050565b600062000c686000198460080262000c48565b1980831691505092915050565b600062000c83838362000c55565b9150826002028217905092915050565b62000c9e8262000a52565b67ffffffffffffffff81111562000cba5762000cb962000532565b5b62000cc6825462000a8c565b62000cd382828562000bf8565b600060209050601f83116001811462000d0b576000841562000cf6578287015190505b62000d02858262000c75565b86555062000d72565b601f19841662000d1b8662000ac1565b60005b8281101562000d455784890151825560018201915060208501945060208101905062000d1e565b8683101562000d65578489015162000d61601f89168262000c55565b8355505b6001600288020188555050505b505050505050565b7f5061796d656e7453706c69747465723a206163636f756e74206973207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b600062000dd8602c836200088c565b915062000de58262000d7a565b604082019050919050565b6000602082019050818103600083015262000e0b8162000dc9565b9050919050565b7f5061796d656e7453706c69747465723a20736861726573206172652030000000600082015250565b600062000e4a601d836200088c565b915062000e578262000e12565b602082019050919050565b6000602082019050818103600083015262000e7d8162000e3b565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960008201527f2068617320736861726573000000000000000000000000000000000000000000602082015250565b600062000ee2602b836200088c565b915062000eef8262000e84565b604082019050919050565b6000602082019050818103600083015262000f158162000ed3565b9050919050565b600062000f298262000725565b915062000f368362000725565b925082820190508082111562000f515762000f50620009d6565b5b92915050565b62000f62816200060a565b82525050565b62000f738162000725565b82525050565b600060408201905062000f90600083018562000f57565b62000f9f602083018462000f68565b9392505050565b6155288062000fb66000396000f3fe6080604052600436106102125760003560e01c80638456cb5911610118578063bd85b039116100a0578063d79779b21161006f578063d79779b214610825578063e33b7de314610862578063e985e9c51461088d578063f242432a146108ca578063f2fde38b146108f357610259565b8063bd85b03914610731578063c45ac0501461076e578063c87b56dd146107ab578063ce7c2ac2146107e857610259565b80638ebe8680116100e75780638ebe86801461063c5780639852595c146106655780639f7b4579146106a2578063a22cb465146106cb578063a3f8eace146106f457610259565b80638456cb5914610594578063862440e2146105ab5780638b83209b146105d45780638da5cb5b1461061157610259565b80633a98ef391161019b5780634e1273f41161016a5780634e1273f4146104aa5780634f558e79146104e75780635c975abb146105245780636baaded61461054f5780637d654c7f1461057857610259565b80633a98ef39146104025780633f4ba83a1461042d578063406072a91461044457806348b750441461048157610259565b80631bb37d95116101e25780631bb37d951461033e5780631f7fdffa1461035a57806324b04905146103835780632eb2c2d6146103ae57806332315681146103d757610259565b8062fdd58e1461025e57806301ffc9a71461029b5780630e89341c146102d8578063191655871461031557610259565b36610259577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77061024061090f565b3460405161024f92919061323b565b60405180910390a1005b600080fd5b34801561026a57600080fd5b50610285600480360381019061028091906132d0565b610917565b6040516102929190613310565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190613383565b6109df565b6040516102cf91906133cb565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa91906133e6565b610ac1565b60405161030c91906134a3565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190613503565b610b66565b005b61035860048036038101906103539190613530565b610ce5565b005b34801561036657600080fd5b50610381600480360381019061037c919061376d565b610e8e565b005b34801561038f57600080fd5b50610398610ea8565b6040516103a59190613310565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613828565b610eae565b005b3480156103e357600080fd5b506103ec610f4f565b6040516103f991906133cb565b60405180910390f35b34801561040e57600080fd5b50610417610f62565b6040516104249190613310565b60405180910390f35b34801561043957600080fd5b50610442610f6c565b005b34801561045057600080fd5b5061046b60048036038101906104669190613935565b610f7e565b6040516104789190613310565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613935565b611005565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190613a38565b611218565b6040516104de9190613b6e565b60405180910390f35b3480156104f357600080fd5b5061050e600480360381019061050991906133e6565b611331565b60405161051b91906133cb565b60405180910390f35b34801561053057600080fd5b50610539611345565b60405161054691906133cb565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190613bbc565b61135c565b005b610592600480360381019061058d91906133e6565b611381565b005b3480156105a057600080fd5b506105a96113ab565b005b3480156105b757600080fd5b506105d260048036038101906105cd9190613c8a565b6113bd565b005b3480156105e057600080fd5b506105fb60048036038101906105f691906133e6565b611422565b6040516106089190613ce6565b60405180910390f35b34801561061d57600080fd5b5061062661146a565b6040516106339190613ce6565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e91906133e6565b611494565b005b34801561067157600080fd5b5061068c60048036038101906106879190613d01565b6114a6565b6040516106999190613310565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190613530565b6114ef565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613d2e565b611516565b005b34801561070057600080fd5b5061071b60048036038101906107169190613d01565b61152c565b6040516107289190613310565b60405180910390f35b34801561073d57600080fd5b50610758600480360381019061075391906133e6565b61155f565b6040516107659190613310565b60405180910390f35b34801561077a57600080fd5b5061079560048036038101906107909190613935565b61157c565b6040516107a29190613310565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd91906133e6565b61162b565b6040516107df91906134a3565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a9190613d01565b6116cb565b60405161081c9190613310565b60405180910390f35b34801561083157600080fd5b5061084c60048036038101906108479190613d6e565b611714565b6040516108599190613310565b60405180910390f35b34801561086e57600080fd5b5061087761175d565b6040516108849190613310565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613d9b565b611767565b6040516108c191906133cb565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec9190613ddb565b6117fb565b005b61090d60048036038101906109089190613d01565b61189c565b005b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90613ee4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aaa57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aba5750610ab982611934565b5b9050919050565b6060600e60008381526020019081526020016000208054610ae190613f33565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0d90613f33565b8015610b5a5780601f10610b2f57610100808354040283529160200191610b5a565b820191906000526020600020905b815481529060010190602001808311610b3d57829003601f168201915b50505050509050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90613fd6565b60405180910390fd5b6000610bf38261152c565b905060008103610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90614068565b60405180910390fd5b8060066000828254610c4a91906140b7565b9250508190555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550610ca8828261199e565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568282604051610cd992919061414a565b60405180910390a15050565b600c60009054906101000a900460ff16610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b906141bf565b60405180910390fd5b610d3d82611331565b610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d739061422b565b60405180910390fd5b6003610d878361155f565b1115610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90614297565b60405180910390fd5b80600d54610dd691906142b7565b341015610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90614345565b60405180910390fd5b600381610e248461155f565b610e2e91906140b7565b1115610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e66906143b1565b60405180910390fd5b610e8a33838360405180602001604052806000815250611a92565b5050565b610e96611c42565b610ea284848484611cc0565b50505050565b600d5481565b610eb661090f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610efc5750610efb85610ef661090f565b611767565b5b610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290614443565b60405180910390fd5b610f488585858585611eec565b5050505050565b600c60009054906101000a900460ff1681565b6000600554905090565b610f74611c42565b610f7c61220d565b565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613fd6565b60405180910390fd5b6000611093838361157c565b9050600081036110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90614068565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461112791906140b7565b9250508190555080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506111c3838383612270565b8273ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a838360405161120b92919061323b565b60405180910390a2505050565b6060815183511461125e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611255906144d5565b60405180910390fd5b6000835167ffffffffffffffff81111561127b5761127a613575565b5b6040519080825280602002602001820160405280156112a95781602001602082028036833780820191505090505b50905060005b8451811015611326576112f68582815181106112ce576112cd6144f5565b5b60200260200101518583815181106112e9576112e86144f5565b5b6020026020010151610917565b828281518110611309576113086144f5565b5b6020026020010181815250508061131f90614524565b90506112af565b508091505092915050565b60008061133d8361155f565b119050919050565b6000600360149054906101000a900460ff16905090565b611364611c42565b80600c60006101000a81548160ff02191690831515021790555050565b611389611c42565b61139360006122f6565b670de0b6b3a76400003410156113a857600080fd5b50565b6113b3611c42565b6113bb6123bc565b565b6113c5611c42565b80600e600084815260200190815260200160002090816113e5919061470e565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161141691906134a3565b60405180910390a25050565b600060098281548110611438576114376144f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61149c611c42565b80600d8190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f7611c42565b61151233838360405180602001604052806000815250611a92565b5050565b61152861152161090f565b838361241f565b5050565b60008061153761175d565b4761154291906140b7565b90506115578382611552866114a6565b61258b565b915050919050565b600060046000838152602001908152602001600020549050919050565b60008061158884611714565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c19190613ce6565b602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160291906147f5565b61160c91906140b7565b9050611622838261161d8787610f7e565b61258b565b91505092915050565b600e602052806000526040600020600091509050805461164a90613f33565b80601f016020809104026020016040519081016040528092919081815260200182805461167690613f33565b80156116c35780601f10611698576101008083540402835291602001916116c3565b820191906000526020600020905b8154815290600101906020018083116116a657829003601f168201915b505050505081565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600654905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61180361090f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061184957506118488561184361090f565b611767565b5b611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90614443565b60405180910390fd5b61189585858585856125f9565b5050505050565b6118a4611c42565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a90614894565b60405180910390fd5b61191c816122f6565b670de0b6b3a764000034101561193157600080fd5b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b804710156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614900565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611a0790614951565b60006040518083038185875af1925050503d8060008114611a44576040519150601f19603f3d011682016040523d82523d6000602084013e611a49565b606091505b5050905080611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906149d8565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890614a6a565b60405180910390fd5b6000611b0b61090f565b90506000611b1885612894565b90506000611b2585612894565b9050611b368360008985858961290e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b9591906140b7565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611c13929190614a8a565b60405180910390a4611c2a8360008985858961292c565b611c3983600089898989612934565b50505050505050565b611c4a61090f565b73ffffffffffffffffffffffffffffffffffffffff16611c6861146a565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb590614aff565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2690614a6a565b60405180910390fd5b8151835114611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90614b91565b60405180910390fd5b6000611d7d61090f565b9050611d8e8160008787878761290e565b60005b8451811015611e4757838181518110611dad57611dac6144f5565b5b6020026020010151600080878481518110611dcb57611dca6144f5565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2d91906140b7565b925050819055508080611e3f90614524565b915050611d91565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ebf929190614bb1565b60405180910390a4611ed68160008787878761292c565b611ee581600087878787612b0b565b5050505050565b8151835114611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614b91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614c5a565b60405180910390fd5b6000611fa961090f565b9050611fb981878787878761290e565b60005b845181101561216a576000858281518110611fda57611fd96144f5565b5b602002602001015190506000858381518110611ff957611ff86144f5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561209a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209190614cec565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214f91906140b7565b925050819055505050508061216390614524565b9050611fbc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516121e1929190614bb1565b60405180910390a46121f781878787878761292c565b612205818787878787612b0b565b505050505050565b612215612ce2565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61225961090f565b6040516122669190613ce6565b60405180910390a1565b6122f18363a9059cbb60e01b848460405160240161228f92919061323b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d2b565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123c4612df2565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861240861090f565b6040516124159190613ce6565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248490614d7e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161257e91906133cb565b60405180910390a3505050565b600081600554600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856125dc91906142b7565b6125e69190614dcd565b6125f09190614dfe565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90614c5a565b60405180910390fd5b600061267261090f565b9050600061267f85612894565b9050600061268c85612894565b905061269c83898985858961290e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90614cec565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e891906140b7565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612865929190614a8a565b60405180910390a461287b848a8a86868a61292c565b612889848a8a8a8a8a612934565b505050505050505050565b60606000600167ffffffffffffffff8111156128b3576128b2613575565b5b6040519080825280602002602001820160405280156128e15781602001602082028036833780820191505090505b50905082816000815181106128f9576128f86144f5565b5b60200260200101818152505080915050919050565b612916612df2565b612924868686868686612e3c565b505050505050565b505050505050565b6129538473ffffffffffffffffffffffffffffffffffffffff1661300c565b15612b03578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612999959493929190614e87565b6020604051808303816000875af19250505080156129d557506040513d601f19601f820116820180604052508101906129d29190614ef6565b60015b612a7a576129e1614f30565b806308c379a003612a3d57506129f5614f52565b80612a005750612a3f565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3491906134a3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190615054565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af8906150e6565b60405180910390fd5b505b505050505050565b612b2a8473ffffffffffffffffffffffffffffffffffffffff1661300c565b15612cda578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612b70959493929190615106565b6020604051808303816000875af1925050508015612bac57506040513d601f19601f82011682018060405250810190612ba99190614ef6565b60015b612c5157612bb8614f30565b806308c379a003612c145750612bcc614f52565b80612bd75750612c16565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b91906134a3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890615054565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf906150e6565b60405180910390fd5b505b505050505050565b612cea611345565b612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d20906151ba565b60405180910390fd5b565b6000612d8d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661302f9092919063ffffffff16565b9050600081511115612ded5780806020019051810190612dad91906151ef565b612dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de39061528e565b60405180910390fd5b5b505050565b612dfa611345565b15612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e31906152fa565b60405180910390fd5b565b612e4a868686868686613047565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612efb5760005b8351811015612ef957828181518110612e9d57612e9c6144f5565b5b602002602001015160046000868481518110612ebc57612ebb6144f5565b5b602002602001015181526020019081526020016000206000828254612ee191906140b7565b9250508190555080612ef290614524565b9050612e81565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036130045760005b8351811015613002576000848281518110612f5057612f4f6144f5565b5b602002602001015190506000848381518110612f6f57612f6e6144f5565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb9061538c565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080612ffb90614524565b9050612f32565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606061303e848460008561304f565b90509392505050565b505050505050565b606082471015613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308b9061541e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130bd919061546f565b60006040518083038185875af1925050503d80600081146130fa576040519150601f19603f3d011682016040523d82523d6000602084013e6130ff565b606091505b50915091506131108783838761311c565b92505050949350505050565b6060831561317e576000835103613176576131368561300c565b613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316c906154d2565b60405180910390fd5b5b829050613189565b6131888383613191565b5b949350505050565b6000825111156131a45781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d891906134a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061320c826131e1565b9050919050565b61321c81613201565b82525050565b6000819050919050565b61323581613222565b82525050565b60006040820190506132506000830185613213565b61325d602083018461322c565b9392505050565b6000604051905090565b600080fd5b600080fd5b61328181613201565b811461328c57600080fd5b50565b60008135905061329e81613278565b92915050565b6132ad81613222565b81146132b857600080fd5b50565b6000813590506132ca816132a4565b92915050565b600080604083850312156132e7576132e661326e565b5b60006132f58582860161328f565b9250506020613306858286016132bb565b9150509250929050565b6000602082019050613325600083018461322c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133608161332b565b811461336b57600080fd5b50565b60008135905061337d81613357565b92915050565b6000602082840312156133995761339861326e565b5b60006133a78482850161336e565b91505092915050565b60008115159050919050565b6133c5816133b0565b82525050565b60006020820190506133e060008301846133bc565b92915050565b6000602082840312156133fc576133fb61326e565b5b600061340a848285016132bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561344d578082015181840152602081019050613432565b60008484015250505050565b6000601f19601f8301169050919050565b600061347582613413565b61347f818561341e565b935061348f81856020860161342f565b61349881613459565b840191505092915050565b600060208201905081810360008301526134bd818461346a565b905092915050565b60006134d0826131e1565b9050919050565b6134e0816134c5565b81146134eb57600080fd5b50565b6000813590506134fd816134d7565b92915050565b6000602082840312156135195761351861326e565b5b6000613527848285016134ee565b91505092915050565b600080604083850312156135475761354661326e565b5b6000613555858286016132bb565b9250506020613566858286016132bb565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135ad82613459565b810181811067ffffffffffffffff821117156135cc576135cb613575565b5b80604052505050565b60006135df613264565b90506135eb82826135a4565b919050565b600067ffffffffffffffff82111561360b5761360a613575565b5b602082029050602081019050919050565b600080fd5b600061363461362f846135f0565b6135d5565b905080838252602082019050602084028301858111156136575761365661361c565b5b835b81811015613680578061366c88826132bb565b845260208401935050602081019050613659565b5050509392505050565b600082601f83011261369f5761369e613570565b5b81356136af848260208601613621565b91505092915050565b600080fd5b600067ffffffffffffffff8211156136d8576136d7613575565b5b6136e182613459565b9050602081019050919050565b82818337600083830152505050565b600061371061370b846136bd565b6135d5565b90508281526020810184848401111561372c5761372b6136b8565b5b6137378482856136ee565b509392505050565b600082601f83011261375457613753613570565b5b81356137648482602086016136fd565b91505092915050565b600080600080608085870312156137875761378661326e565b5b60006137958782880161328f565b945050602085013567ffffffffffffffff8111156137b6576137b5613273565b5b6137c28782880161368a565b935050604085013567ffffffffffffffff8111156137e3576137e2613273565b5b6137ef8782880161368a565b925050606085013567ffffffffffffffff8111156138105761380f613273565b5b61381c8782880161373f565b91505092959194509250565b600080600080600060a086880312156138445761384361326e565b5b60006138528882890161328f565b95505060206138638882890161328f565b945050604086013567ffffffffffffffff81111561388457613883613273565b5b6138908882890161368a565b935050606086013567ffffffffffffffff8111156138b1576138b0613273565b5b6138bd8882890161368a565b925050608086013567ffffffffffffffff8111156138de576138dd613273565b5b6138ea8882890161373f565b9150509295509295909350565b600061390282613201565b9050919050565b613912816138f7565b811461391d57600080fd5b50565b60008135905061392f81613909565b92915050565b6000806040838503121561394c5761394b61326e565b5b600061395a85828601613920565b925050602061396b8582860161328f565b9150509250929050565b600067ffffffffffffffff8211156139905761398f613575565b5b602082029050602081019050919050565b60006139b46139af84613975565b6135d5565b905080838252602082019050602084028301858111156139d7576139d661361c565b5b835b81811015613a0057806139ec888261328f565b8452602084019350506020810190506139d9565b5050509392505050565b600082601f830112613a1f57613a1e613570565b5b8135613a2f8482602086016139a1565b91505092915050565b60008060408385031215613a4f57613a4e61326e565b5b600083013567ffffffffffffffff811115613a6d57613a6c613273565b5b613a7985828601613a0a565b925050602083013567ffffffffffffffff811115613a9a57613a99613273565b5b613aa68582860161368a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ae581613222565b82525050565b6000613af78383613adc565b60208301905092915050565b6000602082019050919050565b6000613b1b82613ab0565b613b258185613abb565b9350613b3083613acc565b8060005b83811015613b61578151613b488882613aeb565b9750613b5383613b03565b925050600181019050613b34565b5085935050505092915050565b60006020820190508181036000830152613b888184613b10565b905092915050565b613b99816133b0565b8114613ba457600080fd5b50565b600081359050613bb681613b90565b92915050565b600060208284031215613bd257613bd161326e565b5b6000613be084828501613ba7565b91505092915050565b600067ffffffffffffffff821115613c0457613c03613575565b5b613c0d82613459565b9050602081019050919050565b6000613c2d613c2884613be9565b6135d5565b905082815260208101848484011115613c4957613c486136b8565b5b613c548482856136ee565b509392505050565b600082601f830112613c7157613c70613570565b5b8135613c81848260208601613c1a565b91505092915050565b60008060408385031215613ca157613ca061326e565b5b6000613caf858286016132bb565b925050602083013567ffffffffffffffff811115613cd057613ccf613273565b5b613cdc85828601613c5c565b9150509250929050565b6000602082019050613cfb6000830184613213565b92915050565b600060208284031215613d1757613d1661326e565b5b6000613d258482850161328f565b91505092915050565b60008060408385031215613d4557613d4461326e565b5b6000613d538582860161328f565b9250506020613d6485828601613ba7565b9150509250929050565b600060208284031215613d8457613d8361326e565b5b6000613d9284828501613920565b91505092915050565b60008060408385031215613db257613db161326e565b5b6000613dc08582860161328f565b9250506020613dd18582860161328f565b9150509250929050565b600080600080600060a08688031215613df757613df661326e565b5b6000613e058882890161328f565b9550506020613e168882890161328f565b9450506040613e27888289016132bb565b9350506060613e38888289016132bb565b925050608086013567ffffffffffffffff811115613e5957613e58613273565b5b613e658882890161373f565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613ece602a8361341e565b9150613ed982613e72565b604082019050919050565b60006020820190508181036000830152613efd81613ec1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f4b57607f821691505b602082108103613f5e57613f5d613f04565b5b50919050565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b6000613fc060268361341e565b9150613fcb82613f64565b604082019050919050565b60006020820190508181036000830152613fef81613fb3565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b6000614052602b8361341e565b915061405d82613ff6565b604082019050919050565b6000602082019050818103600083015261408181614045565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140c282613222565b91506140cd83613222565b92508282019050808211156140e5576140e4614088565b5b92915050565b6000819050919050565b600061411061410b614106846131e1565b6140eb565b6131e1565b9050919050565b6000614122826140f5565b9050919050565b600061413482614117565b9050919050565b61414481614129565b82525050565b600060408201905061415f600083018561413b565b61416c602083018461322c565b9392505050565b7f3f5f5f5f5f3f0000000000000000000000000000000000000000000000000000600082015250565b60006141a960068361341e565b91506141b482614173565b602082019050919050565b600060208201905081810360008301526141d88161419c565b9050919050565b7f5f5f5f5f00000000000000000000000000000000000000000000000000000000600082015250565b600061421560048361341e565b9150614220826141df565b602082019050919050565b6000602082019050818103600083015261424481614208565b9050919050565b7f5f205f205f205f00000000000000000000000000000000000000000000000000600082015250565b600061428160078361341e565b915061428c8261424b565b602082019050919050565b600060208201905081810360008301526142b081614274565b9050919050565b60006142c282613222565b91506142cd83613222565b92508282026142db81613222565b915082820484148315176142f2576142f1614088565b5b5092915050565b7f7468756d62732075700000000000000000000000000000000000000000000000600082015250565b600061432f60098361341e565b915061433a826142f9565b602082019050919050565b6000602082019050818103600083015261435e81614322565b9050919050565b7f7468756d627320646f776e000000000000000000000000000000000000000000600082015250565b600061439b600b8361341e565b91506143a682614365565b602082019050919050565b600060208201905081810360008301526143ca8161438e565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061442d602e8361341e565b9150614438826143d1565b604082019050919050565b6000602082019050818103600083015261445c81614420565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006144bf60298361341e565b91506144ca82614463565b604082019050919050565b600060208201905081810360008301526144ee816144b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061452f82613222565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456157614560614088565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026145ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614591565b6145d88683614591565b95508019841693508086168417925050509392505050565b600061460b61460661460184613222565b6140eb565b613222565b9050919050565b6000819050919050565b614625836145f0565b61463961463182614612565b84845461459e565b825550505050565b600090565b61464e614641565b61465981848461461c565b505050565b5b8181101561467d57614672600082614646565b60018101905061465f565b5050565b601f8211156146c2576146938161456c565b61469c84614581565b810160208510156146ab578190505b6146bf6146b785614581565b83018261465e565b50505b505050565b600082821c905092915050565b60006146e5600019846008026146c7565b1980831691505092915050565b60006146fe83836146d4565b9150826002028217905092915050565b61471782613413565b67ffffffffffffffff8111156147305761472f613575565b5b61473a8254613f33565b614745828285614681565b600060209050601f8311600181146147785760008415614766578287015190505b61477085826146f2565b8655506147d8565b601f1984166147868661456c565b60005b828110156147ae57848901518255600182019150602085019450602081019050614789565b868310156147cb57848901516147c7601f8916826146d4565b8355505b6001600288020188555050505b505050505050565b6000815190506147ef816132a4565b92915050565b60006020828403121561480b5761480a61326e565b5b6000614819848285016147e0565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061487e60268361341e565b915061488982614822565b604082019050919050565b600060208201905081810360008301526148ad81614871565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006148ea601d8361341e565b91506148f5826148b4565b602082019050919050565b60006020820190508181036000830152614919816148dd565b9050919050565b600081905092915050565b50565b600061493b600083614920565b91506149468261492b565b600082019050919050565b600061495c8261492e565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006149c2603a8361341e565b91506149cd82614966565b604082019050919050565b600060208201905081810360008301526149f1816149b5565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a5460218361341e565b9150614a5f826149f8565b604082019050919050565b60006020820190508181036000830152614a8381614a47565b9050919050565b6000604082019050614a9f600083018561322c565b614aac602083018461322c565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ae960208361341e565b9150614af482614ab3565b602082019050919050565b60006020820190508181036000830152614b1881614adc565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614b7b60288361341e565b9150614b8682614b1f565b604082019050919050565b60006020820190508181036000830152614baa81614b6e565b9050919050565b60006040820190508181036000830152614bcb8185613b10565b90508181036020830152614bdf8184613b10565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c4460258361341e565b9150614c4f82614be8565b604082019050919050565b60006020820190508181036000830152614c7381614c37565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614cd6602a8361341e565b9150614ce182614c7a565b604082019050919050565b60006020820190508181036000830152614d0581614cc9565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614d6860298361341e565b9150614d7382614d0c565b604082019050919050565b60006020820190508181036000830152614d9781614d5b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dd882613222565b9150614de383613222565b925082614df357614df2614d9e565b5b828204905092915050565b6000614e0982613222565b9150614e1483613222565b9250828203905081811115614e2c57614e2b614088565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000614e5982614e32565b614e638185614e3d565b9350614e7381856020860161342f565b614e7c81613459565b840191505092915050565b600060a082019050614e9c6000830188613213565b614ea96020830187613213565b614eb6604083018661322c565b614ec3606083018561322c565b8181036080830152614ed58184614e4e565b90509695505050505050565b600081519050614ef081613357565b92915050565b600060208284031215614f0c57614f0b61326e565b5b6000614f1a84828501614ee1565b91505092915050565b60008160e01c9050919050565b600060033d1115614f4f5760046000803e614f4c600051614f23565b90505b90565b600060443d10614fdf57614f64613264565b60043d036004823e80513d602482011167ffffffffffffffff82111715614f8c575050614fdf565b808201805167ffffffffffffffff811115614faa5750505050614fdf565b80602083010160043d038501811115614fc7575050505050614fdf565b614fd6826020018501866135a4565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061503e60348361341e565b915061504982614fe2565b604082019050919050565b6000602082019050818103600083015261506d81615031565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006150d060288361341e565b91506150db82615074565b604082019050919050565b600060208201905081810360008301526150ff816150c3565b9050919050565b600060a08201905061511b6000830188613213565b6151286020830187613213565b818103604083015261513a8186613b10565b9050818103606083015261514e8185613b10565b905081810360808301526151628184614e4e565b90509695505050505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006151a460148361341e565b91506151af8261516e565b602082019050919050565b600060208201905081810360008301526151d381615197565b9050919050565b6000815190506151e981613b90565b92915050565b6000602082840312156152055761520461326e565b5b6000615213848285016151da565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615278602a8361341e565b91506152838261521c565b604082019050919050565b600060208201905081810360008301526152a78161526b565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006152e460108361341e565b91506152ef826152ae565b602082019050919050565b60006020820190508181036000830152615313816152d7565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b600061537660288361341e565b91506153818261531a565b604082019050919050565b600060208201905081810360008301526153a581615369565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061540860268361341e565b9150615413826153ac565b604082019050919050565b60006020820190508181036000830152615437816153fb565b9050919050565b600061544982614e32565b6154538185614920565b935061546381856020860161342f565b80840191505092915050565b600061547b828461543e565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006154bc601d8361341e565b91506154c782615486565b602082019050919050565b600060208201905081810360008301526154eb816154af565b905091905056fea2646970667358221220074e314a5b73694581ade9ea7dd6ab49b4c0bfbf593d238de52402049ed3753664736f6c63430008110033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bbb14ad9b1c1f29caa7c679029c473498c3a1cb2000000000000000000000000c866e7c29a7804ce40bb56bfa74e1daf448df01f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032
Deployed Bytecode
0x6080604052600436106102125760003560e01c80638456cb5911610118578063bd85b039116100a0578063d79779b21161006f578063d79779b214610825578063e33b7de314610862578063e985e9c51461088d578063f242432a146108ca578063f2fde38b146108f357610259565b8063bd85b03914610731578063c45ac0501461076e578063c87b56dd146107ab578063ce7c2ac2146107e857610259565b80638ebe8680116100e75780638ebe86801461063c5780639852595c146106655780639f7b4579146106a2578063a22cb465146106cb578063a3f8eace146106f457610259565b80638456cb5914610594578063862440e2146105ab5780638b83209b146105d45780638da5cb5b1461061157610259565b80633a98ef391161019b5780634e1273f41161016a5780634e1273f4146104aa5780634f558e79146104e75780635c975abb146105245780636baaded61461054f5780637d654c7f1461057857610259565b80633a98ef39146104025780633f4ba83a1461042d578063406072a91461044457806348b750441461048157610259565b80631bb37d95116101e25780631bb37d951461033e5780631f7fdffa1461035a57806324b04905146103835780632eb2c2d6146103ae57806332315681146103d757610259565b8062fdd58e1461025e57806301ffc9a71461029b5780630e89341c146102d8578063191655871461031557610259565b36610259577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77061024061090f565b3460405161024f92919061323b565b60405180910390a1005b600080fd5b34801561026a57600080fd5b50610285600480360381019061028091906132d0565b610917565b6040516102929190613310565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190613383565b6109df565b6040516102cf91906133cb565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa91906133e6565b610ac1565b60405161030c91906134a3565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190613503565b610b66565b005b61035860048036038101906103539190613530565b610ce5565b005b34801561036657600080fd5b50610381600480360381019061037c919061376d565b610e8e565b005b34801561038f57600080fd5b50610398610ea8565b6040516103a59190613310565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613828565b610eae565b005b3480156103e357600080fd5b506103ec610f4f565b6040516103f991906133cb565b60405180910390f35b34801561040e57600080fd5b50610417610f62565b6040516104249190613310565b60405180910390f35b34801561043957600080fd5b50610442610f6c565b005b34801561045057600080fd5b5061046b60048036038101906104669190613935565b610f7e565b6040516104789190613310565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613935565b611005565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190613a38565b611218565b6040516104de9190613b6e565b60405180910390f35b3480156104f357600080fd5b5061050e600480360381019061050991906133e6565b611331565b60405161051b91906133cb565b60405180910390f35b34801561053057600080fd5b50610539611345565b60405161054691906133cb565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190613bbc565b61135c565b005b610592600480360381019061058d91906133e6565b611381565b005b3480156105a057600080fd5b506105a96113ab565b005b3480156105b757600080fd5b506105d260048036038101906105cd9190613c8a565b6113bd565b005b3480156105e057600080fd5b506105fb60048036038101906105f691906133e6565b611422565b6040516106089190613ce6565b60405180910390f35b34801561061d57600080fd5b5061062661146a565b6040516106339190613ce6565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e91906133e6565b611494565b005b34801561067157600080fd5b5061068c60048036038101906106879190613d01565b6114a6565b6040516106999190613310565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190613530565b6114ef565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613d2e565b611516565b005b34801561070057600080fd5b5061071b60048036038101906107169190613d01565b61152c565b6040516107289190613310565b60405180910390f35b34801561073d57600080fd5b50610758600480360381019061075391906133e6565b61155f565b6040516107659190613310565b60405180910390f35b34801561077a57600080fd5b5061079560048036038101906107909190613935565b61157c565b6040516107a29190613310565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd91906133e6565b61162b565b6040516107df91906134a3565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a9190613d01565b6116cb565b60405161081c9190613310565b60405180910390f35b34801561083157600080fd5b5061084c60048036038101906108479190613d6e565b611714565b6040516108599190613310565b60405180910390f35b34801561086e57600080fd5b5061087761175d565b6040516108849190613310565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613d9b565b611767565b6040516108c191906133cb565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec9190613ddb565b6117fb565b005b61090d60048036038101906109089190613d01565b61189c565b005b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90613ee4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aaa57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aba5750610ab982611934565b5b9050919050565b6060600e60008381526020019081526020016000208054610ae190613f33565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0d90613f33565b8015610b5a5780601f10610b2f57610100808354040283529160200191610b5a565b820191906000526020600020905b815481529060010190602001808311610b3d57829003601f168201915b50505050509050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90613fd6565b60405180910390fd5b6000610bf38261152c565b905060008103610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90614068565b60405180910390fd5b8060066000828254610c4a91906140b7565b9250508190555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550610ca8828261199e565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568282604051610cd992919061414a565b60405180910390a15050565b600c60009054906101000a900460ff16610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b906141bf565b60405180910390fd5b610d3d82611331565b610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d739061422b565b60405180910390fd5b6003610d878361155f565b1115610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90614297565b60405180910390fd5b80600d54610dd691906142b7565b341015610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90614345565b60405180910390fd5b600381610e248461155f565b610e2e91906140b7565b1115610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e66906143b1565b60405180910390fd5b610e8a33838360405180602001604052806000815250611a92565b5050565b610e96611c42565b610ea284848484611cc0565b50505050565b600d5481565b610eb661090f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610efc5750610efb85610ef661090f565b611767565b5b610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290614443565b60405180910390fd5b610f488585858585611eec565b5050505050565b600c60009054906101000a900460ff1681565b6000600554905090565b610f74611c42565b610f7c61220d565b565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613fd6565b60405180910390fd5b6000611093838361157c565b9050600081036110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90614068565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461112791906140b7565b9250508190555080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506111c3838383612270565b8273ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a838360405161120b92919061323b565b60405180910390a2505050565b6060815183511461125e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611255906144d5565b60405180910390fd5b6000835167ffffffffffffffff81111561127b5761127a613575565b5b6040519080825280602002602001820160405280156112a95781602001602082028036833780820191505090505b50905060005b8451811015611326576112f68582815181106112ce576112cd6144f5565b5b60200260200101518583815181106112e9576112e86144f5565b5b6020026020010151610917565b828281518110611309576113086144f5565b5b6020026020010181815250508061131f90614524565b90506112af565b508091505092915050565b60008061133d8361155f565b119050919050565b6000600360149054906101000a900460ff16905090565b611364611c42565b80600c60006101000a81548160ff02191690831515021790555050565b611389611c42565b61139360006122f6565b670de0b6b3a76400003410156113a857600080fd5b50565b6113b3611c42565b6113bb6123bc565b565b6113c5611c42565b80600e600084815260200190815260200160002090816113e5919061470e565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161141691906134a3565b60405180910390a25050565b600060098281548110611438576114376144f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61149c611c42565b80600d8190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f7611c42565b61151233838360405180602001604052806000815250611a92565b5050565b61152861152161090f565b838361241f565b5050565b60008061153761175d565b4761154291906140b7565b90506115578382611552866114a6565b61258b565b915050919050565b600060046000838152602001908152602001600020549050919050565b60008061158884611714565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c19190613ce6565b602060405180830381865afa1580156115de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160291906147f5565b61160c91906140b7565b9050611622838261161d8787610f7e565b61258b565b91505092915050565b600e602052806000526040600020600091509050805461164a90613f33565b80601f016020809104026020016040519081016040528092919081815260200182805461167690613f33565b80156116c35780601f10611698576101008083540402835291602001916116c3565b820191906000526020600020905b8154815290600101906020018083116116a657829003601f168201915b505050505081565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600654905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61180361090f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061184957506118488561184361090f565b611767565b5b611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90614443565b60405180910390fd5b61189585858585856125f9565b5050505050565b6118a4611c42565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a90614894565b60405180910390fd5b61191c816122f6565b670de0b6b3a764000034101561193157600080fd5b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b804710156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614900565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611a0790614951565b60006040518083038185875af1925050503d8060008114611a44576040519150601f19603f3d011682016040523d82523d6000602084013e611a49565b606091505b5050905080611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906149d8565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890614a6a565b60405180910390fd5b6000611b0b61090f565b90506000611b1885612894565b90506000611b2585612894565b9050611b368360008985858961290e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b9591906140b7565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611c13929190614a8a565b60405180910390a4611c2a8360008985858961292c565b611c3983600089898989612934565b50505050505050565b611c4a61090f565b73ffffffffffffffffffffffffffffffffffffffff16611c6861146a565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb590614aff565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2690614a6a565b60405180910390fd5b8151835114611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90614b91565b60405180910390fd5b6000611d7d61090f565b9050611d8e8160008787878761290e565b60005b8451811015611e4757838181518110611dad57611dac6144f5565b5b6020026020010151600080878481518110611dcb57611dca6144f5565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2d91906140b7565b925050819055508080611e3f90614524565b915050611d91565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ebf929190614bb1565b60405180910390a4611ed68160008787878761292c565b611ee581600087878787612b0b565b5050505050565b8151835114611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614b91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614c5a565b60405180910390fd5b6000611fa961090f565b9050611fb981878787878761290e565b60005b845181101561216a576000858281518110611fda57611fd96144f5565b5b602002602001015190506000858381518110611ff957611ff86144f5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561209a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209190614cec565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214f91906140b7565b925050819055505050508061216390614524565b9050611fbc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516121e1929190614bb1565b60405180910390a46121f781878787878761292c565b612205818787878787612b0b565b505050505050565b612215612ce2565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61225961090f565b6040516122669190613ce6565b60405180910390a1565b6122f18363a9059cbb60e01b848460405160240161228f92919061323b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d2b565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123c4612df2565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861240861090f565b6040516124159190613ce6565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248490614d7e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161257e91906133cb565b60405180910390a3505050565b600081600554600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856125dc91906142b7565b6125e69190614dcd565b6125f09190614dfe565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90614c5a565b60405180910390fd5b600061267261090f565b9050600061267f85612894565b9050600061268c85612894565b905061269c83898985858961290e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90614cec565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e891906140b7565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612865929190614a8a565b60405180910390a461287b848a8a86868a61292c565b612889848a8a8a8a8a612934565b505050505050505050565b60606000600167ffffffffffffffff8111156128b3576128b2613575565b5b6040519080825280602002602001820160405280156128e15781602001602082028036833780820191505090505b50905082816000815181106128f9576128f86144f5565b5b60200260200101818152505080915050919050565b612916612df2565b612924868686868686612e3c565b505050505050565b505050505050565b6129538473ffffffffffffffffffffffffffffffffffffffff1661300c565b15612b03578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612999959493929190614e87565b6020604051808303816000875af19250505080156129d557506040513d601f19601f820116820180604052508101906129d29190614ef6565b60015b612a7a576129e1614f30565b806308c379a003612a3d57506129f5614f52565b80612a005750612a3f565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3491906134a3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190615054565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af8906150e6565b60405180910390fd5b505b505050505050565b612b2a8473ffffffffffffffffffffffffffffffffffffffff1661300c565b15612cda578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612b70959493929190615106565b6020604051808303816000875af1925050508015612bac57506040513d601f19601f82011682018060405250810190612ba99190614ef6565b60015b612c5157612bb8614f30565b806308c379a003612c145750612bcc614f52565b80612bd75750612c16565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b91906134a3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890615054565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf906150e6565b60405180910390fd5b505b505050505050565b612cea611345565b612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d20906151ba565b60405180910390fd5b565b6000612d8d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661302f9092919063ffffffff16565b9050600081511115612ded5780806020019051810190612dad91906151ef565b612dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de39061528e565b60405180910390fd5b5b505050565b612dfa611345565b15612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e31906152fa565b60405180910390fd5b565b612e4a868686868686613047565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612efb5760005b8351811015612ef957828181518110612e9d57612e9c6144f5565b5b602002602001015160046000868481518110612ebc57612ebb6144f5565b5b602002602001015181526020019081526020016000206000828254612ee191906140b7565b9250508190555080612ef290614524565b9050612e81565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036130045760005b8351811015613002576000848281518110612f5057612f4f6144f5565b5b602002602001015190506000848381518110612f6f57612f6e6144f5565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb9061538c565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080612ffb90614524565b9050612f32565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606061303e848460008561304f565b90509392505050565b505050505050565b606082471015613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308b9061541e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130bd919061546f565b60006040518083038185875af1925050503d80600081146130fa576040519150601f19603f3d011682016040523d82523d6000602084013e6130ff565b606091505b50915091506131108783838761311c565b92505050949350505050565b6060831561317e576000835103613176576131368561300c565b613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316c906154d2565b60405180910390fd5b5b829050613189565b6131888383613191565b5b949350505050565b6000825111156131a45781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d891906134a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061320c826131e1565b9050919050565b61321c81613201565b82525050565b6000819050919050565b61323581613222565b82525050565b60006040820190506132506000830185613213565b61325d602083018461322c565b9392505050565b6000604051905090565b600080fd5b600080fd5b61328181613201565b811461328c57600080fd5b50565b60008135905061329e81613278565b92915050565b6132ad81613222565b81146132b857600080fd5b50565b6000813590506132ca816132a4565b92915050565b600080604083850312156132e7576132e661326e565b5b60006132f58582860161328f565b9250506020613306858286016132bb565b9150509250929050565b6000602082019050613325600083018461322c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133608161332b565b811461336b57600080fd5b50565b60008135905061337d81613357565b92915050565b6000602082840312156133995761339861326e565b5b60006133a78482850161336e565b91505092915050565b60008115159050919050565b6133c5816133b0565b82525050565b60006020820190506133e060008301846133bc565b92915050565b6000602082840312156133fc576133fb61326e565b5b600061340a848285016132bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561344d578082015181840152602081019050613432565b60008484015250505050565b6000601f19601f8301169050919050565b600061347582613413565b61347f818561341e565b935061348f81856020860161342f565b61349881613459565b840191505092915050565b600060208201905081810360008301526134bd818461346a565b905092915050565b60006134d0826131e1565b9050919050565b6134e0816134c5565b81146134eb57600080fd5b50565b6000813590506134fd816134d7565b92915050565b6000602082840312156135195761351861326e565b5b6000613527848285016134ee565b91505092915050565b600080604083850312156135475761354661326e565b5b6000613555858286016132bb565b9250506020613566858286016132bb565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135ad82613459565b810181811067ffffffffffffffff821117156135cc576135cb613575565b5b80604052505050565b60006135df613264565b90506135eb82826135a4565b919050565b600067ffffffffffffffff82111561360b5761360a613575565b5b602082029050602081019050919050565b600080fd5b600061363461362f846135f0565b6135d5565b905080838252602082019050602084028301858111156136575761365661361c565b5b835b81811015613680578061366c88826132bb565b845260208401935050602081019050613659565b5050509392505050565b600082601f83011261369f5761369e613570565b5b81356136af848260208601613621565b91505092915050565b600080fd5b600067ffffffffffffffff8211156136d8576136d7613575565b5b6136e182613459565b9050602081019050919050565b82818337600083830152505050565b600061371061370b846136bd565b6135d5565b90508281526020810184848401111561372c5761372b6136b8565b5b6137378482856136ee565b509392505050565b600082601f83011261375457613753613570565b5b81356137648482602086016136fd565b91505092915050565b600080600080608085870312156137875761378661326e565b5b60006137958782880161328f565b945050602085013567ffffffffffffffff8111156137b6576137b5613273565b5b6137c28782880161368a565b935050604085013567ffffffffffffffff8111156137e3576137e2613273565b5b6137ef8782880161368a565b925050606085013567ffffffffffffffff8111156138105761380f613273565b5b61381c8782880161373f565b91505092959194509250565b600080600080600060a086880312156138445761384361326e565b5b60006138528882890161328f565b95505060206138638882890161328f565b945050604086013567ffffffffffffffff81111561388457613883613273565b5b6138908882890161368a565b935050606086013567ffffffffffffffff8111156138b1576138b0613273565b5b6138bd8882890161368a565b925050608086013567ffffffffffffffff8111156138de576138dd613273565b5b6138ea8882890161373f565b9150509295509295909350565b600061390282613201565b9050919050565b613912816138f7565b811461391d57600080fd5b50565b60008135905061392f81613909565b92915050565b6000806040838503121561394c5761394b61326e565b5b600061395a85828601613920565b925050602061396b8582860161328f565b9150509250929050565b600067ffffffffffffffff8211156139905761398f613575565b5b602082029050602081019050919050565b60006139b46139af84613975565b6135d5565b905080838252602082019050602084028301858111156139d7576139d661361c565b5b835b81811015613a0057806139ec888261328f565b8452602084019350506020810190506139d9565b5050509392505050565b600082601f830112613a1f57613a1e613570565b5b8135613a2f8482602086016139a1565b91505092915050565b60008060408385031215613a4f57613a4e61326e565b5b600083013567ffffffffffffffff811115613a6d57613a6c613273565b5b613a7985828601613a0a565b925050602083013567ffffffffffffffff811115613a9a57613a99613273565b5b613aa68582860161368a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ae581613222565b82525050565b6000613af78383613adc565b60208301905092915050565b6000602082019050919050565b6000613b1b82613ab0565b613b258185613abb565b9350613b3083613acc565b8060005b83811015613b61578151613b488882613aeb565b9750613b5383613b03565b925050600181019050613b34565b5085935050505092915050565b60006020820190508181036000830152613b888184613b10565b905092915050565b613b99816133b0565b8114613ba457600080fd5b50565b600081359050613bb681613b90565b92915050565b600060208284031215613bd257613bd161326e565b5b6000613be084828501613ba7565b91505092915050565b600067ffffffffffffffff821115613c0457613c03613575565b5b613c0d82613459565b9050602081019050919050565b6000613c2d613c2884613be9565b6135d5565b905082815260208101848484011115613c4957613c486136b8565b5b613c548482856136ee565b509392505050565b600082601f830112613c7157613c70613570565b5b8135613c81848260208601613c1a565b91505092915050565b60008060408385031215613ca157613ca061326e565b5b6000613caf858286016132bb565b925050602083013567ffffffffffffffff811115613cd057613ccf613273565b5b613cdc85828601613c5c565b9150509250929050565b6000602082019050613cfb6000830184613213565b92915050565b600060208284031215613d1757613d1661326e565b5b6000613d258482850161328f565b91505092915050565b60008060408385031215613d4557613d4461326e565b5b6000613d538582860161328f565b9250506020613d6485828601613ba7565b9150509250929050565b600060208284031215613d8457613d8361326e565b5b6000613d9284828501613920565b91505092915050565b60008060408385031215613db257613db161326e565b5b6000613dc08582860161328f565b9250506020613dd18582860161328f565b9150509250929050565b600080600080600060a08688031215613df757613df661326e565b5b6000613e058882890161328f565b9550506020613e168882890161328f565b9450506040613e27888289016132bb565b9350506060613e38888289016132bb565b925050608086013567ffffffffffffffff811115613e5957613e58613273565b5b613e658882890161373f565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613ece602a8361341e565b9150613ed982613e72565b604082019050919050565b60006020820190508181036000830152613efd81613ec1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f4b57607f821691505b602082108103613f5e57613f5d613f04565b5b50919050565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b6000613fc060268361341e565b9150613fcb82613f64565b604082019050919050565b60006020820190508181036000830152613fef81613fb3565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b6000614052602b8361341e565b915061405d82613ff6565b604082019050919050565b6000602082019050818103600083015261408181614045565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140c282613222565b91506140cd83613222565b92508282019050808211156140e5576140e4614088565b5b92915050565b6000819050919050565b600061411061410b614106846131e1565b6140eb565b6131e1565b9050919050565b6000614122826140f5565b9050919050565b600061413482614117565b9050919050565b61414481614129565b82525050565b600060408201905061415f600083018561413b565b61416c602083018461322c565b9392505050565b7f3f5f5f5f5f3f0000000000000000000000000000000000000000000000000000600082015250565b60006141a960068361341e565b91506141b482614173565b602082019050919050565b600060208201905081810360008301526141d88161419c565b9050919050565b7f5f5f5f5f00000000000000000000000000000000000000000000000000000000600082015250565b600061421560048361341e565b9150614220826141df565b602082019050919050565b6000602082019050818103600083015261424481614208565b9050919050565b7f5f205f205f205f00000000000000000000000000000000000000000000000000600082015250565b600061428160078361341e565b915061428c8261424b565b602082019050919050565b600060208201905081810360008301526142b081614274565b9050919050565b60006142c282613222565b91506142cd83613222565b92508282026142db81613222565b915082820484148315176142f2576142f1614088565b5b5092915050565b7f7468756d62732075700000000000000000000000000000000000000000000000600082015250565b600061432f60098361341e565b915061433a826142f9565b602082019050919050565b6000602082019050818103600083015261435e81614322565b9050919050565b7f7468756d627320646f776e000000000000000000000000000000000000000000600082015250565b600061439b600b8361341e565b91506143a682614365565b602082019050919050565b600060208201905081810360008301526143ca8161438e565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061442d602e8361341e565b9150614438826143d1565b604082019050919050565b6000602082019050818103600083015261445c81614420565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006144bf60298361341e565b91506144ca82614463565b604082019050919050565b600060208201905081810360008301526144ee816144b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061452f82613222565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456157614560614088565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026145ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614591565b6145d88683614591565b95508019841693508086168417925050509392505050565b600061460b61460661460184613222565b6140eb565b613222565b9050919050565b6000819050919050565b614625836145f0565b61463961463182614612565b84845461459e565b825550505050565b600090565b61464e614641565b61465981848461461c565b505050565b5b8181101561467d57614672600082614646565b60018101905061465f565b5050565b601f8211156146c2576146938161456c565b61469c84614581565b810160208510156146ab578190505b6146bf6146b785614581565b83018261465e565b50505b505050565b600082821c905092915050565b60006146e5600019846008026146c7565b1980831691505092915050565b60006146fe83836146d4565b9150826002028217905092915050565b61471782613413565b67ffffffffffffffff8111156147305761472f613575565b5b61473a8254613f33565b614745828285614681565b600060209050601f8311600181146147785760008415614766578287015190505b61477085826146f2565b8655506147d8565b601f1984166147868661456c565b60005b828110156147ae57848901518255600182019150602085019450602081019050614789565b868310156147cb57848901516147c7601f8916826146d4565b8355505b6001600288020188555050505b505050505050565b6000815190506147ef816132a4565b92915050565b60006020828403121561480b5761480a61326e565b5b6000614819848285016147e0565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061487e60268361341e565b915061488982614822565b604082019050919050565b600060208201905081810360008301526148ad81614871565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006148ea601d8361341e565b91506148f5826148b4565b602082019050919050565b60006020820190508181036000830152614919816148dd565b9050919050565b600081905092915050565b50565b600061493b600083614920565b91506149468261492b565b600082019050919050565b600061495c8261492e565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006149c2603a8361341e565b91506149cd82614966565b604082019050919050565b600060208201905081810360008301526149f1816149b5565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a5460218361341e565b9150614a5f826149f8565b604082019050919050565b60006020820190508181036000830152614a8381614a47565b9050919050565b6000604082019050614a9f600083018561322c565b614aac602083018461322c565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ae960208361341e565b9150614af482614ab3565b602082019050919050565b60006020820190508181036000830152614b1881614adc565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614b7b60288361341e565b9150614b8682614b1f565b604082019050919050565b60006020820190508181036000830152614baa81614b6e565b9050919050565b60006040820190508181036000830152614bcb8185613b10565b90508181036020830152614bdf8184613b10565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c4460258361341e565b9150614c4f82614be8565b604082019050919050565b60006020820190508181036000830152614c7381614c37565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614cd6602a8361341e565b9150614ce182614c7a565b604082019050919050565b60006020820190508181036000830152614d0581614cc9565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614d6860298361341e565b9150614d7382614d0c565b604082019050919050565b60006020820190508181036000830152614d9781614d5b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dd882613222565b9150614de383613222565b925082614df357614df2614d9e565b5b828204905092915050565b6000614e0982613222565b9150614e1483613222565b9250828203905081811115614e2c57614e2b614088565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000614e5982614e32565b614e638185614e3d565b9350614e7381856020860161342f565b614e7c81613459565b840191505092915050565b600060a082019050614e9c6000830188613213565b614ea96020830187613213565b614eb6604083018661322c565b614ec3606083018561322c565b8181036080830152614ed58184614e4e565b90509695505050505050565b600081519050614ef081613357565b92915050565b600060208284031215614f0c57614f0b61326e565b5b6000614f1a84828501614ee1565b91505092915050565b60008160e01c9050919050565b600060033d1115614f4f5760046000803e614f4c600051614f23565b90505b90565b600060443d10614fdf57614f64613264565b60043d036004823e80513d602482011167ffffffffffffffff82111715614f8c575050614fdf565b808201805167ffffffffffffffff811115614faa5750505050614fdf565b80602083010160043d038501811115614fc7575050505050614fdf565b614fd6826020018501866135a4565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061503e60348361341e565b915061504982614fe2565b604082019050919050565b6000602082019050818103600083015261506d81615031565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006150d060288361341e565b91506150db82615074565b604082019050919050565b600060208201905081810360008301526150ff816150c3565b9050919050565b600060a08201905061511b6000830188613213565b6151286020830187613213565b818103604083015261513a8186613b10565b9050818103606083015261514e8185613b10565b905081810360808301526151628184614e4e565b90509695505050505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006151a460148361341e565b91506151af8261516e565b602082019050919050565b600060208201905081810360008301526151d381615197565b9050919050565b6000815190506151e981613b90565b92915050565b6000602082840312156152055761520461326e565b5b6000615213848285016151da565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615278602a8361341e565b91506152838261521c565b604082019050919050565b600060208201905081810360008301526152a78161526b565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006152e460108361341e565b91506152ef826152ae565b602082019050919050565b60006020820190508181036000830152615313816152d7565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b600061537660288361341e565b91506153818261531a565b604082019050919050565b600060208201905081810360008301526153a581615369565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061540860268361341e565b9150615413826153ac565b604082019050919050565b60006020820190508181036000830152615437816153fb565b9050919050565b600061544982614e32565b6154538185614920565b935061546381856020860161342f565b80840191505092915050565b600061547b828461543e565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006154bc601d8361341e565b91506154c782615486565b602082019050919050565b600060208201905081810360008301526154eb816154af565b905091905056fea2646970667358221220074e314a5b73694581ade9ea7dd6ab49b4c0bfbf593d238de52402049ed3753664736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bbb14ad9b1c1f29caa7c679029c473498c3a1cb2000000000000000000000000c866e7c29a7804ce40bb56bfa74e1daf448df01f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032
-----Decoded View---------------
Arg [0] : _payees (address[]): 0xbBb14AD9B1C1f29cAa7C679029C473498c3a1cB2,0xC866E7C29a7804cE40BB56BFA74e1DAF448dF01f
Arg [1] : _shares (uint256[]): 50,50
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [3] : 000000000000000000000000bbb14ad9b1c1f29caa7c679029c473498c3a1cb2
Arg [4] : 000000000000000000000000c866e7c29a7804ce40bb56bfa74e1daf448df01f
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000032
Deployed Bytecode Sourcemap
78778:8237:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44190:40;44206:12;:10;:12::i;:::-;44220:9;44190:40;;;;;;;:::i;:::-;;;;;;;;78778:8237;;;;;61018:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60041:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;80822:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46711:671;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;79687:405;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;80297:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;79145:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62961:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;79107:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44321:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;79444:65;;;;;;;;;;;;;:::i;:::-;;45450:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47650:792;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61414:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;77494:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23108:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;80108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25973:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;79375:61;;;;;;;;;;;;;:::i;:::-;;79243:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45676:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25325:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;80202:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45172:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;79517:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62011:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45866:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;77283:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46251:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;79182:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44968:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44758:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44506:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62238:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62478:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26286:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21221:98;21274:7;21301:10;21294:17;;21221:98;:::o;61018:230::-;61104:7;61151:1;61132:21;;:7;:21;;;61124:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;61218:9;:13;61228:2;61218:13;;;;;;;;;;;:22;61232:7;61218:22;;;;;;;;;;;;;;;;61211:29;;61018:230;;;;:::o;60041:310::-;60143:4;60195:26;60180:41;;;:11;:41;;;;:110;;;;60253:37;60238:52;;;:11;:52;;;;60180:110;:163;;;;60307:36;60331:11;60307:23;:36::i;:::-;60180:163;60160:183;;60041:310;;;:::o;80822:101::-;80875:13;80904:8;:13;80913:3;80904:13;;;;;;;;;;;80897:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;80822:101;;;:::o;46711:671::-;46806:1;46787:7;:16;46795:7;46787:16;;;;;;;;;;;;;;;;:20;46779:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;46863:15;46881:19;46892:7;46881:10;:19::i;:::-;46863:37;;46932:1;46921:7;:12;46913:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47194:7;47176:14;;:25;;;;;;;:::i;:::-;;;;;;;;47259:7;47237:9;:18;47247:7;47237:18;;;;;;;;;;;;;;;;:29;;;;;;;;;;;47290:35;47308:7;47317;47290:17;:35::i;:::-;47341:33;47357:7;47366;47341:33;;;;;;;:::i;:::-;;;;;;;;46768:614;46711:671;:::o;79687:405::-;79795:11;;;;;;;;;;;79787:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;79836:10;79843:2;79836:6;:10::i;:::-;79828:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;79892:1;79874:15;79886:2;79874:11;:15::i;:::-;:19;;79866:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;79944:6;79937:4;;:13;;;;:::i;:::-;79924:9;:26;;79916:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;80011:1;80001:6;79983:15;79995:2;79983:11;:15::i;:::-;:24;;;;:::i;:::-;:29;;79975:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;80041:33;80047:10;80059:2;80063:6;80041:33;;;;;;;;;;;;:5;:33::i;:::-;79687:405;;:::o;80297:191::-;25211:13;:11;:13::i;:::-;80446:34:::1;80457:2;80461:3;80466:7;80475:4;80446:10;:34::i;:::-;80297:191:::0;;;;:::o;79145:30::-;;;;:::o;62961:438::-;63202:12;:10;:12::i;:::-;63194:20;;:4;:20;;;:60;;;;63218:36;63235:4;63241:12;:10;:12::i;:::-;63218:16;:36::i;:::-;63194:60;63172:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;63339:52;63362:4;63368:2;63372:3;63377:7;63386:4;63339:22;:52::i;:::-;62961:438;;;;;:::o;79107:31::-;;;;;;;;;;;;;:::o;44321:91::-;44365:7;44392:12;;44385:19;;44321:91;:::o;79444:65::-;25211:13;:11;:13::i;:::-;79491:10:::1;:8;:10::i;:::-;79444:65::o:0;45450:135::-;45520:7;45547:14;:21;45562:5;45547:21;;;;;;;;;;;;;;;:30;45569:7;45547:30;;;;;;;;;;;;;;;;45540:37;;45450:135;;;;:::o;47650:792::-;47751:1;47732:7;:16;47740:7;47732:16;;;;;;;;;;;;;;;;:20;47724:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;47808:15;47826:26;47837:5;47844:7;47826:10;:26::i;:::-;47808:44;;47884:1;47873:7;:12;47865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48218:7;48188:19;:26;48208:5;48188:26;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;48295:7;48261:14;:21;48276:5;48261:21;;;;;;;;;;;;;;;:30;48283:7;48261:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;48326:47;48349:5;48356:7;48365;48326:22;:47::i;:::-;48410:5;48389:45;;;48417:7;48426;48389:45;;;;;;;:::i;:::-;;;;;;;;47713:729;47650:792;;:::o;61414:524::-;61570:16;61631:3;:10;61612:8;:15;:29;61604:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;61700:30;61747:8;:15;61733:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61700:63;;61781:9;61776:122;61800:8;:15;61796:1;:19;61776:122;;;61856:30;61866:8;61875:1;61866:11;;;;;;;;:::i;:::-;;;;;;;;61879:3;61883:1;61879:6;;;;;;;;:::i;:::-;;;;;;;;61856:9;:30::i;:::-;61837:13;61851:1;61837:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;61817:3;;;;:::i;:::-;;;61776:122;;;;61917:13;61910:20;;;61414:524;;;;:::o;77494:122::-;77551:4;77607:1;77575:29;77601:2;77575:25;:29::i;:::-;:33;77568:40;;77494:122;;;:::o;23108:86::-;23155:4;23179:7;;;;;;;;;;;23172:14;;23108:86;:::o;80108:::-;25211:13;:11;:13::i;:::-;80179:9:::1;80165:11;;:23;;;;;;;;;;;;;;;;;;80108:86:::0;:::o;25973:158::-;25211:13;:11;:13::i;:::-;26053:30:::1;26080:1;26053:18;:30::i;:::-;26115:7;26102:9;:20;;26094:29;;;::::0;::::1;;25973:158:::0;:::o;79375:61::-;25211:13;:11;:13::i;:::-;79420:8:::1;:6;:8::i;:::-;79375:61::o:0;79243:124::-;25211:13;:11;:13::i;:::-;79331:4:::1;79315:8;:13;79324:3;79315:13;;;;;;;;;;;:20;;;;;;:::i;:::-;;79357:3;79347:14;79351:4;79347:14;;;;;;:::i;:::-;;;;;;;;79243:124:::0;;:::o;45676:100::-;45727:7;45754;45762:5;45754:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45747:21;;45676:100;;;:::o;25325:87::-;25371:7;25398:6;;;;;;;;;;;25391:13;;25325:87;:::o;80202:79::-;25211:13;:11;:13::i;:::-;80268:5:::1;80261:4;:12;;;;80202:79:::0;:::o;45172:109::-;45228:7;45255:9;:18;45265:7;45255:18;;;;;;;;;;;;;;;;45248:25;;45172:109;;;:::o;79517:136::-;25211:13;:11;:13::i;:::-;79612:33:::1;79618:10;79630:2;79634:6;79612:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;79517:136:::0;;:::o;62011:155::-;62106:52;62125:12;:10;:12::i;:::-;62139:8;62149;62106:18;:52::i;:::-;62011:155;;:::o;45866:225::-;45924:7;45944:21;45992:15;:13;:15::i;:::-;45968:21;:39;;;;:::i;:::-;45944:63;;46025:58;46041:7;46050:13;46065:17;46074:7;46065:8;:17::i;:::-;46025:15;:58::i;:::-;46018:65;;;45866:225;;;:::o;77283:113::-;77345:7;77372:12;:16;77385:2;77372:16;;;;;;;;;;;;77365:23;;77283:113;;;:::o;46251:260::-;46323:7;46343:21;46400:20;46414:5;46400:13;:20::i;:::-;46367:5;:15;;;46391:4;46367:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;46343:77;;46438:65;46454:7;46463:13;46478:24;46487:5;46494:7;46478:8;:24::i;:::-;46438:15;:65::i;:::-;46431:72;;;46251:260;;;;:::o;79182:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44968:105::-;45022:7;45049;:16;45057:7;45049:16;;;;;;;;;;;;;;;;45042:23;;44968:105;;;:::o;44758:119::-;44816:7;44843:19;:26;44863:5;44843:26;;;;;;;;;;;;;;;;44836:33;;44758:119;;;:::o;44506:95::-;44552:7;44579:14;;44572:21;;44506:95;:::o;62238:168::-;62337:4;62361:18;:27;62380:7;62361:27;;;;;;;;;;;;;;;:37;62389:8;62361:37;;;;;;;;;;;;;;;;;;;;;;;;;62354:44;;62238:168;;;;:::o;62478:406::-;62694:12;:10;:12::i;:::-;62686:20;;:4;:20;;;:60;;;;62710:36;62727:4;62733:12;:10;:12::i;:::-;62710:16;:36::i;:::-;62686:60;62664:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;62831:45;62849:4;62855:2;62859;62863:6;62871:4;62831:17;:45::i;:::-;62478:406;;;;;:::o;26286:249::-;25211:13;:11;:13::i;:::-;26403:1:::1;26383:22;;:8;:22;;::::0;26375:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26459:28;26478:8;26459:18;:28::i;:::-;26519:7;26506:9;:20;;26498:29;;;::::0;::::1;;26286:249:::0;:::o;51322:157::-;51407:4;51446:25;51431:40;;;:11;:40;;;;51424:47;;51322:157;;;:::o;29387:317::-;29502:6;29477:21;:31;;29469:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29556:12;29574:9;:14;;29596:6;29574:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29555:52;;;29626:7;29618:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;29458:246;29387:317;;:::o;67659:729::-;67826:1;67812:16;;:2;:16;;;67804:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;67879:16;67898:12;:10;:12::i;:::-;67879:31;;67921:20;67944:21;67962:2;67944:17;:21::i;:::-;67921:44;;67976:24;68003:25;68021:6;68003:17;:25::i;:::-;67976:52;;68041:66;68062:8;68080:1;68084:2;68088:3;68093:7;68102:4;68041:20;:66::i;:::-;68141:6;68120:9;:13;68130:2;68120:13;;;;;;;;;;;:17;68134:2;68120:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;68200:2;68163:52;;68196:1;68163:52;;68178:8;68163:52;;;68204:2;68208:6;68163:52;;;;;;;:::i;:::-;;;;;;;;68228:65;68248:8;68266:1;68270:2;68274:3;68279:7;68288:4;68228:19;:65::i;:::-;68306:74;68337:8;68355:1;68359:2;68363;68367:6;68375:4;68306:30;:74::i;:::-;67793:595;;;67659:729;;;;:::o;25490:132::-;25565:12;:10;:12::i;:::-;25554:23;;:7;:5;:7::i;:::-;:23;;;25546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25490:132::o;68791:813::-;68983:1;68969:16;;:2;:16;;;68961:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;69056:7;:14;69042:3;:10;:28;69034:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;69128:16;69147:12;:10;:12::i;:::-;69128:31;;69172:66;69193:8;69211:1;69215:2;69219:3;69224:7;69233:4;69172:20;:66::i;:::-;69256:9;69251:103;69275:3;:10;69271:1;:14;69251:103;;;69332:7;69340:1;69332:10;;;;;;;;:::i;:::-;;;;;;;;69307:9;:17;69317:3;69321:1;69317:6;;;;;;;;:::i;:::-;;;;;;;;69307:17;;;;;;;;;;;:21;69325:2;69307:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;69287:3;;;;;:::i;:::-;;;;69251:103;;;;69407:2;69371:53;;69403:1;69371:53;;69385:8;69371:53;;;69411:3;69416:7;69371:53;;;;;;;:::i;:::-;;;;;;;;69437:65;69457:8;69475:1;69479:2;69483:3;69488:7;69497:4;69437:19;:65::i;:::-;69515:81;69551:8;69569:1;69573:2;69577:3;69582:7;69591:4;69515:35;:81::i;:::-;68950:654;68791:813;;;;:::o;65195:1146::-;65422:7;:14;65408:3;:10;:28;65400:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;65514:1;65500:16;;:2;:16;;;65492:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;65571:16;65590:12;:10;:12::i;:::-;65571:31;;65615:60;65636:8;65646:4;65652:2;65656:3;65661:7;65670:4;65615:20;:60::i;:::-;65693:9;65688:421;65712:3;:10;65708:1;:14;65688:421;;;65744:10;65757:3;65761:1;65757:6;;;;;;;;:::i;:::-;;;;;;;;65744:19;;65778:14;65795:7;65803:1;65795:10;;;;;;;;:::i;:::-;;;;;;;;65778:27;;65822:19;65844:9;:13;65854:2;65844:13;;;;;;;;;;;:19;65858:4;65844:19;;;;;;;;;;;;;;;;65822:41;;65901:6;65886:11;:21;;65878:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;66034:6;66020:11;:20;65998:9;:13;66008:2;65998:13;;;;;;;;;;;:19;66012:4;65998:19;;;;;;;;;;;;;;;:42;;;;66091:6;66070:9;:13;66080:2;66070:13;;;;;;;;;;;:17;66084:2;66070:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;65729:380;;;65724:3;;;;:::i;:::-;;;65688:421;;;;66156:2;66126:47;;66150:4;66126:47;;66140:8;66126:47;;;66160:3;66165:7;66126:47;;;;;;;:::i;:::-;;;;;;;;66186:59;66206:8;66216:4;66222:2;66226:3;66231:7;66240:4;66186:19;:59::i;:::-;66258:75;66294:8;66304:4;66310:2;66314:3;66319:7;66328:4;66258:35;:75::i;:::-;65389:952;65195:1146;;;;;:::o;23963:120::-;22972:16;:14;:16::i;:::-;24032:5:::1;24022:7;;:15;;;;;;;;;;;;;;;;;;24053:22;24062:12;:10;:12::i;:::-;24053:22;;;;;;:::i;:::-;;;;;;;;23963:120::o:0;37035:211::-;37152:86;37172:5;37202:23;;;37227:2;37231:5;37179:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37152:19;:86::i;:::-;37035:211;;;:::o;26695:191::-;26769:16;26788:6;;;;;;;;;;;26769:25;;26814:8;26805:6;;:17;;;;;;;;;;;;;;;;;;26869:8;26838:40;;26859:8;26838:40;;;;;;;;;;;;26758:128;26695:191;:::o;23704:118::-;22713:19;:17;:19::i;:::-;23774:4:::1;23764:7;;:14;;;;;;;;;;;;;;;;;;23794:20;23801:12;:10;:12::i;:::-;23794:20;;;;;;:::i;:::-;;;;;;;;23704:118::o:0;72072:331::-;72227:8;72218:17;;:5;:17;;;72210:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;72330:8;72292:18;:25;72311:5;72292:25;;;;;;;;;;;;;;;:35;72318:8;72292:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;72376:8;72354:41;;72369:5;72354:41;;;72386:8;72354:41;;;;;;:::i;:::-;;;;;;;;72072:331;;;:::o;48620:248::-;48766:7;48845:15;48830:12;;48810:7;:16;48818:7;48810:16;;;;;;;;;;;;;;;;48794:13;:32;;;;:::i;:::-;48793:49;;;;:::i;:::-;:67;;;;:::i;:::-;48786:74;;48620:248;;;;;:::o;63863:974::-;64065:1;64051:16;;:2;:16;;;64043:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;64122:16;64141:12;:10;:12::i;:::-;64122:31;;64164:20;64187:21;64205:2;64187:17;:21::i;:::-;64164:44;;64219:24;64246:25;64264:6;64246:17;:25::i;:::-;64219:52;;64284:60;64305:8;64315:4;64321:2;64325:3;64330:7;64339:4;64284:20;:60::i;:::-;64357:19;64379:9;:13;64389:2;64379:13;;;;;;;;;;;:19;64393:4;64379:19;;;;;;;;;;;;;;;;64357:41;;64432:6;64417:11;:21;;64409:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;64557:6;64543:11;:20;64521:9;:13;64531:2;64521:13;;;;;;;;;;;:19;64535:4;64521:19;;;;;;;;;;;;;;;:42;;;;64606:6;64585:9;:13;64595:2;64585:13;;;;;;;;;;;:17;64599:2;64585:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;64661:2;64630:46;;64655:4;64630:46;;64645:8;64630:46;;;64665:2;64669:6;64630:46;;;;;;;:::i;:::-;;;;;;;;64689:59;64709:8;64719:4;64725:2;64729:3;64734:7;64743:4;64689:19;:59::i;:::-;64761:68;64792:8;64802:4;64808:2;64812;64816:6;64824:4;64761:30;:68::i;:::-;64032:805;;;;63863:974;;;;;:::o;76338:198::-;76404:16;76433:22;76472:1;76458:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76433:41;;76496:7;76485:5;76491:1;76485:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;76523:5;76516:12;;;76338:198;;;:::o;80496:314::-;22713:19;:17;:19::i;:::-;80736:66:::1;80763:8;80773:4;80779:2;80783:3;80788:7;80797:4;80736:26;:66::i;:::-;80496:314:::0;;;;;;:::o;74537:220::-;;;;;;;:::o;74765:744::-;74980:15;:2;:13;;;:15::i;:::-;74976:526;;;75033:2;75016:38;;;75055:8;75065:4;75071:2;75075:6;75083:4;75016:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;75012:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;75364:6;75357:14;;;;;;;;;;;:::i;:::-;;;;;;;;75012:479;;;75413:62;;;;;;;;;;:::i;:::-;;;;;;;;75012:479;75150:43;;;75138:55;;;:8;:55;;;;75134:154;;75218:50;;;;;;;;;;:::i;:::-;;;;;;;;75134:154;75089:214;74976:526;74765:744;;;;;;:::o;75517:813::-;75757:15;:2;:13;;;:15::i;:::-;75753:570;;;75810:2;75793:43;;;75837:8;75847:4;75853:3;75858:7;75867:4;75793:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;75789:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;76185:6;76178:14;;;;;;;;;;;:::i;:::-;;;;;;;;75789:523;;;76234:62;;;;;;;;;;:::i;:::-;;;;;;;;75789:523;75966:48;;;75954:60;;;:8;:60;;;;75950:159;;76039:50;;;;;;;;;;:::i;:::-;;;;;;;;75950:159;75873:251;75753:570;75517:813;;;;;;:::o;23452:108::-;23519:8;:6;:8::i;:::-;23511:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;23452:108::o;40102:716::-;40526:23;40552:69;40580:4;40552:69;;;;;;;;;;;;;;;;;40560:5;40552:27;;;;:69;;;;;:::i;:::-;40526:95;;40656:1;40636:10;:17;:21;40632:179;;;40733:10;40722:30;;;;;;;;;;;;:::i;:::-;40714:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40632:179;40172:646;40102:716;;:::o;23267:108::-;23338:8;:6;:8::i;:::-;23337:9;23329:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23267:108::o;77691:931::-;77930:66;77957:8;77967:4;77973:2;77977:3;77982:7;77991:4;77930:26;:66::i;:::-;78029:1;78013:18;;:4;:18;;;78009:160;;78053:9;78048:110;78072:3;:10;78068:1;:14;78048:110;;;78132:7;78140:1;78132:10;;;;;;;;:::i;:::-;;;;;;;;78108:12;:20;78121:3;78125:1;78121:6;;;;;;;;:::i;:::-;;;;;;;;78108:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;78084:3;;;;:::i;:::-;;;78048:110;;;;78009:160;78199:1;78185:16;;:2;:16;;;78181:434;;78223:9;78218:386;78242:3;:10;78238:1;:14;78218:386;;;78278:10;78291:3;78295:1;78291:6;;;;;;;;:::i;:::-;;;;;;;;78278:19;;78316:14;78333:7;78341:1;78333:10;;;;;;;;:::i;:::-;;;;;;;;78316:27;;78362:14;78379:12;:16;78392:2;78379:16;;;;;;;;;;;;78362:33;;78432:6;78422;:16;;78414:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;78563:6;78554;:15;78535:12;:16;78548:2;78535:16;;;;;;;;;;;:34;;;;78259:345;;;78254:3;;;;:::i;:::-;;;78218:386;;;;78181:434;77691:931;;;;;;:::o;28126:326::-;28186:4;28443:1;28421:7;:19;;;:23;28414:30;;28126:326;;;:::o;30883:229::-;31020:12;31052:52;31074:6;31082:4;31088:1;31091:12;31052:21;:52::i;:::-;31045:59;;30883:229;;;;;:::o;73361:221::-;;;;;;;:::o;32003:455::-;32173:12;32231:5;32206:21;:30;;32198:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32291:12;32305:23;32332:6;:11;;32351:5;32358:4;32332:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32290:73;;;;32381:69;32408:6;32416:7;32425:10;32437:12;32381:26;:69::i;:::-;32374:76;;;;32003:455;;;;;;:::o;34576:644::-;34761:12;34790:7;34786:427;;;34839:1;34818:10;:17;:22;34814:290;;35036:18;35047:6;35036:10;:18::i;:::-;35028:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34814:290;35125:10;35118:17;;;;34786:427;35168:33;35176:10;35188:12;35168:7;:33::i;:::-;34576:644;;;;;;;:::o;35762:552::-;35943:1;35923:10;:17;:21;35919:388;;;36155:10;36149:17;36212:15;36199:10;36195:2;36191:19;36184:44;35919:388;36282:12;36275: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:77::-;402:7;431:5;420:16;;365:77;;;:::o;448:118::-;535:24;553:5;535:24;:::i;:::-;530:3;523:37;448:118;;:::o;572:332::-;693:4;731:2;720:9;716:18;708:26;;744:71;812:1;801:9;797:17;788:6;744:71;:::i;:::-;825:72;893:2;882:9;878:18;869:6;825:72;:::i;:::-;572:332;;;;;:::o;910:75::-;943:6;976:2;970:9;960:19;;910:75;:::o;991:117::-;1100:1;1097;1090:12;1114:117;1223:1;1220;1213:12;1237:122;1310:24;1328:5;1310:24;:::i;:::-;1303:5;1300:35;1290:63;;1349:1;1346;1339:12;1290:63;1237:122;:::o;1365:139::-;1411:5;1449:6;1436:20;1427:29;;1465:33;1492:5;1465:33;:::i;:::-;1365:139;;;;:::o;1510:122::-;1583:24;1601:5;1583:24;:::i;:::-;1576:5;1573:35;1563:63;;1622:1;1619;1612:12;1563:63;1510:122;:::o;1638:139::-;1684:5;1722:6;1709:20;1700:29;;1738:33;1765:5;1738:33;:::i;:::-;1638:139;;;;:::o;1783:474::-;1851:6;1859;1908:2;1896:9;1887:7;1883:23;1879:32;1876:119;;;1914:79;;:::i;:::-;1876:119;2034:1;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2005:117;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1783:474;;;;;:::o;2263:222::-;2356:4;2394:2;2383:9;2379:18;2371:26;;2407:71;2475:1;2464:9;2460:17;2451:6;2407:71;:::i;:::-;2263:222;;;;:::o;2491:149::-;2527:7;2567:66;2560:5;2556:78;2545:89;;2491:149;;;:::o;2646:120::-;2718:23;2735:5;2718:23;:::i;:::-;2711:5;2708:34;2698:62;;2756:1;2753;2746:12;2698:62;2646:120;:::o;2772:137::-;2817:5;2855:6;2842:20;2833:29;;2871:32;2897:5;2871:32;:::i;:::-;2772:137;;;;:::o;2915:327::-;2973:6;3022:2;3010:9;3001:7;2997:23;2993:32;2990:119;;;3028:79;;:::i;:::-;2990:119;3148:1;3173:52;3217:7;3208:6;3197:9;3193:22;3173:52;:::i;:::-;3163:62;;3119:116;2915:327;;;;:::o;3248:90::-;3282:7;3325:5;3318:13;3311:21;3300:32;;3248:90;;;:::o;3344:109::-;3425:21;3440:5;3425:21;:::i;:::-;3420:3;3413:34;3344:109;;:::o;3459:210::-;3546:4;3584:2;3573:9;3569:18;3561:26;;3597:65;3659:1;3648:9;3644:17;3635:6;3597:65;:::i;:::-;3459:210;;;;:::o;3675:329::-;3734:6;3783:2;3771:9;3762:7;3758:23;3754:32;3751:119;;;3789:79;;:::i;:::-;3751:119;3909:1;3934:53;3979:7;3970:6;3959:9;3955:22;3934:53;:::i;:::-;3924:63;;3880:117;3675:329;;;;:::o;4010:99::-;4062:6;4096:5;4090:12;4080:22;;4010:99;;;:::o;4115:169::-;4199:11;4233:6;4228:3;4221:19;4273:4;4268:3;4264:14;4249:29;;4115:169;;;;:::o;4290:246::-;4371:1;4381:113;4395:6;4392:1;4389:13;4381:113;;;4480:1;4475:3;4471:11;4465:18;4461:1;4456:3;4452:11;4445:39;4417:2;4414:1;4410:10;4405:15;;4381:113;;;4528:1;4519:6;4514:3;4510:16;4503:27;4352:184;4290:246;;;:::o;4542:102::-;4583:6;4634:2;4630:7;4625:2;4618:5;4614:14;4610:28;4600:38;;4542:102;;;:::o;4650:377::-;4738:3;4766:39;4799:5;4766:39;:::i;:::-;4821:71;4885:6;4880:3;4821:71;:::i;:::-;4814:78;;4901:65;4959:6;4954:3;4947:4;4940:5;4936:16;4901:65;:::i;:::-;4991:29;5013:6;4991:29;:::i;:::-;4986:3;4982:39;4975:46;;4742:285;4650:377;;;;:::o;5033:313::-;5146:4;5184:2;5173:9;5169:18;5161:26;;5233:9;5227:4;5223:20;5219:1;5208:9;5204:17;5197:47;5261:78;5334:4;5325:6;5261:78;:::i;:::-;5253:86;;5033:313;;;;:::o;5352:104::-;5397:7;5426:24;5444:5;5426:24;:::i;:::-;5415:35;;5352:104;;;:::o;5462:138::-;5543:32;5569:5;5543:32;:::i;:::-;5536:5;5533:43;5523:71;;5590:1;5587;5580:12;5523:71;5462:138;:::o;5606:155::-;5660:5;5698:6;5685:20;5676:29;;5714:41;5749:5;5714:41;:::i;:::-;5606:155;;;;:::o;5767:345::-;5834:6;5883:2;5871:9;5862:7;5858:23;5854:32;5851:119;;;5889:79;;:::i;:::-;5851:119;6009:1;6034:61;6087:7;6078:6;6067:9;6063:22;6034:61;:::i;:::-;6024:71;;5980:125;5767:345;;;;:::o;6118:474::-;6186:6;6194;6243:2;6231:9;6222:7;6218:23;6214:32;6211:119;;;6249:79;;:::i;:::-;6211:119;6369:1;6394:53;6439:7;6430:6;6419:9;6415:22;6394:53;:::i;:::-;6384:63;;6340:117;6496:2;6522:53;6567:7;6558:6;6547:9;6543:22;6522:53;:::i;:::-;6512:63;;6467:118;6118:474;;;;;:::o;6598:117::-;6707:1;6704;6697:12;6721:180;6769:77;6766:1;6759:88;6866:4;6863:1;6856:15;6890:4;6887:1;6880:15;6907:281;6990:27;7012:4;6990:27;:::i;:::-;6982:6;6978:40;7120:6;7108:10;7105:22;7084:18;7072:10;7069:34;7066:62;7063:88;;;7131:18;;:::i;:::-;7063:88;7171:10;7167:2;7160:22;6950:238;6907:281;;:::o;7194:129::-;7228:6;7255:20;;:::i;:::-;7245:30;;7284:33;7312:4;7304:6;7284:33;:::i;:::-;7194:129;;;:::o;7329:311::-;7406:4;7496:18;7488:6;7485:30;7482:56;;;7518:18;;:::i;:::-;7482:56;7568:4;7560:6;7556:17;7548:25;;7628:4;7622;7618:15;7610:23;;7329:311;;;:::o;7646:117::-;7755:1;7752;7745:12;7786:710;7882:5;7907:81;7923:64;7980:6;7923:64;:::i;:::-;7907:81;:::i;:::-;7898:90;;8008:5;8037:6;8030:5;8023:21;8071:4;8064:5;8060:16;8053:23;;8124:4;8116:6;8112:17;8104:6;8100:30;8153:3;8145:6;8142:15;8139:122;;;8172:79;;:::i;:::-;8139:122;8287:6;8270:220;8304:6;8299:3;8296:15;8270:220;;;8379:3;8408:37;8441:3;8429:10;8408:37;:::i;:::-;8403:3;8396:50;8475:4;8470:3;8466:14;8459:21;;8346:144;8330:4;8325:3;8321:14;8314:21;;8270:220;;;8274:21;7888:608;;7786:710;;;;;:::o;8519:370::-;8590:5;8639:3;8632:4;8624:6;8620:17;8616:27;8606:122;;8647:79;;:::i;:::-;8606:122;8764:6;8751:20;8789:94;8879:3;8871:6;8864:4;8856:6;8852:17;8789:94;:::i;:::-;8780:103;;8596:293;8519:370;;;;:::o;8895:117::-;9004:1;9001;8994:12;9018:307;9079:4;9169:18;9161:6;9158:30;9155:56;;;9191:18;;:::i;:::-;9155:56;9229:29;9251:6;9229:29;:::i;:::-;9221:37;;9313:4;9307;9303:15;9295:23;;9018:307;;;:::o;9331:146::-;9428:6;9423:3;9418;9405:30;9469:1;9460:6;9455:3;9451:16;9444:27;9331:146;;;:::o;9483:423::-;9560:5;9585:65;9601:48;9642:6;9601:48;:::i;:::-;9585:65;:::i;:::-;9576:74;;9673:6;9666:5;9659:21;9711:4;9704:5;9700:16;9749:3;9740:6;9735:3;9731:16;9728:25;9725:112;;;9756:79;;:::i;:::-;9725:112;9846:54;9893:6;9888:3;9883;9846:54;:::i;:::-;9566:340;9483:423;;;;;:::o;9925:338::-;9980:5;10029:3;10022:4;10014:6;10010:17;10006:27;9996:122;;10037:79;;:::i;:::-;9996:122;10154:6;10141:20;10179:78;10253:3;10245:6;10238:4;10230:6;10226:17;10179:78;:::i;:::-;10170:87;;9986:277;9925:338;;;;:::o;10269:1363::-;10414:6;10422;10430;10438;10487:3;10475:9;10466:7;10462:23;10458:33;10455:120;;;10494:79;;:::i;:::-;10455:120;10614:1;10639:53;10684:7;10675:6;10664:9;10660:22;10639:53;:::i;:::-;10629:63;;10585:117;10769:2;10758:9;10754:18;10741:32;10800:18;10792:6;10789:30;10786:117;;;10822:79;;:::i;:::-;10786:117;10927:78;10997:7;10988:6;10977:9;10973:22;10927:78;:::i;:::-;10917:88;;10712:303;11082:2;11071:9;11067:18;11054:32;11113:18;11105:6;11102:30;11099:117;;;11135:79;;:::i;:::-;11099:117;11240:78;11310:7;11301:6;11290:9;11286:22;11240:78;:::i;:::-;11230:88;;11025:303;11395:2;11384:9;11380:18;11367:32;11426:18;11418:6;11415:30;11412:117;;;11448:79;;:::i;:::-;11412:117;11553:62;11607:7;11598:6;11587:9;11583:22;11553:62;:::i;:::-;11543:72;;11338:287;10269:1363;;;;;;;:::o;11638:1509::-;11792:6;11800;11808;11816;11824;11873:3;11861:9;11852:7;11848:23;11844:33;11841:120;;;11880:79;;:::i;:::-;11841:120;12000:1;12025:53;12070:7;12061:6;12050:9;12046:22;12025:53;:::i;:::-;12015:63;;11971:117;12127:2;12153:53;12198:7;12189:6;12178:9;12174:22;12153:53;:::i;:::-;12143:63;;12098:118;12283:2;12272:9;12268:18;12255:32;12314:18;12306:6;12303:30;12300:117;;;12336:79;;:::i;:::-;12300:117;12441:78;12511:7;12502:6;12491:9;12487:22;12441:78;:::i;:::-;12431:88;;12226:303;12596:2;12585:9;12581:18;12568:32;12627:18;12619:6;12616:30;12613:117;;;12649:79;;:::i;:::-;12613:117;12754:78;12824:7;12815:6;12804:9;12800:22;12754:78;:::i;:::-;12744:88;;12539:303;12909:3;12898:9;12894:19;12881:33;12941:18;12933:6;12930:30;12927:117;;;12963:79;;:::i;:::-;12927:117;13068:62;13122:7;13113:6;13102:9;13098:22;13068:62;:::i;:::-;13058:72;;12852:288;11638:1509;;;;;;;;:::o;13153:110::-;13204:7;13233:24;13251:5;13233:24;:::i;:::-;13222:35;;13153:110;;;:::o;13269:150::-;13356:38;13388:5;13356:38;:::i;:::-;13349:5;13346:49;13336:77;;13409:1;13406;13399:12;13336:77;13269:150;:::o;13425:167::-;13485:5;13523:6;13510:20;13501:29;;13539:47;13580:5;13539:47;:::i;:::-;13425:167;;;;:::o;13598:502::-;13680:6;13688;13737:2;13725:9;13716:7;13712:23;13708:32;13705:119;;;13743:79;;:::i;:::-;13705:119;13863:1;13888:67;13947:7;13938:6;13927:9;13923:22;13888:67;:::i;:::-;13878:77;;13834:131;14004:2;14030:53;14075:7;14066:6;14055:9;14051:22;14030:53;:::i;:::-;14020:63;;13975:118;13598:502;;;;;:::o;14106:311::-;14183:4;14273:18;14265:6;14262:30;14259:56;;;14295:18;;:::i;:::-;14259:56;14345:4;14337:6;14333:17;14325:25;;14405:4;14399;14395:15;14387:23;;14106:311;;;:::o;14440:710::-;14536:5;14561:81;14577:64;14634:6;14577:64;:::i;:::-;14561:81;:::i;:::-;14552:90;;14662:5;14691:6;14684:5;14677:21;14725:4;14718:5;14714:16;14707:23;;14778:4;14770:6;14766:17;14758:6;14754:30;14807:3;14799:6;14796:15;14793:122;;;14826:79;;:::i;:::-;14793:122;14941:6;14924:220;14958:6;14953:3;14950:15;14924:220;;;15033:3;15062:37;15095:3;15083:10;15062:37;:::i;:::-;15057:3;15050:50;15129:4;15124:3;15120:14;15113:21;;15000:144;14984:4;14979:3;14975:14;14968:21;;14924:220;;;14928:21;14542:608;;14440:710;;;;;:::o;15173:370::-;15244:5;15293:3;15286:4;15278:6;15274:17;15270:27;15260:122;;15301:79;;:::i;:::-;15260:122;15418:6;15405:20;15443:94;15533:3;15525:6;15518:4;15510:6;15506:17;15443:94;:::i;:::-;15434:103;;15250:293;15173:370;;;;:::o;15549:894::-;15667:6;15675;15724:2;15712:9;15703:7;15699:23;15695:32;15692:119;;;15730:79;;:::i;:::-;15692:119;15878:1;15867:9;15863:17;15850:31;15908:18;15900:6;15897:30;15894:117;;;15930:79;;:::i;:::-;15894:117;16035:78;16105:7;16096:6;16085:9;16081:22;16035:78;:::i;:::-;16025:88;;15821:302;16190:2;16179:9;16175:18;16162:32;16221:18;16213:6;16210:30;16207:117;;;16243:79;;:::i;:::-;16207:117;16348:78;16418:7;16409:6;16398:9;16394:22;16348:78;:::i;:::-;16338:88;;16133:303;15549:894;;;;;:::o;16449:114::-;16516:6;16550:5;16544:12;16534:22;;16449:114;;;:::o;16569:184::-;16668:11;16702:6;16697:3;16690:19;16742:4;16737:3;16733:14;16718:29;;16569:184;;;;:::o;16759:132::-;16826:4;16849:3;16841:11;;16879:4;16874:3;16870:14;16862:22;;16759:132;;;:::o;16897:108::-;16974:24;16992:5;16974:24;:::i;:::-;16969:3;16962:37;16897:108;;:::o;17011:179::-;17080:10;17101:46;17143:3;17135:6;17101:46;:::i;:::-;17179:4;17174:3;17170:14;17156:28;;17011:179;;;;:::o;17196:113::-;17266:4;17298;17293:3;17289:14;17281:22;;17196:113;;;:::o;17345:732::-;17464:3;17493:54;17541:5;17493:54;:::i;:::-;17563:86;17642:6;17637:3;17563:86;:::i;:::-;17556:93;;17673:56;17723:5;17673:56;:::i;:::-;17752:7;17783:1;17768:284;17793:6;17790:1;17787:13;17768:284;;;17869:6;17863:13;17896:63;17955:3;17940:13;17896:63;:::i;:::-;17889:70;;17982:60;18035:6;17982:60;:::i;:::-;17972:70;;17828:224;17815:1;17812;17808:9;17803:14;;17768:284;;;17772:14;18068:3;18061:10;;17469:608;;;17345:732;;;;:::o;18083:373::-;18226:4;18264:2;18253:9;18249:18;18241:26;;18313:9;18307:4;18303:20;18299:1;18288:9;18284:17;18277:47;18341:108;18444:4;18435:6;18341:108;:::i;:::-;18333:116;;18083:373;;;;:::o;18462:116::-;18532:21;18547:5;18532:21;:::i;:::-;18525:5;18522:32;18512:60;;18568:1;18565;18558:12;18512:60;18462:116;:::o;18584:133::-;18627:5;18665:6;18652:20;18643:29;;18681:30;18705:5;18681:30;:::i;:::-;18584:133;;;;:::o;18723:323::-;18779:6;18828:2;18816:9;18807:7;18803:23;18799:32;18796:119;;;18834:79;;:::i;:::-;18796:119;18954:1;18979:50;19021:7;19012:6;19001:9;18997:22;18979:50;:::i;:::-;18969:60;;18925:114;18723:323;;;;:::o;19052:308::-;19114:4;19204:18;19196:6;19193:30;19190:56;;;19226:18;;:::i;:::-;19190:56;19264:29;19286:6;19264:29;:::i;:::-;19256:37;;19348:4;19342;19338:15;19330:23;;19052:308;;;:::o;19366:425::-;19444:5;19469:66;19485:49;19527:6;19485:49;:::i;:::-;19469:66;:::i;:::-;19460:75;;19558:6;19551:5;19544:21;19596:4;19589:5;19585:16;19634:3;19625:6;19620:3;19616:16;19613:25;19610:112;;;19641:79;;:::i;:::-;19610:112;19731:54;19778:6;19773:3;19768;19731:54;:::i;:::-;19450:341;19366:425;;;;;:::o;19811:340::-;19867:5;19916:3;19909:4;19901:6;19897:17;19893:27;19883:122;;19924:79;;:::i;:::-;19883:122;20041:6;20028:20;20066:79;20141:3;20133:6;20126:4;20118:6;20114:17;20066:79;:::i;:::-;20057:88;;19873:278;19811:340;;;;:::o;20157:654::-;20235:6;20243;20292:2;20280:9;20271:7;20267:23;20263:32;20260:119;;;20298:79;;:::i;:::-;20260:119;20418:1;20443:53;20488:7;20479:6;20468:9;20464:22;20443:53;:::i;:::-;20433:63;;20389:117;20573:2;20562:9;20558:18;20545:32;20604:18;20596:6;20593:30;20590:117;;;20626:79;;:::i;:::-;20590:117;20731:63;20786:7;20777:6;20766:9;20762:22;20731:63;:::i;:::-;20721:73;;20516:288;20157:654;;;;;:::o;20817:222::-;20910:4;20948:2;20937:9;20933:18;20925:26;;20961:71;21029:1;21018:9;21014:17;21005:6;20961:71;:::i;:::-;20817:222;;;;:::o;21045:329::-;21104:6;21153:2;21141:9;21132:7;21128:23;21124:32;21121:119;;;21159:79;;:::i;:::-;21121:119;21279:1;21304:53;21349:7;21340:6;21329:9;21325:22;21304:53;:::i;:::-;21294:63;;21250:117;21045:329;;;;:::o;21380:468::-;21445:6;21453;21502:2;21490:9;21481:7;21477:23;21473:32;21470:119;;;21508:79;;:::i;:::-;21470:119;21628:1;21653:53;21698:7;21689:6;21678:9;21674:22;21653:53;:::i;:::-;21643:63;;21599:117;21755:2;21781:50;21823:7;21814:6;21803:9;21799:22;21781:50;:::i;:::-;21771:60;;21726:115;21380:468;;;;;:::o;21854:357::-;21927:6;21976:2;21964:9;21955:7;21951:23;21947:32;21944:119;;;21982:79;;:::i;:::-;21944:119;22102:1;22127:67;22186:7;22177:6;22166:9;22162:22;22127:67;:::i;:::-;22117:77;;22073:131;21854:357;;;;:::o;22217:474::-;22285:6;22293;22342:2;22330:9;22321:7;22317:23;22313:32;22310:119;;;22348:79;;:::i;:::-;22310:119;22468:1;22493:53;22538:7;22529:6;22518:9;22514:22;22493:53;:::i;:::-;22483:63;;22439:117;22595:2;22621:53;22666:7;22657:6;22646:9;22642:22;22621:53;:::i;:::-;22611:63;;22566:118;22217:474;;;;;:::o;22697:1089::-;22801:6;22809;22817;22825;22833;22882:3;22870:9;22861:7;22857:23;22853:33;22850:120;;;22889:79;;:::i;:::-;22850:120;23009:1;23034:53;23079:7;23070:6;23059:9;23055:22;23034:53;:::i;:::-;23024:63;;22980:117;23136:2;23162:53;23207:7;23198:6;23187:9;23183:22;23162:53;:::i;:::-;23152:63;;23107:118;23264:2;23290:53;23335:7;23326:6;23315:9;23311:22;23290:53;:::i;:::-;23280:63;;23235:118;23392:2;23418:53;23463:7;23454:6;23443:9;23439:22;23418:53;:::i;:::-;23408:63;;23363:118;23548:3;23537:9;23533:19;23520:33;23580:18;23572:6;23569:30;23566:117;;;23602:79;;:::i;:::-;23566:117;23707:62;23761:7;23752:6;23741:9;23737:22;23707:62;:::i;:::-;23697:72;;23491:288;22697:1089;;;;;;;;:::o;23792:229::-;23932:34;23928:1;23920:6;23916:14;23909:58;24001:12;23996:2;23988:6;23984:15;23977:37;23792:229;:::o;24027:366::-;24169:3;24190:67;24254:2;24249:3;24190:67;:::i;:::-;24183:74;;24266:93;24355:3;24266:93;:::i;:::-;24384:2;24379:3;24375:12;24368:19;;24027:366;;;:::o;24399:419::-;24565:4;24603:2;24592:9;24588:18;24580:26;;24652:9;24646:4;24642:20;24638:1;24627:9;24623:17;24616:47;24680:131;24806:4;24680:131;:::i;:::-;24672:139;;24399:419;;;:::o;24824:180::-;24872:77;24869:1;24862:88;24969:4;24966:1;24959:15;24993:4;24990:1;24983:15;25010:320;25054:6;25091:1;25085:4;25081:12;25071:22;;25138:1;25132:4;25128:12;25159:18;25149:81;;25215:4;25207:6;25203:17;25193:27;;25149:81;25277:2;25269:6;25266:14;25246:18;25243:38;25240:84;;25296:18;;:::i;:::-;25240:84;25061:269;25010:320;;;:::o;25336:225::-;25476:34;25472:1;25464:6;25460:14;25453:58;25545:8;25540:2;25532:6;25528:15;25521:33;25336:225;:::o;25567:366::-;25709:3;25730:67;25794:2;25789:3;25730:67;:::i;:::-;25723:74;;25806:93;25895:3;25806:93;:::i;:::-;25924:2;25919:3;25915:12;25908:19;;25567:366;;;:::o;25939:419::-;26105:4;26143:2;26132:9;26128:18;26120:26;;26192:9;26186:4;26182:20;26178:1;26167:9;26163:17;26156:47;26220:131;26346:4;26220:131;:::i;:::-;26212:139;;25939:419;;;:::o;26364:230::-;26504:34;26500:1;26492:6;26488:14;26481:58;26573:13;26568:2;26560:6;26556:15;26549:38;26364:230;:::o;26600:366::-;26742:3;26763:67;26827:2;26822:3;26763:67;:::i;:::-;26756:74;;26839:93;26928:3;26839:93;:::i;:::-;26957:2;26952:3;26948:12;26941:19;;26600:366;;;:::o;26972:419::-;27138:4;27176:2;27165:9;27161:18;27153:26;;27225:9;27219:4;27215:20;27211:1;27200:9;27196:17;27189:47;27253:131;27379:4;27253:131;:::i;:::-;27245:139;;26972:419;;;:::o;27397:180::-;27445:77;27442:1;27435:88;27542:4;27539:1;27532:15;27566:4;27563:1;27556:15;27583:191;27623:3;27642:20;27660:1;27642:20;:::i;:::-;27637:25;;27676:20;27694:1;27676:20;:::i;:::-;27671:25;;27719:1;27716;27712:9;27705:16;;27740:3;27737:1;27734:10;27731:36;;;27747:18;;:::i;:::-;27731:36;27583:191;;;;:::o;27780:60::-;27808:3;27829:5;27822:12;;27780:60;;;:::o;27846:142::-;27896:9;27929:53;27947:34;27956:24;27974:5;27956:24;:::i;:::-;27947:34;:::i;:::-;27929:53;:::i;:::-;27916:66;;27846:142;;;:::o;27994:126::-;28044:9;28077:37;28108:5;28077:37;:::i;:::-;28064:50;;27994:126;;;:::o;28126:134::-;28184:9;28217:37;28248:5;28217:37;:::i;:::-;28204:50;;28126:134;;;:::o;28266:147::-;28361:45;28400:5;28361:45;:::i;:::-;28356:3;28349:58;28266:147;;:::o;28419:348::-;28548:4;28586:2;28575:9;28571:18;28563:26;;28599:79;28675:1;28664:9;28660:17;28651:6;28599:79;:::i;:::-;28688:72;28756:2;28745:9;28741:18;28732:6;28688:72;:::i;:::-;28419:348;;;;;:::o;28773:156::-;28913:8;28909:1;28901:6;28897:14;28890:32;28773:156;:::o;28935:365::-;29077:3;29098:66;29162:1;29157:3;29098:66;:::i;:::-;29091:73;;29173:93;29262:3;29173:93;:::i;:::-;29291:2;29286:3;29282:12;29275:19;;28935:365;;;:::o;29306:419::-;29472:4;29510:2;29499:9;29495:18;29487:26;;29559:9;29553:4;29549:20;29545:1;29534:9;29530:17;29523:47;29587:131;29713:4;29587:131;:::i;:::-;29579:139;;29306:419;;;:::o;29731:154::-;29871:6;29867:1;29859:6;29855:14;29848:30;29731:154;:::o;29891:365::-;30033:3;30054:66;30118:1;30113:3;30054:66;:::i;:::-;30047:73;;30129:93;30218:3;30129:93;:::i;:::-;30247:2;30242:3;30238:12;30231:19;;29891:365;;;:::o;30262:419::-;30428:4;30466:2;30455:9;30451:18;30443:26;;30515:9;30509:4;30505:20;30501:1;30490:9;30486:17;30479:47;30543:131;30669:4;30543:131;:::i;:::-;30535:139;;30262:419;;;:::o;30687:157::-;30827:9;30823:1;30815:6;30811:14;30804:33;30687:157;:::o;30850:365::-;30992:3;31013:66;31077:1;31072:3;31013:66;:::i;:::-;31006:73;;31088:93;31177:3;31088:93;:::i;:::-;31206:2;31201:3;31197:12;31190:19;;30850:365;;;:::o;31221:419::-;31387:4;31425:2;31414:9;31410:18;31402:26;;31474:9;31468:4;31464:20;31460:1;31449:9;31445:17;31438:47;31502:131;31628:4;31502:131;:::i;:::-;31494:139;;31221:419;;;:::o;31646:410::-;31686:7;31709:20;31727:1;31709:20;:::i;:::-;31704:25;;31743:20;31761:1;31743:20;:::i;:::-;31738:25;;31798:1;31795;31791:9;31820:30;31838:11;31820:30;:::i;:::-;31809:41;;31999:1;31990:7;31986:15;31983:1;31980:22;31960:1;31953:9;31933:83;31910:139;;32029:18;;:::i;:::-;31910:139;31694:362;31646:410;;;;:::o;32062:159::-;32202:11;32198:1;32190:6;32186:14;32179:35;32062:159;:::o;32227:365::-;32369:3;32390:66;32454:1;32449:3;32390:66;:::i;:::-;32383:73;;32465:93;32554:3;32465:93;:::i;:::-;32583:2;32578:3;32574:12;32567:19;;32227:365;;;:::o;32598:419::-;32764:4;32802:2;32791:9;32787:18;32779:26;;32851:9;32845:4;32841:20;32837:1;32826:9;32822:17;32815:47;32879:131;33005:4;32879:131;:::i;:::-;32871:139;;32598:419;;;:::o;33023:161::-;33163:13;33159:1;33151:6;33147:14;33140:37;33023:161;:::o;33190:366::-;33332:3;33353:67;33417:2;33412:3;33353:67;:::i;:::-;33346:74;;33429:93;33518:3;33429:93;:::i;:::-;33547:2;33542:3;33538:12;33531:19;;33190:366;;;:::o;33562:419::-;33728:4;33766:2;33755:9;33751:18;33743:26;;33815:9;33809:4;33805:20;33801:1;33790:9;33786:17;33779:47;33843:131;33969:4;33843:131;:::i;:::-;33835:139;;33562:419;;;:::o;33987:233::-;34127:34;34123:1;34115:6;34111:14;34104:58;34196:16;34191:2;34183:6;34179:15;34172:41;33987:233;:::o;34226:366::-;34368:3;34389:67;34453:2;34448:3;34389:67;:::i;:::-;34382:74;;34465:93;34554:3;34465:93;:::i;:::-;34583:2;34578:3;34574:12;34567:19;;34226:366;;;:::o;34598:419::-;34764:4;34802:2;34791:9;34787:18;34779:26;;34851:9;34845:4;34841:20;34837:1;34826:9;34822:17;34815:47;34879:131;35005:4;34879:131;:::i;:::-;34871:139;;34598:419;;;:::o;35023:228::-;35163:34;35159:1;35151:6;35147:14;35140:58;35232:11;35227:2;35219:6;35215:15;35208:36;35023:228;:::o;35257:366::-;35399:3;35420:67;35484:2;35479:3;35420:67;:::i;:::-;35413:74;;35496:93;35585:3;35496:93;:::i;:::-;35614:2;35609:3;35605:12;35598:19;;35257:366;;;:::o;35629:419::-;35795:4;35833:2;35822:9;35818:18;35810:26;;35882:9;35876:4;35872:20;35868:1;35857:9;35853:17;35846:47;35910:131;36036:4;35910:131;:::i;:::-;35902:139;;35629:419;;;:::o;36054:180::-;36102:77;36099:1;36092:88;36199:4;36196:1;36189:15;36223:4;36220:1;36213:15;36240:233;36279:3;36302:24;36320:5;36302:24;:::i;:::-;36293:33;;36348:66;36341:5;36338:77;36335:103;;36418:18;;:::i;:::-;36335:103;36465:1;36458:5;36454:13;36447:20;;36240:233;;;:::o;36479:141::-;36528:4;36551:3;36543:11;;36574:3;36571:1;36564:14;36608:4;36605:1;36595:18;36587:26;;36479:141;;;:::o;36626:93::-;36663:6;36710:2;36705;36698:5;36694:14;36690:23;36680:33;;36626:93;;;:::o;36725:107::-;36769:8;36819:5;36813:4;36809:16;36788:37;;36725:107;;;;:::o;36838:393::-;36907:6;36957:1;36945:10;36941:18;36980:97;37010:66;36999:9;36980:97;:::i;:::-;37098:39;37128:8;37117:9;37098:39;:::i;:::-;37086:51;;37170:4;37166:9;37159:5;37155:21;37146:30;;37219:4;37209:8;37205:19;37198:5;37195:30;37185:40;;36914:317;;36838:393;;;;;:::o;37237:142::-;37287:9;37320:53;37338:34;37347:24;37365:5;37347:24;:::i;:::-;37338:34;:::i;:::-;37320:53;:::i;:::-;37307:66;;37237:142;;;:::o;37385:75::-;37428:3;37449:5;37442:12;;37385:75;;;:::o;37466:269::-;37576:39;37607:7;37576:39;:::i;:::-;37637:91;37686:41;37710:16;37686:41;:::i;:::-;37678:6;37671:4;37665:11;37637:91;:::i;:::-;37631:4;37624:105;37542:193;37466:269;;;:::o;37741:73::-;37786:3;37741:73;:::o;37820:189::-;37897:32;;:::i;:::-;37938:65;37996:6;37988;37982:4;37938:65;:::i;:::-;37873:136;37820:189;;:::o;38015:186::-;38075:120;38092:3;38085:5;38082:14;38075:120;;;38146:39;38183:1;38176:5;38146:39;:::i;:::-;38119:1;38112:5;38108:13;38099:22;;38075:120;;;38015:186;;:::o;38207:543::-;38308:2;38303:3;38300:11;38297:446;;;38342:38;38374:5;38342:38;:::i;:::-;38426:29;38444:10;38426:29;:::i;:::-;38416:8;38412:44;38609:2;38597:10;38594:18;38591:49;;;38630:8;38615:23;;38591:49;38653:80;38709:22;38727:3;38709:22;:::i;:::-;38699:8;38695:37;38682:11;38653:80;:::i;:::-;38312:431;;38297:446;38207:543;;;:::o;38756:117::-;38810:8;38860:5;38854:4;38850:16;38829:37;;38756:117;;;;:::o;38879:169::-;38923:6;38956:51;39004:1;39000:6;38992:5;38989:1;38985:13;38956:51;:::i;:::-;38952:56;39037:4;39031;39027:15;39017:25;;38930:118;38879:169;;;;:::o;39053:295::-;39129:4;39275:29;39300:3;39294:4;39275:29;:::i;:::-;39267:37;;39337:3;39334:1;39330:11;39324:4;39321:21;39313:29;;39053:295;;;;:::o;39353:1395::-;39470:37;39503:3;39470:37;:::i;:::-;39572:18;39564:6;39561:30;39558:56;;;39594:18;;:::i;:::-;39558:56;39638:38;39670:4;39664:11;39638:38;:::i;:::-;39723:67;39783:6;39775;39769:4;39723:67;:::i;:::-;39817:1;39841:4;39828:17;;39873:2;39865:6;39862:14;39890:1;39885:618;;;;40547:1;40564:6;40561:77;;;40613:9;40608:3;40604:19;40598:26;40589:35;;40561:77;40664:67;40724:6;40717:5;40664:67;:::i;:::-;40658:4;40651:81;40520:222;39855:887;;39885:618;39937:4;39933:9;39925:6;39921:22;39971:37;40003:4;39971:37;:::i;:::-;40030:1;40044:208;40058:7;40055:1;40052:14;40044:208;;;40137:9;40132:3;40128:19;40122:26;40114:6;40107:42;40188:1;40180:6;40176:14;40166:24;;40235:2;40224:9;40220:18;40207:31;;40081:4;40078:1;40074:12;40069:17;;40044:208;;;40280:6;40271:7;40268:19;40265:179;;;40338:9;40333:3;40329:19;40323:26;40381:48;40423:4;40415:6;40411:17;40400:9;40381:48;:::i;:::-;40373:6;40366:64;40288:156;40265:179;40490:1;40486;40478:6;40474:14;40470:22;40464:4;40457:36;39892:611;;;39855:887;;39445:1303;;;39353:1395;;:::o;40754:143::-;40811:5;40842:6;40836:13;40827:22;;40858:33;40885:5;40858:33;:::i;:::-;40754:143;;;;:::o;40903:351::-;40973:6;41022:2;41010:9;41001:7;40997:23;40993:32;40990:119;;;41028:79;;:::i;:::-;40990:119;41148:1;41173:64;41229:7;41220:6;41209:9;41205:22;41173:64;:::i;:::-;41163:74;;41119:128;40903:351;;;;:::o;41260:225::-;41400:34;41396:1;41388:6;41384:14;41377:58;41469:8;41464:2;41456:6;41452:15;41445:33;41260:225;:::o;41491:366::-;41633:3;41654:67;41718:2;41713:3;41654:67;:::i;:::-;41647:74;;41730:93;41819:3;41730:93;:::i;:::-;41848:2;41843:3;41839:12;41832:19;;41491:366;;;:::o;41863:419::-;42029:4;42067:2;42056:9;42052:18;42044:26;;42116:9;42110:4;42106:20;42102:1;42091:9;42087:17;42080:47;42144:131;42270:4;42144:131;:::i;:::-;42136:139;;41863:419;;;:::o;42288:179::-;42428:31;42424:1;42416:6;42412:14;42405:55;42288:179;:::o;42473:366::-;42615:3;42636:67;42700:2;42695:3;42636:67;:::i;:::-;42629:74;;42712:93;42801:3;42712:93;:::i;:::-;42830:2;42825:3;42821:12;42814:19;;42473:366;;;:::o;42845:419::-;43011:4;43049:2;43038:9;43034:18;43026:26;;43098:9;43092:4;43088:20;43084:1;43073:9;43069:17;43062:47;43126:131;43252:4;43126:131;:::i;:::-;43118:139;;42845:419;;;:::o;43270:147::-;43371:11;43408:3;43393:18;;43270:147;;;;:::o;43423:114::-;;:::o;43543:398::-;43702:3;43723:83;43804:1;43799:3;43723:83;:::i;:::-;43716:90;;43815:93;43904:3;43815:93;:::i;:::-;43933:1;43928:3;43924:11;43917:18;;43543:398;;;:::o;43947:379::-;44131:3;44153:147;44296:3;44153:147;:::i;:::-;44146:154;;44317:3;44310:10;;43947:379;;;:::o;44332:245::-;44472:34;44468:1;44460:6;44456:14;44449:58;44541:28;44536:2;44528:6;44524:15;44517:53;44332:245;:::o;44583:366::-;44725:3;44746:67;44810:2;44805:3;44746:67;:::i;:::-;44739:74;;44822:93;44911:3;44822:93;:::i;:::-;44940:2;44935:3;44931:12;44924:19;;44583:366;;;:::o;44955:419::-;45121:4;45159:2;45148:9;45144:18;45136:26;;45208:9;45202:4;45198:20;45194:1;45183:9;45179:17;45172:47;45236:131;45362:4;45236:131;:::i;:::-;45228:139;;44955:419;;;:::o;45380:220::-;45520:34;45516:1;45508:6;45504:14;45497:58;45589:3;45584:2;45576:6;45572:15;45565:28;45380:220;:::o;45606:366::-;45748:3;45769:67;45833:2;45828:3;45769:67;:::i;:::-;45762:74;;45845:93;45934:3;45845:93;:::i;:::-;45963:2;45958:3;45954:12;45947:19;;45606:366;;;:::o;45978:419::-;46144:4;46182:2;46171:9;46167:18;46159:26;;46231:9;46225:4;46221:20;46217:1;46206:9;46202:17;46195:47;46259:131;46385:4;46259:131;:::i;:::-;46251:139;;45978:419;;;:::o;46403:332::-;46524:4;46562:2;46551:9;46547:18;46539:26;;46575:71;46643:1;46632:9;46628:17;46619:6;46575:71;:::i;:::-;46656:72;46724:2;46713:9;46709:18;46700:6;46656:72;:::i;:::-;46403:332;;;;;:::o;46741:182::-;46881:34;46877:1;46869:6;46865:14;46858:58;46741:182;:::o;46929:366::-;47071:3;47092:67;47156:2;47151:3;47092:67;:::i;:::-;47085:74;;47168:93;47257:3;47168:93;:::i;:::-;47286:2;47281:3;47277:12;47270:19;;46929:366;;;:::o;47301:419::-;47467:4;47505:2;47494:9;47490:18;47482:26;;47554:9;47548:4;47544:20;47540:1;47529:9;47525:17;47518:47;47582:131;47708:4;47582:131;:::i;:::-;47574:139;;47301:419;;;:::o;47726:227::-;47866:34;47862:1;47854:6;47850:14;47843:58;47935:10;47930:2;47922:6;47918:15;47911:35;47726:227;:::o;47959:366::-;48101:3;48122:67;48186:2;48181:3;48122:67;:::i;:::-;48115:74;;48198:93;48287:3;48198:93;:::i;:::-;48316:2;48311:3;48307:12;48300:19;;47959:366;;;:::o;48331:419::-;48497:4;48535:2;48524:9;48520:18;48512:26;;48584:9;48578:4;48574:20;48570:1;48559:9;48555:17;48548:47;48612:131;48738:4;48612:131;:::i;:::-;48604:139;;48331:419;;;:::o;48756:634::-;48977:4;49015:2;49004:9;49000:18;48992:26;;49064:9;49058:4;49054:20;49050:1;49039:9;49035:17;49028:47;49092:108;49195:4;49186:6;49092:108;:::i;:::-;49084:116;;49247:9;49241:4;49237:20;49232:2;49221:9;49217:18;49210:48;49275:108;49378:4;49369:6;49275:108;:::i;:::-;49267:116;;48756:634;;;;;:::o;49396:224::-;49536:34;49532:1;49524:6;49520:14;49513:58;49605:7;49600:2;49592:6;49588:15;49581:32;49396:224;:::o;49626:366::-;49768:3;49789:67;49853:2;49848:3;49789:67;:::i;:::-;49782:74;;49865:93;49954:3;49865:93;:::i;:::-;49983:2;49978:3;49974:12;49967:19;;49626:366;;;:::o;49998:419::-;50164:4;50202:2;50191:9;50187:18;50179:26;;50251:9;50245:4;50241:20;50237:1;50226:9;50222:17;50215:47;50279:131;50405:4;50279:131;:::i;:::-;50271:139;;49998:419;;;:::o;50423:229::-;50563:34;50559:1;50551:6;50547:14;50540:58;50632:12;50627:2;50619:6;50615:15;50608:37;50423:229;:::o;50658:366::-;50800:3;50821:67;50885:2;50880:3;50821:67;:::i;:::-;50814:74;;50897:93;50986:3;50897:93;:::i;:::-;51015:2;51010:3;51006:12;50999:19;;50658:366;;;:::o;51030:419::-;51196:4;51234:2;51223:9;51219:18;51211:26;;51283:9;51277:4;51273:20;51269:1;51258:9;51254:17;51247:47;51311:131;51437:4;51311:131;:::i;:::-;51303:139;;51030:419;;;:::o;51455:228::-;51595:34;51591:1;51583:6;51579:14;51572:58;51664:11;51659:2;51651:6;51647:15;51640:36;51455:228;:::o;51689:366::-;51831:3;51852:67;51916:2;51911:3;51852:67;:::i;:::-;51845:74;;51928:93;52017:3;51928:93;:::i;:::-;52046:2;52041:3;52037:12;52030:19;;51689:366;;;:::o;52061:419::-;52227:4;52265:2;52254:9;52250:18;52242:26;;52314:9;52308:4;52304:20;52300:1;52289:9;52285:17;52278:47;52342:131;52468:4;52342:131;:::i;:::-;52334:139;;52061:419;;;:::o;52486:180::-;52534:77;52531:1;52524:88;52631:4;52628:1;52621:15;52655:4;52652:1;52645:15;52672:185;52712:1;52729:20;52747:1;52729:20;:::i;:::-;52724:25;;52763:20;52781:1;52763:20;:::i;:::-;52758:25;;52802:1;52792:35;;52807:18;;:::i;:::-;52792:35;52849:1;52846;52842:9;52837:14;;52672:185;;;;:::o;52863:194::-;52903:4;52923:20;52941:1;52923:20;:::i;:::-;52918:25;;52957:20;52975:1;52957:20;:::i;:::-;52952:25;;53001:1;52998;52994:9;52986:17;;53025:1;53019:4;53016:11;53013:37;;;53030:18;;:::i;:::-;53013:37;52863:194;;;;:::o;53063:98::-;53114:6;53148:5;53142:12;53132:22;;53063:98;;;:::o;53167:168::-;53250:11;53284:6;53279:3;53272:19;53324:4;53319:3;53315:14;53300:29;;53167:168;;;;:::o;53341:373::-;53427:3;53455:38;53487:5;53455:38;:::i;:::-;53509:70;53572:6;53567:3;53509:70;:::i;:::-;53502:77;;53588:65;53646:6;53641:3;53634:4;53627:5;53623:16;53588:65;:::i;:::-;53678:29;53700:6;53678:29;:::i;:::-;53673:3;53669:39;53662:46;;53431:283;53341:373;;;;:::o;53720:751::-;53943:4;53981:3;53970:9;53966:19;53958:27;;53995:71;54063:1;54052:9;54048:17;54039:6;53995:71;:::i;:::-;54076:72;54144:2;54133:9;54129:18;54120:6;54076:72;:::i;:::-;54158;54226:2;54215:9;54211:18;54202:6;54158:72;:::i;:::-;54240;54308:2;54297:9;54293:18;54284:6;54240:72;:::i;:::-;54360:9;54354:4;54350:20;54344:3;54333:9;54329:19;54322:49;54388:76;54459:4;54450:6;54388:76;:::i;:::-;54380:84;;53720:751;;;;;;;;:::o;54477:141::-;54533:5;54564:6;54558:13;54549:22;;54580:32;54606:5;54580:32;:::i;:::-;54477:141;;;;:::o;54624:349::-;54693:6;54742:2;54730:9;54721:7;54717:23;54713:32;54710:119;;;54748:79;;:::i;:::-;54710:119;54868:1;54893:63;54948:7;54939:6;54928:9;54924:22;54893:63;:::i;:::-;54883:73;;54839:127;54624:349;;;;:::o;54979:106::-;55023:8;55072:5;55067:3;55063:15;55042:36;;54979:106;;;:::o;55091:183::-;55126:3;55164:1;55146:16;55143:23;55140:128;;;55202:1;55199;55196;55181:23;55224:34;55255:1;55249:8;55224:34;:::i;:::-;55217:41;;55140:128;55091:183;:::o;55280:711::-;55319:3;55357:4;55339:16;55336:26;55365:5;55333:39;55394:20;;:::i;:::-;55469:1;55451:16;55447:24;55444:1;55438:4;55423:49;55502:4;55496:11;55601:16;55594:4;55586:6;55582:17;55579:39;55546:18;55538:6;55535:30;55519:113;55516:146;;;55647:5;;;;55516:146;55693:6;55687:4;55683:17;55729:3;55723:10;55756:18;55748:6;55745:30;55742:43;;;55778:5;;;;;;55742:43;55826:6;55819:4;55814:3;55810:14;55806:27;55885:1;55867:16;55863:24;55857:4;55853:35;55848:3;55845:44;55842:57;;;55892:5;;;;;;;55842:57;55909;55957:6;55951:4;55947:17;55939:6;55935:30;55929:4;55909:57;:::i;:::-;55982:3;55975:10;;55323:668;;;;;55280:711;;:::o;55997:239::-;56137:34;56133:1;56125:6;56121:14;56114:58;56206:22;56201:2;56193:6;56189:15;56182:47;55997:239;:::o;56242:366::-;56384:3;56405:67;56469:2;56464:3;56405:67;:::i;:::-;56398:74;;56481:93;56570:3;56481:93;:::i;:::-;56599:2;56594:3;56590:12;56583:19;;56242:366;;;:::o;56614:419::-;56780:4;56818:2;56807:9;56803:18;56795:26;;56867:9;56861:4;56857:20;56853:1;56842:9;56838:17;56831:47;56895:131;57021:4;56895:131;:::i;:::-;56887:139;;56614:419;;;:::o;57039:227::-;57179:34;57175:1;57167:6;57163:14;57156:58;57248:10;57243:2;57235:6;57231:15;57224:35;57039:227;:::o;57272:366::-;57414:3;57435:67;57499:2;57494:3;57435:67;:::i;:::-;57428:74;;57511:93;57600:3;57511:93;:::i;:::-;57629:2;57624:3;57620:12;57613:19;;57272:366;;;:::o;57644:419::-;57810:4;57848:2;57837:9;57833:18;57825:26;;57897:9;57891:4;57887:20;57883:1;57872:9;57868:17;57861:47;57925:131;58051:4;57925:131;:::i;:::-;57917:139;;57644:419;;;:::o;58069:1053::-;58392:4;58430:3;58419:9;58415:19;58407:27;;58444:71;58512:1;58501:9;58497:17;58488:6;58444:71;:::i;:::-;58525:72;58593:2;58582:9;58578:18;58569:6;58525:72;:::i;:::-;58644:9;58638:4;58634:20;58629:2;58618:9;58614:18;58607:48;58672:108;58775:4;58766:6;58672:108;:::i;:::-;58664:116;;58827:9;58821:4;58817:20;58812:2;58801:9;58797:18;58790:48;58855:108;58958:4;58949:6;58855:108;:::i;:::-;58847:116;;59011:9;59005:4;59001:20;58995:3;58984:9;58980:19;58973:49;59039:76;59110:4;59101:6;59039:76;:::i;:::-;59031:84;;58069:1053;;;;;;;;:::o;59128:170::-;59268:22;59264:1;59256:6;59252:14;59245:46;59128:170;:::o;59304:366::-;59446:3;59467:67;59531:2;59526:3;59467:67;:::i;:::-;59460:74;;59543:93;59632:3;59543:93;:::i;:::-;59661:2;59656:3;59652:12;59645:19;;59304:366;;;:::o;59676:419::-;59842:4;59880:2;59869:9;59865:18;59857:26;;59929:9;59923:4;59919:20;59915:1;59904:9;59900:17;59893:47;59957:131;60083:4;59957:131;:::i;:::-;59949:139;;59676:419;;;:::o;60101:137::-;60155:5;60186:6;60180:13;60171:22;;60202:30;60226:5;60202:30;:::i;:::-;60101:137;;;;:::o;60244:345::-;60311:6;60360:2;60348:9;60339:7;60335:23;60331:32;60328:119;;;60366:79;;:::i;:::-;60328:119;60486:1;60511:61;60564:7;60555:6;60544:9;60540:22;60511:61;:::i;:::-;60501:71;;60457:125;60244:345;;;;:::o;60595:229::-;60735:34;60731:1;60723:6;60719:14;60712:58;60804:12;60799:2;60791:6;60787:15;60780:37;60595:229;:::o;60830:366::-;60972:3;60993:67;61057:2;61052:3;60993:67;:::i;:::-;60986:74;;61069:93;61158:3;61069:93;:::i;:::-;61187:2;61182:3;61178:12;61171:19;;60830:366;;;:::o;61202:419::-;61368:4;61406:2;61395:9;61391:18;61383:26;;61455:9;61449:4;61445:20;61441:1;61430:9;61426:17;61419:47;61483:131;61609:4;61483:131;:::i;:::-;61475:139;;61202:419;;;:::o;61627:166::-;61767:18;61763:1;61755:6;61751:14;61744:42;61627:166;:::o;61799:366::-;61941:3;61962:67;62026:2;62021:3;61962:67;:::i;:::-;61955:74;;62038:93;62127:3;62038:93;:::i;:::-;62156:2;62151:3;62147:12;62140:19;;61799:366;;;:::o;62171:419::-;62337:4;62375:2;62364:9;62360:18;62352:26;;62424:9;62418:4;62414:20;62410:1;62399:9;62395:17;62388:47;62452:131;62578:4;62452:131;:::i;:::-;62444:139;;62171:419;;;:::o;62596:227::-;62736:34;62732:1;62724:6;62720:14;62713:58;62805:10;62800:2;62792:6;62788:15;62781:35;62596:227;:::o;62829:366::-;62971:3;62992:67;63056:2;63051:3;62992:67;:::i;:::-;62985:74;;63068:93;63157:3;63068:93;:::i;:::-;63186:2;63181:3;63177:12;63170:19;;62829:366;;;:::o;63201:419::-;63367:4;63405:2;63394:9;63390:18;63382:26;;63454:9;63448:4;63444:20;63440:1;63429:9;63425:17;63418:47;63482:131;63608:4;63482:131;:::i;:::-;63474:139;;63201:419;;;:::o;63626:225::-;63766:34;63762:1;63754:6;63750:14;63743:58;63835:8;63830:2;63822:6;63818:15;63811:33;63626:225;:::o;63857:366::-;63999:3;64020:67;64084:2;64079:3;64020:67;:::i;:::-;64013:74;;64096:93;64185:3;64096:93;:::i;:::-;64214:2;64209:3;64205:12;64198:19;;63857:366;;;:::o;64229:419::-;64395:4;64433:2;64422:9;64418:18;64410:26;;64482:9;64476:4;64472:20;64468:1;64457:9;64453:17;64446:47;64510:131;64636:4;64510:131;:::i;:::-;64502:139;;64229:419;;;:::o;64654:386::-;64758:3;64786:38;64818:5;64786:38;:::i;:::-;64840:88;64921:6;64916:3;64840:88;:::i;:::-;64833:95;;64937:65;64995:6;64990:3;64983:4;64976:5;64972:16;64937:65;:::i;:::-;65027:6;65022:3;65018:16;65011:23;;64762:278;64654:386;;;;:::o;65046:271::-;65176:3;65198:93;65287:3;65278:6;65198:93;:::i;:::-;65191:100;;65308:3;65301:10;;65046:271;;;;:::o;65323:179::-;65463:31;65459:1;65451:6;65447:14;65440:55;65323:179;:::o;65508:366::-;65650:3;65671:67;65735:2;65730:3;65671:67;:::i;:::-;65664:74;;65747:93;65836:3;65747:93;:::i;:::-;65865:2;65860:3;65856:12;65849:19;;65508:366;;;:::o;65880:419::-;66046:4;66084:2;66073:9;66069:18;66061:26;;66133:9;66127:4;66123:20;66119:1;66108:9;66104:17;66097:47;66161:131;66287:4;66161:131;:::i;:::-;66153:139;;65880:419;;;:::o
Swarm Source
ipfs://074e314a5b73694581ade9ea7dd6ab49b4c0bfbf593d238de52402049ed37536
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.