Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 257 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Swap | 13507288 | 1037 days ago | IN | 0 ETH | 0.07019688 | ||||
Create Swap | 12799094 | 1147 days ago | IN | 0 ETH | 0.0022853 | ||||
Create Swap | 12778709 | 1150 days ago | IN | 0 ETH | 0.01052279 | ||||
Swap NFT | 12741131 | 1156 days ago | IN | 0 ETH | 0.00116524 | ||||
Swap NFT | 12633063 | 1173 days ago | IN | 0 ETH | 0.0024276 | ||||
Swap NFT | 12633051 | 1173 days ago | IN | 0 ETH | 0.0024276 | ||||
Swap NFT | 12606978 | 1177 days ago | IN | 0 ETH | 0.00133092 | ||||
Create Swap | 12596034 | 1179 days ago | IN | 0 ETH | 0.0081618 | ||||
Swap NFT | 12595596 | 1179 days ago | IN | 0 ETH | 0.00216987 | ||||
Create Swap | 12588496 | 1180 days ago | IN | 0 ETH | 0.00620296 | ||||
Create Swap | 12574206 | 1182 days ago | IN | 0 ETH | 0.00550768 | ||||
Swap NFT | 12570142 | 1183 days ago | IN | 0 ETH | 0.00276373 | ||||
Create Swap | 12532530 | 1188 days ago | IN | 0 ETH | 0.00658692 | ||||
Swap NFT | 12521574 | 1190 days ago | IN | 0 ETH | 0.00255313 | ||||
Create Swap | 12518246 | 1191 days ago | IN | 0 ETH | 0.0095092 | ||||
Swap NFT | 12505466 | 1193 days ago | IN | 0 ETH | 0.00349574 | ||||
Swap NFT | 12505429 | 1193 days ago | IN | 0 ETH | 0.0051053 | ||||
Swap NFT | 12497373 | 1194 days ago | IN | 0 ETH | 0.01097444 | ||||
Swap NFT | 12497373 | 1194 days ago | IN | 0 ETH | 0.00860889 | ||||
Create Swap | 12495212 | 1194 days ago | IN | 0 ETH | 0.01142694 | ||||
Swap NFT | 12493696 | 1194 days ago | IN | 0 ETH | 0.00481196 | ||||
Swap NFT | 12487594 | 1195 days ago | IN | 0 ETH | 0.00601379 | ||||
Swap NFT | 12487090 | 1195 days ago | IN | 0 ETH | 0.00463107 | ||||
Swap NFT | 12486895 | 1195 days ago | IN | 0 ETH | 0.0044218 | ||||
Create Swap | 12486694 | 1196 days ago | IN | 0 ETH | 0.01385552 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12108713 | 1254 days ago | 0.01 ETH |
Loading...
Loading
Contract Name:
BondlySwap
Compiler Version
v0.5.0+commit.1d4f565a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-21 */ pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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. * * 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. */ 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() public { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @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); } interface IERC1155 { // Events /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferSingle( address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount ); /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferBatch( address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts ); /** * @dev MUST emit when an approval is updated */ event ApprovalForAll( address indexed _owner, address indexed _operator, bool _approved ); /** * @dev MUST emit when the URI is updated for a token ID * URIs are defined in RFC 3986 * The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema" */ event URI(string _amount, uint256 indexed _id); /** * @notice Transfers amount of an _id from the _from address to the _to address specified * @dev MUST emit TransferSingle event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom( address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data ) external; /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev MUST emit TransferBatch event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if length of `_ids` is not the same as length of `_amounts` * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom( address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data ) external; /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) external view returns (uint256); /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders * @param _ids ID of the Tokens * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @dev MUST emit the ApprovalForAll event on success * @param _operator Address to add to the set of authorized operators * @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external; /** * @notice Queries the approval status of an operator for a given owner * @param _owner The owner of the Tokens * @param _operator Address of authorized operator * @return True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) external view returns (bool); } interface IERC1155Metadata { /***********************************| | Metadata Public Function s | |__________________________________*/ /** * @notice A distinct Uniform Resource Identifier (URI) for a given token. * @dev URIs are defined in RFC 3986. * URIs are assumed to be deterministically generated based on token ID * Token IDs are assumed to be represented in their hex format in URIs * @return URI string */ function uri(uint256 _id) external view returns (string memory); } /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath#mul: OVERFLOW"); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath#div: DIVISION_BY_ZERO"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath#sub: UNDERFLOW"); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath#add: OVERFLOW"); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath#mod: DIVISION_BY_ZERO"); return a % b; } } /** * Copyright 2018 ZeroEx Intl. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Utility library of inline functions on addresses */ library Address { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } } // SPDX-License-Identifier: Unlicensed ///////////////////////////////////////////////// // ____ _ _ // // | __ ) ___ _ __ __| | | | _ _ // // | _ \ / _ \ | '_ \ / _` | | | | | | | // // | |_) | | (_) | | | | | | (_| | | | | |_| | // // |____/ \___/ |_| |_| \__,_| |_| \__, | // // |___/ // ///////////////////////////////////////////////// contract BondlySwap is Ownable { using SafeMath for uint256; using Address for address; // TokenType Definition enum TokenType {T20, T1155, T721} // SwapType Definition enum SwapType {TimedSwap, FixedSwap} struct Collection { uint256[2] cardTokenIds; // amount for T20 address[2] cardContractAddrs; address collectionOwner; TokenType[2] tokenTypes; } struct BSwap { uint256 totalAmount; uint256 currentAmount; uint256 startTime; uint256 endTime; address allowedBidder; bool isPrivate; bool isActive; SwapType swapType; } mapping(uint256 => Collection) public makers; mapping(uint256 => Collection) public targets; mapping(uint256 => BSwap) public listings; uint256 public listIndex; uint256 public platformFee; address payable public feeCollector; uint256 public t20Fee; address public originCreator; // apply 0 fee to our NFTs mapping(address => bool) public whitelist; mapping(address => bool) public supportTokens; bool public emergencyStop; event AddedNewToken(address indexed tokenAddress); event BatchAddedNewToken(address[] tokenAddress); event NFTListed(uint256 listId, address indexed lister); event ListVisibilityChanged(uint256 listId, bool isPrivate); event ListEndTimeChanged(uint256 listId, uint256 endTime); event NFTSwapped(uint256 listId, address indexed buyer, uint256 count); event NFTClosed(uint256 listId, address indexed closer); event WhiteListAdded(address indexed addr); event WhiteListRemoved(address indexed addr); event BatchWhiteListAdded(address[] addr); event BatchWhiteListRemoved(address[] addr); constructor() public { originCreator = msg.sender; emergencyStop = false; listIndex = 0; platformFee = 1; feeCollector = msg.sender; t20Fee = 5; } modifier onlyNotEmergency() { require(emergencyStop == false, "BSwap: emergency stop"); _; } modifier onlyValidList(uint256 listId) { require(listIndex >= listId, "Bswap: list not found"); _; } modifier onlyListOwner(uint256 listId) { require( makers[listId].collectionOwner == msg.sender || isOwner(), "Bswap: not your list" ); _; } function clearEmergency() external onlyOwner { emergencyStop = true; } function stopEmergency() external onlyOwner { emergencyStop = false; } function _addNewToken(address contractAddr) external onlyOwner { require( supportTokens[contractAddr] == false, "BSwap: already supported" ); supportTokens[contractAddr] = true; emit AddedNewToken(contractAddr); } function _batchAddNewToken(address[] calldata contractAddrs) external onlyOwner { for (uint256 i = 0; i < contractAddrs.length; i++) { require( supportTokens[contractAddrs[i]] == false, "BSwap: already supported" ); supportTokens[contractAddrs[i]] = true; } emit BatchAddedNewToken(contractAddrs); } function _sendToken( TokenType tokenType, address contractAddr, uint256 tokenId, address from, address to, uint256 count ) internal { if (tokenType == TokenType.T1155) { IERC1155(contractAddr).safeTransferFrom(from, to, tokenId, count, ""); } else if (tokenType == TokenType.T721) { IERC721(contractAddr).safeTransferFrom(from, to, tokenId, ""); } else { IERC20(contractAddr).transferFrom(from, to, tokenId); } } function createSwap( uint256[3] calldata arrTokenTypes, uint256[3] calldata arrTokenIds, uint256 swapType, uint256 endTime, address[3] calldata arrContractAddr, address bidder, bool _isPrivate, uint256 batchCount ) external payable onlyNotEmergency { bool isWhitelisted = false; uint8 i; require(batchCount >= 1, "BSwap: expected more than 1 count"); for (i = 0; i < 3; i += 1) { if (arrContractAddr[i] == address(0)) break; require( supportTokens[arrContractAddr[i]] == true, "BSwap: not supported" ); if (isWhitelisted == false) { isWhitelisted = whitelist[arrContractAddr[i]]; } if (i == 0) { if (arrTokenTypes[i] == uint256(TokenType.T1155)) { IERC1155 _t1155Contract = IERC1155(arrContractAddr[i]); require( _t1155Contract.balanceOf(msg.sender, arrTokenIds[i]) >= batchCount, "BSwap: Do not have nft" ); require( _t1155Contract.isApprovedForAll( msg.sender, address(this) ) == true, "BSwap: Must be approved" ); } else if (arrTokenTypes[i] == uint256(TokenType.T721)) { require( batchCount == 1, "BSwap: Don't support T721 Batch Swap" ); IERC721 _t721Contract = IERC721(arrContractAddr[i]); require( _t721Contract.ownerOf(arrTokenIds[i]) == msg.sender, "BSwap: Do not have nft" ); require( _t721Contract.isApprovedForAll( msg.sender, address(this) ) == true, "BSwap: Must be approved" ); } } } if (isWhitelisted == false) { require(msg.value >= platformFee.mul(10**16), "BSwap: out of fee"); feeCollector.transfer(msg.value); } uint256 _id = _getNextListID(); _incrementListId(); // maker config makers[_id].collectionOwner = msg.sender; makers[_id].cardContractAddrs[0] = arrContractAddr[0]; makers[_id].cardTokenIds[0] = arrTokenIds[0]; makers[_id].tokenTypes[0] = TokenType(arrTokenTypes[0]); // target config targets[_id].collectionOwner = address(0); for (i = 1; i < 3; i++) { if (arrContractAddr[i] == address(0)) break; targets[_id].cardContractAddrs[i - 1] = arrContractAddr[i]; targets[_id].cardTokenIds[i - 1] = arrTokenIds[i]; targets[_id].tokenTypes[i - 1] = TokenType(arrTokenTypes[i]); } listings[_id].totalAmount = batchCount; listings[_id].currentAmount = batchCount; listings[_id].isPrivate = _isPrivate; listings[_id].startTime = block.timestamp; listings[_id].endTime = block.timestamp + endTime; listings[_id].isActive = true; listings[_id].swapType = SwapType(swapType); listings[_id].allowedBidder = bidder; emit NFTListed(_id, msg.sender); } function swapNFT(uint256 listId, uint256 batchCount) external payable onlyValidList(listId) onlyNotEmergency { require(batchCount >= 1, "BSwap: expected more than 1 count"); require( listings[listId].isPrivate == false || listings[listId].allowedBidder == msg.sender, "Bswap: not whiltelisted" ); require( listings[listId].isActive == true && listings[listId].currentAmount > 0, "BSwap: list is closed" ); require( listings[listId].currentAmount >= batchCount, "BSwap: exceed current supply" ); require( listings[listId].swapType == SwapType.FixedSwap || listings[listId].endTime > block.timestamp, "BSwap: time is over" ); bool isWhitelisted = false; address lister = makers[listId].collectionOwner; address tempCardContract; uint256 tempCardTokenId; TokenType tempCardTokenType; for (uint256 i = 0; i < targets[listId].tokenTypes.length; i++) { tempCardContract = targets[listId].cardContractAddrs[i]; if (tempCardContract == address(0)) break; tempCardTokenType = targets[listId].tokenTypes[i]; tempCardTokenId = targets[listId].cardTokenIds[i]; if (isWhitelisted == false) { isWhitelisted = whitelist[tempCardContract]; } if (tempCardTokenType == TokenType.T1155) { IERC1155 _t1155Contract = IERC1155(tempCardContract); require( _t1155Contract.balanceOf(msg.sender, tempCardTokenId) > 0, "BSwap: Do not have nft" ); require( _t1155Contract.isApprovedForAll( msg.sender, address(this) ) == true, "BSwap: Must be approved" ); _t1155Contract.safeTransferFrom( msg.sender, lister, tempCardTokenId, batchCount, "" ); } else if (tempCardTokenType == TokenType.T721) { IERC721 _t721Contract = IERC721(tempCardContract); require( batchCount == 1, "BSwap: Don't support T721 Batch Swap" ); require( _t721Contract.ownerOf(tempCardTokenId) == msg.sender, "BSwap: Do not have nft" ); require( _t721Contract.isApprovedForAll(msg.sender, address(this)) == true, "BSwap: Must be approved" ); _t721Contract.safeTransferFrom( msg.sender, lister, tempCardTokenId, "" ); } else { IERC20 _t20Contract = IERC20(tempCardContract); uint256 tokenAmount = tempCardTokenId.mul(batchCount); require( _t20Contract.balanceOf(msg.sender) >= tokenAmount, "BSwap: Do not enough funds" ); require( _t20Contract.allowance(msg.sender, address(this)) >= tokenAmount, "BSwap: Must be approved" ); // T20 fee uint256 amountToPlatform = tokenAmount.mul(t20Fee).div(100); uint256 amountToLister = tokenAmount.sub(amountToPlatform); _t20Contract.transferFrom( msg.sender, feeCollector, amountToPlatform ); _t20Contract.transferFrom(msg.sender, lister, amountToLister); } } if (isWhitelisted == false) { isWhitelisted = whitelist[makers[listId].cardContractAddrs[0]]; } if (isWhitelisted == false) { uint256 _fee = msg.value; require(_fee >= platformFee.mul(10**16), "BSwap: out of fee"); feeCollector.transfer(_fee); } _sendToken( makers[listId].tokenTypes[0], makers[listId].cardContractAddrs[0], makers[listId].cardTokenIds[0], lister, msg.sender, batchCount ); listings[listId].currentAmount = listings[listId].currentAmount.sub( batchCount ); if (listings[listId].currentAmount == 0) { listings[listId].isActive = false; } emit NFTSwapped(listId, msg.sender, batchCount); } function closeList(uint256 listId) external onlyValidList(listId) onlyListOwner(listId) { listings[listId].isActive = false; emit NFTClosed(listId, msg.sender); } function setVisibility(uint256 listId, bool _isPrivate) external onlyValidList(listId) onlyListOwner(listId) { listings[listId].isPrivate = _isPrivate; emit ListVisibilityChanged(listId, _isPrivate); } function increaseEndTime(uint256 listId, uint256 amount) external onlyValidList(listId) onlyListOwner(listId) { listings[listId].endTime = listings[listId].endTime.add(amount); emit ListEndTimeChanged(listId, listings[listId].endTime); } function decreaseEndTime(uint256 listId, uint256 amount) external onlyValidList(listId) onlyListOwner(listId) { require( listings[listId].endTime.sub(amount) > block.timestamp, "BSwap: can't revert time" ); listings[listId].endTime = listings[listId].endTime.sub(amount); emit ListEndTimeChanged(listId, listings[listId].endTime); } function addWhiteListAddress(address addr) external onlyOwner { whitelist[addr] = true; emit WhiteListAdded(addr); } function batchAddWhiteListAddress(address[] calldata addr) external onlyOwner { for (uint256 i = 0; i < addr.length; i++) { whitelist[addr[i]] = true; } emit BatchWhiteListAdded(addr); } function removeWhiteListAddress(address addr) external onlyOwner { whitelist[addr] = false; emit WhiteListRemoved(addr); } function batchRemoveWhiteListAddress(address[] calldata addr) external onlyOwner { for (uint256 i = 0; i < addr.length; i++) { whitelist[addr[i]] = false; } emit BatchWhiteListRemoved(addr); } function _setPlatformFee(uint256 _fee) external onlyOwner { platformFee = _fee; } function _setFeeCollector(address payable addr) external onlyOwner { feeCollector = addr; } function _setT20Fee(uint256 _fee) external onlyOwner { t20Fee = _fee; } function getOfferingTokens(uint256 listId) public view onlyValidList(listId) returns ( TokenType[] memory, address[] memory, uint256[] memory ) { Collection memory maker = makers[listId]; address[] memory cardContractAddrs = new address[](maker.cardContractAddrs.length); TokenType[] memory tokenTypes = new TokenType[](maker.tokenTypes.length); uint256[] memory cardTokenIds = new uint256[](maker.cardTokenIds.length); for (uint256 i = 0; i < maker.cardContractAddrs.length; i++) { cardContractAddrs[i] = maker.cardContractAddrs[i]; tokenTypes[i] = maker.tokenTypes[i]; cardTokenIds[i] = maker.cardTokenIds[i]; } return (tokenTypes, cardContractAddrs, cardTokenIds); } function getDesiredTokens(uint256 listId) public view onlyValidList(listId) returns ( TokenType[] memory, address[] memory, uint256[] memory ) { Collection memory target = targets[listId]; address[] memory cardContractAddrs = new address[](target.cardContractAddrs.length); TokenType[] memory tokenTypes = new TokenType[](target.tokenTypes.length); uint256[] memory cardTokenIds = new uint256[](target.cardTokenIds.length); for (uint256 i = 0; i < target.cardContractAddrs.length; i++) { cardContractAddrs[i] = target.cardContractAddrs[i]; tokenTypes[i] = target.tokenTypes[i]; cardTokenIds[i] = target.cardTokenIds[i]; } return (tokenTypes, cardContractAddrs, cardTokenIds); } function isAvailable(uint256 listId) public view onlyValidList(listId) returns (bool) { Collection memory maker = makers[listId]; address lister = maker.collectionOwner; for (uint256 i = 0; i < maker.cardContractAddrs.length; i++) { if (maker.tokenTypes[i] == TokenType.T1155) { IERC1155 _t1155Contract = IERC1155(maker.cardContractAddrs[i]); if ( _t1155Contract.balanceOf(lister, maker.cardTokenIds[i]) == 0 ) { return false; } } else if (maker.tokenTypes[i] == TokenType.T721) { IERC721 _t721Contract = IERC721(maker.cardContractAddrs[i]); if (_t721Contract.ownerOf(maker.cardTokenIds[i]) != lister) { return false; } } } return true; } function isWhitelistedToken(address addr) public view returns (bool) { return whitelist[addr]; } function isSupportedToken(address addr) public view returns (bool) { return supportTokens[addr]; } function isAcive(uint256 listId) public view onlyValidList(listId) returns (bool) { BSwap memory list = listings[listId]; return list.isActive && (list.swapType == SwapType.FixedSwap || list.endTime > block.timestamp); } function isPrivate(uint256 listId) public view onlyValidList(listId) returns (bool) { return listings[listId].isPrivate; } function getSwapType(uint256 listId) public view onlyValidList(listId) returns (uint256) { return uint256(listings[listId].swapType); } function getEndingTime(uint256 listId) public view onlyValidList(listId) returns (uint256) { return listings[listId].endTime; } function getTotalAmount(uint256 listId) public view onlyValidList(listId) returns (uint256) { return listings[listId].totalAmount; } function getCurrentAmount(uint256 listId) public view onlyValidList(listId) returns (uint256) { return listings[listId].currentAmount; } function getStartTime(uint256 listId) public view onlyValidList(listId) returns (uint256) { return listings[listId].startTime; } function getPeriod(uint256 listId) public view onlyValidList(listId) returns (uint256) { if (listings[listId].endTime <= block.timestamp) return 0; return listings[listId].endTime - block.timestamp; } function isAllowedForList(uint256 listId) public view onlyValidList(listId) returns (bool) { return listings[listId].allowedBidder == msg.sender; } function getOwnerOfList(uint256 listId) public view onlyValidList(listId) returns (address) { return makers[listId].collectionOwner; } function _getNextListID() internal view returns (uint256) { return listIndex + 1; } function _incrementListId() internal { listIndex = listIndex.add(1); } function transferERC20(address erc20) external { require(msg.sender == originCreator, "BSwap: you are not admin"); uint256 amount = IERC20(erc20).balanceOf(address(this)); IERC20(erc20).transfer(msg.sender, amount); } function transferETH() external { require(msg.sender == originCreator, "BSwap: you are not admin"); msg.sender.transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getOwnerOfList","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"targets","outputs":[{"name":"collectionOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"originCreator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isSupportedToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"isPrivate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"platformFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getSwapType","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"makers","outputs":[{"name":"collectionOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"_setFeeCollector","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"isAvailable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"listId","type":"uint256"}],"name":"closeList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getCurrentAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"_setT20Fee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"emergencyStop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listId","type":"uint256"},{"name":"batchCount","type":"uint256"}],"name":"swapNFT","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getEndingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"arrTokenTypes","type":"uint256[3]"},{"name":"arrTokenIds","type":"uint256[3]"},{"name":"swapType","type":"uint256"},{"name":"endTime","type":"uint256"},{"name":"arrContractAddr","type":"address[3]"},{"name":"bidder","type":"address"},{"name":"_isPrivate","type":"bool"},{"name":"batchCount","type":"uint256"}],"name":"createSwap","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"listId","type":"uint256"},{"name":"amount","type":"uint256"}],"name":"increaseEndTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addWhiteListAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getOfferingTokens","outputs":[{"name":"","type":"uint8[]"},{"name":"","type":"address[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"supportTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address[]"}],"name":"batchAddWhiteListAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"t20Fee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"stopEmergency","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address[]"}],"name":"batchRemoveWhiteListAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"listIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contractAddr","type":"address"}],"name":"_addNewToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isWhitelistedToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"listId","type":"uint256"},{"name":"amount","type":"uint256"}],"name":"decreaseEndTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"contractAddrs","type":"address[]"}],"name":"_batchAddNewToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeCollector","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"clearEmergency","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeWhiteListAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"erc20","type":"address"}],"name":"transferERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"listings","outputs":[{"name":"totalAmount","type":"uint256"},{"name":"currentAmount","type":"uint256"},{"name":"startTime","type":"uint256"},{"name":"endTime","type":"uint256"},{"name":"allowedBidder","type":"address"},{"name":"isPrivate","type":"bool"},{"name":"isActive","type":"bool"},{"name":"swapType","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"transferETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listId","type":"uint256"},{"name":"_isPrivate","type":"bool"}],"name":"setVisibility","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getDesiredTokens","outputs":[{"name":"","type":"uint8[]"},{"name":"","type":"address[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"_setPlatformFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"getTotalAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"isAllowedForList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"listId","type":"uint256"}],"name":"isAcive","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenAddress","type":"address"}],"name":"AddedNewToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenAddress","type":"address[]"}],"name":"BatchAddedNewToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"listId","type":"uint256"},{"indexed":true,"name":"lister","type":"address"}],"name":"NFTListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"listId","type":"uint256"},{"indexed":false,"name":"isPrivate","type":"bool"}],"name":"ListVisibilityChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"listId","type":"uint256"},{"indexed":false,"name":"endTime","type":"uint256"}],"name":"ListEndTimeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"listId","type":"uint256"},{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"count","type":"uint256"}],"name":"NFTSwapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"listId","type":"uint256"},{"indexed":true,"name":"closer","type":"address"}],"name":"NFTClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"WhiteListAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"WhiteListRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address[]"}],"name":"BatchWhiteListAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address[]"}],"name":"BatchWhiteListRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600062000027640100000000620000b2810204565b60008054600160a060020a031916600160a060020a0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506008805433600160a060020a03199182168117909255600b805460ff19169055600060045560016005908155600680549092169092179055600755620000b6565b3390565b6149af80620000c66000396000f3fe6080604052600436106102365763ffffffff60e060020a6000350416620e92a0811461023b5780630a39ce021461028157806311a42652146102ab578063240028e8146102c057806324d45d9e1461030757806326232a2e146103315780632c09555a1461035857806333f02fa214610382578063343d048f146103ac5780633a178d99146103e157806341c743831461040b5780634b2c07061461043557806356e78dc31461045f578063581e807e1461048957806363a599a4146104b3578063715018a6146104c857806372841a69146104dd5780637a91823b146105005780637b0b281a1461052a5780637ec41a74146105775780638164c309146105a75780638323c81c146105da5780638a0737a0146106e25780638da5cb5b146107155780638f32d59b1461072a57806392949a781461073f578063977d03b1146107bc57806397db7edb146107d157806398b0414f146107e65780639b19251a146108635780639c73815814610896578063aad7d572146108ab578063ab37f486146108de578063ab634bf614610911578063bb70680914610941578063bc2be1be146109be578063c415b95c146109e8578063c7a5a847146109fd578063ce114c2514610a12578063d1d6b73914610a45578063de74e57b14610a78578063e28d717b14610b07578063e3f54d2d14610b1c578063e6f9e63e14610b4e578063ec2757ce14610b78578063f0e4066214610ba2578063f2fde38b14610bcc578063f35c46eb14610bff578063f98a3f3714610c29575b600080fd5b34801561024757600080fd5b506102656004803603602081101561025e57600080fd5b5035610c53565b60408051600160a060020a039092168252519081900360200190f35b34801561028d57600080fd5b50610265600480360360208110156102a457600080fd5b5035610cc4565b3480156102b757600080fd5b50610265610ce2565b3480156102cc57600080fd5b506102f3600480360360208110156102e357600080fd5b5035600160a060020a0316610cf1565b604080519115158252519081900360200190f35b34801561031357600080fd5b506102f36004803603602081101561032a57600080fd5b5035610d0f565b34801561033d57600080fd5b50610346610d7d565b60408051918252519081900360200190f35b34801561036457600080fd5b506103466004803603602081101561037b57600080fd5b5035610d83565b34801561038e57600080fd5b50610265600480360360208110156103a557600080fd5b5035610dfe565b3480156103b857600080fd5b506103df600480360360208110156103cf57600080fd5b5035600160a060020a0316610e1c565b005b3480156103ed57600080fd5b506102f36004803603602081101561040457600080fd5b5035610e8a565b34801561041757600080fd5b506103df6004803603602081101561042e57600080fd5b50356111ef565b34801561044157600080fd5b506103466004803603602081101561045857600080fd5b5035611314565b34801561046b57600080fd5b506103466004803603602081101561048257600080fd5b503561139e565b34801561049557600080fd5b506103df600480360360208110156104ac57600080fd5b5035611402565b3480156104bf57600080fd5b506102f3611453565b3480156104d457600080fd5b506103df61145c565b6103df600480360360408110156104f357600080fd5b50803590602001356114f2565b34801561050c57600080fd5b506103466004803603602081101561052357600080fd5b5035612354565b6103df60048036036101c081101561054157600080fd5b506060810160c082013560e08301356101008401600160a060020a036101608601351661018086013515156101a08701356123b9565b34801561058357600080fd5b506103df6004803603604081101561059a57600080fd5b5080359060200135612e15565b3480156105b357600080fd5b506103df600480360360208110156105ca57600080fd5b5035600160a060020a0316612f4a565b3480156105e657600080fd5b50610604600480360360208110156105fd57600080fd5b5035612fe2565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561064c578181015183820152602001610634565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561068b578181015183820152602001610673565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156106ca5781810151838201526020016106b2565b50505050905001965050505050505060405180910390f35b3480156106ee57600080fd5b506102f36004803603602081101561070557600080fd5b5035600160a060020a031661326b565b34801561072157600080fd5b50610265613280565b34801561073657600080fd5b506102f361328f565b34801561074b57600080fd5b506103df6004803603602081101561076257600080fd5b81019060208101813564010000000081111561077d57600080fd5b82018360208201111561078f57600080fd5b803590602001918460208302840111640100000000831117156107b157600080fd5b5090925090506132b3565b3480156107c857600080fd5b506103466133bd565b3480156107dd57600080fd5b506103df6133c3565b3480156107f257600080fd5b506103df6004803603602081101561080957600080fd5b81019060208101813564010000000081111561082457600080fd5b82018360208201111561083657600080fd5b8035906020019184602083028401116401000000008311171561085857600080fd5b50909250905061341b565b34801561086f57600080fd5b506102f36004803603602081101561088657600080fd5b5035600160a060020a0316613524565b3480156108a257600080fd5b50610346613539565b3480156108b757600080fd5b506103df600480360360208110156108ce57600080fd5b5035600160a060020a031661353f565b3480156108ea57600080fd5b506102f36004803603602081101561090157600080fd5b5035600160a060020a0316613648565b34801561091d57600080fd5b506103df6004803603604081101561093457600080fd5b5080359060200135613666565b34801561094d57600080fd5b506103df6004803603602081101561096457600080fd5b81019060208101813564010000000081111561097f57600080fd5b82018360208201111561099157600080fd5b803590602001918460208302840111640100000000831117156109b357600080fd5b5090925090506137bf565b3480156109ca57600080fd5b50610346600480360360208110156109e157600080fd5b5035613954565b3480156109f457600080fd5b506102656139b8565b348015610a0957600080fd5b506103df6139c7565b348015610a1e57600080fd5b506103df60048036036020811015610a3557600080fd5b5035600160a060020a0316613a22565b348015610a5157600080fd5b506103df60048036036020811015610a6857600080fd5b5035600160a060020a0316613ab7565b348015610a8457600080fd5b50610aa260048036036020811015610a9b57600080fd5b5035613c44565b604080518981526020810189905290810187905260608101869052600160a060020a038516608082015283151560a082015282151560c082015260e08101826001811115610aec57fe5b60ff1681526020019850505050505050505060405180910390f35b348015610b1357600080fd5b506103df613cb0565b348015610b2857600080fd5b506103df60048036036040811015610b3f57600080fd5b50803590602001351515613d42565b348015610b5a57600080fd5b5061060460048036036020811015610b7157600080fd5b5035613e7b565b348015610b8457600080fd5b506103df60048036036020811015610b9b57600080fd5b50356140f5565b348015610bae57600080fd5b5061034660048036036020811015610bc557600080fd5b5035614146565b348015610bd857600080fd5b506103df60048036036020811015610bef57600080fd5b5035600160a060020a03166141a7565b348015610c0b57600080fd5b506102f360048036036020811015610c2257600080fd5b50356141fc565b348015610c3557600080fd5b506102f360048036036020811015610c4c57600080fd5b503561426b565b6000818060045410151515610ca0576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b600083815260016020526040902060040154600160a060020a031691505b50919050565b600260205260009081526040902060040154600160a060020a031681565b600854600160a060020a031681565b600160a060020a03166000908152600a602052604090205460ff1690565b6000818060045410151515610d5c576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b505060009081526003602052604090206004015460a060020a900460ff1690565b60055481565b6000818060045410151515610dd0576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b60008381526003602052604090206004015460b060020a900460ff166001811115610df757fe5b9392505050565b600160205260009081526040902060040154600160a060020a031681565b610e2461328f565b1515610e68576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b6000818060045410151515610ed7576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b610edf61484a565b60008481526001602052604090819020815160c0810190925281608081018260028282826020028201915b815481526020019060010190808311610f0a57505050918352505060408051808201918290526020909201919060028481019182845b8154600160a060020a03168152600190910190602001808311610f405750505091835250506004820154600160a060020a03166020820152604080518082018083529190920191906005840190600290826000855b82829054906101000a900460ff166002811115610fae57fe5b815260206001928301818104948501949093039092029101808411610f95575050509290935250505050604081015190915060005b60028110156111e357600160608401518260028110610ffe57fe5b6020020151600281111561100e57fe5b14156110e9576020830151600090826002811061102757fe5b6020020151905080600160a060020a031662fdd58e8486600001518560028110151561104f57fe5b60200201516040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a031681526020018281526020019250505060206040518083038186803b1580156110a457600080fd5b505afa1580156110b8573d6000803e3d6000fd5b505050506040513d60208110156110ce57600080fd5b505115156110e3576000955050505050610cbe565b506111db565b6002606084015182600281106110fb57fe5b6020020151600281111561110b57fe5b14156111db576020830151600090826002811061112457fe5b6020020151905082600160a060020a031681600160a060020a0316636352211e86600001518560028110151561115657fe5b60200201516040518263ffffffff1660e060020a0281526004018082815260200191505060206040518083038186803b15801561119257600080fd5b505afa1580156111a6573d6000803e3d6000fd5b505050506040513d60208110156111bc57600080fd5b5051600160a060020a0316146111d9576000955050505050610cbe565b505b600101610fe3565b50600195945050505050565b80806004541015151561123a576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000828152600160205260409020600401548290600160a060020a0316331480611267575061126761328f565b15156112ab576040805160e560020a62461bcd0281526020600482015260146024820152600080516020614964833981519152604482015290519081900360640190fd5b600083815260036020908152604091829020600401805475ff000000000000000000000000000000000000000000191690558151858152915133927f283d1475b22f68f783a3c5908490bf2ee4d4932a06c3a094a8f7511a9a80522992908290030190a2505050565b6000818060045410151515611361576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000838152600360208190526040909120015442106113835760009150610cbe565b50506000908152600360208190526040909120015442900390565b60008180600454101515156113eb576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b505060009081526003602052604090206001015490565b61140a61328f565b151561144e576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600755565b600b5460ff1681565b61146461328f565b15156114a8576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054600160a060020a0319169055565b81806004541015151561153d576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b600b5460ff1615611598576040805160e560020a62461bcd02815260206004820152601560248201527f42537761703a20656d657267656e63792073746f700000000000000000000000604482015290519081900360640190fd5b6001821015611617576040805160e560020a62461bcd02815260206004820152602160248201527f42537761703a206578706563746564206d6f7265207468616e203120636f756e60448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008381526003602052604090206004015460a060020a900460ff1615806116585750600083815260036020526040902060040154600160a060020a031633145b15156116ae576040805160e560020a62461bcd02815260206004820152601760248201527f42737761703a206e6f74207768696c74656c6973746564000000000000000000604482015290519081900360640190fd5b6000838152600360205260409020600401547501000000000000000000000000000000000000000000900460ff16151560011480156116fc5750600083815260036020526040812060010154115b1515611752576040805160e560020a62461bcd02815260206004820152601560248201527f42537761703a206c69737420697320636c6f7365640000000000000000000000604482015290519081900360640190fd5b6000838152600360205260409020600101548211156117bb576040805160e560020a62461bcd02815260206004820152601c60248201527f42537761703a206578636565642063757272656e7420737570706c7900000000604482015290519081900360640190fd5b600160008481526003602052604090206004015460b060020a900460ff1660018111156117e457fe5b148061180157506000838152600360208190526040909120015442105b1515611857576040805160e560020a62461bcd02815260206004820152601360248201527f42537761703a2074696d65206973206f76657200000000000000000000000000604482015290519081900360640190fd5b600083815260016020526040812060040154600160a060020a0316818080805b600089905260026020819052811015612182576000898152600260208190526040909120810190829081106118a857fe5b0154600160a060020a031693508315156118c157612182565b600089815260026020819052604090912060050190829081106118e057fe5b6020808204929092015460008c815260029384905260409020601f9092166101000a900460ff169350908290811061191457fe5b0154925085151561193e57600160a060020a03841660009081526009602052604090205460ff1695505b600182600281111561194c57fe5b1415611b8d57604080517efdd58e0000000000000000000000000000000000000000000000000000000081523360048201526024810185905290518591600091600160a060020a0384169162fdd58e916044808301926020929190829003018186803b1580156119bb57600080fd5b505afa1580156119cf573d6000803e3d6000fd5b505050506040513d60208110156119e557600080fd5b505111611a2a576040805160e560020a62461bcd02815260206004820152601660248201526000805160206148e4833981519152604482015290519081900360640190fd5b6040805160e060020a63e985e9c50281523360048201523060248201529051600160a060020a0383169163e985e9c5916044808301926020929190829003018186803b158015611a7957600080fd5b505afa158015611a8d573d6000803e3d6000fd5b505050506040513d6020811015611aa357600080fd5b50511515600114611aec576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b604080517ff242432a000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03888116602483015260448201879052606482018c905260a06084830152600060a4830181905292519084169263f242432a9260e4808201939182900301818387803b158015611b6f57600080fd5b505af1158015611b83573d6000803e3d6000fd5b505050505061217a565b6002826002811115611b9b57fe5b1415611e26578360018914611c1f576040805160e560020a62461bcd028152602060048201526024808201527f42537761703a20446f6e277420737570706f727420543732312042617463682060448201527f5377617000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a031681600160a060020a0316636352211e866040518263ffffffff1660e060020a0281526004018082815260200191505060206040518083038186803b158015611c7057600080fd5b505afa158015611c84573d6000803e3d6000fd5b505050506040513d6020811015611c9a57600080fd5b5051600160a060020a031614611ce8576040805160e560020a62461bcd02815260206004820152601660248201526000805160206148e4833981519152604482015290519081900360640190fd5b6040805160e060020a63e985e9c50281523360048201523060248201529051600160a060020a0383169163e985e9c5916044808301926020929190829003018186803b158015611d3757600080fd5b505afa158015611d4b573d6000803e3d6000fd5b505050506040513d6020811015611d6157600080fd5b50511515600114611daa576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b604080517fb88d4fde000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038881166024830152604482018790526080606483015260006084830181905292519084169263b88d4fde9260c4808201939182900301818387803b158015611b6f57600080fd5b836000611e39858b63ffffffff6143a716565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290519192508291600160a060020a038516916370a08231916024808301926020929190829003018186803b158015611e9d57600080fd5b505afa158015611eb1573d6000803e3d6000fd5b505050506040513d6020811015611ec757600080fd5b50511015611f1f576040805160e560020a62461bcd02815260206004820152601a60248201527f42537761703a20446f206e6f7420656e6f7567682066756e6473000000000000604482015290519081900360640190fd5b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290518291600160a060020a0385169163dd62ed3e91604480820192602092909190829003018186803b158015611f8757600080fd5b505afa158015611f9b573d6000803e3d6000fd5b505050506040513d6020811015611fb157600080fd5b50511015611ff7576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b600061201f6064612013600754856143a790919063ffffffff16565b9063ffffffff61442616565b90506000612033838363ffffffff61449516565b600654604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a039283166024820152604481018690529051929350908616916323b872dd916064808201926020929091908290030181600087803b1580156120ab57600080fd5b505af11580156120bf573d6000803e3d6000fd5b505050506040513d60208110156120d557600080fd5b5050604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038b81166024830152604482018490529151918616916323b872dd916064808201926020929091908290030181600087803b15801561214957600080fd5b505af115801561215d573d6000803e3d6000fd5b505050506040513d602081101561217357600080fd5b5050505050505b600101611877565b508415156121b857600088815260016020908152604080832060020154600160a060020a03168352600990915290205460ff1694505b84151561226f5760055434906121db90662386f26fc1000063ffffffff6143a716565b811015612232576040805160e560020a62461bcd02815260206004820152601160248201527f42537761703a206f7574206f6620666565000000000000000000000000000000604482015290519081900360640190fd5b600654604051600160a060020a039091169082156108fc029083906000818181858888f1935050505015801561226c573d6000803e3d6000fd5b50505b60008881526001602052604090206005810154600282015491546122a59260ff90921691600160a060020a03169087338c6144f5565b6000888152600360205260409020600101546122c7908863ffffffff61449516565b60008981526003602052604090206001018190551515612310576000888152600360205260409020600401805475ff000000000000000000000000000000000000000000191690555b6040805189815260208101899052815133927f48c590513d82d50a3e2080e988b646660a92929160055a158d25396eba47987c928290030190a25050505050505050565b60008180600454101515156123a1576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b50506000908152600360208190526040909120015490565b600b5460ff1615612414576040805160e560020a62461bcd02815260206004820152601560248201527f42537761703a20656d657267656e63792073746f700000000000000000000000604482015290519081900360640190fd5b6000806001831015612496576040805160e560020a62461bcd02815260206004820152602160248201527f42537761703a206578706563746564206d6f7265207468616e203120636f756e60448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5060005b60038160ff161015612a075760008660ff8316600381106124b757fe5b6020020135600160a060020a0316600160a060020a031614156124d957612a07565b600a60008760ff8416600381106124ec57fe5b60209081029190910135600160a060020a0316825281019190915260400160002054600160ff90911615151461256c576040805160e560020a62461bcd02815260206004820152601460248201527f42537761703a206e6f7420737570706f72746564000000000000000000000000604482015290519081900360640190fd5b8115156125ae57600960008760ff84166003811061258657fe5b60209081029190910135600160a060020a031682528101919091526040016000205460ff1691505b60ff811615156129ff5760018a60ff8316600381106125c957fe5b602002013514156127a35760008660ff8316600381106125e557fe5b6020020135600160a060020a031690508381600160a060020a031662fdd58e338d8660ff1660038110151561261657fe5b60200201356040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a031681526020018281526020019250505060206040518083038186803b15801561266b57600080fd5b505afa15801561267f573d6000803e3d6000fd5b505050506040513d602081101561269557600080fd5b505110156126db576040805160e560020a62461bcd02815260206004820152601660248201526000805160206148e4833981519152604482015290519081900360640190fd5b6040805160e060020a63e985e9c50281523360048201523060248201529051600160a060020a0383169163e985e9c5916044808301926020929190829003018186803b15801561272a57600080fd5b505afa15801561273e573d6000803e3d6000fd5b505050506040513d602081101561275457600080fd5b5051151560011461279d576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b506129ff565b60028a60ff8316600381106127b457fe5b602002013514156129ff576001831461283c576040805160e560020a62461bcd028152602060048201526024808201527f42537761703a20446f6e277420737570706f727420543732312042617463682060448201527f5377617000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008660ff83166003811061284d57fe5b6020020135600160a060020a0316905033600160a060020a031681600160a060020a0316636352211e8c8560ff1660038110151561288757fe5b60200201356040518263ffffffff1660e060020a0281526004018082815260200191505060206040518083038186803b1580156128c357600080fd5b505afa1580156128d7573d6000803e3d6000fd5b505050506040513d60208110156128ed57600080fd5b5051600160a060020a03161461293b576040805160e560020a62461bcd02815260206004820152601660248201526000805160206148e4833981519152604482015290519081900360640190fd5b6040805160e060020a63e985e9c50281523360048201523060248201529051600160a060020a0383169163e985e9c5916044808301926020929190829003018186803b15801561298a57600080fd5b505afa15801561299e573d6000803e3d6000fd5b505050506040513d60208110156129b457600080fd5b505115156001146129fd576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b505b60010161249a565b811515612aba57600554612a2890662386f26fc1000063ffffffff6143a716565b341015612a7f576040805160e560020a62461bcd02815260206004820152601160248201527f42537761703a206f7574206f6620666565000000000000000000000000000000604482015290519081900360640190fd5b600654604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015612ab8573d6000803e3d6000fd5b505b6000612ac46146e6565b9050612ace6146ef565b600081815260016020526040902060048101805433600160a060020a03199182161790915560028083018054909216600160a060020a038b3516179091558b359091558b3590811115612b1d57fe5b60008281526001602081905260409091206005018054909160ff1990911690836002811115612b4857fe5b021790555060008181526002602052604090206004018054600160a060020a0319169055600191505b60038260ff161015612ccc5760008760ff841660038110612b8e57fe5b6020020135600160a060020a0316600160a060020a03161415612bb057612ccc565b8660ff831660038110612bbf57fe5b6020020135600160a060020a0316600260008381526020019081526020016000206002016001840360ff16600281101515612bf657fe5b018054600160a060020a031916600160a060020a03929092169190911790558960ff831660038110612c2457fe5b6020020135600260008381526020019081526020016000206000016001840360ff16600281101515612c5257fe5b01558a60ff831660038110612c6357fe5b60200201356002811115612c7357fe5b60008281526002602081905260409091206005019060ff600019860116908110612c9957fe5b602091828204019190066101000a81548160ff02191690836002811115612cbc57fe5b0217905550600190910190612b71565b6000818152600360208190526040909120858155600180820187905560048201805442600285018190558d019390940192909255750100000000000000000000000000000000000000000074ff00000000000000000000000000000000000000001990931660a060020a891515021775ff00000000000000000000000000000000000000000019169290921790558990811115612d6557fe5b6000828152600360205260409020600401805476ff00000000000000000000000000000000000000000000191660b060020a836001811115612da357fe5b02179055506000818152600360209081526040918290206004018054600160a060020a031916600160a060020a038a161790558151838152915133927f98c3ed9c2c550f09991c73938ded09d48dc234d8195358cd4b52a2af0124d29992908290030190a25050505050505050505050565b818060045410151515612e60576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000838152600160205260409020600401548390600160a060020a0316331480612e8d5750612e8d61328f565b1515612ed1576040805160e560020a62461bcd0281526020600482015260146024820152600080516020614964833981519152604482015290519081900360640190fd5b60008481526003602081905260409091200154612ef4908463ffffffff61470816565b60008581526003602081815260409283902090910183905581518781529081019290925280517fc5b87ea5b1b275d70fc5ae49f9ded1d7c1ffee5de02e683535b29869566af7299281900390910190a150505050565b612f5261328f565b1515612f96576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600160a060020a038116600081815260096020526040808220805460ff19166001179055517fbf309892cce19064e6d63ba3339f893b199c8cb5041fc6731702cb18e805d2919190a250565b6060806060838060045410151515613032576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b61303a61484a565b60008681526001602052604090819020815160c0810190925281608081018260028282826020028201915b81548152602001906001019080831161306557505050918352505060408051808201918290526020909201919060028481019182845b8154600160a060020a0316815260019091019060200180831161309b5750505091835250506004820154600160a060020a03166020820152604080518082018083529190920191906005840190600290826000855b82829054906101000a900460ff16600281111561310957fe5b8152602060019283018181049485019490930390920291018084116130f057505050929093525050604080516002808252606080830184529596509093509150602083019080388339505060408051600280825260608083018452949550909250906020830190803883395050604080516002808252606080830184529495509092509060208301908038833901905050905060005b600281101561325c57602085015181600281106131b857fe5b602002015184828151811015156131cb57fe5b600160a060020a03909216602092830290910190910152606085015181600281106131f257fe5b6020020151838281518110151561320557fe5b90602001906020020190600281111561321a57fe5b9081600281111561322757fe5b9052508451816002811061323757fe5b6020020151828281518110151561324a57fe5b6020908102909101015260010161319f565b50909891975095509350505050565b600a6020526000908152604090205460ff1681565b600054600160a060020a031690565b60008054600160a060020a03166132a4614765565b600160a060020a031614905090565b6132bb61328f565b15156132ff576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60005b818110156133555760016009600085858581811061331c57fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff1916911515919091179055600101613302565b507f2a4e6cafbe4194b0da40f94838261b2f5af73b64cc96c69e7566bc1da5cc0412828260405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a15050565b60075481565b6133cb61328f565b151561340f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600b805460ff19169055565b61342361328f565b1515613467576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60005b818110156134bc57600060098185858581811061348357fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010161346a565b507fdf4b036ff49865adcf06bf48665bd267a6a71a28166e3f554866a3a3c0a3a440828260405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a15050565b60096020526000908152604090205460ff1681565b60045481565b61354761328f565b151561358b576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff16156135fc576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a20616c726561647920737570706f727465640000000000000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19166001179055517f024dd2112a0499292da76a253ebfdf7b0bfb5db4c429f3a31a60658653ae55e39190a250565b600160a060020a031660009081526009602052604090205460ff1690565b8180600454101515156136b1576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000838152600160205260409020600401548390600160a060020a03163314806136de57506136de61328f565b1515613722576040805160e560020a62461bcd0281526020600482015260146024820152600080516020614964833981519152604482015290519081900360640190fd5b600084815260036020819052604090912001544290613747908563ffffffff61449516565b1161379c576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a2063616e2774207265766572742074696d650000000000000000604482015290519081900360640190fd5b60008481526003602081905260409091200154612ef4908463ffffffff61449516565b6137c761328f565b151561380b576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60005b818110156138ec57600a600084848481811061382657fe5b60209081029290920135600160a060020a03168352508101919091526040016000205460ff16156138a1576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a20616c726561647920737570706f727465640000000000000000604482015290519081900360640190fd5b6001600a60008585858181106138b357fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010161380e565b507faa2ced0d34653039d5d3e19701d97c952213913b7478eb237e3dce03e797aed9828260405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a15050565b60008180600454101515156139a1576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b505060009081526003602052604090206002015490565b600654600160a060020a031681565b6139cf61328f565b1515613a13576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600b805460ff19166001179055565b613a2a61328f565b1515613a6e576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600160a060020a038116600081815260096020526040808220805460ff19169055517fdb0d54f6e7ff4a52bdc49b4c8d9ff245f409fee25c2c0a0a72ece14e2ddf4cfc9190a250565b600854600160a060020a03163314613b19576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a20796f7520617265206e6f742061646d696e0000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038416916370a0823191602480820192602092909190829003018186803b158015613b7c57600080fd5b505afa158015613b90573d6000803e3d6000fd5b505050506040513d6020811015613ba657600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b158015613c1457600080fd5b505af1158015613c28573d6000803e3d6000fd5b505050506040513d6020811015613c3e57600080fd5b50505050565b600360208190526000918252604090912080546001820154600283015493830154600490930154919390929091600160a060020a0381169060ff60a060020a82048116917501000000000000000000000000000000000000000000810482169160b060020a9091041688565b600854600160a060020a03163314613d12576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a20796f7520617265206e6f742061646d696e0000000000000000604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f19350505050158015613d3f573d6000803e3d6000fd5b50565b818060045410151515613d8d576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000838152600160205260409020600401548390600160a060020a0316331480613dba5750613dba61328f565b1515613dfe576040805160e560020a62461bcd0281526020600482015260146024820152600080516020614964833981519152604482015290519081900360640190fd5b600084815260036020908152604091829020600401805474ff0000000000000000000000000000000000000000191660a060020a8715159081029190911790915582518781529182015281517f7fed638a008696906ac288c73419920821701a108aaa2ff9f8cbcf509d94cb29929181900390910190a150505050565b6060806060838060045410151515613ecb576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b613ed361484a565b600086815260026020819052604091829020825160c081019384905292909183916080830191849182845b815481526020019060010190808311613efe57505050918352505060408051808201918290526020909201919060028481019182845b8154600160a060020a03168152600190910190602001808311613f345750505091835250506004820154600160a060020a03166020820152604080518082018083529190920191906005840190600290826000855b82829054906101000a900460ff166002811115613fa257fe5b815260206001928301818104948501949093039092029101808411613f8957505050929093525050604080516002808252606080830184529596509093509150602083019080388339505060408051600280825260608083018452949550909250906020830190803883395050604080516002808252606080830184529495509092509060208301908038833901905050905060005b600281101561325c576020850151816002811061405157fe5b6020020151848281518110151561406457fe5b600160a060020a039092166020928302909101909101526060850151816002811061408b57fe5b6020020151838281518110151561409e57fe5b9060200190602002019060028111156140b357fe5b908160028111156140c057fe5b905250845181600281106140d057fe5b602002015182828151811015156140e357fe5b60209081029091010152600101614038565b6140fd61328f565b1515614141576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600555565b6000818060045410151515614193576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b505060009081526003602052604090205490565b6141af61328f565b15156141f3576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b613d3f81614769565b6000818060045410151515614249576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b5050600090815260036020526040902060040154600160a060020a0316331490565b60008180600454101515156142b8576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6142c0614884565b60008481526003602081815260409283902083516101008101855281548152600180830154938201939093526002820154948101949094529182015460608401526004820154600160a060020a038116608085015260ff60a060020a82048116151560a0860152750100000000000000000000000000000000000000000082048116151560c086015260e085019260b060020a909204169081111561436157fe5b600181111561436c57fe5b8152505090508060c00151801561439f575060018160e00151600181111561439057fe5b148061439f5750428160600151115b949350505050565b60008215156143b857506000614420565b8282028284828115156143c757fe5b041461441d576040805160e560020a62461bcd02815260206004820152601660248201527f536166654d617468236d756c3a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b90505b92915050565b600080821161447f576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d617468236469763a204449564953494f4e5f42595f5a45524f0000604482015290519081900360640190fd5b6000828481151561448c57fe5b04949350505050565b6000828211156144ef576040805160e560020a62461bcd02815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b600186600281111561450357fe5b14156145ab57604080517ff242432a000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018790526064820184905260a06084830152600060a4830181905292519088169263f242432a9260e4808201939182900301818387803b15801561458e57600080fd5b505af11580156145a2573d6000803e3d6000fd5b505050506146de565b60028660028111156145b957fe5b141561463d57604080517fb88d4fde000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018790526080606483015260006084830181905292519088169263b88d4fde9260c4808201939182900301818387803b15801561458e57600080fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018790529151918716916323b872dd916064808201926020929091908290030181600087803b1580156146b157600080fd5b505af11580156146c5573d6000803e3d6000fd5b505050506040513d60208110156146db57600080fd5b50505b505050505050565b60045460010190565b60045461470390600163ffffffff61470816565b600455565b60008282018381101561441d576040805160e560020a62461bcd02815260206004820152601660248201527f536166654d617468236164643a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b3390565b600160a060020a03811615156147ef576040805160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b60e06040519081016040528061485e6148c8565b815260200161486b6148c8565b81526000602082015260400161487f6148c8565b905290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529060e082019061487f565b6040805180820182529060029082908038833950919291505056fe42537761703a20446f206e6f742068617665206e66740000000000000000000042537761703a204d75737420626520617070726f7665640000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657242737761703a206c697374206e6f7420666f756e64000000000000000000000042737761703a206e6f7420796f7572206c697374000000000000000000000000a165627a7a7230582044780bf0305f9ef826b1ac4ba439c8f572fbc45489ae5996bec243a97821b5fe0029
Deployed Bytecode
0x6080604052600436106102365763ffffffff60e060020a6000350416620e92a0811461023b5780630a39ce021461028157806311a42652146102ab578063240028e8146102c057806324d45d9e1461030757806326232a2e146103315780632c09555a1461035857806333f02fa214610382578063343d048f146103ac5780633a178d99146103e157806341c743831461040b5780634b2c07061461043557806356e78dc31461045f578063581e807e1461048957806363a599a4146104b3578063715018a6146104c857806372841a69146104dd5780637a91823b146105005780637b0b281a1461052a5780637ec41a74146105775780638164c309146105a75780638323c81c146105da5780638a0737a0146106e25780638da5cb5b146107155780638f32d59b1461072a57806392949a781461073f578063977d03b1146107bc57806397db7edb146107d157806398b0414f146107e65780639b19251a146108635780639c73815814610896578063aad7d572146108ab578063ab37f486146108de578063ab634bf614610911578063bb70680914610941578063bc2be1be146109be578063c415b95c146109e8578063c7a5a847146109fd578063ce114c2514610a12578063d1d6b73914610a45578063de74e57b14610a78578063e28d717b14610b07578063e3f54d2d14610b1c578063e6f9e63e14610b4e578063ec2757ce14610b78578063f0e4066214610ba2578063f2fde38b14610bcc578063f35c46eb14610bff578063f98a3f3714610c29575b600080fd5b34801561024757600080fd5b506102656004803603602081101561025e57600080fd5b5035610c53565b60408051600160a060020a039092168252519081900360200190f35b34801561028d57600080fd5b50610265600480360360208110156102a457600080fd5b5035610cc4565b3480156102b757600080fd5b50610265610ce2565b3480156102cc57600080fd5b506102f3600480360360208110156102e357600080fd5b5035600160a060020a0316610cf1565b604080519115158252519081900360200190f35b34801561031357600080fd5b506102f36004803603602081101561032a57600080fd5b5035610d0f565b34801561033d57600080fd5b50610346610d7d565b60408051918252519081900360200190f35b34801561036457600080fd5b506103466004803603602081101561037b57600080fd5b5035610d83565b34801561038e57600080fd5b50610265600480360360208110156103a557600080fd5b5035610dfe565b3480156103b857600080fd5b506103df600480360360208110156103cf57600080fd5b5035600160a060020a0316610e1c565b005b3480156103ed57600080fd5b506102f36004803603602081101561040457600080fd5b5035610e8a565b34801561041757600080fd5b506103df6004803603602081101561042e57600080fd5b50356111ef565b34801561044157600080fd5b506103466004803603602081101561045857600080fd5b5035611314565b34801561046b57600080fd5b506103466004803603602081101561048257600080fd5b503561139e565b34801561049557600080fd5b506103df600480360360208110156104ac57600080fd5b5035611402565b3480156104bf57600080fd5b506102f3611453565b3480156104d457600080fd5b506103df61145c565b6103df600480360360408110156104f357600080fd5b50803590602001356114f2565b34801561050c57600080fd5b506103466004803603602081101561052357600080fd5b5035612354565b6103df60048036036101c081101561054157600080fd5b506060810160c082013560e08301356101008401600160a060020a036101608601351661018086013515156101a08701356123b9565b34801561058357600080fd5b506103df6004803603604081101561059a57600080fd5b5080359060200135612e15565b3480156105b357600080fd5b506103df600480360360208110156105ca57600080fd5b5035600160a060020a0316612f4a565b3480156105e657600080fd5b50610604600480360360208110156105fd57600080fd5b5035612fe2565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561064c578181015183820152602001610634565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561068b578181015183820152602001610673565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156106ca5781810151838201526020016106b2565b50505050905001965050505050505060405180910390f35b3480156106ee57600080fd5b506102f36004803603602081101561070557600080fd5b5035600160a060020a031661326b565b34801561072157600080fd5b50610265613280565b34801561073657600080fd5b506102f361328f565b34801561074b57600080fd5b506103df6004803603602081101561076257600080fd5b81019060208101813564010000000081111561077d57600080fd5b82018360208201111561078f57600080fd5b803590602001918460208302840111640100000000831117156107b157600080fd5b5090925090506132b3565b3480156107c857600080fd5b506103466133bd565b3480156107dd57600080fd5b506103df6133c3565b3480156107f257600080fd5b506103df6004803603602081101561080957600080fd5b81019060208101813564010000000081111561082457600080fd5b82018360208201111561083657600080fd5b8035906020019184602083028401116401000000008311171561085857600080fd5b50909250905061341b565b34801561086f57600080fd5b506102f36004803603602081101561088657600080fd5b5035600160a060020a0316613524565b3480156108a257600080fd5b50610346613539565b3480156108b757600080fd5b506103df600480360360208110156108ce57600080fd5b5035600160a060020a031661353f565b3480156108ea57600080fd5b506102f36004803603602081101561090157600080fd5b5035600160a060020a0316613648565b34801561091d57600080fd5b506103df6004803603604081101561093457600080fd5b5080359060200135613666565b34801561094d57600080fd5b506103df6004803603602081101561096457600080fd5b81019060208101813564010000000081111561097f57600080fd5b82018360208201111561099157600080fd5b803590602001918460208302840111640100000000831117156109b357600080fd5b5090925090506137bf565b3480156109ca57600080fd5b50610346600480360360208110156109e157600080fd5b5035613954565b3480156109f457600080fd5b506102656139b8565b348015610a0957600080fd5b506103df6139c7565b348015610a1e57600080fd5b506103df60048036036020811015610a3557600080fd5b5035600160a060020a0316613a22565b348015610a5157600080fd5b506103df60048036036020811015610a6857600080fd5b5035600160a060020a0316613ab7565b348015610a8457600080fd5b50610aa260048036036020811015610a9b57600080fd5b5035613c44565b604080518981526020810189905290810187905260608101869052600160a060020a038516608082015283151560a082015282151560c082015260e08101826001811115610aec57fe5b60ff1681526020019850505050505050505060405180910390f35b348015610b1357600080fd5b506103df613cb0565b348015610b2857600080fd5b506103df60048036036040811015610b3f57600080fd5b50803590602001351515613d42565b348015610b5a57600080fd5b5061060460048036036020811015610b7157600080fd5b5035613e7b565b348015610b8457600080fd5b506103df60048036036020811015610b9b57600080fd5b50356140f5565b348015610bae57600080fd5b5061034660048036036020811015610bc557600080fd5b5035614146565b348015610bd857600080fd5b506103df60048036036020811015610bef57600080fd5b5035600160a060020a03166141a7565b348015610c0b57600080fd5b506102f360048036036020811015610c2257600080fd5b50356141fc565b348015610c3557600080fd5b506102f360048036036020811015610c4c57600080fd5b503561426b565b6000818060045410151515610ca0576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b600083815260016020526040902060040154600160a060020a031691505b50919050565b600260205260009081526040902060040154600160a060020a031681565b600854600160a060020a031681565b600160a060020a03166000908152600a602052604090205460ff1690565b6000818060045410151515610d5c576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b505060009081526003602052604090206004015460a060020a900460ff1690565b60055481565b6000818060045410151515610dd0576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b60008381526003602052604090206004015460b060020a900460ff166001811115610df757fe5b9392505050565b600160205260009081526040902060040154600160a060020a031681565b610e2461328f565b1515610e68576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b6000818060045410151515610ed7576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b610edf61484a565b60008481526001602052604090819020815160c0810190925281608081018260028282826020028201915b815481526020019060010190808311610f0a57505050918352505060408051808201918290526020909201919060028481019182845b8154600160a060020a03168152600190910190602001808311610f405750505091835250506004820154600160a060020a03166020820152604080518082018083529190920191906005840190600290826000855b82829054906101000a900460ff166002811115610fae57fe5b815260206001928301818104948501949093039092029101808411610f95575050509290935250505050604081015190915060005b60028110156111e357600160608401518260028110610ffe57fe5b6020020151600281111561100e57fe5b14156110e9576020830151600090826002811061102757fe5b6020020151905080600160a060020a031662fdd58e8486600001518560028110151561104f57fe5b60200201516040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a031681526020018281526020019250505060206040518083038186803b1580156110a457600080fd5b505afa1580156110b8573d6000803e3d6000fd5b505050506040513d60208110156110ce57600080fd5b505115156110e3576000955050505050610cbe565b506111db565b6002606084015182600281106110fb57fe5b6020020151600281111561110b57fe5b14156111db576020830151600090826002811061112457fe5b6020020151905082600160a060020a031681600160a060020a0316636352211e86600001518560028110151561115657fe5b60200201516040518263ffffffff1660e060020a0281526004018082815260200191505060206040518083038186803b15801561119257600080fd5b505afa1580156111a6573d6000803e3d6000fd5b505050506040513d60208110156111bc57600080fd5b5051600160a060020a0316146111d9576000955050505050610cbe565b505b600101610fe3565b50600195945050505050565b80806004541015151561123a576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000828152600160205260409020600401548290600160a060020a0316331480611267575061126761328f565b15156112ab576040805160e560020a62461bcd0281526020600482015260146024820152600080516020614964833981519152604482015290519081900360640190fd5b600083815260036020908152604091829020600401805475ff000000000000000000000000000000000000000000191690558151858152915133927f283d1475b22f68f783a3c5908490bf2ee4d4932a06c3a094a8f7511a9a80522992908290030190a2505050565b6000818060045410151515611361576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000838152600360208190526040909120015442106113835760009150610cbe565b50506000908152600360208190526040909120015442900390565b60008180600454101515156113eb576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b505060009081526003602052604090206001015490565b61140a61328f565b151561144e576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600755565b600b5460ff1681565b61146461328f565b15156114a8576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054600160a060020a0319169055565b81806004541015151561153d576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b600b5460ff1615611598576040805160e560020a62461bcd02815260206004820152601560248201527f42537761703a20656d657267656e63792073746f700000000000000000000000604482015290519081900360640190fd5b6001821015611617576040805160e560020a62461bcd02815260206004820152602160248201527f42537761703a206578706563746564206d6f7265207468616e203120636f756e60448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008381526003602052604090206004015460a060020a900460ff1615806116585750600083815260036020526040902060040154600160a060020a031633145b15156116ae576040805160e560020a62461bcd02815260206004820152601760248201527f42737761703a206e6f74207768696c74656c6973746564000000000000000000604482015290519081900360640190fd5b6000838152600360205260409020600401547501000000000000000000000000000000000000000000900460ff16151560011480156116fc5750600083815260036020526040812060010154115b1515611752576040805160e560020a62461bcd02815260206004820152601560248201527f42537761703a206c69737420697320636c6f7365640000000000000000000000604482015290519081900360640190fd5b6000838152600360205260409020600101548211156117bb576040805160e560020a62461bcd02815260206004820152601c60248201527f42537761703a206578636565642063757272656e7420737570706c7900000000604482015290519081900360640190fd5b600160008481526003602052604090206004015460b060020a900460ff1660018111156117e457fe5b148061180157506000838152600360208190526040909120015442105b1515611857576040805160e560020a62461bcd02815260206004820152601360248201527f42537761703a2074696d65206973206f76657200000000000000000000000000604482015290519081900360640190fd5b600083815260016020526040812060040154600160a060020a0316818080805b600089905260026020819052811015612182576000898152600260208190526040909120810190829081106118a857fe5b0154600160a060020a031693508315156118c157612182565b600089815260026020819052604090912060050190829081106118e057fe5b6020808204929092015460008c815260029384905260409020601f9092166101000a900460ff169350908290811061191457fe5b0154925085151561193e57600160a060020a03841660009081526009602052604090205460ff1695505b600182600281111561194c57fe5b1415611b8d57604080517efdd58e0000000000000000000000000000000000000000000000000000000081523360048201526024810185905290518591600091600160a060020a0384169162fdd58e916044808301926020929190829003018186803b1580156119bb57600080fd5b505afa1580156119cf573d6000803e3d6000fd5b505050506040513d60208110156119e557600080fd5b505111611a2a576040805160e560020a62461bcd02815260206004820152601660248201526000805160206148e4833981519152604482015290519081900360640190fd5b6040805160e060020a63e985e9c50281523360048201523060248201529051600160a060020a0383169163e985e9c5916044808301926020929190829003018186803b158015611a7957600080fd5b505afa158015611a8d573d6000803e3d6000fd5b505050506040513d6020811015611aa357600080fd5b50511515600114611aec576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b604080517ff242432a000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03888116602483015260448201879052606482018c905260a06084830152600060a4830181905292519084169263f242432a9260e4808201939182900301818387803b158015611b6f57600080fd5b505af1158015611b83573d6000803e3d6000fd5b505050505061217a565b6002826002811115611b9b57fe5b1415611e26578360018914611c1f576040805160e560020a62461bcd028152602060048201526024808201527f42537761703a20446f6e277420737570706f727420543732312042617463682060448201527f5377617000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a031681600160a060020a0316636352211e866040518263ffffffff1660e060020a0281526004018082815260200191505060206040518083038186803b158015611c7057600080fd5b505afa158015611c84573d6000803e3d6000fd5b505050506040513d6020811015611c9a57600080fd5b5051600160a060020a031614611ce8576040805160e560020a62461bcd02815260206004820152601660248201526000805160206148e4833981519152604482015290519081900360640190fd5b6040805160e060020a63e985e9c50281523360048201523060248201529051600160a060020a0383169163e985e9c5916044808301926020929190829003018186803b158015611d3757600080fd5b505afa158015611d4b573d6000803e3d6000fd5b505050506040513d6020811015611d6157600080fd5b50511515600114611daa576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b604080517fb88d4fde000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038881166024830152604482018790526080606483015260006084830181905292519084169263b88d4fde9260c4808201939182900301818387803b158015611b6f57600080fd5b836000611e39858b63ffffffff6143a716565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290519192508291600160a060020a038516916370a08231916024808301926020929190829003018186803b158015611e9d57600080fd5b505afa158015611eb1573d6000803e3d6000fd5b505050506040513d6020811015611ec757600080fd5b50511015611f1f576040805160e560020a62461bcd02815260206004820152601a60248201527f42537761703a20446f206e6f7420656e6f7567682066756e6473000000000000604482015290519081900360640190fd5b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290518291600160a060020a0385169163dd62ed3e91604480820192602092909190829003018186803b158015611f8757600080fd5b505afa158015611f9b573d6000803e3d6000fd5b505050506040513d6020811015611fb157600080fd5b50511015611ff7576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b600061201f6064612013600754856143a790919063ffffffff16565b9063ffffffff61442616565b90506000612033838363ffffffff61449516565b600654604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a039283166024820152604481018690529051929350908616916323b872dd916064808201926020929091908290030181600087803b1580156120ab57600080fd5b505af11580156120bf573d6000803e3d6000fd5b505050506040513d60208110156120d557600080fd5b5050604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038b81166024830152604482018490529151918616916323b872dd916064808201926020929091908290030181600087803b15801561214957600080fd5b505af115801561215d573d6000803e3d6000fd5b505050506040513d602081101561217357600080fd5b5050505050505b600101611877565b508415156121b857600088815260016020908152604080832060020154600160a060020a03168352600990915290205460ff1694505b84151561226f5760055434906121db90662386f26fc1000063ffffffff6143a716565b811015612232576040805160e560020a62461bcd02815260206004820152601160248201527f42537761703a206f7574206f6620666565000000000000000000000000000000604482015290519081900360640190fd5b600654604051600160a060020a039091169082156108fc029083906000818181858888f1935050505015801561226c573d6000803e3d6000fd5b50505b60008881526001602052604090206005810154600282015491546122a59260ff90921691600160a060020a03169087338c6144f5565b6000888152600360205260409020600101546122c7908863ffffffff61449516565b60008981526003602052604090206001018190551515612310576000888152600360205260409020600401805475ff000000000000000000000000000000000000000000191690555b6040805189815260208101899052815133927f48c590513d82d50a3e2080e988b646660a92929160055a158d25396eba47987c928290030190a25050505050505050565b60008180600454101515156123a1576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b50506000908152600360208190526040909120015490565b600b5460ff1615612414576040805160e560020a62461bcd02815260206004820152601560248201527f42537761703a20656d657267656e63792073746f700000000000000000000000604482015290519081900360640190fd5b6000806001831015612496576040805160e560020a62461bcd02815260206004820152602160248201527f42537761703a206578706563746564206d6f7265207468616e203120636f756e60448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5060005b60038160ff161015612a075760008660ff8316600381106124b757fe5b6020020135600160a060020a0316600160a060020a031614156124d957612a07565b600a60008760ff8416600381106124ec57fe5b60209081029190910135600160a060020a0316825281019190915260400160002054600160ff90911615151461256c576040805160e560020a62461bcd02815260206004820152601460248201527f42537761703a206e6f7420737570706f72746564000000000000000000000000604482015290519081900360640190fd5b8115156125ae57600960008760ff84166003811061258657fe5b60209081029190910135600160a060020a031682528101919091526040016000205460ff1691505b60ff811615156129ff5760018a60ff8316600381106125c957fe5b602002013514156127a35760008660ff8316600381106125e557fe5b6020020135600160a060020a031690508381600160a060020a031662fdd58e338d8660ff1660038110151561261657fe5b60200201356040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a031681526020018281526020019250505060206040518083038186803b15801561266b57600080fd5b505afa15801561267f573d6000803e3d6000fd5b505050506040513d602081101561269557600080fd5b505110156126db576040805160e560020a62461bcd02815260206004820152601660248201526000805160206148e4833981519152604482015290519081900360640190fd5b6040805160e060020a63e985e9c50281523360048201523060248201529051600160a060020a0383169163e985e9c5916044808301926020929190829003018186803b15801561272a57600080fd5b505afa15801561273e573d6000803e3d6000fd5b505050506040513d602081101561275457600080fd5b5051151560011461279d576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b506129ff565b60028a60ff8316600381106127b457fe5b602002013514156129ff576001831461283c576040805160e560020a62461bcd028152602060048201526024808201527f42537761703a20446f6e277420737570706f727420543732312042617463682060448201527f5377617000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008660ff83166003811061284d57fe5b6020020135600160a060020a0316905033600160a060020a031681600160a060020a0316636352211e8c8560ff1660038110151561288757fe5b60200201356040518263ffffffff1660e060020a0281526004018082815260200191505060206040518083038186803b1580156128c357600080fd5b505afa1580156128d7573d6000803e3d6000fd5b505050506040513d60208110156128ed57600080fd5b5051600160a060020a03161461293b576040805160e560020a62461bcd02815260206004820152601660248201526000805160206148e4833981519152604482015290519081900360640190fd5b6040805160e060020a63e985e9c50281523360048201523060248201529051600160a060020a0383169163e985e9c5916044808301926020929190829003018186803b15801561298a57600080fd5b505afa15801561299e573d6000803e3d6000fd5b505050506040513d60208110156129b457600080fd5b505115156001146129fd576040805160e560020a62461bcd0281526020600482015260176024820152600080516020614904833981519152604482015290519081900360640190fd5b505b60010161249a565b811515612aba57600554612a2890662386f26fc1000063ffffffff6143a716565b341015612a7f576040805160e560020a62461bcd02815260206004820152601160248201527f42537761703a206f7574206f6620666565000000000000000000000000000000604482015290519081900360640190fd5b600654604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015612ab8573d6000803e3d6000fd5b505b6000612ac46146e6565b9050612ace6146ef565b600081815260016020526040902060048101805433600160a060020a03199182161790915560028083018054909216600160a060020a038b3516179091558b359091558b3590811115612b1d57fe5b60008281526001602081905260409091206005018054909160ff1990911690836002811115612b4857fe5b021790555060008181526002602052604090206004018054600160a060020a0319169055600191505b60038260ff161015612ccc5760008760ff841660038110612b8e57fe5b6020020135600160a060020a0316600160a060020a03161415612bb057612ccc565b8660ff831660038110612bbf57fe5b6020020135600160a060020a0316600260008381526020019081526020016000206002016001840360ff16600281101515612bf657fe5b018054600160a060020a031916600160a060020a03929092169190911790558960ff831660038110612c2457fe5b6020020135600260008381526020019081526020016000206000016001840360ff16600281101515612c5257fe5b01558a60ff831660038110612c6357fe5b60200201356002811115612c7357fe5b60008281526002602081905260409091206005019060ff600019860116908110612c9957fe5b602091828204019190066101000a81548160ff02191690836002811115612cbc57fe5b0217905550600190910190612b71565b6000818152600360208190526040909120858155600180820187905560048201805442600285018190558d019390940192909255750100000000000000000000000000000000000000000074ff00000000000000000000000000000000000000001990931660a060020a891515021775ff00000000000000000000000000000000000000000019169290921790558990811115612d6557fe5b6000828152600360205260409020600401805476ff00000000000000000000000000000000000000000000191660b060020a836001811115612da357fe5b02179055506000818152600360209081526040918290206004018054600160a060020a031916600160a060020a038a161790558151838152915133927f98c3ed9c2c550f09991c73938ded09d48dc234d8195358cd4b52a2af0124d29992908290030190a25050505050505050505050565b818060045410151515612e60576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000838152600160205260409020600401548390600160a060020a0316331480612e8d5750612e8d61328f565b1515612ed1576040805160e560020a62461bcd0281526020600482015260146024820152600080516020614964833981519152604482015290519081900360640190fd5b60008481526003602081905260409091200154612ef4908463ffffffff61470816565b60008581526003602081815260409283902090910183905581518781529081019290925280517fc5b87ea5b1b275d70fc5ae49f9ded1d7c1ffee5de02e683535b29869566af7299281900390910190a150505050565b612f5261328f565b1515612f96576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600160a060020a038116600081815260096020526040808220805460ff19166001179055517fbf309892cce19064e6d63ba3339f893b199c8cb5041fc6731702cb18e805d2919190a250565b6060806060838060045410151515613032576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b61303a61484a565b60008681526001602052604090819020815160c0810190925281608081018260028282826020028201915b81548152602001906001019080831161306557505050918352505060408051808201918290526020909201919060028481019182845b8154600160a060020a0316815260019091019060200180831161309b5750505091835250506004820154600160a060020a03166020820152604080518082018083529190920191906005840190600290826000855b82829054906101000a900460ff16600281111561310957fe5b8152602060019283018181049485019490930390920291018084116130f057505050929093525050604080516002808252606080830184529596509093509150602083019080388339505060408051600280825260608083018452949550909250906020830190803883395050604080516002808252606080830184529495509092509060208301908038833901905050905060005b600281101561325c57602085015181600281106131b857fe5b602002015184828151811015156131cb57fe5b600160a060020a03909216602092830290910190910152606085015181600281106131f257fe5b6020020151838281518110151561320557fe5b90602001906020020190600281111561321a57fe5b9081600281111561322757fe5b9052508451816002811061323757fe5b6020020151828281518110151561324a57fe5b6020908102909101015260010161319f565b50909891975095509350505050565b600a6020526000908152604090205460ff1681565b600054600160a060020a031690565b60008054600160a060020a03166132a4614765565b600160a060020a031614905090565b6132bb61328f565b15156132ff576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60005b818110156133555760016009600085858581811061331c57fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff1916911515919091179055600101613302565b507f2a4e6cafbe4194b0da40f94838261b2f5af73b64cc96c69e7566bc1da5cc0412828260405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a15050565b60075481565b6133cb61328f565b151561340f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600b805460ff19169055565b61342361328f565b1515613467576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60005b818110156134bc57600060098185858581811061348357fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010161346a565b507fdf4b036ff49865adcf06bf48665bd267a6a71a28166e3f554866a3a3c0a3a440828260405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a15050565b60096020526000908152604090205460ff1681565b60045481565b61354761328f565b151561358b576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff16156135fc576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a20616c726561647920737570706f727465640000000000000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19166001179055517f024dd2112a0499292da76a253ebfdf7b0bfb5db4c429f3a31a60658653ae55e39190a250565b600160a060020a031660009081526009602052604090205460ff1690565b8180600454101515156136b1576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000838152600160205260409020600401548390600160a060020a03163314806136de57506136de61328f565b1515613722576040805160e560020a62461bcd0281526020600482015260146024820152600080516020614964833981519152604482015290519081900360640190fd5b600084815260036020819052604090912001544290613747908563ffffffff61449516565b1161379c576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a2063616e2774207265766572742074696d650000000000000000604482015290519081900360640190fd5b60008481526003602081905260409091200154612ef4908463ffffffff61449516565b6137c761328f565b151561380b576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b60005b818110156138ec57600a600084848481811061382657fe5b60209081029290920135600160a060020a03168352508101919091526040016000205460ff16156138a1576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a20616c726561647920737570706f727465640000000000000000604482015290519081900360640190fd5b6001600a60008585858181106138b357fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010161380e565b507faa2ced0d34653039d5d3e19701d97c952213913b7478eb237e3dce03e797aed9828260405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a15050565b60008180600454101515156139a1576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b505060009081526003602052604090206002015490565b600654600160a060020a031681565b6139cf61328f565b1515613a13576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600b805460ff19166001179055565b613a2a61328f565b1515613a6e576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600160a060020a038116600081815260096020526040808220805460ff19169055517fdb0d54f6e7ff4a52bdc49b4c8d9ff245f409fee25c2c0a0a72ece14e2ddf4cfc9190a250565b600854600160a060020a03163314613b19576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a20796f7520617265206e6f742061646d696e0000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038416916370a0823191602480820192602092909190829003018186803b158015613b7c57600080fd5b505afa158015613b90573d6000803e3d6000fd5b505050506040513d6020811015613ba657600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b158015613c1457600080fd5b505af1158015613c28573d6000803e3d6000fd5b505050506040513d6020811015613c3e57600080fd5b50505050565b600360208190526000918252604090912080546001820154600283015493830154600490930154919390929091600160a060020a0381169060ff60a060020a82048116917501000000000000000000000000000000000000000000810482169160b060020a9091041688565b600854600160a060020a03163314613d12576040805160e560020a62461bcd02815260206004820152601860248201527f42537761703a20796f7520617265206e6f742061646d696e0000000000000000604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f19350505050158015613d3f573d6000803e3d6000fd5b50565b818060045410151515613d8d576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6000838152600160205260409020600401548390600160a060020a0316331480613dba5750613dba61328f565b1515613dfe576040805160e560020a62461bcd0281526020600482015260146024820152600080516020614964833981519152604482015290519081900360640190fd5b600084815260036020908152604091829020600401805474ff0000000000000000000000000000000000000000191660a060020a8715159081029190911790915582518781529182015281517f7fed638a008696906ac288c73419920821701a108aaa2ff9f8cbcf509d94cb29929181900390910190a150505050565b6060806060838060045410151515613ecb576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b613ed361484a565b600086815260026020819052604091829020825160c081019384905292909183916080830191849182845b815481526020019060010190808311613efe57505050918352505060408051808201918290526020909201919060028481019182845b8154600160a060020a03168152600190910190602001808311613f345750505091835250506004820154600160a060020a03166020820152604080518082018083529190920191906005840190600290826000855b82829054906101000a900460ff166002811115613fa257fe5b815260206001928301818104948501949093039092029101808411613f8957505050929093525050604080516002808252606080830184529596509093509150602083019080388339505060408051600280825260608083018452949550909250906020830190803883395050604080516002808252606080830184529495509092509060208301908038833901905050905060005b600281101561325c576020850151816002811061405157fe5b6020020151848281518110151561406457fe5b600160a060020a039092166020928302909101909101526060850151816002811061408b57fe5b6020020151838281518110151561409e57fe5b9060200190602002019060028111156140b357fe5b908160028111156140c057fe5b905250845181600281106140d057fe5b602002015182828151811015156140e357fe5b60209081029091010152600101614038565b6140fd61328f565b1515614141576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b600555565b6000818060045410151515614193576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b505060009081526003602052604090205490565b6141af61328f565b15156141f3576040805160e560020a62461bcd0281526020600482018190526024820152600080516020614924833981519152604482015290519081900360640190fd5b613d3f81614769565b6000818060045410151515614249576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b5050600090815260036020526040902060040154600160a060020a0316331490565b60008180600454101515156142b8576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614944833981519152604482015290519081900360640190fd5b6142c0614884565b60008481526003602081815260409283902083516101008101855281548152600180830154938201939093526002820154948101949094529182015460608401526004820154600160a060020a038116608085015260ff60a060020a82048116151560a0860152750100000000000000000000000000000000000000000082048116151560c086015260e085019260b060020a909204169081111561436157fe5b600181111561436c57fe5b8152505090508060c00151801561439f575060018160e00151600181111561439057fe5b148061439f5750428160600151115b949350505050565b60008215156143b857506000614420565b8282028284828115156143c757fe5b041461441d576040805160e560020a62461bcd02815260206004820152601660248201527f536166654d617468236d756c3a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b90505b92915050565b600080821161447f576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d617468236469763a204449564953494f4e5f42595f5a45524f0000604482015290519081900360640190fd5b6000828481151561448c57fe5b04949350505050565b6000828211156144ef576040805160e560020a62461bcd02815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b600186600281111561450357fe5b14156145ab57604080517ff242432a000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018790526064820184905260a06084830152600060a4830181905292519088169263f242432a9260e4808201939182900301818387803b15801561458e57600080fd5b505af11580156145a2573d6000803e3d6000fd5b505050506146de565b60028660028111156145b957fe5b141561463d57604080517fb88d4fde000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018790526080606483015260006084830181905292519088169263b88d4fde9260c4808201939182900301818387803b15801561458e57600080fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018790529151918716916323b872dd916064808201926020929091908290030181600087803b1580156146b157600080fd5b505af11580156146c5573d6000803e3d6000fd5b505050506040513d60208110156146db57600080fd5b50505b505050505050565b60045460010190565b60045461470390600163ffffffff61470816565b600455565b60008282018381101561441d576040805160e560020a62461bcd02815260206004820152601660248201527f536166654d617468236164643a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b3390565b600160a060020a03811615156147ef576040805160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b60e06040519081016040528061485e6148c8565b815260200161486b6148c8565b81526000602082015260400161487f6148c8565b905290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529060e082019061487f565b6040805180820182529060029082908038833950919291505056fe42537761703a20446f206e6f742068617665206e66740000000000000000000042537761703a204d75737420626520617070726f7665640000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657242737761703a206c697374206e6f7420666f756e64000000000000000000000042737761703a206e6f7420796f7572206c697374000000000000000000000000a165627a7a7230582044780bf0305f9ef826b1ac4ba439c8f572fbc45489ae5996bec243a97821b5fe0029
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.