More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 72 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Finish Auction | 14063378 | 1070 days ago | IN | 0 ETH | 0.01638668 | ||||
Place Bid With P... | 13844926 | 1104 days ago | IN | 0 ETH | 0.01301192 | ||||
List NFT | 13613498 | 1140 days ago | IN | 0 ETH | 0.01570988 | ||||
List NFT | 13613487 | 1140 days ago | IN | 0 ETH | 0.01882923 | ||||
List NFT | 13613477 | 1140 days ago | IN | 0 ETH | 0.0195843 | ||||
List NFT | 13613472 | 1140 days ago | IN | 0 ETH | 0.01741637 | ||||
Finish Auction | 13613425 | 1140 days ago | IN | 0 ETH | 0.00971119 | ||||
List NFT | 13613408 | 1140 days ago | IN | 0 ETH | 0.01777306 | ||||
List NFT | 13613406 | 1140 days ago | IN | 0 ETH | 0.01840567 | ||||
List NFT | 13613406 | 1140 days ago | IN | 0 ETH | 0.01838665 | ||||
List NFT | 13613391 | 1140 days ago | IN | 0 ETH | 0.01634841 | ||||
Place Bid With P... | 13595343 | 1143 days ago | IN | 0 ETH | 0.01339426 | ||||
Finish Auction | 13594053 | 1143 days ago | IN | 0 ETH | 0.02140656 | ||||
Place Bid With P... | 13594048 | 1143 days ago | IN | 0 ETH | 0.03199964 | ||||
List NFT | 13574845 | 1146 days ago | IN | 0 ETH | 0.02093195 | ||||
List NFT | 13574831 | 1146 days ago | IN | 0 ETH | 0.02193268 | ||||
List NFT | 13574829 | 1146 days ago | IN | 0 ETH | 0.01998548 | ||||
List NFT | 13574812 | 1146 days ago | IN | 0 ETH | 0.02209417 | ||||
List NFT | 13574810 | 1146 days ago | IN | 0 ETH | 0.01947783 | ||||
List NFT | 13574801 | 1146 days ago | IN | 0 ETH | 0.02268918 | ||||
List NFT | 13574796 | 1146 days ago | IN | 0 ETH | 0.02276586 | ||||
List NFT | 13569755 | 1147 days ago | IN | 0 ETH | 0.01748799 | ||||
Place Bid With P... | 13567783 | 1147 days ago | IN | 0 ETH | 0.00966906 | ||||
Place Bid With P... | 13567772 | 1147 days ago | IN | 0 ETH | 0.00945737 | ||||
Place Bid With P... | 13562106 | 1148 days ago | IN | 0 ETH | 0.00353646 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
OwnixMarket
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-13 */ // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/security/Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () { _paused = false; } /** * @dev 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()); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // 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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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/token/ERC1155/IERC1155Receiver.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } } // File: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; } // File: contracts/OwnixNFT/IOwnixERC1155.sol pragma solidity =0.8.7; /** * @title Interface for contracts conforming to Ownix ERC155 */ interface IOwnixERC1155 is IERC1155 { function getFirstTimeOwner(uint256 _tokenId) external view returns (address); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol 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); } // File: contracts/OwnixToken/IOwnixERC20.sol pragma solidity =0.8.7; /** * @title Interface for contracts conforming to Ownix ERC-20 */ interface IOwnixERC20 is IERC20 { function mint(address account, uint256 amount) external; } // File: contracts/OwnixMarket/IOwnixMarket.sol pragma solidity =0.8.7; interface IOwnixMarket { struct Auction { // nft owner address address nftOwner; // ERC1155 address IOwnixERC1155 nft; // ERC1155 token id uint256 tokenId; // Amount uint256 amount; // NFT Index uint32 index; // Reserve price for the list in wei uint256 reservePrice; // List duration uint32 duration; // Time when this list expires at uint256 expiresAt; // Bidder address address bidder; // Price for the bid in wei uint256 bidPrice; // Time when this bid create at uint256 bidCreatedAt; } // EVENTS event NFTListed( address indexed _owner, IOwnixERC1155 indexed _nft, uint256 indexed _tokenId, uint256 _amount, uint256 _index, uint256 _reservePrice, uint256 _expiresAt ); event NFTUnlisted( address indexed _owner, IOwnixERC1155 indexed _nft, uint256 indexed _tokenId, uint256 _amount, uint256 _index ); event ReservePriceChanged( address indexed _owner, IOwnixERC1155 indexed _nft, uint256 indexed _tokenId, uint256 _amount, uint32 _index, uint256 _reservePrice ); event BidCreated( IOwnixERC1155 indexed _nft, uint256 indexed _tokenId, uint256 _amount, uint32 _index, address indexed _bidder, uint256 _price, uint256 bidCreatedAt ); event AuctionExtended( address indexed _owner, IOwnixERC1155 indexed _nft, uint256 indexed _tokenId, uint256 _amount, uint32 _index, uint256 _reservePrice, uint256 _expiresAt ); event AuctionStarted( address _owner, IOwnixERC1155 _nft, uint256 _tokenId, uint256 _amount, uint32 _index, uint256 _reservePrice, uint256 _expiresAt ); event BidAccepted( IOwnixERC1155 indexed _nft, uint256 indexed _tokenId, uint256 _amount, uint256 _index, address _bidder, address indexed _seller, uint256 _price ); event InflationPerMillionChanged(uint256 _inflationFeePerMillion); event BidFeePerMillionChanged(uint256 _bidFeePerMillion); event OwnerSharePerMillionChanged(uint256 _ownerSharePerMillion); event BidMinimumRaisePerMillionChanged(uint256 _bidMinimumRaisePerMillion); event BidMinimumRaiseAmountChanged(uint256 _bidMinimumRaiseAmount); event RoyaltiesPerMillionChanged(uint256 _royaltiesPerMillion); event MinimumAuctionDurationChanged(uint256 _minimumAuctionDuration); event FeeCollectorChanged(address _feeCollector); event InflationCollectorChanged(address _inflationCollector); /** * @dev List NFT * @param _tokenId - The token id * @param _amount The amount of tokens being transferred * @param _reservePrice The reserve price * @param _duration The auction duration in seconds */ function listNFT(uint256 _tokenId, uint256 _amount, uint256 _reservePrice, uint32 _duration) external; /** * @dev Unlist NFT * @param _tokenId - The token id * @param _index The index of tokens being transferred */ function unlistNFT(uint256 _tokenId, uint32 _index) external; /** * @dev Change reserve price * @param _tokenId - The token id * @param _index - The index of tokens being transferred * @param _reservePrice - The new reserve price */ function changeReservePrice(uint256 _tokenId, uint32 _index, uint256 _reservePrice) external; /** * @dev Place a bid for an ERC1155 token. * @notice Tokens can have multiple bids by different users. * Users can have only one bid per token. * If the user places a bid and has an active bid for that token, * the older one will be replaced with the new one. * @param _tokenId - The token id * @param _index - The index of tokens being transferred * @param _price - The price for the bid */ function placeBid(uint256 _tokenId, uint32 _index, uint256 _price) external; /** * @dev Place a bid for an ERC1155 token. * @notice Tokens can have multiple bids by different users. * Users can have only one bid per token. * If the user places a bid and has an active bid for that token, * the older one will be replaced with the new one. * @param _bidder - The bidder address * @param _tokenId - The token id * @param _index - The index of tokens being transferred * @param _price - The price for the bid * @param _deadline A timestamp, the current blocktime must be less than or equal to this timestamp * @param _v - Must produce valid secp256k1 signature from the holder along with `r` and `s` * @param _r - Must produce valid secp256k1 signature from the holder along with `v` and `s` * @param _s - Must produce valid secp256k1 signature from the holder along with `r` and `v` */ function placeBidWithPermit(address _bidder, uint256 _tokenId, uint32 _index, uint256 _price, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) external; /** * @dev Finish auction * @param _tokenId - The token id * @param _index - The index of tokens being transferred */ function finishAuction(uint256 _tokenId, uint32 _index) external; /** * @dev Sets the inflation that's we mint every transfer * @param _inflationPerMillion - The inflation amount from 0 to 999,999 */ function setInflationPerMillion(uint256 _inflationPerMillion) external; /** * @dev Sets the bid fee that's charged to users to bid * @param _bidFeePerMillion - The fee amount from 0 to 999,999 */ function setBidFeePerMillion(uint256 _bidFeePerMillion) external; /** * @dev Sets the share Share for the owner of the contract that's * charged to the seller on a successful sale * @param _ownerSharePerMillion - The amount, from 0 to 999,999 */ function setOwnerSharePerMillion(uint256 _ownerSharePerMillion) external; /** * @dev Sets bid minimum raise percentage value * @param _bidMinimumRaisePerMillion - amount, from 0 to 999,999 */ function setBidMinimumRaisePerMillion(uint256 _bidMinimumRaisePerMillion) external; /** * @dev Sets bid minimum raise token amount value * @param _bidMinimumRaiseAmount - The raise token amount, bigger then 0 */ function setBidMinimumRaiseAmount(uint256 _bidMinimumRaiseAmount) external; /** * @dev Sets the fee collector address * @param _feeCollector - The fee collector address */ function setFeeCollector(address _feeCollector) external; /** * @dev Sets the inflation collector address * @param _inflationCollector - The fee collector address */ function setInflationCollector(address _inflationCollector) external; /** * @dev Sets royalties percentage value * @param _royaltiesPerMillion - The royalties amount, from 0 to 999,999 */ function setRoyaltiesPerMillion(uint256 _royaltiesPerMillion) external; /** * @dev Sets minimum auction duration * @param _minimumAuctionDuration - The minimum auction duration, bigger then 0 */ function setMinimumAuctionDuration(uint256 _minimumAuctionDuration) external; /** * @dev withdraw the erc20 tokens from the contract * @param _withdrawAddress - The withdraw address * @param _amount - The withdrawal amount */ function withdrawERC20(address _withdrawAddress, uint256 _amount) external; /** * @dev withdraw the erc1155 tokens from the contract * @param _tokenAddress - The address of the ERC1155 token * @param _tokenId - The token id * @param _withdrawAddress - The withdraw address * @param _amount - The withdrawal amount */ function withdrawERC1155(address _tokenAddress, uint256 _tokenId, address _withdrawAddress, uint256 _amount) external; /** * @dev Get auction by token id and index * @param _tokenId - The token id * @param _index - token index * @return auction */ function getAuction(uint256 _tokenId, uint32 _index) external returns (Auction memory); /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function pause() external; /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function unpause() external; } // File: contracts/OwnixMarket/OwnixMarket.sol pragma solidity =0.8.7; pragma abicoder v2; contract OwnixMarket is ERC1155Holder, Ownable, Pausable, IOwnixMarket, ReentrancyGuard { using Address for address; uint256 public constant ONE_MILLION = 1 * 10**6; // The ERC20 ownix token IOwnixERC20 immutable public ownixToken; // The ERC1155 ownix token IOwnixERC1155 immutable public ownixNFTToken; // The fee collector address address public feeCollector; // The inflation collector address address public inflationCollector; // Auctions by token token id => index => auction mapping(uint256 => mapping (uint256 => Auction)) private auctions; uint256 public inflationPerMillion; uint256 public bidFeePerMillion; uint256 public ownerSharePerMillion; uint256 public bidMinimumRaisePerMillion; uint256 public bidMinimumRaiseAmount; uint256 public royaltiesPerMillion; uint256 public minimumAuctionDuration; /** * @dev Constructor of the contract. * @param _ownixToken - address of the Ownix token * @param _ownixNFTToken - address of the Ownix NFT token * @param _owner - address of the owner for the contract * @param _feeCollector - address of the fee collector address * @param _inflationCollector - address of the inflation collector address */ constructor( address _ownixToken, address _ownixNFTToken, address _owner, address _feeCollector, address _inflationCollector, uint256 _minimumAuctionDuration ) Ownable() Pausable() { require(_ownixToken != address(0), "Can't be zero address"); require(_ownixNFTToken != address(0), "Can't not be zero address"); require(_owner != address(0), "Can't be zero address"); require(_feeCollector != address(0), "Can't be zero address"); require(_inflationCollector != address(0), "Can't be zero address"); require(_minimumAuctionDuration > 0, "Minimum auction duration can't be zero"); ownixToken = IOwnixERC20(_ownixToken); ownixNFTToken = IOwnixERC1155(_ownixNFTToken); // Set owner transferOwnership(_owner); // Set fee collector address feeCollector = _feeCollector; // Set inflation fee collector address inflationCollector = _inflationCollector; // Set the minimum auction duration minimumAuctionDuration = _minimumAuctionDuration; } function listNFT(uint256 _tokenId, uint256 _amount, uint256 _reservePrice, uint32 _duration) override external nonReentrant() whenNotPaused() { require(_tokenId > 0, "token id can't be zero"); require(_amount > 0, "amount can't be zero"); require(_reservePrice > 0, "reservePrice id can't be zero"); require(_duration >= minimumAuctionDuration, "duration must be bigger the minimum uction duration"); for (uint32 i=0; i < _amount; ++i) { uint32 index = i; require(auctions[_tokenId][index].tokenId == 0, "auction with the same token id is already exists"); auctions[_tokenId][index] = Auction({ nftOwner: msg.sender, nft: ownixNFTToken, tokenId: _tokenId, amount: _amount, index: index, reservePrice: _reservePrice, duration: _duration, expiresAt: 0, bidder: address(0), bidPrice: 0, bidCreatedAt: 0 }); emit NFTListed( msg.sender, ownixNFTToken, _tokenId, _amount, index, _reservePrice, 0 ); } ownixNFTToken.safeTransferFrom( msg.sender, address(this), _tokenId, _amount, "" ); } function unlistNFT(uint256 _tokenId, uint32 _index) override external nonReentrant() whenNotPaused() { Auction memory auction = auctions[_tokenId][_index]; require(auction.expiresAt == 0, "Can't unlist NFT after auction started"); require(auction.nftOwner == msg.sender, "Must be nft owner unlist NFT"); emit NFTUnlisted( auction.nftOwner, ownixNFTToken, _tokenId, 1, _index); ownixNFTToken.safeTransferFrom( address(this), auction.nftOwner, _tokenId, 1, "" ); delete auctions[_tokenId][_index]; } function changeReservePrice(uint256 _tokenId, uint32 _index, uint256 _reservePrice) override external whenNotPaused() { Auction memory auction = auctions[_tokenId][_index]; require(auction.expiresAt == 0, "Can't change reserve price after auction started"); require(auction.nftOwner == msg.sender, "Must be nft owner to change reserve"); auction.reservePrice = _reservePrice; auctions[_tokenId][_index] = auction; emit ReservePriceChanged( msg.sender, ownixNFTToken, _tokenId, 1, _index, _reservePrice ); } function placeBid(uint256 _tokenId, uint32 _index, uint256 _price) override external whenNotPaused() nonReentrant() { _placeBid(msg.sender, _tokenId, _index, _price); } function placeBidWithPermit( address _bidder, uint256 _tokenId, uint32 _index, uint256 _price, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) override external whenNotPaused() nonReentrant() { IERC20Permit(address(ownixToken)).permit(_bidder, address(this), _price, _deadline, _v, _r, _s); _placeBid(_bidder, _tokenId, _index, _price); } function finishAuction(uint256 _tokenId, uint32 _index) override external nonReentrant() whenNotPaused() { Auction memory auction = auctions[_tokenId][_index]; require(auction.bidder != address(0), "Can't finish Auction without any bids"); require(auction.expiresAt < block.timestamp, "Can't finish Auction before it been ended"); uint256 saleShareAmount; if (ownerSharePerMillion > 0) { // Calculate sale share saleShareAmount = auction.bidPrice * ownerSharePerMillion / ONE_MILLION; // Transfer share amount to the bid contract require( ownixToken.transfer(feeCollector, saleShareAmount), "Transferring the share failed" ); } uint256 royaltiesAmount; if (royaltiesPerMillion > 0) { address firstTimeOwner = ownixNFTToken.getFirstTimeOwner(auction.tokenId); if(firstTimeOwner != auction.nftOwner) { // Calculate royalties royaltiesAmount = auction.bidPrice * royaltiesPerMillion / ONE_MILLION; // Transfer royalties Owner require( ownixToken.transfer(firstTimeOwner, royaltiesAmount), "Transferring the royalties failed" ); } } // Transfer ownixToken from bidder to seller require( ownixToken.transfer(auction.nftOwner, auction.bidPrice - (saleShareAmount + royaltiesAmount)), "Transferring ownixToken to nft owner failed" ); if (inflationPerMillion > 0) { // Calculate mint tokens uint256 mintShareAmount = auction.bidPrice * inflationPerMillion / ONE_MILLION; // Mint the new ownix tokens to the inflationCollector ownixToken.mint(inflationCollector, mintShareAmount); } delete auctions[_tokenId][_index]; // Transfer token to bidder ownixNFTToken.safeTransferFrom( address(this), auction.bidder, _tokenId, 1, ""); emit BidAccepted( ownixNFTToken, _tokenId, 1, auction.index, auction.bidder, auction.nftOwner, auction.bidPrice ); } function setInflationPerMillion(uint256 _inflationPerMillion) override external onlyOwner { require( _inflationPerMillion < ONE_MILLION, "The inflation should be between 0 and 999,999" ); inflationPerMillion = _inflationPerMillion; emit InflationPerMillionChanged(inflationPerMillion); } function setBidFeePerMillion(uint256 _bidFeePerMillion) override external onlyOwner { require( _bidFeePerMillion < ONE_MILLION, "The bid fee should be between 0 and 999,999" ); bidFeePerMillion = _bidFeePerMillion; emit BidFeePerMillionChanged(bidFeePerMillion); } function setOwnerSharePerMillion(uint256 _ownerSharePerMillion) override external onlyOwner { require( _ownerSharePerMillion < ONE_MILLION, "The owner share should be between 0 and 999,999" ); ownerSharePerMillion = _ownerSharePerMillion; emit OwnerSharePerMillionChanged(ownerSharePerMillion); } function setBidMinimumRaisePerMillion(uint256 _bidMinimumRaisePerMillion) override external onlyOwner { require( _bidMinimumRaisePerMillion < ONE_MILLION, "bid minimum raise should be between 0 and 999,999" ); bidMinimumRaisePerMillion = _bidMinimumRaisePerMillion; emit BidMinimumRaisePerMillionChanged(bidMinimumRaisePerMillion); } function setBidMinimumRaiseAmount(uint256 _bidMinimumRaiseAmount) override external onlyOwner { require( _bidMinimumRaiseAmount > 0, "bid minimum raise should be bigger then 0" ); bidMinimumRaiseAmount = _bidMinimumRaiseAmount; emit BidMinimumRaiseAmountChanged(_bidMinimumRaiseAmount); } function setFeeCollector(address _feeCollector) override external onlyOwner { require(_feeCollector != address(0), "address can't be the zero address"); feeCollector = _feeCollector; emit FeeCollectorChanged(_feeCollector); } function setInflationCollector(address _inflationCollector) override external onlyOwner { require( _inflationCollector != address(0), "address can't be the zero address" ); inflationCollector = _inflationCollector; emit InflationCollectorChanged(_inflationCollector); } function setRoyaltiesPerMillion(uint256 _royaltiesPerMillion) override external onlyOwner { require( _royaltiesPerMillion < ONE_MILLION, "bid minimum raise should be between 0 and 999,999" ); royaltiesPerMillion = _royaltiesPerMillion; emit RoyaltiesPerMillionChanged(_royaltiesPerMillion); } function setMinimumAuctionDuration(uint256 _minimumAuctionDuration) override external onlyOwner { require( _minimumAuctionDuration > 0, "Minimum auction duration should be bigger then 0" ); minimumAuctionDuration = _minimumAuctionDuration; emit MinimumAuctionDurationChanged(_minimumAuctionDuration); } function withdrawERC20(address _withdrawAddress, uint256 _amount) override external onlyOwner { require( _withdrawAddress != address(0), "address can't be the zero address" ); require( ownixToken.transfer(_withdrawAddress, _amount), "Withdraw failed" ); } function withdrawERC1155( address _tokenAddress, uint256 _tokenId, address _withdrawAddress, uint256 _amount) override external onlyOwner { require( _withdrawAddress != address(0), "address can't be the zero address" ); IERC1155(_tokenAddress).safeTransferFrom( address(this), _withdrawAddress, _tokenId, _amount, "" ); } function getAuction(uint256 _tokenId, uint32 _index) override external view returns (Auction memory) { return auctions[_tokenId][_index]; } function pause() override external onlyOwner { _pause(); } function unpause() override external onlyOwner { _unpause(); } /** * @dev Place a bid for an ERC1155 token. * @notice Tokens can have multiple bids by different users. * Users can have only one bid per token. * If the user places a bid and has an active bid for that token, * the older one will be replaced with the new one. * @param _bidder - address the bidder address * @param _tokenId - uint256 of the token id * @param _index The index of tokens being transferred * @param _price - of the price for the bid */ function _placeBid(address _bidder, uint256 _tokenId, uint32 _index, uint256 _price) private whenNotPaused() { Auction memory auction = auctions[_tokenId][_index]; require(auctions[_tokenId][_index].tokenId != 0, "auction must be listed first"); require(auction.expiresAt == 0 || auction.expiresAt > block.timestamp, "List has been ended, Can't place bid" ); require( (_price >= (auction.bidPrice + bidMinimumRaiseAmount) || _price >= auction.bidPrice + (auction.bidPrice * bidMinimumRaisePerMillion / ONE_MILLION)) && _price >= auction.reservePrice, "Price should be bigger than highest bid and reserve price" ); if(auction.bidder == address(0)) { auction.expiresAt = block.timestamp + auction.duration; auctions[_tokenId][_index] = auction; emit AuctionStarted( auction.nftOwner, ownixNFTToken, _tokenId, auction.amount, auction.index, auction.reservePrice, auction.expiresAt); } else { require(ownixToken.transfer(auction.bidder, auction.bidPrice), "Refund failed"); } // check if place bid in the last minimum auction duration if (auction.expiresAt - block.timestamp <= minimumAuctionDuration) { auction.expiresAt = block.timestamp + minimumAuctionDuration; emit AuctionExtended( auction.nftOwner, ownixNFTToken, _tokenId, auction.amount, _index, auction.reservePrice, auction.expiresAt ); } // Transfer tokens to the market require( ownixToken.transferFrom(_bidder, address(this), _price), "Transferring the bid amount to the marketplace failed" ); // Check if there's a bid fee and transfer the amount to marketplace owner if (bidFeePerMillion > 0) { // Calculate sale share uint256 feeAmount = _price * bidFeePerMillion / ONE_MILLION; require( ownixToken.transferFrom(_bidder, feeCollector, feeAmount), "Transferring the bid fee to the marketplace owner failed" ); } uint256 bidCreatedAt = block.timestamp; // Save Bid auction.bidder = _bidder; auction.bidPrice = _price; auction.bidCreatedAt = bidCreatedAt; auctions[_tokenId][_index] = auction; emit BidCreated( ownixNFTToken, _tokenId, 1, _index, _bidder, _price, bidCreatedAt ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ownixToken","type":"address"},{"internalType":"address","name":"_ownixNFTToken","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_feeCollector","type":"address"},{"internalType":"address","name":"_inflationCollector","type":"address"},{"internalType":"uint256","name":"_minimumAuctionDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"contract IOwnixERC1155","name":"_nft","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_index","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"_reservePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expiresAt","type":"uint256"}],"name":"AuctionExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"contract IOwnixERC1155","name":"_nft","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_index","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"_reservePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expiresAt","type":"uint256"}],"name":"AuctionStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IOwnixERC1155","name":"_nft","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"},{"indexed":false,"internalType":"address","name":"_bidder","type":"address"},{"indexed":true,"internalType":"address","name":"_seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"}],"name":"BidAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IOwnixERC1155","name":"_nft","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_index","type":"uint32"},{"indexed":true,"internalType":"address","name":"_bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bidCreatedAt","type":"uint256"}],"name":"BidCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_bidFeePerMillion","type":"uint256"}],"name":"BidFeePerMillionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_bidMinimumRaiseAmount","type":"uint256"}],"name":"BidMinimumRaiseAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_bidMinimumRaisePerMillion","type":"uint256"}],"name":"BidMinimumRaisePerMillionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_feeCollector","type":"address"}],"name":"FeeCollectorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_inflationCollector","type":"address"}],"name":"InflationCollectorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_inflationFeePerMillion","type":"uint256"}],"name":"InflationPerMillionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_minimumAuctionDuration","type":"uint256"}],"name":"MinimumAuctionDurationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"contract IOwnixERC1155","name":"_nft","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_reservePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expiresAt","type":"uint256"}],"name":"NFTListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"contract IOwnixERC1155","name":"_nft","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"NFTUnlisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_ownerSharePerMillion","type":"uint256"}],"name":"OwnerSharePerMillionChanged","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":"_owner","type":"address"},{"indexed":true,"internalType":"contract IOwnixERC1155","name":"_nft","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_index","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"_reservePrice","type":"uint256"}],"name":"ReservePriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_royaltiesPerMillion","type":"uint256"}],"name":"RoyaltiesPerMillionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"ONE_MILLION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidFeePerMillion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidMinimumRaiseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidMinimumRaisePerMillion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_index","type":"uint32"},{"internalType":"uint256","name":"_reservePrice","type":"uint256"}],"name":"changeReservePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_index","type":"uint32"}],"name":"finishAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_index","type":"uint32"}],"name":"getAuction","outputs":[{"components":[{"internalType":"address","name":"nftOwner","type":"address"},{"internalType":"contract IOwnixERC1155","name":"nft","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"index","type":"uint32"},{"internalType":"uint256","name":"reservePrice","type":"uint256"},{"internalType":"uint32","name":"duration","type":"uint32"},{"internalType":"uint256","name":"expiresAt","type":"uint256"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"bidPrice","type":"uint256"},{"internalType":"uint256","name":"bidCreatedAt","type":"uint256"}],"internalType":"struct IOwnixMarket.Auction","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inflationCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inflationPerMillion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_reservePrice","type":"uint256"},{"internalType":"uint32","name":"_duration","type":"uint32"}],"name":"listNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumAuctionDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerSharePerMillion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownixNFTToken","outputs":[{"internalType":"contract IOwnixERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownixToken","outputs":[{"internalType":"contract IOwnixERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_index","type":"uint32"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"placeBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bidder","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_index","type":"uint32"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"placeBidWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltiesPerMillion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bidFeePerMillion","type":"uint256"}],"name":"setBidFeePerMillion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bidMinimumRaiseAmount","type":"uint256"}],"name":"setBidMinimumRaiseAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bidMinimumRaisePerMillion","type":"uint256"}],"name":"setBidMinimumRaisePerMillion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeCollector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_inflationCollector","type":"address"}],"name":"setInflationCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_inflationPerMillion","type":"uint256"}],"name":"setInflationPerMillion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumAuctionDuration","type":"uint256"}],"name":"setMinimumAuctionDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ownerSharePerMillion","type":"uint256"}],"name":"setOwnerSharePerMillion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltiesPerMillion","type":"uint256"}],"name":"setRoyaltiesPerMillion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_index","type":"uint32"}],"name":"unlistNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_withdrawAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620044a8380380620044a88339810160408190526200003491620003da565b600080546001600160a01b0319163390811782556040519091829160008051602062004488833981519152908290a3506000805460ff60a01b19169055600180556001600160a01b038616620000c05760405162461bcd60e51b815260206004820152601560248201526000805160206200446883398151915260448201526064015b60405180910390fd5b6001600160a01b038516620001185760405162461bcd60e51b815260206004820152601960248201527f43616e2774206e6f74206265207a65726f2061646472657373000000000000006044820152606401620000b7565b6001600160a01b0384166200015f5760405162461bcd60e51b81526020600482015260156024820152600080516020620044688339815191526044820152606401620000b7565b6001600160a01b038316620001a65760405162461bcd60e51b81526020600482015260156024820152600080516020620044688339815191526044820152606401620000b7565b6001600160a01b038216620001ed5760405162461bcd60e51b81526020600482015260156024820152600080516020620044688339815191526044820152606401620000b7565b600081116200024e5760405162461bcd60e51b815260206004820152602660248201527f4d696e696d756d2061756374696f6e206475726174696f6e2063616e2774206260448201526565207a65726f60d01b6064820152608401620000b7565b6001600160601b0319606087811b821660805286901b1660a0526200027384620002b0565b600280546001600160a01b039485166001600160a01b0319918216179091556003805493909416921691909117909155600b555062000452915050565b6000546001600160a01b031633146200030c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b7565b6001600160a01b038116620003735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b7565b600080546040516001600160a01b03808516939216916000805160206200448883398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b0381168114620003d557600080fd5b919050565b60008060008060008060c08789031215620003f457600080fd5b620003ff87620003bd565b95506200040f60208801620003bd565b94506200041f60408801620003bd565b93506200042f60608801620003bd565b92506200043f60808801620003bd565b915060a087015190509295509295509295565b60805160601c60a05160601c613f57620005116000396000818161053c01528181610b3b0152818161184301528181611a0101528181611ad6015281816120ff01528181612192015281816127fd01528181612cbf01528181612d62015281816132450152818161342701526137d20152600081816104a801528181610fc901528181611c04015281816126f2015281816128ed015281816129eb01528181612b8c015281816132e0015281816134a501526135ed0152613f576000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063baf2e470116100d8578063d76102e41161008c578063f23a6e6111610071578063f23a6e6114610597578063f2fde38b146105cf578063ff795cca146105e257600080fd5b8063d76102e414610571578063e8b24ee81461058457600080fd5b8063bc51150b116100bd578063bc51150b14610524578063bf24c1f314610537578063c415b95c1461055e57600080fd5b8063baf2e470146104ca578063bc197c81146104d357600080fd5b8063a1db97821161012f578063a5f84c5c11610114578063a5f84c5c14610487578063aba7bb5414610490578063ba2767a9146104a357600080fd5b8063a1db978214610461578063a42dce801461047457600080fd5b8063938566741161016057806393856674146104315780639869b736146104445780639c4733fc1461044e57600080fd5b80638da5cb5b14610403578063936dc46d1461042857600080fd5b806353281298116102295780637fafbc8c116101dd57806384ed1a45116101c257806384ed1a45146103d457806386cc855d146103e757806388652ad3146103fa57600080fd5b80637fafbc8c146103ac5780638456cb59146103cc57600080fd5b80635c975abb1161020e5780635c975abb1461037f5780636517a93214610391578063715018a6146103a457600080fd5b806353281298146103635780635850a7991461037657600080fd5b806321baa97c116102805780633d30d838116102655780633d30d8381461033f5780633f4ba83a146103485780634a970f0f1461035057600080fd5b806321baa97c14610319578063394f2ca01461032c57600080fd5b806301ffc9a7146102b257806313396483146102da57806317b20001146102ef578063218c3f9114610306575b600080fd5b6102c56102c0366004613c56565b6105f5565b60405190151581526020015b60405180910390f35b6102ed6102e8366004613c80565b61065e565b005b6102f860055481565b6040519081526020016102d1565b6102ed610314366004613c80565b61075f565b6102ed610327366004613d04565b610852565b6102ed61033a366004613c80565b610b91565b6102f860075481565b6102ed610c84565b6102ed61035e366004613c80565b610cd6565b6102ed6103713660046139ea565b610dcb565b6102f860085481565b600054600160a01b900460ff166102c5565b6102ed61039f366004613bb6565b610ec1565b6102ed61103f565b6103bf6103ba366004613cd8565b6110d1565b6040516102d19190613d39565b6102ed611205565b6102ed6103e2366004613c80565b611255565b6102ed6103f5366004613b6e565b61134a565b6102f8600b5481565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016102d1565b6102f8600a5481565b6102ed61043f366004613c80565b611475565b6102f8620f424081565b6102ed61045c366004613c99565b61156a565b6102ed61046f366004613b42565b611b36565b6102ed6104823660046139ea565b611cd0565b6102f860095481565b6102ed61049e366004613c80565b611dc6565b6104107f000000000000000000000000000000000000000000000000000000000000000081565b6102f860065481565b61050b6104e1366004613a2b565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b6040516001600160e01b031990911681526020016102d1565b6102ed610532366004613cd8565b611ebb565b6104107f000000000000000000000000000000000000000000000000000000000000000081565b600254610410906001600160a01b031681565b600354610410906001600160a01b031681565b6102ed610592366004613d04565b612282565b61050b6105a5366004613ad9565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6102ed6105dd3660046139ea565b61233c565b6102ed6105f0366004613cd8565b61245b565b60006001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000148061065857507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6000546001600160a01b031633146106ab5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064015b60405180910390fd5b620f424081106107235760405162461bcd60e51b815260206004820152603160248201527f626964206d696e696d756d2072616973652073686f756c64206265206265747760448201527f65656e203020616e64203939392c39393900000000000000000000000000000060648201526084016106a2565b60088190556040518181527f2649285f1954f8936147ae25231a51e68dd706e152c2848227a6197f92c80b03906020015b60405180910390a150565b6000546001600160a01b031633146107a75760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6000811161081d5760405162461bcd60e51b815260206004820152602960248201527f626964206d696e696d756d2072616973652073686f756c64206265206269676760448201527f6572207468656e2030000000000000000000000000000000000000000000000060648201526084016106a2565b60098190556040518181527f7a3dd9130740f9ee10eae9f1919dbf86e3690751b3620fa48637b534ac31ccf690602001610754565b600054600160a01b900460ff161561089f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600083815260046020818152604080842063ffffffff80881686529083529381902081516101608101835281546001600160a01b0390811682526001830154811694820194909452600282015492810192909252600381015460608301529283015484166080820152600583015460a0820152600683015490931660c0840152600782015460e0840181905260088301549091166101008401526009820154610120840152600a90910154610140830152156109c35760405162461bcd60e51b815260206004820152603060248201527f43616e2774206368616e6765207265736572766520707269636520616674657260448201527f2061756374696f6e20737461727465640000000000000000000000000000000060648201526084016106a2565b80516001600160a01b03163314610a425760405162461bcd60e51b815260206004820152602360248201527f4d757374206265206e6674206f776e657220746f206368616e6765207265736560448201527f727665000000000000000000000000000000000000000000000000000000000060648201526084016106a2565b60a08101828152600085815260046020818152604080842063ffffffff89811680875291845294829020875181546001600160a01b03199081166001600160a01b03928316178355858a015160018085018054841692851692909217909155858b015160028501556060808c0151600386015560808c0151988501805463ffffffff199081169a8c169a909a1790559951600585015560c08b015160068501805490991699169890981790965560e08901516007830155610100890151600883018054909716908216179095556101208801516009820155610140880151600a90910155815194855291840191909152820185905286927f00000000000000000000000000000000000000000000000000000000000000009091169133917f957b66e0ec09bc350e8644233c3b20a8a94e27d74aae0971f2f0e99c0a760bf0910160405180910390a450505050565b6000546001600160a01b03163314610bd95760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b60008111610c4f5760405162461bcd60e51b815260206004820152603060248201527f4d696e696d756d2061756374696f6e206475726174696f6e2073686f756c642060448201527f626520626967676572207468656e20300000000000000000000000000000000060648201526084016106a2565b600b8190556040518181527f402dee1c35c092d0ce2be4634353ad25291c8a79585502482f290471c60118bd90602001610754565b6000546001600160a01b03163314610ccc5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b610cd4612dbb565b565b6000546001600160a01b03163314610d1e5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b620f42408110610d965760405162461bcd60e51b815260206004820152602b60248201527f54686520626964206665652073686f756c64206265206265747765656e20302060448201527f616e64203939392c39393900000000000000000000000000000000000000000060648201526084016106a2565b60068190556040518181527f9800a1d15749415d59be19c8cc9e5af4a171cf0ad29f76015e45e60b2f1e130e90602001610754565b6000546001600160a01b03163314610e135760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b038116610e735760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f896bc2ff7014def5649c27033f76d00ee4a4b85c447612d0e4da39dd9d4f23e790602001610754565b600054600160a01b900460ff1615610f0e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b60026001541415610f615760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b60026001556040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152306024830152604482018790526064820186905260ff8516608483015260a4820184905260c482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d505accf9060e401600060405180830381600087803b15801561100d57600080fd5b505af1158015611021573d6000803e3d6000fd5b5050505061103188888888612e61565b505060018055505050505050565b6000546001600160a01b031633146110875760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61115560405180610160016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600063ffffffff16815260200160008152602001600063ffffffff1681526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b50600091825260046020818152604080852063ffffffff948516865282529384902084516101608101865281546001600160a01b0390811682526001830154811693820193909352600282015495810195909552600381015460608601529182015483166080850152600582015460a0850152600682015490921660c0840152600781015460e084015260088101549091166101008301526009810154610120830152600a015461014082015290565b6000546001600160a01b0316331461124d5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b610cd4613853565b6000546001600160a01b0316331461129d5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b620f424081106113155760405162461bcd60e51b815260206004820152602d60248201527f54686520696e666c6174696f6e2073686f756c64206265206265747765656e2060448201527f3020616e64203939392c3939390000000000000000000000000000000000000060648201526084016106a2565b60058190556040518181527f9697e444577bb7ec8f243b0d5c86caeb27504637f2d306cf6f0030520b65910490602001610754565b6000546001600160a01b031633146113925760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b0382166113f25760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b604051637921219560e11b81523060048201526001600160a01b038381166024830152604482018590526064820183905260a06084830152600060a483015285169063f242432a9060c401600060405180830381600087803b15801561145757600080fd5b505af115801561146b573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146114bd5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b620f424081106115355760405162461bcd60e51b815260206004820152603160248201527f626964206d696e696d756d2072616973652073686f756c64206265206265747760448201527f65656e203020616e64203939392c39393900000000000000000000000000000060648201526084016106a2565b600a8190556040518181527f5b5f32c761094018d0f41b9ac1ff299f8ebb6dfe2ad9a56c71f7bdfd5e2c5abc90602001610754565b600260015414156115bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b6002600155600054600160a01b900460ff161561160f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b6000841161165f5760405162461bcd60e51b815260206004820152601660248201527f746f6b656e2069642063616e2774206265207a65726f0000000000000000000060448201526064016106a2565b600083116116af5760405162461bcd60e51b815260206004820152601460248201527f616d6f756e742063616e2774206265207a65726f00000000000000000000000060448201526064016106a2565b600082116116ff5760405162461bcd60e51b815260206004820152601d60248201527f7265736572766550726963652069642063616e2774206265207a65726f00000060448201526064016106a2565b600b548163ffffffff16101561177d5760405162461bcd60e51b815260206004820152603360248201527f6475726174696f6e206d7573742062652062696767657220746865206d696e6960448201527f6d756d20756374696f6e206475726174696f6e0000000000000000000000000060648201526084016106a2565b60005b838163ffffffff161015611a9e57600085815260046020908152604080832063ffffffff851684529091529020600201548190156118265760405162461bcd60e51b815260206004820152603060248201527f61756374696f6e2077697468207468652073616d6520746f6b656e206964206960448201527f7320616c7265616479206578697374730000000000000000000000000000000060648201526084016106a2565b604051806101600160405280336001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018781526020018681526020018263ffffffff1681526020018581526020018463ffffffff1681526020016000815260200160006001600160a01b031681526020016000815260200160008152506004600088815260200190815260200160002060008363ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816005015560c08201518160060160006101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600701556101008201518160080160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610120820151816009015561014082015181600a0155905050857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167fc0f8f1bffd07ffee7915002c3670805d14a8773150a2e66567162f2628c113628885896000604051611a85949392919093845263ffffffff9290921660208401526040830152606082015260800190565b60405180910390a450611a9781613e99565b9050611780565b50604051637921219560e11b8152336004820152306024820152604481018590526064810184905260a06084820152600060a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f242432a9060c401600060405180830381600087803b158015611b2257600080fd5b505af1158015611031573d6000803e3d6000fd5b6000546001600160a01b03163314611b7e5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b038216611bde5760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b158015611c4857600080fd5b505af1158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c809190613c34565b611ccc5760405162461bcd60e51b815260206004820152600f60248201527f5769746864726177206661696c6564000000000000000000000000000000000060448201526064016106a2565b5050565b6000546001600160a01b03163314611d185760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b038116611d785760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f9c1996a14d26c3ecd833c10222d012447ef07b09b15000f3a34318ff039c0bdc90602001610754565b6000546001600160a01b03163314611e0e5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b620f42408110611e865760405162461bcd60e51b815260206004820152602f60248201527f546865206f776e65722073686172652073686f756c642062652062657477656560448201527f6e203020616e64203939392c393939000000000000000000000000000000000060648201526084016106a2565b60078190556040518181527f56b42472658a370dfa360fdf6b23ced55650c169c6b930cfcce433e144f959ae90602001610754565b60026001541415611f0e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b6002600155600054600160a01b900460ff1615611f605760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600082815260046020818152604080842063ffffffff80871686529083529381902081516101608101835281546001600160a01b0390811682526001830154811694820194909452600282015492810192909252600381015460608301529283015484166080820152600583015460a0820152600683015490931660c0840152600782015460e0840181905260088301549091166101008401526009820154610120840152600a90910154610140830152156120845760405162461bcd60e51b815260206004820152602660248201527f43616e277420756e6c697374204e46542061667465722061756374696f6e207360448201527f746172746564000000000000000000000000000000000000000000000000000060648201526084016106a2565b80516001600160a01b031633146120dd5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206265206e6674206f776e657220756e6c697374204e46540000000060448201526064016106a2565b8051604080516001815263ffffffff8516602082015285926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116939116917f18dd3315bc00c6bfae63a2e5420681cf1cefc36d1292bb4f8ef8b4fa1bad60cd910160405180910390a48051604051637921219560e11b81523060048201526001600160a01b039182166024820152604481018590526001606482015260a06084820152600060a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f242432a9060c401600060405180830381600087803b1580156121d857600080fd5b505af11580156121ec573d6000803e3d6000fd5b5050506000938452505060046020818152604080852063ffffffff909416855292905290822080546001600160a01b0319908116825560018083018054831690556002830185905560038301859055928201805463ffffffff1990811690915560058301859055600683018054909116905560078201849055600882018054909116905560098101839055600a01919091558055565b600054600160a01b900460ff16156122cf5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600260015414156123225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b600260015561233333848484612e61565b50506001805550565b6000546001600160a01b031633146123845760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b0381166124005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106a2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600260015414156124ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b6002600155600054600160a01b900460ff16156125005760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600082815260046020818152604080842063ffffffff80871686529083529381902081516101608101835281546001600160a01b0390811682526001830154811694820194909452600282015492810192909252600381015460608301529283015484166080820152600583015460a0820152600683015490931660c0840152600782015460e084015260088201541661010083018190526009820154610120840152600a909101546101408301526126215760405162461bcd60e51b815260206004820152602560248201527f43616e27742066696e6973682041756374696f6e20776974686f757420616e7960448201527f206269647300000000000000000000000000000000000000000000000000000060648201526084016106a2565b428160e001511061269a5760405162461bcd60e51b815260206004820152602960248201527f43616e27742066696e6973682041756374696f6e206265666f7265206974206260448201527f65656e20656e646564000000000000000000000000000000000000000000000060648201526084016106a2565b600754600090156127ba57620f42406007548361012001516126bc9190613e63565b6126c69190613e41565b60025460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b15801561273657600080fd5b505af115801561274a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276e9190613c34565b6127ba5760405162461bcd60e51b815260206004820152601d60248201527f5472616e7366657272696e6720746865207368617265206661696c656400000060448201526064016106a2565b600a54600090156129df5760408084015190517f6216ebf00000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636216ebf0916128349160040190815260200190565b60206040518083038186803b15801561284c57600080fd5b505afa158015612860573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128849190613a0e565b905083600001516001600160a01b0316816001600160a01b0316146129dd57620f4240600a548561012001516128ba9190613e63565b6128c49190613e41565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390529193507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b15801561293357600080fd5b505af1158015612947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296b9190613c34565b6129dd5760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657272696e672074686520726f79616c74696573206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016106a2565b505b82516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90612a1c8486613e29565b866101200151612a2c9190613e82565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015612a7257600080fd5b505af1158015612a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aaa9190613c34565b612b1c5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657272696e67206f776e6978546f6b656e20746f206e6674206f60448201527f776e6572206661696c656400000000000000000000000000000000000000000060648201526084016106a2565b60055415612bea576000620f4240600554856101200151612b3d9190613e63565b612b479190613e41565b6003546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529192507f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b158015612bd057600080fd5b505af1158015612be4573d6000803e3d6000fd5b50505050505b600085815260046020818152604080842063ffffffff8916855290915280832080546001600160a01b0319908116825560018083018054831690556002830186905560038301869055828501805463ffffffff199081169091556005840187905560068401805490911690556007830186905560088301805490921690915560098201859055600a9091018490556101008701519151637921219560e11b815230938101939093526001600160a01b03918216602484015260448301899052606483015260a0608483015260a48201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063f242432a9060c401600060405180830381600087803b158015612d0557600080fd5b505af1158015612d19573d6000803e3d6000fd5b50508451608080870151610100880151610120890151604080516001815263ffffffff90941660208501526001600160a01b0392831690840152606083015292831694508993507f0000000000000000000000000000000000000000000000000000000000000000909216917fde2bfb2bddc633d53daa75f53d5a722e0ccb8628fc8ee4fc4da5ca62cbe9a567910160405180910390a4505060018055505050565b600054600160a01b900460ff16612e145760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106a2565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff1615612eae5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600083815260046020818152604080842063ffffffff80881680875282855283872084516101608101865281546001600160a01b03908116825260018301548116828901526002830154968201879052600383015460608301529782015484166080820152600582015460a0820152600682015490931660c0840152600781015460e084015260088101549096166101008301526009860154610120830152600a909501546101408201529390945292905290612fad5760405162461bcd60e51b815260206004820152601c60248201527f61756374696f6e206d757374206265206c69737465642066697273740000000060448201526064016106a2565b60e08101511580612fc15750428160e00151115b6130325760405162461bcd60e51b8152602060048201526024808201527f4c69737420686173206265656e20656e6465642c2043616e277420706c61636560448201527f206269640000000000000000000000000000000000000000000000000000000060648201526084016106a2565b6009548161012001516130459190613e29565b821015806130835750620f42406008548261012001516130659190613e63565b61306f9190613e41565b81610120015161307f9190613e29565b8210155b801561309357508060a001518210155b6131055760405162461bcd60e51b815260206004820152603960248201527f50726963652073686f756c6420626520626967676572207468616e206869676860448201527f6573742062696420616e6420726573657276652070726963650000000000000060648201526084016106a2565b6101008101516001600160a01b03166132bd5760c081015161312d9063ffffffff1642613e29565b60e08201908152600085815260046020818152604080842063ffffffff808a16865290835293819020865181546001600160a01b038083166001600160a01b03199283161784559489015160018401805491871691831691909117905583890151600284015560608901516003840181905560808a01519684018054888a1663ffffffff199182161790915560a08b01516005860181905560c08c015160068701805491909b169216919091179098559751600784018190556101008a0151600885018054919097169216919091179094556101208801516009830155610140880151600a9092019190915590517fe519b0933d08aa8c3f3fd4a695c7fd8f76b05285ab5279898a5f5f8dec66be15956132b09592947f0000000000000000000000000000000000000000000000000000000000000000948c9492939192916001600160a01b0397881681529590961660208601526040850193909352606084019190915263ffffffff16608083015260a082015260c081019190915260e00190565b60405180910390a16133c5565b61010081015161012082015160405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a9059cbb92613327926004016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133799190613c34565b6133c55760405162461bcd60e51b815260206004820152600d60248201527f526566756e64206661696c65640000000000000000000000000000000000000060448201526064016106a2565b600b54428260e001516133d89190613e82565b1161347957600b546133ea9042613e29565b60e08201819052815160608084015160a08501516040805192835263ffffffff891660208401528201529081019290925285916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169216907f1d0680bbf8bd8661b7ae62e3cafcd6ddb07fe26d3dd32c6b69d03c552a26b12b9060800160405180910390a45b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401602060405180830381600087803b1580156134e957600080fd5b505af11580156134fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135219190613c34565b6135935760405162461bcd60e51b815260206004820152603560248201527f5472616e7366657272696e67207468652062696420616d6f756e7420746f207460448201527f6865206d61726b6574706c616365206661696c6564000000000000000000000060648201526084016106a2565b600654156136dd576000620f4240600654846135af9190613e63565b6135b99190613e41565b6002546040516323b872dd60e01b81526001600160a01b0389811660048301529182166024820152604481018390529192507f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401602060405180830381600087803b15801561363157600080fd5b505af1158015613645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136699190613c34565b6136db5760405162461bcd60e51b815260206004820152603860248201527f5472616e7366657272696e6720746865206269642066656520746f207468652060448201527f6d61726b6574706c616365206f776e6572206661696c6564000000000000000060648201526084016106a2565b505b6001600160a01b038086166101008301818152610120840185815242610140860181815260008a815260046020818152604080842063ffffffff808f168652908352938190208b518154908c166001600160a01b0319918216178255928c015160018083018054928e1692861692909217909155828d0151600283015560608d0151600383015560808d0151948201805495871663ffffffff1996871617905560a08d0151600583015560c08d01516006830180549190971695169490941790945560e08b015160078501559651600884018054918b1691909216179055935160098201559051600a909101559151919388927f0000000000000000000000000000000000000000000000000000000000000000909116917facea2559cc4341d32a165827044da8781443326b052ef782e7bb7809284103969161384391908a908a90899093845263ffffffff9290921660208401526040830152606082015260800190565b60405180910390a4505050505050565b600054600160a01b900460ff16156138a05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e443390565b600082601f8301126138ec57600080fd5b8135602067ffffffffffffffff82111561390857613908613ed3565b8160051b613917828201613df8565b83815282810190868401838801850189101561393257600080fd5b600093505b85841015613955578035835260019390930192918401918401613937565b50979650505050505050565b600082601f83011261397257600080fd5b813567ffffffffffffffff81111561398c5761398c613ed3565b61399f601f8201601f1916602001613df8565b8181528460208386010111156139b457600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146139e557600080fd5b919050565b6000602082840312156139fc57600080fd5b8135613a0781613ee9565b9392505050565b600060208284031215613a2057600080fd5b8151613a0781613ee9565b600080600080600060a08688031215613a4357600080fd5b8535613a4e81613ee9565b94506020860135613a5e81613ee9565b9350604086013567ffffffffffffffff80821115613a7b57600080fd5b613a8789838a016138db565b94506060880135915080821115613a9d57600080fd5b613aa989838a016138db565b93506080880135915080821115613abf57600080fd5b50613acc88828901613961565b9150509295509295909350565b600080600080600060a08688031215613af157600080fd5b8535613afc81613ee9565b94506020860135613b0c81613ee9565b93506040860135925060608601359150608086013567ffffffffffffffff811115613b3657600080fd5b613acc88828901613961565b60008060408385031215613b5557600080fd5b8235613b6081613ee9565b946020939093013593505050565b60008060008060808587031215613b8457600080fd5b8435613b8f81613ee9565b9350602085013592506040850135613ba681613ee9565b9396929550929360600135925050565b600080600080600080600080610100898b031215613bd357600080fd5b8835613bde81613ee9565b975060208901359650613bf360408a016139d1565b9550606089013594506080890135935060a089013560ff81168114613c1757600080fd5b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215613c4657600080fd5b81518015158114613a0757600080fd5b600060208284031215613c6857600080fd5b81356001600160e01b031981168114613a0757600080fd5b600060208284031215613c9257600080fd5b5035919050565b60008060008060808587031215613caf57600080fd5b843593506020850135925060408501359150613ccd606086016139d1565b905092959194509250565b60008060408385031215613ceb57600080fd5b82359150613cfb602084016139d1565b90509250929050565b600080600060608486031215613d1957600080fd5b83359250613d29602085016139d1565b9150604084013590509250925092565b81516001600160a01b0316815261016081016020830151613d6560208401826001600160a01b03169052565b5060408301516040830152606083015160608301526080830151613d91608084018263ffffffff169052565b5060a083015160a083015260c0830151613db360c084018263ffffffff169052565b5060e083015160e083015261010080840151613dd9828501826001600160a01b03169052565b5050610120838101519083015261014092830151929091019190915290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613e2157613e21613ed3565b604052919050565b60008219821115613e3c57613e3c613ebd565b500190565b600082613e5e57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613e7d57613e7d613ebd565b500290565b600082821015613e9457613e94613ebd565b500390565b600063ffffffff80831681811415613eb357613eb3613ebd565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114613efe57600080fd5b5056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212206128838a3afdeebcb91a3a9928565d6463dc6952612a95a5d8606025110cef5864736f6c6343000807003343616e2774206265207a65726f206164647265737300000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c863000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed30000000000000000000000001baa1a23a345039a69467c220a17b346b57e45760000000000000000000000002e3b6158a284fb8746a86f254535152848a6ba5f0000000000000000000000005bc1fdc000d16198b1379ff05a3ab844a39341e10000000000000000000000000000000000000000000000000000000000000384
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063baf2e470116100d8578063d76102e41161008c578063f23a6e6111610071578063f23a6e6114610597578063f2fde38b146105cf578063ff795cca146105e257600080fd5b8063d76102e414610571578063e8b24ee81461058457600080fd5b8063bc51150b116100bd578063bc51150b14610524578063bf24c1f314610537578063c415b95c1461055e57600080fd5b8063baf2e470146104ca578063bc197c81146104d357600080fd5b8063a1db97821161012f578063a5f84c5c11610114578063a5f84c5c14610487578063aba7bb5414610490578063ba2767a9146104a357600080fd5b8063a1db978214610461578063a42dce801461047457600080fd5b8063938566741161016057806393856674146104315780639869b736146104445780639c4733fc1461044e57600080fd5b80638da5cb5b14610403578063936dc46d1461042857600080fd5b806353281298116102295780637fafbc8c116101dd57806384ed1a45116101c257806384ed1a45146103d457806386cc855d146103e757806388652ad3146103fa57600080fd5b80637fafbc8c146103ac5780638456cb59146103cc57600080fd5b80635c975abb1161020e5780635c975abb1461037f5780636517a93214610391578063715018a6146103a457600080fd5b806353281298146103635780635850a7991461037657600080fd5b806321baa97c116102805780633d30d838116102655780633d30d8381461033f5780633f4ba83a146103485780634a970f0f1461035057600080fd5b806321baa97c14610319578063394f2ca01461032c57600080fd5b806301ffc9a7146102b257806313396483146102da57806317b20001146102ef578063218c3f9114610306575b600080fd5b6102c56102c0366004613c56565b6105f5565b60405190151581526020015b60405180910390f35b6102ed6102e8366004613c80565b61065e565b005b6102f860055481565b6040519081526020016102d1565b6102ed610314366004613c80565b61075f565b6102ed610327366004613d04565b610852565b6102ed61033a366004613c80565b610b91565b6102f860075481565b6102ed610c84565b6102ed61035e366004613c80565b610cd6565b6102ed6103713660046139ea565b610dcb565b6102f860085481565b600054600160a01b900460ff166102c5565b6102ed61039f366004613bb6565b610ec1565b6102ed61103f565b6103bf6103ba366004613cd8565b6110d1565b6040516102d19190613d39565b6102ed611205565b6102ed6103e2366004613c80565b611255565b6102ed6103f5366004613b6e565b61134a565b6102f8600b5481565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016102d1565b6102f8600a5481565b6102ed61043f366004613c80565b611475565b6102f8620f424081565b6102ed61045c366004613c99565b61156a565b6102ed61046f366004613b42565b611b36565b6102ed6104823660046139ea565b611cd0565b6102f860095481565b6102ed61049e366004613c80565b611dc6565b6104107f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c86381565b6102f860065481565b61050b6104e1366004613a2b565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b6040516001600160e01b031990911681526020016102d1565b6102ed610532366004613cd8565b611ebb565b6104107f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed381565b600254610410906001600160a01b031681565b600354610410906001600160a01b031681565b6102ed610592366004613d04565b612282565b61050b6105a5366004613ad9565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6102ed6105dd3660046139ea565b61233c565b6102ed6105f0366004613cd8565b61245b565b60006001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000148061065857507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6000546001600160a01b031633146106ab5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064015b60405180910390fd5b620f424081106107235760405162461bcd60e51b815260206004820152603160248201527f626964206d696e696d756d2072616973652073686f756c64206265206265747760448201527f65656e203020616e64203939392c39393900000000000000000000000000000060648201526084016106a2565b60088190556040518181527f2649285f1954f8936147ae25231a51e68dd706e152c2848227a6197f92c80b03906020015b60405180910390a150565b6000546001600160a01b031633146107a75760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6000811161081d5760405162461bcd60e51b815260206004820152602960248201527f626964206d696e696d756d2072616973652073686f756c64206265206269676760448201527f6572207468656e2030000000000000000000000000000000000000000000000060648201526084016106a2565b60098190556040518181527f7a3dd9130740f9ee10eae9f1919dbf86e3690751b3620fa48637b534ac31ccf690602001610754565b600054600160a01b900460ff161561089f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600083815260046020818152604080842063ffffffff80881686529083529381902081516101608101835281546001600160a01b0390811682526001830154811694820194909452600282015492810192909252600381015460608301529283015484166080820152600583015460a0820152600683015490931660c0840152600782015460e0840181905260088301549091166101008401526009820154610120840152600a90910154610140830152156109c35760405162461bcd60e51b815260206004820152603060248201527f43616e2774206368616e6765207265736572766520707269636520616674657260448201527f2061756374696f6e20737461727465640000000000000000000000000000000060648201526084016106a2565b80516001600160a01b03163314610a425760405162461bcd60e51b815260206004820152602360248201527f4d757374206265206e6674206f776e657220746f206368616e6765207265736560448201527f727665000000000000000000000000000000000000000000000000000000000060648201526084016106a2565b60a08101828152600085815260046020818152604080842063ffffffff89811680875291845294829020875181546001600160a01b03199081166001600160a01b03928316178355858a015160018085018054841692851692909217909155858b015160028501556060808c0151600386015560808c0151988501805463ffffffff199081169a8c169a909a1790559951600585015560c08b015160068501805490991699169890981790965560e08901516007830155610100890151600883018054909716908216179095556101208801516009820155610140880151600a90910155815194855291840191909152820185905286927f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed39091169133917f957b66e0ec09bc350e8644233c3b20a8a94e27d74aae0971f2f0e99c0a760bf0910160405180910390a450505050565b6000546001600160a01b03163314610bd95760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b60008111610c4f5760405162461bcd60e51b815260206004820152603060248201527f4d696e696d756d2061756374696f6e206475726174696f6e2073686f756c642060448201527f626520626967676572207468656e20300000000000000000000000000000000060648201526084016106a2565b600b8190556040518181527f402dee1c35c092d0ce2be4634353ad25291c8a79585502482f290471c60118bd90602001610754565b6000546001600160a01b03163314610ccc5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b610cd4612dbb565b565b6000546001600160a01b03163314610d1e5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b620f42408110610d965760405162461bcd60e51b815260206004820152602b60248201527f54686520626964206665652073686f756c64206265206265747765656e20302060448201527f616e64203939392c39393900000000000000000000000000000000000000000060648201526084016106a2565b60068190556040518181527f9800a1d15749415d59be19c8cc9e5af4a171cf0ad29f76015e45e60b2f1e130e90602001610754565b6000546001600160a01b03163314610e135760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b038116610e735760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f896bc2ff7014def5649c27033f76d00ee4a4b85c447612d0e4da39dd9d4f23e790602001610754565b600054600160a01b900460ff1615610f0e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b60026001541415610f615760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b60026001556040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152306024830152604482018790526064820186905260ff8516608483015260a4820184905260c482018390527f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c863169063d505accf9060e401600060405180830381600087803b15801561100d57600080fd5b505af1158015611021573d6000803e3d6000fd5b5050505061103188888888612e61565b505060018055505050505050565b6000546001600160a01b031633146110875760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61115560405180610160016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600063ffffffff16815260200160008152602001600063ffffffff1681526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b50600091825260046020818152604080852063ffffffff948516865282529384902084516101608101865281546001600160a01b0390811682526001830154811693820193909352600282015495810195909552600381015460608601529182015483166080850152600582015460a0850152600682015490921660c0840152600781015460e084015260088101549091166101008301526009810154610120830152600a015461014082015290565b6000546001600160a01b0316331461124d5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b610cd4613853565b6000546001600160a01b0316331461129d5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b620f424081106113155760405162461bcd60e51b815260206004820152602d60248201527f54686520696e666c6174696f6e2073686f756c64206265206265747765656e2060448201527f3020616e64203939392c3939390000000000000000000000000000000000000060648201526084016106a2565b60058190556040518181527f9697e444577bb7ec8f243b0d5c86caeb27504637f2d306cf6f0030520b65910490602001610754565b6000546001600160a01b031633146113925760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b0382166113f25760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b604051637921219560e11b81523060048201526001600160a01b038381166024830152604482018590526064820183905260a06084830152600060a483015285169063f242432a9060c401600060405180830381600087803b15801561145757600080fd5b505af115801561146b573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146114bd5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b620f424081106115355760405162461bcd60e51b815260206004820152603160248201527f626964206d696e696d756d2072616973652073686f756c64206265206265747760448201527f65656e203020616e64203939392c39393900000000000000000000000000000060648201526084016106a2565b600a8190556040518181527f5b5f32c761094018d0f41b9ac1ff299f8ebb6dfe2ad9a56c71f7bdfd5e2c5abc90602001610754565b600260015414156115bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b6002600155600054600160a01b900460ff161561160f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b6000841161165f5760405162461bcd60e51b815260206004820152601660248201527f746f6b656e2069642063616e2774206265207a65726f0000000000000000000060448201526064016106a2565b600083116116af5760405162461bcd60e51b815260206004820152601460248201527f616d6f756e742063616e2774206265207a65726f00000000000000000000000060448201526064016106a2565b600082116116ff5760405162461bcd60e51b815260206004820152601d60248201527f7265736572766550726963652069642063616e2774206265207a65726f00000060448201526064016106a2565b600b548163ffffffff16101561177d5760405162461bcd60e51b815260206004820152603360248201527f6475726174696f6e206d7573742062652062696767657220746865206d696e6960448201527f6d756d20756374696f6e206475726174696f6e0000000000000000000000000060648201526084016106a2565b60005b838163ffffffff161015611a9e57600085815260046020908152604080832063ffffffff851684529091529020600201548190156118265760405162461bcd60e51b815260206004820152603060248201527f61756374696f6e2077697468207468652073616d6520746f6b656e206964206960448201527f7320616c7265616479206578697374730000000000000000000000000000000060648201526084016106a2565b604051806101600160405280336001600160a01b031681526020017f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed36001600160a01b031681526020018781526020018681526020018263ffffffff1681526020018581526020018463ffffffff1681526020016000815260200160006001600160a01b031681526020016000815260200160008152506004600088815260200190815260200160002060008363ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816005015560c08201518160060160006101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600701556101008201518160080160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610120820151816009015561014082015181600a0155905050857f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed36001600160a01b0316336001600160a01b03167fc0f8f1bffd07ffee7915002c3670805d14a8773150a2e66567162f2628c113628885896000604051611a85949392919093845263ffffffff9290921660208401526040830152606082015260800190565b60405180910390a450611a9781613e99565b9050611780565b50604051637921219560e11b8152336004820152306024820152604481018590526064810184905260a06084820152600060a48201527f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed36001600160a01b03169063f242432a9060c401600060405180830381600087803b158015611b2257600080fd5b505af1158015611031573d6000803e3d6000fd5b6000546001600160a01b03163314611b7e5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b038216611bde5760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390527f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c863169063a9059cbb90604401602060405180830381600087803b158015611c4857600080fd5b505af1158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c809190613c34565b611ccc5760405162461bcd60e51b815260206004820152600f60248201527f5769746864726177206661696c6564000000000000000000000000000000000060448201526064016106a2565b5050565b6000546001600160a01b03163314611d185760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b038116611d785760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016106a2565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f9c1996a14d26c3ecd833c10222d012447ef07b09b15000f3a34318ff039c0bdc90602001610754565b6000546001600160a01b03163314611e0e5760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b620f42408110611e865760405162461bcd60e51b815260206004820152602f60248201527f546865206f776e65722073686172652073686f756c642062652062657477656560448201527f6e203020616e64203939392c393939000000000000000000000000000000000060648201526084016106a2565b60078190556040518181527f56b42472658a370dfa360fdf6b23ced55650c169c6b930cfcce433e144f959ae90602001610754565b60026001541415611f0e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b6002600155600054600160a01b900460ff1615611f605760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600082815260046020818152604080842063ffffffff80871686529083529381902081516101608101835281546001600160a01b0390811682526001830154811694820194909452600282015492810192909252600381015460608301529283015484166080820152600583015460a0820152600683015490931660c0840152600782015460e0840181905260088301549091166101008401526009820154610120840152600a90910154610140830152156120845760405162461bcd60e51b815260206004820152602660248201527f43616e277420756e6c697374204e46542061667465722061756374696f6e207360448201527f746172746564000000000000000000000000000000000000000000000000000060648201526084016106a2565b80516001600160a01b031633146120dd5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206265206e6674206f776e657220756e6c697374204e46540000000060448201526064016106a2565b8051604080516001815263ffffffff8516602082015285926001600160a01b037f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed38116939116917f18dd3315bc00c6bfae63a2e5420681cf1cefc36d1292bb4f8ef8b4fa1bad60cd910160405180910390a48051604051637921219560e11b81523060048201526001600160a01b039182166024820152604481018590526001606482015260a06084820152600060a48201527f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed39091169063f242432a9060c401600060405180830381600087803b1580156121d857600080fd5b505af11580156121ec573d6000803e3d6000fd5b5050506000938452505060046020818152604080852063ffffffff909416855292905290822080546001600160a01b0319908116825560018083018054831690556002830185905560038301859055928201805463ffffffff1990811690915560058301859055600683018054909116905560078201849055600882018054909116905560098101839055600a01919091558055565b600054600160a01b900460ff16156122cf5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600260015414156123225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b600260015561233333848484612e61565b50506001805550565b6000546001600160a01b031633146123845760405162461bcd60e51b81526020600482018190526024820152600080516020613f0283398151915260448201526064016106a2565b6001600160a01b0381166124005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106a2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600260015414156124ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a2565b6002600155600054600160a01b900460ff16156125005760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600082815260046020818152604080842063ffffffff80871686529083529381902081516101608101835281546001600160a01b0390811682526001830154811694820194909452600282015492810192909252600381015460608301529283015484166080820152600583015460a0820152600683015490931660c0840152600782015460e084015260088201541661010083018190526009820154610120840152600a909101546101408301526126215760405162461bcd60e51b815260206004820152602560248201527f43616e27742066696e6973682041756374696f6e20776974686f757420616e7960448201527f206269647300000000000000000000000000000000000000000000000000000060648201526084016106a2565b428160e001511061269a5760405162461bcd60e51b815260206004820152602960248201527f43616e27742066696e6973682041756374696f6e206265666f7265206974206260448201527f65656e20656e646564000000000000000000000000000000000000000000000060648201526084016106a2565b600754600090156127ba57620f42406007548361012001516126bc9190613e63565b6126c69190613e41565b60025460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c863169063a9059cbb90604401602060405180830381600087803b15801561273657600080fd5b505af115801561274a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276e9190613c34565b6127ba5760405162461bcd60e51b815260206004820152601d60248201527f5472616e7366657272696e6720746865207368617265206661696c656400000060448201526064016106a2565b600a54600090156129df5760408084015190517f6216ebf00000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed31691636216ebf0916128349160040190815260200190565b60206040518083038186803b15801561284c57600080fd5b505afa158015612860573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128849190613a0e565b905083600001516001600160a01b0316816001600160a01b0316146129dd57620f4240600a548561012001516128ba9190613e63565b6128c49190613e41565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390529193507f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c8639091169063a9059cbb90604401602060405180830381600087803b15801561293357600080fd5b505af1158015612947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296b9190613c34565b6129dd5760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657272696e672074686520726f79616c74696573206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016106a2565b505b82516001600160a01b037f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c863169063a9059cbb90612a1c8486613e29565b866101200151612a2c9190613e82565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015612a7257600080fd5b505af1158015612a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aaa9190613c34565b612b1c5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657272696e67206f776e6978546f6b656e20746f206e6674206f60448201527f776e6572206661696c656400000000000000000000000000000000000000000060648201526084016106a2565b60055415612bea576000620f4240600554856101200151612b3d9190613e63565b612b479190613e41565b6003546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529192507f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c86316906340c10f1990604401600060405180830381600087803b158015612bd057600080fd5b505af1158015612be4573d6000803e3d6000fd5b50505050505b600085815260046020818152604080842063ffffffff8916855290915280832080546001600160a01b0319908116825560018083018054831690556002830186905560038301869055828501805463ffffffff199081169091556005840187905560068401805490911690556007830186905560088301805490921690915560098201859055600a9091018490556101008701519151637921219560e11b815230938101939093526001600160a01b03918216602484015260448301899052606483015260a0608483015260a48201929092527f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed39091169063f242432a9060c401600060405180830381600087803b158015612d0557600080fd5b505af1158015612d19573d6000803e3d6000fd5b50508451608080870151610100880151610120890151604080516001815263ffffffff90941660208501526001600160a01b0392831690840152606083015292831694508993507f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed3909216917fde2bfb2bddc633d53daa75f53d5a722e0ccb8628fc8ee4fc4da5ca62cbe9a567910160405180910390a4505060018055505050565b600054600160a01b900460ff16612e145760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106a2565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff1615612eae5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b600083815260046020818152604080842063ffffffff80881680875282855283872084516101608101865281546001600160a01b03908116825260018301548116828901526002830154968201879052600383015460608301529782015484166080820152600582015460a0820152600682015490931660c0840152600781015460e084015260088101549096166101008301526009860154610120830152600a909501546101408201529390945292905290612fad5760405162461bcd60e51b815260206004820152601c60248201527f61756374696f6e206d757374206265206c69737465642066697273740000000060448201526064016106a2565b60e08101511580612fc15750428160e00151115b6130325760405162461bcd60e51b8152602060048201526024808201527f4c69737420686173206265656e20656e6465642c2043616e277420706c61636560448201527f206269640000000000000000000000000000000000000000000000000000000060648201526084016106a2565b6009548161012001516130459190613e29565b821015806130835750620f42406008548261012001516130659190613e63565b61306f9190613e41565b81610120015161307f9190613e29565b8210155b801561309357508060a001518210155b6131055760405162461bcd60e51b815260206004820152603960248201527f50726963652073686f756c6420626520626967676572207468616e206869676860448201527f6573742062696420616e6420726573657276652070726963650000000000000060648201526084016106a2565b6101008101516001600160a01b03166132bd5760c081015161312d9063ffffffff1642613e29565b60e08201908152600085815260046020818152604080842063ffffffff808a16865290835293819020865181546001600160a01b038083166001600160a01b03199283161784559489015160018401805491871691831691909117905583890151600284015560608901516003840181905560808a01519684018054888a1663ffffffff199182161790915560a08b01516005860181905560c08c015160068701805491909b169216919091179098559751600784018190556101008a0151600885018054919097169216919091179094556101208801516009830155610140880151600a9092019190915590517fe519b0933d08aa8c3f3fd4a695c7fd8f76b05285ab5279898a5f5f8dec66be15956132b09592947f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed3948c9492939192916001600160a01b0397881681529590961660208601526040850193909352606084019190915263ffffffff16608083015260a082015260c081019190915260e00190565b60405180910390a16133c5565b61010081015161012082015160405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c863169263a9059cbb92613327926004016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133799190613c34565b6133c55760405162461bcd60e51b815260206004820152600d60248201527f526566756e64206661696c65640000000000000000000000000000000000000060448201526064016106a2565b600b54428260e001516133d89190613e82565b1161347957600b546133ea9042613e29565b60e08201819052815160608084015160a08501516040805192835263ffffffff891660208401528201529081019290925285916001600160a01b037f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed381169216907f1d0680bbf8bd8661b7ae62e3cafcd6ddb07fe26d3dd32c6b69d03c552a26b12b9060800160405180910390a45b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018490527f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c86316906323b872dd90606401602060405180830381600087803b1580156134e957600080fd5b505af11580156134fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135219190613c34565b6135935760405162461bcd60e51b815260206004820152603560248201527f5472616e7366657272696e67207468652062696420616d6f756e7420746f207460448201527f6865206d61726b6574706c616365206661696c6564000000000000000000000060648201526084016106a2565b600654156136dd576000620f4240600654846135af9190613e63565b6135b99190613e41565b6002546040516323b872dd60e01b81526001600160a01b0389811660048301529182166024820152604481018390529192507f000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c86316906323b872dd90606401602060405180830381600087803b15801561363157600080fd5b505af1158015613645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136699190613c34565b6136db5760405162461bcd60e51b815260206004820152603860248201527f5472616e7366657272696e6720746865206269642066656520746f207468652060448201527f6d61726b6574706c616365206f776e6572206661696c6564000000000000000060648201526084016106a2565b505b6001600160a01b038086166101008301818152610120840185815242610140860181815260008a815260046020818152604080842063ffffffff808f168652908352938190208b518154908c166001600160a01b0319918216178255928c015160018083018054928e1692861692909217909155828d0151600283015560608d0151600383015560808d0151948201805495871663ffffffff1996871617905560a08d0151600583015560c08d01516006830180549190971695169490941790945560e08b015160078501559651600884018054918b1691909216179055935160098201559051600a909101559151919388927f000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed3909116917facea2559cc4341d32a165827044da8781443326b052ef782e7bb7809284103969161384391908a908a90899093845263ffffffff9290921660208401526040830152606082015260800190565b60405180910390a4505050505050565b600054600160a01b900460ff16156138a05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a2565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e443390565b600082601f8301126138ec57600080fd5b8135602067ffffffffffffffff82111561390857613908613ed3565b8160051b613917828201613df8565b83815282810190868401838801850189101561393257600080fd5b600093505b85841015613955578035835260019390930192918401918401613937565b50979650505050505050565b600082601f83011261397257600080fd5b813567ffffffffffffffff81111561398c5761398c613ed3565b61399f601f8201601f1916602001613df8565b8181528460208386010111156139b457600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146139e557600080fd5b919050565b6000602082840312156139fc57600080fd5b8135613a0781613ee9565b9392505050565b600060208284031215613a2057600080fd5b8151613a0781613ee9565b600080600080600060a08688031215613a4357600080fd5b8535613a4e81613ee9565b94506020860135613a5e81613ee9565b9350604086013567ffffffffffffffff80821115613a7b57600080fd5b613a8789838a016138db565b94506060880135915080821115613a9d57600080fd5b613aa989838a016138db565b93506080880135915080821115613abf57600080fd5b50613acc88828901613961565b9150509295509295909350565b600080600080600060a08688031215613af157600080fd5b8535613afc81613ee9565b94506020860135613b0c81613ee9565b93506040860135925060608601359150608086013567ffffffffffffffff811115613b3657600080fd5b613acc88828901613961565b60008060408385031215613b5557600080fd5b8235613b6081613ee9565b946020939093013593505050565b60008060008060808587031215613b8457600080fd5b8435613b8f81613ee9565b9350602085013592506040850135613ba681613ee9565b9396929550929360600135925050565b600080600080600080600080610100898b031215613bd357600080fd5b8835613bde81613ee9565b975060208901359650613bf360408a016139d1565b9550606089013594506080890135935060a089013560ff81168114613c1757600080fd5b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215613c4657600080fd5b81518015158114613a0757600080fd5b600060208284031215613c6857600080fd5b81356001600160e01b031981168114613a0757600080fd5b600060208284031215613c9257600080fd5b5035919050565b60008060008060808587031215613caf57600080fd5b843593506020850135925060408501359150613ccd606086016139d1565b905092959194509250565b60008060408385031215613ceb57600080fd5b82359150613cfb602084016139d1565b90509250929050565b600080600060608486031215613d1957600080fd5b83359250613d29602085016139d1565b9150604084013590509250925092565b81516001600160a01b0316815261016081016020830151613d6560208401826001600160a01b03169052565b5060408301516040830152606083015160608301526080830151613d91608084018263ffffffff169052565b5060a083015160a083015260c0830151613db360c084018263ffffffff169052565b5060e083015160e083015261010080840151613dd9828501826001600160a01b03169052565b5050610120838101519083015261014092830151929091019190915290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613e2157613e21613ed3565b604052919050565b60008219821115613e3c57613e3c613ebd565b500190565b600082613e5e57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613e7d57613e7d613ebd565b500290565b600082821015613e9457613e94613ebd565b500390565b600063ffffffff80831681811415613eb357613eb3613ebd565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114613efe57600080fd5b5056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212206128838a3afdeebcb91a3a9928565d6463dc6952612a95a5d8606025110cef5864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c863000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed30000000000000000000000001baa1a23a345039a69467c220a17b346b57e45760000000000000000000000002e3b6158a284fb8746a86f254535152848a6ba5f0000000000000000000000005bc1fdc000d16198b1379ff05a3ab844a39341e10000000000000000000000000000000000000000000000000000000000000384
-----Decoded View---------------
Arg [0] : _ownixToken (address): 0xcF78C7dD70d6F30F6E3609e905e78305Da98c863
Arg [1] : _ownixNFTToken (address): 0xC13c9714eA4cbbC0a747978Ca89CD057209BbED3
Arg [2] : _owner (address): 0x1bAa1a23A345039a69467c220A17B346b57e4576
Arg [3] : _feeCollector (address): 0x2e3b6158A284fB8746A86F254535152848A6bA5f
Arg [4] : _inflationCollector (address): 0x5bc1FdC000d16198b1379fF05A3AB844a39341E1
Arg [5] : _minimumAuctionDuration (uint256): 900
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf78c7dd70d6f30f6e3609e905e78305da98c863
Arg [1] : 000000000000000000000000c13c9714ea4cbbc0a747978ca89cd057209bbed3
Arg [2] : 0000000000000000000000001baa1a23a345039a69467c220a17b346b57e4576
Arg [3] : 0000000000000000000000002e3b6158a284fb8746a86f254535152848a6ba5f
Arg [4] : 0000000000000000000000005bc1fdc000d16198b1379ff05a3ab844a39341e1
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000384
Deployed Bytecode Sourcemap
39781:14583:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20850:236;;;;;;:::i;:::-;;:::i;:::-;;;11307:14:1;;11300:22;11282:41;;11270:2;11255:18;20850:236:0;;;;;;;;48323:372;;;;;;:::i;:::-;;:::i;:::-;;40388:34;;;;;;;;;27812:25:1;;;27800:2;27785:18;40388:34:0;27666:177:1;48701:327:0;;;;;;:::i;:::-;;:::i;44011:592::-;;;;;;:::i;:::-;;:::i;49936:341::-;;;;;;:::i;:::-;;:::i;40463:35::-;;;;;;51244:70;;;:::i;47673:303::-;;;;;;:::i;:::-;;:::i;49285:308::-;;;;;;:::i;:::-;;:::i;40503:40::-;;;;;;4377:86;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4377:86;;44794:409;;;;;;:::i;:::-;;:::i;2748:148::-;;;:::i;51018:::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;51172:66::-;;;:::i;47341:326::-;;;;;;:::i;:::-;;:::i;50597:415::-;;;;;;:::i;:::-;;:::i;40628:37::-;;;;;;2097:87;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;2097:87;;;-1:-1:-1;;;;;7627:55:1;;;7609:74;;7597:2;7582:18;2097:87:0;7463:226:1;40589:34:0;;;;;;49599:331;;;;;;:::i;:::-;;:::i;39906:47::-;;39944:9;39906:47;;42104:1284;;;;;;:::i;:::-;;:::i;50283:308::-;;;;;;:::i;:::-;;:::i;49034:245::-;;;;;;:::i;:::-;;:::i;40548:36::-;;;;;;47982:335;;;;;;:::i;:::-;;:::i;39989:39::-;;;;;40427:31;;;;;;21475:203;;;;;;:::i;:::-;21634:36;21475:203;;;;;;;;;;;-1:-1:-1;;;;;;11496:79:1;;;11478:98;;11466:2;11451:18;21475:203:0;11334:248:1;43394:611:0;;;;;;:::i;:::-;;:::i;40065:44::-;;;;;40149:27;;;;;-1:-1:-1;;;;;40149:27:0;;;40223:33;;;;;-1:-1:-1;;;;;40223:33:0;;;44609:179;;;;;;:::i;:::-;;:::i;21292:175::-;;;;;;:::i;:::-;21428:31;21292:175;;;;;;;;3051:244;;;;;;:::i;:::-;;:::i;45209:2126::-;;;;;;:::i;:::-;;:::i;20850:236::-;20952:4;-1:-1:-1;;;;;;20976:49:0;;20991:34;20976:49;;:102;;-1:-1:-1;20523:25:0;-1:-1:-1;;;;;;20508:40:0;;;21042:36;20969:109;20850:236;-1:-1:-1;;20850:236:0:o;48323:372::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;;;;;;;;;39944:9:::1;48448:26;:40;48432:123;;;::::0;-1:-1:-1;;;48432:123:0;;19567:2:1;48432:123:0::1;::::0;::::1;19549:21:1::0;19606:2;19586:18;;;19579:30;19645:34;19625:18;;;19618:62;19716:19;19696:18;;;19689:47;19753:19;;48432:123:0::1;19365:413:1::0;48432:123:0::1;48564:25;:54:::0;;;48630:59:::1;::::0;27812:25:1;;;48630:59:0::1;::::0;27800:2:1;27785:18;48630:59:0::1;;;;;;;;48323:372:::0;:::o;48701:327::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;48843:1:::1;48818:22;:26;48802:101;;;::::0;-1:-1:-1;;;48802:101:0;;19157:2:1;48802:101:0::1;::::0;::::1;19139:21:1::0;19196:2;19176:18;;;19169:30;19235:34;19215:18;;;19208:62;19306:11;19286:18;;;19279:39;19335:19;;48802:101:0::1;18955:405:1::0;48802:101:0::1;48912:21;:46:::0;;;48970:52:::1;::::0;27812:25:1;;;48970:52:0::1;::::0;27800:2:1;27785:18;48970:52:0::1;27666:177:1::0;44011:592:0;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4702:9;4694:38;;;;-1:-1:-1;;;4694:38:0;;17630:2:1;4694:38:0;;;17612:21:1;17669:2;17649:18;;;17642:30;-1:-1:-1;;;17688:18:1;;;17681:46;17744:18;;4694:38:0;17428:340:1;4694:38:0;44136:22:::1;44161:18:::0;;;:8:::1;:18;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;;;;;;;;;44136:51;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;44136:51:0;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;44202:22;44194:83:::1;;;::::0;-1:-1:-1;;;44194:83:0;;21202:2:1;44194:83:0::1;::::0;::::1;21184:21:1::0;21241:2;21221:18;;;21214:30;21280:34;21260:18;;;21253:62;21351:18;21331;;;21324:46;21387:19;;44194:83:0::1;21000:412:1::0;44194:83:0::1;44292:16:::0;;-1:-1:-1;;;;;44292:30:0::1;44312:10;44292:30;44284:78;;;::::0;-1:-1:-1;;;44284:78:0;;23091:2:1;44284:78:0::1;::::0;::::1;23073:21:1::0;23130:2;23110:18;;;23103:30;23169:34;23149:18;;;23142:62;23240:5;23220:18;;;23213:33;23263:19;;44284:78:0::1;22889:399:1::0;44284:78:0::1;44371:20;::::0;::::1;:36:::0;;;44416:18:::1;::::0;;;:8:::1;:18;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;;;;;;;;;;:36;;;;-1:-1:-1;;;;;;44416:36:0;;::::1;-1:-1:-1::0;;;;;44416:36:0;;::::1;;::::0;;;;::::1;::::0;-1:-1:-1;44416:36:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;44416:36:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;44466:131;;13043:25:1;;;13084:18;;;13077:51;;;;13144:18;;13137:34;;;44416:18:0;;44513:13:::1;44466:131:::0;;::::1;::::0;44494:10:::1;::::0;44466:131:::1;::::0;13016:18:1;44466:131:0::1;;;;;;;44129:474;44011:592:::0;;;:::o;49936:341::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;50081:1:::1;50055:23;:27;50039:109;;;::::0;-1:-1:-1;;;50039:109:0;;17975:2:1;50039:109:0::1;::::0;::::1;17957:21:1::0;18014:2;17994:18;;;17987:30;18053:34;18033:18;;;18026:62;18124:18;18104;;;18097:46;18160:19;;50039:109:0::1;17773:412:1::0;50039:109:0::1;50157:22;:48:::0;;;50217:54:::1;::::0;27812:25:1;;;50217:54:0::1;::::0;27800:2:1;27785:18;50217:54:0::1;27666:177:1::0;51244:70:0;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;51298:10:::1;:8;:10::i;:::-;51244:70::o:0;47673:303::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;39944:9:::1;47780:17;:31;47764:108;;;::::0;-1:-1:-1;;;47764:108:0;;22679:2:1;47764:108:0::1;::::0;::::1;22661:21:1::0;22718:2;22698:18;;;22691:30;22757:34;22737:18;;;22730:62;22828:13;22808:18;;;22801:41;22859:19;;47764:108:0::1;22477:407:1::0;47764:108:0::1;47881:16;:36:::0;;;47929:41:::1;::::0;27812:25:1;;;47929:41:0::1;::::0;27800:2:1;27785:18;47929:41:0::1;27666:177:1::0;49285:308:0;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;-1:-1:-1;;;;;49396:33:0;::::1;49380:100;;;::::0;-1:-1:-1;;;49380:100:0;;15701:2:1;49380:100:0::1;::::0;::::1;15683:21:1::0;15740:2;15720:18;;;15713:30;15779:34;15759:18;;;15752:62;-1:-1:-1;;;15830:18:1;;;15823:31;15871:19;;49380:100:0::1;15499:397:1::0;49380:100:0::1;49489:18;:40:::0;;-1:-1:-1;;;;;;49489:40:0::1;-1:-1:-1::0;;;;;49489:40:0;::::1;::::0;;::::1;::::0;;;49541:46:::1;::::0;7609:74:1;;;49541:46:0::1;::::0;7597:2:1;7582:18;49541:46:0::1;7463:226:1::0;44794:409:0;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4702:9;4694:38;;;;-1:-1:-1;;;4694:38:0;;17630:2:1;4694:38:0;;;17612:21:1;17669:2;17649:18;;;17642:30;-1:-1:-1;;;17688:18:1;;;17681:46;17744:18;;4694:38:0;17428:340:1;4694:38:0;7310:1:::1;7907:7;;:19;;7899:63;;;::::0;-1:-1:-1;;;7899:63:0;;24671:2:1;7899:63:0::1;::::0;::::1;24653:21:1::0;24710:2;24690:18;;;24683:30;24749:33;24729:18;;;24722:61;24800:18;;7899:63:0::1;24469:355:1::0;7899:63:0::1;7310:1;8040:7;:18:::0;45049:95:::2;::::0;;;;-1:-1:-1;;;;;9805:15:1;;;45049:95:0::2;::::0;::::2;9787:34:1::0;45107:4:0::2;9837:18:1::0;;;9830:43;9889:18;;;9882:34;;;9932:18;;;9925:34;;;10008:4;9996:17;;9975:19;;;9968:46;10030:19;;;10023:35;;;10074:19;;;10067:35;;;45070:10:0::2;45049:40;::::0;::::2;::::0;9698:19:1;;45049:95:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;45153:44;45163:7;45172:8;45182:6;45190;45153:9;:44::i;:::-;-1:-1:-1::0;;7266:1:0::1;8219:22:::0;;-1:-1:-1;;;;;;44794:409:0:o;2748:148::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;2855:1:::1;2839:6:::0;;2818:40:::1;::::0;-1:-1:-1;;;;;2839:6:0;;::::1;::::0;2818:40:::1;::::0;2855:1;;2818:40:::1;2886:1;2869:19:::0;;-1:-1:-1;;;;;;2869:19:0::1;::::0;;2748:148::o;51018:::-;51103:14;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51103:14:0;-1:-1:-1;51134:18:0;;;;:8;:18;;;;;;;;:26;;;;;;;;;;;;51127:33;;;;;;;;;-1:-1:-1;;;;;51127:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51018:148::o;51172:66::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;51224:8:::1;:6;:8::i;47341:326::-:0;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;39944:9:::1;47454:20;:34;47438:113;;;::::0;-1:-1:-1;;;47438:113:0;;25453:2:1;47438:113:0::1;::::0;::::1;25435:21:1::0;25492:2;25472:18;;;25465:30;25531:34;25511:18;;;25504:62;25602:15;25582:18;;;25575:43;25635:19;;47438:113:0::1;25251:409:1::0;47438:113:0::1;47560:19;:42:::0;;;47614:47:::1;::::0;27812:25:1;;;47614:47:0::1;::::0;27800:2:1;27785:18;47614:47:0::1;27666:177:1::0;50597:415:0;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;-1:-1:-1;;;;;50778:30:0;::::1;50762:97;;;::::0;-1:-1:-1;;;50762:97:0;;15701:2:1;50762:97:0::1;::::0;::::1;15683:21:1::0;15740:2;15720:18;;;15713:30;15779:34;15759:18;;;15752:62;-1:-1:-1;;;15830:18:1;;;15823:31;15871:19;;50762:97:0::1;15499:397:1::0;50762:97:0::1;50868:138;::::0;-1:-1:-1;;;50868:138:0;;50925:4:::1;50868:138;::::0;::::1;8461:34:1::0;-1:-1:-1;;;;;8531:15:1;;;8511:18;;;8504:43;8563:18;;;8556:34;;;8606:18;;;8599:34;;;8670:3;8649:19;;;8642:32;-1:-1:-1;8690:19:1;;;8683:30;50868:40:0;::::1;::::0;::::1;::::0;8730:19:1;;50868:138:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50597:415:::0;;;;:::o;49599:331::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;39944:9:::1;49712:20;:34;49696:117;;;::::0;-1:-1:-1;;;49696:117:0;;19567:2:1;49696:117:0::1;::::0;::::1;19549:21:1::0;19606:2;19586:18;;;19579:30;19645:34;19625:18;;;19618:62;19716:19;19696:18;;;19689:47;19753:19;;49696:117:0::1;19365:413:1::0;49696:117:0::1;49822:19;:42:::0;;;49876:48:::1;::::0;27812:25:1;;;49876:48:0::1;::::0;27800:2:1;27785:18;49876:48:0::1;27666:177:1::0;42104:1284:0;7310:1;7907:7;;:19;;7899:63;;;;-1:-1:-1;;;7899:63:0;;24671:2:1;7899:63:0;;;24653:21:1;24710:2;24690:18;;;24683:30;24749:33;24729:18;;;24722:61;24800:18;;7899:63:0;24469:355:1;7899:63:0;7310:1;8040:7;:18;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4702:9:::1;4694:38;;;::::0;-1:-1:-1;;;4694:38:0;;17630:2:1;4694:38:0::1;::::0;::::1;17612:21:1::0;17669:2;17649:18;;;17642:30;-1:-1:-1;;;17688:18:1;;;17681:46;17744:18;;4694:38:0::1;17428:340:1::0;4694:38:0::1;42272:1:::2;42261:8;:12;42253:47;;;::::0;-1:-1:-1;;;42253:47:0;;16510:2:1;42253:47:0::2;::::0;::::2;16492:21:1::0;16549:2;16529:18;;;16522:30;16588:24;16568:18;;;16561:52;16630:18;;42253:47:0::2;16308:346:1::0;42253:47:0::2;42325:1;42315:7;:11;42307:44;;;::::0;-1:-1:-1;;;42307:44:0;;14646:2:1;42307:44:0::2;::::0;::::2;14628:21:1::0;14685:2;14665:18;;;14658:30;14724:22;14704:18;;;14697:50;14764:18;;42307:44:0::2;14444:344:1::0;42307:44:0::2;42382:1;42366:13;:17;42358:59;;;::::0;-1:-1:-1;;;42358:59:0;;24313:2:1;42358:59:0::2;::::0;::::2;24295:21:1::0;24352:2;24332:18;;;24325:30;24391:31;24371:18;;;24364:59;24440:18;;42358:59:0::2;24111:353:1::0;42358:59:0::2;42445:22;;42432:9;:35;;;;42424:99;;;::::0;-1:-1:-1;;;42424:99:0;;25867:2:1;42424:99:0::2;::::0;::::2;25849:21:1::0;25906:2;25886:18;;;25879:30;25945:34;25925:18;;;25918:62;26016:21;25996:18;;;25989:49;26055:19;;42424:99:0::2;25665:415:1::0;42424:99:0::2;42537:8;42532:713;42553:7;42549:1;:11;;;42532:713;;;42576:12;42609:18:::0;;;:8:::2;:18;::::0;;;;;;;:25:::2;::::0;::::2;::::0;;;;;;;:33:::2;;::::0;42591:1;;42609:38;42601:99:::2;;;::::0;-1:-1:-1;;;42601:99:0;;13803:2:1;42601:99:0::2;::::0;::::2;13785:21:1::0;13842:2;13822:18;;;13815:30;13881:34;13861:18;;;13854:62;13952:18;13932;;;13925:46;13988:19;;42601:99:0::2;13601:412:1::0;42601:99:0::2;42745:323;;;;;;;;42774:10;-1:-1:-1::0;;;;;42745:323:0::2;;;;;42800:13;-1:-1:-1::0;;;;;42745:323:0::2;;;;;42833:8;42745:323;;;;42860:7;42745:323;;;;42885:5;42745:323;;;;;;42915:13;42745:323;;;;42949:9;42745:323;;;;;;42980:1;42745:323;;;;43008:1;-1:-1:-1::0;;;;;42745:323:0::2;;;;;43031:1;42745:323;;;;43057:1;42745:323;;::::0;42717:8:::2;:18;42726:8;42717:18;;;;;;;;;;;:25;42736:5;42717:25;;;;;;;;;;;;;:351;;;;;;;;;;;;;-1:-1:-1::0;;;;;42717:351:0::2;;;;;-1:-1:-1::0;;;;;42717:351:0::2;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;42717:351:0::2;;;;;-1:-1:-1::0;;;;;42717:351:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;42717:351:0::2;;;;;-1:-1:-1::0;;;;;42717:351:0::2;;;;;;;;;;;;;;;;;;;;;;;;;43149:8;43125:13;-1:-1:-1::0;;;;;43084:152:0::2;43104:10;-1:-1:-1::0;;;;;43084:152:0::2;;43168:7;43186:5;43202:13;43226:1;43084:152;;;;;;;;13419:25:1::0;;;13492:10;13480:23;;;;13475:2;13460:18;;13453:51;13535:2;13520:18;;13513:34;13578:2;13563:18;;13556:34;13406:3;13391:19;;13182:414;43084:152:0::2;;;;;;;;-1:-1:-1::0;42562:3:0::2;::::0;::::2;:::i;:::-;;;42532:713;;;-1:-1:-1::0;43260:122:0::2;::::0;-1:-1:-1;;;43260:122:0;;43299:10:::2;43260:122;::::0;::::2;8461:34:1::0;43326:4:0::2;8511:18:1::0;;;8504:43;8563:18;;;8556:34;;;8606:18;;;8599:34;;;8670:3;8649:19;;;8642:32;-1:-1:-1;8690:19:1;;;8683:30;43260:13:0::2;-1:-1:-1::0;;;;;43260:30:0::2;::::0;::::2;::::0;8730:19:1;;43260:122:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;50283:308:::0;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;-1:-1:-1;;;;;50400:30:0;::::1;50384:97;;;::::0;-1:-1:-1;;;50384:97:0;;15701:2:1;50384:97:0::1;::::0;::::1;15683:21:1::0;15740:2;15720:18;;;15713:30;15779:34;15759:18;;;15752:62;-1:-1:-1;;;15830:18:1;;;15823:31;15871:19;;50384:97:0::1;15499:397:1::0;50384:97:0::1;50506:46;::::0;-1:-1:-1;;;50506:46:0;;-1:-1:-1;;;;;11032:55:1;;;50506:46:0::1;::::0;::::1;11014:74:1::0;11104:18;;;11097:34;;;50506:10:0::1;:19;::::0;::::1;::::0;10987:18:1;;50506:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50490:95;;;::::0;-1:-1:-1;;;50490:95:0;;16861:2:1;50490:95:0::1;::::0;::::1;16843:21:1::0;16900:2;16880:18;;;16873:30;16939:17;16919:18;;;16912:45;16974:18;;50490:95:0::1;16659:339:1::0;50490:95:0::1;50283:308:::0;;:::o;49034:245::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;-1:-1:-1;;;;;49125:27:0;::::1;49117:73;;;::::0;-1:-1:-1;;;49117:73:0;;15701:2:1;49117:73:0::1;::::0;::::1;15683:21:1::0;15740:2;15720:18;;;15713:30;15779:34;15759:18;;;15752:62;-1:-1:-1;;;15830:18:1;;;15823:31;15871:19;;49117:73:0::1;15499:397:1::0;49117:73:0::1;49199:12;:28:::0;;-1:-1:-1;;;;;;49199:28:0::1;-1:-1:-1::0;;;;;49199:28:0;::::1;::::0;;::::1;::::0;;;49239:34:::1;::::0;7609:74:1;;;49239:34:0::1;::::0;7597:2:1;7582:18;49239:34:0::1;7463:226:1::0;47982:335:0;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;39944:9:::1;48097:21;:35;48081:116;;;::::0;-1:-1:-1;;;48081:116:0;;26287:2:1;48081:116:0::1;::::0;::::1;26269:21:1::0;26326:2;26306:18;;;26299:30;26365:34;26345:18;;;26338:62;26436:17;26416:18;;;26409:45;26471:19;;48081:116:0::1;26085:411:1::0;48081:116:0::1;48206:20;:44:::0;;;48262:49:::1;::::0;27812:25:1;;;48262:49:0::1;::::0;27800:2:1;27785:18;48262:49:0::1;27666:177:1::0;43394:611:0;7310:1;7907:7;;:19;;7899:63;;;;-1:-1:-1;;;7899:63:0;;24671:2:1;7899:63:0;;;24653:21:1;24710:2;24690:18;;;24683:30;24749:33;24729:18;;;24722:61;24800:18;;7899:63:0;24469:355:1;7899:63:0;7310:1;8040:7;:18;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4702:9:::1;4694:38;;;::::0;-1:-1:-1;;;4694:38:0;;17630:2:1;4694:38:0::1;::::0;::::1;17612:21:1::0;17669:2;17649:18;;;17642:30;-1:-1:-1;;;17688:18:1;;;17681:46;17744:18;;4694:38:0::1;17428:340:1::0;4694:38:0::1;43502:22:::2;43527:18:::0;;;:8:::2;:18;::::0;;;;;;;:26:::2;::::0;;::::2;::::0;;;;;;;;;43502:51;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;43502:51:0;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;::::2;::::0;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;::::2;::::0;::::2;::::0;;;::::2;;::::0;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;;;;;43568:22;43560:73:::2;;;::::0;-1:-1:-1;;;43560:73:0;;18750:2:1;43560:73:0::2;::::0;::::2;18732:21:1::0;18789:2;18769:18;;;18762:30;18828:34;18808:18;;;18801:62;18899:8;18879:18;;;18872:36;18925:19;;43560:73:0::2;18548:402:1::0;43560:73:0::2;43648:16:::0;;-1:-1:-1;;;;;43648:30:0::2;43668:10;43648:30;43640:72;;;::::0;-1:-1:-1;;;43640:72:0;;21619:2:1;43640:72:0::2;::::0;::::2;21601:21:1::0;21658:2;21638:18;;;21631:30;21697;21677:18;;;21670:58;21745:18;;43640:72:0::2;21417:352:1::0;43640:72:0::2;43748:16:::0;;43729:98:::2;::::0;;43811:1:::2;12270:25:1::0;;12343:10;12331:23;;12326:2;12311:18;;12304:51;43794:8:0;;-1:-1:-1;;;;;43772:13:0::2;43729:98:::0;::::2;::::0;;::::2;::::0;::::2;::::0;12243:18:1;43729:98:0::2;;;;;;;43896:16:::0;;43836:121:::2;::::0;-1:-1:-1;;;43836:121:0;;43883:4:::2;43836:121;::::0;::::2;8461:34:1::0;-1:-1:-1;;;;;8531:15:1;;;8511:18;;;8504:43;8563:18;;;8556:34;;;43938:1:0::2;8606:18:1::0;;;8599:34;8670:3;8649:19;;;8642:32;-1:-1:-1;8690:19:1;;;8683:30;43836:13:0::2;:30:::0;;::::2;::::0;::::2;::::0;8730:19:1;;43836:121:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;43973:18:0::2;::::0;;;-1:-1:-1;;43973:8:0::2;:18;::::0;;;;;;;:26:::2;::::0;;::::2;::::0;;;;;;;;43966:33;;-1:-1:-1;;;;;;43966:33:0;;::::2;::::0;;;;;::::2;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;-1:-1:-1;;43966:33:0;;::::2;::::0;;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;;::::0;;;;8219:22;;43394:611::o;44609:179::-;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4702:9;4694:38;;;;-1:-1:-1;;;4694:38:0;;17630:2:1;4694:38:0;;;17612:21:1;17669:2;17649:18;;;17642:30;-1:-1:-1;;;17688:18:1;;;17681:46;17744:18;;4694:38:0;17428:340:1;4694:38:0;7310:1:::1;7907:7;;:19;;7899:63;;;::::0;-1:-1:-1;;;7899:63:0;;24671:2:1;7899:63:0::1;::::0;::::1;24653:21:1::0;24710:2;24690:18;;;24683:30;24749:33;24729:18;;;24722:61;24800:18;;7899:63:0::1;24469:355:1::0;7899:63:0::1;7310:1;8040:7;:18:::0;44735:47:::2;44745:10;44757:8:::0;44767:6;44775;44735:9:::2;:47::i;:::-;-1:-1:-1::0;;7266:1:0::1;8219:22:::0;;-1:-1:-1;44609:179:0:o;3051:244::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;735:10;2317:23;2309:68;;;;-1:-1:-1;;;2309:68:0;;22318:2:1;2309:68:0;;;22300:21:1;;;22337:18;;;22330:30;-1:-1:-1;;;;;;;;;;;22376:18:1;;;22369:62;22448:18;;2309:68:0;22116:356:1;2309:68:0;-1:-1:-1;;;;;3140:22:0;::::1;3132:73;;;::::0;-1:-1:-1;;;3132:73:0;;16103:2:1;3132:73:0::1;::::0;::::1;16085:21:1::0;16142:2;16122:18;;;16115:30;16181:34;16161:18;;;16154:62;16252:8;16232:18;;;16225:36;16278:19;;3132:73:0::1;15901:402:1::0;3132:73:0::1;3242:6;::::0;;3221:38:::1;::::0;-1:-1:-1;;;;;3221:38:0;;::::1;::::0;3242:6;::::1;::::0;3221:38:::1;::::0;::::1;3270:6;:17:::0;;-1:-1:-1;;;;;;3270:17:0::1;-1:-1:-1::0;;;;;3270:17:0;;;::::1;::::0;;;::::1;::::0;;3051:244::o;45209:2126::-;7310:1;7907:7;;:19;;7899:63;;;;-1:-1:-1;;;7899:63:0;;24671:2:1;7899:63:0;;;24653:21:1;24710:2;24690:18;;;24683:30;24749:33;24729:18;;;24722:61;24800:18;;7899:63:0;24469:355:1;7899:63:0;7310:1;8040:7;:18;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4702:9:::1;4694:38;;;::::0;-1:-1:-1;;;4694:38:0;;17630:2:1;4694:38:0::1;::::0;::::1;17612:21:1::0;17669:2;17649:18;;;17642:30;-1:-1:-1;;;17688:18:1;;;17681:46;17744:18;;4694:38:0::1;17428:340:1::0;4694:38:0::1;45326:22:::2;45351:18:::0;;;:8:::2;:18;::::0;;;;;;;:26:::2;::::0;;::::2;::::0;;;;;;;;;45326:51;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;45326:51:0;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;::::2;::::0;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;;::::0;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;;;;;45386:78:::2;;;::::0;-1:-1:-1;;;45386:78:0;;23907:2:1;45386:78:0::2;::::0;::::2;23889:21:1::0;23946:2;23926:18;;;23919:30;23985:34;23965:18;;;23958:62;24056:7;24036:18;;;24029:35;24081:19;;45386:78:0::2;23705:401:1::0;45386:78:0::2;45499:15;45479:7;:17;;;:35;45471:89;;;::::0;-1:-1:-1;;;45471:89:0;;19985:2:1;45471:89:0::2;::::0;::::2;19967:21:1::0;20024:2;20004:18;;;19997:30;20063:34;20043:18;;;20036:62;20134:11;20114:18;;;20107:39;20163:19;;45471:89:0::2;19783:405:1::0;45471:89:0::2;45603:20;::::0;45569:23:::2;::::0;45603:24;45599:329:::2;;39944:9;45706:20;;45687:7;:16;;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;45839:12;::::0;45819:50:::2;::::0;-1:-1:-1;;;45819:50:0;;-1:-1:-1;;;;;45839:12:0;;::::2;45819:50;::::0;::::2;11014:74:1::0;11104:18;;;11097:34;;;45669:71:0;;-1:-1:-1;45819:10:0::2;:19;::::0;::::2;::::0;10987:18:1;;45819:50:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45801:119;;;::::0;-1:-1:-1;;;45801:119:0;;18392:2:1;45801:119:0::2;::::0;::::2;18374:21:1::0;18431:2;18411:18;;;18404:30;18470:31;18450:18;;;18443:59;18519:18;;45801:119:0::2;18190:353:1::0;45801:119:0::2;45970:19;::::0;45936:23:::2;::::0;45970;45966:470:::2;;46062:15;::::0;;::::2;::::0;46030:48;;;;;46005:22:::2;::::0;-1:-1:-1;;;;;46030:13:0::2;:31;::::0;::::2;::::0;:48:::2;::::0;::::2;;27812:25:1::0;;;27800:2;27785:18;;27666:177;46030:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46005:73;;46109:7;:16;;;-1:-1:-1::0;;;;;46091:34:0::2;:14;-1:-1:-1::0;;;;;46091:34:0::2;;46088:341;;39944:9;46207:19;;46188:7;:16;;;:38;;;;:::i;:::-;:52;;;;:::i;:::-;46308;::::0;-1:-1:-1;;;46308:52:0;;-1:-1:-1;;;;;11032:55:1;;;46308:52:0::2;::::0;::::2;11014:74:1::0;11104:18;;;11097:34;;;46170:70:0;;-1:-1:-1;46308:10:0::2;:19:::0;;::::2;::::0;::::2;::::0;10987:18:1;;46308:52:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46288:131;;;::::0;-1:-1:-1;;;46288:131:0;;20395:2:1;46288:131:0::2;::::0;::::2;20377:21:1::0;20434:2;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20544:3;20524:18;;;20517:31;20565:19;;46288:131:0::2;20193:397:1::0;46288:131:0::2;45995:441;45966:470;46530:16:::0;;-1:-1:-1;;;;;46510:10:0::2;:19;::::0;::::2;::::0;46568:33:::2;46586:15:::0;46568;:33:::2;:::i;:::-;46548:7;:16;;;:54;;;;:::i;:::-;46510:93;::::0;-1:-1:-1;;;;;;46510:93:0::2;::::0;;;;;;-1:-1:-1;;;;;11032:55:1;;;46510:93:0::2;::::0;::::2;11014:74:1::0;11104:18;;;11097:34;10987:18;;46510:93:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46494:170;;;::::0;-1:-1:-1;;;46494:170:0;;23495:2:1;46494:170:0::2;::::0;::::2;23477:21:1::0;23534:2;23514:18;;;23507:30;23573:34;23553:18;;;23546:62;23644:13;23624:18;;;23617:41;23675:19;;46494:170:0::2;23293:407:1::0;46494:170:0::2;46677:19;::::0;:23;46673:279:::2;;46743:23;39944:9;46788:19;;46769:7;:16;;;:38;;;;:::i;:::-;:52;;;;:::i;:::-;46908:18;::::0;46892:52:::2;::::0;;;;-1:-1:-1;;;;;46908:18:0;;::::2;46892:52;::::0;::::2;11014:74:1::0;11104:18;;;11097:34;;;46743:78:0;;-1:-1:-1;46892:10:0::2;:15;::::0;::::2;::::0;10987:18:1;;46892:52:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;46702:250;46673:279;46967:18;::::0;;;:8:::2;:18;::::0;;;;;;;:26:::2;::::0;::::2;::::0;;;;;;;;46960:33;;-1:-1:-1;;;;;;46960:33:0;;::::2;::::0;;-1:-1:-1;46960:33:0;;::::2;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;-1:-1:-1;;46960:33:0;;::::2;::::0;;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;::::2;::::0;;;::::2;47100:14:::0;::::2;::::0;47039:114;;-1:-1:-1;;;47039:114:0;;47086:4:::2;47039:114:::0;;::::2;8461:34:1::0;;;;-1:-1:-1;;;;;8531:15:1;;;8511:18;;;8504:43;8563:18;;;8556:34;;;8606:18;;;8599:34;8670:3;8649:19;;;8642:32;8690:19;;;8683:30;;;;47039:13:0::2;:30:::0;;::::2;::::0;::::2;::::0;8730:19:1;;47039:114:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;47281:16:0;;47236:13:::2;::::0;;::::2;::::0;47258:14:::2;::::0;::::2;::::0;47306:16:::2;::::0;::::2;::::0;47167:162:::2;::::0;;47226:1:::2;12604:25:1::0;;12677:10;12665:23;;;12660:2;12645:18;;12638:51;-1:-1:-1;;;;;12725:55:1;;;12705:18;;;12698:83;12812:2;12797:18;;12790:34;47167:162:0;;::::2;::::0;-1:-1:-1;47209:8:0;;-1:-1:-1;47187:13:0::2;47167:162:::0;;::::2;::::0;::::2;::::0;12576:19:1;47167:162:0::2;;;;;;;-1:-1:-1::0;;7266:1:0;8219:22;;-1:-1:-1;;;45209:2126:0:o;5436:120::-;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4972:41;;;;-1:-1:-1;;;4972:41:0;;14995:2:1;4972:41:0;;;14977:21:1;15034:2;15014:18;;;15007:30;15073:22;15053:18;;;15046:50;15113:18;;4972:41:0;14793:344:1;4972:41:0;5505:5:::1;5495:15:::0;;-1:-1:-1;;;;5495:15:0::1;::::0;;5526:22:::1;735:10:::0;5535:12:::1;5526:22;::::0;-1:-1:-1;;;;;7627:55:1;;;7609:74;;7597:2;7582:18;5526:22:0::1;;;;;;;5436:120::o:0;51817:2544::-;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4702:9;4694:38;;;;-1:-1:-1;;;4694:38:0;;17630:2:1;4694:38:0;;;17612:21:1;17669:2;17649:18;;;17642:30;-1:-1:-1;;;17688:18:1;;;17681:46;17744:18;;4694:38:0;17428:340:1;4694:38:0;51933:22:::1;51958:18:::0;;;:8:::1;:18;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;;;;;;;;;51933:51;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;51933:51:0;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;52001:26;;;;;;;51933:51;51993:80:::1;;;::::0;-1:-1:-1;;;51993:80:0;;15344:2:1;51993:80:0::1;::::0;::::1;15326:21:1::0;15383:2;15363:18;;;15356:30;15422;15402:18;;;15395:58;15470:18;;51993:80:0::1;15142:352:1::0;51993:80:0::1;52088:17;::::0;::::1;::::0;:22;;:61:::1;;;52134:15;52114:7;:17;;;:35;52088:61;52080:123;;;::::0;-1:-1:-1;;;52080:123:0;;20797:2:1;52080:123:0::1;::::0;::::1;20779:21:1::0;20836:2;20816:18;;;20809:30;20875:34;20855:18;;;20848:62;20946:6;20926:18;;;20919:34;20970:19;;52080:123:0::1;20595:400:1::0;52080:123:0::1;52259:21;;52240:7;:16;;;:40;;;;:::i;:::-;52229:6;:52;;:154;;;;39944:9;52343:25;;52324:7;:16;;;:44;;;;:::i;:::-;:58;;;;:::i;:::-;52304:7;:16;;;:79;;;;:::i;:::-;52294:6;:89;;52229:154;52228:199;;;;;52407:7;:20;;;52397:6;:30;;52228:199;52212:290;;;::::0;-1:-1:-1;;;52212:290:0;;14220:2:1;52212:290:0::1;::::0;::::1;14202:21:1::0;14259:2;14239:18;;;14232:30;14298:34;14278:18;;;14271:62;14369:27;14349:18;;;14342:55;14414:19;;52212:290:0::1;14018:421:1::0;52212:290:0::1;52520:14;::::0;::::1;::::0;-1:-1:-1;;;;;52520:28:0::1;52517:476;;52597:16;::::0;::::1;::::0;52579:34:::1;::::0;::::1;;:15;:34;:::i;:::-;52559:17;::::0;::::1;:54:::0;;;52622:18:::1;::::0;;;:8:::1;:18;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;;;;;;;;;:36;;;;-1:-1:-1;;;;;52622:36:0;;::::1;-1:-1:-1::0;;;;;;52622:36:0;;::::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;-1:-1:-1::0;;52622:36:0;;::::1;;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;52676:207;;::::1;::::0;::::1;::::0;52622:36;;52732:13:::1;::::0;52631:8;;52622:36;;;;;-1:-1:-1;;;;;10526:15:1;;;10508:34;;10578:15;;;;10573:2;10558:18;;10551:43;10625:2;10610:18;;10603:34;;;;10668:2;10653:18;;10646:34;;;;10729:10;10717:23;10711:3;10696:19;;10689:52;10772:3;10757:19;;10750:35;10816:3;10801:19;;10794:35;;;;10434:3;10419:19;;10113:722;52676:207:0::1;;;;;;;;52517:476;;;52934:14;::::0;::::1;::::0;52950:16:::1;::::0;::::1;::::0;52914:53:::1;::::0;-1:-1:-1;;;52914:53:0;;-1:-1:-1;;;;;52914:10:0::1;:19;::::0;::::1;::::0;:53:::1;::::0;::::1;;-1:-1:-1::0;;;;;11032:55:1;;;;11014:74;;11119:2;11104:18;;11097:34;11002:2;10987:18;;10840:297;52914:53:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52906:79;;;::::0;-1:-1:-1;;;52906:79:0;;21976:2:1;52906:79:0::1;::::0;::::1;21958:21:1::0;22015:2;21995:18;;;21988:30;22054:15;22034:18;;;22027:43;22087:18;;52906:79:0::1;21774:337:1::0;52906:79:0::1;53108:22;;53089:15;53069:7;:17;;;:35;;;;:::i;:::-;:61;53065:355;;53179:22;::::0;53161:40:::1;::::0;:15:::1;:40;:::i;:::-;53141:17;::::0;::::1;:60:::0;;;53243:16;;53313:14:::1;::::0;;::::1;::::0;53355:20:::1;::::0;::::1;::::0;53217:195:::1;::::0;;13419:25:1;;;13492:10;13480:23;;13475:2;13460:18;;13453:51;13520:18;;13513:34;13563:18;;;13556:34;;;;53294:8:0;;-1:-1:-1;;;;;53270:13:0::1;53217:195:::0;::::1;::::0;::::1;::::0;::::1;::::0;13406:3:1;13391:19;53217:195:0::1;;;;;;;53065:355;53482:55;::::0;-1:-1:-1;;;53482:55:0;;-1:-1:-1;;;;;7975:15:1;;;53482:55:0::1;::::0;::::1;7957:34:1::0;53523:4:0::1;8007:18:1::0;;;8000:43;8059:18;;;8052:34;;;53482:10:0::1;:23;::::0;::::1;::::0;7869:18:1;;53482:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53466:142;;;::::0;-1:-1:-1;;;53466:142:0;;25031:2:1;53466:142:0::1;::::0;::::1;25013:21:1::0;25070:2;25050:18;;;25043:30;25109:34;25089:18;;;25082:62;25180:23;25160:18;;;25153:51;25221:19;;53466:142:0::1;24829:417:1::0;53466:142:0::1;53701:16;::::0;:20;53697:296:::1;;53763:17;39944:9;53793:16;;53784:6;:25;;;;:::i;:::-;:39;;;;:::i;:::-;53883:12;::::0;53850:57:::1;::::0;-1:-1:-1;;;53850:57:0;;-1:-1:-1;;;;;7975:15:1;;;53850:57:0::1;::::0;::::1;7957:34:1::0;53883:12:0;;::::1;8007:18:1::0;;;8000:43;8059:18;;;8052:34;;;53763:60:0;;-1:-1:-1;53850:10:0::1;:23;::::0;::::1;::::0;7869:18:1;;53850:57:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53832:153;;;::::0;-1:-1:-1;;;53832:153:0;;17205:2:1;53832:153:0::1;::::0;::::1;17187:21:1::0;17244:2;17224:18;;;17217:30;17283:34;17263:18;;;17256:62;17354:26;17334:18;;;17327:54;17398:19;;53832:153:0::1;17003:420:1::0;53832:153:0::1;53723:270;53697:296;-1:-1:-1::0;;;;;54065:24:0;;::::1;:14;::::0;::::1;:24:::0;;;54096:16:::1;::::0;::::1;:25:::0;;;54024:15:::1;54128:20;::::0;::::1;:35:::0;;;54001:20:::1;54172:18:::0;;;:8:::1;:18;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;;;;;;;;;:36;;;;;;::::1;-1:-1:-1::0;;;;;;54172:36:0;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;-1:-1:-1::0;;54172:36:0;;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;54222:133;;54024:15;;54181:8;;54241:13:::1;54222:133:::0;;::::1;::::0;::::1;::::0;::::1;::::0;54172:36;54191:6;;54115;;54024:15;;13419:25:1;;;13492:10;13480:23;;;;13475:2;13460:18;;13453:51;13535:2;13520:18;;13513:34;13578:2;13563:18;;13556:34;13406:3;13391:19;;13182:414;54222:133:0::1;;;;;;;;51926:2435;;51817:2544:::0;;;;:::o;5177:118::-;4424:4;4448:7;-1:-1:-1;;;4448:7:0;;;;4702:9;4694:38;;;;-1:-1:-1;;;4694:38:0;;17630:2:1;4694:38:0;;;17612:21:1;17669:2;17649:18;;;17642:30;-1:-1:-1;;;17688:18:1;;;17681:46;17744:18;;4694:38:0;17428:340:1;4694:38:0;5237:7:::1;:14:::0;;-1:-1:-1;;;;5237:14:0::1;-1:-1:-1::0;;;5237:14:0::1;::::0;;5267:20:::1;5274:12;735:10:::0;;655:98;14:723:1;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;224:18;220:2;217:26;214:52;;;246:18;;:::i;:::-;292:2;289:1;285:10;315:28;339:2;335;331:11;315:28;:::i;:::-;377:15;;;408:12;;;;440:15;;;474;;;470:24;;467:33;-1:-1:-1;464:53:1;;;513:1;510;503:12;464:53;535:1;526:10;;545:163;559:2;556:1;553:9;545:163;;;616:17;;604:30;;577:1;570:9;;;;;654:12;;;;686;;545:163;;;-1:-1:-1;726:5:1;14:723;-1:-1:-1;;;;;;;14:723:1:o;742:530::-;784:5;837:3;830:4;822:6;818:17;814:27;804:55;;855:1;852;845:12;804:55;891:6;878:20;917:18;913:2;910:26;907:52;;;939:18;;:::i;:::-;983:55;1026:2;1007:13;;-1:-1:-1;;1003:27:1;1032:4;999:38;983:55;:::i;:::-;1063:2;1054:7;1047:19;1109:3;1102:4;1097:2;1089:6;1085:15;1081:26;1078:35;1075:55;;;1126:1;1123;1116:12;1075:55;1191:2;1184:4;1176:6;1172:17;1165:4;1156:7;1152:18;1139:55;1239:1;1214:16;;;1232:4;1210:27;1203:38;;;;1218:7;742:530;-1:-1:-1;;;742:530:1:o;1277:163::-;1344:20;;1404:10;1393:22;;1383:33;;1373:61;;1430:1;1427;1420:12;1373:61;1277:163;;;:::o;1445:247::-;1504:6;1557:2;1545:9;1536:7;1532:23;1528:32;1525:52;;;1573:1;1570;1563:12;1525:52;1612:9;1599:23;1631:31;1656:5;1631:31;:::i;:::-;1681:5;1445:247;-1:-1:-1;;;1445:247:1:o;1697:251::-;1767:6;1820:2;1808:9;1799:7;1795:23;1791:32;1788:52;;;1836:1;1833;1826:12;1788:52;1868:9;1862:16;1887:31;1912:5;1887:31;:::i;1953:1071::-;2107:6;2115;2123;2131;2139;2192:3;2180:9;2171:7;2167:23;2163:33;2160:53;;;2209:1;2206;2199:12;2160:53;2248:9;2235:23;2267:31;2292:5;2267:31;:::i;:::-;2317:5;-1:-1:-1;2374:2:1;2359:18;;2346:32;2387:33;2346:32;2387:33;:::i;:::-;2439:7;-1:-1:-1;2497:2:1;2482:18;;2469:32;2520:18;2550:14;;;2547:34;;;2577:1;2574;2567:12;2547:34;2600:61;2653:7;2644:6;2633:9;2629:22;2600:61;:::i;:::-;2590:71;;2714:2;2703:9;2699:18;2686:32;2670:48;;2743:2;2733:8;2730:16;2727:36;;;2759:1;2756;2749:12;2727:36;2782:63;2837:7;2826:8;2815:9;2811:24;2782:63;:::i;:::-;2772:73;;2898:3;2887:9;2883:19;2870:33;2854:49;;2928:2;2918:8;2915:16;2912:36;;;2944:1;2941;2934:12;2912:36;;2967:51;3010:7;2999:8;2988:9;2984:24;2967:51;:::i;:::-;2957:61;;;1953:1071;;;;;;;;:::o;3029:734::-;3133:6;3141;3149;3157;3165;3218:3;3206:9;3197:7;3193:23;3189:33;3186:53;;;3235:1;3232;3225:12;3186:53;3274:9;3261:23;3293:31;3318:5;3293:31;:::i;:::-;3343:5;-1:-1:-1;3400:2:1;3385:18;;3372:32;3413:33;3372:32;3413:33;:::i;:::-;3465:7;-1:-1:-1;3519:2:1;3504:18;;3491:32;;-1:-1:-1;3570:2:1;3555:18;;3542:32;;-1:-1:-1;3625:3:1;3610:19;;3597:33;3653:18;3642:30;;3639:50;;;3685:1;3682;3675:12;3639:50;3708:49;3749:7;3740:6;3729:9;3725:22;3708:49;:::i;3768:315::-;3836:6;3844;3897:2;3885:9;3876:7;3872:23;3868:32;3865:52;;;3913:1;3910;3903:12;3865:52;3952:9;3939:23;3971:31;3996:5;3971:31;:::i;:::-;4021:5;4073:2;4058:18;;;;4045:32;;-1:-1:-1;;;3768:315:1:o;4088:525::-;4174:6;4182;4190;4198;4251:3;4239:9;4230:7;4226:23;4222:33;4219:53;;;4268:1;4265;4258:12;4219:53;4307:9;4294:23;4326:31;4351:5;4326:31;:::i;:::-;4376:5;-1:-1:-1;4428:2:1;4413:18;;4400:32;;-1:-1:-1;4484:2:1;4469:18;;4456:32;4497:33;4456:32;4497:33;:::i;:::-;4088:525;;;;-1:-1:-1;4549:7:1;;4603:2;4588:18;4575:32;;-1:-1:-1;;4088:525:1:o;4618:829::-;4737:6;4745;4753;4761;4769;4777;4785;4793;4846:3;4834:9;4825:7;4821:23;4817:33;4814:53;;;4863:1;4860;4853:12;4814:53;4902:9;4889:23;4921:31;4946:5;4921:31;:::i;:::-;4971:5;-1:-1:-1;5023:2:1;5008:18;;4995:32;;-1:-1:-1;5046:37:1;5079:2;5064:18;;5046:37;:::i;:::-;5036:47;;5130:2;5119:9;5115:18;5102:32;5092:42;;5181:3;5170:9;5166:19;5153:33;5143:43;;5238:3;5227:9;5223:19;5210:33;5287:4;5278:7;5274:18;5265:7;5262:31;5252:59;;5307:1;5304;5297:12;5252:59;4618:829;;;;-1:-1:-1;4618:829:1;;;;;;5330:7;;-1:-1:-1;;;5384:3:1;5369:19;;5356:33;;5436:3;5421:19;5408:33;;4618:829::o;5452:277::-;5519:6;5572:2;5560:9;5551:7;5547:23;5543:32;5540:52;;;5588:1;5585;5578:12;5540:52;5620:9;5614:16;5673:5;5666:13;5659:21;5652:5;5649:32;5639:60;;5695:1;5692;5685:12;5734:332;5792:6;5845:2;5833:9;5824:7;5820:23;5816:32;5813:52;;;5861:1;5858;5851:12;5813:52;5900:9;5887:23;-1:-1:-1;;;;;;5943:5:1;5939:78;5932:5;5929:89;5919:117;;6032:1;6029;6022:12;6071:180;6130:6;6183:2;6171:9;6162:7;6158:23;6154:32;6151:52;;;6199:1;6196;6189:12;6151:52;-1:-1:-1;6222:23:1;;6071:180;-1:-1:-1;6071:180:1:o;6256:389::-;6341:6;6349;6357;6365;6418:3;6406:9;6397:7;6393:23;6389:33;6386:53;;;6435:1;6432;6425:12;6386:53;6471:9;6458:23;6448:33;;6528:2;6517:9;6513:18;6500:32;6490:42;;6579:2;6568:9;6564:18;6551:32;6541:42;;6602:37;6635:2;6624:9;6620:18;6602:37;:::i;:::-;6592:47;;6256:389;;;;;;;:::o;6650:252::-;6717:6;6725;6778:2;6766:9;6757:7;6753:23;6749:32;6746:52;;;6794:1;6791;6784:12;6746:52;6830:9;6817:23;6807:33;;6859:37;6892:2;6881:9;6877:18;6859:37;:::i;:::-;6849:47;;6650:252;;;;;:::o;6907:320::-;6983:6;6991;6999;7052:2;7040:9;7031:7;7027:23;7023:32;7020:52;;;7068:1;7065;7058:12;7020:52;7104:9;7091:23;7081:33;;7133:37;7166:2;7155:9;7151:18;7133:37;:::i;:::-;7123:47;;7217:2;7206:9;7202:18;7189:32;7179:42;;6907:320;;;;;:::o;26501:1160::-;26715:13;;-1:-1:-1;;;;;7298:54:1;7286:67;;26683:3;26668:19;;26787:4;26779:6;26775:17;26769:24;26802:54;26850:4;26839:9;26835:20;26821:12;-1:-1:-1;;;;;7298:54:1;7286:67;;7232:127;26802:54;;26912:4;26904:6;26900:17;26894:24;26887:4;26876:9;26872:20;26865:54;26975:4;26967:6;26963:17;26957:24;26950:4;26939:9;26935:20;26928:54;27031:4;27023:6;27019:17;27013:24;27046:55;27095:4;27084:9;27080:20;27064:14;7440:10;7429:22;7417:35;;7364:94;27046:55;;27157:4;27149:6;27145:17;27139:24;27132:4;27121:9;27117:20;27110:54;27213:4;27205:6;27201:17;27195:24;27228:55;27277:4;27266:9;27262:20;27246:14;7440:10;7429:22;7417:35;;7364:94;27228:55;;27339:4;27331:6;27327:17;27321:24;27314:4;27303:9;27299:20;27292:54;27365:6;27420:2;27412:6;27408:15;27402:22;27433:54;27483:2;27472:9;27468:18;27452:14;-1:-1:-1;;;;;7298:54:1;7286:67;;7232:127;27433:54;-1:-1:-1;;27506:6:1;27554:15;;;27548:22;27528:18;;;27521:50;27590:6;27638:15;;;27632:22;27612:18;;;;27605:50;;;;26501:1160;:::o;28679:275::-;28750:2;28744:9;28815:2;28796:13;;-1:-1:-1;;28792:27:1;28780:40;;28850:18;28835:34;;28871:22;;;28832:62;28829:88;;;28897:18;;:::i;:::-;28933:2;28926:22;28679:275;;-1:-1:-1;28679:275:1:o;28959:128::-;28999:3;29030:1;29026:6;29023:1;29020:13;29017:39;;;29036:18;;:::i;:::-;-1:-1:-1;29072:9:1;;28959:128::o;29092:274::-;29132:1;29158;29148:189;;-1:-1:-1;;;29190:1:1;29183:88;29294:4;29291:1;29284:15;29322:4;29319:1;29312:15;29148:189;-1:-1:-1;29351:9:1;;29092:274::o;29371:168::-;29411:7;29477:1;29473;29469:6;29465:14;29462:1;29459:21;29454:1;29447:9;29440:17;29436:45;29433:71;;;29484:18;;:::i;:::-;-1:-1:-1;29524:9:1;;29371:168::o;29544:125::-;29584:4;29612:1;29609;29606:8;29603:34;;;29617:18;;:::i;:::-;-1:-1:-1;29654:9:1;;29544:125::o;29674:201::-;29712:3;29740:10;29785:2;29778:5;29774:14;29812:2;29803:7;29800:15;29797:41;;;29818:18;;:::i;:::-;29867:1;29854:15;;29674:201;-1:-1:-1;;;29674:201:1:o;29880:184::-;-1:-1:-1;;;29929:1:1;29922:88;30029:4;30026:1;30019:15;30053:4;30050:1;30043:15;30069:184;-1:-1:-1;;;30118:1:1;30111:88;30218:4;30215:1;30208:15;30242:4;30239:1;30232:15;30258:154;-1:-1:-1;;;;;30337:5:1;30333:54;30326:5;30323:65;30313:93;;30402:1;30399;30392:12;30313:93;30258:154;:::o
Swarm Source
ipfs://6128838a3afdeebcb91a3a9928565d6463dc6952612a95a5d8606025110cef58
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.