Contract 0x4336d53241bec93cd25cd0b91a8bd73ddbd0d23e 10
Contract Overview
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
ArbiDudesDutchAuctionV2
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; /* _____________________________________ | | | The | | ARBIDUDES | | Dutch Auction | | v2 | | https://www.arbidudes.xyz/ | | Twitter: @ArbiDudes | |_____________________________________| ((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((@@@@@@@@@@@(((((((((((((((((((((((((((( ((((((((((@@@@@@@@@@@@@@@@@(((((((((((((((((((((((((( (((((((@@@@@@@@@@@@@@@@@@@@@@@((((((((((((((((((((((( (((((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(((((((( (((((&&.........@@@@@@@..................//////&&&((( (((((&&..............@@..................//////&&&((( (((((&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@((( (((((&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@((( (((((&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//////&&&((( (((((&&@@@@@@@@@@@@@@..@@@@@@@@@@@@@@@@@@//////&&&((( (((((&&...@@@@@@@@(......@@@@@@@@@@@@@(..//////&&&((( (((((&&..................................//////&&&((( (((((&&...........(@@@@@@@@@@@...........//////&&&((( (((((&&................................////////&&&((( (((((&&................................////////&&&((( (((((&&.............................///////////&&&((( (((((&&///........................../////////&&(((((( (((((((&&&//......................///////////&&(((((( ((((((((((&&////...........////////////////&&(((((((( ((((((((((((&&///////////////////////////&&&&(((((((( */ interface IArbiDudesGenOne { function getCurrentTokenId() external view returns (uint256); function setPublicPrice(uint256 newPrice) external; function setChangeNamePrice(uint256 newPrice) external; function setChatPrice(uint256 newPrice) external; function setMaxGiveawayTokenId(uint256 _newMaxToken) external; function pause() external; function unpause() external; function setBaseURI(string memory newBaseURI) external; function ownerClaimMultiple(uint256 amount, address to) external; function ownerWithdraw() external; function renounceOwnership() external; function transferOwnership(address newOwner) external; } contract ArbiDudesDutchAuctionV2 is Pausable, Ownable, ReentrancyGuard, AccessControl { IArbiDudesGenOne public dudesContract; uint256 private _maxMintAmount = 20; uint256 private _auctionStartedAt; bool public isAuctionMode; uint256 public minDudesMintableMultiple; uint256 public mintableMultiplePrice; bool private _requireSignature; address private _d; event AuctionEnded(uint256 indexed tokenId, address indexed owner); event AuctionPaused(uint256 indexed tokenId); event AuctionUnpaused(uint256 indexed tokenId); event ModeAuctionOn(); event ModeClassicOn(); bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); constructor() { setMinDudesMintableMultiple(5); setMintableMultiplePrice(50000000000000000); //0.05 ETH isAuctionMode = true; _requireSignature = true; _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); _setupRole(MINTER_ROLE, msg.sender); _auctionStartedAt = block.timestamp; } function setDudesContract(IArbiDudesGenOne arbiDudes) public onlyOwner { dudesContract = arbiDudes; } function getCurrentTokenId() public view returns (uint256) { return dudesContract.getCurrentTokenId(); } function getAuctionStartedAt() public view returns (uint256) { return _auctionStartedAt; } function setDudesPublicPrice(uint256 newPrice) public onlyOwner { dudesContract.setPublicPrice(newPrice); } function setDudesChangeNamePrice(uint256 newPrice) public onlyOwner { dudesContract.setChangeNamePrice(newPrice); } function setDudesChatPrice(uint256 newPrice) public onlyOwner { dudesContract.setChatPrice(newPrice); } function setDudesMaxGiveawayTokenId(uint256 _newMaxToken) public onlyOwner { dudesContract.setMaxGiveawayTokenId(_newMaxToken); } function ownerDudesWithdraw() external onlyOwner { dudesContract.ownerWithdraw(); } function dudesPause() public onlyOwner { dudesContract.pause(); } function dudesUnpause() public onlyOwner { dudesContract.unpause(); } function setDudesBaseURI(string memory newBaseURI) public onlyOwner { dudesContract.setBaseURI(newBaseURI); } function dudesRenounceOwnership() public virtual onlyOwner { dudesContract.renounceOwnership(); } function dudesTransferOwnership(address newOwner) public virtual onlyOwner { dudesContract.transferOwnership(newOwner); } // Allow the owner to claim any amount of NFTs and direct them to another address. function dudesOwnerClaimMultiple(uint256 amount, address to) public nonReentrant onlyOwner { handleMint(amount, to); } // Dutch auction function handleRestartAuction() private { _auctionStartedAt = block.timestamp; } function auctionMode(bool auctionOn) public onlyOwner { require(auctionOn != isAuctionMode, "This mode is currently active"); isAuctionMode = auctionOn; if (auctionOn) { // Turn On Auction - Stop Classic mode setMinDudesMintableMultiple(5); setMintableMultiplePrice(50000000000000000); // 0'05ETH unpause(); emit ModeAuctionOn(); } else { // Turn off Auction - Start Classic mode pause(); setMinDudesMintableMultiple(1); setMintableMultiplePrice(50000000000000000); // 0'05ETH emit ModeClassicOn(); } } function setD(address d) public onlyOwner { _d = d; } function setMinter(address m) public onlyOwner { grantRole(MINTER_ROLE, m); } function setRequireSignature(bool requireSignature) public onlyOwner { _requireSignature = requireSignature; } function setMinDudesMintableMultiple(uint256 minDudes) public onlyOwner { minDudesMintableMultiple = minDudes; } function setMintableMultiplePrice(uint256 mulPrice) public onlyOwner { mintableMultiplePrice = mulPrice; } function mint( uint256 _tokenId, uint256 _price, bytes32 hash, bytes memory signature ) public payable whenNotPaused nonReentrant { uint256 currentTokenId = getCurrentTokenId(); require(_tokenId == currentTokenId, "Id already minted or wrong"); require(msg.value >= _price, "Ether sent is not enough"); if (_requireSignature) { require( hash == keccak256(abi.encode(msg.sender, _tokenId, address(this), _price)), "Invalid hash" ); require( ECDSA.recover(ECDSA.toEthSignedMessageHash(hash), signature) == _d, "Invalid signature" ); } else { // If not signature required we need to use the mintMultiple method require(false, "Method not available"); } handleMint(1, _msgSender()); } function mintMultiple(uint256 _num) public payable nonReentrant { require(minDudesMintableMultiple > 0, "Mint multiple not allowed"); require(_num >= minDudesMintableMultiple, "Minimum tokens not met"); require(_num <= _maxMintAmount, "You can mint a max of 20 dudes"); require( msg.value >= mintableMultiplePrice * _num, "Ether sent is not enough" ); handleMint(_num, _msgSender()); } function minterRoleMint(uint256 _num, address to) public nonReentrant onlyRole(MINTER_ROLE) { handleMint(_num, to); } function handleMint(uint256 num, address to) private { if (isAuctionMode) { emit AuctionEnded(getCurrentTokenId() + num - 1, to); handleRestartAuction(); } dudesContract.ownerClaimMultiple(num, to); } function ownerWithdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } function pause() public onlyOwner { _pause(); emit AuctionPaused(getCurrentTokenId()); } function unpause() public onlyOwner { handleRestartAuction(); _unpause(); emit AuctionUnpaused(getCurrentTokenId()); } receive() external payable { // } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @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 Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { 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()); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IAccessControl.sol"; import "../utils/Context.sol"; import "../utils/Strings.sol"; import "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @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] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT 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); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"AuctionEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AuctionPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AuctionUnpaused","type":"event"},{"anonymous":false,"inputs":[],"name":"ModeAuctionOn","type":"event"},{"anonymous":false,"inputs":[],"name":"ModeClassicOn","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":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"auctionOn","type":"bool"}],"name":"auctionMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dudesContract","outputs":[{"internalType":"contract IArbiDudesGenOne","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"dudesOwnerClaimMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dudesPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dudesRenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"dudesTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dudesUnpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAuctionStartedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAuctionMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDudesMintableMultiple","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"mintMultiple","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintableMultiplePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"minterRoleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerDudesWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"d","type":"address"}],"name":"setD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setDudesBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setDudesChangeNamePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setDudesChatPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IArbiDudesGenOne","name":"arbiDudes","type":"address"}],"name":"setDudesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxToken","type":"uint256"}],"name":"setDudesMaxGiveawayTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setDudesPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDudes","type":"uint256"}],"name":"setMinDudesMintableMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mulPrice","type":"uint256"}],"name":"setMintableMultiplePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"m","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"requireSignature","type":"bool"}],"name":"setRequireSignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260146004553480156200001657600080fd5b5060008060006101000a81548160ff02191690831515021790555062000051620000456200010c60201b60201c565b6200011460201b60201c565b600180819055506200006a6005620001d960201b60201c565b6200008266b1a2bc2ec500006200027260201b60201c565b6001600660006101000a81548160ff0219169083151502179055506001600960006101000a81548160ff021916908315150217905550620000cd6000801b336200030b60201b60201c565b620000ff7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336200030b60201b60201c565b426005819055506200052a565b600033905090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001e96200010c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200020f6200032160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000268576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025f90620004ce565b60405180910390fd5b8060078190555050565b620002826200010c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a86200032160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000301576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f890620004ce565b60405180910390fd5b8060088190555050565b6200031d82826200034a60201b60201c565b5050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200035c82826200043c60201b60201c565b620004385760016002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003dd6200010c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000620004b6602083620004f0565b9150620004c38262000501565b602082019050919050565b60006020820190508181036000830152620004e981620004a7565b9050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6147f5806200053a6000396000f3fe6080604052600436106102545760003560e01c80638da5cb5b11610139578063b5ac4c66116100b6578063e2f32fa51161007a578063e2f32fa5146107ec578063e9436b5a14610803578063eaa1d80d1461082c578063f2fde38b14610843578063f3acedd61461086c578063fca3b5aa146108975761025b565b8063b5ac4c661461071d578063c18e018614610746578063cd7da7b61461076f578063d539139314610798578063d547741f146107c35761025b565b8063a2417e29116100fd578063a2417e291461066f578063a64177fb14610698578063a99dd040146106c1578063abbb5a55146106d8578063b5282800146106f45761025b565b80638da5cb5b1461059c57806391d14854146105c757806394cf9a48146106045780639a3db02b1461061b578063a217fddf146106445761025b565b80634311de8f116101d25780635c975abb116101965780635c975abb146104d55780635d83d8fd14610500578063715018a61461052957806378d8a576146105405780638456cb5914610569578063882c56a0146105805761025b565b80634311de8f14610414578063439991871461042b57806347d73b7c146104545780634e58907a1461047f57806356189236146104aa5761025b565b806327fe10aa1161021957806327fe10aa146103575780632f2ff15d14610380578063321279ce146103a957806336568abe146103d45780633f4ba83a146103fd5761025b565b80620e3e921461026057806301ffc9a714610289578063034d1a84146102c657806309f4e414146102ef578063248a9ca31461031a5761025b565b3661025b57005b600080fd5b34801561026c57600080fd5b5061028760048036038101906102829190613692565b6108c0565b005b34801561029557600080fd5b506102b060048036038101906102ab91906135ad565b61099f565b6040516102bd9190613c09565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613692565b610a19565b005b3480156102fb57600080fd5b50610304610aaf565b6040516103119190613c84565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613548565b610ad5565b60405161034e9190613c24565b60405180910390f35b34801561036357600080fd5b5061037e600480360381019061037991906134f6565b610af5565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613571565b610c01565b005b3480156103b557600080fd5b506103be610c2a565b6040516103cb9190613c09565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190613571565b610c3d565b005b34801561040957600080fd5b50610412610cc0565b005b34801561042057600080fd5b50610429610d82565b005b34801561043757600080fd5b50610452600480360381019061044d9190613640565b610e4e565b005b34801561046057600080fd5b50610469610ed4565b6040516104769190613f41565b60405180910390f35b34801561048b57600080fd5b50610494610ede565b6040516104a19190613f41565b60405180910390f35b3480156104b657600080fd5b506104bf610ee4565b6040516104cc9190613f41565b60405180910390f35b3480156104e157600080fd5b506104ea610f8b565b6040516104f79190613c09565b60405180910390f35b34801561050c57600080fd5b50610527600480360381019061052291906135d6565b610fa1565b005b34801561053557600080fd5b5061053e611061565b005b34801561054c57600080fd5b5061056760048036038101906105629190613640565b6110e9565b005b34801561057557600080fd5b5061057e6111f5565b005b61059a600480360381019061059591906136ce565b6112af565b005b3480156105a857600080fd5b506105b1611561565b6040516105be9190613ba9565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190613571565b61158a565b6040516105fb9190613c09565b60405180910390f35b34801561061057600080fd5b506106196115f5565b005b34801561062757600080fd5b50610642600480360381019061063d9190613640565b6116f5565b005b34801561065057600080fd5b50610659611800565b6040516106669190613c24565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613640565b611807565b005b3480156106a457600080fd5b506106bf60048036038101906106ba91906134f6565b611913565b005b3480156106cd57600080fd5b506106d66119d3565b005b6106f260048036038101906106ed9190613640565b611ad3565b005b34801561070057600080fd5b5061071b6004803603810190610716919061351f565b611c5b565b005b34801561072957600080fd5b50610744600480360381019061073f91906135ff565b611cf4565b005b34801561075257600080fd5b5061076d60048036038101906107689190613640565b611e00565b005b34801561077b57600080fd5b506107966004803603810190610791919061351f565b611e86565b005b3480156107a457600080fd5b506107ad61201d565b6040516107ba9190613c24565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613571565b612041565b005b3480156107f857600080fd5b5061080161206a565b005b34801561080f57600080fd5b5061082a60048036038101906108259190613640565b61216a565b005b34801561083857600080fd5b50610841612276565b005b34801561084f57600080fd5b5061086a600480360381019061086591906134f6565b612376565b005b34801561087857600080fd5b5061088161246e565b60405161088e9190613f41565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b991906134f6565b612474565b005b60026001541415610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90613f01565b60405180910390fd5b600260018190555061091661251d565b73ffffffffffffffffffffffffffffffffffffffff16610934611561565b73ffffffffffffffffffffffffffffffffffffffff161461098a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098190613ec1565b60405180910390fd5b6109948282612525565b600180819055505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a125750610a1182612638565b5b9050919050565b60026001541415610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5690613f01565b60405180910390fd5b60026001819055507f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610a9981610a9461251d565b6126a2565b610aa38383612525565b50600180819055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060026000838152602001908152602001600020600101549050919050565b610afd61251d565b73ffffffffffffffffffffffffffffffffffffffff16610b1b611561565b73ffffffffffffffffffffffffffffffffffffffff1614610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6890613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff1660e01b8152600401610bcc9190613ba9565b600060405180830381600087803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b5050505050565b610c0a82610ad5565b610c1b81610c1661251d565b6126a2565b610c25838361273f565b505050565b600660009054906101000a900460ff1681565b610c4561251d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613f21565b60405180910390fd5b610cbc8282612820565b5050565b610cc861251d565b73ffffffffffffffffffffffffffffffffffffffff16610ce6611561565b73ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390613ec1565b60405180910390fd5b610d44612902565b610d4c61290b565b610d54610ee4565b7fd4f3a7440e7c1a0746661e95a58990f285aa34c503220193fd35120d7acc72ed60405160405180910390a2565b610d8a61251d565b73ffffffffffffffffffffffffffffffffffffffff16610da8611561565b73ffffffffffffffffffffffffffffffffffffffff1614610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613ec1565b60405180910390fd5b610e06611561565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e4b573d6000803e3d6000fd5b50565b610e5661251d565b73ffffffffffffffffffffffffffffffffffffffff16610e74611561565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613ec1565b60405180910390fd5b8060088190555050565b6000600554905090565b60085481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663561892366040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4e57600080fd5b505afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190613669565b905090565b60008060009054906101000a900460ff16905090565b610fa961251d565b73ffffffffffffffffffffffffffffffffffffffff16610fc7611561565b73ffffffffffffffffffffffffffffffffffffffff161461101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490613ec1565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61106961251d565b73ffffffffffffffffffffffffffffffffffffffff16611087611561565b73ffffffffffffffffffffffffffffffffffffffff16146110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d490613ec1565b60405180910390fd5b6110e760006129ac565b565b6110f161251d565b73ffffffffffffffffffffffffffffffffffffffff1661110f611561565b73ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166313a1288e826040518263ffffffff1660e01b81526004016111c09190613f41565b600060405180830381600087803b1580156111da57600080fd5b505af11580156111ee573d6000803e3d6000fd5b5050505050565b6111fd61251d565b73ffffffffffffffffffffffffffffffffffffffff1661121b611561565b73ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613ec1565b60405180910390fd5b611279612a71565b611281610ee4565b7fbfbe0eeb9851e98d21f973d30f11b8dacd485bc42ea47fe58b3335603741543f60405160405180910390a2565b6112b7610f8b565b156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90613e61565b60405180910390fd5b6002600154141561133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133490613f01565b60405180910390fd5b6002600181905550600061134f610ee4565b9050808514611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90613ee1565b60405180910390fd5b833410156113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613dc1565b60405180910390fd5b600960009054906101000a900460ff16156114ff57338530866040516020016114029493929190613bc4565b604051602081830303815290604052805190602001208314611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613d81565b60405180910390fd5b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114a461149e85612b13565b84612b43565b73ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190613e21565b60405180910390fd5b611541565b6000611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613e01565b60405180910390fd5b5b611553600161154e61251d565b612525565b506001808190555050505050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115fd61251d565b73ffffffffffffffffffffffffffffffffffffffff1661161b611561565b73ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634311de8f6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b50505050565b6116fd61251d565b73ffffffffffffffffffffffffffffffffffffffff1661171b611561565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662bb788f826040518263ffffffff1660e01b81526004016117cb9190613f41565b600060405180830381600087803b1580156117e557600080fd5b505af11580156117f9573d6000803e3d6000fd5b5050505050565b6000801b81565b61180f61251d565b73ffffffffffffffffffffffffffffffffffffffff1661182d611561565b73ffffffffffffffffffffffffffffffffffffffff1614611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfef954f826040518263ffffffff1660e01b81526004016118de9190613f41565b600060405180830381600087803b1580156118f857600080fd5b505af115801561190c573d6000803e3d6000fd5b5050505050565b61191b61251d565b73ffffffffffffffffffffffffffffffffffffffff16611939611561565b73ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690613ec1565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119db61251d565b73ffffffffffffffffffffffffffffffffffffffff166119f9611561565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ab957600080fd5b505af1158015611acd573d6000803e3d6000fd5b50505050565b60026001541415611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1090613f01565b60405180910390fd5b6002600181905550600060075411611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613ea1565b60405180910390fd5b600754811015611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290613d41565b60405180910390fd5b600454811115611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790613d01565b60405180910390fd5b80600854611bfe9190614089565b341015611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790613dc1565b60405180910390fd5b611c5181611c4c61251d565b612525565b6001808190555050565b611c6361251d565b73ffffffffffffffffffffffffffffffffffffffff16611c81611561565b73ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613ec1565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b611cfc61251d565b73ffffffffffffffffffffffffffffffffffffffff16611d1a611561565b73ffffffffffffffffffffffffffffffffffffffff1614611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166355f804b3826040518263ffffffff1660e01b8152600401611dcb9190613c9f565b600060405180830381600087803b158015611de557600080fd5b505af1158015611df9573d6000803e3d6000fd5b5050505050565b611e0861251d565b73ffffffffffffffffffffffffffffffffffffffff16611e26611561565b73ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390613ec1565b60405180910390fd5b8060078190555050565b611e8e61251d565b73ffffffffffffffffffffffffffffffffffffffff16611eac611561565b73ffffffffffffffffffffffffffffffffffffffff1614611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990613ec1565b60405180910390fd5b600660009054906101000a900460ff1615158115151415611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90613de1565b60405180910390fd5b80600660006101000a81548160ff0219169083151502179055508015611fcb57611f826005611e00565b611f9266b1a2bc2ec50000610e4e565b611f9a610cc0565b7f1c959c617e7123e48694d4c878ab491928d0060619697b23e454c944b4dd913360405160405180910390a161201a565b611fd36111f5565b611fdd6001611e00565b611fed66b1a2bc2ec50000610e4e565b7fdb5308301d67bd373a44f1cf9a16fe7d7f2d7ad34a82412fe73fc0934af3ae1d60405160405180910390a15b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61204a82610ad5565b61205b8161205661251d565b6126a2565b6120658383612820565b505050565b61207261251d565b73ffffffffffffffffffffffffffffffffffffffff16612090611561565b73ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561215057600080fd5b505af1158015612164573d6000803e3d6000fd5b50505050565b61217261251d565b73ffffffffffffffffffffffffffffffffffffffff16612190611561565b73ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c6275255826040518263ffffffff1660e01b81526004016122419190613f41565b600060405180830381600087803b15801561225b57600080fd5b505af115801561226f573d6000803e3d6000fd5b5050505050565b61227e61251d565b73ffffffffffffffffffffffffffffffffffffffff1661229c611561565b73ffffffffffffffffffffffffffffffffffffffff16146122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561235c57600080fd5b505af1158015612370573d6000803e3d6000fd5b50505050565b61237e61251d565b73ffffffffffffffffffffffffffffffffffffffff1661239c611561565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990613ec1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245990613da1565b60405180910390fd5b61246b816129ac565b50565b60075481565b61247c61251d565b73ffffffffffffffffffffffffffffffffffffffff1661249a611561565b73ffffffffffffffffffffffffffffffffffffffff16146124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e790613ec1565b60405180910390fd5b61251a7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610c01565b50565b600033905090565b600660009054906101000a900460ff16156125a5578073ffffffffffffffffffffffffffffffffffffffff1660018361255c610ee4565b6125669190614033565b61257091906140e3565b7fc07789fac136048b605fef8e227ab89b2e33d8afc9ab4817d374197cd81443d660405160405180910390a36125a4612902565b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635300b44983836040518363ffffffff1660e01b8152600401612602929190613f5c565b600060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126ac828261158a565b61273b576126d18173ffffffffffffffffffffffffffffffffffffffff166014612b6a565b6126df8360001c6020612b6a565b6040516020016126f0929190613b6f565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127329190613c9f565b60405180910390fd5b5050565b612749828261158a565b61281c5760016002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506127c161251d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61282a828261158a565b156128fe5760006002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506128a361251d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b42600581905550565b612913610f8b565b612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294990613d21565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61299561251d565b6040516129a29190613ba9565b60405180910390a1565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a79610f8b565b15612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab090613e61565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612afc61251d565b604051612b099190613ba9565b60405180910390a1565b600081604051602001612b269190613b49565b604051602081830303815290604052805190602001209050919050565b6000806000612b528585612e64565b91509150612b5f81612ee7565b819250505092915050565b606060006002836002612b7d9190614089565b612b879190614033565b67ffffffffffffffff811115612bc6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bf85781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612c56577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612ce0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612d209190614089565b612d2a9190614033565b90505b6001811115612e16577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612d92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612dcf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612e0f9061421a565b9050612d2d565b5060008414612e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5190613ce1565b60405180910390fd5b8091505092915050565b600080604183511415612ea65760008060006020860151925060408601519150606086015160001a9050612e9a87828585613238565b94509450505050612ee0565b604083511415612ed7576000806020850151915060408501519050612ecc868383613345565b935093505050612ee0565b60006002915091505b9250929050565b60006004811115612f21577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612f5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612f6557613235565b60016004811115612f9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612fd8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301090613cc1565b60405180910390fd5b60026004811115613053577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561308c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156130cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c490613d61565b60405180910390fd5b60036004811115613107577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115613140577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317890613e41565b60405180910390fd5b6004808111156131ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156131f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415613234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322b90613e81565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561327357600060039150915061333c565b601b8560ff161415801561328b5750601c8560ff1614155b1561329d57600060049150915061333c565b6000600187878787604051600081526020016040526040516132c29493929190613c3f565b6020604051602081039080840390855afa1580156132e4573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156133335760006001925092505061333c565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061338587828885613238565b935093505050935093915050565b60006133a66133a184613faa565b613f85565b9050828152602081018484840111156133be57600080fd5b6133c98482856141d8565b509392505050565b60006133e46133df84613fdb565b613f85565b9050828152602081018484840111156133fc57600080fd5b6134078482856141d8565b509392505050565b60008135905061341e81614735565b92915050565b6000813590506134338161474c565b92915050565b60008135905061344881614763565b92915050565b60008135905061345d8161477a565b92915050565b600082601f83011261347457600080fd5b8135613484848260208601613393565b91505092915050565b60008135905061349c81614791565b92915050565b600082601f8301126134b357600080fd5b81356134c38482602086016133d1565b91505092915050565b6000813590506134db816147a8565b92915050565b6000815190506134f0816147a8565b92915050565b60006020828403121561350857600080fd5b60006135168482850161340f565b91505092915050565b60006020828403121561353157600080fd5b600061353f84828501613424565b91505092915050565b60006020828403121561355a57600080fd5b600061356884828501613439565b91505092915050565b6000806040838503121561358457600080fd5b600061359285828601613439565b92505060206135a38582860161340f565b9150509250929050565b6000602082840312156135bf57600080fd5b60006135cd8482850161344e565b91505092915050565b6000602082840312156135e857600080fd5b60006135f68482850161348d565b91505092915050565b60006020828403121561361157600080fd5b600082013567ffffffffffffffff81111561362b57600080fd5b613637848285016134a2565b91505092915050565b60006020828403121561365257600080fd5b6000613660848285016134cc565b91505092915050565b60006020828403121561367b57600080fd5b6000613689848285016134e1565b91505092915050565b600080604083850312156136a557600080fd5b60006136b3858286016134cc565b92505060206136c48582860161340f565b9150509250929050565b600080600080608085870312156136e457600080fd5b60006136f2878288016134cc565b9450506020613703878288016134cc565b935050604061371487828801613439565b925050606085013567ffffffffffffffff81111561373157600080fd5b61373d87828801613463565b91505092959194509250565b61375281614117565b82525050565b61376181614129565b82525050565b61377081614135565b82525050565b61378761378282614135565b614275565b82525050565b613796816141b4565b82525050565b60006137a78261400c565b6137b18185614017565b93506137c18185602086016141e7565b6137ca816142dd565b840191505092915050565b60006137e08261400c565b6137ea8185614028565b93506137fa8185602086016141e7565b80840191505092915050565b6000613813601883614017565b915061381e826142ee565b602082019050919050565b6000613836602083614017565b915061384182614317565b602082019050919050565b6000613859601e83614017565b915061386482614340565b602082019050919050565b600061387c601483614017565b915061388782614369565b602082019050919050565b600061389f601683614017565b91506138aa82614392565b602082019050919050565b60006138c2601f83614017565b91506138cd826143bb565b602082019050919050565b60006138e5601c83614028565b91506138f0826143e4565b601c82019050919050565b6000613908600c83614017565b91506139138261440d565b602082019050919050565b600061392b602683614017565b915061393682614436565b604082019050919050565b600061394e601883614017565b915061395982614485565b602082019050919050565b6000613971601d83614017565b915061397c826144ae565b602082019050919050565b6000613994601483614017565b915061399f826144d7565b602082019050919050565b60006139b7601183614017565b91506139c282614500565b602082019050919050565b60006139da602283614017565b91506139e582614529565b604082019050919050565b60006139fd601083614017565b9150613a0882614578565b602082019050919050565b6000613a20602283614017565b9150613a2b826145a1565b604082019050919050565b6000613a43601983614017565b9150613a4e826145f0565b602082019050919050565b6000613a66602083614017565b9150613a7182614619565b602082019050919050565b6000613a89601a83614017565b9150613a9482614642565b602082019050919050565b6000613aac601783614028565b9150613ab78261466b565b601782019050919050565b6000613acf601f83614017565b9150613ada82614694565b602082019050919050565b6000613af2601183614028565b9150613afd826146bd565b601182019050919050565b6000613b15602f83614017565b9150613b20826146e6565b604082019050919050565b613b348161419d565b82525050565b613b43816141a7565b82525050565b6000613b54826138d8565b9150613b608284613776565b60208201915081905092915050565b6000613b7a82613a9f565b9150613b8682856137d5565b9150613b9182613ae5565b9150613b9d82846137d5565b91508190509392505050565b6000602082019050613bbe6000830184613749565b92915050565b6000608082019050613bd96000830187613749565b613be66020830186613b2b565b613bf36040830185613749565b613c006060830184613b2b565b95945050505050565b6000602082019050613c1e6000830184613758565b92915050565b6000602082019050613c396000830184613767565b92915050565b6000608082019050613c546000830187613767565b613c616020830186613b3a565b613c6e6040830185613767565b613c7b6060830184613767565b95945050505050565b6000602082019050613c99600083018461378d565b92915050565b60006020820190508181036000830152613cb9818461379c565b905092915050565b60006020820190508181036000830152613cda81613806565b9050919050565b60006020820190508181036000830152613cfa81613829565b9050919050565b60006020820190508181036000830152613d1a8161384c565b9050919050565b60006020820190508181036000830152613d3a8161386f565b9050919050565b60006020820190508181036000830152613d5a81613892565b9050919050565b60006020820190508181036000830152613d7a816138b5565b9050919050565b60006020820190508181036000830152613d9a816138fb565b9050919050565b60006020820190508181036000830152613dba8161391e565b9050919050565b60006020820190508181036000830152613dda81613941565b9050919050565b60006020820190508181036000830152613dfa81613964565b9050919050565b60006020820190508181036000830152613e1a81613987565b9050919050565b60006020820190508181036000830152613e3a816139aa565b9050919050565b60006020820190508181036000830152613e5a816139cd565b9050919050565b60006020820190508181036000830152613e7a816139f0565b9050919050565b60006020820190508181036000830152613e9a81613a13565b9050919050565b60006020820190508181036000830152613eba81613a36565b9050919050565b60006020820190508181036000830152613eda81613a59565b9050919050565b60006020820190508181036000830152613efa81613a7c565b9050919050565b60006020820190508181036000830152613f1a81613ac2565b9050919050565b60006020820190508181036000830152613f3a81613b08565b9050919050565b6000602082019050613f566000830184613b2b565b92915050565b6000604082019050613f716000830185613b2b565b613f7e6020830184613749565b9392505050565b6000613f8f613fa0565b9050613f9b8282614244565b919050565b6000604051905090565b600067ffffffffffffffff821115613fc557613fc46142ae565b5b613fce826142dd565b9050602081019050919050565b600067ffffffffffffffff821115613ff657613ff56142ae565b5b613fff826142dd565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061403e8261419d565b91506140498361419d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561407e5761407d61427f565b5b828201905092915050565b60006140948261419d565b915061409f8361419d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140d8576140d761427f565b5b828202905092915050565b60006140ee8261419d565b91506140f98361419d565b92508282101561410c5761410b61427f565b5b828203905092915050565b60006141228261417d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061417682614117565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006141bf826141c6565b9050919050565b60006141d18261417d565b9050919050565b82818337600083830152505050565b60005b838110156142055780820151818401526020810190506141ea565b83811115614214576000848401525b50505050565b60006142258261419d565b915060008214156142395761423861427f565b5b600182039050919050565b61424d826142dd565b810181811067ffffffffffffffff8211171561426c5761426b6142ae565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f596f752063616e206d696e742061206d6178206f662032302064756465730000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4d696e696d756d20746f6b656e73206e6f74206d657400000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f496e76616c696420686173680000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420656e6f7567680000000000000000600082015250565b7f54686973206d6f64652069732063757272656e746c7920616374697665000000600082015250565b7f4d6574686f64206e6f7420617661696c61626c65000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206d756c7469706c65206e6f7420616c6c6f77656400000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496420616c7265616479206d696e746564206f722077726f6e67000000000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b61473e81614117565b811461474957600080fd5b50565b61475581614129565b811461476057600080fd5b50565b61476c81614135565b811461477757600080fd5b50565b6147838161413f565b811461478e57600080fd5b50565b61479a8161416b565b81146147a557600080fd5b50565b6147b18161419d565b81146147bc57600080fd5b5056fea2646970667358221220d5d1061eed3826bbb2256057695a55a09c441ea9e529fa720bfb87b2686965e864736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102545760003560e01c80638da5cb5b11610139578063b5ac4c66116100b6578063e2f32fa51161007a578063e2f32fa5146107ec578063e9436b5a14610803578063eaa1d80d1461082c578063f2fde38b14610843578063f3acedd61461086c578063fca3b5aa146108975761025b565b8063b5ac4c661461071d578063c18e018614610746578063cd7da7b61461076f578063d539139314610798578063d547741f146107c35761025b565b8063a2417e29116100fd578063a2417e291461066f578063a64177fb14610698578063a99dd040146106c1578063abbb5a55146106d8578063b5282800146106f45761025b565b80638da5cb5b1461059c57806391d14854146105c757806394cf9a48146106045780639a3db02b1461061b578063a217fddf146106445761025b565b80634311de8f116101d25780635c975abb116101965780635c975abb146104d55780635d83d8fd14610500578063715018a61461052957806378d8a576146105405780638456cb5914610569578063882c56a0146105805761025b565b80634311de8f14610414578063439991871461042b57806347d73b7c146104545780634e58907a1461047f57806356189236146104aa5761025b565b806327fe10aa1161021957806327fe10aa146103575780632f2ff15d14610380578063321279ce146103a957806336568abe146103d45780633f4ba83a146103fd5761025b565b80620e3e921461026057806301ffc9a714610289578063034d1a84146102c657806309f4e414146102ef578063248a9ca31461031a5761025b565b3661025b57005b600080fd5b34801561026c57600080fd5b5061028760048036038101906102829190613692565b6108c0565b005b34801561029557600080fd5b506102b060048036038101906102ab91906135ad565b61099f565b6040516102bd9190613c09565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613692565b610a19565b005b3480156102fb57600080fd5b50610304610aaf565b6040516103119190613c84565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613548565b610ad5565b60405161034e9190613c24565b60405180910390f35b34801561036357600080fd5b5061037e600480360381019061037991906134f6565b610af5565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613571565b610c01565b005b3480156103b557600080fd5b506103be610c2a565b6040516103cb9190613c09565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190613571565b610c3d565b005b34801561040957600080fd5b50610412610cc0565b005b34801561042057600080fd5b50610429610d82565b005b34801561043757600080fd5b50610452600480360381019061044d9190613640565b610e4e565b005b34801561046057600080fd5b50610469610ed4565b6040516104769190613f41565b60405180910390f35b34801561048b57600080fd5b50610494610ede565b6040516104a19190613f41565b60405180910390f35b3480156104b657600080fd5b506104bf610ee4565b6040516104cc9190613f41565b60405180910390f35b3480156104e157600080fd5b506104ea610f8b565b6040516104f79190613c09565b60405180910390f35b34801561050c57600080fd5b50610527600480360381019061052291906135d6565b610fa1565b005b34801561053557600080fd5b5061053e611061565b005b34801561054c57600080fd5b5061056760048036038101906105629190613640565b6110e9565b005b34801561057557600080fd5b5061057e6111f5565b005b61059a600480360381019061059591906136ce565b6112af565b005b3480156105a857600080fd5b506105b1611561565b6040516105be9190613ba9565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190613571565b61158a565b6040516105fb9190613c09565b60405180910390f35b34801561061057600080fd5b506106196115f5565b005b34801561062757600080fd5b50610642600480360381019061063d9190613640565b6116f5565b005b34801561065057600080fd5b50610659611800565b6040516106669190613c24565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613640565b611807565b005b3480156106a457600080fd5b506106bf60048036038101906106ba91906134f6565b611913565b005b3480156106cd57600080fd5b506106d66119d3565b005b6106f260048036038101906106ed9190613640565b611ad3565b005b34801561070057600080fd5b5061071b6004803603810190610716919061351f565b611c5b565b005b34801561072957600080fd5b50610744600480360381019061073f91906135ff565b611cf4565b005b34801561075257600080fd5b5061076d60048036038101906107689190613640565b611e00565b005b34801561077b57600080fd5b506107966004803603810190610791919061351f565b611e86565b005b3480156107a457600080fd5b506107ad61201d565b6040516107ba9190613c24565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613571565b612041565b005b3480156107f857600080fd5b5061080161206a565b005b34801561080f57600080fd5b5061082a60048036038101906108259190613640565b61216a565b005b34801561083857600080fd5b50610841612276565b005b34801561084f57600080fd5b5061086a600480360381019061086591906134f6565b612376565b005b34801561087857600080fd5b5061088161246e565b60405161088e9190613f41565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b991906134f6565b612474565b005b60026001541415610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90613f01565b60405180910390fd5b600260018190555061091661251d565b73ffffffffffffffffffffffffffffffffffffffff16610934611561565b73ffffffffffffffffffffffffffffffffffffffff161461098a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098190613ec1565b60405180910390fd5b6109948282612525565b600180819055505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a125750610a1182612638565b5b9050919050565b60026001541415610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5690613f01565b60405180910390fd5b60026001819055507f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610a9981610a9461251d565b6126a2565b610aa38383612525565b50600180819055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060026000838152602001908152602001600020600101549050919050565b610afd61251d565b73ffffffffffffffffffffffffffffffffffffffff16610b1b611561565b73ffffffffffffffffffffffffffffffffffffffff1614610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6890613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff1660e01b8152600401610bcc9190613ba9565b600060405180830381600087803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b5050505050565b610c0a82610ad5565b610c1b81610c1661251d565b6126a2565b610c25838361273f565b505050565b600660009054906101000a900460ff1681565b610c4561251d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613f21565b60405180910390fd5b610cbc8282612820565b5050565b610cc861251d565b73ffffffffffffffffffffffffffffffffffffffff16610ce6611561565b73ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390613ec1565b60405180910390fd5b610d44612902565b610d4c61290b565b610d54610ee4565b7fd4f3a7440e7c1a0746661e95a58990f285aa34c503220193fd35120d7acc72ed60405160405180910390a2565b610d8a61251d565b73ffffffffffffffffffffffffffffffffffffffff16610da8611561565b73ffffffffffffffffffffffffffffffffffffffff1614610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613ec1565b60405180910390fd5b610e06611561565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e4b573d6000803e3d6000fd5b50565b610e5661251d565b73ffffffffffffffffffffffffffffffffffffffff16610e74611561565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613ec1565b60405180910390fd5b8060088190555050565b6000600554905090565b60085481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663561892366040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4e57600080fd5b505afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190613669565b905090565b60008060009054906101000a900460ff16905090565b610fa961251d565b73ffffffffffffffffffffffffffffffffffffffff16610fc7611561565b73ffffffffffffffffffffffffffffffffffffffff161461101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490613ec1565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61106961251d565b73ffffffffffffffffffffffffffffffffffffffff16611087611561565b73ffffffffffffffffffffffffffffffffffffffff16146110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d490613ec1565b60405180910390fd5b6110e760006129ac565b565b6110f161251d565b73ffffffffffffffffffffffffffffffffffffffff1661110f611561565b73ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166313a1288e826040518263ffffffff1660e01b81526004016111c09190613f41565b600060405180830381600087803b1580156111da57600080fd5b505af11580156111ee573d6000803e3d6000fd5b5050505050565b6111fd61251d565b73ffffffffffffffffffffffffffffffffffffffff1661121b611561565b73ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613ec1565b60405180910390fd5b611279612a71565b611281610ee4565b7fbfbe0eeb9851e98d21f973d30f11b8dacd485bc42ea47fe58b3335603741543f60405160405180910390a2565b6112b7610f8b565b156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90613e61565b60405180910390fd5b6002600154141561133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133490613f01565b60405180910390fd5b6002600181905550600061134f610ee4565b9050808514611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90613ee1565b60405180910390fd5b833410156113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613dc1565b60405180910390fd5b600960009054906101000a900460ff16156114ff57338530866040516020016114029493929190613bc4565b604051602081830303815290604052805190602001208314611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613d81565b60405180910390fd5b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114a461149e85612b13565b84612b43565b73ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190613e21565b60405180910390fd5b611541565b6000611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613e01565b60405180910390fd5b5b611553600161154e61251d565b612525565b506001808190555050505050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115fd61251d565b73ffffffffffffffffffffffffffffffffffffffff1661161b611561565b73ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634311de8f6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b50505050565b6116fd61251d565b73ffffffffffffffffffffffffffffffffffffffff1661171b611561565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662bb788f826040518263ffffffff1660e01b81526004016117cb9190613f41565b600060405180830381600087803b1580156117e557600080fd5b505af11580156117f9573d6000803e3d6000fd5b5050505050565b6000801b81565b61180f61251d565b73ffffffffffffffffffffffffffffffffffffffff1661182d611561565b73ffffffffffffffffffffffffffffffffffffffff1614611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfef954f826040518263ffffffff1660e01b81526004016118de9190613f41565b600060405180830381600087803b1580156118f857600080fd5b505af115801561190c573d6000803e3d6000fd5b5050505050565b61191b61251d565b73ffffffffffffffffffffffffffffffffffffffff16611939611561565b73ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690613ec1565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119db61251d565b73ffffffffffffffffffffffffffffffffffffffff166119f9611561565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ab957600080fd5b505af1158015611acd573d6000803e3d6000fd5b50505050565b60026001541415611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1090613f01565b60405180910390fd5b6002600181905550600060075411611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613ea1565b60405180910390fd5b600754811015611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290613d41565b60405180910390fd5b600454811115611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790613d01565b60405180910390fd5b80600854611bfe9190614089565b341015611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790613dc1565b60405180910390fd5b611c5181611c4c61251d565b612525565b6001808190555050565b611c6361251d565b73ffffffffffffffffffffffffffffffffffffffff16611c81611561565b73ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613ec1565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b611cfc61251d565b73ffffffffffffffffffffffffffffffffffffffff16611d1a611561565b73ffffffffffffffffffffffffffffffffffffffff1614611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166355f804b3826040518263ffffffff1660e01b8152600401611dcb9190613c9f565b600060405180830381600087803b158015611de557600080fd5b505af1158015611df9573d6000803e3d6000fd5b5050505050565b611e0861251d565b73ffffffffffffffffffffffffffffffffffffffff16611e26611561565b73ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390613ec1565b60405180910390fd5b8060078190555050565b611e8e61251d565b73ffffffffffffffffffffffffffffffffffffffff16611eac611561565b73ffffffffffffffffffffffffffffffffffffffff1614611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990613ec1565b60405180910390fd5b600660009054906101000a900460ff1615158115151415611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90613de1565b60405180910390fd5b80600660006101000a81548160ff0219169083151502179055508015611fcb57611f826005611e00565b611f9266b1a2bc2ec50000610e4e565b611f9a610cc0565b7f1c959c617e7123e48694d4c878ab491928d0060619697b23e454c944b4dd913360405160405180910390a161201a565b611fd36111f5565b611fdd6001611e00565b611fed66b1a2bc2ec50000610e4e565b7fdb5308301d67bd373a44f1cf9a16fe7d7f2d7ad34a82412fe73fc0934af3ae1d60405160405180910390a15b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61204a82610ad5565b61205b8161205661251d565b6126a2565b6120658383612820565b505050565b61207261251d565b73ffffffffffffffffffffffffffffffffffffffff16612090611561565b73ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561215057600080fd5b505af1158015612164573d6000803e3d6000fd5b50505050565b61217261251d565b73ffffffffffffffffffffffffffffffffffffffff16612190611561565b73ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c6275255826040518263ffffffff1660e01b81526004016122419190613f41565b600060405180830381600087803b15801561225b57600080fd5b505af115801561226f573d6000803e3d6000fd5b5050505050565b61227e61251d565b73ffffffffffffffffffffffffffffffffffffffff1661229c611561565b73ffffffffffffffffffffffffffffffffffffffff16146122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990613ec1565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561235c57600080fd5b505af1158015612370573d6000803e3d6000fd5b50505050565b61237e61251d565b73ffffffffffffffffffffffffffffffffffffffff1661239c611561565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990613ec1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245990613da1565b60405180910390fd5b61246b816129ac565b50565b60075481565b61247c61251d565b73ffffffffffffffffffffffffffffffffffffffff1661249a611561565b73ffffffffffffffffffffffffffffffffffffffff16146124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e790613ec1565b60405180910390fd5b61251a7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610c01565b50565b600033905090565b600660009054906101000a900460ff16156125a5578073ffffffffffffffffffffffffffffffffffffffff1660018361255c610ee4565b6125669190614033565b61257091906140e3565b7fc07789fac136048b605fef8e227ab89b2e33d8afc9ab4817d374197cd81443d660405160405180910390a36125a4612902565b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635300b44983836040518363ffffffff1660e01b8152600401612602929190613f5c565b600060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126ac828261158a565b61273b576126d18173ffffffffffffffffffffffffffffffffffffffff166014612b6a565b6126df8360001c6020612b6a565b6040516020016126f0929190613b6f565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127329190613c9f565b60405180910390fd5b5050565b612749828261158a565b61281c5760016002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506127c161251d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61282a828261158a565b156128fe5760006002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506128a361251d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b42600581905550565b612913610f8b565b612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294990613d21565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61299561251d565b6040516129a29190613ba9565b60405180910390a1565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a79610f8b565b15612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab090613e61565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612afc61251d565b604051612b099190613ba9565b60405180910390a1565b600081604051602001612b269190613b49565b604051602081830303815290604052805190602001209050919050565b6000806000612b528585612e64565b91509150612b5f81612ee7565b819250505092915050565b606060006002836002612b7d9190614089565b612b879190614033565b67ffffffffffffffff811115612bc6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bf85781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612c56577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612ce0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612d209190614089565b612d2a9190614033565b90505b6001811115612e16577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612d92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612dcf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612e0f9061421a565b9050612d2d565b5060008414612e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5190613ce1565b60405180910390fd5b8091505092915050565b600080604183511415612ea65760008060006020860151925060408601519150606086015160001a9050612e9a87828585613238565b94509450505050612ee0565b604083511415612ed7576000806020850151915060408501519050612ecc868383613345565b935093505050612ee0565b60006002915091505b9250929050565b60006004811115612f21577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612f5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612f6557613235565b60016004811115612f9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612fd8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301090613cc1565b60405180910390fd5b60026004811115613053577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561308c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156130cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c490613d61565b60405180910390fd5b60036004811115613107577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115613140577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317890613e41565b60405180910390fd5b6004808111156131ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156131f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415613234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322b90613e81565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561327357600060039150915061333c565b601b8560ff161415801561328b5750601c8560ff1614155b1561329d57600060049150915061333c565b6000600187878787604051600081526020016040526040516132c29493929190613c3f565b6020604051602081039080840390855afa1580156132e4573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156133335760006001925092505061333c565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061338587828885613238565b935093505050935093915050565b60006133a66133a184613faa565b613f85565b9050828152602081018484840111156133be57600080fd5b6133c98482856141d8565b509392505050565b60006133e46133df84613fdb565b613f85565b9050828152602081018484840111156133fc57600080fd5b6134078482856141d8565b509392505050565b60008135905061341e81614735565b92915050565b6000813590506134338161474c565b92915050565b60008135905061344881614763565b92915050565b60008135905061345d8161477a565b92915050565b600082601f83011261347457600080fd5b8135613484848260208601613393565b91505092915050565b60008135905061349c81614791565b92915050565b600082601f8301126134b357600080fd5b81356134c38482602086016133d1565b91505092915050565b6000813590506134db816147a8565b92915050565b6000815190506134f0816147a8565b92915050565b60006020828403121561350857600080fd5b60006135168482850161340f565b91505092915050565b60006020828403121561353157600080fd5b600061353f84828501613424565b91505092915050565b60006020828403121561355a57600080fd5b600061356884828501613439565b91505092915050565b6000806040838503121561358457600080fd5b600061359285828601613439565b92505060206135a38582860161340f565b9150509250929050565b6000602082840312156135bf57600080fd5b60006135cd8482850161344e565b91505092915050565b6000602082840312156135e857600080fd5b60006135f68482850161348d565b91505092915050565b60006020828403121561361157600080fd5b600082013567ffffffffffffffff81111561362b57600080fd5b613637848285016134a2565b91505092915050565b60006020828403121561365257600080fd5b6000613660848285016134cc565b91505092915050565b60006020828403121561367b57600080fd5b6000613689848285016134e1565b91505092915050565b600080604083850312156136a557600080fd5b60006136b3858286016134cc565b92505060206136c48582860161340f565b9150509250929050565b600080600080608085870312156136e457600080fd5b60006136f2878288016134cc565b9450506020613703878288016134cc565b935050604061371487828801613439565b925050606085013567ffffffffffffffff81111561373157600080fd5b61373d87828801613463565b91505092959194509250565b61375281614117565b82525050565b61376181614129565b82525050565b61377081614135565b82525050565b61378761378282614135565b614275565b82525050565b613796816141b4565b82525050565b60006137a78261400c565b6137b18185614017565b93506137c18185602086016141e7565b6137ca816142dd565b840191505092915050565b60006137e08261400c565b6137ea8185614028565b93506137fa8185602086016141e7565b80840191505092915050565b6000613813601883614017565b915061381e826142ee565b602082019050919050565b6000613836602083614017565b915061384182614317565b602082019050919050565b6000613859601e83614017565b915061386482614340565b602082019050919050565b600061387c601483614017565b915061388782614369565b602082019050919050565b600061389f601683614017565b91506138aa82614392565b602082019050919050565b60006138c2601f83614017565b91506138cd826143bb565b602082019050919050565b60006138e5601c83614028565b91506138f0826143e4565b601c82019050919050565b6000613908600c83614017565b91506139138261440d565b602082019050919050565b600061392b602683614017565b915061393682614436565b604082019050919050565b600061394e601883614017565b915061395982614485565b602082019050919050565b6000613971601d83614017565b915061397c826144ae565b602082019050919050565b6000613994601483614017565b915061399f826144d7565b602082019050919050565b60006139b7601183614017565b91506139c282614500565b602082019050919050565b60006139da602283614017565b91506139e582614529565b604082019050919050565b60006139fd601083614017565b9150613a0882614578565b602082019050919050565b6000613a20602283614017565b9150613a2b826145a1565b604082019050919050565b6000613a43601983614017565b9150613a4e826145f0565b602082019050919050565b6000613a66602083614017565b9150613a7182614619565b602082019050919050565b6000613a89601a83614017565b9150613a9482614642565b602082019050919050565b6000613aac601783614028565b9150613ab78261466b565b601782019050919050565b6000613acf601f83614017565b9150613ada82614694565b602082019050919050565b6000613af2601183614028565b9150613afd826146bd565b601182019050919050565b6000613b15602f83614017565b9150613b20826146e6565b604082019050919050565b613b348161419d565b82525050565b613b43816141a7565b82525050565b6000613b54826138d8565b9150613b608284613776565b60208201915081905092915050565b6000613b7a82613a9f565b9150613b8682856137d5565b9150613b9182613ae5565b9150613b9d82846137d5565b91508190509392505050565b6000602082019050613bbe6000830184613749565b92915050565b6000608082019050613bd96000830187613749565b613be66020830186613b2b565b613bf36040830185613749565b613c006060830184613b2b565b95945050505050565b6000602082019050613c1e6000830184613758565b92915050565b6000602082019050613c396000830184613767565b92915050565b6000608082019050613c546000830187613767565b613c616020830186613b3a565b613c6e6040830185613767565b613c7b6060830184613767565b95945050505050565b6000602082019050613c99600083018461378d565b92915050565b60006020820190508181036000830152613cb9818461379c565b905092915050565b60006020820190508181036000830152613cda81613806565b9050919050565b60006020820190508181036000830152613cfa81613829565b9050919050565b60006020820190508181036000830152613d1a8161384c565b9050919050565b60006020820190508181036000830152613d3a8161386f565b9050919050565b60006020820190508181036000830152613d5a81613892565b9050919050565b60006020820190508181036000830152613d7a816138b5565b9050919050565b60006020820190508181036000830152613d9a816138fb565b9050919050565b60006020820190508181036000830152613dba8161391e565b9050919050565b60006020820190508181036000830152613dda81613941565b9050919050565b60006020820190508181036000830152613dfa81613964565b9050919050565b60006020820190508181036000830152613e1a81613987565b9050919050565b60006020820190508181036000830152613e3a816139aa565b9050919050565b60006020820190508181036000830152613e5a816139cd565b9050919050565b60006020820190508181036000830152613e7a816139f0565b9050919050565b60006020820190508181036000830152613e9a81613a13565b9050919050565b60006020820190508181036000830152613eba81613a36565b9050919050565b60006020820190508181036000830152613eda81613a59565b9050919050565b60006020820190508181036000830152613efa81613a7c565b9050919050565b60006020820190508181036000830152613f1a81613ac2565b9050919050565b60006020820190508181036000830152613f3a81613b08565b9050919050565b6000602082019050613f566000830184613b2b565b92915050565b6000604082019050613f716000830185613b2b565b613f7e6020830184613749565b9392505050565b6000613f8f613fa0565b9050613f9b8282614244565b919050565b6000604051905090565b600067ffffffffffffffff821115613fc557613fc46142ae565b5b613fce826142dd565b9050602081019050919050565b600067ffffffffffffffff821115613ff657613ff56142ae565b5b613fff826142dd565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061403e8261419d565b91506140498361419d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561407e5761407d61427f565b5b828201905092915050565b60006140948261419d565b915061409f8361419d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140d8576140d761427f565b5b828202905092915050565b60006140ee8261419d565b91506140f98361419d565b92508282101561410c5761410b61427f565b5b828203905092915050565b60006141228261417d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061417682614117565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006141bf826141c6565b9050919050565b60006141d18261417d565b9050919050565b82818337600083830152505050565b60005b838110156142055780820151818401526020810190506141ea565b83811115614214576000848401525b50505050565b60006142258261419d565b915060008214156142395761423861427f565b5b600182039050919050565b61424d826142dd565b810181811067ffffffffffffffff8211171561426c5761426b6142ae565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f596f752063616e206d696e742061206d6178206f662032302064756465730000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4d696e696d756d20746f6b656e73206e6f74206d657400000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f496e76616c696420686173680000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420656e6f7567680000000000000000600082015250565b7f54686973206d6f64652069732063757272656e746c7920616374697665000000600082015250565b7f4d6574686f64206e6f7420617661696c61626c65000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206d756c7469706c65206e6f7420616c6c6f77656400000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496420616c7265616479206d696e746564206f722077726f6e67000000000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b61473e81614117565b811461474957600080fd5b50565b61475581614129565b811461476057600080fd5b50565b61476c81614135565b811461477757600080fd5b50565b6147838161413f565b811461478e57600080fd5b50565b61479a8161416b565b81146147a557600080fd5b50565b6147b18161419d565b81146147bc57600080fd5b5056fea2646970667358221220d5d1061eed3826bbb2256057695a55a09c441ea9e529fa720bfb87b2686965e864736f6c63430008040033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.