Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AwkndV3
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-30 */ // SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; pragma experimental ABIEncoderV2; /** * @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/IERC1155ReceiverUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _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/token/ERC1155/IERC1155Upgradeable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface 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/extensions/IERC1155MetadataURIUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^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/utils/AddressUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^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; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol // OpenZeppelin Contracts v4.4.1 (proxy/utils/Initializable.sol) pragma solidity ^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 {ERC1967Proxy-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. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() initializer {} * ``` * ==== */ 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() { // If the contract is initializing we ignore whether _initialized is set in order to support multiple // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the // contract may have been reentered. require(_initializing ? _isConstructor() : !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} modifier, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } function _isConstructor() private view returns (bool) { return !AddressUpgradeable.isContract(address(this)); } } // File: @openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable { function __ERC165_init() internal onlyInitializing { __ERC165_init_unchained(); } function __ERC165_init_unchained() internal onlyInitializing { } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165Upgradeable).interfaceId; } uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { __Context_init_unchained(); } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal onlyInitializing { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } uint256[49] private __gap; } // File: contracts/version1/ERC1155Upgradeable.sol pragma solidity ^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 AddressUpgradeable for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) internal _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) internal _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string internal _uri; /** * @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_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, IERC165Upgradeable) returns (bool) { return interfaceId == type(IERC1155Upgradeable).interfaceId || interfaceId == type(IERC1155MetadataURIUpgradeable).interfaceId || super.supportsInterface(interfaceId); } /** * @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) public 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), "E24"); 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, "E25"); 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, "E26"); _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( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(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( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `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 memory data ) internal virtual { require(to != address(0), "E30"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "E27"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - 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[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "E28"); require(to != address(0), "E29"); 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]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "E31"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); } /** * @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 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 ) internal { if (to.isContract()) { try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155ReceiverUpgradeable.onERC1155Received.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) internal pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } uint256[47] private __gap; } // File: contracts/version1/Awknd.sol contract Awknd is Initializable, ERC1155Upgradeable, OwnableUpgradeable { /* events */ event WithdrawEth(address indexed _operator, uint256 _ethWei); event SetMaxMintingPerTime(uint baseTokenID, uint8 maxMintingPerTime); event SetMintingMode(uint baseTokenID, uint8 mintingMode); event UpdateLevel(uint indexed id, uint8 level, uint timestamp); event Mint(uint indexed id, address to, uint timestamp); struct NftToken{ uint8 maxMintingPerTime; // if unlimit mode, this variant set how many people can mint in a time; if invitation mode, it set be how many an invitation code can mint uint8 mintingMode; // 0: minting unable;1: unLimit; 2: invitation Mode; 3: must own privous token uint16 nftCost; // finney uint16 totalSupply; uint16 maxSupply; uint32 currentMintedID; // upgrade Conditions, for phase 1 it is days need, after phase 2 it's burn multipass number uint32[5] upgradeconditions; } struct TokenMinted { uint8 level; uint8 isRarible; // Compatibility reserved uint16 gearID; // Compatibility reserved uint32 comicID; // Compatibility reserved uint32 mintedAtTimestamp; address tokenMinter; } mapping(uint256 => NftToken) public nftTokens; // base setting // Mapping from token ID to owner address mapping(uint256 => TokenMinted) internal multipass; // tokenID to tokenMinted mapping(uint32 => uint) internal invitationsMinted; // invitation code => mintedCount mapping(address => bool) internal admins; function initialize() public initializer { OwnableUpgradeable.__Ownable_init(); ERC1155Upgradeable.__ERC1155_init(""); grantAdmin(_msgSender()); } receive() external virtual payable { } fallback() external virtual payable { } /* withdraw eth from contract */ function withdraw(uint _amount) public onlyOwner { _amount = _amount == 0 ? address(this).balance : _amount; require(_amount <= address(this).balance, "E10"); uint _devFee = _amount * 2 / 100; payable(0x2130C75caC9E1EF6381C6F354331B3049221391C).transfer(_devFee); payable(_msgSender()).transfer(_amount - _devFee); emit WithdrawEth(_msgSender(), _amount); } modifier canMint(uint _baseTokenID_, uint8 _number_) { require(nftTokens[_baseTokenID_].mintingMode > 0, "E11"); require(_number_ <= nftTokens[_baseTokenID_].maxMintingPerTime, "E12"); require (nftTokens[_baseTokenID_].totalSupply + _number_ <= nftTokens[_baseTokenID_].maxSupply, "E13"); _; } /* grant admin access to address */ function grantAdmin(address _addr) public onlyOwner { admins[_addr] = true; } /* revoke admin access of addr */ function revokeAdmin(address _addr) public onlyOwner { admins[_addr] = false; } function transferOwnership(address newOwner) public virtual override onlyOwner { super.transferOwnership(newOwner); grantAdmin(newOwner); } modifier onlyAdmin() { require(admins[_msgSender()] == true, "E14"); _; } /* Hash Address to an uint32 number */ function hashAddress(uint _tokenBaseID, address _addr) private pure returns(uint32) { uint _address = uint(uint160(_addr)); uint32 _addrLow = uint32(_address); uint32 _addrHeight = uint32(_address >> 64); uint32 _result = uint32(_addrLow ^ _addrHeight + uint24(_address) + uint24(_tokenBaseID)); if (_result < 1010101011) { _result = _result + 1010101011; } return _result; } function getInvitationCode(uint _tokenBaseID, address _addr) external view onlyAdmin returns(uint32) { return hashAddress(_tokenBaseID, _addr); } modifier invitationCheck(uint _baseTokenID_, uint32 invitationCode_, uint8 _number) { if (nftTokens[_baseTokenID_].mintingMode == 2) { require(invitationCode_ == hashAddress(_baseTokenID_, _msgSender()), "E15"); require(invitationsMinted[invitationCode_] + _number <= nftTokens[_baseTokenID_].maxMintingPerTime, "E16"); } _; } /* set Token URI */ function setTokenURI(string calldata _uri, uint256 _id) external virtual onlyAdmin { emit URI(_uri, _id); } function setUri(string memory newuri) external virtual onlyAdmin { _setURI(newuri); } /* Set token base infomation uint256 _baseTokenID_: base token id uint8 _mintingMode_: 0: minting unable;1: unLimit; 2: invitation Mode; 3: must own privous token uint32 _supply_: max Supply uint16 _nftCost_: set nft price, unit is finney (0.0001 ETH) uint8 _maxMintingPerTime_: if unlimit mode, this variant set how many people can mint in a time; if invitation mode, it set be how many an invitation code can mint uint32[5] memory _upgradeconditions_: set update conditions, for phase 1 it's days can be update after mint for every levels */ function setTokenBaseInfo( uint256 _baseTokenID_, uint8 _mintingMode_, uint16 _supply_, uint16 _nftCost_, uint8 _maxMintingPerTime_, uint32[5] memory _upgradeconditions_ ) external onlyAdmin { nftTokens[_baseTokenID_].maxSupply = _supply_; nftTokens[_baseTokenID_].mintingMode = _mintingMode_; nftTokens[_baseTokenID_].nftCost = _nftCost_; nftTokens[_baseTokenID_].maxMintingPerTime = _maxMintingPerTime_; for(uint i = 0; i < 5; i++) { nftTokens[_baseTokenID_].upgradeconditions[i] = _upgradeconditions_[i]; } } /* set minting mode for token _mode: 0: minting unable;1: unLimit; 2: invitation Mode; 2: must own privous token */ function setMintingMode(uint256 _baseTokenID_, uint8 _mode) external onlyAdmin { nftTokens[_baseTokenID_].mintingMode = _mode; emit SetMintingMode(_baseTokenID_, _mode); } // when _howManyFinney = 1, 1 finney is 0.001 ETH function setNftCost(uint256 _baseTokenID_, uint16 _howManyFinney) external onlyAdmin { nftTokens[_baseTokenID_].nftCost = _howManyFinney; } /* set Nft supplies */ function setMaxSupplies(uint _baseTokenID_, uint16 _supply) external onlyAdmin { nftTokens[_baseTokenID_].maxSupply = _supply; } /* if unlimit mode, this function set how many people can mint in a time; if invitation mode, it set be how many an invitation code can mint */ function setMaxMintingPerTime(uint _baseTokenID_, uint8 _maxMintingPerTime_) external onlyAdmin { nftTokens[_baseTokenID_].maxMintingPerTime = _maxMintingPerTime_; emit SetMaxMintingPerTime(_baseTokenID_, _maxMintingPerTime_); } /* set update conditions, for phase 1 it's days can be update after mint for every levels*/ function setUpdateCondition(uint _baseTokenID_, uint8 level, uint32 condition) external onlyAdmin { require(level < 5, "E17"); nftTokens[_baseTokenID_].upgradeconditions[level] = condition; } function baseTokenExists(uint _baseTokenID_) public view returns(bool) { return nftTokens[_baseTokenID_].maxSupply > 0; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 id) public view virtual returns (address) { address owner = multipass[id].tokenMinter; require(owner != address(0), "E18"); return owner; } /* get mint stamp */ function mintedTimestamp(uint256 id) public view returns (uint32) { return multipass[id].mintedAtTimestamp; } /* set level by manual */ function setTokenLevel(uint id, uint8 level) external onlyAdmin { require(multipass[id].tokenMinter != address(0), "E19"); require(level < 5, "Wrong Level"); multipass[id].level = level; emit UpdateLevel(id, level, block.timestamp); } /* get the token level */ function getTokenLevel(uint id) public view returns(uint8) { require(multipass[id].mintedAtTimestamp > 0, "Toeken not exists"); if (multipass[id].level > 0) { return multipass[id].level; } uint daysDiff = block.timestamp - uint(multipass[id].mintedAtTimestamp); uint currentLevel = 0; if (nftTokens[0].upgradeconditions.length > 0) { for (uint i = nftTokens[0].upgradeconditions.length - 1; i >= 0; i--) { if (daysDiff >= uint(nftTokens[0].upgradeconditions[i]) * 86400) { currentLevel = i; break; } } } return uint8(currentLevel); } /** In order to save gas, we are not do the safety check */ function mintMultiPass(uint8 amount, uint32 invitationCode) external canMint(0, amount) invitationCheck(0, invitationCode, amount) payable { address account = _msgSender(); require(account != address(0), "E21"); require(msg.value >= uint(nftTokens[0].nftCost) * amount * 10 ** 15, "Low Price"); uint32 _currentMintedID = nftTokens[0].currentMintedID; // _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); for (uint8 i = 0; i < amount; i++) { _balances[_currentMintedID][account] += 1; multipass[_currentMintedID].mintedAtTimestamp = uint32(block.timestamp); multipass[_currentMintedID].tokenMinter = account; emit TransferSingle(account, address(0), account, _currentMintedID, 1); emit Mint(_currentMintedID, account, block.timestamp); _currentMintedID += 1; } if (nftTokens[0].mintingMode == 2) { invitationsMinted[invitationCode] += amount; } nftTokens[0].currentMintedID = _currentMintedID; nftTokens[0].totalSupply += amount; // _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } function mintMultiPassTo(address[] memory _addrs) external onlyAdmin { uint16 amount = uint16(_addrs.length); require(amount < 256, "E22"); require (nftTokens[0].totalSupply + amount <= nftTokens[0].maxSupply, "E23"); uint32 _currentMintedID = nftTokens[0].currentMintedID; // _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); for (uint i = 0; i < amount; i++) { _balances[_currentMintedID][_addrs[i]] += 1; multipass[_currentMintedID].mintedAtTimestamp = uint32(block.timestamp); multipass[_currentMintedID].tokenMinter = _addrs[i]; emit TransferSingle(_msgSender(), address(0), _addrs[i], _currentMintedID, 1); emit Mint(_currentMintedID, _addrs[i], block.timestamp); _currentMintedID += 1; } nftTokens[0].currentMintedID = _currentMintedID; nftTokens[0].totalSupply += amount; // _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } uint256[47] private __gap; } // File: contracts/version2/AwkndV2.sol contract AwkndV2 is Awknd { event ApplyComic(uint indexed multipassId, address holder, uint comicId); event DefaultApproval(address indexed operator, bool hasApproval); mapping(address => bool) private defaultApprovals; function Initialize() public initializer { } function name() public pure returns(string memory) { return "Awakened-Multipass"; } function symbol() public pure returns(string memory) { return "Multipass"; } function totalSupply() public view returns(uint) { return nftTokens[0].totalSupply; } function setDefaultApproval(address operator, bool hasApproval) public onlyAdmin { defaultApprovals[operator] = hasApproval; emit DefaultApproval(operator, hasApproval); } function existsToken(address _addr, uint _id) public view returns(bool) { uint256 accountBalance = _balances[_id][_addr]; return accountBalance > 0; } function tokenInfo(uint16 id) public view returns(TokenMinted memory) { return multipass[id]; } function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "Burn: Illegal Address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "Burn: None tokens"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, address(0), id, amount); } function burn(address _owner, uint16 id) public virtual { require( _owner == _msgSender() || isApprovedForAll(_owner, _msgSender()), "ERC1155: No Access" ); _burn(_owner, id, 1); nftTokens[0].totalSupply--; } function applyComic(uint32 multipassId, address holder, uint32 comicId) external { require(isApprovedForAll(holder, _msgSender()), "Access: Deny"); require(existsToken(holder, multipassId), "Holder:did not own this token"); multipass[multipassId].comicID = comicId; emit ApplyComic(multipassId, holder, comicId); } function hasApplyComic(uint32 multipassId) public view returns(bool) { return multipass[multipassId].comicID > 0; } function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) { return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator); } } // File: contracts/AwakndV3.sol contract AwkndV3 is AwkndV2 { event ApplyGear(uint indexed multipassId, address holder, uint gearId); function applyGear(uint32 multipassId, address holder, uint16 gearId) external { require(multipass[multipassId].gearID == 0, "This Token has applied gear"); require(getTokenLevel(multipassId) > 1, "Require at least level 2 multipass"); require(isApprovedForAll(holder, _msgSender()), "Access: Deny"); require(existsToken(holder, multipassId), "Holder:did not own this token"); multipass[multipassId].gearID = gearId; emit ApplyGear(multipassId, holder, gearId); } function hasApplyGear(uint32 multipassId) public view returns(bool) { return multipass[multipassId].gearID > 0; } function contractURI() public pure returns (string memory) { return "https://ipfs.io/ipns/k2k4r8pap0xk525d8u4pi0n3pldeflzufjp1mgn2qu7a9lliw395xxqc/contractURI"; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"multipassId","type":"uint256"},{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"comicId","type":"uint256"}],"name":"ApplyComic","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"multipassId","type":"uint256"},{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"gearId","type":"uint256"}],"name":"ApplyGear","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":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"hasApproval","type":"bool"}],"name":"DefaultApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"baseTokenID","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"maxMintingPerTime","type":"uint8"}],"name":"SetMaxMintingPerTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"baseTokenID","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"mintingMode","type":"uint8"}],"name":"SetMintingMode","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":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"level","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateLevel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ethWei","type":"uint256"}],"name":"WithdrawEth","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"Initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"multipassId","type":"uint32"},{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint32","name":"comicId","type":"uint32"}],"name":"applyComic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"multipassId","type":"uint32"},{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint16","name":"gearId","type":"uint16"}],"name":"applyGear","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":[{"internalType":"uint256","name":"_baseTokenID_","type":"uint256"}],"name":"baseTokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint16","name":"id","type":"uint16"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"existsToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenBaseID","type":"uint256"},{"internalType":"address","name":"_addr","type":"address"}],"name":"getInvitationCode","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getTokenLevel","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"grantAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"multipassId","type":"uint32"}],"name":"hasApplyComic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"multipassId","type":"uint32"}],"name":"hasApplyGear","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"uint32","name":"invitationCode","type":"uint32"}],"name":"mintMultiPass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"mintMultiPassTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"mintedTimestamp","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftTokens","outputs":[{"internalType":"uint8","name":"maxMintingPerTime","type":"uint8"},{"internalType":"uint8","name":"mintingMode","type":"uint8"},{"internalType":"uint16","name":"nftCost","type":"uint16"},{"internalType":"uint16","name":"totalSupply","type":"uint16"},{"internalType":"uint16","name":"maxSupply","type":"uint16"},{"internalType":"uint32","name":"currentMintedID","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"revokeAdmin","outputs":[],"stateMutability":"nonpayable","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":"operator","type":"address"},{"internalType":"bool","name":"hasApproval","type":"bool"}],"name":"setDefaultApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseTokenID_","type":"uint256"},{"internalType":"uint8","name":"_maxMintingPerTime_","type":"uint8"}],"name":"setMaxMintingPerTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseTokenID_","type":"uint256"},{"internalType":"uint16","name":"_supply","type":"uint16"}],"name":"setMaxSupplies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseTokenID_","type":"uint256"},{"internalType":"uint8","name":"_mode","type":"uint8"}],"name":"setMintingMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseTokenID_","type":"uint256"},{"internalType":"uint16","name":"_howManyFinney","type":"uint16"}],"name":"setNftCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseTokenID_","type":"uint256"},{"internalType":"uint8","name":"_mintingMode_","type":"uint8"},{"internalType":"uint16","name":"_supply_","type":"uint16"},{"internalType":"uint16","name":"_nftCost_","type":"uint16"},{"internalType":"uint8","name":"_maxMintingPerTime_","type":"uint8"},{"internalType":"uint32[5]","name":"_upgradeconditions_","type":"uint32[5]"}],"name":"setTokenBaseInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"setTokenLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseTokenID_","type":"uint256"},{"internalType":"uint8","name":"level","type":"uint8"},{"internalType":"uint32","name":"condition","type":"uint32"}],"name":"setUpdateCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"tokenInfo","outputs":[{"components":[{"internalType":"uint8","name":"level","type":"uint8"},{"internalType":"uint8","name":"isRarible","type":"uint8"},{"internalType":"uint16","name":"gearID","type":"uint16"},{"internalType":"uint32","name":"comicID","type":"uint32"},{"internalType":"uint32","name":"mintedAtTimestamp","type":"uint32"},{"internalType":"address","name":"tokenMinter","type":"address"}],"internalType":"struct Awknd.TokenMinted","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506147de806100206000396000f3fe6080604052600436106102c55760003560e01c80636352211e116101775780639c561601116100d5578063e8a3d48511610084578063f242432a11610061578063f242432a14610b1a578063f2fde38b14610b3a578063f3aa1c1514610b5a57005b8063e8a3d48514610aa5578063e985e9c514610aba578063ea08c8c314610ada57005b8063d011645c116100b2578063d011645c1461099f578063d55f2d9d146109d1578063e68b0944146109f157005b80639c561601146108fe578063a22cb4651461093b578063a411104c1461095b57005b80638129fc1c116101315780638ddc39ab1161010e5780638ddc39ab1461087857806395d89b41146108985780639b642de1146108de57005b80638129fc1c146108255780638382dd8a1461083a5780638da5cb5b1461085a57005b80637bc908921161015f5780637bc90892146107d05780637eeeb173146107f057806380f860091461081057005b80636352211e14610783578063715018a6146107bb57005b806318160ddd1161022457806335bb3e16116101de5780635aadfc08116101bb5780635aadfc08146105dd5780635d85937514610724578063616cd9fa1461074457005b806335bb3e16146105705780633d20a231146105905780634e1273f4146105b057005b80632d3456701161020c5780632d345670146105105780632e1a7d4d146105305780632eb2c2d61461055057005b806318160ddd146104a75780632962299f146104f057005b8063093e88b3116102805780630e89341c1161025d5780630e89341c1461041357806312d9f50a1461043357806318054c371461048757005b8063093e88b3146103b357806309a3beef146103d357806309b60a27146103f357005b80630588b4af116102ae5780630588b4af1461033157806306fdde031461034457806308ad480b1461039357005b8062fdd58e146102ce57806301ffc9a71461030157005b366102cc57005b005b3480156102da57600080fd5b506102ee6102e9366004613b9c565b610b7a565b6040519081526020015b60405180910390f35b34801561030d57600080fd5b5061032161031c366004613bf4565b610bff565b60405190151581526020016102f8565b6102cc61033f366004613c36565b610ce4565b34801561035057600080fd5b5060408051808201909152601281527f4177616b656e65642d4d756c746970617373000000000000000000000000000060208201525b6040516102f89190613cb6565b34801561039f57600080fd5b506102cc6103ae366004613cc9565b61130a565b3480156103bf57600080fd5b506102cc6103ce366004613cec565b61147c565b3480156103df57600080fd5b506102cc6103ee366004613d28565b61156e565b3480156103ff57600080fd5b506102cc61040e366004613db2565b6115f7565b34801561041f57600080fd5b5061038661042e366004613dec565b611826565b34801561043f57600080fd5b5061047261044e366004613dec565b600090815260ca602052604090205468010000000000000000900463ffffffff1690565b60405163ffffffff90911681526020016102f8565b34801561049357600080fd5b506102cc6104a2366004613e05565b6118ba565b3480156104b357600080fd5b506000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75654640100000000900461ffff166102ee565b3480156104fc57600080fd5b506102cc61050b366004613cc9565b61195c565b34801561051c57600080fd5b506102cc61052b366004613e41565b611a01565b34801561053c57600080fd5b506102cc61054b366004613dec565b611a7c565b34801561055c57600080fd5b506102cc61056b366004613fd8565b611bfd565b34801561057c57600080fd5b506102cc61058b366004613e41565b611c9f565b34801561059c57600080fd5b506102cc6105ab3660046140ef565b611d1d565b3480156105bc57600080fd5b506105d06105cb36600461412c565b61214c565b6040516102f891906141cb565b3480156105e957600080fd5b506106b96105f83660046141de565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525061ffff908116600090815260ca6020908152604091829020825160c081018452905460ff8082168352610100820416928201929092526201000082049093169183019190915263ffffffff6401000000008204811660608401526801000000000000000082041660808301526001600160a01b036c010000000000000000000000009091041660a082015290565b6040516102f89190600060c08201905060ff835116825260ff602084015116602083015261ffff6040840151166040830152606083015163ffffffff808216606085015280608086015116608085015250506001600160a01b0360a08401511660a083015292915050565b34801561073057600080fd5b5061047261073f3660046141f9565b612264565b34801561075057600080fd5b5061032161075f36600461421c565b63ffffffff16600090815260ca602052604090205462010000900461ffff16151590565b34801561078f57600080fd5b506107a361079e366004613dec565b6122bf565b6040516001600160a01b0390911681526020016102f8565b3480156107c757600080fd5b506102cc612334565b3480156107dc57600080fd5b506102cc6107eb366004614237565b61239a565b3480156107fc57600080fd5b506102cc61080b3660046142f1565b612508565b34801561081c57600080fd5b506102cc612660565b34801561083157600080fd5b506102cc612728565b34801561084657600080fd5b506102cc61085536600461431d565b612804565b34801561086657600080fd5b506097546001600160a01b03166107a3565b34801561088457600080fd5b506102cc610893366004613cc9565b61289a565b3480156108a457600080fd5b5060408051808201909152600981527f4d756c74697061737300000000000000000000000000000000000000000000006020820152610386565b3480156108ea57600080fd5b506102cc6108f9366004614340565b61293f565b34801561090a57600080fd5b50610321610919366004613dec565b600090815260c960205260409020546601000000000000900461ffff16151590565b34801561094757600080fd5b506102cc610956366004613e05565b612992565b34801561096757600080fd5b50610321610976366004613b9c565b60009081526065602090815260408083206001600160a01b039490941683529290522054151590565b3480156109ab57600080fd5b506109bf6109ba366004613dec565b612a57565b60405160ff90911681526020016102f8565b3480156109dd57600080fd5b506102cc6109ec366004614389565b612bc4565b3480156109fd57600080fd5b50610a63610a0c366004613dec565b60c96020526000908152604090205460ff8082169161010081049091169061ffff620100008204811691640100000000810482169166010000000000008204169063ffffffff680100000000000000009091041686565b6040805160ff978816815296909516602087015261ffff93841694860194909452908216606085015216608083015263ffffffff1660a082015260c0016102f8565b348015610ab157600080fd5b50610386612c9f565b348015610ac657600080fd5b50610321610ad53660046143b3565b612cbf565b348015610ae657600080fd5b50610321610af536600461421c565b63ffffffff908116600090815260ca6020526040902054640100000000900416151590565b348015610b2657600080fd5b506102cc610b353660046143dd565b612d0f565b348015610b4657600080fd5b506102cc610b55366004613e41565b612daa565b348015610b6657600080fd5b506102cc610b7536600461431d565b612e16565b60006001600160a01b038316610bd75760405162461bcd60e51b815260206004820152600360248201527f453234000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b5060009081526065602090815260408083206001600160a01b03949094168352929052205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a26000000000000000000000000000000000000000000000000000000001480610c9257507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b80610cde57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600080805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be756548390610100900460ff16610d665760405162461bcd60e51b815260206004820152600360248201527f45313100000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600082815260c9602052604090205460ff9081169082161115610dcb5760405162461bcd60e51b815260206004820152600360248201527f45313200000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600082815260c9602052604090205461ffff66010000000000008204811691610e019160ff851691640100000000900416614458565b61ffff161115610e535760405162461bcd60e51b815260206004820152600360248201527f45313300000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600080805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565484908690610100900460ff1660021415610f7c57610e9d8333612e8d565b63ffffffff168263ffffffff1614610ef75760405162461bcd60e51b815260206004820152600360248201527f45313500000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600083815260c9602090815260408083205463ffffffff8616845260cb9092529091205460ff91821691610f2e919084169061447e565b1115610f7c5760405162461bcd60e51b815260206004820152600360248201527f45313600000000000000000000000000000000000000000000000000000000006044820152606401610bce565b3380610fca5760405162461bcd60e51b815260206004820152600360248201527f45323100000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565461100d9060ff8a169062010000900461ffff16614496565b61101e9066038d7ea4c68000614496565b34101561106d5760405162461bcd60e51b815260206004820152600960248201527f4c6f7720507269636500000000000000000000000000000000000000000000006044820152606401610bce565b600080805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565468010000000000000000900463ffffffff16905b8960ff168160ff16101561120a5763ffffffff821660009081526065602090815260408083206001600160a01b038716845290915281208054600192906110f590849061447e565b909155505063ffffffff828116600081815260ca60209081526040808320805467ffffffffffffffff166801000000000000000042909716969096026bffffffffffffffffffffffff16959095176c010000000000000000000000006001600160a01b038a16908102919091179095558051938452600191840191909152909183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516001600160a01b038516815242602082015263ffffffff8416917f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f6910160405180910390a26111f66001836144b5565b915080611202816144d4565b9150506110ad565b506000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75654610100900460ff16600214156112745763ffffffff8816600090815260cb60205260408120805460ff8c16929061126e90849061447e565b90915550505b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75680546bffffffff000000000000000019166801000000000000000063ffffffff8416021780825560ff8b1691906004906112e5908490640100000000900461ffff16614458565b92506101000a81548161ffff021916908361ffff160217905550505050505050505050565b33600090815260cc602052604090205460ff1615156001146113545760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600082815260ca60205260409020546c0100000000000000000000000090046001600160a01b03166113c85760405162461bcd60e51b815260206004820152600360248201527f45313900000000000000000000000000000000000000000000000000000000006044820152606401610bce565b60058160ff161061141b5760405162461bcd60e51b815260206004820152600b60248201527f57726f6e67204c6576656c0000000000000000000000000000000000000000006044820152606401610bce565b600082815260ca6020908152604091829020805460ff191660ff85169081179091558251908152429181019190915283917fbcadeb61c19f3fa40746aa687138573e0a5ca660a54431ae90de81f4a1e62ea191015b60405180910390a25050565b33600090815260cc602052604090205460ff1615156001146114c65760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b60058260ff16106115195760405162461bcd60e51b815260206004820152600360248201527f45313700000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600083815260c960205260409020819060010160ff841660058110611540576115406144f4565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550505050565b33600090815260cc602052604090205460ff1615156001146115b85760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b84846040516115ea92919061450a565b60405180910390a2505050565b63ffffffff8316600090815260ca602052604090205462010000900461ffff16156116645760405162461bcd60e51b815260206004820152601b60248201527f5468697320546f6b656e20686173206170706c696564206765617200000000006044820152606401610bce565b60016116758463ffffffff16612a57565b60ff16116116eb5760405162461bcd60e51b815260206004820152602260248201527f52657175697265206174206c65617374206c6576656c2032206d756c7469706160448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610bce565b6116f58233612cbf565b6117415760405162461bcd60e51b815260206004820152600c60248201527f4163636573733a2044656e7900000000000000000000000000000000000000006044820152606401610bce565b63ffffffff831660009081526065602090815260408083206001600160a01b03861684529091529020546117b75760405162461bcd60e51b815260206004820152601d60248201527f486f6c6465723a646964206e6f74206f776e207468697320746f6b656e0000006044820152606401610bce565b63ffffffff8316600081815260ca6020908152604091829020805463ffff000019166201000061ffff87169081029190911790915582516001600160a01b0387168152918201527f496528518bcc717be334d30fdc9269aeae3d48b548e4033b7c1858575e3d767891016115ea565b60606067805461183590614539565b80601f016020809104026020016040519081016040528092919081815260200182805461186190614539565b80156118ae5780601f10611883576101008083540402835291602001916118ae565b820191906000526020600020905b81548152906001019060200180831161189157829003601f168201915b50505050509050919050565b33600090815260cc602052604090205460ff1615156001146119045760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b6001600160a01b038216600081815260fc6020908152604091829020805460ff191685151590811790915591519182527f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9101611470565b33600090815260cc602052604090205460ff1615156001146119a65760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600082815260c96020908152604091829020805460ff191660ff85169081179091558251858152918201527fcda974a65050e23d556b175f6366740ba820c4da89b84b7180718b8e072c487f91015b60405180910390a15050565b6097546001600160a01b03163314611a5b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b6001600160a01b0316600090815260cc60205260409020805460ff19169055565b6097546001600160a01b03163314611ad65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b8015611ae25780611ae4565b475b905047811115611b365760405162461bcd60e51b815260206004820152600360248201527f45313000000000000000000000000000000000000000000000000000000000006044820152606401610bce565b60006064611b45836002614496565b611b4f9190614574565b604051909150732130c75cac9e1ef6381c6f354331b3049221391c9082156108fc029083906000818181858888f19350505050158015611b93573d6000803e3d6000fd5b50336108fc611ba28385614596565b6040518115909202916000818181858888f19350505050158015611bca573d6000803e3d6000fd5b5060405182815233907fccbd99ba6da8f29b2a4f65e474e3c3973564d356c162c08d45f3dc7f0cb5b3aa90602001611470565b6001600160a01b038516331480611c195750611c198533612cbf565b611c8b5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610bce565b611c988585858585612efd565b5050505050565b6097546001600160a01b03163314611cf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b6001600160a01b0316600090815260cc60205260409020805460ff19166001179055565b33600090815260cc602052604090205460ff161515600114611d675760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b805161010061ffff821610611dbe5760405162461bcd60e51b815260206004820152600360248201527f45323200000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565461ffff66010000000000008204811691611e0d918491640100000000900416614458565b61ffff161115611e5f5760405162461bcd60e51b815260206004820152600360248201527f45323300000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600080805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565468010000000000000000900463ffffffff16905b8261ffff168110156120be576001606560008463ffffffff1681526020019081526020016000206000868481518110611eda57611eda6144f4565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f11919061447e565b909155505063ffffffff808316600090815260ca602052604090208054429290921668010000000000000000026bffffffff0000000000000000199092169190911790558351849082908110611f6957611f696144f4565b602002602001015160ca60008463ffffffff168152602001908152602001600020600001600c6101000a8154816001600160a01b0302191690836001600160a01b03160217905550838181518110611fc357611fc36144f4565b60200260200101516001600160a01b031660006001600160a01b0316611fe63390565b6040805163ffffffff87168152600160208201526001600160a01b0392909216917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a48163ffffffff167f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f685838151811061206c5761206c6144f4565b6020026020010151426040516120979291906001600160a01b03929092168252602082015260400190565b60405180910390a26120aa6001836144b5565b9150806120b6816145ad565b915050611e9f565b506000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75680546bffffffff000000000000000019166801000000000000000063ffffffff8416021780825583919060049061212d908490640100000000900461ffff16614458565b92506101000a81548161ffff021916908361ffff160217905550505050565b6060815183511461219f5760405162461bcd60e51b815260206004820152600360248201527f45323500000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6000835167ffffffffffffffff8111156121bb576121bb613e5c565b6040519080825280602002602001820160405280156121e4578160200160208202803683370190505b50905060005b845181101561225c5761222f858281518110612208576122086144f4565b6020026020010151858381518110612222576122226144f4565b6020026020010151610b7a565b828281518110612241576122416144f4565b6020908102919091010152612255816145ad565b90506121ea565b509392505050565b33600090815260cc602052604081205460ff1615156001146122ae5760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b6122b88383612e8d565b9392505050565b600081815260ca60205260408120546c0100000000000000000000000090046001600160a01b031680610cde5760405162461bcd60e51b815260206004820152600360248201527f45313800000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6097546001600160a01b0316331461238e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b612398600061311e565b565b33600090815260cc602052604090205460ff1615156001146123e45760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600086815260c960205260408120805460ff85811660ff1961ffff8981166201000002919091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff00938c166101000261ff0019928c16660100000000000002929092167fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff909516949094171791909116919091171790555b60058110156124ff57818160058110612497576124976144f4565b602002015160c9600089815260200190815260200160002060010182600581106124c3576124c36144f4565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555080806124f7906145ad565b91505061247c565b50505050505050565b6125128233612cbf565b61255e5760405162461bcd60e51b815260206004820152600c60248201527f4163636573733a2044656e7900000000000000000000000000000000000000006044820152606401610bce565b63ffffffff831660009081526065602090815260408083206001600160a01b03861684529091529020546125d45760405162461bcd60e51b815260206004820152601d60248201527f486f6c6465723a646964206e6f74206f776e207468697320746f6b656e0000006044820152606401610bce565b63ffffffff838116600081815260ca602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff1664010000000095871695860217905581516001600160a01b03871681529081019390935290917fcacee5b5ccaea41b261740ac4a545269764f79538956443bf5fcbfa970a7b3e691016115ea565b600054610100900460ff1661267b5760005460ff161561267f565b303b155b6126f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff16158015612713576000805461ffff19166101011790555b8015612725576000805461ff00191690555b50565b600054610100900460ff166127435760005460ff1615612747565b303b155b6127b95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff161580156127db576000805461ffff19166101011790555b6127e3613188565b6127fb60405180602001604052806000815250613215565b61271333611c9f565b33600090815260cc602052604090205460ff16151560011461284e5760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600091825260c96020526040909120805461ffff9092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055565b33600090815260cc602052604090205460ff1615156001146128e45760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600082815260c96020908152604091829020805461ff00191661010060ff8616908102919091179091558251858152918201527fe5fa1896e34b062b67e24ceac48c49829a796242457b2e068e91d815a801365891016119f5565b33600090815260cc602052604090205460ff1615156001146129895760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b612725816132f7565b336001600160a01b03831614156129eb5760405162461bcd60e51b815260206004820152600360248201527f45323600000000000000000000000000000000000000000000000000000000006044820152606401610bce565b3360008181526066602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600081815260ca602052604081205468010000000000000000900463ffffffff16612ac45760405162461bcd60e51b815260206004820152601160248201527f546f656b656e206e6f74206578697374730000000000000000000000000000006044820152606401610bce565b600082815260ca602052604090205460ff1615612af15750600090815260ca602052604090205460ff1690565b600082815260ca6020526040812054612b1c9068010000000000000000900463ffffffff1642614596565b600080805260c960205290915080612b3660016005614596565b90505b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7578160058110612b7457612b746144f4565b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1662015180612ba49190614496565b8310612bb25780915061225c565b80612bbc816145c8565b915050612b39565b6001600160a01b038216331480612be05750612be08233612cbf565b612c2c5760405162461bcd60e51b815260206004820152601260248201527f455243313135353a204e6f2041636365737300000000000000000000000000006044820152606401610bce565b612c3c828261ffff16600161330a565b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7568054640100000000900461ffff16906004612c80836145df565b91906101000a81548161ffff021916908361ffff160217905550505050565b606060405180608001604052806059815260200161475060599139905090565b6001600160a01b038116600090815260fc602052604081205460ff16806122b857506001600160a01b0380841660009081526066602090815260408083209386168352929052205460ff166122b8565b6001600160a01b038516331480612d2b5750612d2b8533612cbf565b612d9d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610bce565b611c988585858585613470565b6097546001600160a01b03163314612e045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b612e0d816135f1565b61272581611c9f565b33600090815260cc602052604090205460ff161515600114612e605760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600091825260c96020526040909120805461ffff909216620100000263ffff000019909216919091179055565b60006001600160a01b038216806bffffffffffffffffffffffff604085901c168362ffffff80881690612ec2908816846144b5565b612ecc91906144b5565b83189050633c34eb138163ffffffff161015612ef357612ef081633c34eb136144b5565b90505b9695505050505050565b8151835114612f4e5760405162461bcd60e51b815260206004820152600360248201527f45323800000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6001600160a01b038416612fa45760405162461bcd60e51b815260206004820152600360248201527f45323900000000000000000000000000000000000000000000000000000000006044820152606401610bce565b3360005b84518110156130be576000858281518110612fc557612fc56144f4565b602002602001015190506000858381518110612fe357612fe36144f4565b60209081029190910181015160008481526065835260408082206001600160a01b038e1683529093529190912054909150818110156130645760405162461bcd60e51b815260206004820152600360248201527f45333100000000000000000000000000000000000000000000000000000000006044820152606401610bce565b60008381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906130a390849061447e565b92505081905550505050806130b7906145ad565b9050612fa8565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161310e9291906145fd565b60405180910390a4505050505050565b609780546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166132055760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bce565b61320d6136d8565b612398613755565b600054610100900460ff166132305760005460ff1615613234565b303b155b6132a65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff161580156132c8576000805461ffff19166101011790555b6132d06136d8565b6132d86136d8565b6132e1826137db565b80156132f3576000805461ff00191690555b5050565b80516132f3906067906020840190613ae7565b6001600160a01b0383166133605760405162461bcd60e51b815260206004820152601560248201527f4275726e3a20496c6c6567616c204164647265737300000000000000000000006044820152606401610bce565b336133908185600061337187613897565b61337a87613897565b5050604080516020810190915260009052505050565b60008381526065602090815260408083206001600160a01b0388168452909152902054828110156134035760405162461bcd60e51b815260206004820152601160248201527f4275726e3a204e6f6e6520746f6b656e730000000000000000000000000000006044820152606401610bce565b60008481526065602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b0384166134c65760405162461bcd60e51b815260206004820152600360248201527f45333000000000000000000000000000000000000000000000000000000000006044820152606401610bce565b336134df8187876134d688613897565b611c9888613897565b60008481526065602090815260408083206001600160a01b038a168452909152902054838110156135525760405162461bcd60e51b815260206004820152600360248201527f45323700000000000000000000000000000000000000000000000000000000006044820152606401610bce565b60008581526065602090815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061359190849061447e565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46124ff8288888888886138e2565b6097546001600160a01b0316331461364b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b6001600160a01b0381166136c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bce565b6127258161311e565b505050505050565b600054610100900460ff166123985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff166137d25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bce565b6123983361311e565b600054610100900460ff166137f65760005460ff16156137fa565b303b155b61386c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff1615801561388e576000805461ffff19166101011790555b6132e1826132f7565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106138d1576138d16144f4565b602090810291909101015292915050565b6001600160a01b0384163b156136d0576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e619061393f908990899088908890889060040161462b565b6020604051808303816000875af192505050801561397a575060408051601f3d908101601f191682019092526139779181019061466e565b60015b613a305761398661468b565b806308c379a014156139c0575061399b6146a7565b806139a657506139c2565b8060405162461bcd60e51b8152600401610bce9190613cb6565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610bce565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146124ff5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610bce565b828054613af390614539565b90600052602060002090601f016020900481019282613b155760008555613b5b565b82601f10613b2e57805160ff1916838001178555613b5b565b82800160010185558215613b5b579182015b82811115613b5b578251825591602001919060010190613b40565b50613b67929150613b6b565b5090565b5b80821115613b675760008155600101613b6c565b80356001600160a01b0381168114613b9757600080fd5b919050565b60008060408385031215613baf57600080fd5b613bb883613b80565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461272557600080fd5b600060208284031215613c0657600080fd5b81356122b881613bc6565b803560ff81168114613b9757600080fd5b803563ffffffff81168114613b9757600080fd5b60008060408385031215613c4957600080fd5b613c5283613c11565b9150613c6060208401613c22565b90509250929050565b6000815180845260005b81811015613c8f57602081850181015186830182015201613c73565b81811115613ca1576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006122b86020830184613c69565b60008060408385031215613cdc57600080fd5b82359150613c6060208401613c11565b600080600060608486031215613d0157600080fd5b83359250613d1160208501613c11565b9150613d1f60408501613c22565b90509250925092565b600080600060408486031215613d3d57600080fd5b833567ffffffffffffffff80821115613d5557600080fd5b818601915086601f830112613d6957600080fd5b813581811115613d7857600080fd5b876020828501011115613d8a57600080fd5b6020928301989097509590910135949350505050565b803561ffff81168114613b9757600080fd5b600080600060608486031215613dc757600080fd5b613dd084613c22565b9250613dde60208501613b80565b9150613d1f60408501613da0565b600060208284031215613dfe57600080fd5b5035919050565b60008060408385031215613e1857600080fd5b613e2183613b80565b915060208301358015158114613e3657600080fd5b809150509250929050565b600060208284031215613e5357600080fd5b6122b882613b80565b634e487b7160e01b600052604160045260246000fd5b60a0810181811067ffffffffffffffff82111715613e9257613e92613e5c565b60405250565b601f19601f830116810181811067ffffffffffffffff82111715613ebe57613ebe613e5c565b6040525050565b600067ffffffffffffffff821115613edf57613edf613e5c565b5060051b60200190565b600082601f830112613efa57600080fd5b81356020613f0782613ec5565b604051613f148282613e98565b83815260059390931b8501820192828101915086841115613f3457600080fd5b8286015b84811015613f4f5780358352918301918301613f38565b509695505050505050565b600067ffffffffffffffff831115613f7457613f74613e5c565b604051613f8b6020601f19601f8701160182613e98565b809150838152848484011115613fa057600080fd5b83836020830137600060208583010152509392505050565b600082601f830112613fc957600080fd5b6122b883833560208501613f5a565b600080600080600060a08688031215613ff057600080fd5b613ff986613b80565b945061400760208701613b80565b9350604086013567ffffffffffffffff8082111561402457600080fd5b61403089838a01613ee9565b9450606088013591508082111561404657600080fd5b61405289838a01613ee9565b9350608088013591508082111561406857600080fd5b5061407588828901613fb8565b9150509295509295909350565b600082601f83011261409357600080fd5b813560206140a082613ec5565b6040516140ad8282613e98565b83815260059390931b85018201928281019150868411156140cd57600080fd5b8286015b84811015613f4f576140e281613b80565b83529183019183016140d1565b60006020828403121561410157600080fd5b813567ffffffffffffffff81111561411857600080fd5b61412484828501614082565b949350505050565b6000806040838503121561413f57600080fd5b823567ffffffffffffffff8082111561415757600080fd5b61416386838701614082565b9350602085013591508082111561417957600080fd5b5061418685828601613ee9565b9150509250929050565b600081518084526020808501945080840160005b838110156141c0578151875295820195908201906001016141a4565b509495945050505050565b6020815260006122b86020830184614190565b6000602082840312156141f057600080fd5b6122b882613da0565b6000806040838503121561420c57600080fd5b82359150613c6060208401613b80565b60006020828403121561422e57600080fd5b6122b882613c22565b60008060008060008061014080888a03121561425257600080fd5b873596506020614263818a01613c11565b965061427160408a01613da0565b955061427f60608a01613da0565b945061428d60808a01613c11565b93508960bf8a011261429e57600080fd5b6040516142aa81613e72565b91890191808b8411156142bc57600080fd5b60a08b015b848110156142df576142d281613c22565b82529083019083016142c1565b50508093505050509295509295509295565b60008060006060848603121561430657600080fd5b61430f84613c22565b9250613d1160208501613b80565b6000806040838503121561433057600080fd5b82359150613c6060208401613da0565b60006020828403121561435257600080fd5b813567ffffffffffffffff81111561436957600080fd5b8201601f8101841361437a57600080fd5b61412484823560208401613f5a565b6000806040838503121561439c57600080fd5b6143a583613b80565b9150613c6060208401613da0565b600080604083850312156143c657600080fd5b6143cf83613b80565b9150613c6060208401613b80565b600080600080600060a086880312156143f557600080fd5b6143fe86613b80565b945061440c60208701613b80565b93506040860135925060608601359150608086013567ffffffffffffffff81111561443657600080fd5b61407588828901613fb8565b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111561447557614475614442565b01949350505050565b6000821982111561449157614491614442565b500190565b60008160001904831182151516156144b0576144b0614442565b500290565b600063ffffffff80831681851680830382111561447557614475614442565b600060ff821660ff8114156144eb576144eb614442565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c9082168061454d57607f821691505b6020821081141561456e57634e487b7160e01b600052602260045260246000fd5b50919050565b60008261459157634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156145a8576145a8614442565b500390565b60006000198214156145c1576145c1614442565b5060010190565b6000816145d7576145d7614442565b506000190190565b600061ffff8216806145f3576145f3614442565b6000190192915050565b6040815260006146106040830185614190565b82810360208401526146228185614190565b95945050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261466360a0830184613c69565b979650505050505050565b60006020828403121561468057600080fd5b81516122b881613bc6565b600060033d11156146a45760046000803e5060005160e01c5b90565b600060443d10156146b55790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561470357505050505090565b828501915081518181111561471b5750505050505090565b843d87010160208285010111156147355750505050505090565b61474460208286010187613e98565b50909594505050505056fe68747470733a2f2f697066732e696f2f69706e732f6b326b34723870617030786b353235643875347069306e33706c6465666c7a75666a70316d676e3271753761396c6c6977333935787871632f636f6e7472616374555249a2646970667358221220f7ef7b8ea4d301341e3d54725b93f319aa9ed118e447295bd9c55ebeb11ab7ef64736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106102c55760003560e01c80636352211e116101775780639c561601116100d5578063e8a3d48511610084578063f242432a11610061578063f242432a14610b1a578063f2fde38b14610b3a578063f3aa1c1514610b5a57005b8063e8a3d48514610aa5578063e985e9c514610aba578063ea08c8c314610ada57005b8063d011645c116100b2578063d011645c1461099f578063d55f2d9d146109d1578063e68b0944146109f157005b80639c561601146108fe578063a22cb4651461093b578063a411104c1461095b57005b80638129fc1c116101315780638ddc39ab1161010e5780638ddc39ab1461087857806395d89b41146108985780639b642de1146108de57005b80638129fc1c146108255780638382dd8a1461083a5780638da5cb5b1461085a57005b80637bc908921161015f5780637bc90892146107d05780637eeeb173146107f057806380f860091461081057005b80636352211e14610783578063715018a6146107bb57005b806318160ddd1161022457806335bb3e16116101de5780635aadfc08116101bb5780635aadfc08146105dd5780635d85937514610724578063616cd9fa1461074457005b806335bb3e16146105705780633d20a231146105905780634e1273f4146105b057005b80632d3456701161020c5780632d345670146105105780632e1a7d4d146105305780632eb2c2d61461055057005b806318160ddd146104a75780632962299f146104f057005b8063093e88b3116102805780630e89341c1161025d5780630e89341c1461041357806312d9f50a1461043357806318054c371461048757005b8063093e88b3146103b357806309a3beef146103d357806309b60a27146103f357005b80630588b4af116102ae5780630588b4af1461033157806306fdde031461034457806308ad480b1461039357005b8062fdd58e146102ce57806301ffc9a71461030157005b366102cc57005b005b3480156102da57600080fd5b506102ee6102e9366004613b9c565b610b7a565b6040519081526020015b60405180910390f35b34801561030d57600080fd5b5061032161031c366004613bf4565b610bff565b60405190151581526020016102f8565b6102cc61033f366004613c36565b610ce4565b34801561035057600080fd5b5060408051808201909152601281527f4177616b656e65642d4d756c746970617373000000000000000000000000000060208201525b6040516102f89190613cb6565b34801561039f57600080fd5b506102cc6103ae366004613cc9565b61130a565b3480156103bf57600080fd5b506102cc6103ce366004613cec565b61147c565b3480156103df57600080fd5b506102cc6103ee366004613d28565b61156e565b3480156103ff57600080fd5b506102cc61040e366004613db2565b6115f7565b34801561041f57600080fd5b5061038661042e366004613dec565b611826565b34801561043f57600080fd5b5061047261044e366004613dec565b600090815260ca602052604090205468010000000000000000900463ffffffff1690565b60405163ffffffff90911681526020016102f8565b34801561049357600080fd5b506102cc6104a2366004613e05565b6118ba565b3480156104b357600080fd5b506000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75654640100000000900461ffff166102ee565b3480156104fc57600080fd5b506102cc61050b366004613cc9565b61195c565b34801561051c57600080fd5b506102cc61052b366004613e41565b611a01565b34801561053c57600080fd5b506102cc61054b366004613dec565b611a7c565b34801561055c57600080fd5b506102cc61056b366004613fd8565b611bfd565b34801561057c57600080fd5b506102cc61058b366004613e41565b611c9f565b34801561059c57600080fd5b506102cc6105ab3660046140ef565b611d1d565b3480156105bc57600080fd5b506105d06105cb36600461412c565b61214c565b6040516102f891906141cb565b3480156105e957600080fd5b506106b96105f83660046141de565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525061ffff908116600090815260ca6020908152604091829020825160c081018452905460ff8082168352610100820416928201929092526201000082049093169183019190915263ffffffff6401000000008204811660608401526801000000000000000082041660808301526001600160a01b036c010000000000000000000000009091041660a082015290565b6040516102f89190600060c08201905060ff835116825260ff602084015116602083015261ffff6040840151166040830152606083015163ffffffff808216606085015280608086015116608085015250506001600160a01b0360a08401511660a083015292915050565b34801561073057600080fd5b5061047261073f3660046141f9565b612264565b34801561075057600080fd5b5061032161075f36600461421c565b63ffffffff16600090815260ca602052604090205462010000900461ffff16151590565b34801561078f57600080fd5b506107a361079e366004613dec565b6122bf565b6040516001600160a01b0390911681526020016102f8565b3480156107c757600080fd5b506102cc612334565b3480156107dc57600080fd5b506102cc6107eb366004614237565b61239a565b3480156107fc57600080fd5b506102cc61080b3660046142f1565b612508565b34801561081c57600080fd5b506102cc612660565b34801561083157600080fd5b506102cc612728565b34801561084657600080fd5b506102cc61085536600461431d565b612804565b34801561086657600080fd5b506097546001600160a01b03166107a3565b34801561088457600080fd5b506102cc610893366004613cc9565b61289a565b3480156108a457600080fd5b5060408051808201909152600981527f4d756c74697061737300000000000000000000000000000000000000000000006020820152610386565b3480156108ea57600080fd5b506102cc6108f9366004614340565b61293f565b34801561090a57600080fd5b50610321610919366004613dec565b600090815260c960205260409020546601000000000000900461ffff16151590565b34801561094757600080fd5b506102cc610956366004613e05565b612992565b34801561096757600080fd5b50610321610976366004613b9c565b60009081526065602090815260408083206001600160a01b039490941683529290522054151590565b3480156109ab57600080fd5b506109bf6109ba366004613dec565b612a57565b60405160ff90911681526020016102f8565b3480156109dd57600080fd5b506102cc6109ec366004614389565b612bc4565b3480156109fd57600080fd5b50610a63610a0c366004613dec565b60c96020526000908152604090205460ff8082169161010081049091169061ffff620100008204811691640100000000810482169166010000000000008204169063ffffffff680100000000000000009091041686565b6040805160ff978816815296909516602087015261ffff93841694860194909452908216606085015216608083015263ffffffff1660a082015260c0016102f8565b348015610ab157600080fd5b50610386612c9f565b348015610ac657600080fd5b50610321610ad53660046143b3565b612cbf565b348015610ae657600080fd5b50610321610af536600461421c565b63ffffffff908116600090815260ca6020526040902054640100000000900416151590565b348015610b2657600080fd5b506102cc610b353660046143dd565b612d0f565b348015610b4657600080fd5b506102cc610b55366004613e41565b612daa565b348015610b6657600080fd5b506102cc610b7536600461431d565b612e16565b60006001600160a01b038316610bd75760405162461bcd60e51b815260206004820152600360248201527f453234000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b5060009081526065602090815260408083206001600160a01b03949094168352929052205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a26000000000000000000000000000000000000000000000000000000001480610c9257507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b80610cde57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600080805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be756548390610100900460ff16610d665760405162461bcd60e51b815260206004820152600360248201527f45313100000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600082815260c9602052604090205460ff9081169082161115610dcb5760405162461bcd60e51b815260206004820152600360248201527f45313200000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600082815260c9602052604090205461ffff66010000000000008204811691610e019160ff851691640100000000900416614458565b61ffff161115610e535760405162461bcd60e51b815260206004820152600360248201527f45313300000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600080805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565484908690610100900460ff1660021415610f7c57610e9d8333612e8d565b63ffffffff168263ffffffff1614610ef75760405162461bcd60e51b815260206004820152600360248201527f45313500000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600083815260c9602090815260408083205463ffffffff8616845260cb9092529091205460ff91821691610f2e919084169061447e565b1115610f7c5760405162461bcd60e51b815260206004820152600360248201527f45313600000000000000000000000000000000000000000000000000000000006044820152606401610bce565b3380610fca5760405162461bcd60e51b815260206004820152600360248201527f45323100000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565461100d9060ff8a169062010000900461ffff16614496565b61101e9066038d7ea4c68000614496565b34101561106d5760405162461bcd60e51b815260206004820152600960248201527f4c6f7720507269636500000000000000000000000000000000000000000000006044820152606401610bce565b600080805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565468010000000000000000900463ffffffff16905b8960ff168160ff16101561120a5763ffffffff821660009081526065602090815260408083206001600160a01b038716845290915281208054600192906110f590849061447e565b909155505063ffffffff828116600081815260ca60209081526040808320805467ffffffffffffffff166801000000000000000042909716969096026bffffffffffffffffffffffff16959095176c010000000000000000000000006001600160a01b038a16908102919091179095558051938452600191840191909152909183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516001600160a01b038516815242602082015263ffffffff8416917f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f6910160405180910390a26111f66001836144b5565b915080611202816144d4565b9150506110ad565b506000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75654610100900460ff16600214156112745763ffffffff8816600090815260cb60205260408120805460ff8c16929061126e90849061447e565b90915550505b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75680546bffffffff000000000000000019166801000000000000000063ffffffff8416021780825560ff8b1691906004906112e5908490640100000000900461ffff16614458565b92506101000a81548161ffff021916908361ffff160217905550505050505050505050565b33600090815260cc602052604090205460ff1615156001146113545760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600082815260ca60205260409020546c0100000000000000000000000090046001600160a01b03166113c85760405162461bcd60e51b815260206004820152600360248201527f45313900000000000000000000000000000000000000000000000000000000006044820152606401610bce565b60058160ff161061141b5760405162461bcd60e51b815260206004820152600b60248201527f57726f6e67204c6576656c0000000000000000000000000000000000000000006044820152606401610bce565b600082815260ca6020908152604091829020805460ff191660ff85169081179091558251908152429181019190915283917fbcadeb61c19f3fa40746aa687138573e0a5ca660a54431ae90de81f4a1e62ea191015b60405180910390a25050565b33600090815260cc602052604090205460ff1615156001146114c65760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b60058260ff16106115195760405162461bcd60e51b815260206004820152600360248201527f45313700000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600083815260c960205260409020819060010160ff841660058110611540576115406144f4565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550505050565b33600090815260cc602052604090205460ff1615156001146115b85760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b84846040516115ea92919061450a565b60405180910390a2505050565b63ffffffff8316600090815260ca602052604090205462010000900461ffff16156116645760405162461bcd60e51b815260206004820152601b60248201527f5468697320546f6b656e20686173206170706c696564206765617200000000006044820152606401610bce565b60016116758463ffffffff16612a57565b60ff16116116eb5760405162461bcd60e51b815260206004820152602260248201527f52657175697265206174206c65617374206c6576656c2032206d756c7469706160448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610bce565b6116f58233612cbf565b6117415760405162461bcd60e51b815260206004820152600c60248201527f4163636573733a2044656e7900000000000000000000000000000000000000006044820152606401610bce565b63ffffffff831660009081526065602090815260408083206001600160a01b03861684529091529020546117b75760405162461bcd60e51b815260206004820152601d60248201527f486f6c6465723a646964206e6f74206f776e207468697320746f6b656e0000006044820152606401610bce565b63ffffffff8316600081815260ca6020908152604091829020805463ffff000019166201000061ffff87169081029190911790915582516001600160a01b0387168152918201527f496528518bcc717be334d30fdc9269aeae3d48b548e4033b7c1858575e3d767891016115ea565b60606067805461183590614539565b80601f016020809104026020016040519081016040528092919081815260200182805461186190614539565b80156118ae5780601f10611883576101008083540402835291602001916118ae565b820191906000526020600020905b81548152906001019060200180831161189157829003601f168201915b50505050509050919050565b33600090815260cc602052604090205460ff1615156001146119045760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b6001600160a01b038216600081815260fc6020908152604091829020805460ff191685151590811790915591519182527f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9101611470565b33600090815260cc602052604090205460ff1615156001146119a65760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600082815260c96020908152604091829020805460ff191660ff85169081179091558251858152918201527fcda974a65050e23d556b175f6366740ba820c4da89b84b7180718b8e072c487f91015b60405180910390a15050565b6097546001600160a01b03163314611a5b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b6001600160a01b0316600090815260cc60205260409020805460ff19169055565b6097546001600160a01b03163314611ad65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b8015611ae25780611ae4565b475b905047811115611b365760405162461bcd60e51b815260206004820152600360248201527f45313000000000000000000000000000000000000000000000000000000000006044820152606401610bce565b60006064611b45836002614496565b611b4f9190614574565b604051909150732130c75cac9e1ef6381c6f354331b3049221391c9082156108fc029083906000818181858888f19350505050158015611b93573d6000803e3d6000fd5b50336108fc611ba28385614596565b6040518115909202916000818181858888f19350505050158015611bca573d6000803e3d6000fd5b5060405182815233907fccbd99ba6da8f29b2a4f65e474e3c3973564d356c162c08d45f3dc7f0cb5b3aa90602001611470565b6001600160a01b038516331480611c195750611c198533612cbf565b611c8b5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610bce565b611c988585858585612efd565b5050505050565b6097546001600160a01b03163314611cf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b6001600160a01b0316600090815260cc60205260409020805460ff19166001179055565b33600090815260cc602052604090205460ff161515600114611d675760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b805161010061ffff821610611dbe5760405162461bcd60e51b815260206004820152600360248201527f45323200000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565461ffff66010000000000008204811691611e0d918491640100000000900416614458565b61ffff161115611e5f5760405162461bcd60e51b815260206004820152600360248201527f45323300000000000000000000000000000000000000000000000000000000006044820152606401610bce565b600080805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7565468010000000000000000900463ffffffff16905b8261ffff168110156120be576001606560008463ffffffff1681526020019081526020016000206000868481518110611eda57611eda6144f4565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f11919061447e565b909155505063ffffffff808316600090815260ca602052604090208054429290921668010000000000000000026bffffffff0000000000000000199092169190911790558351849082908110611f6957611f696144f4565b602002602001015160ca60008463ffffffff168152602001908152602001600020600001600c6101000a8154816001600160a01b0302191690836001600160a01b03160217905550838181518110611fc357611fc36144f4565b60200260200101516001600160a01b031660006001600160a01b0316611fe63390565b6040805163ffffffff87168152600160208201526001600160a01b0392909216917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a48163ffffffff167f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f685838151811061206c5761206c6144f4565b6020026020010151426040516120979291906001600160a01b03929092168252602082015260400190565b60405180910390a26120aa6001836144b5565b9150806120b6816145ad565b915050611e9f565b506000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75680546bffffffff000000000000000019166801000000000000000063ffffffff8416021780825583919060049061212d908490640100000000900461ffff16614458565b92506101000a81548161ffff021916908361ffff160217905550505050565b6060815183511461219f5760405162461bcd60e51b815260206004820152600360248201527f45323500000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6000835167ffffffffffffffff8111156121bb576121bb613e5c565b6040519080825280602002602001820160405280156121e4578160200160208202803683370190505b50905060005b845181101561225c5761222f858281518110612208576122086144f4565b6020026020010151858381518110612222576122226144f4565b6020026020010151610b7a565b828281518110612241576122416144f4565b6020908102919091010152612255816145ad565b90506121ea565b509392505050565b33600090815260cc602052604081205460ff1615156001146122ae5760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b6122b88383612e8d565b9392505050565b600081815260ca60205260408120546c0100000000000000000000000090046001600160a01b031680610cde5760405162461bcd60e51b815260206004820152600360248201527f45313800000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6097546001600160a01b0316331461238e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b612398600061311e565b565b33600090815260cc602052604090205460ff1615156001146123e45760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600086815260c960205260408120805460ff85811660ff1961ffff8981166201000002919091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff00938c166101000261ff0019928c16660100000000000002929092167fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff909516949094171791909116919091171790555b60058110156124ff57818160058110612497576124976144f4565b602002015160c9600089815260200190815260200160002060010182600581106124c3576124c36144f4565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555080806124f7906145ad565b91505061247c565b50505050505050565b6125128233612cbf565b61255e5760405162461bcd60e51b815260206004820152600c60248201527f4163636573733a2044656e7900000000000000000000000000000000000000006044820152606401610bce565b63ffffffff831660009081526065602090815260408083206001600160a01b03861684529091529020546125d45760405162461bcd60e51b815260206004820152601d60248201527f486f6c6465723a646964206e6f74206f776e207468697320746f6b656e0000006044820152606401610bce565b63ffffffff838116600081815260ca602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff1664010000000095871695860217905581516001600160a01b03871681529081019390935290917fcacee5b5ccaea41b261740ac4a545269764f79538956443bf5fcbfa970a7b3e691016115ea565b600054610100900460ff1661267b5760005460ff161561267f565b303b155b6126f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff16158015612713576000805461ffff19166101011790555b8015612725576000805461ff00191690555b50565b600054610100900460ff166127435760005460ff1615612747565b303b155b6127b95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff161580156127db576000805461ffff19166101011790555b6127e3613188565b6127fb60405180602001604052806000815250613215565b61271333611c9f565b33600090815260cc602052604090205460ff16151560011461284e5760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600091825260c96020526040909120805461ffff9092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055565b33600090815260cc602052604090205460ff1615156001146128e45760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600082815260c96020908152604091829020805461ff00191661010060ff8616908102919091179091558251858152918201527fe5fa1896e34b062b67e24ceac48c49829a796242457b2e068e91d815a801365891016119f5565b33600090815260cc602052604090205460ff1615156001146129895760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b612725816132f7565b336001600160a01b03831614156129eb5760405162461bcd60e51b815260206004820152600360248201527f45323600000000000000000000000000000000000000000000000000000000006044820152606401610bce565b3360008181526066602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600081815260ca602052604081205468010000000000000000900463ffffffff16612ac45760405162461bcd60e51b815260206004820152601160248201527f546f656b656e206e6f74206578697374730000000000000000000000000000006044820152606401610bce565b600082815260ca602052604090205460ff1615612af15750600090815260ca602052604090205460ff1690565b600082815260ca6020526040812054612b1c9068010000000000000000900463ffffffff1642614596565b600080805260c960205290915080612b3660016005614596565b90505b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7578160058110612b7457612b746144f4565b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1662015180612ba49190614496565b8310612bb25780915061225c565b80612bbc816145c8565b915050612b39565b6001600160a01b038216331480612be05750612be08233612cbf565b612c2c5760405162461bcd60e51b815260206004820152601260248201527f455243313135353a204e6f2041636365737300000000000000000000000000006044820152606401610bce565b612c3c828261ffff16600161330a565b6000805260c96020527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be7568054640100000000900461ffff16906004612c80836145df565b91906101000a81548161ffff021916908361ffff160217905550505050565b606060405180608001604052806059815260200161475060599139905090565b6001600160a01b038116600090815260fc602052604081205460ff16806122b857506001600160a01b0380841660009081526066602090815260408083209386168352929052205460ff166122b8565b6001600160a01b038516331480612d2b5750612d2b8533612cbf565b612d9d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610bce565b611c988585858585613470565b6097546001600160a01b03163314612e045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b612e0d816135f1565b61272581611c9f565b33600090815260cc602052604090205460ff161515600114612e605760405162461bcd60e51b8152602060048201526003602482015262114c4d60ea1b6044820152606401610bce565b600091825260c96020526040909120805461ffff909216620100000263ffff000019909216919091179055565b60006001600160a01b038216806bffffffffffffffffffffffff604085901c168362ffffff80881690612ec2908816846144b5565b612ecc91906144b5565b83189050633c34eb138163ffffffff161015612ef357612ef081633c34eb136144b5565b90505b9695505050505050565b8151835114612f4e5760405162461bcd60e51b815260206004820152600360248201527f45323800000000000000000000000000000000000000000000000000000000006044820152606401610bce565b6001600160a01b038416612fa45760405162461bcd60e51b815260206004820152600360248201527f45323900000000000000000000000000000000000000000000000000000000006044820152606401610bce565b3360005b84518110156130be576000858281518110612fc557612fc56144f4565b602002602001015190506000858381518110612fe357612fe36144f4565b60209081029190910181015160008481526065835260408082206001600160a01b038e1683529093529190912054909150818110156130645760405162461bcd60e51b815260206004820152600360248201527f45333100000000000000000000000000000000000000000000000000000000006044820152606401610bce565b60008381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906130a390849061447e565b92505081905550505050806130b7906145ad565b9050612fa8565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161310e9291906145fd565b60405180910390a4505050505050565b609780546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166132055760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bce565b61320d6136d8565b612398613755565b600054610100900460ff166132305760005460ff1615613234565b303b155b6132a65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff161580156132c8576000805461ffff19166101011790555b6132d06136d8565b6132d86136d8565b6132e1826137db565b80156132f3576000805461ff00191690555b5050565b80516132f3906067906020840190613ae7565b6001600160a01b0383166133605760405162461bcd60e51b815260206004820152601560248201527f4275726e3a20496c6c6567616c204164647265737300000000000000000000006044820152606401610bce565b336133908185600061337187613897565b61337a87613897565b5050604080516020810190915260009052505050565b60008381526065602090815260408083206001600160a01b0388168452909152902054828110156134035760405162461bcd60e51b815260206004820152601160248201527f4275726e3a204e6f6e6520746f6b656e730000000000000000000000000000006044820152606401610bce565b60008481526065602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b0384166134c65760405162461bcd60e51b815260206004820152600360248201527f45333000000000000000000000000000000000000000000000000000000000006044820152606401610bce565b336134df8187876134d688613897565b611c9888613897565b60008481526065602090815260408083206001600160a01b038a168452909152902054838110156135525760405162461bcd60e51b815260206004820152600360248201527f45323700000000000000000000000000000000000000000000000000000000006044820152606401610bce565b60008581526065602090815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061359190849061447e565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46124ff8288888888886138e2565b6097546001600160a01b0316331461364b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bce565b6001600160a01b0381166136c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bce565b6127258161311e565b505050505050565b600054610100900460ff166123985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff166137d25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bce565b6123983361311e565b600054610100900460ff166137f65760005460ff16156137fa565b303b155b61386c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bce565b600054610100900460ff1615801561388e576000805461ffff19166101011790555b6132e1826132f7565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106138d1576138d16144f4565b602090810291909101015292915050565b6001600160a01b0384163b156136d0576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e619061393f908990899088908890889060040161462b565b6020604051808303816000875af192505050801561397a575060408051601f3d908101601f191682019092526139779181019061466e565b60015b613a305761398661468b565b806308c379a014156139c0575061399b6146a7565b806139a657506139c2565b8060405162461bcd60e51b8152600401610bce9190613cb6565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610bce565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146124ff5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610bce565b828054613af390614539565b90600052602060002090601f016020900481019282613b155760008555613b5b565b82601f10613b2e57805160ff1916838001178555613b5b565b82800160010185558215613b5b579182015b82811115613b5b578251825591602001919060010190613b40565b50613b67929150613b6b565b5090565b5b80821115613b675760008155600101613b6c565b80356001600160a01b0381168114613b9757600080fd5b919050565b60008060408385031215613baf57600080fd5b613bb883613b80565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461272557600080fd5b600060208284031215613c0657600080fd5b81356122b881613bc6565b803560ff81168114613b9757600080fd5b803563ffffffff81168114613b9757600080fd5b60008060408385031215613c4957600080fd5b613c5283613c11565b9150613c6060208401613c22565b90509250929050565b6000815180845260005b81811015613c8f57602081850181015186830182015201613c73565b81811115613ca1576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006122b86020830184613c69565b60008060408385031215613cdc57600080fd5b82359150613c6060208401613c11565b600080600060608486031215613d0157600080fd5b83359250613d1160208501613c11565b9150613d1f60408501613c22565b90509250925092565b600080600060408486031215613d3d57600080fd5b833567ffffffffffffffff80821115613d5557600080fd5b818601915086601f830112613d6957600080fd5b813581811115613d7857600080fd5b876020828501011115613d8a57600080fd5b6020928301989097509590910135949350505050565b803561ffff81168114613b9757600080fd5b600080600060608486031215613dc757600080fd5b613dd084613c22565b9250613dde60208501613b80565b9150613d1f60408501613da0565b600060208284031215613dfe57600080fd5b5035919050565b60008060408385031215613e1857600080fd5b613e2183613b80565b915060208301358015158114613e3657600080fd5b809150509250929050565b600060208284031215613e5357600080fd5b6122b882613b80565b634e487b7160e01b600052604160045260246000fd5b60a0810181811067ffffffffffffffff82111715613e9257613e92613e5c565b60405250565b601f19601f830116810181811067ffffffffffffffff82111715613ebe57613ebe613e5c565b6040525050565b600067ffffffffffffffff821115613edf57613edf613e5c565b5060051b60200190565b600082601f830112613efa57600080fd5b81356020613f0782613ec5565b604051613f148282613e98565b83815260059390931b8501820192828101915086841115613f3457600080fd5b8286015b84811015613f4f5780358352918301918301613f38565b509695505050505050565b600067ffffffffffffffff831115613f7457613f74613e5c565b604051613f8b6020601f19601f8701160182613e98565b809150838152848484011115613fa057600080fd5b83836020830137600060208583010152509392505050565b600082601f830112613fc957600080fd5b6122b883833560208501613f5a565b600080600080600060a08688031215613ff057600080fd5b613ff986613b80565b945061400760208701613b80565b9350604086013567ffffffffffffffff8082111561402457600080fd5b61403089838a01613ee9565b9450606088013591508082111561404657600080fd5b61405289838a01613ee9565b9350608088013591508082111561406857600080fd5b5061407588828901613fb8565b9150509295509295909350565b600082601f83011261409357600080fd5b813560206140a082613ec5565b6040516140ad8282613e98565b83815260059390931b85018201928281019150868411156140cd57600080fd5b8286015b84811015613f4f576140e281613b80565b83529183019183016140d1565b60006020828403121561410157600080fd5b813567ffffffffffffffff81111561411857600080fd5b61412484828501614082565b949350505050565b6000806040838503121561413f57600080fd5b823567ffffffffffffffff8082111561415757600080fd5b61416386838701614082565b9350602085013591508082111561417957600080fd5b5061418685828601613ee9565b9150509250929050565b600081518084526020808501945080840160005b838110156141c0578151875295820195908201906001016141a4565b509495945050505050565b6020815260006122b86020830184614190565b6000602082840312156141f057600080fd5b6122b882613da0565b6000806040838503121561420c57600080fd5b82359150613c6060208401613b80565b60006020828403121561422e57600080fd5b6122b882613c22565b60008060008060008061014080888a03121561425257600080fd5b873596506020614263818a01613c11565b965061427160408a01613da0565b955061427f60608a01613da0565b945061428d60808a01613c11565b93508960bf8a011261429e57600080fd5b6040516142aa81613e72565b91890191808b8411156142bc57600080fd5b60a08b015b848110156142df576142d281613c22565b82529083019083016142c1565b50508093505050509295509295509295565b60008060006060848603121561430657600080fd5b61430f84613c22565b9250613d1160208501613b80565b6000806040838503121561433057600080fd5b82359150613c6060208401613da0565b60006020828403121561435257600080fd5b813567ffffffffffffffff81111561436957600080fd5b8201601f8101841361437a57600080fd5b61412484823560208401613f5a565b6000806040838503121561439c57600080fd5b6143a583613b80565b9150613c6060208401613da0565b600080604083850312156143c657600080fd5b6143cf83613b80565b9150613c6060208401613b80565b600080600080600060a086880312156143f557600080fd5b6143fe86613b80565b945061440c60208701613b80565b93506040860135925060608601359150608086013567ffffffffffffffff81111561443657600080fd5b61407588828901613fb8565b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111561447557614475614442565b01949350505050565b6000821982111561449157614491614442565b500190565b60008160001904831182151516156144b0576144b0614442565b500290565b600063ffffffff80831681851680830382111561447557614475614442565b600060ff821660ff8114156144eb576144eb614442565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c9082168061454d57607f821691505b6020821081141561456e57634e487b7160e01b600052602260045260246000fd5b50919050565b60008261459157634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156145a8576145a8614442565b500390565b60006000198214156145c1576145c1614442565b5060010190565b6000816145d7576145d7614442565b506000190190565b600061ffff8216806145f3576145f3614442565b6000190192915050565b6040815260006146106040830185614190565b82810360208401526146228185614190565b95945050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261466360a0830184613c69565b979650505050505050565b60006020828403121561468057600080fd5b81516122b881613bc6565b600060033d11156146a45760046000803e5060005160e01c5b90565b600060443d10156146b55790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561470357505050505090565b828501915081518181111561471b5750505050505090565b843d87010160208285010111156147355750505050505090565b61474460208286010187613e98565b50909594505050505056fe68747470733a2f2f697066732e696f2f69706e732f6b326b34723870617030786b353235643875347069306e33706c6465666c7a75666a70316d676e3271753761396c6c6977333935787871632f636f6e7472616374555249a2646970667358221220f7ef7b8ea4d301341e3d54725b93f319aa9ed118e447295bd9c55ebeb11ab7ef64736f6c634300080b0033
Deployed Bytecode Sourcemap
49278:969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26472:191;;;;;;;;;;-1:-1:-1;26472:191:0;;;;;:::i;:::-;;:::i;:::-;;;620:25:1;;;608:2;593:18;26472:191:0;;;;;;;;25451:354;;;;;;;;;;-1:-1:-1;25451:354:0;;;;;:::i;:::-;;:::i;:::-;;;1253:14:1;;1246:22;1228:41;;1216:2;1201:18;25451:354:0;1088:187:1;43878:1328:0;;;;;;:::i;:::-;;:::i;46744:103::-;;;;;;;;;;-1:-1:-1;46812:27:0;;;;;;;;;;;;;;;;;46744:103;;;;;;;:::i;42692:282::-;;;;;;;;;;-1:-1:-1;42692:282:0;;;;;:::i;:::-;;:::i;41866:219::-;;;;;;;;;;-1:-1:-1;41866:219:0;;;;;:::i;:::-;;:::i;39084:121::-;;;;;;;;;;-1:-1:-1;39084:121:0;;;;;:::i;:::-;;:::i;49393:527::-;;;;;;;;;;-1:-1:-1;49393:527:0;;;;;:::i;:::-;;:::i;26216:105::-;;;;;;;;;;-1:-1:-1;26216:105:0;;;;;:::i;:::-;;:::i;42525:128::-;;;;;;;;;;-1:-1:-1;42525:128:0;;;;;:::i;:::-;42583:6;42614:13;;;:9;:13;;;;;:31;;;;;;;42525:128;;;;4740:10:1;4728:23;;;4710:42;;4698:2;4683:18;42525:128:0;4566:192:1;47078:194:0;;;;;;;;;;-1:-1:-1;47078:194:0;;;;;:::i;:::-;;:::i;46963:104::-;;;;;;;;;;-1:-1:-1;47006:4:0;47035:12;;:9;:12;;;:24;;;;;;46963:104;;41505:256;;;;;;;;;;-1:-1:-1;41505:256:0;;;;;:::i;:::-;;:::i;37570:98::-;;;;;;;;;;-1:-1:-1;37570:98:0;;;;;:::i;:::-;;:::i;36607:423::-;;;;;;;;;;-1:-1:-1;36607:423:0;;;;;:::i;:::-;;:::i;28451:442::-;;;;;;;;;;-1:-1:-1;28451:442:0;;;;;:::i;:::-;;:::i;37426:96::-;;;;;;;;;;-1:-1:-1;37426:96:0;;;;;:::i;:::-;;:::i;45214:1128::-;;;;;;;;;;-1:-1:-1;45214:1128:0;;;;;:::i;:::-;;:::i;26829:486::-;;;;;;;;;;-1:-1:-1;26829:486:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47466:114::-;;;;;;;;;;-1:-1:-1;47466:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47559:13:0;;;;;;;;:9;:13;;;;;;;;;47552:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47552:20:0;;;;;;;;;;47466:114;;;;;;;11392:4:1;11434:3;11423:9;11419:19;11411:27;;11484:4;11475:6;11469:13;11465:24;11454:9;11447:43;11558:4;11550;11542:6;11538:17;11532:24;11528:35;11521:4;11510:9;11506:20;11499:65;11632:6;11624:4;11616:6;11612:17;11606:24;11602:37;11595:4;11584:9;11580:20;11573:67;11687:4;11679:6;11675:17;11669:24;11712:10;11778:2;11764:12;11760:21;11753:4;11742:9;11738:20;11731:51;11850:2;11842:4;11834:6;11830:17;11824:24;11820:33;11813:4;11802:9;11798:20;11791:63;;;-1:-1:-1;;;;;11914:4:1;11906:6;11902:17;11896:24;11892:73;11885:4;11874:9;11870:20;11863:103;11242:730;;;;;38481:164:0;;;;;;;;;;-1:-1:-1;38481:164:0;;;;;:::i;:::-;;:::i;49928:132::-;;;;;;;;;;-1:-1:-1;49928:132:0;;;;;:::i;:::-;50019:22;;49990:4;50019:22;;;:9;:22;;;;;:29;;;;;;:33;;;49928:132;42295:196;;;;;;;;;;-1:-1:-1;42295:196:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;12589:55:1;;;12571:74;;12559:2;12544:18;42295:196:0;12425:226:1;23271:103:0;;;;;;;;;;;;;:::i;39936:668::-;;;;;;;;;;-1:-1:-1;39936:668:0;;;;;:::i;:::-;;:::i;48523:360::-;;;;;;;;;;-1:-1:-1;48523:360:0;;;;;:::i;:::-;;:::i;46681:55::-;;;;;;;;;;;;;:::i;36280:185::-;;;;;;;;;;;;;:::i;41201:147::-;;;;;;;;;;-1:-1:-1;41201:147:0;;;;;:::i;:::-;;:::i;22620:87::-;;;;;;;;;;-1:-1:-1;22693:6:0;;-1:-1:-1;;;;;22693:6:0;22620:87;;40745:199;;;;;;;;;;-1:-1:-1;40745:199:0;;;;;:::i;:::-;;:::i;46855:96::-;;;;;;;;;;-1:-1:-1;46925:18:0;;;;;;;;;;;;;;;;;46855:96;;39213:104;;;;;;;;;;-1:-1:-1;39213:104:0;;;;;:::i;:::-;;:::i;42093:140::-;;;;;;;;;;-1:-1:-1;42093:140:0;;;;;:::i;:::-;42158:4;42187:24;;;:9;:24;;;;;:34;;;;;;:38;;;42093:140;27388:273;;;;;;;;;;-1:-1:-1;27388:273:0;;;;;:::i;:::-;;:::i;47280:178::-;;;;;;;;;;-1:-1:-1;47280:178:0;;;;;:::i;:::-;47346:4;47393:14;;;:9;:14;;;;;;;;-1:-1:-1;;;;;47393:21:0;;;;;;;;;;;47432:18;;;47280:178;43013:780;;;;;;;;;;-1:-1:-1;43013:780:0;;;;;:::i;:::-;;:::i;:::-;;;14905:4:1;14893:17;;;14875:36;;14863:2;14848:18;43013:780:0;14733:184:1;48238:277:0;;;;;;;;;;-1:-1:-1;48238:277:0;;;;;:::i;:::-;;:::i;35921:45::-;;;;;;;;;;-1:-1:-1;35921:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15486:4:1;15474:17;;;15456:36;;15528:17;;;;15523:2;15508:18;;15501:45;15565:6;15607:15;;;15587:18;;;15580:43;;;;15659:15;;;15654:2;15639:18;;15632:43;15712:15;15706:3;15691:19;;15684:44;15777:10;15765:23;15759:3;15744:19;;15737:52;15443:3;15428:19;35921:45:0;15185:610:1;50068:176:0;;;;;;;;;;;;;:::i;49033:203::-;;;;;;;;;;-1:-1:-1;49033:203:0;;;;;:::i;:::-;;:::i;48891:134::-;;;;;;;;;;-1:-1:-1;48891:134:0;;;;;:::i;:::-;48983:22;;;;48954:4;48983:22;;;:9;:22;;;;;:30;;;;;:34;;;48891:134;27973:401;;;;;;;;;;-1:-1:-1;27973:401:0;;;;;:::i;:::-;;:::i;37676:162::-;;;;;;;;;;-1:-1:-1;37676:162:0;;;;;:::i;:::-;;:::i;41007:158::-;;;;;;;;;;-1:-1:-1;41007:158:0;;;;;:::i;:::-;;:::i;26472:191::-;26558:7;-1:-1:-1;;;;;26586:21:0;;26578:37;;;;-1:-1:-1;;;26578:37:0;;16878:2:1;26578:37:0;;;16860:21:1;16917:1;16897:18;;;16890:29;16955:5;16935:18;;;16928:33;16978:18;;26578:37:0;;;;;;;;;-1:-1:-1;26633:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;26633:22:0;;;;;;;;;;;;26472:191::o;25451:354::-;25575:4;25612:52;;;25627:37;25612:52;;:132;;-1:-1:-1;25681:63:0;;;25696:48;25681:63;25612:132;:185;;;-1:-1:-1;20064:36:0;20049:51;;;;25761:36;25592:205;25451:354;-1:-1:-1;;25451:354:0:o;43878:1328::-;43960:1;37115:24;;;:9;:24;;;:36;43963:6;;37115:36;;;;;37107:56;;;;-1:-1:-1;;;37107:56:0;;17209:2:1;37107:56:0;;;17191:21:1;17248:1;17228:18;;;17221:29;17286:5;17266:18;;;17259:33;17309:18;;37107:56:0;17007:326:1;37107:56:0;37194:24;;;;:9;:24;;;;;:42;;;;;37182:54;;;;;37174:70;;;;-1:-1:-1;;;37174:70:0;;17540:2:1;37174:70:0;;;17522:21:1;17579:1;17559:18;;;17552:29;17617:5;17597:18;;;17590:33;17640:18;;37174:70:0;17338:326:1;37174:70:0;37315:24;;;;:9;:24;;;;;:34;;;;;;;;37264:47;;;;;;:36;;;;:47;:::i;:::-;:85;;;;37255:102;;;;-1:-1:-1;;;37255:102:0;;18289:2:1;37255:102:0;;;18271:21:1;18328:1;18308:18;;;18301:29;18366:5;18346:18;;;18339:33;18389:18;;37255:102:0;18087:326:1;37255:102:0;43987:1:::1;38757:24:::0;;;:9:::1;:24;::::0;;:36;43990:14;;44006:6;;38757:36:::1;::::0;::::1;;;38797:1;38757:41;38753:279;;;38851:40;38863:13:::0;21140:10;38851:11:::1;:40::i;:::-;38832:59;;:15;:59;;;38824:75;;;::::0;-1:-1:-1;;;38824:75:0;;18620:2:1;38824:75:0::1;::::0;::::1;18602:21:1::0;18659:1;18639:18;;;18632:29;18697:5;18677:18;;;18670:33;18720:18;;38824:75:0::1;18418:326:1::0;38824:75:0::1;38970:24;::::0;;;:9:::1;:24;::::0;;;;;;;:42;38922:34:::1;::::0;::::1;::::0;;:17:::1;:34:::0;;;;;;;38970:42:::1;::::0;;::::1;::::0;38922:44:::1;::::0;;;::::1;::::0;::::1;:::i;:::-;:90;;38914:106;;;::::0;-1:-1:-1;;;38914:106:0;;19084:2:1;38914:106:0::1;::::0;::::1;19066:21:1::0;19123:1;19103:18;;;19096:29;19161:5;19141:18;;;19134:33;19184:18;;38914:106:0::1;18882:326:1::0;38914:106:0::1;21140:10:::0;;44076:37:::2;;;::::0;-1:-1:-1;;;44076:37:0;;19415:2:1;44076:37:0::2;::::0;::::2;19397:21:1::0;19454:1;19434:18;;;19427:29;19492:5;19472:18;;;19465:33;19515:18;;44076:37:0::2;19213:326:1::0;44076:37:0::2;44150:12;::::0;;:9:::2;:12;::::0;;:20;44145:35:::2;::::0;::::2;::::0;::::2;::::0;44150:20;;::::2;;;44145:35;:::i;:::-;:46;::::0;44183:8:::2;44145:46;:::i;:::-;44132:9;:59;;44124:81;;;::::0;-1:-1:-1;;;44124:81:0;;19979:2:1;44124:81:0::2;::::0;::::2;19961:21:1::0;20018:1;19998:18;;;19991:29;20056:11;20036:18;;;20029:39;20085:18;;44124:81:0::2;19777:332:1::0;44124:81:0::2;44226:23;44252:12:::0;;;:9:::2;:12;::::0;;:28;;;::::2;;;::::0;44413:465:::2;44435:6;44431:10;;:1;:10;;;44413:465;;;44472:27;::::0;::::2;;::::0;;;:9:::2;:27;::::0;;;;;;;-1:-1:-1;;;;;44472:36:0;::::2;::::0;;;;;;;:41;;44512:1:::2;::::0;44472:27;:41:::2;::::0;44512:1;;44472:41:::2;:::i;:::-;::::0;;;-1:-1:-1;;44528:27:0::2;::::0;;::::2;;::::0;;;:9:::2;:27;::::0;;;;;;;:71;;44614:49;;44528:71;44583:15:::2;44528:71:::0;;::::2;::::0;;;::::2;44614:49:::0;;;;;;;-1:-1:-1;;;;;44614:49:0;::::2;::::0;;::::2;::::0;;;::::2;::::0;;;44697:65;;20295:42:1;;;-1:-1:-1;20353:18:1;;;20346:34;;;;44528:27:0;;44614:49;;44697:65:::2;::::0;20268:18:1;44697:65:0::2;;;;;;;44782:48;::::0;;-1:-1:-1;;;;;20583:55:1;;20565:74;;44814:15:0::2;20670:2:1::0;20655:18;;20648:34;44782:48:0::2;::::0;::::2;::::0;::::2;::::0;20538:18:1;44782:48:0::2;;;;;;;44845:21;44865:1;44845:21:::0;::::2;:::i;:::-;::::0;-1:-1:-1;44443:3:0;::::2;::::0;::::2;:::i;:::-;;;;44413:465;;;-1:-1:-1::0;44892:12:0::2;::::0;;:9:::2;:12;::::0;;:24;::::2;::::0;::::2;;;44920:1;44892:29;44888:114;;;44947:33;::::0;::::2;;::::0;;;:17:::2;:33;::::0;;;;:43;;::::2;::::0;::::2;::::0;:33;:43:::2;::::0;;;::::2;:::i;:::-;::::0;;;-1:-1:-1;;44888:114:0::2;45012:12;::::0;;:9:::2;:12;::::0;;:47;;-1:-1:-1;;45012:47:0::2;::::0;::::2;::::0;::::2;;;::::0;;;45070:34:::2;::::0;::::2;::::0;45012:12;45070:24:::2;::::0;:34:::2;::::0;;;;;::::2;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44022:1184;;37368:1:::1;;;43878:1328:::0;;;;:::o;42692:282::-;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;42817:1:::1;42780:13:::0;;;:9:::1;:13;::::0;;;;:25;;;::::1;-1:-1:-1::0;;;;;42780:25:0::1;42772:55;;;::::0;-1:-1:-1;;;42772:55:0;;21639:2:1;42772:55:0::1;::::0;::::1;21621:21:1::0;21678:1;21658:18;;;21651:29;21716:5;21696:18;;;21689:33;21739:18;;42772:55:0::1;21437:326:1::0;42772:55:0::1;42854:1;42846:5;:9;;;42838:33;;;::::0;-1:-1:-1;;;42838:33:0;;21970:2:1;42838:33:0::1;::::0;::::1;21952:21:1::0;22009:2;21989:18;;;21982:30;22048:13;22028:18;;;22021:41;22079:18;;42838:33:0::1;21768:335:1::0;42838:33:0::1;42882:13;::::0;;;:9:::1;:13;::::0;;;;;;;;:27;;-1:-1:-1;;42882:27:0::1;;::::0;::::1;::::0;;::::1;::::0;;;42927:39;;22278:36:1;;;42950:15:0::1;22330:18:1::0;;;22323:34;;;;42882:13:0;;42927:39:::1;::::0;22251:18:1;42927:39:0::1;;;;;;;;42692:282:::0;;:::o;41866:219::-;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;41996:1:::1;41988:5;:9;;;41980:25;;;::::0;-1:-1:-1;;;41980:25:0;;22570:2:1;41980:25:0::1;::::0;::::1;22552:21:1::0;22609:1;22589:18;;;22582:29;22647:5;22627:18;;;22620:33;22670:18;;41980:25:0::1;22368:326:1::0;41980:25:0::1;42016:24;::::0;;;:9:::1;:24;::::0;;;;42068:9;;42016:42:::1;;:49;::::0;::::1;;::::0;::::1;;;;;:::i;:::-;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;41866:219:::0;;;:::o;39084:121::-;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;39193:3:::1;39183:14;39187:4;;39183:14;;;;;;;:::i;:::-;;;;;;;;39084:121:::0;;;:::o;49393:527::-;49496:22;;;;;;;:9;:22;;;;;:29;;;;;;:34;49488:74;;;;-1:-1:-1;;;49488:74:0;;23544:2:1;49488:74:0;;;23526:21:1;23583:2;23563:18;;;23556:30;23622:29;23602:18;;;23595:57;23669:18;;49488:74:0;23342:351:1;49488:74:0;49610:1;49581:26;49595:11;49581:26;;:13;:26::i;:::-;:30;;;49573:77;;;;-1:-1:-1;;;49573:77:0;;23900:2:1;49573:77:0;;;23882:21:1;23939:2;23919:18;;;23912:30;23978:34;23958:18;;;23951:62;24049:4;24029:18;;;24022:32;24071:19;;49573:77:0;23698:398:1;49573:77:0;49669:38;49686:6;21140:10;49033:203;:::i;49669:38::-;49661:63;;;;-1:-1:-1;;;49661:63:0;;24303:2:1;49661:63:0;;;24285:21:1;24342:2;24322:18;;;24315:30;24381:14;24361:18;;;24354:42;24413:18;;49661:63:0;24101:336:1;49661:63:0;49743:32;;;47346:4;47393:14;;;:9;:14;;;;;;;;-1:-1:-1;;;;;47393:21:0;;;;;;;;;;49735:74;;;;-1:-1:-1;;;49735:74:0;;24644:2:1;49735:74:0;;;24626:21:1;24683:2;24663:18;;;24656:30;24722:31;24702:18;;;24695:59;24771:18;;49735:74:0;24442:353:1;49735:74:0;49820:22;;;;;;;:9;:22;;;;;;;;;:38;;-1:-1:-1;;49820:38:0;;;;;;;;;;;;;;;49874;;-1:-1:-1;;;;;24991:55:1;;24973:74;;25063:18;;;25056:47;49874:38:0;;24946:18:1;49874:38:0;24800:309:1;26216:105:0;26276:13;26309:4;26302:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26216:105;;;:::o;47078:194::-;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;-1:-1:-1;;;;;47170:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:40;;-1:-1:-1;;47170:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;47226:38;;1228:41:1;;;47226:38:0::1;::::0;1201:18:1;47226:38:0::1;1088:187:1::0;41505:256:0;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;41617:24:::1;::::0;;;:9:::1;:24;::::0;;;;;;;;:64;;-1:-1:-1;;41617:64:0::1;;::::0;::::1;::::0;;::::1;::::0;;;41697:56;;25726:25:1;;;25767:18;;;25760:45;41697:56:0::1;::::0;25699:18:1;41697:56:0::1;;;;;;;;41505:256:::0;;:::o;37570:98::-;22693:6;;-1:-1:-1;;;;;22693:6:0;21140:10;22840:23;22832:68;;;;-1:-1:-1;;;22832:68:0;;26018:2:1;22832:68:0;;;26000:21:1;;;26037:18;;;26030:30;26096:34;26076:18;;;26069:62;26148:18;;22832:68:0;25816:356:1;22832:68:0;-1:-1:-1;;;;;37639:13:0::1;37655:5;37639:13:::0;;;:6:::1;:13;::::0;;;;:21;;-1:-1:-1;;37639:21:0::1;::::0;;37570:98::o;36607:423::-;22693:6;;-1:-1:-1;;;;;22693:6:0;21140:10;22840:23;22832:68;;;;-1:-1:-1;;;22832:68:0;;26018:2:1;22832:68:0;;;26000:21:1;;;26037:18;;;26030:30;26096:34;26076:18;;;26069:62;26148:18;;22832:68:0;25816:356:1;22832:68:0;36682:12;;:46:::1;;36721:7;36682:46;;;36697:21;36682:46;36672:56;;36758:21;36747:7;:32;;36739:48;;;::::0;-1:-1:-1;;;36739:48:0;;26379:2:1;36739:48:0::1;::::0;::::1;26361:21:1::0;26418:1;26398:18;;;26391:29;26456:5;26436:18;;;26429:33;26479:18;;36739:48:0::1;26177:326:1::0;36739:48:0::1;36798:12;36827:3;36813:11;:7:::0;36823:1:::1;36813:11;:::i;:::-;:17;;;;:::i;:::-;36841:69;::::0;36798:32;;-1:-1:-1;36849:42:0::1;::::0;36841:69;::::1;;;::::0;36798:32;;36841:69:::1;::::0;;;36798:32;36849:42;36841:69;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;21140:10:0;36921:49:::1;36952:17;36962:7:::0;36952;:17:::1;:::i;:::-;36921:49;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;36988:34:0::1;::::0;620:25:1;;;21140:10:0;;36988:34:::1;::::0;608:2:1;593:18;36988:34:0::1;474:177:1::0;28451:442:0;-1:-1:-1;;;;;28684:20:0;;21140:10;28684:20;;:60;;-1:-1:-1;28708:36:0;28725:4;21140:10;49033:203;:::i;28708:36::-;28662:160;;;;-1:-1:-1;;;28662:160:0;;27119:2:1;28662:160:0;;;27101:21:1;27158:2;27138:18;;;27131:30;27197:34;27177:18;;;27170:62;27268:20;27248:18;;;27241:48;27306:19;;28662:160:0;26917:414:1;28662:160:0;28833:52;28856:4;28862:2;28866:3;28871:7;28880:4;28833:22;:52::i;:::-;28451:442;;;;;:::o;37426:96::-;22693:6;;-1:-1:-1;;;;;22693:6:0;21140:10;22840:23;22832:68;;;;-1:-1:-1;;;22832:68:0;;26018:2:1;22832:68:0;;;26000:21:1;;;26037:18;;;26030:30;26096:34;26076:18;;;26069:62;26148:18;;22832:68:0;25816:356:1;22832:68:0;-1:-1:-1;;;;;37494:13:0::1;;::::0;;;:6:::1;:13;::::0;;;;:20;;-1:-1:-1;;37494:20:0::1;37510:4;37494:20;::::0;;37426:96::o;45214:1128::-;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;45319:13;;45361:3:::1;45352:12;::::0;::::1;;45344:28;;;::::0;-1:-1:-1;;;45344:28:0;;27538:2:1;45344:28:0::1;::::0;::::1;27520:21:1::0;27577:1;27557:18;;;27550:29;27615:5;27595:18;;;27588:33;27638:18;;45344:28:0::1;27336:326:1::0;45344:28:0::1;45429:12;::::0;;:9:::1;:12;::::0;;:22;::::1;::::0;;::::1;::::0;::::1;::::0;45392:33:::1;::::0;45419:6;;45392:24;;::::1;;:33;:::i;:::-;:59;;;;45383:76;;;::::0;-1:-1:-1;;;45383:76:0;;27869:2:1;45383:76:0::1;::::0;::::1;27851:21:1::0;27908:1;27888:18;;;27881:29;27946:5;27926:18;;;27919:33;27969:18;;45383:76:0::1;27667:326:1::0;45383:76:0::1;45472:23;45498:12:::0;;;:9:::1;:12;::::0;;:28;;;::::1;;;::::0;45659:477:::1;45680:6;45676:10;;:1;:10;45659:477;;;45759:1;45717:9;:27;45727:16;45717:27;;;;;;;;;;;;;:38;45745:6;45752:1;45745:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;45717:38:0::1;-1:-1:-1::0;;;;;45717:38:0::1;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;45775:27:0::1;::::0;;::::1;;::::0;;;:9:::1;:27;::::0;;;;:71;;45830:15:::1;45775:71:::0;;;::::1;::::0;::::1;-1:-1:-1::0;;45775:71:0;;::::1;::::0;;;::::1;::::0;;45903:9;;:6;;45910:1;;45903:9;::::1;;;;;:::i;:::-;;;;;;;45861;:27;45871:16;45861:27;;;;;;;;;;;;;:39;;;:51;;;;;-1:-1:-1::0;;;;;45861:51:0::1;;;;;-1:-1:-1::0;;;;;45861:51:0::1;;;;;;45987:6;45994:1;45987:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;45946:72:0::1;45983:1;-1:-1:-1::0;;;;;45946:72:0::1;45961:12;21140:10:::0;;21060:98;45961:12:::1;45946:72;::::0;;20325:10:1;20313:23;;20295:42;;46016:1:0::1;20368:2:1::0;20353:18;;20346:34;-1:-1:-1;;;;;45946:72:0;;;::::1;::::0;::::1;::::0;20268:18:1;45946:72:0::1;;;;;;;46043:16;46038:50;;;46061:6;46068:1;46061:9;;;;;;;;:::i;:::-;;;;;;;46072:15;46038:50;;;;;;-1:-1:-1::0;;;;;20583:55:1;;;;20565:74;;20670:2;20655:18;;20648:34;20553:2;20538:18;;20391:297;46038:50:0::1;;;;;;;;46103:21;46123:1;46103:21:::0;::::1;:::i;:::-;::::0;-1:-1:-1;45688:3:0;::::1;::::0;::::1;:::i;:::-;;;;45659:477;;;-1:-1:-1::0;46148:12:0::1;::::0;;:9:::1;:12;::::0;;:47;;-1:-1:-1;;46148:47:0::1;::::0;::::1;::::0;::::1;;;::::0;;;46234:6;;46148:12;46206:24:::1;::::0;:34:::1;::::0;46234:6;;46206:34;;::::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45283:1059;;45214:1128:::0;:::o;26829:486::-;26985:16;27046:3;:10;27027:8;:15;:29;27019:45;;;;-1:-1:-1;;;27019:45:0;;28400:2:1;27019:45:0;;;28382:21:1;28439:1;28419:18;;;28412:29;28477:5;28457:18;;;28450:33;28500:18;;27019:45:0;28198:326:1;27019:45:0;27077:30;27124:8;:15;27110:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27110:30:0;;27077:63;;27158:9;27153:122;27177:8;:15;27173:1;:19;27153:122;;;27233:30;27243:8;27252:1;27243:11;;;;;;;;:::i;:::-;;;;;;;27256:3;27260:1;27256:6;;;;;;;;:::i;:::-;;;;;;;27233:9;:30::i;:::-;27214:13;27228:1;27214:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;27194:3;;;:::i;:::-;;;27153:122;;;-1:-1:-1;27294:13:0;26829:486;-1:-1:-1;;;26829:486:0:o;38481:164::-;21140:10;38574:6;37891:20;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;38605:32:::1;38617:12;38631:5;38605:11;:32::i;:::-;38598:39:::0;38481:164;-1:-1:-1;;;38481:164:0:o;42295:196::-;42353:7;42389:13;;;:9;:13;;;;;:25;;;;-1:-1:-1;;;;;42389:25:0;;42425:35;;;;-1:-1:-1;;;42425:35:0;;28731:2:1;42425:35:0;;;28713:21:1;28770:1;28750:18;;;28743:29;28808:5;28788:18;;;28781:33;28831:18;;42425:35:0;28529:326:1;23271:103:0;22693:6;;-1:-1:-1;;;;;22693:6:0;21140:10;22840:23;22832:68;;;;-1:-1:-1;;;22832:68:0;;26018:2:1;22832:68:0;;;26000:21:1;;;26037:18;;;26030:30;26096:34;26076:18;;;26069:62;26148:18;;22832:68:0;25816:356:1;22832:68:0;23336:30:::1;23363:1;23336:18;:30::i;:::-;23271:103::o:0;39936:668::-;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;40212:24:::1;::::0;;;:9:::1;:24;::::0;;;;:45;;40268:52:::1;40386:64:::0;;::::1;-1:-1:-1::0;;40212:45:0::1;40331:44:::0;;::::1;::::0;::::1;40386:64:::0;;;;;40268:52;;::::1;40212:45;40268:52;-1:-1:-1::0;;40212:45:0;;::::1;::::0;::::1;40268:52:::0;;;;;;;;;;;;::::1;40386:64:::0;;;;;;;;::::1;::::0;;40463:134:::1;40483:1;40479;:5;40463:134;;;40563:19;40583:1;40563:22;;;;;;;:::i;:::-;;;;;40515:9;:24;40525:13;40515:24;;;;;;;;;;;:42;;40558:1;40515:45;;;;;;;:::i;:::-;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;40486:3;;;;;:::i;:::-;;;;40463:134;;;;39936:668:::0;;;;;;:::o;48523:360::-;48628:38;48645:6;21140:10;49033:203;:::i;48628:38::-;48620:63;;;;-1:-1:-1;;;48620:63:0;;24303:2:1;48620:63:0;;;24285:21:1;24342:2;24322:18;;;24315:30;24381:14;24361:18;;;24354:42;24413:18;;48620:63:0;24101:336:1;48620:63:0;48702:32;;;47346:4;47393:14;;;:9;:14;;;;;;;;-1:-1:-1;;;;;47393:21:0;;;;;;;;;;48694:74;;;;-1:-1:-1;;;48694:74:0;;24644:2:1;48694:74:0;;;24626:21:1;24683:2;24663:18;;;24656:30;24722:31;24702:18;;;24695:59;24771:18;;48694:74:0;24442:353:1;48694:74:0;48779:22;;;;;;;;:9;:22;;;;;;;;;:40;;;;;;;;;;;;;;48835;;-1:-1:-1;;;;;29051:55:1;;29033:74;;29123:18;;;29116:51;;;;48779:22:0;;48835:40;;29006:18:1;48835:40:0;28860:313:1;46681:55:0;18011:13;;;;;;;:48;;18047:12;;;;18046:13;18011:48;;;18814:4;9580:20;9628:8;18027:16;18003:107;;;;-1:-1:-1;;;18003:107:0;;29380:2:1;18003:107:0;;;29362:21:1;29419:2;29399:18;;;29392:30;29458:34;29438:18;;;29431:62;29529:16;29509:18;;;29502:44;29563:19;;18003:107:0;29178:410:1;18003:107:0;18123:19;18146:13;;;;;;18145:14;18170:101;;;;18205:13;:20;;-1:-1:-1;;18240:19:0;;;;;18170:101;18301:14;18297:68;;;18348:5;18332:21;;-1:-1:-1;;18332:21:0;;;18297:68;17718:654;46681:55::o;36280:185::-;18011:13;;;;;;;:48;;18047:12;;;;18046:13;18011:48;;;18814:4;9580:20;9628:8;18027:16;18003:107;;;;-1:-1:-1;;;18003:107:0;;29380:2:1;18003:107:0;;;29362:21:1;29419:2;29399:18;;;29392:30;29458:34;29438:18;;;29431:62;29529:16;29509:18;;;29502:44;29563:19;;18003:107:0;29178:410:1;18003:107:0;18123:19;18146:13;;;;;;18145:14;18170:101;;;;18205:13;:20;;-1:-1:-1;;18240:19:0;;;;;18170:101;36338:35:::1;:33;:35::i;:::-;36384:37;;;;;;;;;;;;::::0;:33:::1;:37::i;:::-;36433:24;21140:10:::0;37426:96;:::i;41201:147::-;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;41296:24:::1;::::0;;;:9:::1;:24;::::0;;;;;:44;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;41201:147::o;40745:199::-;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;40840:24:::1;::::0;;;:9:::1;:24;::::0;;;;;;;;:44;;-1:-1:-1;;40840:44:0::1;;;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;40900:36;;25726:25:1;;;25767:18;;;25760:45;40900:36:0::1;::::0;25699:18:1;40900:36:0::1;25556:255:1::0;39213:104:0;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;39294:15:::1;39302:6;39294:7;:15::i;27388:273::-:0;21140:10;-1:-1:-1;;;;;27491:24:0;;;;27483:40;;;;-1:-1:-1;;;27483:40:0;;29795:2:1;27483:40:0;;;29777:21:1;29834:1;29814:18;;;29807:29;29872:5;29852:18;;;29845:33;29895:18;;27483:40:0;29593:326:1;27483:40:0;21140:10;27536:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;27536:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;27536:53:0;;;;;;;;;;27605:48;;1228:41:1;;;27536:42:0;;21140:10;27605:48;;1201:18:1;27605:48:0;;;;;;;27388:273;;:::o;43013:780::-;43065:5;43096:13;;;:9;:13;;;;;:31;;;;;;43088:65;;;;-1:-1:-1;;;43088:65:0;;30126:2:1;43088:65:0;;;30108:21:1;30165:2;30145:18;;;30138:30;30204:19;30184:18;;;30177:47;30241:18;;43088:65:0;29924:341:1;43088:65:0;43190:1;43168:13;;;:9;:13;;;;;:19;;;:23;43164:91;;-1:-1:-1;43224:13:0;;;;:9;:13;;;;;:19;;;;43013:780::o;43164:91::-;43267:13;43306;;;:9;:13;;;;;:31;43283:55;;43306:31;;;;;43283:15;:55;:::i;:::-;43349:17;43385:12;;;:9;:12;;43267:71;;-1:-1:-1;43349:17:0;43466:41;43506:1;43466:37;:41;:::i;:::-;43457:50;;43452:286;43575:12;;;:9;:12;;:30;43606:1;43575:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43570:39;;43612:5;43570:47;;;;:::i;:::-;43558:8;:59;43554:169;;43674:1;43659:16;;43698:5;;43554:169;43517:3;;;;:::i;:::-;;;;43452:286;;48238:277;-1:-1:-1;;;;;48327:22:0;;21140:10;48327:22;;:64;;-1:-1:-1;48353:38:0;48370:6;21140:10;49033:203;:::i;48353:38::-;48305:132;;;;-1:-1:-1;;;48305:132:0;;30673:2:1;48305:132:0;;;30655:21:1;30712:2;30692:18;;;30685:30;30751:20;30731:18;;;30724:48;30789:18;;48305:132:0;30471:342:1;48305:132:0;48450:20;48456:6;48464:2;48450:20;;48468:1;48450:5;:20::i;:::-;48481:12;;;:9;:12;;;:26;;;;;;;;:24;:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;48238:277;;:::o;50068:176::-;50112:13;50138:98;;;;;;;;;;;;;;;;;;;50068:176;:::o;49033:203::-;-1:-1:-1;;;;;49156:27:0;;49132:4;49156:27;;;:16;:27;;;;;;;;;:72;;-1:-1:-1;;;;;;27856:27:0;;;27832:4;27856:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;49187:41;27733:168;27973:401;-1:-1:-1;;;;;28181:20:0;;21140:10;28181:20;;:60;;-1:-1:-1;28205:36:0;28222:4;21140:10;49033:203;:::i;28205:36::-;28159:151;;;;-1:-1:-1;;;28159:151:0;;31266:2:1;28159:151:0;;;31248:21:1;31305:2;31285:18;;;31278:30;31344:34;31324:18;;;31317:62;31415:11;31395:18;;;31388:39;31444:19;;28159:151:0;31064:405:1;28159:151:0;28321:45;28339:4;28345:2;28349;28353:6;28361:4;28321:17;:45::i;37676:162::-;22693:6;;-1:-1:-1;;;;;22693:6:0;21140:10;22840:23;22832:68;;;;-1:-1:-1;;;22832:68:0;;26018:2:1;22832:68:0;;;26000:21:1;;;26037:18;;;26030:30;26096:34;26076:18;;;26069:62;26148:18;;22832:68:0;25816:356:1;22832:68:0;37766:33:::1;37790:8;37766:23;:33::i;:::-;37810:20;37821:8;37810:10;:20::i;41007:158::-:0;21140:10;37891:20;;;;:6;:20;;;;;;;;:28;;:20;:28;37883:44;;;;-1:-1:-1;;;37883:44:0;;21308:2:1;37883:44:0;;;21290:21:1;21347:1;21327:18;;;21320:29;-1:-1:-1;;;21365:18:1;;;21358:33;21408:18;;37883:44:0;21106:326:1;37883:44:0;41108:24:::1;::::0;;;:9:::1;:24;::::0;;;;;:49;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;41108:49:0;;::::1;::::0;;;::::1;::::0;;41007:158::o;38003:470::-;38079:6;-1:-1:-1;;;;;38119:20:0;;;38223:14;38235:2;38223:14;;;;38079:6;38284:53;;;;;:30;;;;38223:14;38284:30;:::i;:::-;:53;;;;:::i;:::-;38273:8;:64;38249:89;;38363:10;38353:7;:20;;;38349:92;;;38409:20;:7;38419:10;38409:20;:::i;:::-;38399:30;;38349:92;38458:7;38003:470;-1:-1:-1;;;;;;38003:470:0:o;30462:876::-;30689:7;:14;30675:3;:10;:28;30667:44;;;;-1:-1:-1;;;30667:44:0;;31676:2:1;30667:44:0;;;31658:21:1;31715:1;31695:18;;;31688:29;31753:5;31733:18;;;31726:33;31776:18;;30667:44:0;31474:326:1;30667:44:0;-1:-1:-1;;;;;30730:16:0;;30722:32;;;;-1:-1:-1;;;30722:32:0;;32007:2:1;30722:32:0;;;31989:21:1;32046:1;32026:18;;;32019:29;32084:5;32064:18;;;32057:33;32107:18;;30722:32:0;31805:326:1;30722:32:0;21140:10;30767:16;30884:382;30908:3;:10;30904:1;:14;30884:382;;;30940:10;30953:3;30957:1;30953:6;;;;;;;;:::i;:::-;;;;;;;30940:19;;30974:14;30991:7;30999:1;30991:10;;;;;;;;:::i;:::-;;;;;;;;;;;;31018:19;31040:13;;;:9;:13;;;;;;-1:-1:-1;;;;;31040:19:0;;;;;;;;;;;;30991:10;;-1:-1:-1;31082:21:0;;;;31074:37;;;;-1:-1:-1;;;31074:37:0;;32338:2:1;31074:37:0;;;32320:21:1;32377:1;32357:18;;;32350:29;32415:5;32395:18;;;32388:33;32438:18;;31074:37:0;32136:326:1;31074:37:0;31155:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;31155:19:0;;;;;;;;;;31177:20;;;31155:42;;31227:17;;;;;;;:27;;31177:20;;31155:13;31227:27;;31177:20;;31227:27;:::i;:::-;;;;;;;;30925:341;;;30920:3;;;;:::i;:::-;;;30884:382;;;;31313:2;-1:-1:-1;;;;;31283:47:0;31307:4;-1:-1:-1;;;;;31283:47:0;31297:8;-1:-1:-1;;;;;31283:47:0;;31317:3;31322:7;31283:47;;;;;;;:::i;:::-;;;;;;;;30656:682;30462:876;;;;;:::o;23890:191::-;23983:6;;;-1:-1:-1;;;;;24000:17:0;;;;;;;;;;;24033:40;;23983:6;;;24000:17;23983:6;;24033:40;;23964:16;;24033:40;23953:128;23890:191;:::o;22284:134::-;18614:13;;;;;;;18606:69;;;;-1:-1:-1;;;18606:69:0;;33139:2:1;18606:69:0;;;33121:21:1;33178:2;33158:18;;;33151:30;33217:34;33197:18;;;33190:62;33288:13;33268:18;;;33261:41;33319:19;;18606:69:0;32937:407:1;18606:69:0;22347:26:::1;:24;:26::i;:::-;22384;:24;:26::i;25077:187::-:0;18011:13;;;;;;;:48;;18047:12;;;;18046:13;18011:48;;;18814:4;9580:20;9628:8;18027:16;18003:107;;;;-1:-1:-1;;;18003:107:0;;29380:2:1;18003:107:0;;;29362:21:1;29419:2;29399:18;;;29392:30;29458:34;29438:18;;;29431:62;29529:16;29509:18;;;29502:44;29563:19;;18003:107:0;29178:410:1;18003:107:0;18123:19;18146:13;;;;;;18145:14;18170:101;;;;18205:13;:20;;-1:-1:-1;;18240:19:0;;;;;18170:101;25153:26:::1;:24;:26::i;:::-;25190:25;:23;:25::i;:::-;25226:30;25251:4;25226:24;:30::i;:::-;18301:14:::0;18297:68;;;18348:5;18332:21;;-1:-1:-1;;18332:21:0;;;18297:68;17718:654;25077:187;:::o;32182:88::-;32249:13;;;;:4;;:13;;;;;:::i;47588:642::-;-1:-1:-1;;;;;47718:21:0;;47710:55;;;;-1:-1:-1;;;47710:55:0;;33551:2:1;47710:55:0;;;33533:21:1;33590:2;33570:18;;;33563:30;33629:23;33609:18;;;33602:51;33670:18;;47710:55:0;33349:345:1;47710:55:0;21140:10;47822:105;21140:10;47853:7;47778:16;47874:21;47892:2;47874:17;:21::i;:::-;47897:25;47915:6;47897:17;:25::i;:::-;-1:-1:-1;;47822:105:0;;;;;;;;;-1:-1:-1;47822:105:0;;-1:-1:-1;;;33226:221:0;47822:105;47940:22;47965:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;47965:22:0;;;;;;;;;;48006:24;;;;47998:54;;;;-1:-1:-1;;;47998:54:0;;33901:2:1;47998:54:0;;;33883:21:1;33940:2;33920:18;;;33913:30;33979:19;33959:18;;;33952:47;34016:18;;47998:54:0;33699:341:1;47998:54:0;48088:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;48088:22:0;;;;;;;;;;;;48113:23;;;48088:48;;48165:57;;34219:25:1;;;34260:18;;;34253:34;;;48088:22:0;;48165:57;;;;;;34192:18:1;48165:57:0;;;;;;;47699:531;;47588:642;;;:::o;29357:747::-;-1:-1:-1;;;;;29545:16:0;;29537:32;;;;-1:-1:-1;;;29537:32:0;;34500:2:1;29537:32:0;;;34482:21:1;34539:1;34519:18;;;34512:29;34577:5;34557:18;;;34550:33;34600:18;;29537:32:0;34298:326:1;29537:32:0;21140:10;29626:96;21140:10;29657:4;29663:2;29667:21;29685:2;29667:17;:21::i;:::-;29690:25;29708:6;29690:17;:25::i;29626:96::-;29735:19;29757:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;29757:19:0;;;;;;;;;;29795:21;;;;29787:37;;;;-1:-1:-1;;;29787:37:0;;34831:2:1;29787:37:0;;;34813:21:1;34870:1;34850:18;;;34843:29;34908:5;34888:18;;;34881:33;34931:18;;29787:37:0;34629:326:1;29787:37:0;29860:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;29860:19:0;;;;;;;;;;29882:20;;;29860:42;;29924:17;;;;;;;:27;;29882:20;;29860:13;29924:27;;29882:20;;29924:27;:::i;:::-;;;;-1:-1:-1;;29969:46:0;;;34219:25:1;;;34275:2;34260:18;;34253:34;;;-1:-1:-1;;;;;29969:46:0;;;;;;;;;;;;;;34192:18:1;29969:46:0;;;;;;;30028:68;30059:8;30069:4;30075:2;30079;30083:6;30091:4;30028:30;:68::i;23529:201::-;22693:6;;-1:-1:-1;;;;;22693:6:0;21140:10;22840:23;22832:68;;;;-1:-1:-1;;;22832:68:0;;26018:2:1;22832:68:0;;;26000:21:1;;;26037:18;;;26030:30;26096:34;26076:18;;;26069:62;26148:18;;22832:68:0;25816:356:1;22832:68:0;-1:-1:-1;;;;;23618:22:0;::::1;23610:73;;;::::0;-1:-1:-1;;;23610:73:0;;35162:2:1;23610:73:0::1;::::0;::::1;35144:21:1::0;35201:2;35181:18;;;35174:30;35240:34;35220:18;;;35213:62;35311:8;35291:18;;;35284:36;35337:19;;23610:73:0::1;34960:402:1::0;23610:73:0::1;23694:28;23713:8;23694:18;:28::i;33226:221::-:0;;;;;;;:::o;20984:70::-;18614:13;;;;;;;18606:69;;;;-1:-1:-1;;;18606:69:0;;33139:2:1;18606:69:0;;;33121:21:1;33178:2;33158:18;;;33151:30;33217:34;33197:18;;;33190:62;33288:13;33268:18;;;33261:41;33319:19;;18606:69:0;32937:407:1;22426:113:0;18614:13;;;;;;;18606:69;;;;-1:-1:-1;;;18606:69:0;;33139:2:1;18606:69:0;;;33121:21:1;33178:2;33158:18;;;33151:30;33217:34;33197:18;;;33190:62;33288:13;33268:18;;;33261:41;33319:19;;18606:69:0;32937:407:1;18606:69:0;22499:32:::1;21140:10:::0;22499:18:::1;:32::i;25272:107::-:0;18011:13;;;;;;;:48;;18047:12;;;;18046:13;18011:48;;;18814:4;9580:20;9628:8;18027:16;18003:107;;;;-1:-1:-1;;;18003:107:0;;29380:2:1;18003:107:0;;;29362:21:1;29419:2;29399:18;;;29392:30;29458:34;29438:18;;;29431:62;29529:16;29509:18;;;29502:44;29563:19;;18003:107:0;29178:410:1;18003:107:0;18123:19;18146:13;;;;;;18145:14;18170:101;;;;18205:13;:20;;-1:-1:-1;;18240:19:0;;;;;18170:101;25358:13:::1;25366:4;25358:7;:13::i;34230:199::-:0;34351:16;;;34365:1;34351:16;;;;;;;;;34297;;34326:22;;34351:16;;;;;;;;;;;;-1:-1:-1;34351:16:0;34326:41;;34389:7;34378:5;34384:1;34378:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;34416:5;34230:199;-1:-1:-1;;34230:199:0:o;33455:767::-;-1:-1:-1;;;;;33671:13:0;;9580:20;9628:8;33667:548;;33707:83;;;;;-1:-1:-1;;;;;33707:49:0;;;;;:83;;33757:8;;33767:4;;33773:2;;33777:6;;33785:4;;33707:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33707:83:0;;;;;;;;-1:-1:-1;;33707:83:0;;;;;;;;;;;;:::i;:::-;;;33703:501;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34077:6;34070:14;;-1:-1:-1;;;34070:14:0;;;;;;;;:::i;33703:501::-;;;34126:62;;-1:-1:-1;;;34126:62:0;;37332:2:1;34126:62:0;;;37314:21:1;37371:2;37351:18;;;37344:30;37410:34;37390:18;;;37383:62;37481:22;37461:18;;;37454:50;37521:19;;34126:62:0;37130:416:1;33703:501:0;33840:66;;;33852:54;33840:66;33836:165;;33931:50;;-1:-1:-1;;;33931:50:0;;37753:2:1;33931:50:0;;;37735:21:1;37792:2;37772:18;;;37765:30;37831:34;37811:18;;;37804:62;37902:10;37882:18;;;37875:38;37930:19;;33931:50:0;37551:404:1;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:254::-;283:6;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;383:29;402:9;383:29;:::i;:::-;373:39;459:2;444:18;;;;431:32;;-1:-1:-1;;;215:254:1:o;656:177::-;741:66;734:5;730:78;723:5;720:89;710:117;;823:1;820;813:12;838:245;896:6;949:2;937:9;928:7;924:23;920:32;917:52;;;965:1;962;955:12;917:52;1004:9;991:23;1023:30;1047:5;1023:30;:::i;1280:156::-;1346:20;;1406:4;1395:16;;1385:27;;1375:55;;1426:1;1423;1416:12;1441:163;1508:20;;1568:10;1557:22;;1547:33;;1537:61;;1594:1;1591;1584:12;1609:254;1674:6;1682;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1774:27;1791:9;1774:27;:::i;:::-;1764:37;;1820;1853:2;1842:9;1838:18;1820:37;:::i;:::-;1810:47;;1609:254;;;;;:::o;1868:531::-;1910:3;1948:5;1942:12;1975:6;1970:3;1963:19;2000:1;2010:162;2024:6;2021:1;2018:13;2010:162;;;2086:4;2142:13;;;2138:22;;2132:29;2114:11;;;2110:20;;2103:59;2039:12;2010:162;;;2190:6;2187:1;2184:13;2181:87;;;2256:1;2249:4;2240:6;2235:3;2231:16;2227:27;2220:38;2181:87;-1:-1:-1;2313:2:1;2301:15;-1:-1:-1;;2297:88:1;2288:98;;;;2388:4;2284:109;;1868:531;-1:-1:-1;;1868:531:1:o;2404:220::-;2553:2;2542:9;2535:21;2516:4;2573:45;2614:2;2603:9;2599:18;2591:6;2573:45;:::i;2629:250::-;2695:6;2703;2756:2;2744:9;2735:7;2731:23;2727:32;2724:52;;;2772:1;2769;2762:12;2724:52;2808:9;2795:23;2785:33;;2837:36;2869:2;2858:9;2854:18;2837:36;:::i;2884:322::-;2958:6;2966;2974;3027:2;3015:9;3006:7;3002:23;2998:32;2995:52;;;3043:1;3040;3033:12;2995:52;3079:9;3066:23;3056:33;;3108:36;3140:2;3129:9;3125:18;3108:36;:::i;:::-;3098:46;;3163:37;3196:2;3185:9;3181:18;3163:37;:::i;:::-;3153:47;;2884:322;;;;;:::o;3211:666::-;3291:6;3299;3307;3360:2;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;3416:9;3403:23;3445:18;3486:2;3478:6;3475:14;3472:34;;;3502:1;3499;3492:12;3472:34;3540:6;3529:9;3525:22;3515:32;;3585:7;3578:4;3574:2;3570:13;3566:27;3556:55;;3607:1;3604;3597:12;3556:55;3647:2;3634:16;3673:2;3665:6;3662:14;3659:34;;;3689:1;3686;3679:12;3659:34;3736:7;3729:4;3720:6;3716:2;3712:15;3708:26;3705:39;3702:59;;;3757:1;3754;3747:12;3702:59;3788:4;3780:13;;;;3812:6;;-1:-1:-1;3850:20:1;;;;3837:34;;3211:666;-1:-1:-1;;;;3211:666:1:o;3882:159::-;3949:20;;4009:6;3998:18;;3988:29;;3978:57;;4031:1;4028;4021:12;4046:330;4121:6;4129;4137;4190:2;4178:9;4169:7;4165:23;4161:32;4158:52;;;4206:1;4203;4196:12;4158:52;4229:28;4247:9;4229:28;:::i;:::-;4219:38;;4276;4310:2;4299:9;4295:18;4276:38;:::i;:::-;4266:48;;4333:37;4366:2;4355:9;4351:18;4333:37;:::i;4381:180::-;4440:6;4493:2;4481:9;4472:7;4468:23;4464:32;4461:52;;;4509:1;4506;4499:12;4461:52;-1:-1:-1;4532:23:1;;4381:180;-1:-1:-1;4381:180:1:o;4763:347::-;4828:6;4836;4889:2;4877:9;4868:7;4864:23;4860:32;4857:52;;;4905:1;4902;4895:12;4857:52;4928:29;4947:9;4928:29;:::i;:::-;4918:39;;5007:2;4996:9;4992:18;4979:32;5054:5;5047:13;5040:21;5033:5;5030:32;5020:60;;5076:1;5073;5066:12;5020:60;5099:5;5089:15;;;4763:347;;;;;:::o;5115:186::-;5174:6;5227:2;5215:9;5206:7;5202:23;5198:32;5195:52;;;5243:1;5240;5233:12;5195:52;5266:29;5285:9;5266:29;:::i;5306:184::-;-1:-1:-1;;;5355:1:1;5348:88;5455:4;5452:1;5445:15;5479:4;5476:1;5469:15;5495:224;5581:3;5573:6;5569:16;5651:6;5639:10;5636:22;5615:18;5603:10;5600:34;5597:62;5594:88;;;5662:18;;:::i;:::-;5698:2;5691:22;-1:-1:-1;5495:224:1:o;5724:308::-;-1:-1:-1;;5825:2:1;5819:4;5815:13;5811:86;5803:6;5799:99;5964:6;5952:10;5949:22;5928:18;5916:10;5913:34;5910:62;5907:88;;;5975:18;;:::i;:::-;6011:2;6004:22;-1:-1:-1;;5724:308:1:o;6037:183::-;6097:4;6130:18;6122:6;6119:30;6116:56;;;6152:18;;:::i;:::-;-1:-1:-1;6197:1:1;6193:14;6209:4;6189:25;;6037:183::o;6225:724::-;6279:5;6332:3;6325:4;6317:6;6313:17;6309:27;6299:55;;6350:1;6347;6340:12;6299:55;6386:6;6373:20;6412:4;6435:43;6475:2;6435:43;:::i;:::-;6507:2;6501:9;6519:31;6547:2;6539:6;6519:31;:::i;:::-;6585:18;;;6677:1;6673:10;;;;6661:23;;6657:32;;;6619:15;;;;-1:-1:-1;6701:15:1;;;6698:35;;;6729:1;6726;6719:12;6698:35;6765:2;6757:6;6753:15;6777:142;6793:6;6788:3;6785:15;6777:142;;;6859:17;;6847:30;;6897:12;;;;6810;;6777:142;;;-1:-1:-1;6937:6:1;6225:724;-1:-1:-1;;;;;;6225:724:1:o;6954:527::-;7018:5;7052:18;7044:6;7041:30;7038:56;;;7074:18;;:::i;:::-;7123:2;7117:9;7135:128;7257:4;-1:-1:-1;;7183:2:1;7175:6;7171:15;7167:88;7163:99;7155:6;7135:128;:::i;:::-;7281:6;7272:15;;7311:6;7303;7296:22;7351:3;7342:6;7337:3;7333:16;7330:25;7327:45;;;7368:1;7365;7358:12;7327:45;7418:6;7413:3;7406:4;7398:6;7394:17;7381:44;7473:1;7466:4;7457:6;7449;7445:19;7441:30;7434:41;;6954:527;;;;;:::o;7486:220::-;7528:5;7581:3;7574:4;7566:6;7562:17;7558:27;7548:55;;7599:1;7596;7589:12;7548:55;7621:79;7696:3;7687:6;7674:20;7667:4;7659:6;7655:17;7621:79;:::i;7711:943::-;7865:6;7873;7881;7889;7897;7950:3;7938:9;7929:7;7925:23;7921:33;7918:53;;;7967:1;7964;7957:12;7918:53;7990:29;8009:9;7990:29;:::i;:::-;7980:39;;8038:38;8072:2;8061:9;8057:18;8038:38;:::i;:::-;8028:48;;8127:2;8116:9;8112:18;8099:32;8150:18;8191:2;8183:6;8180:14;8177:34;;;8207:1;8204;8197:12;8177:34;8230:61;8283:7;8274:6;8263:9;8259:22;8230:61;:::i;:::-;8220:71;;8344:2;8333:9;8329:18;8316:32;8300:48;;8373:2;8363:8;8360:16;8357:36;;;8389:1;8386;8379:12;8357:36;8412:63;8467:7;8456:8;8445:9;8441:24;8412:63;:::i;:::-;8402:73;;8528:3;8517:9;8513:19;8500:33;8484:49;;8558:2;8548:8;8545:16;8542:36;;;8574:1;8571;8564:12;8542:36;;8597:51;8640:7;8629:8;8618:9;8614:24;8597:51;:::i;:::-;8587:61;;;7711:943;;;;;;;;:::o;8659:730::-;8713:5;8766:3;8759:4;8751:6;8747:17;8743:27;8733:55;;8784:1;8781;8774:12;8733:55;8820:6;8807:20;8846:4;8869:43;8909:2;8869:43;:::i;:::-;8941:2;8935:9;8953:31;8981:2;8973:6;8953:31;:::i;:::-;9019:18;;;9111:1;9107:10;;;;9095:23;;9091:32;;;9053:15;;;;-1:-1:-1;9135:15:1;;;9132:35;;;9163:1;9160;9153:12;9132:35;9199:2;9191:6;9187:15;9211:148;9227:6;9222:3;9219:15;9211:148;;;9293:23;9312:3;9293:23;:::i;:::-;9281:36;;9337:12;;;;9244;;9211:148;;9394:348;9478:6;9531:2;9519:9;9510:7;9506:23;9502:32;9499:52;;;9547:1;9544;9537:12;9499:52;9587:9;9574:23;9620:18;9612:6;9609:30;9606:50;;;9652:1;9649;9642:12;9606:50;9675:61;9728:7;9719:6;9708:9;9704:22;9675:61;:::i;:::-;9665:71;9394:348;-1:-1:-1;;;;9394:348:1:o;9747:595::-;9865:6;9873;9926:2;9914:9;9905:7;9901:23;9897:32;9894:52;;;9942:1;9939;9932:12;9894:52;9982:9;9969:23;10011:18;10052:2;10044:6;10041:14;10038:34;;;10068:1;10065;10058:12;10038:34;10091:61;10144:7;10135:6;10124:9;10120:22;10091:61;:::i;:::-;10081:71;;10205:2;10194:9;10190:18;10177:32;10161:48;;10234:2;10224:8;10221:16;10218:36;;;10250:1;10247;10240:12;10218:36;;10273:63;10328:7;10317:8;10306:9;10302:24;10273:63;:::i;:::-;10263:73;;;9747:595;;;;;:::o;10347:435::-;10400:3;10438:5;10432:12;10465:6;10460:3;10453:19;10491:4;10520:2;10515:3;10511:12;10504:19;;10557:2;10550:5;10546:14;10578:1;10588:169;10602:6;10599:1;10596:13;10588:169;;;10663:13;;10651:26;;10697:12;;;;10732:15;;;;10624:1;10617:9;10588:169;;;-1:-1:-1;10773:3:1;;10347:435;-1:-1:-1;;;;;10347:435:1:o;10787:261::-;10966:2;10955:9;10948:21;10929:4;10986:56;11038:2;11027:9;11023:18;11015:6;10986:56;:::i;11053:184::-;11111:6;11164:2;11152:9;11143:7;11139:23;11135:32;11132:52;;;11180:1;11177;11170:12;11132:52;11203:28;11221:9;11203:28;:::i;11977:254::-;12045:6;12053;12106:2;12094:9;12085:7;12081:23;12077:32;12074:52;;;12122:1;12119;12112:12;12074:52;12158:9;12145:23;12135:33;;12187:38;12221:2;12210:9;12206:18;12187:38;:::i;12236:184::-;12294:6;12347:2;12335:9;12326:7;12322:23;12318:32;12315:52;;;12363:1;12360;12353:12;12315:52;12386:28;12404:9;12386:28;:::i;12656:1025::-;12776:6;12784;12792;12800;12808;12816;12847:3;12891:2;12879:9;12870:7;12866:23;12862:32;12859:52;;;12907:1;12904;12897:12;12859:52;12943:9;12930:23;12920:33;;12972:2;12993:36;13025:2;13014:9;13010:18;12993:36;:::i;:::-;12983:46;;13048:37;13081:2;13070:9;13066:18;13048:37;:::i;:::-;13038:47;;13104:37;13137:2;13126:9;13122:18;13104:37;:::i;:::-;13094:47;;13160:37;13192:3;13181:9;13177:19;13160:37;:::i;:::-;13150:47;;13241:7;13235:3;13224:9;13220:19;13216:33;13206:61;;13263:1;13260;13253:12;13206:61;13296:2;13290:9;13308:32;13333:6;13308:32;:::i;:::-;13389:18;;;;13360:6;13419:19;;;13416:39;;;13451:1;13448;13441:12;13416:39;13490:3;13479:9;13475:19;13503:147;13519:6;13514:3;13511:15;13503:147;;;13585:22;13603:3;13585:22;:::i;:::-;13573:35;;13628:12;;;;13536;;13503:147;;;13507:3;;13669:6;13659:16;;;;;12656:1025;;;;;;;;:::o;13686:330::-;13761:6;13769;13777;13830:2;13818:9;13809:7;13805:23;13801:32;13798:52;;;13846:1;13843;13836:12;13798:52;13869:28;13887:9;13869:28;:::i;:::-;13859:38;;13916;13950:2;13939:9;13935:18;13916:38;:::i;14021:252::-;14088:6;14096;14149:2;14137:9;14128:7;14124:23;14120:32;14117:52;;;14165:1;14162;14155:12;14117:52;14201:9;14188:23;14178:33;;14230:37;14263:2;14252:9;14248:18;14230:37;:::i;14278:450::-;14347:6;14400:2;14388:9;14379:7;14375:23;14371:32;14368:52;;;14416:1;14413;14406:12;14368:52;14456:9;14443:23;14489:18;14481:6;14478:30;14475:50;;;14521:1;14518;14511:12;14475:50;14544:22;;14597:4;14589:13;;14585:27;-1:-1:-1;14575:55:1;;14626:1;14623;14616:12;14575:55;14649:73;14714:7;14709:2;14696:16;14691:2;14687;14683:11;14649:73;:::i;14922:258::-;14989:6;14997;15050:2;15038:9;15029:7;15025:23;15021:32;15018:52;;;15066:1;15063;15056:12;15018:52;15089:29;15108:9;15089:29;:::i;:::-;15079:39;;15137:37;15170:2;15159:9;15155:18;15137:37;:::i;15800:260::-;15868:6;15876;15929:2;15917:9;15908:7;15904:23;15900:32;15897:52;;;15945:1;15942;15935:12;15897:52;15968:29;15987:9;15968:29;:::i;:::-;15958:39;;16016:38;16050:2;16039:9;16035:18;16016:38;:::i;16065:606::-;16169:6;16177;16185;16193;16201;16254:3;16242:9;16233:7;16229:23;16225:33;16222:53;;;16271:1;16268;16261:12;16222:53;16294:29;16313:9;16294:29;:::i;:::-;16284:39;;16342:38;16376:2;16365:9;16361:18;16342:38;:::i;:::-;16332:48;;16427:2;16416:9;16412:18;16399:32;16389:42;;16478:2;16467:9;16463:18;16450:32;16440:42;;16533:3;16522:9;16518:19;16505:33;16561:18;16553:6;16550:30;16547:50;;;16593:1;16590;16583:12;16547:50;16616:49;16657:7;16648:6;16637:9;16633:22;16616:49;:::i;17669:184::-;-1:-1:-1;;;17718:1:1;17711:88;17818:4;17815:1;17808:15;17842:4;17839:1;17832:15;17858:224;17897:3;17925:6;17958:2;17955:1;17951:10;17988:2;17985:1;17981:10;18019:3;18015:2;18011:12;18006:3;18003:21;18000:47;;;18027:18;;:::i;:::-;18063:13;;17858:224;-1:-1:-1;;;;17858:224:1:o;18749:128::-;18789:3;18820:1;18816:6;18813:1;18810:13;18807:39;;;18826:18;;:::i;:::-;-1:-1:-1;18862:9:1;;18749:128::o;19544:228::-;19584:7;19710:1;-1:-1:-1;;19638:74:1;19635:1;19632:81;19627:1;19620:9;19613:17;19609:105;19606:131;;;19717:18;;:::i;:::-;-1:-1:-1;19757:9:1;;19544:228::o;20693:::-;20732:3;20760:10;20797:2;20794:1;20790:10;20827:2;20824:1;20820:10;20858:3;20854:2;20850:12;20845:3;20842:21;20839:47;;;20866:18;;:::i;20926:175::-;20963:3;21007:4;21000:5;20996:16;21036:4;21027:7;21024:17;21021:43;;;21044:18;;:::i;:::-;21093:1;21080:15;;20926:175;-1:-1:-1;;20926:175:1:o;22699:184::-;-1:-1:-1;;;22748:1:1;22741:88;22848:4;22845:1;22838:15;22872:4;22869:1;22862:15;22888:449;23047:2;23036:9;23029:21;23086:6;23081:2;23070:9;23066:18;23059:34;23143:6;23135;23130:2;23119:9;23115:18;23102:48;23199:1;23170:22;;;23194:2;23166:31;;;23159:42;;;;23253:2;23241:15;;;-1:-1:-1;;23237:88:1;23222:104;23218:113;;22888:449;-1:-1:-1;22888:449:1:o;25114:437::-;25193:1;25189:12;;;;25236;;;25257:61;;25311:4;25303:6;25299:17;25289:27;;25257:61;25364:2;25356:6;25353:14;25333:18;25330:38;25327:218;;;-1:-1:-1;;;25398:1:1;25391:88;25502:4;25499:1;25492:15;25530:4;25527:1;25520:15;25327:218;;25114:437;;;:::o;26508:274::-;26548:1;26574;26564:189;;-1:-1:-1;;;26606:1:1;26599:88;26710:4;26707:1;26700:15;26738:4;26735:1;26728:15;26564:189;-1:-1:-1;26767:9:1;;26508:274::o;26787:125::-;26827:4;26855:1;26852;26849:8;26846:34;;;26860:18;;:::i;:::-;-1:-1:-1;26897:9:1;;26787:125::o;27998:195::-;28037:3;-1:-1:-1;;28061:5:1;28058:77;28055:103;;;28138:18;;:::i;:::-;-1:-1:-1;28185:1:1;28174:13;;27998:195::o;30270:196::-;30309:3;30337:5;30327:39;;30346:18;;:::i;:::-;-1:-1:-1;;;30382:78:1;;30270:196::o;30818:241::-;30856:3;30900:6;30893:5;30889:18;30926:7;30916:41;;30937:18;;:::i;:::-;-1:-1:-1;;30973:80:1;;30818:241;-1:-1:-1;;30818:241:1:o;32467:465::-;32724:2;32713:9;32706:21;32687:4;32750:56;32802:2;32791:9;32787:18;32779:6;32750:56;:::i;:::-;32854:9;32846:6;32842:22;32837:2;32826:9;32822:18;32815:50;32882:44;32919:6;32911;32882:44;:::i;:::-;32874:52;32467:465;-1:-1:-1;;;;;32467:465:1:o;35367:584::-;35589:4;-1:-1:-1;;;;;35699:2:1;35691:6;35687:15;35676:9;35669:34;35751:2;35743:6;35739:15;35734:2;35723:9;35719:18;35712:43;;35791:6;35786:2;35775:9;35771:18;35764:34;35834:6;35829:2;35818:9;35814:18;35807:34;35878:3;35872;35861:9;35857:19;35850:32;35899:46;35940:3;35929:9;35925:19;35917:6;35899:46;:::i;:::-;35891:54;35367:584;-1:-1:-1;;;;;;;35367:584:1:o;35956:249::-;36025:6;36078:2;36066:9;36057:7;36053:23;36049:32;36046:52;;;36094:1;36091;36084:12;36046:52;36126:9;36120:16;36145:30;36169:5;36145:30;:::i;36210:179::-;36245:3;36287:1;36269:16;36266:23;36263:120;;;36333:1;36330;36327;36312:23;-1:-1:-1;36370:1:1;36364:8;36359:3;36355:18;36263:120;36210:179;:::o;36394:731::-;36433:3;36475:4;36457:16;36454:26;36451:39;;;36394:731;:::o;36451:39::-;36517:2;36511:9;36539:66;36660:2;36642:16;36638:25;36635:1;36629:4;36614:50;36693:4;36687:11;36717:16;36752:18;36823:2;36816:4;36808:6;36804:17;36801:25;36796:2;36788:6;36785:14;36782:45;36779:58;;;36830:5;;;;;36394:731;:::o;36779:58::-;36867:6;36861:4;36857:17;36846:28;;36903:3;36897:10;36930:2;36922:6;36919:14;36916:27;;;36936:5;;;;;;36394:731;:::o;36916:27::-;37020:2;37001:16;36995:4;36991:27;36987:36;36980:4;36971:6;36966:3;36962:16;36958:27;36955:69;36952:82;;;37027:5;;;;;;36394:731;:::o;36952:82::-;37043:57;37094:4;37085:6;37077;37073:19;37069:30;37063:4;37043:57;:::i;:::-;-1:-1:-1;37116:3:1;;36394:731;-1:-1:-1;;;;;36394:731:1:o
Swarm Source
ipfs://f7ef7b8ea4d301341e3d54725b93f319aa9ed118e447295bd9c55ebeb11ab7ef
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.