Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 343 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21707915 | 23 days ago | IN | 0 ETH | 0.00007701 | ||||
Set Approval For... | 21511042 | 51 days ago | IN | 0 ETH | 0.00035042 | ||||
Set Approval For... | 19856299 | 282 days ago | IN | 0 ETH | 0.00017058 | ||||
Set Approval For... | 19106722 | 387 days ago | IN | 0 ETH | 0.00030161 | ||||
Approve | 18777488 | 433 days ago | IN | 0 ETH | 0.0026033 | ||||
Approve | 18777472 | 433 days ago | IN | 0 ETH | 0.00246693 | ||||
Set Approval For... | 17756060 | 576 days ago | IN | 0 ETH | 0.00069789 | ||||
Set Approval For... | 17614006 | 596 days ago | IN | 0 ETH | 0.00137378 | ||||
Set Approval For... | 17114791 | 667 days ago | IN | 0 ETH | 0.00158631 | ||||
Set Approval For... | 16928707 | 693 days ago | IN | 0 ETH | 0.00154287 | ||||
Set String Art P... | 16700727 | 725 days ago | IN | 0 ETH | 0.00106852 | ||||
Set Approval For... | 16514884 | 751 days ago | IN | 0 ETH | 0.00082783 | ||||
Set Approval For... | 16473874 | 757 days ago | IN | 0 ETH | 0.00073215 | ||||
Set Approval For... | 16468179 | 757 days ago | IN | 0 ETH | 0.00069704 | ||||
Set Approval For... | 16447021 | 760 days ago | IN | 0 ETH | 0.00036577 | ||||
Set Approval For... | 16447020 | 760 days ago | IN | 0 ETH | 0.00039152 | ||||
Set Approval For... | 15875917 | 840 days ago | IN | 0 ETH | 0.00114095 | ||||
Set Approval For... | 15675134 | 868 days ago | IN | 0 ETH | 0.00076317 | ||||
Set Approval For... | 15625635 | 875 days ago | IN | 0 ETH | 0.001391 | ||||
Set Approval For... | 15616362 | 876 days ago | IN | 0 ETH | 0.00034564 | ||||
Set Approval For... | 15569781 | 883 days ago | IN | 0 ETH | 0.00068264 | ||||
Safe Transfer Fr... | 15483466 | 896 days ago | IN | 0 ETH | 0.00046967 | ||||
Safe Transfer Fr... | 15384117 | 912 days ago | IN | 0 ETH | 0.00028508 | ||||
Safe Transfer Fr... | 15384113 | 912 days ago | IN | 0 ETH | 0.00026685 | ||||
Safe Transfer Fr... | 15384107 | 912 days ago | IN | 0 ETH | 0.00032378 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
WrappedCompanion
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-26 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; //emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; // emit Unpaused(_msgSender()); } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/creepies.sol pragma solidity >=0.8.2; // to enable certain compiler features //import '@openzeppelin/contracts/token/ERC721/ERC721.sol'; contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; //Mapping para atribuirle un URI para cada token mapping(uint256 => string) internal id_to_URI; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** __________ __ _______ ___ _ __________ _ __ _ ______ ___ ____ ____ __________ / ____/ __ \/ |/ / __ \/ | / | / / _/ __ \/ | / / | | / / __ \/ | / __ \/ __ \/ ____/ __ \ / / / / / / /|_/ / /_/ / /| | / |/ // // / / / |/ / | | /| / / /_/ / /| | / /_/ / /_/ / __/ / /_/ / / /___/ /_/ / / / / ____/ ___ |/ /| // // /_/ / /| / | |/ |/ / _, _/ ___ |/ ____/ ____/ /___/ _, _/ \____/\____/_/ /_/_/ /_/ |_/_/ |_/___/\____/_/ |_/ |__/|__/_/ |_/_/ |_/_/ /_/ /_____/_/ |_| -> This wrapper was deployed to migrate the rugged TC NFT's to a new Contract which the community own -> The code is a re-purpose of the Pudgey Penguins Wrapper (Thank you guys, you rock!) -> The goal is to take back the NFT from the founders and make it a community run project! -> NFT data is now on Arweave! -> Dynamic integration with smart contracts for white lists etc -> DynamicArt integration to future proof te project -> v1.1 -> Resolved issued with transfer of art **/ ///Interfaces interface wrapperdb { function isBlockedNFT(uint _tokenID) external view returns(bool,uint256); function isHolder(address _address) external view returns(bool); function getWrappedStatus(address _migrator) external view returns(bool); function getFeesStatus(address _migrator) external view returns(uint); function getArtStatus(uint _tokenid)external view returns(uint); function setUserStatus(address _wrapper,uint _status,bool _haswrapped) external; function manageNumHolders(uint _option) external; function manageHolderAddresses(bool status,address _holder) external; } ///////Start of contract///// contract WrappedCompanion is ERC721, IERC721Receiver, Pausable, Ownable { event Wrapped(uint256 indexed tokenId); event Unwrapped(uint256 indexed tokenId); address public originalcompanion = 0x89af532726f48b7E77aE60705E166252e9Dcde15; address public dbcontract = 0x55263ef75bC2D973670055aDf627Edd16A2beF59; address public currentowner; //used to open methods and restrict via address address public upgradecontract; //External smart contract to upgrade artwork IERC721 immutable companions; uint private fee1 = 10000000000000000; // 0.01ETH uint private fee2 = 20000000000000000;// 0.02ETH uint public numwraps; //total wraps bool public feesenabled = true; //On by default bool public wrapenabled; bool public dynamicart = true; //Bool to enable dynamic art string public defaulturi = "https://arweave.net/ectnU5uY3uA7Wa_zA4ovoCeFNhWSr52Jbs4WMAsB6s4/"; string private artpath1; //Global path 1 string private artpath2; //Global path 2 ////Mappings///// mapping(address => bool) internal artapproved; //Whether a holder allowed art mod mapping(uint => string) internal artpathfortoken; //Path for individual tokens mapping(uint => bool) internal customtoken; //Used to ad a single ad-hoc artwork update ///////////////// ///////////////// ////Used to get uint256 -> String using Strings for uint256; constructor() ERC721("WrappedCompanion", "wTC") { companions = IERC721(originalcompanion); currentowner = msg.sender; } function _baseURI() internal pure override returns (string memory) { ///Base URI is the location of the JSON files -> WTC is on ArWeave, will get referenced further down with .json ///As part of the design of the contracts this Base URI Might need to get updated dynamically/// return "https://arweave.net/ectnU5uY3uA7Wa_zA4ovoCeFNhWSr52Jbs4WMAsB6s4/"; } //////Sets the IPFS/Arweave stores function setStringArtPaths(uint _pathno,string memory _path,uint _tokenid,address _holder) external { require(msg.sender==currentowner||msg.sender==upgradecontract||msg.sender==dbcontract,"Not Auth!"); if (_pathno==0) { defaulturi = _path; } if (_pathno==1) { artpath1 = _path; } if (_pathno==2) { artpath2 = _path; } if (_pathno==3) ////Specify dedicated path for token { bool temp; temp = getArtApproval(_tokenid,_holder); require(temp==true,"Not Approved!"); artpathfortoken[_tokenid] = _path; customtoken[_tokenid] = true; //User has unique art } if (_pathno==4) //resets to default { customtoken[_tokenid] = false; //Resets user to the global } } function tokenURI(uint256 tokenId) public view override returns (string memory) { string memory tempstring; string memory tempstring2; if (dynamicart==true) { ///Updated retrieval to handle future planned upgrades if needed uint temp = wrapperdb(dbcontract).getArtStatus(tokenId); //Verify if user has unique art bool isunique = customtoken[tokenId]; /////////////////////////////////////// if (isunique==true) { tempstring2 = artpathfortoken[tokenId]; tempstring = string(abi.encodePacked(tempstring2,tokenId.toString(), ".json")); } if (isunique==false) { if(temp==0) { tempstring = string(abi.encodePacked(defaulturi,tokenId.toString(), ".json")); } if (temp==1) { tempstring = string(abi.encodePacked(artpath1,tokenId.toString(), ".json")); } if (temp==2) { tempstring = string(abi.encodePacked(artpath2,tokenId.toString(), ".json")); } } } if(dynamicart==false) { tempstring = string(abi.encodePacked(defaulturi,tokenId.toString(), ".json")); } return tempstring; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function returnUserFeeStatus(address _wallet) public view returns(uint) { ////Reference to user database uint _walletstatus; _walletstatus = wrapperdb(dbcontract).getFeesStatus(_wallet); //Get fee status 0/1/3 return _walletstatus; } //function to lock the token for art approvals// function approveArtUpdate(bool _yesorno,uint _tokennumber) external{ require(msg.sender == ownerOf(_tokennumber),"Not Authorized"); artapproved[msg.sender] = _yesorno; //Mapping to ensure its not at a global level } ///Return the value of the approval status for the DB function getArtApproval(uint _tokennumber,address _wallet)public view returns(bool) { address temp = ownerOf(_tokennumber); require(temp == _wallet, "ERR(P)"); bool temp2; temp2 = artapproved[temp]; return temp2; } //Setup for various features// function setOptions(uint _option,bool _onoroff,uint _value,address _address) external onlyOwner { if (_option==1) { feesenabled = _onoroff; //enable /disable fees } if (_option==2) { fee1 = _value; //fee for 1 upto 0.02ETH } if (_option==3) { fee2 = _value; //fee for 2 NFTS; } if (_option==4) { originalcompanion = _address; } if (_option==5) { dbcontract = _address; } if (_option==6) { wrapenabled = _onoroff; } if (_option==7) { dynamicart = _onoroff; } if (_option==8) { upgradecontract = _address; //update for Serum? } if (_option==9) { currentowner = _address; } } /// Wrap the original Companion to get the new wTC, We have added in an additional part to query the users status fees wise/// function wrap(uint256[] calldata tokenIds_) payable external { uint templength = tokenIds_.length; //Temp holder for use further down bool _isblocked; bool _isholder; uint s; require(wrapenabled==true,"Wrapping is not enabled!"); //Get the users status from the DB contract// uint _userstatus = wrapperdb(dbcontract).getFeesStatus(msg.sender); //Will wrap to DB contract later require(tokenIds_[0] != 0,"ERR(Q)"); //Ensures 0 is not entered in for Token Number! ////Num Tokens = 1//// if (feesenabled==true) ////This enables us to bypass fees globally if required. { if(templength == 1) { ///If User is new then fee is 0.01ETH if (_userstatus==0) //User has never wrapped { require(msg.value == fee1,"Err(B)"); //Set the user up for future fees wrapperdb(dbcontract).setUserStatus(msg.sender,1,true); } if (_userstatus==1) //Have wrapped before but not to 0.02ETH { require(msg.value == fee1,"Err(C)"); //Set the user up for future fees wrapperdb(dbcontract).setUserStatus(msg.sender,2,true); } } /////Num Tokens greater than 1 if(templength > 1) { ///If User is new then fee is 0.02ETH if (_userstatus==0) //User has never wrapped { require(msg.value == fee2,"Err(D)"); //Set the user up for future fees wrapperdb(dbcontract).setUserStatus(msg.sender,2,true); } if (_userstatus==1) //Have wrapped before but not to 0.02ETH { require(msg.value == fee1,"Err(E)"); //Set the user up for future fees wrapperdb(dbcontract).setUserStatus(msg.sender,2,true); } } } for (uint256 i = 0; i < templength; i++) { //Add method in to verify banned ID's (Founders) (_isblocked,s) = wrapperdb(dbcontract).isBlockedNFT(tokenIds_[i]); require(_isblocked!=true,"Banned Token_ID!"); companions.safeTransferFrom(msg.sender, address(this), tokenIds_[i]); } //////Adjust the holder value to ensure rewards are split fairly! _isholder = wrapperdb(dbcontract).isHolder(msg.sender); if (_isholder==false) { wrapperdb(dbcontract).manageHolderAddresses(true,msg.sender); ///Sets user as a holder! wrapperdb(dbcontract).manageNumHolders(2); ///Bump the holder value } numwraps +=1; } /// Unwrap to get the original back function unwrap(uint256[] calldata tokenIds_) external { uint _balance; for (uint256 i = 0; i < tokenIds_.length; i++) { _safeTransfer(msg.sender, address(this), tokenIds_[i], ""); } ////We track the balance of the msg.sender/// ////If they now own 0 NFT's we remove them as a holder _balance = balanceOf(msg.sender); if (_balance==0) { ///They no longer hold,we remove/// wrapperdb(dbcontract).manageHolderAddresses(false,msg.sender); //Remove user as a holder wrapperdb(dbcontract).manageNumHolders(1); ///Dump the holder value } } function _flip( address who_, bool isWrapping_, uint256 tokenId_ ) private { if (isWrapping_) { // Mint Wrapped companion of same tokenID if not yet minted, otherwise swap for existing Wrapped companion if (_exists(tokenId_) && ownerOf(tokenId_) == address(this)) { _safeTransfer(address(this), who_, tokenId_, ""); } else { _safeMint(who_, tokenId_); } emit Wrapped(tokenId_); } else { companions.safeTransferFrom(address(this), who_, tokenId_); emit Unwrapped(tokenId_); } } // Notice: You must use safeTransferFrom in order to properly wrap/unwrap your companion. function onERC721Received( address operator_, address from_, uint256 tokenId_, bytes memory data_ ) external override returns (bytes4) { // Only supports callback from the original companions contract and this contract require( msg.sender == address(companions) || msg.sender == address(this), "must be Companion or WrappedCompanion" ); bool isWrapping = msg.sender == address(companions); _flip(from_, isWrapping, tokenId_); return this.onERC721Received.selector; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override whenNotPaused { super._beforeTokenTransfer(from, to, tokenId); } fallback() external payable {} receive() external payable {} function withdrawETH() external onlyOwner { (bool success, ) = owner().call{value: address(this).balance}(""); require(success, "Transfer failed."); } function withdrawERC20(address token) external onlyOwner { bool success = IERC20(token).transfer( owner(), IERC20(token).balanceOf(address(this)) ); require(success, "Transfer failed"); } //Emergency NFT recovery function emergencyMintWrapped(uint256 tokenId_) external onlyOwner { if (companions.ownerOf(tokenId_) == address(this)) { // Contract owns the Companion. if (_exists(tokenId_) && ownerOf(tokenId_) == address(this)) { // Wrapped Companion is also trapped in contract. _safeTransfer(address(this), owner(), tokenId_, ""); emit Wrapped(tokenId_); } else if (!_exists(tokenId_)) { // Wrapped Companion hasn't ever been minted. _safeMint(owner(), tokenId_); emit Wrapped(tokenId_); } else { revert("Wrapped Companion minted and distributed already"); } } else { revert("Companion is not locked in contract"); } } //Mint the Tokens that Founders of the companions owned //Requires any minted tokens to be blocked //Mints to another user or the owner function mintFoundersBlockedNfts(uint256[] calldata tokenIds_,uint _mintoption,address _to) external onlyOwner { uint templength = tokenIds_.length; for (uint256 i = 0; i < templength; i++) { //Add method in to verify banned ID's (Founders) (bool _isblocked,uint s) = wrapperdb(dbcontract).isBlockedNFT(tokenIds_[i]); require(_isblocked==true,"Not a Banned Token!"); if (_mintoption==1) //Mint to Owner { _safeMint(owner(), tokenIds_[i]); } if (_mintoption==2) //Mint to User { _safeMint(_to, tokenIds_[i]); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unwrapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Wrapped","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_yesorno","type":"bool"},{"internalType":"uint256","name":"_tokennumber","type":"uint256"}],"name":"approveArtUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentowner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dbcontract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaulturi","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"emergencyMintWrapped","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesenabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokennumber","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"}],"name":"getArtApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"uint256","name":"_mintoption","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"mintFoundersBlockedNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numwraps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"originalcompanion","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"returnUserFeeStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_option","type":"uint256"},{"internalType":"bool","name":"_onoroff","type":"bool"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"setOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pathno","type":"uint256"},{"internalType":"string","name":"_path","type":"string"},{"internalType":"uint256","name":"_tokenid","type":"uint256"},{"internalType":"address","name":"_holder","type":"address"}],"name":"setStringArtPaths","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradecontract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"wrap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wrapenabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600880546001600160a01b03199081167389af532726f48b7e77ae60705e166252e9dcde1517909155600980549091167355263ef75bc2d973670055adf627edd16a2bef59179055662386f26fc10000600c5566470de4df820000600d55600f80546201000162ff00ff19909116179055610100604090815260a081815290620038fe60c03980516200009b91601091602090910190620001ac565b50348015620000a957600080fd5b50604080518082018252601081526f2bb930b83832b221b7b6b830b734b7b760811b60208083019182528351808501909452600384526277544360e81b908401528151919291620000fd91600091620001ac565b50805162000113906001906020840190620001ac565b50506007805460ff19169055506200012b3362000152565b6008546001600160a01b0316608052600a80546001600160a01b031916331790556200028f565b600780546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001ba9062000252565b90600052602060002090601f016020900481019282620001de576000855562000229565b82601f10620001f957805160ff191683800117855562000229565b8280016001018555821562000229579182015b82811115620002295782518255916020019190600101906200020c565b50620002379291506200023b565b5090565b5b808211156200023757600081556001016200023c565b600181811c908216806200026757607f821691505b602082108114156200028957634e487b7160e01b600052602260045260246000fd5b50919050565b608051613637620002c760003960008181610a6c01528181610afc01528181610d3d01528181611c7901526124bc01526136376000f3fe6080604052600436106102275760003560e01c80638da5cb5b11610122578063d1e21407116100a5578063e817bb751161006c578063e817bb7514610682578063e985e9c5146106a1578063eb5416fa146106ea578063f2fde38b1461070a578063f4f3b2001461072a57005b8063d1e21407146105ed578063ddd93cc91461060d578063dde06f741461062d578063e086e5ec1461064d578063e633a5671461066257005b8063b6e7a9e8116100e9578063b6e7a9e81461055a578063b88d4fde1461057a578063c5e0016c1461059a578063c87b56dd146105ba578063cc17a5bf146105da57005b80638da5cb5b146104c857806395aedfaf146104eb57806395d89b411461050b578063a22cb46514610520578063aaf51cc31461054057005b80633f4ba83a116101aa5780636352211e116101715780636352211e1461043e57806363ac2a4c1461045e57806370a082311461047e578063715018a61461049e5780638456cb59146104b357005b80633f4ba83a146103ad57806342842e0e146103c257806352b207c0146103e25780635c975abb146104065780635f743a051461041e57005b8063150b7a02116101ee578063150b7a02146102f457806323b872dd1461032d57806331c44b251461034d5780633b20b6801461036d5780633f44f32c1461038d57005b806301ffc9a71461023057806306fdde0314610265578063081812fc14610287578063095ea7b3146102bf5780630bf11f4f146102df57005b3661022e57005b005b34801561023c57600080fd5b5061025061024b366004612d8a565b61074a565b60405190151581526020015b60405180910390f35b34801561027157600080fd5b5061027a61079c565b60405161025c9190612dff565b34801561029357600080fd5b506102a76102a2366004612e12565b61082e565b6040516001600160a01b03909116815260200161025c565b3480156102cb57600080fd5b5061022e6102da366004612e40565b6108bb565b3480156102eb57600080fd5b5061027a6109d1565b34801561030057600080fd5b5061031461030f366004612ef8565b610a5f565b6040516001600160e01b0319909116815260200161025c565b34801561033957600080fd5b5061022e610348366004612f78565b610b3c565b34801561035957600080fd5b5061022e610368366004612fb9565b610b6d565b34801561037957600080fd5b506008546102a7906001600160a01b031681565b34801561039957600080fd5b5061022e6103a8366004612e12565b610ced565b3480156103b957600080fd5b5061022e610f21565b3480156103ce57600080fd5b5061022e6103dd366004612f78565b610f5b565b3480156103ee57600080fd5b506103f8600e5481565b60405190815260200161025c565b34801561041257600080fd5b5060075460ff16610250565b34801561042a57600080fd5b506009546102a7906001600160a01b031681565b34801561044a57600080fd5b506102a7610459366004612e12565b610f76565b34801561046a57600080fd5b5061022e61047936600461307c565b610fed565b34801561048a57600080fd5b506103f86104993660046130be565b611116565b3480156104aa57600080fd5b5061022e61119d565b3480156104bf57600080fd5b5061022e6111d7565b3480156104d457600080fd5b5060075461010090046001600160a01b03166102a7565b3480156104f757600080fd5b506103f86105063660046130be565b61120f565b34801561051757600080fd5b5061027a611288565b34801561052c57600080fd5b5061022e61053b3660046130e9565b611297565b34801561054c57600080fd5b50600f546102509060ff1681565b34801561056657600080fd5b50610250610575366004613122565b61135c565b34801561058657600080fd5b5061022e610595366004612ef8565b6113d6565b3480156105a657600080fd5b5061022e6105b5366004613147565b611408565b3480156105c657600080fd5b5061027a6105d5366004612e12565b611545565b61022e6105e836600461307c565b6117a8565b3480156105f957600080fd5b5061022e610608366004613186565b611e94565b34801561061957600080fd5b5061022e6106283660046131da565b612022565b34801561063957600080fd5b50600f546102509062010000900460ff1681565b34801561065957600080fd5b5061022e61209d565b34801561066e57600080fd5b50600b546102a7906001600160a01b031681565b34801561068e57600080fd5b50600f5461025090610100900460ff1681565b3480156106ad57600080fd5b506102506106bc3660046131f8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106f657600080fd5b50600a546102a7906001600160a01b031681565b34801561071657600080fd5b5061022e6107253660046130be565b612168565b34801561073657600080fd5b5061022e6107453660046130be565b612206565b60006001600160e01b031982166380ac58cd60e01b148061077b57506001600160e01b03198216635b5e139f60e01b145b8061079657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107ab90613226565b80601f01602080910402602001604051908101604052809291908181526020018280546107d790613226565b80156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b60006108398261237b565b61089f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108c682610f76565b9050806001600160a01b0316836001600160a01b031614156109345760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610896565b336001600160a01b0382161480610950575061095081336106bc565b6109c25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610896565b6109cc8383612398565b505050565b601080546109de90613226565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0a90613226565b8015610a575780601f10610a2c57610100808354040283529160200191610a57565b820191906000526020600020905b815481529060010190602001808311610a3a57829003601f168201915b505050505081565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610a9757503330145b610af15760405162461bcd60e51b815260206004820152602560248201527f6d75737420626520436f6d70616e696f6e206f722057726170706564436f6d7060448201526430b734b7b760d91b6064820152608401610896565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b28858286612406565b50630a85bd0160e11b90505b949350505050565b610b463382612548565b610b625760405162461bcd60e51b815260040161089690613261565b6109cc83838361262e565b600a546001600160a01b0316331480610b905750600b546001600160a01b031633145b80610ba557506009546001600160a01b031633145b610bdd5760405162461bcd60e51b81526020600482015260096024820152684e6f7420417574682160b81b6044820152606401610896565b83610bf7578251610bf5906010906020860190612cdb565b505b8360011415610c15578251610c13906011906020860190612cdb565b505b8360021415610c33578251610c31906012906020860190612cdb565b505b8360031415610cc7576000610c48838361135c565b9050600181151514610c8c5760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420417070726f7665642160981b6044820152606401610896565b60008381526014602090815260409091208551610cab92870190612cdb565b50506000828152601560205260409020805460ff191660011790555b8360041415610ce7576000828152601560205260409020805460ff191690555b50505050565b6007546001600160a01b03610100909104163314610d1d5760405162461bcd60e51b8152600401610896906132b2565b6040516331a9108f60e11b81526004810182905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da891906132e7565b6001600160a01b03161415610eca57610dc08161237b565b8015610ddc575030610dd182610f76565b6001600160a01b0316145b15610e4157610e1330610dfd6007546001600160a01b036101009091041690565b83604051806020016040528060008152506127d9565b60405181907f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368690600090a250565b610e4a8161237b565b610e6957600754610e139061010090046001600160a01b03168261280c565b60405162461bcd60e51b815260206004820152603060248201527f5772617070656420436f6d70616e696f6e206d696e74656420616e642064697360448201526f747269627574656420616c726561647960801b6064820152608401610896565b60405162461bcd60e51b815260206004820152602360248201527f436f6d70616e696f6e206973206e6f74206c6f636b656420696e20636f6e74726044820152621858dd60ea1b6064820152608401610896565b50565b6007546001600160a01b03610100909104163314610f515760405162461bcd60e51b8152600401610896906132b2565b610f59612826565b565b6109cc838383604051806020016040528060008152506113d6565b6000818152600260205260408120546001600160a01b0316806107965760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610896565b6000805b8281101561103e5761102c333086868581811061101057611010613304565b90506020020135604051806020016040528060008152506127d9565b8061103681613330565b915050610ff1565b5061104833611116565b9050806109cc5760095460405163315ca80d60e21b8152600060048201523360248201526001600160a01b039091169063c572a03490604401600060405180830381600087803b15801561109b57600080fd5b505af11580156110af573d6000803e3d6000fd5b5050600954604051632b7ce36160e21b8152600160048201526001600160a01b03909116925063adf38d849150602401600060405180830381600087803b1580156110f957600080fd5b505af115801561110d573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382166111815760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610896565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b036101009091041633146111cd5760405162461bcd60e51b8152600401610896906132b2565b610f59600061287b565b6007546001600160a01b036101009091041633146112075760405162461bcd60e51b8152600401610896906132b2565b610f596128d5565b60095460405163bf29104360e01b81526001600160a01b038381166004830152600092839291169063bf29104390602401602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611281919061334b565b9392505050565b6060600180546107ab90613226565b6001600160a01b0382163314156112f05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610896565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008061136884610f76565b9050826001600160a01b0316816001600160a01b0316146113b45760405162461bcd60e51b815260206004820152600660248201526545525228502960d01b6044820152606401610896565b6001600160a01b031660009081526013602052604090205460ff169392505050565b6113e03383612548565b6113fc5760405162461bcd60e51b815260040161089690613261565b610ce7848484846127d9565b6007546001600160a01b036101009091041633146114385760405162461bcd60e51b8152600401610896906132b2565b836001141561145057600f805460ff19168415151790555b836002141561145f57600c8290555b836003141561146e57600d8290555b836004141561149357600880546001600160a01b0319166001600160a01b0383161790555b83600514156114b857600980546001600160a01b0319166001600160a01b0383161790555b83600614156114d557600f805461ff001916610100851515021790555b83600714156114f457600f805462ff0000191662010000851515021790555b836008141561151957600b80546001600160a01b0319166001600160a01b0383161790555b8360091415610ce757600a80546001600160a01b0383166001600160a01b031990911617905550505050565b6060806060600f60029054906101000a900460ff1615156001151514156117635760095460405163257b4bb760e11b8152600481018690526000916001600160a01b031690634af6976e90602401602060405180830381865afa1580156115b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d4919061334b565b60008681526015602052604090205490915060ff16801515600114156116ba576000868152601460205260409020805461160d90613226565b80601f016020809104026020016040519081016040528092919081815260200182805461163990613226565b80156116865780601f1061165b57610100808354040283529160200191611686565b820191906000526020600020905b81548152906001019060200180831161166957829003601f168201915b50505050509250826116978761292a565b6040516020016116a8929190613380565b60405160208183030381529060405293505b8061176057816116f25760106116cf8761292a565b6040516020016116e09291906133bf565b60405160208183030381529060405293505b81600114156117295760116117068761292a565b6040516020016117179291906133bf565b60405160208183030381529060405293505b816002141561176057601261173d8761292a565b60405160200161174e9291906133bf565b60405160208183030381529060405293505b50505b600f5462010000900460ff166117a157601061177e8561292a565b60405160200161178f9291906133bf565b60405160208183030381529060405291505b5092915050565b600f5481906000908190819060ff61010090910416151560011461180e5760405162461bcd60e51b815260206004820152601860248201527f5772617070696e67206973206e6f7420656e61626c65642100000000000000006044820152606401610896565b60095460405163bf29104360e01b81523360048201526000916001600160a01b03169063bf29104390602401602060405180830381865afa158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b919061334b565b90508686600081811061189057611890613304565b90506020020135600014156118d05760405162461bcd60e51b815260206004820152600660248201526545525228512960d01b6044820152606401610896565b600f5460ff16151560011415611b99578460011415611a3c578061199057600c5434146119285760405162461bcd60e51b815260206004820152600660248201526545727228422960d01b6044820152606401610896565b60095460405163e83dbf7160e01b81526001600160a01b039091169063e83dbf719061195d903390600190819060040161347a565b600060405180830381600087803b15801561197757600080fd5b505af115801561198b573d6000803e3d6000fd5b505050505b8060011415611a3c57600c5434146119d35760405162461bcd60e51b815260206004820152600660248201526545727228432960d01b6044820152606401610896565b60095460405163e83dbf7160e01b81526001600160a01b039091169063e83dbf7190611a0990339060029060019060040161347a565b600060405180830381600087803b158015611a2357600080fd5b505af1158015611a37573d6000803e3d6000fd5b505050505b6001851115611b995780611aed57600d543414611a845760405162461bcd60e51b815260206004820152600660248201526545727228442960d01b6044820152606401610896565b60095460405163e83dbf7160e01b81526001600160a01b039091169063e83dbf7190611aba90339060029060019060040161347a565b600060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050505b8060011415611b9957600c543414611b305760405162461bcd60e51b815260206004820152600660248201526545727228452960d01b6044820152606401610896565b60095460405163e83dbf7160e01b81526001600160a01b039091169063e83dbf7190611b6690339060029060019060040161347a565b600060405180830381600087803b158015611b8057600080fd5b505af1158015611b94573d6000803e3d6000fd5b505050505b60005b85811015611d3c576009546001600160a01b031663fb74a54b898984818110611bc757611bc7613304565b905060200201356040518263ffffffff1660e01b8152600401611bec91815260200190565b6040805180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c919061349d565b909550925060018515151415611c775760405162461bcd60e51b815260206004820152601060248201526f42616e6e656420546f6b656e5f49442160801b6044820152606401610896565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166342842e0e33308b8b86818110611cba57611cba613304565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015611d1157600080fd5b505af1158015611d25573d6000803e3d6000fd5b505050508080611d3490613330565b915050611b9c565b50600954604051636a6bd8cd60e11b81523360048201526001600160a01b039091169063d4d7b19a90602401602060405180830381865afa158015611d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da991906134cb565b925082611e735760095460405163315ca80d60e21b8152600160048201523360248201526001600160a01b039091169063c572a03490604401600060405180830381600087803b158015611dfc57600080fd5b505af1158015611e10573d6000803e3d6000fd5b5050600954604051632b7ce36160e21b8152600260048201526001600160a01b03909116925063adf38d849150602401600060405180830381600087803b158015611e5a57600080fd5b505af1158015611e6e573d6000803e3d6000fd5b505050505b6001600e6000828254611e8691906134e8565b909155505050505050505050565b6007546001600160a01b03610100909104163314611ec45760405162461bcd60e51b8152600401610896906132b2565b8260005b8181101561201a5760095460009081906001600160a01b031663fb74a54b898986818110611ef857611ef8613304565b905060200201356040518263ffffffff1660e01b8152600401611f1d91815260200190565b6040805180830381865afa158015611f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5d919061349d565b9092509050600182151514611faa5760405162461bcd60e51b81526020600482015260136024820152724e6f7420612042616e6e656420546f6b656e2160681b6044820152606401610896565b8560011415611fe657600754611fe69061010090046001600160a01b0316898986818110611fda57611fda613304565b9050602002013561280c565b85600214156120055761200585898986818110611fda57611fda613304565b5050808061201290613330565b915050611ec8565b505050505050565b61202b81610f76565b6001600160a01b0316336001600160a01b03161461207c5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08105d5d1a1bdc9a5e995960921b6044820152606401610896565b50336000908152601360205260409020805460ff1916911515919091179055565b6007546001600160a01b036101009091041633146120cd5760405162461bcd60e51b8152600401610896906132b2565b60075460405160009161010090046001600160a01b03169047908381818185875af1925050503d806000811461211f576040519150601f19603f3d011682016040523d82523d6000602084013e612124565b606091505b5050905080610f1e5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610896565b6007546001600160a01b036101009091041633146121985760405162461bcd60e51b8152600401610896906132b2565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b610f1e8161287b565b6007546001600160a01b036101009091041633146122365760405162461bcd60e51b8152600401610896906132b2565b6000816001600160a01b031663a9059cbb61225f6007546001600160a01b036101009091041690565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa1580156122a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c7919061334b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233691906134cb565b9050806123775760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610896565b5050565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123cd82610f76565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8115612490576124158161237b565b801561243157503061242682610f76565b6001600160a01b0316145b1561245657612451308483604051806020016040528060008152506127d9565b612460565b612460838261280c565b60405181907f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368690600090a2505050565b604051632142170760e11b81523060048201526001600160a01b038481166024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b15801561250057600080fd5b505af1158015612514573d6000803e3d6000fd5b50506040518392507fbeaa92c6354c6dcf375d2c514352b2c11bc865784722e5dd9b267e606eb5fc5f9150600090a2505050565b60006125538261237b565b6125b45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610896565b60006125bf83610f76565b9050806001600160a01b0316846001600160a01b031614806125fa5750836001600160a01b03166125ef8461082e565b6001600160a01b0316145b80610b3457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16610b34565b826001600160a01b031661264182610f76565b6001600160a01b0316146126a95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610896565b6001600160a01b03821661270b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610896565b612716838383612a28565b612721600082612398565b6001600160a01b038316600090815260036020526040812080546001929061274a908490613500565b90915550506001600160a01b03821660009081526003602052604081208054600192906127789084906134e8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6127e484848461262e565b6127f084848484612a6e565b610ce75760405162461bcd60e51b815260040161089690613517565b612377828260405180602001604052806000815250612b69565b60075460ff1661286f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610896565b6007805460ff19169055565b600780546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60075460ff161561291b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610896565b6007805460ff19166001179055565b60608161294e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612978578061296281613330565b91506129719050600a8361357f565b9150612952565b60008167ffffffffffffffff81111561299357612993612e6c565b6040519080825280601f01601f1916602001820160405280156129bd576020820181803683370190505b5090505b8415610b34576129d2600183613500565b91506129df600a86613593565b6129ea9060306134e8565b60f81b8183815181106129ff576129ff613304565b60200101906001600160f81b031916908160001a905350612a21600a8661357f565b94506129c1565b60075460ff16156109cc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610896565b60006001600160a01b0384163b15612b6157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612ab29033908990889088906004016135a7565b6020604051808303816000875af1925050508015612aed575060408051601f3d908101601f19168201909252612aea918101906135e4565b60015b612b47573d808015612b1b576040519150601f19603f3d011682016040523d82523d6000602084013e612b20565b606091505b508051612b3f5760405162461bcd60e51b815260040161089690613517565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610b34565b506001610b34565b612b738383612b9c565b612b806000848484612a6e565b6109cc5760405162461bcd60e51b815260040161089690613517565b6001600160a01b038216612bf25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610896565b612bfb8161237b565b15612c485760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610896565b612c5460008383612a28565b6001600160a01b0382166000908152600360205260408120805460019290612c7d9084906134e8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612ce790613226565b90600052602060002090601f016020900481019282612d095760008555612d4f565b82601f10612d2257805160ff1916838001178555612d4f565b82800160010185558215612d4f579182015b82811115612d4f578251825591602001919060010190612d34565b50612d5b929150612d5f565b5090565b5b80821115612d5b5760008155600101612d60565b6001600160e01b031981168114610f1e57600080fd5b600060208284031215612d9c57600080fd5b813561128181612d74565b60005b83811015612dc2578181015183820152602001612daa565b83811115610ce75750506000910152565b60008151808452612deb816020860160208601612da7565b601f01601f19169290920160200192915050565b6020815260006112816020830184612dd3565b600060208284031215612e2457600080fd5b5035919050565b6001600160a01b0381168114610f1e57600080fd5b60008060408385031215612e5357600080fd5b8235612e5e81612e2b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612e9d57612e9d612e6c565b604051601f8501601f19908116603f01168101908282118183101715612ec557612ec5612e6c565b81604052809350858152868686011115612ede57600080fd5b858560208301376000602087830101525050509392505050565b60008060008060808587031215612f0e57600080fd5b8435612f1981612e2b565b93506020850135612f2981612e2b565b925060408501359150606085013567ffffffffffffffff811115612f4c57600080fd5b8501601f81018713612f5d57600080fd5b612f6c87823560208401612e82565b91505092959194509250565b600080600060608486031215612f8d57600080fd5b8335612f9881612e2b565b92506020840135612fa881612e2b565b929592945050506040919091013590565b60008060008060808587031215612fcf57600080fd5b84359350602085013567ffffffffffffffff811115612fed57600080fd5b8501601f81018713612ffe57600080fd5b61300d87823560208401612e82565b93505060408501359150606085013561302581612e2b565b939692955090935050565b60008083601f84011261304257600080fd5b50813567ffffffffffffffff81111561305a57600080fd5b6020830191508360208260051b850101111561307557600080fd5b9250929050565b6000806020838503121561308f57600080fd5b823567ffffffffffffffff8111156130a657600080fd5b6130b285828601613030565b90969095509350505050565b6000602082840312156130d057600080fd5b813561128181612e2b565b8015158114610f1e57600080fd5b600080604083850312156130fc57600080fd5b823561310781612e2b565b91506020830135613117816130db565b809150509250929050565b6000806040838503121561313557600080fd5b82359150602083013561311781612e2b565b6000806000806080858703121561315d57600080fd5b84359350602085013561316f816130db565b925060408501359150606085013561302581612e2b565b6000806000806060858703121561319c57600080fd5b843567ffffffffffffffff8111156131b357600080fd5b6131bf87828801613030565b90955093505060208501359150604085013561302581612e2b565b600080604083850312156131ed57600080fd5b8235612e5e816130db565b6000806040838503121561320b57600080fd5b823561321681612e2b565b9150602083013561311781612e2b565b600181811c9082168061323a57607f821691505b6020821081141561325b57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156132f957600080fd5b815161128181612e2b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156133445761334461331a565b5060010190565b60006020828403121561335d57600080fd5b5051919050565b60008151613376818560208601612da7565b9290920192915050565b60008351613392818460208801612da7565b8351908301906133a6818360208801612da7565b64173539b7b760d91b9101908152600501949350505050565b600080845481600182811c9150808316806133db57607f831692505b60208084108214156133fb57634e487b7160e01b86526022600452602486fd5b81801561340f57600181146134205761344d565b60ff1986168952848901965061344d565b60008b81526020902060005b868110156134455781548b82015290850190830161342c565b505084890196505b5050505050506134716134608286613364565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0393909316835260208301919091521515604082015260600190565b600080604083850312156134b057600080fd5b82516134bb816130db565b6020939093015192949293505050565b6000602082840312156134dd57600080fd5b8151611281816130db565b600082198211156134fb576134fb61331a565b500190565b6000828210156135125761351261331a565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261358e5761358e613569565b500490565b6000826135a2576135a2613569565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906135da90830184612dd3565b9695505050505050565b6000602082840312156135f657600080fd5b815161128181612d7456fea264697066735822122083d726294eb2aa0407e161207804e9af6c09817669b431cbcaf0bc2ce389a81f64736f6c634300080b003368747470733a2f2f617277656176652e6e65742f6563746e553575593375413757615f7a41346f766f4365464e6857537235324a627334574d4173423673342f
Deployed Bytecode
0x6080604052600436106102275760003560e01c80638da5cb5b11610122578063d1e21407116100a5578063e817bb751161006c578063e817bb7514610682578063e985e9c5146106a1578063eb5416fa146106ea578063f2fde38b1461070a578063f4f3b2001461072a57005b8063d1e21407146105ed578063ddd93cc91461060d578063dde06f741461062d578063e086e5ec1461064d578063e633a5671461066257005b8063b6e7a9e8116100e9578063b6e7a9e81461055a578063b88d4fde1461057a578063c5e0016c1461059a578063c87b56dd146105ba578063cc17a5bf146105da57005b80638da5cb5b146104c857806395aedfaf146104eb57806395d89b411461050b578063a22cb46514610520578063aaf51cc31461054057005b80633f4ba83a116101aa5780636352211e116101715780636352211e1461043e57806363ac2a4c1461045e57806370a082311461047e578063715018a61461049e5780638456cb59146104b357005b80633f4ba83a146103ad57806342842e0e146103c257806352b207c0146103e25780635c975abb146104065780635f743a051461041e57005b8063150b7a02116101ee578063150b7a02146102f457806323b872dd1461032d57806331c44b251461034d5780633b20b6801461036d5780633f44f32c1461038d57005b806301ffc9a71461023057806306fdde0314610265578063081812fc14610287578063095ea7b3146102bf5780630bf11f4f146102df57005b3661022e57005b005b34801561023c57600080fd5b5061025061024b366004612d8a565b61074a565b60405190151581526020015b60405180910390f35b34801561027157600080fd5b5061027a61079c565b60405161025c9190612dff565b34801561029357600080fd5b506102a76102a2366004612e12565b61082e565b6040516001600160a01b03909116815260200161025c565b3480156102cb57600080fd5b5061022e6102da366004612e40565b6108bb565b3480156102eb57600080fd5b5061027a6109d1565b34801561030057600080fd5b5061031461030f366004612ef8565b610a5f565b6040516001600160e01b0319909116815260200161025c565b34801561033957600080fd5b5061022e610348366004612f78565b610b3c565b34801561035957600080fd5b5061022e610368366004612fb9565b610b6d565b34801561037957600080fd5b506008546102a7906001600160a01b031681565b34801561039957600080fd5b5061022e6103a8366004612e12565b610ced565b3480156103b957600080fd5b5061022e610f21565b3480156103ce57600080fd5b5061022e6103dd366004612f78565b610f5b565b3480156103ee57600080fd5b506103f8600e5481565b60405190815260200161025c565b34801561041257600080fd5b5060075460ff16610250565b34801561042a57600080fd5b506009546102a7906001600160a01b031681565b34801561044a57600080fd5b506102a7610459366004612e12565b610f76565b34801561046a57600080fd5b5061022e61047936600461307c565b610fed565b34801561048a57600080fd5b506103f86104993660046130be565b611116565b3480156104aa57600080fd5b5061022e61119d565b3480156104bf57600080fd5b5061022e6111d7565b3480156104d457600080fd5b5060075461010090046001600160a01b03166102a7565b3480156104f757600080fd5b506103f86105063660046130be565b61120f565b34801561051757600080fd5b5061027a611288565b34801561052c57600080fd5b5061022e61053b3660046130e9565b611297565b34801561054c57600080fd5b50600f546102509060ff1681565b34801561056657600080fd5b50610250610575366004613122565b61135c565b34801561058657600080fd5b5061022e610595366004612ef8565b6113d6565b3480156105a657600080fd5b5061022e6105b5366004613147565b611408565b3480156105c657600080fd5b5061027a6105d5366004612e12565b611545565b61022e6105e836600461307c565b6117a8565b3480156105f957600080fd5b5061022e610608366004613186565b611e94565b34801561061957600080fd5b5061022e6106283660046131da565b612022565b34801561063957600080fd5b50600f546102509062010000900460ff1681565b34801561065957600080fd5b5061022e61209d565b34801561066e57600080fd5b50600b546102a7906001600160a01b031681565b34801561068e57600080fd5b50600f5461025090610100900460ff1681565b3480156106ad57600080fd5b506102506106bc3660046131f8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106f657600080fd5b50600a546102a7906001600160a01b031681565b34801561071657600080fd5b5061022e6107253660046130be565b612168565b34801561073657600080fd5b5061022e6107453660046130be565b612206565b60006001600160e01b031982166380ac58cd60e01b148061077b57506001600160e01b03198216635b5e139f60e01b145b8061079657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107ab90613226565b80601f01602080910402602001604051908101604052809291908181526020018280546107d790613226565b80156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b60006108398261237b565b61089f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108c682610f76565b9050806001600160a01b0316836001600160a01b031614156109345760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610896565b336001600160a01b0382161480610950575061095081336106bc565b6109c25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610896565b6109cc8383612398565b505050565b601080546109de90613226565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0a90613226565b8015610a575780601f10610a2c57610100808354040283529160200191610a57565b820191906000526020600020905b815481529060010190602001808311610a3a57829003601f168201915b505050505081565b6000336001600160a01b037f00000000000000000000000089af532726f48b7e77ae60705e166252e9dcde15161480610a9757503330145b610af15760405162461bcd60e51b815260206004820152602560248201527f6d75737420626520436f6d70616e696f6e206f722057726170706564436f6d7060448201526430b734b7b760d91b6064820152608401610896565b336001600160a01b037f00000000000000000000000089af532726f48b7e77ae60705e166252e9dcde151614610b28858286612406565b50630a85bd0160e11b90505b949350505050565b610b463382612548565b610b625760405162461bcd60e51b815260040161089690613261565b6109cc83838361262e565b600a546001600160a01b0316331480610b905750600b546001600160a01b031633145b80610ba557506009546001600160a01b031633145b610bdd5760405162461bcd60e51b81526020600482015260096024820152684e6f7420417574682160b81b6044820152606401610896565b83610bf7578251610bf5906010906020860190612cdb565b505b8360011415610c15578251610c13906011906020860190612cdb565b505b8360021415610c33578251610c31906012906020860190612cdb565b505b8360031415610cc7576000610c48838361135c565b9050600181151514610c8c5760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420417070726f7665642160981b6044820152606401610896565b60008381526014602090815260409091208551610cab92870190612cdb565b50506000828152601560205260409020805460ff191660011790555b8360041415610ce7576000828152601560205260409020805460ff191690555b50505050565b6007546001600160a01b03610100909104163314610d1d5760405162461bcd60e51b8152600401610896906132b2565b6040516331a9108f60e11b81526004810182905230906001600160a01b037f00000000000000000000000089af532726f48b7e77ae60705e166252e9dcde151690636352211e90602401602060405180830381865afa158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da891906132e7565b6001600160a01b03161415610eca57610dc08161237b565b8015610ddc575030610dd182610f76565b6001600160a01b0316145b15610e4157610e1330610dfd6007546001600160a01b036101009091041690565b83604051806020016040528060008152506127d9565b60405181907f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368690600090a250565b610e4a8161237b565b610e6957600754610e139061010090046001600160a01b03168261280c565b60405162461bcd60e51b815260206004820152603060248201527f5772617070656420436f6d70616e696f6e206d696e74656420616e642064697360448201526f747269627574656420616c726561647960801b6064820152608401610896565b60405162461bcd60e51b815260206004820152602360248201527f436f6d70616e696f6e206973206e6f74206c6f636b656420696e20636f6e74726044820152621858dd60ea1b6064820152608401610896565b50565b6007546001600160a01b03610100909104163314610f515760405162461bcd60e51b8152600401610896906132b2565b610f59612826565b565b6109cc838383604051806020016040528060008152506113d6565b6000818152600260205260408120546001600160a01b0316806107965760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610896565b6000805b8281101561103e5761102c333086868581811061101057611010613304565b90506020020135604051806020016040528060008152506127d9565b8061103681613330565b915050610ff1565b5061104833611116565b9050806109cc5760095460405163315ca80d60e21b8152600060048201523360248201526001600160a01b039091169063c572a03490604401600060405180830381600087803b15801561109b57600080fd5b505af11580156110af573d6000803e3d6000fd5b5050600954604051632b7ce36160e21b8152600160048201526001600160a01b03909116925063adf38d849150602401600060405180830381600087803b1580156110f957600080fd5b505af115801561110d573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382166111815760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610896565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b036101009091041633146111cd5760405162461bcd60e51b8152600401610896906132b2565b610f59600061287b565b6007546001600160a01b036101009091041633146112075760405162461bcd60e51b8152600401610896906132b2565b610f596128d5565b60095460405163bf29104360e01b81526001600160a01b038381166004830152600092839291169063bf29104390602401602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611281919061334b565b9392505050565b6060600180546107ab90613226565b6001600160a01b0382163314156112f05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610896565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008061136884610f76565b9050826001600160a01b0316816001600160a01b0316146113b45760405162461bcd60e51b815260206004820152600660248201526545525228502960d01b6044820152606401610896565b6001600160a01b031660009081526013602052604090205460ff169392505050565b6113e03383612548565b6113fc5760405162461bcd60e51b815260040161089690613261565b610ce7848484846127d9565b6007546001600160a01b036101009091041633146114385760405162461bcd60e51b8152600401610896906132b2565b836001141561145057600f805460ff19168415151790555b836002141561145f57600c8290555b836003141561146e57600d8290555b836004141561149357600880546001600160a01b0319166001600160a01b0383161790555b83600514156114b857600980546001600160a01b0319166001600160a01b0383161790555b83600614156114d557600f805461ff001916610100851515021790555b83600714156114f457600f805462ff0000191662010000851515021790555b836008141561151957600b80546001600160a01b0319166001600160a01b0383161790555b8360091415610ce757600a80546001600160a01b0383166001600160a01b031990911617905550505050565b6060806060600f60029054906101000a900460ff1615156001151514156117635760095460405163257b4bb760e11b8152600481018690526000916001600160a01b031690634af6976e90602401602060405180830381865afa1580156115b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d4919061334b565b60008681526015602052604090205490915060ff16801515600114156116ba576000868152601460205260409020805461160d90613226565b80601f016020809104026020016040519081016040528092919081815260200182805461163990613226565b80156116865780601f1061165b57610100808354040283529160200191611686565b820191906000526020600020905b81548152906001019060200180831161166957829003601f168201915b50505050509250826116978761292a565b6040516020016116a8929190613380565b60405160208183030381529060405293505b8061176057816116f25760106116cf8761292a565b6040516020016116e09291906133bf565b60405160208183030381529060405293505b81600114156117295760116117068761292a565b6040516020016117179291906133bf565b60405160208183030381529060405293505b816002141561176057601261173d8761292a565b60405160200161174e9291906133bf565b60405160208183030381529060405293505b50505b600f5462010000900460ff166117a157601061177e8561292a565b60405160200161178f9291906133bf565b60405160208183030381529060405291505b5092915050565b600f5481906000908190819060ff61010090910416151560011461180e5760405162461bcd60e51b815260206004820152601860248201527f5772617070696e67206973206e6f7420656e61626c65642100000000000000006044820152606401610896565b60095460405163bf29104360e01b81523360048201526000916001600160a01b03169063bf29104390602401602060405180830381865afa158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b919061334b565b90508686600081811061189057611890613304565b90506020020135600014156118d05760405162461bcd60e51b815260206004820152600660248201526545525228512960d01b6044820152606401610896565b600f5460ff16151560011415611b99578460011415611a3c578061199057600c5434146119285760405162461bcd60e51b815260206004820152600660248201526545727228422960d01b6044820152606401610896565b60095460405163e83dbf7160e01b81526001600160a01b039091169063e83dbf719061195d903390600190819060040161347a565b600060405180830381600087803b15801561197757600080fd5b505af115801561198b573d6000803e3d6000fd5b505050505b8060011415611a3c57600c5434146119d35760405162461bcd60e51b815260206004820152600660248201526545727228432960d01b6044820152606401610896565b60095460405163e83dbf7160e01b81526001600160a01b039091169063e83dbf7190611a0990339060029060019060040161347a565b600060405180830381600087803b158015611a2357600080fd5b505af1158015611a37573d6000803e3d6000fd5b505050505b6001851115611b995780611aed57600d543414611a845760405162461bcd60e51b815260206004820152600660248201526545727228442960d01b6044820152606401610896565b60095460405163e83dbf7160e01b81526001600160a01b039091169063e83dbf7190611aba90339060029060019060040161347a565b600060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050505b8060011415611b9957600c543414611b305760405162461bcd60e51b815260206004820152600660248201526545727228452960d01b6044820152606401610896565b60095460405163e83dbf7160e01b81526001600160a01b039091169063e83dbf7190611b6690339060029060019060040161347a565b600060405180830381600087803b158015611b8057600080fd5b505af1158015611b94573d6000803e3d6000fd5b505050505b60005b85811015611d3c576009546001600160a01b031663fb74a54b898984818110611bc757611bc7613304565b905060200201356040518263ffffffff1660e01b8152600401611bec91815260200190565b6040805180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c919061349d565b909550925060018515151415611c775760405162461bcd60e51b815260206004820152601060248201526f42616e6e656420546f6b656e5f49442160801b6044820152606401610896565b7f00000000000000000000000089af532726f48b7e77ae60705e166252e9dcde156001600160a01b03166342842e0e33308b8b86818110611cba57611cba613304565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015611d1157600080fd5b505af1158015611d25573d6000803e3d6000fd5b505050508080611d3490613330565b915050611b9c565b50600954604051636a6bd8cd60e11b81523360048201526001600160a01b039091169063d4d7b19a90602401602060405180830381865afa158015611d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da991906134cb565b925082611e735760095460405163315ca80d60e21b8152600160048201523360248201526001600160a01b039091169063c572a03490604401600060405180830381600087803b158015611dfc57600080fd5b505af1158015611e10573d6000803e3d6000fd5b5050600954604051632b7ce36160e21b8152600260048201526001600160a01b03909116925063adf38d849150602401600060405180830381600087803b158015611e5a57600080fd5b505af1158015611e6e573d6000803e3d6000fd5b505050505b6001600e6000828254611e8691906134e8565b909155505050505050505050565b6007546001600160a01b03610100909104163314611ec45760405162461bcd60e51b8152600401610896906132b2565b8260005b8181101561201a5760095460009081906001600160a01b031663fb74a54b898986818110611ef857611ef8613304565b905060200201356040518263ffffffff1660e01b8152600401611f1d91815260200190565b6040805180830381865afa158015611f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5d919061349d565b9092509050600182151514611faa5760405162461bcd60e51b81526020600482015260136024820152724e6f7420612042616e6e656420546f6b656e2160681b6044820152606401610896565b8560011415611fe657600754611fe69061010090046001600160a01b0316898986818110611fda57611fda613304565b9050602002013561280c565b85600214156120055761200585898986818110611fda57611fda613304565b5050808061201290613330565b915050611ec8565b505050505050565b61202b81610f76565b6001600160a01b0316336001600160a01b03161461207c5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08105d5d1a1bdc9a5e995960921b6044820152606401610896565b50336000908152601360205260409020805460ff1916911515919091179055565b6007546001600160a01b036101009091041633146120cd5760405162461bcd60e51b8152600401610896906132b2565b60075460405160009161010090046001600160a01b03169047908381818185875af1925050503d806000811461211f576040519150601f19603f3d011682016040523d82523d6000602084013e612124565b606091505b5050905080610f1e5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610896565b6007546001600160a01b036101009091041633146121985760405162461bcd60e51b8152600401610896906132b2565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b610f1e8161287b565b6007546001600160a01b036101009091041633146122365760405162461bcd60e51b8152600401610896906132b2565b6000816001600160a01b031663a9059cbb61225f6007546001600160a01b036101009091041690565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa1580156122a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c7919061334b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233691906134cb565b9050806123775760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610896565b5050565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123cd82610f76565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8115612490576124158161237b565b801561243157503061242682610f76565b6001600160a01b0316145b1561245657612451308483604051806020016040528060008152506127d9565b612460565b612460838261280c565b60405181907f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368690600090a2505050565b604051632142170760e11b81523060048201526001600160a01b038481166024830152604482018390527f00000000000000000000000089af532726f48b7e77ae60705e166252e9dcde1516906342842e0e90606401600060405180830381600087803b15801561250057600080fd5b505af1158015612514573d6000803e3d6000fd5b50506040518392507fbeaa92c6354c6dcf375d2c514352b2c11bc865784722e5dd9b267e606eb5fc5f9150600090a2505050565b60006125538261237b565b6125b45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610896565b60006125bf83610f76565b9050806001600160a01b0316846001600160a01b031614806125fa5750836001600160a01b03166125ef8461082e565b6001600160a01b0316145b80610b3457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16610b34565b826001600160a01b031661264182610f76565b6001600160a01b0316146126a95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610896565b6001600160a01b03821661270b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610896565b612716838383612a28565b612721600082612398565b6001600160a01b038316600090815260036020526040812080546001929061274a908490613500565b90915550506001600160a01b03821660009081526003602052604081208054600192906127789084906134e8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6127e484848461262e565b6127f084848484612a6e565b610ce75760405162461bcd60e51b815260040161089690613517565b612377828260405180602001604052806000815250612b69565b60075460ff1661286f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610896565b6007805460ff19169055565b600780546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60075460ff161561291b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610896565b6007805460ff19166001179055565b60608161294e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612978578061296281613330565b91506129719050600a8361357f565b9150612952565b60008167ffffffffffffffff81111561299357612993612e6c565b6040519080825280601f01601f1916602001820160405280156129bd576020820181803683370190505b5090505b8415610b34576129d2600183613500565b91506129df600a86613593565b6129ea9060306134e8565b60f81b8183815181106129ff576129ff613304565b60200101906001600160f81b031916908160001a905350612a21600a8661357f565b94506129c1565b60075460ff16156109cc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610896565b60006001600160a01b0384163b15612b6157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612ab29033908990889088906004016135a7565b6020604051808303816000875af1925050508015612aed575060408051601f3d908101601f19168201909252612aea918101906135e4565b60015b612b47573d808015612b1b576040519150601f19603f3d011682016040523d82523d6000602084013e612b20565b606091505b508051612b3f5760405162461bcd60e51b815260040161089690613517565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610b34565b506001610b34565b612b738383612b9c565b612b806000848484612a6e565b6109cc5760405162461bcd60e51b815260040161089690613517565b6001600160a01b038216612bf25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610896565b612bfb8161237b565b15612c485760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610896565b612c5460008383612a28565b6001600160a01b0382166000908152600360205260408120805460019290612c7d9084906134e8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612ce790613226565b90600052602060002090601f016020900481019282612d095760008555612d4f565b82601f10612d2257805160ff1916838001178555612d4f565b82800160010185558215612d4f579182015b82811115612d4f578251825591602001919060010190612d34565b50612d5b929150612d5f565b5090565b5b80821115612d5b5760008155600101612d60565b6001600160e01b031981168114610f1e57600080fd5b600060208284031215612d9c57600080fd5b813561128181612d74565b60005b83811015612dc2578181015183820152602001612daa565b83811115610ce75750506000910152565b60008151808452612deb816020860160208601612da7565b601f01601f19169290920160200192915050565b6020815260006112816020830184612dd3565b600060208284031215612e2457600080fd5b5035919050565b6001600160a01b0381168114610f1e57600080fd5b60008060408385031215612e5357600080fd5b8235612e5e81612e2b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612e9d57612e9d612e6c565b604051601f8501601f19908116603f01168101908282118183101715612ec557612ec5612e6c565b81604052809350858152868686011115612ede57600080fd5b858560208301376000602087830101525050509392505050565b60008060008060808587031215612f0e57600080fd5b8435612f1981612e2b565b93506020850135612f2981612e2b565b925060408501359150606085013567ffffffffffffffff811115612f4c57600080fd5b8501601f81018713612f5d57600080fd5b612f6c87823560208401612e82565b91505092959194509250565b600080600060608486031215612f8d57600080fd5b8335612f9881612e2b565b92506020840135612fa881612e2b565b929592945050506040919091013590565b60008060008060808587031215612fcf57600080fd5b84359350602085013567ffffffffffffffff811115612fed57600080fd5b8501601f81018713612ffe57600080fd5b61300d87823560208401612e82565b93505060408501359150606085013561302581612e2b565b939692955090935050565b60008083601f84011261304257600080fd5b50813567ffffffffffffffff81111561305a57600080fd5b6020830191508360208260051b850101111561307557600080fd5b9250929050565b6000806020838503121561308f57600080fd5b823567ffffffffffffffff8111156130a657600080fd5b6130b285828601613030565b90969095509350505050565b6000602082840312156130d057600080fd5b813561128181612e2b565b8015158114610f1e57600080fd5b600080604083850312156130fc57600080fd5b823561310781612e2b565b91506020830135613117816130db565b809150509250929050565b6000806040838503121561313557600080fd5b82359150602083013561311781612e2b565b6000806000806080858703121561315d57600080fd5b84359350602085013561316f816130db565b925060408501359150606085013561302581612e2b565b6000806000806060858703121561319c57600080fd5b843567ffffffffffffffff8111156131b357600080fd5b6131bf87828801613030565b90955093505060208501359150604085013561302581612e2b565b600080604083850312156131ed57600080fd5b8235612e5e816130db565b6000806040838503121561320b57600080fd5b823561321681612e2b565b9150602083013561311781612e2b565b600181811c9082168061323a57607f821691505b6020821081141561325b57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156132f957600080fd5b815161128181612e2b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156133445761334461331a565b5060010190565b60006020828403121561335d57600080fd5b5051919050565b60008151613376818560208601612da7565b9290920192915050565b60008351613392818460208801612da7565b8351908301906133a6818360208801612da7565b64173539b7b760d91b9101908152600501949350505050565b600080845481600182811c9150808316806133db57607f831692505b60208084108214156133fb57634e487b7160e01b86526022600452602486fd5b81801561340f57600181146134205761344d565b60ff1986168952848901965061344d565b60008b81526020902060005b868110156134455781548b82015290850190830161342c565b505084890196505b5050505050506134716134608286613364565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0393909316835260208301919091521515604082015260600190565b600080604083850312156134b057600080fd5b82516134bb816130db565b6020939093015192949293505050565b6000602082840312156134dd57600080fd5b8151611281816130db565b600082198211156134fb576134fb61331a565b500190565b6000828210156135125761351261331a565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261358e5761358e613569565b500490565b6000826135a2576135a2613569565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906135da90830184612dd3565b9695505050505050565b6000602082840312156135f657600080fd5b815161128181612d7456fea264697066735822122083d726294eb2aa0407e161207804e9af6c09817669b431cbcaf0bc2ce389a81f64736f6c634300080b0033
Deployed Bytecode Sourcemap
41508:12729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27804:305;;;;;;;;;;-1:-1:-1;27804:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;27804:305:0;;;;;;;;28755:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30072:221::-;;;;;;;;;;-1:-1:-1;30072:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1714:32:1;;;1696:51;;1684:2;1669:18;30072:221:0;1550:203:1;29595:411:0;;;;;;;;;;-1:-1:-1;29595:411:0;;;;;:::i;:::-;;:::i;42322:93::-;;;;;;;;;;;;;:::i;51499:540::-;;;;;;;;;;-1:-1:-1;51499:540:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;3943:33:1;;;3925:52;;3913:2;3898:18;51499:540:0;3781:202:1;30962:339:0;;;;;;;;;;-1:-1:-1;30962:339:0;;;;;:::i;:::-;;:::i;43460:933::-;;;;;;;;;;-1:-1:-1;43460:933:0;;;;;:::i;:::-;;:::i;41686:77::-;;;;;;;;;;-1:-1:-1;41686:77:0;;;;-1:-1:-1;;;;;41686:77:0;;;52727:730;;;;;;;;;;-1:-1:-1;52727:730:0;;;;;:::i;:::-;;:::i;45660:59::-;;;;;;;;;;;;;:::i;31372:185::-;;;;;;;;;;-1:-1:-1;31372:185:0;;;;;:::i;:::-;;:::i;42141:20::-;;;;;;;;;;;;;;;;;;;5322:25:1;;;5310:2;5295:18;42141:20:0;5176:177:1;3816:86:0;;;;;;;;;;-1:-1:-1;3887:7:0;;;;3816:86;;41768:70;;;;;;;;;;-1:-1:-1;41768:70:0;;;;-1:-1:-1;;;;;41768:70:0;;;28449:239;;;;;;;;;;-1:-1:-1;28449:239:0;;;;;:::i;:::-;;:::i;50196:619::-;;;;;;;;;;-1:-1:-1;50196:619:0;;;;;:::i;:::-;;:::i;28179:208::-;;;;;;;;;;-1:-1:-1;28179:208:0;;;;;:::i;:::-;;:::i;9504:94::-;;;;;;;;;;;;;:::i;45597:55::-;;;;;;;;;;;;;:::i;8853:87::-;;;;;;;;;;-1:-1:-1;8926:6:0;;;;;-1:-1:-1;;;;;8926:6:0;8853:87;;45723:268;;;;;;;;;;-1:-1:-1;45723:268:0;;;;;:::i;:::-;;:::i;28924:104::-;;;;;;;;;;;;;:::i;30365:295::-;;;;;;;;;;-1:-1:-1;30365:295:0;;;;;:::i;:::-;;:::i;42180:30::-;;;;;;;;;;-1:-1:-1;42180:30:0;;;;;;;;46346:250;;;;;;;;;;-1:-1:-1;46346:250:0;;;;;:::i;:::-;;:::i;31628:328::-;;;;;;;;;;-1:-1:-1;31628:328:0;;;;;:::i;:::-;;:::i;46635:874::-;;;;;;;;;;-1:-1:-1;46635:874:0;;;;;:::i;:::-;;:::i;44399:1194::-;;;;;;;;;;-1:-1:-1;44399:1194:0;;;;;:::i;:::-;;:::i;47645:2506::-;;;;;;:::i;:::-;;:::i;53605:627::-;;;;;;;;;;-1:-1:-1;53605:627:0;;;;;:::i;:::-;;:::i;46051:233::-;;;;;;;;;;-1:-1:-1;46051:233:0;;;;;:::i;:::-;;:::i;42259:29::-;;;;;;;;;;-1:-1:-1;42259:29:0;;;;;;;;;;;52305:163;;;;;;;;;;;;;:::i;41923:30::-;;;;;;;;;;-1:-1:-1;41923:30:0;;;;-1:-1:-1;;;;;41923:30:0;;;42231:23;;;;;;;;;;-1:-1:-1;42231:23:0;;;;;;;;;;;30731:164;;;;;;;;;;-1:-1:-1;30731:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;30852:25:0;;;30828:4;30852:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30731:164;41843:27;;;;;;;;;;-1:-1:-1;41843:27:0;;;;-1:-1:-1;;;;;41843:27:0;;;9753:192;;;;;;;;;;-1:-1:-1;9753:192:0;;;;;:::i;:::-;;:::i;52474:219::-;;;;;;;;;;-1:-1:-1;52474:219:0;;;;;:::i;:::-;;:::i;27804:305::-;27906:4;-1:-1:-1;;;;;;27943:40:0;;-1:-1:-1;;;27943:40:0;;:105;;-1:-1:-1;;;;;;;28000:48:0;;-1:-1:-1;;;28000:48:0;27943:105;:158;;;-1:-1:-1;;;;;;;;;;20948:40:0;;;28065:36;27923:178;27804:305;-1:-1:-1;;27804:305:0:o;28755:100::-;28809:13;28842:5;28835:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28755:100;:::o;30072:221::-;30148:7;30176:16;30184:7;30176;:16::i;:::-;30168:73;;;;-1:-1:-1;;;30168:73:0;;9717:2:1;30168:73:0;;;9699:21:1;9756:2;9736:18;;;9729:30;9795:34;9775:18;;;9768:62;-1:-1:-1;;;9846:18:1;;;9839:42;9898:19;;30168:73:0;;;;;;;;;-1:-1:-1;30261:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30261:24:0;;30072:221::o;29595:411::-;29676:13;29692:23;29707:7;29692:14;:23::i;:::-;29676:39;;29740:5;-1:-1:-1;;;;;29734:11:0;:2;-1:-1:-1;;;;;29734:11:0;;;29726:57;;;;-1:-1:-1;;;29726:57:0;;10130:2:1;29726:57:0;;;10112:21:1;10169:2;10149:18;;;10142:30;10208:34;10188:18;;;10181:62;-1:-1:-1;;;10259:18:1;;;10252:31;10300:19;;29726:57:0;9928:397:1;29726:57:0;7721:10;-1:-1:-1;;;;;29818:21:0;;;;:62;;-1:-1:-1;29843:37:0;29860:5;7721:10;30731:164;:::i;29843:37::-;29796:168;;;;-1:-1:-1;;;29796:168:0;;10532:2:1;29796:168:0;;;10514:21:1;10571:2;10551:18;;;10544:30;10610:34;10590:18;;;10583:62;10681:26;10661:18;;;10654:54;10725:19;;29796:168:0;10330:420:1;29796:168:0;29977:21;29986:2;29990:7;29977:8;:21::i;:::-;29665:341;29595:411;;:::o;42322:93::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51499:540::-;51649:6;51767:10;-1:-1:-1;;;;;51789:10:0;51767:33;;;:64;;-1:-1:-1;51804:10:0;51826:4;51804:27;51767:64;51751:135;;;;-1:-1:-1;;;51751:135:0;;10957:2:1;51751:135:0;;;10939:21:1;10996:2;10976:18;;;10969:30;11035:34;11015:18;;;11008:62;-1:-1:-1;;;11086:18:1;;;11079:35;11131:19;;51751:135:0;10755:401:1;51751:135:0;51913:10;-1:-1:-1;;;;;51935:10:0;51913:33;;51953:34;51959:5;51913:33;51978:8;51953:5;:34::i;:::-;-1:-1:-1;;;;52003:30:0;-1:-1:-1;51499:540:0;;;;;;;:::o;30962:339::-;31157:41;7721:10;31190:7;31157:18;:41::i;:::-;31149:103;;;;-1:-1:-1;;;31149:103:0;;;;;;;:::i;:::-;31265:28;31275:4;31281:2;31285:7;31265:9;:28::i;43460:933::-;43596:12;;-1:-1:-1;;;;;43596:12:0;43584:10;:24;;:53;;-1:-1:-1;43622:15:0;;-1:-1:-1;;;;;43622:15:0;43610:10;:27;43584:53;:77;;;-1:-1:-1;43651:10:0;;-1:-1:-1;;;;;43651:10:0;43639;:22;43584:77;43576:98;;;;-1:-1:-1;;;43576:98:0;;11781:2:1;43576:98:0;;;11763:21:1;11820:1;11800:18;;;11793:29;-1:-1:-1;;;11838:18:1;;;11831:39;11887:18;;43576:98:0;11579:332:1;43576:98:0;43699:10;43695:70;;43735:18;;;;:10;;:18;;;;;:::i;:::-;;43695:70;43779:7;43788:1;43779:10;43775:68;;;43815:16;;;;:8;;:16;;;;;:::i;:::-;;43775:68;43858:7;43867:1;43858:10;43854:68;;;43894:16;;;;:8;;:16;;;;;:::i;:::-;;43854:68;43936:7;43945:1;43936:10;43932:315;;;44009:9;44040:32;44055:8;44064:7;44040:14;:32::i;:::-;44033:39;-1:-1:-1;44101:4:0;44095:10;;;;44087:35;;;;-1:-1:-1;;;44087:35:0;;12118:2:1;44087:35:0;;;12100:21:1;12157:2;12137:18;;;12130:30;-1:-1:-1;;;12176:18:1;;;12169:43;12229:18;;44087:35:0;11916:337:1;44087:35:0;44137:25;;;;:15;:25;;;;;;;;:33;;;;;;;;:::i;:::-;-1:-1:-1;;44185:21:0;;;;:11;:21;;;;;:28;;-1:-1:-1;;44185:28:0;44209:4;44185:28;;;43932:315;44261:7;44270:1;44261:10;44257:129;;;44341:5;44317:21;;;:11;:21;;;;;:29;;-1:-1:-1;;44317:29:0;;;44257:129;43460:933;;;;:::o;52727:730::-;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;52805:28:::1;::::0;-1:-1:-1;;;52805:28:0;;::::1;::::0;::::1;5322:25:1::0;;;52845:4:0::1;::::0;-1:-1:-1;;;;;52805:10:0::1;:18;::::0;::::1;::::0;5295::1;;52805:28:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52805:45:0::1;;52801:651;;;52904:17;52912:8;52904:7;:17::i;:::-;:55;;;;-1:-1:-1::0;52954:4:0::1;52925:17;52933:8:::0;52925:7:::1;:17::i;:::-;-1:-1:-1::0;;;;;52925:34:0::1;;52904:55;52900:477;;;53031:51;53053:4;53060:7;8926:6:::0;;-1:-1:-1;;;;;8926:6:0;;;;;;8853:87;53060:7:::1;53069:8;53031:51;;;;;;;;;;;::::0;:13:::1;:51::i;:::-;53098:17;::::0;53106:8;;53098:17:::1;::::0;;;::::1;52727:730:::0;:::o;52900:477::-:1;53136:17;53144:8;53136:7;:17::i;:::-;53131:246;;8926:6:::0;;53221:28:::1;::::0;8926:6;;;-1:-1:-1;;;;;8926:6:0;53240:8:::1;53221:9;:28::i;53131:246::-;53309:58;::::0;-1:-1:-1;;;53309:58:0;;13077:2:1;53309:58:0::1;::::0;::::1;13059:21:1::0;13116:2;13096:18;;;13089:30;13155:34;13135:18;;;13128:62;-1:-1:-1;;;13206:18:1;;;13199:46;13262:19;;53309:58:0::1;12875:412:1::0;52801:651:0::1;53399:45;::::0;-1:-1:-1;;;53399:45:0;;13494:2:1;53399:45:0::1;::::0;::::1;13476:21:1::0;13533:2;13513:18;;;13506:30;13572:34;13552:18;;;13545:62;-1:-1:-1;;;13623:18:1;;;13616:33;13666:19;;53399:45:0::1;13292:399:1::0;52801:651:0::1;52727:730:::0;:::o;45660:59::-;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;45703:10:::1;:8;:10::i;:::-;45660:59::o:0;31372:185::-;31510:39;31527:4;31533:2;31537:7;31510:39;;;;;;;;;;;;:16;:39::i;28449:239::-;28521:7;28557:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28557:16:0;28592:19;28584:73;;;;-1:-1:-1;;;28584:73:0;;13898:2:1;28584:73:0;;;13880:21:1;13937:2;13917:18;;;13910:30;13976:34;13956:18;;;13949:62;-1:-1:-1;;;14027:18:1;;;14020:39;14076:19;;28584:73:0;13696:405:1;50196:619:0;50260:13;;50280:122;50300:20;;;50280:122;;;50336:58;50350:10;50370:4;50377:9;;50387:1;50377:12;;;;;;;:::i;:::-;;;;;;;50336:58;;;;;;;;;;;;:13;:58::i;:::-;50322:3;;;;:::i;:::-;;;;50280:122;;;;50530:21;50540:10;50530:9;:21::i;:::-;50519:32;-1:-1:-1;50562:11:0;50558:252;;50647:10;;50637:61;;-1:-1:-1;;;50637:61:0;;50647:10;50637:61;;;14678:41:1;50687:10:0;14735:18:1;;;14728:60;-1:-1:-1;;;;;50647:10:0;;;;50637:43;;14651:18:1;;50637:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50746:10:0;;50736:41;;-1:-1:-1;;;50736:41:0;;50746:10;50736:41;;;5322:25:1;-1:-1:-1;;;;;50746:10:0;;;;-1:-1:-1;50736:38:0;;-1:-1:-1;5295:18:1;;50736:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50251:564;50196:619;;:::o;28179:208::-;28251:7;-1:-1:-1;;;;;28279:19:0;;28271:74;;;;-1:-1:-1;;;28271:74:0;;15191:2:1;28271:74:0;;;15173:21:1;15230:2;15210:18;;;15203:30;15269:34;15249:18;;;15242:62;-1:-1:-1;;;15320:18:1;;;15313:40;15370:19;;28271:74:0;14989:406:1;28271:74:0;-1:-1:-1;;;;;;28363:16:0;;;;;:9;:16;;;;;;;28179:208::o;9504:94::-;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;9569:21:::1;9587:1;9569:9;:21::i;45597:55::-:0;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;45638:8:::1;:6;:8::i;45723:268::-:0;45899:10;;45889:44;;-1:-1:-1;;;45889:44:0;;-1:-1:-1;;;;;1714:32:1;;;45889:44:0;;;1696:51:1;45789:4:0;;;;45899:10;;;45889:35;;1669:18:1;;45889:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45873:60;45723:268;-1:-1:-1;;;45723:268:0:o;28924:104::-;28980:13;29013:7;29006:14;;;;;:::i;30365:295::-;-1:-1:-1;;;;;30468:24:0;;7721:10;30468:24;;30460:62;;;;-1:-1:-1;;;30460:62:0;;15791:2:1;30460:62:0;;;15773:21:1;15830:2;15810:18;;;15803:30;15869:27;15849:18;;;15842:55;15914:18;;30460:62:0;15589:349:1;30460:62:0;7721:10;30535:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;30535:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;30535:53:0;;;;;;;;;;30604:48;;540:41:1;;;30535:42:0;;7721:10;30604:48;;513:18:1;30604:48:0;;;;;;;30365:295;;:::o;46346:250::-;46424:4;46441:12;46456:21;46464:12;46456:7;:21::i;:::-;46441:36;;46501:7;-1:-1:-1;;;;;46493:15:0;:4;-1:-1:-1;;;;;46493:15:0;;46485:34;;;;-1:-1:-1;;;46485:34:0;;16145:2:1;46485:34:0;;;16127:21:1;16184:1;16164:18;;;16157:29;-1:-1:-1;;;16202:18:1;;;16195:36;16248:18;;46485:34:0;15943:329:1;46485:34:0;-1:-1:-1;;;;;46553:17:0;46527:10;46553:17;;;:11;:17;;;;;;;;;46346:250;-1:-1:-1;;;46346:250:0:o;31628:328::-;31803:41;7721:10;31836:7;31803:18;:41::i;:::-;31795:103;;;;-1:-1:-1;;;31795:103:0;;;;;;;:::i;:::-;31909:39;31923:4;31929:2;31933:7;31942:5;31909:13;:39::i;46635:874::-;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;46747:7:::1;46756:1;46747:10;46743:91;;;46779:11;:22:::0;;-1:-1:-1;;46779:22:0::1;::::0;::::1;;;::::0;;46743:91:::1;46846:7;46855:1;46846:10;46842:84;;;46878:4;:13:::0;;;46842:84:::1;46938:7;46947:1;46938:10;46934:77;;;46970:4;:13:::0;;;46934:77:::1;47023:7;47032:1;47023:10;47019:74;;;47055:17;:28:::0;;-1:-1:-1;;;;;;47055:28:0::1;-1:-1:-1::0;;;;;47055:28:0;::::1;;::::0;;47019:74:::1;47105:7;47114:1;47105:10;47101:67;;;47137:10;:21:::0;;-1:-1:-1;;;;;;47137:21:0::1;-1:-1:-1::0;;;;;47137:21:0;::::1;;::::0;;47101:67:::1;47180:7;47189:1;47180:10;47176:68;;;47212:11;:22:::0;;-1:-1:-1;;47212:22:0::1;;::::0;::::1;;;;::::0;;47176:68:::1;47256:7;47265:1;47256:10;47252:67;;;47288:10;:21:::0;;-1:-1:-1;;47288:21:0::1;::::0;;::::1;;;;::::0;;47252:67:::1;47331:7;47340:1;47331:10;47327:92;;;47363:15;:26:::0;;-1:-1:-1;;;;;;47363:26:0::1;-1:-1:-1::0;;;;;47363:26:0;::::1;;::::0;;47327:92:::1;47431:7;47440:1;47431:10;47427:69;;;47463:12;:23:::0;;-1:-1:-1;;;;;47463:23:0;::::1;-1:-1:-1::0;;;;;;47463:23:0;;::::1;;::::0;;46635:874;;;;:::o;44399:1194::-;44484:13;44511:24;44544:25;44582:10;;;;;;;;;;;:16;;44594:4;44582:16;;;44578:849;;;44706:10;;44696:43;;-1:-1:-1;;;44696:43:0;;;;;5322:25:1;;;44684:9:0;;-1:-1:-1;;;;;44706:10:0;;44696:34;;5295:18:1;;44696:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44783:13;44799:20;;;:11;:20;;;;;;44684:55;;-1:-1:-1;44799:20:0;;44875:14;;;44799:20;44875:14;44871:163;;;44917:24;;;;:15;:24;;;;;44903:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44985:11;44997:18;:7;:16;:18::i;:::-;44968:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44948:78;;44871:163;45044:15;45040:378;;45076:7;45073:109;;45134:10;45145:18;:7;:16;:18::i;:::-;45117:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45097:77;;45073:109;45192:4;45198:1;45192:7;45188:108;;;45250:8;45259:18;:7;:16;:18::i;:::-;45233:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45213:75;;45188:108;45307:4;45313:1;45307:7;45303:108;;;45365:8;45374:18;:7;:16;:18::i;:::-;45348:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45328:75;;45303:108;44607:820;;44578:849;45438:10;;;;;;;45435:129;;45511:10;45522:18;:7;:16;:18::i;:::-;45494:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45474:77;;45435:129;-1:-1:-1;45577:10:0;44399:1194;-1:-1:-1;;44399:1194:0:o;47645:2506::-;47863:11;;47733:9;;47715:15;;;;;;47863:11;;;;;;:17;;:11;:17;47855:53;;;;-1:-1:-1;;;47855:53:0;;18861:2:1;47855:53:0;;;18843:21:1;18900:2;18880:18;;;18873:30;18939:26;18919:18;;;18912:54;18983:18;;47855:53:0;18659:348:1;47855:53:0;48000:10;;47990:47;;-1:-1:-1;;;47990:47:0;;48026:10;47990:47;;;1696:51:1;47970:16:0;;-1:-1:-1;;;;;48000:10:0;;47990:35;;1669:18:1;;47990:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47970:67;;48085:9;;48095:1;48085:12;;;;;;;:::i;:::-;;;;;;;48101:1;48085:17;;48077:35;;;;-1:-1:-1;;;48077:35:0;;19214:2:1;48077:35:0;;;19196:21:1;19253:1;19233:18;;;19226:29;-1:-1:-1;;;19271:18:1;;;19264:36;19317:18;;48077:35:0;19012:329:1;48077:35:0;48199:11;;;;:17;;:11;:17;48195:1260;;;48290:10;48304:1;48290:15;48287:563;;;48375:14;48371:220;;48457:4;;48444:9;:17;48436:35;;;;-1:-1:-1;;;48436:35:0;;19548:2:1;48436:35:0;;;19530:21:1;19587:1;19567:18;;;19560:29;-1:-1:-1;;;19605:18:1;;;19598:36;19651:18;;48436:35:0;19346:329:1;48436:35:0;48535:10;;48525:54;;-1:-1:-1;;;48525:54:0;;-1:-1:-1;;;;;48535:10:0;;;;48525:35;;:54;;48561:10;;48535;;;;48525:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48371:220;48605:11;48618:1;48605:14;48601:236;;;48703:4;;48690:9;:17;48682:35;;;;-1:-1:-1;;;48682:35:0;;20250:2:1;48682:35:0;;;20232:21:1;20289:1;20269:18;;;20262:29;-1:-1:-1;;;20307:18:1;;;20300:36;20353:18;;48682:35:0;20048:329:1;48682:35:0;48781:10;;48771:54;;-1:-1:-1;;;48771:54:0;;-1:-1:-1;;;;;48781:10:0;;;;48771:35;;:54;;48807:10;;48818:1;;48781:10;;48771:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48601:236;48908:1;48895:10;:14;48892:556;;;48979:14;48975:220;;49061:4;;49048:9;:17;49040:35;;;;-1:-1:-1;;;49040:35:0;;20952:2:1;49040:35:0;;;20934:21:1;20991:1;20971:18;;;20964:29;-1:-1:-1;;;21009:18:1;;;21002:36;21055:18;;49040:35:0;20750:329:1;49040:35:0;49139:10;;49129:54;;-1:-1:-1;;;49129:54:0;;-1:-1:-1;;;;;49139:10:0;;;;49129:35;;:54;;49165:10;;49176:1;;49139:10;;49129:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48975:220;49209:11;49222:1;49209:14;49205:236;;;49307:4;;49294:9;:17;49286:35;;;;-1:-1:-1;;;49286:35:0;;21286:2:1;49286:35:0;;;21268:21:1;21325:1;21305:18;;;21298:29;-1:-1:-1;;;21343:18:1;;;21336:36;21389:18;;49286:35:0;21084:329:1;49286:35:0;49385:10;;49375:54;;-1:-1:-1;;;49375:54:0;;-1:-1:-1;;;;;49385:10:0;;;;49375:35;;:54;;49411:10;;49422:1;;49385:10;;49375:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49205:236;49466:9;49461:309;49485:10;49481:1;:14;49461:309;;;49594:10;;-1:-1:-1;;;;;49594:10:0;49584:34;49619:9;;49629:1;49619:12;;;;;;;:::i;:::-;;;;;;;49584:48;;;;;;;;;;;;;5322:25:1;;5310:2;5295:18;;5176:177;49584:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49567:65;;-1:-1:-1;49567:65:0;-1:-1:-1;49661:4:0;49649:16;;;;;49641:44;;;;-1:-1:-1;;;49641:44:0;;21931:2:1;49641:44:0;;;21913:21:1;21970:2;21950:18;;;21943:30;-1:-1:-1;;;21989:18:1;;;21982:46;22045:18;;49641:44:0;21729:340:1;49641:44:0;49694:10;-1:-1:-1;;;;;49694:27:0;;49722:10;49742:4;49749:9;;49759:1;49749:12;;;;;;;:::i;:::-;49694:68;;-1:-1:-1;;;;;;49694:68:0;;;;;;;-1:-1:-1;;;;;22332:15:1;;;49694:68:0;;;22314:34:1;22384:15;;;;22364:18;;;22357:43;-1:-1:-1;49749:12:0;;;;;;22416:18:1;;;22409:34;22249:18;;49694:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49497:3;;;;;:::i;:::-;;;;49461:309;;;-1:-1:-1;49869:10:0;;49859:42;;-1:-1:-1;;;49859:42:0;;49890:10;49859:42;;;1696:51:1;-1:-1:-1;;;;;49869:10:0;;;;49859:30;;1669:18:1;;49859:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49847:54;-1:-1:-1;49912:16:0;49908:219;;49956:10;;49946:60;;-1:-1:-1;;;49946:60:0;;49956:10;49946:60;;;14678:41:1;49995:10:0;14735:18:1;;;14728:60;-1:-1:-1;;;;;49956:10:0;;;;49946:43;;14651:18:1;;49946:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50053:10:0;;50043:41;;-1:-1:-1;;;50043:41:0;;50082:1;50043:41;;;5322:25:1;-1:-1:-1;;;;;50053:10:0;;;;-1:-1:-1;50043:38:0;;-1:-1:-1;5295:18:1;;50043:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49908:219;50144:1;50133:8;;:12;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;47645:2506:0:o;53605:627::-;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;53744:9;53726:15:::1;53768:460;53792:10;53788:1;:14;53768:460;;;53911:10;::::0;53875:15:::1;::::0;;;-1:-1:-1;;;;;53911:10:0::1;53901:34;53936:9:::0;;53946:1;53936:12;;::::1;;;;;:::i;:::-;;;;;;;53901:48;;;;;;;;;;;;;5322:25:1::0;;5310:2;5295:18;;5176:177;53901:48:0::1;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53874:75:::0;;-1:-1:-1;53874:75:0;-1:-1:-1;53978:4:0::1;53966:16:::0;::::1;;;53958:47;;;::::0;-1:-1:-1;;;53958:47:0;;23229:2:1;53958:47:0::1;::::0;::::1;23211:21:1::0;23268:2;23248:18;;;23241:30;-1:-1:-1;;;23287:18:1;;;23280:49;23346:18;;53958:47:0::1;23027:343:1::0;53958:47:0::1;54018:11;54031:1;54018:14;54014:98;;;8926:6:::0;;54070:32:::1;::::0;8926:6;;;-1:-1:-1;;;;;8926:6:0;54089:9:::1;;54099:1;54089:12;;;;;;;:::i;:::-;;;;;;;54070:9;:32::i;:::-;54124:11;54137:1;54124:14;54120:93;;;54175:28;54185:3;54190:9;;54200:1;54190:12;;;;;;;:::i;54175:28::-;53809:419;;53804:3;;;;;:::i;:::-;;;;53768:460;;;;53718:514;53605:627:::0;;;;:::o;46051:233::-;46149:21;46157:12;46149:7;:21::i;:::-;-1:-1:-1;;;;;46135:35:0;:10;-1:-1:-1;;;;;46135:35:0;;46127:61;;;;-1:-1:-1;;;46127:61:0;;23577:2:1;46127:61:0;;;23559:21:1;23616:2;23596:18;;;23589:30;-1:-1:-1;;;23635:18:1;;;23628:44;23689:18;;46127:61:0;23375:338:1;46127:61:0;-1:-1:-1;46209:10:0;46197:23;;;;:11;:23;;;;;:34;;-1:-1:-1;;46197:34:0;;;;;;;;;;46051:233::o;52305:163::-;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;8926:6;;52373:46:::1;::::0;52355:12:::1;::::0;8926:6;;;-1:-1:-1;;;;;8926:6:0;;52393:21:::1;::::0;52355:12;52373:46;52355:12;52373:46;52393:21;8926:6;52373:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52354:65;;;52434:7;52426:36;;;::::0;-1:-1:-1;;;52426:36:0;;24130:2:1;52426:36:0::1;::::0;::::1;24112:21:1::0;24169:2;24149:18;;;24142:30;-1:-1:-1;;;24188:18:1;;;24181:46;24244:18;;52426:36:0::1;23928:340:1::0;9753:192:0;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9842:22:0;::::1;9834:73;;;::::0;-1:-1:-1;;;9834:73:0;;24475:2:1;9834:73:0::1;::::0;::::1;24457:21:1::0;24514:2;24494:18;;;24487:30;24553:34;24533:18;;;24526:62;-1:-1:-1;;;24604:18:1;;;24597:36;24650:19;;9834:73:0::1;24273:402:1::0;9834:73:0::1;9918:19;9928:8;9918:9;:19::i;52474:219::-:0;8926:6;;-1:-1:-1;;;;;8926:6:0;;;;;7721:10;9073:23;9065:68;;;;-1:-1:-1;;;9065:68:0;;;;;;;:::i;:::-;52538:12:::1;52560:5;-1:-1:-1::0;;;;;52553:22:0::1;;52584:7;8926:6:::0;;-1:-1:-1;;;;;8926:6:0;;;;;;8853:87;52584:7:::1;52600:38;::::0;-1:-1:-1;;;52600:38:0;;52632:4:::1;52600:38;::::0;::::1;1696:51:1::0;-1:-1:-1;;;;;52600:23:0;::::1;::::0;::::1;::::0;1669:18:1;;52600:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52553:92;::::0;-1:-1:-1;;;;;;52553:92:0::1;::::0;;;;;;-1:-1:-1;;;;;24872:32:1;;;52553:92:0::1;::::0;::::1;24854:51:1::0;24921:18;;;24914:34;24827:18;;52553:92:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52538:107;;52660:7;52652:35;;;::::0;-1:-1:-1;;;52652:35:0;;25161:2:1;52652:35:0::1;::::0;::::1;25143:21:1::0;25200:2;25180:18;;;25173:30;-1:-1:-1;;;25219:18:1;;;25212:45;25274:18;;52652:35:0::1;24959:339:1::0;52652:35:0::1;52531:162;52474:219:::0;:::o;33466:127::-;33531:4;33555:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33555:16:0;:30;;;33466:127::o;37448:174::-;37523:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;37523:29:0;-1:-1:-1;;;;;37523:29:0;;;;;;;;:24;;37577:23;37523:24;37577:14;:23::i;:::-;-1:-1:-1;;;;;37568:46:0;;;;;;;;;;;37448:174;;:::o;50821:579::-;50925:11;50921:474;;;51065:17;51073:8;51065:7;:17::i;:::-;:55;;;;-1:-1:-1;51115:4:0;51086:17;51094:8;51086:7;:17::i;:::-;-1:-1:-1;;;;;51086:34:0;;51065:55;51061:182;;;51133:48;51155:4;51162;51168:8;51133:48;;;;;;;;;;;;:13;:48::i;:::-;51061:182;;;51208:25;51218:4;51224:8;51208:9;:25::i;:::-;51256:17;;51264:8;;51256:17;;;;;29665:341;29595:411;;:::o;50921:474::-;51296:58;;-1:-1:-1;;;51296:58:0;;51332:4;51296:58;;;22314:34:1;-1:-1:-1;;;;;22384:15:1;;;22364:18;;;22357:43;22416:18;;;22409:34;;;51296:10:0;:27;;;;22249:18:1;;51296:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51368:19:0;;51378:8;;-1:-1:-1;51368:19:0;;-1:-1:-1;51368:19:0;;;50821:579;;;:::o;33760:348::-;33853:4;33878:16;33886:7;33878;:16::i;:::-;33870:73;;;;-1:-1:-1;;;33870:73:0;;25505:2:1;33870:73:0;;;25487:21:1;25544:2;25524:18;;;25517:30;25583:34;25563:18;;;25556:62;-1:-1:-1;;;25634:18:1;;;25627:42;25686:19;;33870:73:0;25303:408:1;33870:73:0;33954:13;33970:23;33985:7;33970:14;:23::i;:::-;33954:39;;34023:5;-1:-1:-1;;;;;34012:16:0;:7;-1:-1:-1;;;;;34012:16:0;;:51;;;;34056:7;-1:-1:-1;;;;;34032:31:0;:20;34044:7;34032:11;:20::i;:::-;-1:-1:-1;;;;;34032:31:0;;34012:51;:87;;;-1:-1:-1;;;;;;30852:25:0;;;30828:4;30852:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;34067:32;30731:164;36752:578;36911:4;-1:-1:-1;;;;;36884:31:0;:23;36899:7;36884:14;:23::i;:::-;-1:-1:-1;;;;;36884:31:0;;36876:85;;;;-1:-1:-1;;;36876:85:0;;25918:2:1;36876:85:0;;;25900:21:1;25957:2;25937:18;;;25930:30;25996:34;25976:18;;;25969:62;-1:-1:-1;;;26047:18:1;;;26040:39;26096:19;;36876:85:0;25716:405:1;36876:85:0;-1:-1:-1;;;;;36980:16:0;;36972:65;;;;-1:-1:-1;;;36972:65:0;;26328:2:1;36972:65:0;;;26310:21:1;26367:2;26347:18;;;26340:30;26406:34;26386:18;;;26379:62;-1:-1:-1;;;26457:18:1;;;26450:34;26501:19;;36972:65:0;26126:400:1;36972:65:0;37050:39;37071:4;37077:2;37081:7;37050:20;:39::i;:::-;37154:29;37171:1;37175:7;37154:8;:29::i;:::-;-1:-1:-1;;;;;37196:15:0;;;;;;:9;:15;;;;;:20;;37215:1;;37196:15;:20;;37215:1;;37196:20;:::i;:::-;;;;-1:-1:-1;;;;;;;37227:13:0;;;;;;:9;:13;;;;;:18;;37244:1;;37227:13;:18;;37244:1;;37227:18;:::i;:::-;;;;-1:-1:-1;;37256:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;37256:21:0;-1:-1:-1;;;;;37256:21:0;;;;;;;;;37295:27;;37256:16;;37295:27;;;;;;;36752:578;;;:::o;32838:315::-;32995:28;33005:4;33011:2;33015:7;32995:9;:28::i;:::-;33042:48;33065:4;33071:2;33075:7;33084:5;33042:22;:48::i;:::-;33034:111;;;;-1:-1:-1;;;33034:111:0;;;;;;;:::i;34450:110::-;34526:26;34536:2;34540:7;34526:26;;;;;;;;;;;;:9;:26::i;4877:122::-;3887:7;;;;4411:41;;;;-1:-1:-1;;;4411:41:0;;27282:2:1;4411:41:0;;;27264:21:1;27321:2;27301:18;;;27294:30;-1:-1:-1;;;27340:18:1;;;27333:50;27400:18;;4411:41:0;27080:344:1;4411:41:0;4936:7:::1;:15:::0;;-1:-1:-1;;4936:15:0::1;::::0;;4877:122::o;9953:173::-;10028:6;;;-1:-1:-1;;;;;10045:17:0;;;10028:6;10045:17;;;-1:-1:-1;;;;;;10045:17:0;;;;;;10078:40;;10028:6;;;;;;;;10078:40;;10009:16;;10078:40;9998:128;9953:173;:::o;4616:120::-;3887:7;;;;4141:9;4133:38;;;;-1:-1:-1;;;4133:38:0;;27631:2:1;4133:38:0;;;27613:21:1;27670:2;27650:18;;;27643:30;-1:-1:-1;;;27689:18:1;;;27682:46;27745:18;;4133:38:0;27429:340:1;4133:38:0;4676:7:::1;:14:::0;;-1:-1:-1;;4676:14:0::1;4686:4;4676:14;::::0;;4616:120::o;5257:723::-;5313:13;5534:10;5530:53;;-1:-1:-1;;5561:10:0;;;;;;;;;;;;-1:-1:-1;;;5561:10:0;;;;;5257:723::o;5530:53::-;5608:5;5593:12;5649:78;5656:9;;5649:78;;5682:8;;;;:::i;:::-;;-1:-1:-1;5705:10:0;;-1:-1:-1;5713:2:0;5705:10;;:::i;:::-;;;5649:78;;;5737:19;5769:6;5759:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5759:17:0;;5737:39;;5787:154;5794:10;;5787:154;;5821:11;5831:1;5821:11;;:::i;:::-;;-1:-1:-1;5890:10:0;5898:2;5890:5;:10;:::i;:::-;5877:24;;:2;:24;:::i;:::-;5864:39;;5847:6;5854;5847:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5847:56:0;;;;;;;;-1:-1:-1;5918:11:0;5927:2;5918:11;;:::i;:::-;;;5787:154;;52045:183;3887:7;;;;4141:9;4133:38;;;;-1:-1:-1;;;4133:38:0;;27631:2:1;4133:38:0;;;27613:21:1;27670:2;27650:18;;;27643:30;-1:-1:-1;;;27689:18:1;;;27682:46;27745:18;;4133:38:0;27429:340:1;38187:799:0;38342:4;-1:-1:-1;;;;;38363:13:0;;11222:20;11270:8;38359:620;;38399:72;;-1:-1:-1;;;38399:72:0;;-1:-1:-1;;;;;38399:36:0;;;;;:72;;7721:10;;38450:4;;38456:7;;38465:5;;38399:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38399:72:0;;;;;;;;-1:-1:-1;;38399:72:0;;;;;;;;;;;;:::i;:::-;;;38395:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38641:13:0;;38637:272;;38684:60;;-1:-1:-1;;;38684:60:0;;;;;;;:::i;38637:272::-;38859:6;38853:13;38844:6;38840:2;38836:15;38829:38;38395:529;-1:-1:-1;;;;;;38522:51:0;-1:-1:-1;;;38522:51:0;;-1:-1:-1;38515:58:0;;38359:620;-1:-1:-1;38963:4:0;38956:11;;34787:321;34917:18;34923:2;34927:7;34917:5;:18::i;:::-;34968:54;34999:1;35003:2;35007:7;35016:5;34968:22;:54::i;:::-;34946:154;;;;-1:-1:-1;;;34946:154:0;;;;;;;:::i;35444:382::-;-1:-1:-1;;;;;35524:16:0;;35516:61;;;;-1:-1:-1;;;35516:61:0;;29109:2:1;35516:61:0;;;29091:21:1;;;29128:18;;;29121:30;29187:34;29167:18;;;29160:62;29239:18;;35516:61:0;28907:356:1;35516:61:0;35597:16;35605:7;35597;:16::i;:::-;35596:17;35588:58;;;;-1:-1:-1;;;35588:58:0;;29470:2:1;35588:58:0;;;29452:21:1;29509:2;29489:18;;;29482:30;29548;29528:18;;;29521:58;29596:18;;35588:58:0;29268:352:1;35588:58:0;35659:45;35688:1;35692:2;35696:7;35659:20;:45::i;:::-;-1:-1:-1;;;;;35717:13:0;;;;;;:9;:13;;;;;:18;;35734:1;;35717:13;:18;;35734:1;;35717:18;:::i;:::-;;;;-1:-1:-1;;35746:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35746:21:0;-1:-1:-1;;;;;35746:21:0;;;;;;;;35785:33;;35746:16;;;35785:33;;35746:16;;35785:33;35444:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:269::-;908:3;946:5;940:12;973:6;968:3;961:19;989:63;1045:6;1038:4;1033:3;1029:14;1022:4;1015:5;1011:16;989:63;:::i;:::-;1106:2;1085:15;-1:-1:-1;;1081:29:1;1072:39;;;;1113:4;1068:50;;855:269;-1:-1:-1;;855:269:1:o;1129:231::-;1278:2;1267:9;1260:21;1241:4;1298:56;1350:2;1339:9;1335:18;1327:6;1298:56;:::i;1365:180::-;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;-1:-1:-1;1516:23:1;;1365:180;-1:-1:-1;1365:180:1:o;1758:131::-;-1:-1:-1;;;;;1833:31:1;;1823:42;;1813:70;;1879:1;1876;1869:12;1894:315;1962:6;1970;2023:2;2011:9;2002:7;1998:23;1994:32;1991:52;;;2039:1;2036;2029:12;1991:52;2078:9;2065:23;2097:31;2122:5;2097:31;:::i;:::-;2147:5;2199:2;2184:18;;;;2171:32;;-1:-1:-1;;;1894:315:1:o;2214:127::-;2275:10;2270:3;2266:20;2263:1;2256:31;2306:4;2303:1;2296:15;2330:4;2327:1;2320:15;2346:631;2410:5;2440:18;2481:2;2473:6;2470:14;2467:40;;;2487:18;;:::i;:::-;2562:2;2556:9;2530:2;2616:15;;-1:-1:-1;;2612:24:1;;;2638:2;2608:33;2604:42;2592:55;;;2662:18;;;2682:22;;;2659:46;2656:72;;;2708:18;;:::i;:::-;2748:10;2744:2;2737:22;2777:6;2768:15;;2807:6;2799;2792:22;2847:3;2838:6;2833:3;2829:16;2826:25;2823:45;;;2864:1;2861;2854:12;2823:45;2914:6;2909:3;2902:4;2894:6;2890:17;2877:44;2969:1;2962:4;2953:6;2945;2941:19;2937:30;2930:41;;;;2346:631;;;;;:::o;2982:794::-;3077:6;3085;3093;3101;3154:3;3142:9;3133:7;3129:23;3125:33;3122:53;;;3171:1;3168;3161:12;3122:53;3210:9;3197:23;3229:31;3254:5;3229:31;:::i;:::-;3279:5;-1:-1:-1;3336:2:1;3321:18;;3308:32;3349:33;3308:32;3349:33;:::i;:::-;3401:7;-1:-1:-1;3455:2:1;3440:18;;3427:32;;-1:-1:-1;3510:2:1;3495:18;;3482:32;3537:18;3526:30;;3523:50;;;3569:1;3566;3559:12;3523:50;3592:22;;3645:4;3637:13;;3633:27;-1:-1:-1;3623:55:1;;3674:1;3671;3664:12;3623:55;3697:73;3762:7;3757:2;3744:16;3739:2;3735;3731:11;3697:73;:::i;:::-;3687:83;;;2982:794;;;;;;;:::o;3988:456::-;4065:6;4073;4081;4134:2;4122:9;4113:7;4109:23;4105:32;4102:52;;;4150:1;4147;4140:12;4102:52;4189:9;4176:23;4208:31;4233:5;4208:31;:::i;:::-;4258:5;-1:-1:-1;4315:2:1;4300:18;;4287:32;4328:33;4287:32;4328:33;:::i;:::-;3988:456;;4380:7;;-1:-1:-1;;;4434:2:1;4419:18;;;;4406:32;;3988:456::o;4449:722::-;4545:6;4553;4561;4569;4622:3;4610:9;4601:7;4597:23;4593:33;4590:53;;;4639:1;4636;4629:12;4590:53;4675:9;4662:23;4652:33;;4736:2;4725:9;4721:18;4708:32;4763:18;4755:6;4752:30;4749:50;;;4795:1;4792;4785:12;4749:50;4818:22;;4871:4;4863:13;;4859:27;-1:-1:-1;4849:55:1;;4900:1;4897;4890:12;4849:55;4923:73;4988:7;4983:2;4970:16;4965:2;4961;4957:11;4923:73;:::i;:::-;4913:83;;;5043:2;5032:9;5028:18;5015:32;5005:42;;5097:2;5086:9;5082:18;5069:32;5110:31;5135:5;5110:31;:::i;:::-;4449:722;;;;-1:-1:-1;4449:722:1;;-1:-1:-1;;4449:722:1:o;5358:367::-;5421:8;5431:6;5485:3;5478:4;5470:6;5466:17;5462:27;5452:55;;5503:1;5500;5493:12;5452:55;-1:-1:-1;5526:20:1;;5569:18;5558:30;;5555:50;;;5601:1;5598;5591:12;5555:50;5638:4;5630:6;5626:17;5614:29;;5698:3;5691:4;5681:6;5678:1;5674:14;5666:6;5662:27;5658:38;5655:47;5652:67;;;5715:1;5712;5705:12;5652:67;5358:367;;;;;:::o;5730:437::-;5816:6;5824;5877:2;5865:9;5856:7;5852:23;5848:32;5845:52;;;5893:1;5890;5883:12;5845:52;5933:9;5920:23;5966:18;5958:6;5955:30;5952:50;;;5998:1;5995;5988:12;5952:50;6037:70;6099:7;6090:6;6079:9;6075:22;6037:70;:::i;:::-;6126:8;;6011:96;;-1:-1:-1;5730:437:1;-1:-1:-1;;;;5730:437:1:o;6172:247::-;6231:6;6284:2;6272:9;6263:7;6259:23;6255:32;6252:52;;;6300:1;6297;6290:12;6252:52;6339:9;6326:23;6358:31;6383:5;6358:31;:::i;6424:118::-;6510:5;6503:13;6496:21;6489:5;6486:32;6476:60;;6532:1;6529;6522:12;6547:382;6612:6;6620;6673:2;6661:9;6652:7;6648:23;6644:32;6641:52;;;6689:1;6686;6679:12;6641:52;6728:9;6715:23;6747:31;6772:5;6747:31;:::i;:::-;6797:5;-1:-1:-1;6854:2:1;6839:18;;6826:32;6867:30;6826:32;6867:30;:::i;:::-;6916:7;6906:17;;;6547:382;;;;;:::o;6934:315::-;7002:6;7010;7063:2;7051:9;7042:7;7038:23;7034:32;7031:52;;;7079:1;7076;7069:12;7031:52;7115:9;7102:23;7092:33;;7175:2;7164:9;7160:18;7147:32;7188:31;7213:5;7188:31;:::i;7254:519::-;7337:6;7345;7353;7361;7414:3;7402:9;7393:7;7389:23;7385:33;7382:53;;;7431:1;7428;7421:12;7382:53;7467:9;7454:23;7444:33;;7527:2;7516:9;7512:18;7499:32;7540:28;7562:5;7540:28;:::i;:::-;7587:5;-1:-1:-1;7639:2:1;7624:18;;7611:32;;-1:-1:-1;7695:2:1;7680:18;;7667:32;7708:33;7667:32;7708:33;:::i;7778:640::-;7882:6;7890;7898;7906;7959:2;7947:9;7938:7;7934:23;7930:32;7927:52;;;7975:1;7972;7965:12;7927:52;8015:9;8002:23;8048:18;8040:6;8037:30;8034:50;;;8080:1;8077;8070:12;8034:50;8119:70;8181:7;8172:6;8161:9;8157:22;8119:70;:::i;:::-;8208:8;;-1:-1:-1;8093:96:1;-1:-1:-1;;8290:2:1;8275:18;;8262:32;;-1:-1:-1;8344:2:1;8329:18;;8316:32;8357:31;8316:32;8357:31;:::i;8423:309::-;8488:6;8496;8549:2;8537:9;8528:7;8524:23;8520:32;8517:52;;;8565:1;8562;8555:12;8517:52;8604:9;8591:23;8623:28;8645:5;8623:28;:::i;8737:388::-;8805:6;8813;8866:2;8854:9;8845:7;8841:23;8837:32;8834:52;;;8882:1;8879;8872:12;8834:52;8921:9;8908:23;8940:31;8965:5;8940:31;:::i;:::-;8990:5;-1:-1:-1;9047:2:1;9032:18;;9019:32;9060:33;9019:32;9060:33;:::i;9130:380::-;9209:1;9205:12;;;;9252;;;9273:61;;9327:4;9319:6;9315:17;9305:27;;9273:61;9380:2;9372:6;9369:14;9349:18;9346:38;9343:161;;;9426:10;9421:3;9417:20;9414:1;9407:31;9461:4;9458:1;9451:15;9489:4;9486:1;9479:15;9343:161;;9130:380;;;:::o;11161:413::-;11363:2;11345:21;;;11402:2;11382:18;;;11375:30;11441:34;11436:2;11421:18;;11414:62;-1:-1:-1;;;11507:2:1;11492:18;;11485:47;11564:3;11549:19;;11161:413::o;12258:356::-;12460:2;12442:21;;;12479:18;;;12472:30;12538:34;12533:2;12518:18;;12511:62;12605:2;12590:18;;12258:356::o;12619:251::-;12689:6;12742:2;12730:9;12721:7;12717:23;12713:32;12710:52;;;12758:1;12755;12748:12;12710:52;12790:9;12784:16;12809:31;12834:5;12809:31;:::i;14106:127::-;14167:10;14162:3;14158:20;14155:1;14148:31;14198:4;14195:1;14188:15;14222:4;14219:1;14212:15;14238:127;14299:10;14294:3;14290:20;14287:1;14280:31;14330:4;14327:1;14320:15;14354:4;14351:1;14344:15;14370:135;14409:3;-1:-1:-1;;14430:17:1;;14427:43;;;14450:18;;:::i;:::-;-1:-1:-1;14497:1:1;14486:13;;14370:135::o;15400:184::-;15470:6;15523:2;15511:9;15502:7;15498:23;15494:32;15491:52;;;15539:1;15536;15529:12;15491:52;-1:-1:-1;15562:16:1;;15400:184;-1:-1:-1;15400:184:1:o;16277:185::-;16319:3;16357:5;16351:12;16372:52;16417:6;16412:3;16405:4;16398:5;16394:16;16372:52;:::i;:::-;16440:16;;;;;16277:185;-1:-1:-1;;16277:185:1:o;16585:637::-;16865:3;16903:6;16897:13;16919:53;16965:6;16960:3;16953:4;16945:6;16941:17;16919:53;:::i;:::-;17035:13;;16994:16;;;;17057:57;17035:13;16994:16;17091:4;17079:17;;17057:57;:::i;:::-;-1:-1:-1;;;17136:20:1;;17165:22;;;17214:1;17203:13;;16585:637;-1:-1:-1;;;;16585:637:1:o;17353:1301::-;17630:3;17659:1;17692:6;17686:13;17722:3;17744:1;17772:9;17768:2;17764:18;17754:28;;17832:2;17821:9;17817:18;17854;17844:61;;17898:4;17890:6;17886:17;17876:27;;17844:61;17924:2;17972;17964:6;17961:14;17941:18;17938:38;17935:165;;;-1:-1:-1;;;17999:33:1;;18055:4;18052:1;18045:15;18085:4;18006:3;18073:17;17935:165;18116:18;18143:104;;;;18261:1;18256:320;;;;18109:467;;18143:104;-1:-1:-1;;18176:24:1;;18164:37;;18221:16;;;;-1:-1:-1;18143:104:1;;18256:320;17300:1;17293:14;;;17337:4;17324:18;;18351:1;18365:165;18379:6;18376:1;18373:13;18365:165;;;18457:14;;18444:11;;;18437:35;18500:16;;;;18394:10;;18365:165;;;18369:3;;18559:6;18554:3;18550:16;18543:23;;18109:467;;;;;;;18592:56;18617:30;18643:3;18635:6;18617:30;:::i;:::-;-1:-1:-1;;;16527:20:1;;16572:1;16563:11;;16467:113;18592:56;18585:63;17353:1301;-1:-1:-1;;;;;17353:1301:1:o;19680:363::-;-1:-1:-1;;;;;19902:32:1;;;;19884:51;;19966:2;19951:18;;19944:34;;;;20021:14;20014:22;20009:2;19994:18;;19987:50;19872:2;19857:18;;19680:363::o;21418:306::-;21494:6;21502;21555:2;21543:9;21534:7;21530:23;21526:32;21523:52;;;21571:1;21568;21561:12;21523:52;21603:9;21597:16;21622:28;21644:5;21622:28;:::i;:::-;21714:2;21699:18;;;;21693:25;21669:5;;21693:25;;-1:-1:-1;;;21418:306:1:o;22454:245::-;22521:6;22574:2;22562:9;22553:7;22549:23;22545:32;22542:52;;;22590:1;22587;22580:12;22542:52;22622:9;22616:16;22641:28;22663:5;22641:28;:::i;22894:128::-;22934:3;22965:1;22961:6;22958:1;22955:13;22952:39;;;22971:18;;:::i;:::-;-1:-1:-1;23007:9:1;;22894:128::o;26531:125::-;26571:4;26599:1;26596;26593:8;26590:34;;;26604:18;;:::i;:::-;-1:-1:-1;26641:9:1;;26531:125::o;26661:414::-;26863:2;26845:21;;;26902:2;26882:18;;;26875:30;26941:34;26936:2;26921:18;;26914:62;-1:-1:-1;;;27007:2:1;26992:18;;26985:48;27065:3;27050:19;;26661:414::o;27774:127::-;27835:10;27830:3;27826:20;27823:1;27816:31;27866:4;27863:1;27856:15;27890:4;27887:1;27880:15;27906:120;27946:1;27972;27962:35;;27977:18;;:::i;:::-;-1:-1:-1;28011:9:1;;27906:120::o;28031:112::-;28063:1;28089;28079:35;;28094:18;;:::i;:::-;-1:-1:-1;28128:9:1;;28031:112::o;28148:500::-;-1:-1:-1;;;;;28417:15:1;;;28399:34;;28469:15;;28464:2;28449:18;;28442:43;28516:2;28501:18;;28494:34;;;28564:3;28559:2;28544:18;;28537:31;;;28342:4;;28585:57;;28622:19;;28614:6;28585:57;:::i;:::-;28577:65;28148:500;-1:-1:-1;;;;;;28148:500:1:o;28653:249::-;28722:6;28775:2;28763:9;28754:7;28750:23;28746:32;28743:52;;;28791:1;28788;28781:12;28743:52;28823:9;28817:16;28842:30;28866:5;28842:30;:::i
Swarm Source
ipfs://83d726294eb2aa0407e161207804e9af6c09817669b431cbcaf0bc2ce389a81f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.