Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 12830291 | 1179 days ago | IN | 0 ETH | 0.11138097 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
HordTicketFactory
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-01 */ // Sources flattened with hardhat v2.5.0 https://hardhat.org // File @openzeppelin/contracts-upgradeable/introspection/[email protected] pragma solidity >=0.6.0 <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 IERC165Upgradeable { /** * @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-upgradeable/token/ERC1155/[email protected] pragma solidity >=0.6.2 <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 IERC1155Upgradeable is IERC165Upgradeable { /** * @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 @openzeppelin/contracts-upgradeable/token/ERC1155/[email protected] pragma solidity >=0.6.2 <0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File @openzeppelin/contracts-upgradeable/token/ERC1155/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * _Available since v3.1._ */ interface IERC1155ReceiverUpgradeable is IERC165Upgradeable { /** @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-upgradeable/utils/[email protected] pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @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); } 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-upgradeable/proxy/[email protected] // solhint-disable-next-line compiler-version pragma solidity >=0.4.24 <0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function _isConstructor() private view returns (bool) { return !AddressUpgradeable.isContract(address(this)); } } // File @openzeppelin/contracts-upgradeable/utils/[email protected] pragma solidity >=0.6.0 <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 GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File @openzeppelin/contracts-upgradeable/introspection/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ abstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; function __ERC165_init() internal initializer { __ERC165_init_unchained(); } function __ERC165_init_unchained() internal initializer { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } uint256[49] private __gap; } // File @openzeppelin/contracts-upgradeable/math/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMathUpgradeable { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts-upgradeable/token/ERC1155/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable { using SafeMathUpgradeable for uint256; using AddressUpgradeable for address; // Mapping from token ID to account balances mapping (uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping (address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /* * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4 * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6 * * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^ * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26 */ bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26; /* * bytes4(keccak256('uri(uint256)')) == 0x0e89341c */ bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c; /** * @dev See {_setURI}. */ function __ERC1155_init(string memory uri_) internal initializer { __Context_init_unchained(); __ERC165_init_unchained(); __ERC1155_init_unchained(uri_); } function __ERC1155_init_unchained(string memory uri_) internal initializer { _setURI(uri_); // register the supported interfaces to conform to ERC1155 via ERC165 _registerInterface(_INTERFACE_ID_ERC1155); // register the supported interfaces to conform to ERC1155MetadataURI via ERC165 _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) external view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][from] = _balances[id][from].sub(amount, "ERC1155: insufficient balance for transfer"); _balances[id][to] = _balances[id][to].add(amount); emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; _balances[id][from] = _balances[id][from].sub( amount, "ERC1155: insufficient balance for transfer" ); _balances[id][to] = _balances[id][to].add(amount); } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] = _balances[id][account].add(amount); emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint i = 0; i < ids.length; i++) { _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]); } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn(address account, uint256 id, uint256 amount) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); _balances[id][account] = _balances[id][account].sub( amount, "ERC1155: burn amount exceeds balance" ); emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint i = 0; i < ids.length; i++) { _balances[ids[i]][account] = _balances[ids[i]][account].sub( amounts[i], "ERC1155: burn amount exceeds balance" ); } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { } function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) { if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } uint256[47] private __gap; } // File @openzeppelin/contracts-upgradeable/utils/[email protected] pragma solidity >=0.6.0 <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 PausableUpgradeable is Initializable, ContextUpgradeable { /** * @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. */ function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _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()); } uint256[49] private __gap; } // File @openzeppelin/contracts-upgradeable/token/ERC1155/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev ERC1155 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. * * _Available since v3.1._ */ abstract contract ERC1155PausableUpgradeable is Initializable, ERC1155Upgradeable, PausableUpgradeable { function __ERC1155Pausable_init() internal initializer { __Context_init_unchained(); __ERC165_init_unchained(); __Pausable_init_unchained(); __ERC1155Pausable_init_unchained(); } function __ERC1155Pausable_init_unchained() internal initializer { } /** * @dev See {ERC1155-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); require(!paused(), "ERC1155Pausable: token transfer while paused"); } uint256[50] private __gap; } // File contracts/interfaces/IMaintainersRegistry.sol pragma solidity ^0.6.12; /** * IMaintainersRegistry contract. * @author Nikola Madjarevic * Date created: 8.5.21. * Github: madjarevicn */ interface IMaintainersRegistry { function isMaintainer(address _address) external view returns (bool); } // File contracts/system/HordUpgradable.sol pragma solidity ^0.6.12; /** * HordUpgradables contract. * @author Nikola Madjarevic * Date created: 8.5.21. * Github: madjarevicn */ contract HordUpgradable { address public hordCongress; IMaintainersRegistry public maintainersRegistry; // Only maintainer modifier modifier onlyMaintainer { require(maintainersRegistry.isMaintainer(msg.sender), "HordUpgradable: Restricted only to Maintainer"); _; } // Only chainport congress modifier modifier onlyHordCongress { require(msg.sender == hordCongress, "HordUpgradable: Restricted only to HordCongress"); _; } function setCongressAndMaintainers( address _hordCongress, address _maintainersRegistry ) internal { hordCongress = _hordCongress; maintainersRegistry = IMaintainersRegistry(_maintainersRegistry); } function setMaintainersRegistry( address _maintainersRegistry ) public onlyHordCongress { maintainersRegistry = IMaintainersRegistry(_maintainersRegistry); } } // File contracts/interfaces/IHordTicketManager.sol pragma solidity ^0.6.12; /** * IHordTicketManager contract. * @author Nikola Madjarevic * Date created: 11.5.21. * Github: madjarevicn */ interface IHordTicketManager { function getNumberOfChampions() external view returns (uint256); function addNewTokenIdForChampion(uint tokenId, uint championId) external; } // File contracts/HordTicketFactory.sol pragma solidity 0.6.12; /** * HordTicketFactory contract. * @author Nikola Madjarevic * Date created: 8.5.21. * Github: madjarevicn */ contract HordTicketFactory is HordUpgradable, ERC1155PausableUpgradeable { // Store contract uri string contractLevelURI; // Store always last ID minted uint256 public lastMintedTokenId; // Maximal number of fungible tickets per Pool uint256 public maxFungibleTicketsPerPool; // Maximal number of fungible tickets per Pool mapping (uint256 => uint256) tokenIdToMaxFungibleTicketsPerPool; // Mapping token ID to minted supply mapping (uint256 => uint256) tokenIdToMintedSupply; // Manager contract handling tickets IHordTicketManager public hordTicketManager; event MintedNewNFT ( uint256 tokenId, uint256 championId, uint256 initialSupply ); event AddedNFTSupply( uint256 tokenId, uint256 supplyAdded ); function initialize( address _hordCongress, address _maintainersRegistry, address _hordTicketManager, uint256 _maxFungibleTicketsPerPool, string memory _uri, string memory _contractLevelURI ) public initializer { __ERC1155_init(_uri); // Set hord congress and maintainers registry contract setCongressAndMaintainers(_hordCongress, _maintainersRegistry); // Set hord ticket manager contract hordTicketManager = IHordTicketManager(_hordTicketManager); // Set max fungible tickets allowed to mint per pool maxFungibleTicketsPerPool = _maxFungibleTicketsPerPool; // Set contract level uri for Opensea contractLevelURI = _contractLevelURI; } /** * @notice Function allowing congress to pause the smart-contract * @dev Can be only called by HordCongress */ function pause() public onlyHordCongress { _pause(); } /** * @notice Function allowing congress to unpause the smart-contract * @dev Can be only called by HordCongress */ function unpause() public onlyHordCongress { _unpause(); } /** * @notice Function to set uri, callable only by congress */ function setNewUri( string memory _newUri ) public onlyHordCongress { _setURI(_newUri); } /** * @notice Function to set contract level uri, callable by congress only */ function setNewContractLevelUri( string memory _contractLevelURI ) public onlyHordCongress { contractLevelURI = _contractLevelURI; } /** * @notice Set maximal fungible tickets possible to mint per pool (pool == class == tokenId) */ function setMaxFungibleTicketsPerPool( uint _maxFungibleTicketsPerPool ) external onlyHordCongress { require(_maxFungibleTicketsPerPool > 0); maxFungibleTicketsPerPool = _maxFungibleTicketsPerPool; } /** * @notice Mint new HPool NFT token. */ function mintNewHPoolNFT( uint256 tokenId, uint256 initialSupply, uint256 championId ) public onlyMaintainer { require(initialSupply <= maxFungibleTicketsPerPool, "MintNewHPoolNFT: Initial supply overflow."); require(tokenId == lastMintedTokenId.add(1), "MintNewHPoolNFT: Token ID is wrong."); // Store maximal fungible tickets per pool at the moment of token creation tokenIdToMaxFungibleTicketsPerPool[tokenId] = maxFungibleTicketsPerPool; // Set initial supply tokenIdToMintedSupply[tokenId] = initialSupply; // Mint tokens and store them on contract itself _mint(address(hordTicketManager), tokenId, initialSupply, "0x0"); // Fire event emit MintedNewNFT(tokenId, championId, initialSupply); // Map champion id with token id hordTicketManager.addNewTokenIdForChampion(tokenId, championId); // Store always last minted token id. lastMintedTokenId = tokenId; } /** * @notice Add supply to existing token */ function addTokenSupply( uint256 tokenId, uint256 supplyToAdd ) public onlyMaintainer { require(tokenIdToMintedSupply[tokenId] > 0, "AddTokenSupply: Firstly MINT token, then expand supply."); require(tokenIdToMintedSupply[tokenId].add(supplyToAdd) <= tokenIdToMaxFungibleTicketsPerPool[tokenId], "More than allowed."); tokenIdToMintedSupply[tokenId] = tokenIdToMintedSupply[tokenId].add(supplyToAdd); _mint(address(hordTicketManager), tokenId, supplyToAdd, "0x0"); // Fire an event emit AddedNFTSupply(tokenId, supplyToAdd); } /** * @notice Register max fungible tickets per pool for token id * @param tokenId is the ID of the token * @param _maximalFungibleTicketsPerPoolForTokenId is new maximal amount of tokens per pool * @dev used only for allowing adding token supply. */ function setMaxFungibleTicketsPerPoolForTokenId( uint tokenId, uint _maximalFungibleTicketsPerPoolForTokenId ) public onlyMaintainer { require(tokenIdToMintedSupply[tokenId] <= _maximalFungibleTicketsPerPoolForTokenId); tokenIdToMaxFungibleTicketsPerPool[tokenId] = _maximalFungibleTicketsPerPoolForTokenId; } /** * @notice Function to return a URL for the storefront-level metadata for your contract. */ function contractURI() public view returns (string memory) { return contractLevelURI; } /** * @notice Get total supply minted for tokenId */ function getTokenSupply( uint tokenId ) external view returns (uint256) { return tokenIdToMintedSupply[tokenId]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supplyAdded","type":"uint256"}],"name":"AddedNFTSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"championId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialSupply","type":"uint256"}],"name":"MintedNewNFT","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"supplyToAdd","type":"uint256"}],"name":"addTokenSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hordCongress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hordTicketManager","outputs":[{"internalType":"contract IHordTicketManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_hordCongress","type":"address"},{"internalType":"address","name":"_maintainersRegistry","type":"address"},{"internalType":"address","name":"_hordTicketManager","type":"address"},{"internalType":"uint256","name":"_maxFungibleTicketsPerPool","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"string","name":"_contractLevelURI","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMintedTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maintainersRegistry","outputs":[{"internalType":"contract IMaintainersRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFungibleTicketsPerPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"championId","type":"uint256"}],"name":"mintNewHPoolNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_maintainersRegistry","type":"address"}],"name":"setMaintainersRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFungibleTicketsPerPool","type":"uint256"}],"name":"setMaxFungibleTicketsPerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"_maximalFungibleTicketsPerPoolForTokenId","type":"uint256"}],"name":"setMaxFungibleTicketsPerPoolForTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractLevelURI","type":"string"}],"name":"setNewContractLevelUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newUri","type":"string"}],"name":"setNewUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50614276806100206000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80635cf3ad31116100de578063a487c0e511610097578063e8a3d48511610071578063e8a3d48514610c98578063e985e9c514610d1b578063f242432a14610d95578063fe6065cc14610ea45761018d565b8063a487c0e514610b71578063d2e69e4714610ba9578063e886529714610bdd5761018d565b80635cf3ad31146108c75780635d01affe14610a835780636508b10a14610ac55780636a8f414f14610ae35780638456cb5914610b17578063a22cb46514610b215761018d565b806323e962471161014b5780633f4ba83a116101255780633f4ba83a146106ce5780634bfa0645146106d85780634e1273f4146107065780635c975abb146108a75761018d565b806323e962471461043f5780632eb2c2d6146104775780633bab98c81461069a5761018d565b8062fdd58e1461019257806301ffc9a7146101f4578063036e76e3146102575780630e89341c1461029b5780630edaabad1461034257806319b88edb146103fd575b600080fd5b6101de600480360360408110156101a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ec2565b6040518082815260200191505060405180910390f35b61023f6004803603602081101561020a57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610fa2565b60405180821515815260200191505060405180910390f35b6102996004803603602081101561026d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061100a565b005b6102c7600480360360208110156102b157600080fd5b81019080803590602001909291905050506110f2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103075780820151818401526020810190506102ec565b50505050905090810190601f1680156103345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103fb6004803603602081101561035857600080fd5b810190808035906020019064010000000081111561037557600080fd5b82018360208201111561038757600080fd5b803590602001918460018302840111640100000000831117156103a957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611196565b005b6104296004803603602081101561041357600080fd5b8101908080359060200190929190505050611254565b6040518082815260200191505060405180910390f35b6104756004803603604081101561045557600080fd5b810190808035906020019092919080359060200190929190505050611272565b005b610698600480360360a081101561048d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104ea57600080fd5b8201836020820111156104fc57600080fd5b8035906020019184602083028401116401000000008311171561051e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561057e57600080fd5b82018360208201111561059057600080fd5b803590602001918460208302840111640100000000831117156105b257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561061257600080fd5b82018360208201111561062457600080fd5b8035906020019184600183028401116401000000008311171561064657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061158d565b005b6106a2611a18565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d6611a3f565b005b610704600480360360208110156106ee57600080fd5b8101908080359060200190929190505050611aed565b005b6108506004803603604081101561071c57600080fd5b810190808035906020019064010000000081111561073957600080fd5b82018360208201111561074b57600080fd5b8035906020019184602083028401116401000000008311171561076d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107cd57600080fd5b8201836020820111156107df57600080fd5b8035906020019184602083028401116401000000008311171561080157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611ba8565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610893578082015181840152602081019050610878565b505050509050019250505060405180910390f35b6108af611cba565b60405180821515815260200191505060405180910390f35b610a81600480360360c08110156108dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561096457600080fd5b82018360208201111561097657600080fd5b8035906020019184600183028401116401000000008311171561099857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156109fb57600080fd5b820183602082011115610a0d57600080fd5b80359060200191846001830284011164010000000083111715610a2f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cd1565b005b610ac360048036036060811015610a9957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611e4b565b005b610acd6121ac565b6040518082815260200191505060405180910390f35b610aeb6121b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b1f6121d6565b005b610b6f60048036036040811015610b3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612284565b005b610ba760048036036040811015610b8757600080fd5b81019080803590602001909291908035906020019092919050505061241d565b005b610bb1612573565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c9660048036036020811015610bf357600080fd5b8101908080359060200190640100000000811115610c1057600080fd5b820183602082011115610c2257600080fd5b80359060200191846001830284011164010000000083111715610c4457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612599565b005b610ca0612649565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ce0578082015181840152602081019050610cc5565b50505050905090810190601f168015610d0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d7d60048036036040811015610d3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126eb565b60405180821515815260200191505060405180910390f35b610ea2600480360360a0811015610dab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610e1c57600080fd5b820183602082011115610e2e57600080fd5b80359060200191846001830284011164010000000083111715610e5057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061277f565b005b610eac612af4565b6040518082815260200191505060405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613fc5602b913960400191505060405180910390fd5b6066600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600060346000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060688054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561118a5780601f1061115f5761010080835404028352916020019161118a565b820191906000526020600020905b81548152906001019060200180831161116d57829003601f168201915b50505050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b8060fc9080519060200190611250929190613dca565b5050565b60006101006000838152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd57366a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112fb57600080fd5b505afa15801561130f573d6000803e3d6000fd5b505050506040513d602081101561132557600080fd5b810190808051906020019092919050505061138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613f98602d913960400191505060405180910390fd5b6000610100600084815260200190815260200160002054116113f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603781526020018061420a6037913960400191505060405180910390fd5b60ff60008381526020019081526020016000205461143382610100600086815260200190815260200160002054612afa90919063ffffffff16565b11156114a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d6f7265207468616e20616c6c6f7765642e000000000000000000000000000081525060200191505060405180910390fd5b6114ce81610100600085815260200190815260200160002054612afa90919063ffffffff16565b61010060008481526020019081526020016000208190555061154a61010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683836040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612b82565b7f93e255ed0a6fdb39c910298e9933a28e89f57acc96a409c10159c10e3e25cf1f8282604051808381526020018281526020019250505060405180910390a15050565b81518351146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806141c16028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561166d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806140686025913960400191505060405180910390fd5b611675612d85565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806116bb57506116ba856116b5612d85565b6126eb565b5b611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061408d6032913960400191505060405180910390fd5b600061171a612d85565b905061172a818787878787612d8d565b60005b84518110156118fb57600085828151811061174457fe5b60200260200101519050600085838151811061175c57fe5b602002602001015190506117e3816040518060600160405280602a81526020016140ed602a91396066600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e019092919063ffffffff16565b6066600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061189a816066600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b6066600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505080600101905061172d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156119ab578082015181840152602081019050611990565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156119ed5780820151818401526020810190506119d2565b5050505090500194505050505060405180910390a4611a10818787878787612ebb565b505050505050565b61010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b611aeb61324a565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b60008111611b9e57600080fd5b8060fe8190555050565b60608151835114611c04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141986029913960400191505060405180910390fd5b6060835167ffffffffffffffff81118015611c1e57600080fd5b50604051908082528060200260200182016040528015611c4d5781602001602082028036833780820191505090505b50905060005b8451811015611caf57611c8c858281518110611c6b57fe5b6020026020010151858381518110611c7f57fe5b6020026020010151610ec2565b828281518110611c9857fe5b602002602001018181525050806001019050611c53565b508091505092915050565b6000609860009054906101000a900460ff16905090565b600160159054906101000a900460ff1680611cf05750611cef613335565b5b80611d085750600160149054906101000a900460ff16155b611d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff161590508015611dad5760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b611db683613346565b611dc08787613461565b8461010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360fe819055508160fc9080519060200190611e1f929190613dca565b508015611e42576000600160156101000a81548160ff0219169083151502179055505b50505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd57366a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ed457600080fd5b505afa158015611ee8573d6000803e3d6000fd5b505050506040513d6020811015611efe57600080fd5b8101908080519060200190929190505050611f64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613f98602d913960400191505060405180910390fd5b60fe54821115611fbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141466029913960400191505060405180910390fd5b611fd5600160fd54612afa90919063ffffffff16565b831461202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140456023913960400191505060405180910390fd5b60fe5460ff600085815260200190815260200160002081905550816101006000858152602001908152602001600020819055506120c361010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612b82565b7f96e09492bb38919dca39db7731f42e76ec29f07513aba91687f176f3e04211ab83828460405180848152602001838152602001828152602001935050505060405180910390a161010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663418ac00f84836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561218857600080fd5b505af115801561219c573d6000803e3d6000fd5b505050508260fd81905550505050565b60fd5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b6122826134e6565b565b8173ffffffffffffffffffffffffffffffffffffffff166122a3612d85565b73ffffffffffffffffffffffffffffffffffffffff161415612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061416f6029913960400191505060405180910390fd5b806067600061231d612d85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123ca612d85565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd57366a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124a657600080fd5b505afa1580156124ba573d6000803e3d6000fd5b505050506040513d60208110156124d057600080fd5b8101908080519060200190929190505050612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613f98602d913960400191505060405180910390fd5b80610100600084815260200190815260200160002054111561255757600080fd5b8060ff6000848152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461263d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b612646816135d2565b50565b606060fc8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126e15780601f106126b6576101008083540402835291602001916126e1565b820191906000526020600020905b8154815290600101906020018083116126c457829003601f168201915b5050505050905090565b6000606760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806140686025913960400191505060405180910390fd5b61280d612d85565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061285357506128528561284d612d85565b6126eb565b5b6128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061401c6029913960400191505060405180910390fd5b60006128b2612d85565b90506128d28187876128c3886135ec565b6128cc886135ec565b87612d8d565b61294f836040518060600160405280602a81526020016140ed602a91396066600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e019092919063ffffffff16565b6066600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a06836066600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b6066600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4612aec81878787878761365c565b505050505050565b60fe5481565b600080828401905083811015612b78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141e96021913960400191505060405180910390fd5b6000612c12612d85565b9050612c3381600087612c24886135ec565b612c2d886135ec565b87612d8d565b612c96836066600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b6066600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4612d7e8160008787878761365c565b5050505050565b600033905090565b612d9b868686868686613969565b612da3611cba565b15612df9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613ff0602c913960400191505060405180910390fd5b505050505050565b6000838311158290612eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e73578082015181840152602081019050612e58565b50505050905090810190601f168015612ea05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b612eda8473ffffffffffffffffffffffffffffffffffffffff16613971565b15613242578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015612f92578082015181840152602081019050612f77565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612fd4578082015181840152602081019050612fb9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613013578082015181840152602081019050612ff8565b50505050905090810190601f1680156130405780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561306557600080fd5b505af192505050801561309957506040513d602081101561308557600080fd5b810190808051906020019092919050505060015b6131a3576130a5613e85565b806130b05750613152565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131175780820151818401526020810190506130fc565b50505050905090810190601f1680156131445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613f3c6034913960400191505060405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f706028913960400191505060405180910390fd5b505b505050505050565b613252611cba565b6132c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000609860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613308612d85565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600061334030613971565b15905090565b600160159054906101000a900460ff16806133655750613364613335565b5b8061337d5750600160149054906101000a900460ff16155b6133d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff1615905080156134225760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b61342a613984565b613432613a85565b61343b82613b96565b801561345d576000600160156101000a81548160ff0219169083151502179055505b5050565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6134ee611cba565b15613561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001609860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586135a5612d85565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b80606890805190602001906135e8929190613dca565b5050565b606080600167ffffffffffffffff8111801561360757600080fd5b506040519080825280602002602001820160405280156136365781602001602082028036833780820191505090505b509050828160008151811061364757fe5b60200260200101818152505080915050919050565b61367b8473ffffffffffffffffffffffffffffffffffffffff16613971565b15613961578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613734578082015181840152602081019050613719565b50505050905090810190601f1680156137615780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561378457600080fd5b505af19250505080156137b857506040513d60208110156137a457600080fd5b810190808051906020019092919050505060015b6138c2576137c4613e85565b806137cf5750613871565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561383657808201518184015260208101905061381b565b50505050905090810190601f1680156138635780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613f3c6034913960400191505060405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461395f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f706028913960400191505060405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b600160159054906101000a900460ff16806139a357506139a2613335565b5b806139bb5750600160149054906101000a900460ff16155b613a10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff161590508015613a605760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b8015613a82576000600160156101000a81548160ff0219169083151502179055505b50565b600160159054906101000a900460ff1680613aa45750613aa3613335565b5b80613abc5750600160149054906101000a900460ff16155b613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff161590508015613b615760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b613b716301ffc9a760e01b613cc1565b8015613b93576000600160156101000a81548160ff0219169083151502179055505b50565b600160159054906101000a900460ff1680613bb55750613bb4613335565b5b80613bcd5750600160149054906101000a900460ff16155b613c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff161590508015613c725760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b613c7b826135d2565b613c8b63d9b67a2660e01b613cc1565b613c9b630e89341c60e01b613cc1565b8015613cbd576000600160156101000a81548160ff0219169083151502179055505b5050565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415613d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b600160346000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e0b57805160ff1916838001178555613e39565b82800160010185558215613e39579182015b82811115613e38578251825591602001919060010190613e1d565b5b509050613e469190613e4a565b5090565b5b80821115613e63576000816000905550600101613e4b565b5090565b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613e9557613f38565b60046000803e613ea6600051613e78565b6308c379a08114613eb75750613f38565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613ee357505050613f38565b808201805167ffffffffffffffff811115613f02575050505050613f38565b8060208301013d8501811115613f1d57505050505050613f38565b613f2682613e67565b60208401016040528296505050505050505b9056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73486f726455706772616461626c653a2052657374726963746564206f6e6c7920746f204d61696e7461696e6572455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135355061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644d696e744e657748506f6f6c4e46543a20546f6b656e2049442069732077726f6e672e455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572486f726455706772616461626c653a2052657374726963746564206f6e6c7920746f20486f7264436f6e67726573734d696e744e657748506f6f6c4e46543a20496e697469616c20737570706c79206f766572666c6f772e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373416464546f6b656e537570706c793a2046697273746c79204d494e5420746f6b656e2c207468656e20657870616e6420737570706c792ea264697066735822122037fac5428fa3910ae73fb1a9333bb120187468f6b9a1f293cb885ad389e797f364736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018d5760003560e01c80635cf3ad31116100de578063a487c0e511610097578063e8a3d48511610071578063e8a3d48514610c98578063e985e9c514610d1b578063f242432a14610d95578063fe6065cc14610ea45761018d565b8063a487c0e514610b71578063d2e69e4714610ba9578063e886529714610bdd5761018d565b80635cf3ad31146108c75780635d01affe14610a835780636508b10a14610ac55780636a8f414f14610ae35780638456cb5914610b17578063a22cb46514610b215761018d565b806323e962471161014b5780633f4ba83a116101255780633f4ba83a146106ce5780634bfa0645146106d85780634e1273f4146107065780635c975abb146108a75761018d565b806323e962471461043f5780632eb2c2d6146104775780633bab98c81461069a5761018d565b8062fdd58e1461019257806301ffc9a7146101f4578063036e76e3146102575780630e89341c1461029b5780630edaabad1461034257806319b88edb146103fd575b600080fd5b6101de600480360360408110156101a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ec2565b6040518082815260200191505060405180910390f35b61023f6004803603602081101561020a57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610fa2565b60405180821515815260200191505060405180910390f35b6102996004803603602081101561026d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061100a565b005b6102c7600480360360208110156102b157600080fd5b81019080803590602001909291905050506110f2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103075780820151818401526020810190506102ec565b50505050905090810190601f1680156103345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103fb6004803603602081101561035857600080fd5b810190808035906020019064010000000081111561037557600080fd5b82018360208201111561038757600080fd5b803590602001918460018302840111640100000000831117156103a957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611196565b005b6104296004803603602081101561041357600080fd5b8101908080359060200190929190505050611254565b6040518082815260200191505060405180910390f35b6104756004803603604081101561045557600080fd5b810190808035906020019092919080359060200190929190505050611272565b005b610698600480360360a081101561048d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104ea57600080fd5b8201836020820111156104fc57600080fd5b8035906020019184602083028401116401000000008311171561051e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561057e57600080fd5b82018360208201111561059057600080fd5b803590602001918460208302840111640100000000831117156105b257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561061257600080fd5b82018360208201111561062457600080fd5b8035906020019184600183028401116401000000008311171561064657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061158d565b005b6106a2611a18565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d6611a3f565b005b610704600480360360208110156106ee57600080fd5b8101908080359060200190929190505050611aed565b005b6108506004803603604081101561071c57600080fd5b810190808035906020019064010000000081111561073957600080fd5b82018360208201111561074b57600080fd5b8035906020019184602083028401116401000000008311171561076d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107cd57600080fd5b8201836020820111156107df57600080fd5b8035906020019184602083028401116401000000008311171561080157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611ba8565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610893578082015181840152602081019050610878565b505050509050019250505060405180910390f35b6108af611cba565b60405180821515815260200191505060405180910390f35b610a81600480360360c08110156108dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561096457600080fd5b82018360208201111561097657600080fd5b8035906020019184600183028401116401000000008311171561099857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156109fb57600080fd5b820183602082011115610a0d57600080fd5b80359060200191846001830284011164010000000083111715610a2f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cd1565b005b610ac360048036036060811015610a9957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611e4b565b005b610acd6121ac565b6040518082815260200191505060405180910390f35b610aeb6121b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b1f6121d6565b005b610b6f60048036036040811015610b3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612284565b005b610ba760048036036040811015610b8757600080fd5b81019080803590602001909291908035906020019092919050505061241d565b005b610bb1612573565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c9660048036036020811015610bf357600080fd5b8101908080359060200190640100000000811115610c1057600080fd5b820183602082011115610c2257600080fd5b80359060200191846001830284011164010000000083111715610c4457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612599565b005b610ca0612649565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ce0578082015181840152602081019050610cc5565b50505050905090810190601f168015610d0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d7d60048036036040811015610d3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126eb565b60405180821515815260200191505060405180910390f35b610ea2600480360360a0811015610dab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610e1c57600080fd5b820183602082011115610e2e57600080fd5b80359060200191846001830284011164010000000083111715610e5057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061277f565b005b610eac612af4565b6040518082815260200191505060405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613fc5602b913960400191505060405180910390fd5b6066600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600060346000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060688054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561118a5780601f1061115f5761010080835404028352916020019161118a565b820191906000526020600020905b81548152906001019060200180831161116d57829003601f168201915b50505050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b8060fc9080519060200190611250929190613dca565b5050565b60006101006000838152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd57366a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112fb57600080fd5b505afa15801561130f573d6000803e3d6000fd5b505050506040513d602081101561132557600080fd5b810190808051906020019092919050505061138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613f98602d913960400191505060405180910390fd5b6000610100600084815260200190815260200160002054116113f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603781526020018061420a6037913960400191505060405180910390fd5b60ff60008381526020019081526020016000205461143382610100600086815260200190815260200160002054612afa90919063ffffffff16565b11156114a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d6f7265207468616e20616c6c6f7765642e000000000000000000000000000081525060200191505060405180910390fd5b6114ce81610100600085815260200190815260200160002054612afa90919063ffffffff16565b61010060008481526020019081526020016000208190555061154a61010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683836040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612b82565b7f93e255ed0a6fdb39c910298e9933a28e89f57acc96a409c10159c10e3e25cf1f8282604051808381526020018281526020019250505060405180910390a15050565b81518351146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806141c16028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561166d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806140686025913960400191505060405180910390fd5b611675612d85565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806116bb57506116ba856116b5612d85565b6126eb565b5b611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061408d6032913960400191505060405180910390fd5b600061171a612d85565b905061172a818787878787612d8d565b60005b84518110156118fb57600085828151811061174457fe5b60200260200101519050600085838151811061175c57fe5b602002602001015190506117e3816040518060600160405280602a81526020016140ed602a91396066600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e019092919063ffffffff16565b6066600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061189a816066600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b6066600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505080600101905061172d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156119ab578082015181840152602081019050611990565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156119ed5780820151818401526020810190506119d2565b5050505090500194505050505060405180910390a4611a10818787878787612ebb565b505050505050565b61010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b611aeb61324a565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b60008111611b9e57600080fd5b8060fe8190555050565b60608151835114611c04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141986029913960400191505060405180910390fd5b6060835167ffffffffffffffff81118015611c1e57600080fd5b50604051908082528060200260200182016040528015611c4d5781602001602082028036833780820191505090505b50905060005b8451811015611caf57611c8c858281518110611c6b57fe5b6020026020010151858381518110611c7f57fe5b6020026020010151610ec2565b828281518110611c9857fe5b602002602001018181525050806001019050611c53565b508091505092915050565b6000609860009054906101000a900460ff16905090565b600160159054906101000a900460ff1680611cf05750611cef613335565b5b80611d085750600160149054906101000a900460ff16155b611d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff161590508015611dad5760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b611db683613346565b611dc08787613461565b8461010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360fe819055508160fc9080519060200190611e1f929190613dca565b508015611e42576000600160156101000a81548160ff0219169083151502179055505b50505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd57366a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ed457600080fd5b505afa158015611ee8573d6000803e3d6000fd5b505050506040513d6020811015611efe57600080fd5b8101908080519060200190929190505050611f64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613f98602d913960400191505060405180910390fd5b60fe54821115611fbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141466029913960400191505060405180910390fd5b611fd5600160fd54612afa90919063ffffffff16565b831461202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140456023913960400191505060405180910390fd5b60fe5460ff600085815260200190815260200160002081905550816101006000858152602001908152602001600020819055506120c361010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612b82565b7f96e09492bb38919dca39db7731f42e76ec29f07513aba91687f176f3e04211ab83828460405180848152602001838152602001828152602001935050505060405180910390a161010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663418ac00f84836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561218857600080fd5b505af115801561219c573d6000803e3d6000fd5b505050508260fd81905550505050565b60fd5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b6122826134e6565b565b8173ffffffffffffffffffffffffffffffffffffffff166122a3612d85565b73ffffffffffffffffffffffffffffffffffffffff161415612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061416f6029913960400191505060405180910390fd5b806067600061231d612d85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123ca612d85565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd57366a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124a657600080fd5b505afa1580156124ba573d6000803e3d6000fd5b505050506040513d60208110156124d057600080fd5b8101908080519060200190929190505050612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613f98602d913960400191505060405180910390fd5b80610100600084815260200190815260200160002054111561255757600080fd5b8060ff6000848152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461263d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614117602f913960400191505060405180910390fd5b612646816135d2565b50565b606060fc8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126e15780601f106126b6576101008083540402835291602001916126e1565b820191906000526020600020905b8154815290600101906020018083116126c457829003601f168201915b5050505050905090565b6000606760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806140686025913960400191505060405180910390fd5b61280d612d85565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061285357506128528561284d612d85565b6126eb565b5b6128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061401c6029913960400191505060405180910390fd5b60006128b2612d85565b90506128d28187876128c3886135ec565b6128cc886135ec565b87612d8d565b61294f836040518060600160405280602a81526020016140ed602a91396066600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e019092919063ffffffff16565b6066600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a06836066600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b6066600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4612aec81878787878761365c565b505050505050565b60fe5481565b600080828401905083811015612b78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141e96021913960400191505060405180910390fd5b6000612c12612d85565b9050612c3381600087612c24886135ec565b612c2d886135ec565b87612d8d565b612c96836066600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b6066600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4612d7e8160008787878761365c565b5050505050565b600033905090565b612d9b868686868686613969565b612da3611cba565b15612df9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613ff0602c913960400191505060405180910390fd5b505050505050565b6000838311158290612eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e73578082015181840152602081019050612e58565b50505050905090810190601f168015612ea05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b612eda8473ffffffffffffffffffffffffffffffffffffffff16613971565b15613242578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015612f92578082015181840152602081019050612f77565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612fd4578082015181840152602081019050612fb9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613013578082015181840152602081019050612ff8565b50505050905090810190601f1680156130405780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561306557600080fd5b505af192505050801561309957506040513d602081101561308557600080fd5b810190808051906020019092919050505060015b6131a3576130a5613e85565b806130b05750613152565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131175780820151818401526020810190506130fc565b50505050905090810190601f1680156131445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613f3c6034913960400191505060405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f706028913960400191505060405180910390fd5b505b505050505050565b613252611cba565b6132c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000609860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613308612d85565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600061334030613971565b15905090565b600160159054906101000a900460ff16806133655750613364613335565b5b8061337d5750600160149054906101000a900460ff16155b6133d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff1615905080156134225760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b61342a613984565b613432613a85565b61343b82613b96565b801561345d576000600160156101000a81548160ff0219169083151502179055505b5050565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6134ee611cba565b15613561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001609860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586135a5612d85565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b80606890805190602001906135e8929190613dca565b5050565b606080600167ffffffffffffffff8111801561360757600080fd5b506040519080825280602002602001820160405280156136365781602001602082028036833780820191505090505b509050828160008151811061364757fe5b60200260200101818152505080915050919050565b61367b8473ffffffffffffffffffffffffffffffffffffffff16613971565b15613961578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613734578082015181840152602081019050613719565b50505050905090810190601f1680156137615780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561378457600080fd5b505af19250505080156137b857506040513d60208110156137a457600080fd5b810190808051906020019092919050505060015b6138c2576137c4613e85565b806137cf5750613871565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561383657808201518184015260208101905061381b565b50505050905090810190601f1680156138635780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613f3c6034913960400191505060405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461395f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f706028913960400191505060405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b600160159054906101000a900460ff16806139a357506139a2613335565b5b806139bb5750600160149054906101000a900460ff16155b613a10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff161590508015613a605760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b8015613a82576000600160156101000a81548160ff0219169083151502179055505b50565b600160159054906101000a900460ff1680613aa45750613aa3613335565b5b80613abc5750600160149054906101000a900460ff16155b613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff161590508015613b615760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b613b716301ffc9a760e01b613cc1565b8015613b93576000600160156101000a81548160ff0219169083151502179055505b50565b600160159054906101000a900460ff1680613bb55750613bb4613335565b5b80613bcd5750600160149054906101000a900460ff16155b613c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806140bf602e913960400191505060405180910390fd5b6000600160159054906101000a900460ff161590508015613c725760018060156101000a81548160ff02191690831515021790555060018060146101000a81548160ff0219169083151502179055505b613c7b826135d2565b613c8b63d9b67a2660e01b613cc1565b613c9b630e89341c60e01b613cc1565b8015613cbd576000600160156101000a81548160ff0219169083151502179055505b5050565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415613d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b600160346000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e0b57805160ff1916838001178555613e39565b82800160010185558215613e39579182015b82811115613e38578251825591602001919060010190613e1d565b5b509050613e469190613e4a565b5090565b5b80821115613e63576000816000905550600101613e4b565b5090565b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613e9557613f38565b60046000803e613ea6600051613e78565b6308c379a08114613eb75750613f38565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613ee357505050613f38565b808201805167ffffffffffffffff811115613f02575050505050613f38565b8060208301013d8501811115613f1d57505050505050613f38565b613f2682613e67565b60208401016040528296505050505050505b9056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73486f726455706772616461626c653a2052657374726963746564206f6e6c7920746f204d61696e7461696e6572455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135355061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644d696e744e657748506f6f6c4e46543a20546f6b656e2049442069732077726f6e672e455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572486f726455706772616461626c653a2052657374726963746564206f6e6c7920746f20486f7264436f6e67726573734d696e744e657748506f6f6c4e46543a20496e697469616c20737570706c79206f766572666c6f772e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373416464546f6b656e537570706c793a2046697273746c79204d494e5420746f6b656e2c207468656e20657870616e6420737570706c792ea264697066735822122037fac5428fa3910ae73fb1a9333bb120187468f6b9a1f293cb885ad389e797f364736f6c634300060c0033
Deployed Bytecode Sourcemap
49090:5953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31314:231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19802:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48289:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31056:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51533:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54878:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53277:627;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33957:1220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49668:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;51119:87;;;:::i;:::-;;51832:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31711:549;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44293:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49936:798;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;52151:1052;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49265:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47547:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;50884:83;;;:::i;:::-;;32333:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54207:370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47581:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;51296:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54698:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32716:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32956:924;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49356:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31314:231;31400:7;31447:1;31428:21;;:7;:21;;;;31420:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31515:9;:13;31525:2;31515:13;;;;;;;;;;;:22;31529:7;31515:22;;;;;;;;;;;;;;;;31508:29;;31314:231;;;;:::o;19802:150::-;19887:4;19911:20;:33;19932:11;19911:33;;;;;;;;;;;;;;;;;;;;;;;;;;;19904:40;;19802:150;;;:::o;48289:200::-;47935:12;;;;;;;;;;47921:26;;:10;:26;;;47913:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48460:20:::1;48417:19;;:64;;;;;;;;;;;;;;;;;;48289:200:::0;:::o;31056:107::-;31118:13;31151:4;31144:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31056:107;;;:::o;51533:175::-;47935:12;;;;;;;;;;47921:26;;:10;:26;;;47913:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51683:17:::1;51664:16;:36;;;;;;;;;;;;:::i;:::-;;51533:175:::0;:::o;54878:162::-;54970:7;55002:21;:30;55024:7;55002:30;;;;;;;;;;;;54995:37;;54878:162;;;:::o;53277:627::-;47713:19;;;;;;;;;;;:32;;;47746:10;47713:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47705:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53453:1:::1;53420:21;:30;53442:7;53420:30;;;;;;;;;;;;:34;53412:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53584:34;:43;53619:7;53584:43;;;;;;;;;;;;53533:47;53568:11;53533:21;:30;53555:7;53533:30;;;;;;;;;;;;:34;;:47;;;;:::i;:::-;:94;;53525:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;53696:47;53731:11;53696:21;:30;53718:7;53696:30;;;;;;;;;;;;:34;;:47;;;;:::i;:::-;53663:21;:30;53685:7;53663:30;;;;;;;;;;;:80;;;;53754:62;53768:17;;;;;;;;;;;53788:7;53797:11;53754:62;;;;;;;;;;;;;;;;::::0;:5:::1;:62::i;:::-;53860:36;53875:7;53884:11;53860:36;;;;;;;;;;;;;;;;;;;;;;;;53277:627:::0;;:::o;33957:1220::-;34222:7;:14;34208:3;:10;:28;34200:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34314:1;34300:16;;:2;:16;;;;34292:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34399:12;:10;:12::i;:::-;34391:20;;:4;:20;;;:60;;;;34415:36;34432:4;34438:12;:10;:12::i;:::-;34415:16;:36::i;:::-;34391:60;34369:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34542:16;34561:12;:10;:12::i;:::-;34542:31;;34586:60;34607:8;34617:4;34623:2;34627:3;34632:7;34641:4;34586:20;:60::i;:::-;34664:9;34659:358;34683:3;:10;34679:1;:14;34659:358;;;34715:10;34728:3;34732:1;34728:6;;;;;;;;;;;;;;34715:19;;34749:14;34766:7;34774:1;34766:10;;;;;;;;;;;;;;34749:27;;34815:126;34857:6;34815:126;;;;;;;;;;;;;;;;;:9;:13;34825:2;34815:13;;;;;;;;;;;:19;34829:4;34815:19;;;;;;;;;;;;;;;;:23;;:126;;;;;:::i;:::-;34793:9;:13;34803:2;34793:13;;;;;;;;;;;:19;34807:4;34793:19;;;;;;;;;;;;;;;:148;;;;34976:29;34998:6;34976:9;:13;34986:2;34976:13;;;;;;;;;;;:17;34990:2;34976:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;34956:9;:13;34966:2;34956:13;;;;;;;;;;;:17;34970:2;34956:17;;;;;;;;;;;;;;;:49;;;;34659:358;;34695:3;;;;;34659:358;;;;35064:2;35034:47;;35058:4;35034:47;;35048:8;35034:47;;;35068:3;35073:7;35034:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35094:75;35130:8;35140:4;35146:2;35150:3;35155:7;35164:4;35094:35;:75::i;:::-;33957:1220;;;;;;:::o;49668:43::-;;;;;;;;;;;;;:::o;51119:87::-;47935:12;;;;;;;;;;47921:26;;:10;:26;;;47913:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51188:10:::1;:8;:10::i;:::-;51119:87::o:0;51832:251::-;47935:12;;;;;;;;;;47921:26;;:10;:26;;;47913:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52008:1:::1;51979:26;:30;51971:39;;;::::0;::::1;;52049:26;52021:25;:54;;;;51832:251:::0;:::o;31711:549::-;31892:16;31953:3;:10;31934:8;:15;:29;31926:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32022:30;32069:8;:15;32055:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32022:63;;32103:9;32098:122;32122:8;:15;32118:1;:19;32098:122;;;32178:30;32188:8;32197:1;32188:11;;;;;;;;;;;;;;32201:3;32205:1;32201:6;;;;;;;;;;;;;;32178:9;:30::i;:::-;32159:13;32173:1;32159:16;;;;;;;;;;;;;:49;;;;;32139:3;;;;;32098:122;;;;32239:13;32232:20;;;31711:549;;;;:::o;44293:86::-;44340:4;44364:7;;;;;;;;;;;44357:14;;44293:86;:::o;49936:798::-;16764:13;;;;;;;;;;;:33;;;;16781:16;:14;:16::i;:::-;16764:33;:50;;;;16802:12;;;;;;;;;;;16801:13;16764:50;16756:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16878:19;16901:13;;;;;;;;;;;16900:14;16878:36;;16929:14;16925:101;;;16976:4;16960:13;;:20;;;;;;;;;;;;;;;;;;17010:4;16995:12;;:19;;;;;;;;;;;;;;;;;;16925:101;50232:20:::1;50247:4;50232:14;:20::i;:::-;50329:62;50355:13;50370:20;50329:25;:62::i;:::-;50486:18;50447:17;;:58;;;;;;;;;;;;;;;;;;50606:26;50578:25;:54;;;;50709:17;50690:16;:36;;;;;;;;;;;;:::i;:::-;;17056:14:::0;17052:68;;;17103:5;17087:13;;:21;;;;;;;;;;;;;;;;;;17052:68;49936:798;;;;;;;:::o;52151:1052::-;47713:19;;;;;;;;;;;:32;;;47746:10;47713:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47705:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52343:25:::1;;52326:13;:42;;52318:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52444:24;52466:1;52444:17;;:21;;:24;;;;:::i;:::-;52433:7;:35;52425:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52651:25;;52605:34;:43;52640:7;52605:43;;;;;;;;;;;:71;;;;52753:13;52720:21;:30;52742:7;52720:30;;;;;;;;;;;:46;;;;52837:64;52851:17;;;;;;;;;;;52871:7;52880:13;52837:64;;;;;;;;;;;;;;;;::::0;:5:::1;:64::i;:::-;52942:48;52955:7;52964:10;52976:13;52942:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53045:17;;;;;;;;;;;:42;;;53088:7;53097:10;53045:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53188:7;53168:17;:27;;;;52151:1052:::0;;;:::o;49265:32::-;;;;:::o;47547:27::-;;;;;;;;;;;;:::o;50884:83::-;47935:12;;;;;;;;;;47921:26;;:10;:26;;;47913:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50951:8:::1;:6;:8::i;:::-;50884:83::o:0;32333:311::-;32452:8;32436:24;;:12;:10;:12::i;:::-;:24;;;;32428:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32564:8;32519:18;:32;32538:12;:10;:12::i;:::-;32519:32;;;;;;;;;;;;;;;:42;32552:8;32519:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32617:8;32588:48;;32603:12;:10;:12::i;:::-;32588:48;;;32627:8;32588:48;;;;;;;;;;;;;;;;;;;;32333:311;;:::o;54207:370::-;47713:19;;;;;;;;;;;:32;;;47746:10;47713:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47705:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54431:40:::1;54397:21;:30;54419:7;54397:30;;;;;;;;;;;;:74;;54389:83;;;::::0;::::1;;54529:40;54483:34;:43;54518:7;54483:43;;;;;;;;;;;:86;;;;54207:370:::0;;:::o;47581:47::-;;;;;;;;;;;;;:::o;51296:132::-;47935:12;;;;;;;;;;47921:26;;:10;:26;;;47913:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51404:16:::1;51412:7;51404;:16::i;:::-;51296:132:::0;:::o;54698:101::-;54742:13;54775:16;54768:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54698:101;:::o;32716:168::-;32815:4;32839:18;:27;32858:7;32839:27;;;;;;;;;;;;;;;:37;32867:8;32839:37;;;;;;;;;;;;;;;;;;;;;;;;;32832:44;;32716:168;;;;:::o;32956:924::-;33196:1;33182:16;;:2;:16;;;;33174:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33281:12;:10;:12::i;:::-;33273:20;;:4;:20;;;:60;;;;33297:36;33314:4;33320:12;:10;:12::i;:::-;33297:16;:36::i;:::-;33273:60;33251:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33415:16;33434:12;:10;:12::i;:::-;33415:31;;33459:96;33480:8;33490:4;33496:2;33500:21;33518:2;33500:17;:21::i;:::-;33523:25;33541:6;33523:17;:25::i;:::-;33550:4;33459:20;:96::i;:::-;33590:77;33614:6;33590:77;;;;;;;;;;;;;;;;;:9;:13;33600:2;33590:13;;;;;;;;;;;:19;33604:4;33590:19;;;;;;;;;;;;;;;;:23;;:77;;;;;:::i;:::-;33568:9;:13;33578:2;33568:13;;;;;;;;;;;:19;33582:4;33568:19;;;;;;;;;;;;;;;:99;;;;33698:29;33720:6;33698:9;:13;33708:2;33698:13;;;;;;;;;;;:17;33712:2;33698:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;33678:9;:13;33688:2;33678:13;;;;;;;;;;;:17;33692:2;33678:17;;;;;;;;;;;;;;;:49;;;;33776:2;33745:46;;33770:4;33745:46;;33760:8;33745:46;;;33780:2;33784:6;33745:46;;;;;;;;;;;;;;;;;;;;;;;;33804:68;33835:8;33845:4;33851:2;33855;33859:6;33867:4;33804:30;:68::i;:::-;32956:924;;;;;;:::o;49356:40::-;;;;:::o;23436:179::-;23494:7;23514:9;23530:1;23526;:5;23514:17;;23555:1;23550;:6;;23542:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23606:1;23599:8;;;23436:179;;;;:::o;36510:583::-;36644:1;36625:21;;:7;:21;;;;36617:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36697:16;36716:12;:10;:12::i;:::-;36697:31;;36741:107;36762:8;36780:1;36784:7;36793:21;36811:2;36793:17;:21::i;:::-;36816:25;36834:6;36816:17;:25::i;:::-;36843:4;36741:20;:107::i;:::-;36886:34;36913:6;36886:9;:13;36896:2;36886:13;;;;;;;;;;;:22;36900:7;36886:22;;;;;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;36861:9;:13;36871:2;36861:13;;;;;;;;;;;:22;36875:7;36861:22;;;;;;;;;;;;;;;:59;;;;36973:7;36936:57;;36969:1;36936:57;;36951:8;36936:57;;;36982:2;36986:6;36936:57;;;;;;;;;;;;;;;;;;;;;;;;37006:79;37037:8;37055:1;37059:7;37068:2;37072:6;37080:4;37006:30;:79::i;:::-;36510:583;;;;;:::o;18216:106::-;18269:15;18304:10;18297:17;;18216:106;:::o;46528:424::-;46799:66;46826:8;46836:4;46842:2;46846:3;46851:7;46860:4;46799:26;:66::i;:::-;46887:8;:6;:8::i;:::-;46886:9;46878:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46528:424;;;;;;:::o;26263:166::-;26349:7;26382:1;26377;:6;;26385:12;26369:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26420:1;26416;:5;26409:12;;26263:166;;;;;:::o;41899:821::-;42153:15;:2;:13;;;:15::i;:::-;42149:564;;;42217:2;42189:54;;;42244:8;42254:4;42260:3;42265:7;42274:4;42189:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42185:517;;;;:::i;:::-;;;;;;;;42575:6;42568:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42185:517;42624:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42185:517;42341:63;;;42329:75;;;:8;:75;;;;42325:174;;42429:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42325:174;42280:234;42149:564;41899:821;;;;;;:::o;45352:120::-;44896:8;:6;:8::i;:::-;44888:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45421:5:::1;45411:7;;:15;;;;;;;;;;;;;;;;;;45442:22;45451:12;:10;:12::i;:::-;45442:22;;;;;;;;;;;;;;;;;;;;45352:120::o:0;17220:125::-;17268:4;17293:44;17331:4;17293:29;:44::i;:::-;17292:45;17285:52;;17220:125;:::o;30053:187::-;16764:13;;;;;;;;;;;:33;;;;16781:16;:14;:16::i;:::-;16764:33;:50;;;;16802:12;;;;;;;;;;;16801:13;16764:50;16756:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16878:19;16901:13;;;;;;;;;;;16900:14;16878:36;;16929:14;16925:101;;;16976:4;16960:13;;:20;;;;;;;;;;;;;;;;;;17010:4;16995:12;;:19;;;;;;;;;;;;;;;;;;16925:101;30129:26:::1;:24;:26::i;:::-;30166:25;:23;:25::i;:::-;30202:30;30227:4;30202:24;:30::i;:::-;17056:14:::0;17052:68;;;17103:5;17087:13;;:21;;;;;;;;;;;;;;;;;;17052:68;30053:187;;:::o;48027:254::-;48185:13;48170:12;;:28;;;;;;;;;;;;;;;;;;48252:20;48209:19;;:64;;;;;;;;;;;;;;;;;;48027:254;;:::o;45093:118::-;44619:8;:6;:8::i;:::-;44618:9;44610:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45163:4:::1;45153:7;;:14;;;;;;;;;;;;;;;;;;45183:20;45190:12;:10;:12::i;:::-;45183:20;;;;;;;;;;;;;;;;;;;;45093:118::o:0;36021:88::-;36095:6;36088:4;:13;;;;;;;;;;;;:::i;:::-;;36021:88;:::o;42728:198::-;42794:16;42823:22;42862:1;42848:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42823:41;;42886:7;42875:5;42881:1;42875:8;;;;;;;;;;;;;:18;;;;;42913:5;42906:12;;;42728:198;;;:::o;41107:784::-;41336:15;:2;:13;;;:15::i;:::-;41332:552;;;41400:2;41372:49;;;41422:8;41432:4;41438:2;41442:6;41450:4;41372:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41368:505;;;;:::i;:::-;;;;;;;;41746:6;41739:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41368:505;41795:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41368:505;41517:58;;;41505:70;;;:8;:70;;;;41501:169;;41600:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41501:169;41456:229;41332:552;41107:784;;;;;;:::o;40854:245::-;;;;;;;:::o;8960:422::-;9020:4;9228:12;9339:7;9327:20;9319:28;;9373:1;9366:4;:8;9359:15;;;8960:422;;;:::o;18145:65::-;16764:13;;;;;;;;;;;:33;;;;16781:16;:14;:16::i;:::-;16764:33;:50;;;;16802:12;;;;;;;;;;;16801:13;16764:50;16756:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16878:19;16901:13;;;;;;;;;;;16900:14;16878:36;;16929:14;16925:101;;;16976:4;16960:13;;:20;;;;;;;;;;;;;;;;;;17010:4;16995:12;;:19;;;;;;;;;;;;;;;;;;16925:101;17056:14;17052:68;;;17103:5;17087:13;;:21;;;;;;;;;;;;;;;;;;17052:68;18145:65;:::o;19392:253::-;16764:13;;;;;;;;;;;:33;;;;16781:16;:14;:16::i;:::-;16764:33;:50;;;;16802:12;;;;;;;;;;;16801:13;16764:50;16756:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16878:19;16901:13;;;;;;;;;;;16900:14;16878:36;;16929:14;16925:101;;;16976:4;16960:13;;:20;;;;;;;;;;;;;;;;;;17010:4;16995:12;;:19;;;;;;;;;;;;;;;;;;16925:101;19597:40:::1;19124:10;19616:20;;19597:18;:40::i;:::-;17056:14:::0;17052:68;;;17103:5;17087:13;;:21;;;;;;;;;;;;;;;;;;17052:68;19392:253;:::o;30248:397::-;16764:13;;;;;;;;;;;:33;;;;16781:16;:14;:16::i;:::-;16764:33;:50;;;;16802:12;;;;;;;;;;;16801:13;16764:50;16756:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16878:19;16901:13;;;;;;;;;;;16900:14;16878:36;;16929:14;16925:101;;;16976:4;16960:13;;:20;;;;;;;;;;;;;;;;;;17010:4;16995:12;;:19;;;;;;;;;;;;;;;;;;16925:101;30334:13:::1;30342:4;30334:7;:13::i;:::-;30439:41;29831:10;30458:21;;30439:18;:41::i;:::-;30583:54;29988:10;30602:34;;30583:18;:54::i;:::-;17056:14:::0;17052:68;;;17103:5;17087:13;;:21;;;;;;;;;;;;;;;;;;17052:68;30248:397;;:::o;20359:201::-;20458:10;20443:25;;:11;:25;;;;;20435:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20548:4;20512:20;:33;20533:11;20512:33;;;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;20359:201;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;5:97::-;;93:2;89:7;84:2;77:5;73:14;69:28;59:38;;53:49;;;:::o;110:106::-;;200:5;195:3;191:15;169:37;;163:53;;;:::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;336;333;318:23;357:34;388:1;382:8;357:34;:::i;:::-;414:10;409:3;406:19;396:2;;429:5;;;396:2;460;454:9;514:1;496:16;492:24;489:1;483:4;468:49;543:4;537:11;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;553:2;693:6;687:4;683:17;725:3;719:10;748:18;740:6;737:30;734:2;;;770:5;;;;;;;734:2;814:6;807:4;802:3;798:14;794:27;847:16;841:4;837:27;832:3;829:36;826:2;;;868:5;;;;;;;;826:2;912:29;934:6;912:29;:::i;:::-;905:4;900:3;896:14;892:50;888:2;881:62;955:3;948:10;;267:696;;;;;;;;:::o
Swarm Source
ipfs://37fac5428fa3910ae73fb1a9333bb120187468f6b9a1f293cb885ad389e797f3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.