ERC-1155
Overview
Max Total Supply
998
Holders
523
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AverageTV
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /* . . . \ / \ / \ / _\/_ _\/_ _\/_ | | | | | | |____| |____| |____| _||_ _||_ _||_ Average TV by Average Creatures */ pragma solidity ^0.8.2; import "./ERC1155.sol"; import "./ERC1155Burnable.sol"; import "./Ownable.sol"; import "./Strings.sol"; import "./MerkleProof.sol"; abstract contract CollectionContract { function balanceOf(address owner) external virtual view returns (uint256 balance); } contract AverageTV is ERC1155, ERC1155Burnable, Ownable { using Strings for uint256; string public uriSuffix = ".json"; mapping(address => uint256) public claimedList; bytes32 public _merkleRoot; bool public paused = true; uint256[] public _currentTokens; uint256 public _toLoop = 0; uint256 public _week = 0; uint256[40] claimedBitMap; CollectionContract private _avgcreatures = CollectionContract(0xbB00B6B675b9a8Db9aA3b68Bf0aAc5e25f901656); constructor(string memory uri_) ERC1155(uri_) {} // Bouncer modifier claimCompliance() { require(_avgcreatures.balanceOf(msg.sender) > 0, "You have no Creatures in this wallet."); require(!paused, "Average TV Token Claim is paused."); require(claimedList[msg.sender] != _week, "This wallet already claimed."); _; } // Claim your Tokens! function averageTVClaim(bytes32[] calldata _merkleProof) public claimCompliance() { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, _merkleRoot, leaf), "Your address is not on the snapshot. :("); claimedList[msg.sender] = _week; _mint(msg.sender, _currentTokens[_toLoop], 1, '0x0000'); randomToken(); } // Spread token ID function randomToken() internal { if (_currentTokens.length > 1) { if (_toLoop + 1 > _currentTokens.length - 1) { _toLoop = 0; } else { _toLoop++; } } } // Our judges can help in Average Town function smallClaimsCourt( address[] memory addresses, uint256[] memory ids, uint256[] memory amounts, bytes[] memory data ) external onlyOwner { uint numWallets = addresses.length; require(numWallets == ids.length, "number of ids need to match number of addresses"); require(numWallets == amounts.length, "number of amounts need to match number of addresses"); for (uint i = 0; i < numWallets; i++) { _mint(addresses[i], ids[i], amounts[i], data[i]); } } // Update our current Tokens being Claimed function updateCurrentTokens(uint256[] memory newTokens) public onlyOwner { _currentTokens = newTokens; _toLoop = 0; } // Retrieve URI function uri(uint id_) public view override returns (string memory) { return string(abi.encodePacked(super.uri(id_), id_.toString(), uriSuffix)); } // Set new URI function setURI(string memory uri_) external onlyOwner { _setURI(uri_); } // Set new URI suffix function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } // Set current claim week function setWeek(uint256 newWeek) public onlyOwner { _week = newWeek; } // Retrieve current claim week function currentWeek() public view returns (uint256) { return _week; } // Show tokens being claimed function showCurrentTokens() public view returns (uint256[] memory) { return _currentTokens; } // Pause contract... function setPaused(bool _state) public onlyOwner { paused = _state; } // Set new merkle root function setMerkleRoot(bytes32 merkleRoot) public onlyOwner { _merkleRoot = merkleRoot; } // Avoid happy accidents function withdraw() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // 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 Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; import "./IERC1155Receiver.sol"; import "./IERC1155MetadataURI.sol"; import "./Address.sol"; import "./Context.sol"; import "./ERC165.sol"; /** * @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 ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).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), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); 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, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); 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, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; import "./ERC1155.sol"; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; /** * @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 IERC1155MetadataURI is IERC1155 { /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_currentTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_toLoop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_week","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"averageTVClaim","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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentWeek","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWeek","type":"uint256"}],"name":"setWeek","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showCurrentTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"smallClaimsCourt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newTokens","type":"uint256[]"}],"name":"updateCurrentTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600490805190602001906200005192919062000223565b506001600760006101000a81548160ff02191690831515021790555060006009556000600a5573bb00b6b675b9a8db9aa3b68bf0aac5e25f901656603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d957600080fd5b506040516200552b3803806200552b8339818101604052810190620000ff919062000351565b8062000111816200013960201b60201c565b5062000132620001266200015560201b60201c565b6200015d60201b60201c565b5062000526565b80600290805190602001906200015192919062000223565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002319062000437565b90600052602060002090601f016020900481019282620002555760008555620002a1565b82601f106200027057805160ff1916838001178555620002a1565b82800160010185558215620002a1579182015b82811115620002a057825182559160200191906001019062000283565b5b509050620002b09190620002b4565b5090565b5b80821115620002cf576000816000905550600101620002b5565b5090565b6000620002ea620002e484620003cb565b620003a2565b90508281526020810184848401111562000309576200030862000506565b5b6200031684828562000401565b509392505050565b600082601f83011262000336576200033562000501565b5b815162000348848260208601620002d3565b91505092915050565b6000602082840312156200036a576200036962000510565b5b600082015167ffffffffffffffff8111156200038b576200038a6200050b565b5b62000399848285016200031e565b91505092915050565b6000620003ae620003c1565b9050620003bc82826200046d565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e957620003e8620004d2565b5b620003f48262000515565b9050602081019050919050565b60005b838110156200042157808201518184015260208101905062000404565b8381111562000431576000848401525b50505050565b600060028204905060018216806200045057607f821691505b60208210811415620004675762000466620004a3565b5b50919050565b620004788262000515565b810181811067ffffffffffffffff821117156200049a5762000499620004d2565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b614ff580620005366000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c80633ccfd60b1161010f578063a22cb465116100a2578063f242432a11610071578063f242432a14610553578063f2fde38b1461056f578063f5298aca1461058b578063fd38b8bf146105a7576101e4565b8063a22cb465146104b9578063b92b5a1e146104d5578063da7cbba3146104f3578063e985e9c514610523576101e4565b80636b20c454116100de5780636b20c45414610459578063715018a6146104755780637cb647591461047f5780638da5cb5b1461049b576101e4565b80633ccfd60b146103e35780634e1273f4146103ed5780635503a0e81461041d5780635c975abb1461043b576101e4565b806316ba10e0116101875780632eb2c2d6116101565780632eb2c2d6146103715780632fc37ab21461038d57806330920118146103ab5780633b5af27b146103c7576101e4565b806316ba10e0146102ed57806316c38b3c14610309578063226467a0146103255780632bf02bfd14610355576101e4565b806303d79139116101c357806303d791391461026557806306575c89146102815780630a2e828c1461029f5780630e89341c146102bd576101e4565b8062fdd58e146101e957806301ffc9a71461021957806302fe530514610249575b600080fd5b61020360048036038101906101fe9190613566565b6105c5565b60405161021091906142cb565b60405180910390f35b610233600480360381019061022e9190613838565b61068e565b6040516102409190613fd3565b60405180910390f35b610263600480360381019061025e9190613892565b610770565b005b61027f600480360381019061027a9190613795565b6107f8565b005b610289610896565b60405161029691906142cb565b60405180910390f35b6102a76108a0565b6040516102b49190613f7a565b60405180910390f35b6102d760048036038101906102d291906138db565b6108f8565b6040516102e49190614009565b60405180910390f35b61030760048036038101906103029190613892565b610936565b005b610323600480360381019061031e91906137de565b6109cc565b005b61033f600480360381019061033a91906138db565b610a65565b60405161034c91906142cb565b60405180910390f35b61036f600480360381019061036a9190613671565b610a89565b005b61038b60048036038101906103869190613335565b610c2b565b005b610395610ccc565b6040516103a29190613fee565b60405180910390f35b6103c560048036038101906103c091906138db565b610cd2565b005b6103e160048036038101906103dc9190613748565b610d58565b005b6103eb611086565b005b610407600480360381019061040291906135f9565b61114b565b6040516104149190613f7a565b60405180910390f35b610425611264565b6040516104329190614009565b60405180910390f35b6104436112f2565b6040516104509190613fd3565b60405180910390f35b610473600480360381019061046e919061349b565b611305565b005b61047d6113a2565b005b6104996004803603810190610494919061380b565b61142a565b005b6104a36114b0565b6040516104b09190613e9d565b60405180910390f35b6104d360048036038101906104ce9190613526565b6114da565b005b6104dd6114f0565b6040516104ea91906142cb565b60405180910390f35b61050d600480360381019061050891906132c8565b6114f6565b60405161051a91906142cb565b60405180910390f35b61053d600480360381019061053891906132f5565b61150e565b60405161054a9190613fd3565b60405180910390f35b61056d60048036038101906105689190613404565b6115a2565b005b610589600480360381019061058491906132c8565b611643565b005b6105a560048036038101906105a091906135a6565b61173b565b005b6105af6117d8565b6040516105bc91906142cb565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d9061408b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107695750610768826117de565b5b9050919050565b610778611848565b73ffffffffffffffffffffffffffffffffffffffff166107966114b0565b73ffffffffffffffffffffffffffffffffffffffff16146107ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e3906141eb565b60405180910390fd5b6107f581611850565b50565b610800611848565b73ffffffffffffffffffffffffffffffffffffffff1661081e6114b0565b73ffffffffffffffffffffffffffffffffffffffff1614610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b906141eb565b60405180910390fd5b806008908051906020019061088a929190612e17565b50600060098190555050565b6000600a54905090565b606060088054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b8154815260200190600101908083116108da575b5050505050905090565b60606109038261186a565b61090c836118fe565b600460405160200161092093929190613e6c565b6040516020818303038152906040529050919050565b61093e611848565b73ffffffffffffffffffffffffffffffffffffffff1661095c6114b0565b73ffffffffffffffffffffffffffffffffffffffff16146109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a9906141eb565b60405180910390fd5b80600490805190602001906109c8929190612e64565b5050565b6109d4611848565b73ffffffffffffffffffffffffffffffffffffffff166109f26114b0565b73ffffffffffffffffffffffffffffffffffffffff1614610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f906141eb565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b60088181548110610a7557600080fd5b906000526020600020016000915090505481565b610a91611848565b73ffffffffffffffffffffffffffffffffffffffff16610aaf6114b0565b73ffffffffffffffffffffffffffffffffffffffff1614610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc906141eb565b60405180910390fd5b60008451905083518114610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b45906140ab565b60405180910390fd5b82518114610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b889061418b565b60405180910390fd5b60005b81811015610c2357610c10868281518110610bb257610bb16147be565b5b6020026020010151868381518110610bcd57610bcc6147be565b5b6020026020010151868481518110610be857610be76147be565b5b6020026020010151868581518110610c0357610c026147be565b5b6020026020010151611a5f565b8080610c1b90614689565b915050610b94565b505050505050565b610c33611848565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c795750610c7885610c73611848565b61150e565b5b610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf9061416b565b60405180910390fd5b610cc58585858585611bf5565b5050505050565b60065481565b610cda611848565b73ffffffffffffffffffffffffffffffffffffffff16610cf86114b0565b73ffffffffffffffffffffffffffffffffffffffff1614610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d45906141eb565b60405180910390fd5b80600a8190555050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610db59190613e9d565b60206040518083038186803b158015610dcd57600080fd5b505afa158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190613908565b11610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c9061412b565b60405180910390fd5b600760009054906101000a900460ff1615610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c9061406b565b60405180910390fd5b600a54600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f10906142ab565b60405180910390fd5b600033604051602001610f2c9190613e25565b604051602081830303815290604052805190602001209050610f92838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060065483611f09565b610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc89061420b565b60405180910390fd5b600a54600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061107933600860095481548110611031576110306147be565b5b906000526020600020015460016040518060400160405280600681526020017f3078303030300000000000000000000000000000000000000000000000000000815250611a5f565b611081611f20565b505050565b61108e611848565b73ffffffffffffffffffffffffffffffffffffffff166110ac6114b0565b73ffffffffffffffffffffffffffffffffffffffff1614611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f9906141eb565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611148573d6000803e3d6000fd5b50565b60608151835114611191576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111889061424b565b60405180910390fd5b6000835167ffffffffffffffff8111156111ae576111ad6147ed565b5b6040519080825280602002602001820160405280156111dc5781602001602082028036833780820191505090505b50905060005b845181101561125957611229858281518110611201576112006147be565b5b602002602001015185838151811061121c5761121b6147be565b5b60200260200101516105c5565b82828151811061123c5761123b6147be565b5b6020026020010181815250508061125290614689565b90506111e2565b508091505092915050565b6004805461127190614626565b80601f016020809104026020016040519081016040528092919081815260200182805461129d90614626565b80156112ea5780601f106112bf576101008083540402835291602001916112ea565b820191906000526020600020905b8154815290600101906020018083116112cd57829003601f168201915b505050505081565b600760009054906101000a900460ff1681565b61130d611848565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061135357506113528361134d611848565b61150e565b5b611392576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113899061410b565b60405180910390fd5b61139d838383611f7e565b505050565b6113aa611848565b73ffffffffffffffffffffffffffffffffffffffff166113c86114b0565b73ffffffffffffffffffffffffffffffffffffffff161461141e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611415906141eb565b60405180910390fd5b611428600061222f565b565b611432611848565b73ffffffffffffffffffffffffffffffffffffffff166114506114b0565b73ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d906141eb565b60405180910390fd5b8060068190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ec6114e5611848565b83836122f5565b5050565b600a5481565b60056020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115aa611848565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806115f057506115ef856115ea611848565b61150e565b5b61162f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116269061410b565b60405180910390fd5b61163c8585858585612462565b5050505050565b61164b611848565b73ffffffffffffffffffffffffffffffffffffffff166116696114b0565b73ffffffffffffffffffffffffffffffffffffffff16146116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906141eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561172f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611726906140cb565b60405180910390fd5b6117388161222f565b50565b611743611848565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611789575061178883611783611848565b61150e565b5b6117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf9061410b565b60405180910390fd5b6117d38383836126e4565b505050565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611866929190612e64565b5050565b60606002805461187990614626565b80601f01602080910402602001604051908101604052809291908181526020018280546118a590614626565b80156118f25780601f106118c7576101008083540402835291602001916118f2565b820191906000526020600020905b8154815290600101906020018083116118d557829003601f168201915b50505050509050919050565b60606000821415611946576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a5a565b600082905060005b6000821461197857808061196190614689565b915050600a826119719190614501565b915061194e565b60008167ffffffffffffffff811115611994576119936147ed565b5b6040519080825280601f01601f1916602001820160405280156119c65781602001600182028036833780820191505090505b5090505b60008514611a53576001826119df9190614532565b9150600a856119ee9190614700565b60306119fa91906144ab565b60f81b818381518110611a1057611a0f6147be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a4c9190614501565b94506119ca565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac69061428b565b60405180910390fd5b6000611ad9611848565b9050611afa81600087611aeb88612901565b611af488612901565b8761297b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b5991906144ab565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611bd79291906142e6565b60405180910390a4611bee81600087878787612983565b5050505050565b8151835114611c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c309061426b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca09061414b565b60405180910390fd5b6000611cb3611848565b9050611cc381878787878761297b565b60005b8451811015611e74576000858281518110611ce457611ce36147be565b5b602002602001015190506000858381518110611d0357611d026147be565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b906141cb565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5991906144ab565b9250508190555050505080611e6d90614689565b9050611cc6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611eeb929190613f9c565b60405180910390a4611f01818787878787612b6a565b505050505050565b600082611f168584612d51565b1490509392505050565b60016008805490501115611f7c576001600880549050611f409190614532565b6001600954611f4f91906144ab565b1115611f62576000600981905550611f7b565b60096000815480929190611f7590614689565b91905055505b5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906141ab565b60405180910390fd5b8051825114612032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120299061426b565b60405180910390fd5b600061203c611848565b905061205c8185600086866040518060200160405280600081525061297b565b60005b83518110156121a957600084828151811061207d5761207c6147be565b5b60200260200101519050600084838151811061209c5761209b6147be565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561213d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612134906140eb565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806121a190614689565b91505061205f565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612221929190613f9c565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b9061422b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124559190613fd3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c99061414b565b60405180910390fd5b60006124dc611848565b90506124fc8187876124ed88612901565b6124f688612901565b8761297b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a906141cb565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461264891906144ab565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516126c59291906142e6565b60405180910390a46126db828888888888612983565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906141ab565b60405180910390fd5b600061275e611848565b905061278e8185600061277087612901565b61277987612901565b6040518060200160405280600081525061297b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281c906140eb565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516128f29291906142e6565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156129205761291f6147ed565b5b60405190808252806020026020018201604052801561294e5781602001602082028036833780820191505090505b5090508281600081518110612966576129656147be565b5b60200260200101818152505080915050919050565b505050505050565b6129a28473ffffffffffffffffffffffffffffffffffffffff16612e04565b15612b62578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016129e8959493929190613f20565b602060405180830381600087803b158015612a0257600080fd5b505af1925050508015612a3357506040513d601f19601f82011682018060405250810190612a309190613865565b60015b612ad957612a3f61481c565b806308c379a01415612a9c5750612a54614eb6565b80612a5f5750612a9e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a939190614009565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad09061402b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b579061404b565b60405180910390fd5b505b505050505050565b612b898473ffffffffffffffffffffffffffffffffffffffff16612e04565b15612d49578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612bcf959493929190613eb8565b602060405180830381600087803b158015612be957600080fd5b505af1925050508015612c1a57506040513d601f19601f82011682018060405250810190612c179190613865565b60015b612cc057612c2661481c565b806308c379a01415612c835750612c3b614eb6565b80612c465750612c85565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a9190614009565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb79061402b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e9061404b565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015612df9576000858281518110612d7857612d776147be565b5b60200260200101519050808311612db9578281604051602001612d9c929190613e40565b604051602081830303815290604052805190602001209250612de5565b8083604051602001612dcc929190613e40565b6040516020818303038152906040528051906020012092505b508080612df190614689565b915050612d5a565b508091505092915050565b600080823b905060008111915050919050565b828054828255906000526020600020908101928215612e53579160200282015b82811115612e52578251825591602001919060010190612e37565b5b509050612e609190612eea565b5090565b828054612e7090614626565b90600052602060002090601f016020900481019282612e925760008555612ed9565b82601f10612eab57805160ff1916838001178555612ed9565b82800160010185558215612ed9579182015b82811115612ed8578251825591602001919060010190612ebd565b5b509050612ee69190612eea565b5090565b5b80821115612f03576000816000905550600101612eeb565b5090565b6000612f1a612f1584614334565b61430f565b90508083825260208201905082856020860282011115612f3d57612f3c614848565b5b60005b85811015612f6d5781612f5388826130f9565b845260208401935060208301925050600181019050612f40565b5050509392505050565b6000612f8a612f8584614360565b61430f565b90508083825260208201905082856020860282011115612fad57612fac614848565b5b60005b85811015612ffb57813567ffffffffffffffff811115612fd357612fd2614843565b5b808601612fe08982613242565b85526020850194506020840193505050600181019050612fb0565b5050509392505050565b60006130186130138461438c565b61430f565b9050808382526020820190508285602086028201111561303b5761303a614848565b5b60005b8581101561306b5781613051888261329e565b84526020840193506020830192505060018101905061303e565b5050509392505050565b6000613088613083846143b8565b61430f565b9050828152602081018484840111156130a4576130a361484d565b5b6130af8482856145e4565b509392505050565b60006130ca6130c5846143e9565b61430f565b9050828152602081018484840111156130e6576130e561484d565b5b6130f18482856145e4565b509392505050565b60008135905061310881614f4c565b92915050565b600082601f83011261312357613122614843565b5b8135613133848260208601612f07565b91505092915050565b60008083601f84011261315257613151614843565b5b8235905067ffffffffffffffff81111561316f5761316e61483e565b5b60208301915083602082028301111561318b5761318a614848565b5b9250929050565b600082601f8301126131a7576131a6614843565b5b81356131b7848260208601612f77565b91505092915050565b600082601f8301126131d5576131d4614843565b5b81356131e5848260208601613005565b91505092915050565b6000813590506131fd81614f63565b92915050565b60008135905061321281614f7a565b92915050565b60008135905061322781614f91565b92915050565b60008151905061323c81614f91565b92915050565b600082601f83011261325757613256614843565b5b8135613267848260208601613075565b91505092915050565b600082601f83011261328557613284614843565b5b81356132958482602086016130b7565b91505092915050565b6000813590506132ad81614fa8565b92915050565b6000815190506132c281614fa8565b92915050565b6000602082840312156132de576132dd614857565b5b60006132ec848285016130f9565b91505092915050565b6000806040838503121561330c5761330b614857565b5b600061331a858286016130f9565b925050602061332b858286016130f9565b9150509250929050565b600080600080600060a0868803121561335157613350614857565b5b600061335f888289016130f9565b9550506020613370888289016130f9565b945050604086013567ffffffffffffffff81111561339157613390614852565b5b61339d888289016131c0565b935050606086013567ffffffffffffffff8111156133be576133bd614852565b5b6133ca888289016131c0565b925050608086013567ffffffffffffffff8111156133eb576133ea614852565b5b6133f788828901613242565b9150509295509295909350565b600080600080600060a086880312156134205761341f614857565b5b600061342e888289016130f9565b955050602061343f888289016130f9565b94505060406134508882890161329e565b93505060606134618882890161329e565b925050608086013567ffffffffffffffff81111561348257613481614852565b5b61348e88828901613242565b9150509295509295909350565b6000806000606084860312156134b4576134b3614857565b5b60006134c2868287016130f9565b935050602084013567ffffffffffffffff8111156134e3576134e2614852565b5b6134ef868287016131c0565b925050604084013567ffffffffffffffff8111156135105761350f614852565b5b61351c868287016131c0565b9150509250925092565b6000806040838503121561353d5761353c614857565b5b600061354b858286016130f9565b925050602061355c858286016131ee565b9150509250929050565b6000806040838503121561357d5761357c614857565b5b600061358b858286016130f9565b925050602061359c8582860161329e565b9150509250929050565b6000806000606084860312156135bf576135be614857565b5b60006135cd868287016130f9565b93505060206135de8682870161329e565b92505060406135ef8682870161329e565b9150509250925092565b600080604083850312156136105761360f614857565b5b600083013567ffffffffffffffff81111561362e5761362d614852565b5b61363a8582860161310e565b925050602083013567ffffffffffffffff81111561365b5761365a614852565b5b613667858286016131c0565b9150509250929050565b6000806000806080858703121561368b5761368a614857565b5b600085013567ffffffffffffffff8111156136a9576136a8614852565b5b6136b58782880161310e565b945050602085013567ffffffffffffffff8111156136d6576136d5614852565b5b6136e2878288016131c0565b935050604085013567ffffffffffffffff81111561370357613702614852565b5b61370f878288016131c0565b925050606085013567ffffffffffffffff8111156137305761372f614852565b5b61373c87828801613192565b91505092959194509250565b6000806020838503121561375f5761375e614857565b5b600083013567ffffffffffffffff81111561377d5761377c614852565b5b6137898582860161313c565b92509250509250929050565b6000602082840312156137ab576137aa614857565b5b600082013567ffffffffffffffff8111156137c9576137c8614852565b5b6137d5848285016131c0565b91505092915050565b6000602082840312156137f4576137f3614857565b5b6000613802848285016131ee565b91505092915050565b60006020828403121561382157613820614857565b5b600061382f84828501613203565b91505092915050565b60006020828403121561384e5761384d614857565b5b600061385c84828501613218565b91505092915050565b60006020828403121561387b5761387a614857565b5b60006138898482850161322d565b91505092915050565b6000602082840312156138a8576138a7614857565b5b600082013567ffffffffffffffff8111156138c6576138c5614852565b5b6138d284828501613270565b91505092915050565b6000602082840312156138f1576138f0614857565b5b60006138ff8482850161329e565b91505092915050565b60006020828403121561391e5761391d614857565b5b600061392c848285016132b3565b91505092915050565b60006139418383613e07565b60208301905092915050565b61395681614566565b82525050565b61396d61396882614566565b6146d2565b82525050565b600061397e8261443f565b613988818561446d565b93506139938361441a565b8060005b838110156139c45781516139ab8882613935565b97506139b683614460565b925050600181019050613997565b5085935050505092915050565b6139da81614578565b82525050565b6139e981614584565b82525050565b613a006139fb82614584565b6146e4565b82525050565b6000613a118261444a565b613a1b818561447e565b9350613a2b8185602086016145f3565b613a348161485c565b840191505092915050565b6000613a4a82614455565b613a54818561448f565b9350613a648185602086016145f3565b613a6d8161485c565b840191505092915050565b6000613a8382614455565b613a8d81856144a0565b9350613a9d8185602086016145f3565b80840191505092915050565b60008154613ab681614626565b613ac081866144a0565b94506001821660008114613adb5760018114613aec57613b1f565b60ff19831686528186019350613b1f565b613af58561442a565b60005b83811015613b1757815481890152600182019150602081019050613af8565b838801955050505b50505092915050565b6000613b3560348361448f565b9150613b4082614887565b604082019050919050565b6000613b5860288361448f565b9150613b63826148d6565b604082019050919050565b6000613b7b60218361448f565b9150613b8682614925565b604082019050919050565b6000613b9e602b8361448f565b9150613ba982614974565b604082019050919050565b6000613bc1602f8361448f565b9150613bcc826149c3565b604082019050919050565b6000613be460268361448f565b9150613bef82614a12565b604082019050919050565b6000613c0760248361448f565b9150613c1282614a61565b604082019050919050565b6000613c2a60298361448f565b9150613c3582614ab0565b604082019050919050565b6000613c4d60258361448f565b9150613c5882614aff565b604082019050919050565b6000613c7060258361448f565b9150613c7b82614b4e565b604082019050919050565b6000613c9360328361448f565b9150613c9e82614b9d565b604082019050919050565b6000613cb660338361448f565b9150613cc182614bec565b604082019050919050565b6000613cd960238361448f565b9150613ce482614c3b565b604082019050919050565b6000613cfc602a8361448f565b9150613d0782614c8a565b604082019050919050565b6000613d1f60208361448f565b9150613d2a82614cd9565b602082019050919050565b6000613d4260278361448f565b9150613d4d82614d02565b604082019050919050565b6000613d6560298361448f565b9150613d7082614d51565b604082019050919050565b6000613d8860298361448f565b9150613d9382614da0565b604082019050919050565b6000613dab60288361448f565b9150613db682614def565b604082019050919050565b6000613dce60218361448f565b9150613dd982614e3e565b604082019050919050565b6000613df1601c8361448f565b9150613dfc82614e8d565b602082019050919050565b613e10816145da565b82525050565b613e1f816145da565b82525050565b6000613e31828461395c565b60148201915081905092915050565b6000613e4c82856139ef565b602082019150613e5c82846139ef565b6020820191508190509392505050565b6000613e788286613a78565b9150613e848285613a78565b9150613e908284613aa9565b9150819050949350505050565b6000602082019050613eb2600083018461394d565b92915050565b600060a082019050613ecd600083018861394d565b613eda602083018761394d565b8181036040830152613eec8186613973565b90508181036060830152613f008185613973565b90508181036080830152613f148184613a06565b90509695505050505050565b600060a082019050613f35600083018861394d565b613f42602083018761394d565b613f4f6040830186613e16565b613f5c6060830185613e16565b8181036080830152613f6e8184613a06565b90509695505050505050565b60006020820190508181036000830152613f948184613973565b905092915050565b60006040820190508181036000830152613fb68185613973565b90508181036020830152613fca8184613973565b90509392505050565b6000602082019050613fe860008301846139d1565b92915050565b600060208201905061400360008301846139e0565b92915050565b600060208201905081810360008301526140238184613a3f565b905092915050565b6000602082019050818103600083015261404481613b28565b9050919050565b6000602082019050818103600083015261406481613b4b565b9050919050565b6000602082019050818103600083015261408481613b6e565b9050919050565b600060208201905081810360008301526140a481613b91565b9050919050565b600060208201905081810360008301526140c481613bb4565b9050919050565b600060208201905081810360008301526140e481613bd7565b9050919050565b6000602082019050818103600083015261410481613bfa565b9050919050565b6000602082019050818103600083015261412481613c1d565b9050919050565b6000602082019050818103600083015261414481613c40565b9050919050565b6000602082019050818103600083015261416481613c63565b9050919050565b6000602082019050818103600083015261418481613c86565b9050919050565b600060208201905081810360008301526141a481613ca9565b9050919050565b600060208201905081810360008301526141c481613ccc565b9050919050565b600060208201905081810360008301526141e481613cef565b9050919050565b6000602082019050818103600083015261420481613d12565b9050919050565b6000602082019050818103600083015261422481613d35565b9050919050565b6000602082019050818103600083015261424481613d58565b9050919050565b6000602082019050818103600083015261426481613d7b565b9050919050565b6000602082019050818103600083015261428481613d9e565b9050919050565b600060208201905081810360008301526142a481613dc1565b9050919050565b600060208201905081810360008301526142c481613de4565b9050919050565b60006020820190506142e06000830184613e16565b92915050565b60006040820190506142fb6000830185613e16565b6143086020830184613e16565b9392505050565b600061431961432a565b90506143258282614658565b919050565b6000604051905090565b600067ffffffffffffffff82111561434f5761434e6147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561437b5761437a6147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143a7576143a66147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d3576143d26147ed565b5b6143dc8261485c565b9050602081019050919050565b600067ffffffffffffffff821115614404576144036147ed565b5b61440d8261485c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144b6826145da565b91506144c1836145da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144f6576144f5614731565b5b828201905092915050565b600061450c826145da565b9150614517836145da565b92508261452757614526614760565b5b828204905092915050565b600061453d826145da565b9150614548836145da565b92508282101561455b5761455a614731565b5b828203905092915050565b6000614571826145ba565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146115780820151818401526020810190506145f6565b83811115614620576000848401525b50505050565b6000600282049050600182168061463e57607f821691505b602082108114156146525761465161478f565b5b50919050565b6146618261485c565b810181811067ffffffffffffffff821117156146805761467f6147ed565b5b80604052505050565b6000614694826145da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146c7576146c6614731565b5b600182019050919050565b60006146dd826146ee565b9050919050565b6000819050919050565b60006146f98261486d565b9050919050565b600061470b826145da565b9150614716836145da565b92508261472657614725614760565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561483b5760046000803e61483860005161487a565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4176657261676520545620546f6b656e20436c61696d2069732070617573656460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f6e756d626572206f6620696473206e65656420746f206d61746368206e756d6260008201527f6572206f66206164647265737365730000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f2043726561747572657320696e207468697320776160008201527f6c6c65742e000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6e756d626572206f6620616d6f756e7473206e65656420746f206d617463682060008201527f6e756d626572206f662061646472657373657300000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f75722061646472657373206973206e6f74206f6e2074686520736e61707360008201527f686f742e203a2800000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f546869732077616c6c657420616c726561647920636c61696d65642e00000000600082015250565b600060443d1015614ec657614f49565b614ece61432a565b60043d036004823e80513d602482011167ffffffffffffffff82111715614ef6575050614f49565b808201805167ffffffffffffffff811115614f145750505050614f49565b80602083010160043d038501811115614f31575050505050614f49565b614f4082602001850186614658565b82955050505050505b90565b614f5581614566565b8114614f6057600080fd5b50565b614f6c81614578565b8114614f7757600080fd5b50565b614f8381614584565b8114614f8e57600080fd5b50565b614f9a8161458e565b8114614fa557600080fd5b50565b614fb1816145da565b8114614fbc57600080fd5b5056fea2646970667358221220ffb02c5bd8489e31d5f745db4374eb3969f518e821176f5f91bac3af1b36ecd864736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d564a3133375048587a627a79556b6e37557773696b53524135797671486437504d47525571325252393448652f000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e45760003560e01c80633ccfd60b1161010f578063a22cb465116100a2578063f242432a11610071578063f242432a14610553578063f2fde38b1461056f578063f5298aca1461058b578063fd38b8bf146105a7576101e4565b8063a22cb465146104b9578063b92b5a1e146104d5578063da7cbba3146104f3578063e985e9c514610523576101e4565b80636b20c454116100de5780636b20c45414610459578063715018a6146104755780637cb647591461047f5780638da5cb5b1461049b576101e4565b80633ccfd60b146103e35780634e1273f4146103ed5780635503a0e81461041d5780635c975abb1461043b576101e4565b806316ba10e0116101875780632eb2c2d6116101565780632eb2c2d6146103715780632fc37ab21461038d57806330920118146103ab5780633b5af27b146103c7576101e4565b806316ba10e0146102ed57806316c38b3c14610309578063226467a0146103255780632bf02bfd14610355576101e4565b806303d79139116101c357806303d791391461026557806306575c89146102815780630a2e828c1461029f5780630e89341c146102bd576101e4565b8062fdd58e146101e957806301ffc9a71461021957806302fe530514610249575b600080fd5b61020360048036038101906101fe9190613566565b6105c5565b60405161021091906142cb565b60405180910390f35b610233600480360381019061022e9190613838565b61068e565b6040516102409190613fd3565b60405180910390f35b610263600480360381019061025e9190613892565b610770565b005b61027f600480360381019061027a9190613795565b6107f8565b005b610289610896565b60405161029691906142cb565b60405180910390f35b6102a76108a0565b6040516102b49190613f7a565b60405180910390f35b6102d760048036038101906102d291906138db565b6108f8565b6040516102e49190614009565b60405180910390f35b61030760048036038101906103029190613892565b610936565b005b610323600480360381019061031e91906137de565b6109cc565b005b61033f600480360381019061033a91906138db565b610a65565b60405161034c91906142cb565b60405180910390f35b61036f600480360381019061036a9190613671565b610a89565b005b61038b60048036038101906103869190613335565b610c2b565b005b610395610ccc565b6040516103a29190613fee565b60405180910390f35b6103c560048036038101906103c091906138db565b610cd2565b005b6103e160048036038101906103dc9190613748565b610d58565b005b6103eb611086565b005b610407600480360381019061040291906135f9565b61114b565b6040516104149190613f7a565b60405180910390f35b610425611264565b6040516104329190614009565b60405180910390f35b6104436112f2565b6040516104509190613fd3565b60405180910390f35b610473600480360381019061046e919061349b565b611305565b005b61047d6113a2565b005b6104996004803603810190610494919061380b565b61142a565b005b6104a36114b0565b6040516104b09190613e9d565b60405180910390f35b6104d360048036038101906104ce9190613526565b6114da565b005b6104dd6114f0565b6040516104ea91906142cb565b60405180910390f35b61050d600480360381019061050891906132c8565b6114f6565b60405161051a91906142cb565b60405180910390f35b61053d600480360381019061053891906132f5565b61150e565b60405161054a9190613fd3565b60405180910390f35b61056d60048036038101906105689190613404565b6115a2565b005b610589600480360381019061058491906132c8565b611643565b005b6105a560048036038101906105a091906135a6565b61173b565b005b6105af6117d8565b6040516105bc91906142cb565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d9061408b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107695750610768826117de565b5b9050919050565b610778611848565b73ffffffffffffffffffffffffffffffffffffffff166107966114b0565b73ffffffffffffffffffffffffffffffffffffffff16146107ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e3906141eb565b60405180910390fd5b6107f581611850565b50565b610800611848565b73ffffffffffffffffffffffffffffffffffffffff1661081e6114b0565b73ffffffffffffffffffffffffffffffffffffffff1614610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b906141eb565b60405180910390fd5b806008908051906020019061088a929190612e17565b50600060098190555050565b6000600a54905090565b606060088054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b8154815260200190600101908083116108da575b5050505050905090565b60606109038261186a565b61090c836118fe565b600460405160200161092093929190613e6c565b6040516020818303038152906040529050919050565b61093e611848565b73ffffffffffffffffffffffffffffffffffffffff1661095c6114b0565b73ffffffffffffffffffffffffffffffffffffffff16146109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a9906141eb565b60405180910390fd5b80600490805190602001906109c8929190612e64565b5050565b6109d4611848565b73ffffffffffffffffffffffffffffffffffffffff166109f26114b0565b73ffffffffffffffffffffffffffffffffffffffff1614610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f906141eb565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b60088181548110610a7557600080fd5b906000526020600020016000915090505481565b610a91611848565b73ffffffffffffffffffffffffffffffffffffffff16610aaf6114b0565b73ffffffffffffffffffffffffffffffffffffffff1614610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc906141eb565b60405180910390fd5b60008451905083518114610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b45906140ab565b60405180910390fd5b82518114610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b889061418b565b60405180910390fd5b60005b81811015610c2357610c10868281518110610bb257610bb16147be565b5b6020026020010151868381518110610bcd57610bcc6147be565b5b6020026020010151868481518110610be857610be76147be565b5b6020026020010151868581518110610c0357610c026147be565b5b6020026020010151611a5f565b8080610c1b90614689565b915050610b94565b505050505050565b610c33611848565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c795750610c7885610c73611848565b61150e565b5b610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf9061416b565b60405180910390fd5b610cc58585858585611bf5565b5050505050565b60065481565b610cda611848565b73ffffffffffffffffffffffffffffffffffffffff16610cf86114b0565b73ffffffffffffffffffffffffffffffffffffffff1614610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d45906141eb565b60405180910390fd5b80600a8190555050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610db59190613e9d565b60206040518083038186803b158015610dcd57600080fd5b505afa158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190613908565b11610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c9061412b565b60405180910390fd5b600760009054906101000a900460ff1615610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c9061406b565b60405180910390fd5b600a54600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f10906142ab565b60405180910390fd5b600033604051602001610f2c9190613e25565b604051602081830303815290604052805190602001209050610f92838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060065483611f09565b610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc89061420b565b60405180910390fd5b600a54600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061107933600860095481548110611031576110306147be565b5b906000526020600020015460016040518060400160405280600681526020017f3078303030300000000000000000000000000000000000000000000000000000815250611a5f565b611081611f20565b505050565b61108e611848565b73ffffffffffffffffffffffffffffffffffffffff166110ac6114b0565b73ffffffffffffffffffffffffffffffffffffffff1614611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f9906141eb565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611148573d6000803e3d6000fd5b50565b60608151835114611191576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111889061424b565b60405180910390fd5b6000835167ffffffffffffffff8111156111ae576111ad6147ed565b5b6040519080825280602002602001820160405280156111dc5781602001602082028036833780820191505090505b50905060005b845181101561125957611229858281518110611201576112006147be565b5b602002602001015185838151811061121c5761121b6147be565b5b60200260200101516105c5565b82828151811061123c5761123b6147be565b5b6020026020010181815250508061125290614689565b90506111e2565b508091505092915050565b6004805461127190614626565b80601f016020809104026020016040519081016040528092919081815260200182805461129d90614626565b80156112ea5780601f106112bf576101008083540402835291602001916112ea565b820191906000526020600020905b8154815290600101906020018083116112cd57829003601f168201915b505050505081565b600760009054906101000a900460ff1681565b61130d611848565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061135357506113528361134d611848565b61150e565b5b611392576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113899061410b565b60405180910390fd5b61139d838383611f7e565b505050565b6113aa611848565b73ffffffffffffffffffffffffffffffffffffffff166113c86114b0565b73ffffffffffffffffffffffffffffffffffffffff161461141e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611415906141eb565b60405180910390fd5b611428600061222f565b565b611432611848565b73ffffffffffffffffffffffffffffffffffffffff166114506114b0565b73ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d906141eb565b60405180910390fd5b8060068190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ec6114e5611848565b83836122f5565b5050565b600a5481565b60056020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115aa611848565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806115f057506115ef856115ea611848565b61150e565b5b61162f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116269061410b565b60405180910390fd5b61163c8585858585612462565b5050505050565b61164b611848565b73ffffffffffffffffffffffffffffffffffffffff166116696114b0565b73ffffffffffffffffffffffffffffffffffffffff16146116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906141eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561172f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611726906140cb565b60405180910390fd5b6117388161222f565b50565b611743611848565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611789575061178883611783611848565b61150e565b5b6117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf9061410b565b60405180910390fd5b6117d38383836126e4565b505050565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611866929190612e64565b5050565b60606002805461187990614626565b80601f01602080910402602001604051908101604052809291908181526020018280546118a590614626565b80156118f25780601f106118c7576101008083540402835291602001916118f2565b820191906000526020600020905b8154815290600101906020018083116118d557829003601f168201915b50505050509050919050565b60606000821415611946576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a5a565b600082905060005b6000821461197857808061196190614689565b915050600a826119719190614501565b915061194e565b60008167ffffffffffffffff811115611994576119936147ed565b5b6040519080825280601f01601f1916602001820160405280156119c65781602001600182028036833780820191505090505b5090505b60008514611a53576001826119df9190614532565b9150600a856119ee9190614700565b60306119fa91906144ab565b60f81b818381518110611a1057611a0f6147be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a4c9190614501565b94506119ca565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac69061428b565b60405180910390fd5b6000611ad9611848565b9050611afa81600087611aeb88612901565b611af488612901565b8761297b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b5991906144ab565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611bd79291906142e6565b60405180910390a4611bee81600087878787612983565b5050505050565b8151835114611c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c309061426b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca09061414b565b60405180910390fd5b6000611cb3611848565b9050611cc381878787878761297b565b60005b8451811015611e74576000858281518110611ce457611ce36147be565b5b602002602001015190506000858381518110611d0357611d026147be565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b906141cb565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5991906144ab565b9250508190555050505080611e6d90614689565b9050611cc6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611eeb929190613f9c565b60405180910390a4611f01818787878787612b6a565b505050505050565b600082611f168584612d51565b1490509392505050565b60016008805490501115611f7c576001600880549050611f409190614532565b6001600954611f4f91906144ab565b1115611f62576000600981905550611f7b565b60096000815480929190611f7590614689565b91905055505b5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906141ab565b60405180910390fd5b8051825114612032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120299061426b565b60405180910390fd5b600061203c611848565b905061205c8185600086866040518060200160405280600081525061297b565b60005b83518110156121a957600084828151811061207d5761207c6147be565b5b60200260200101519050600084838151811061209c5761209b6147be565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561213d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612134906140eb565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806121a190614689565b91505061205f565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612221929190613f9c565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b9061422b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124559190613fd3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c99061414b565b60405180910390fd5b60006124dc611848565b90506124fc8187876124ed88612901565b6124f688612901565b8761297b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a906141cb565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461264891906144ab565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516126c59291906142e6565b60405180910390a46126db828888888888612983565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906141ab565b60405180910390fd5b600061275e611848565b905061278e8185600061277087612901565b61277987612901565b6040518060200160405280600081525061297b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281c906140eb565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516128f29291906142e6565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156129205761291f6147ed565b5b60405190808252806020026020018201604052801561294e5781602001602082028036833780820191505090505b5090508281600081518110612966576129656147be565b5b60200260200101818152505080915050919050565b505050505050565b6129a28473ffffffffffffffffffffffffffffffffffffffff16612e04565b15612b62578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016129e8959493929190613f20565b602060405180830381600087803b158015612a0257600080fd5b505af1925050508015612a3357506040513d601f19601f82011682018060405250810190612a309190613865565b60015b612ad957612a3f61481c565b806308c379a01415612a9c5750612a54614eb6565b80612a5f5750612a9e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a939190614009565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad09061402b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b579061404b565b60405180910390fd5b505b505050505050565b612b898473ffffffffffffffffffffffffffffffffffffffff16612e04565b15612d49578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612bcf959493929190613eb8565b602060405180830381600087803b158015612be957600080fd5b505af1925050508015612c1a57506040513d601f19601f82011682018060405250810190612c179190613865565b60015b612cc057612c2661481c565b806308c379a01415612c835750612c3b614eb6565b80612c465750612c85565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a9190614009565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb79061402b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e9061404b565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015612df9576000858281518110612d7857612d776147be565b5b60200260200101519050808311612db9578281604051602001612d9c929190613e40565b604051602081830303815290604052805190602001209250612de5565b8083604051602001612dcc929190613e40565b6040516020818303038152906040528051906020012092505b508080612df190614689565b915050612d5a565b508091505092915050565b600080823b905060008111915050919050565b828054828255906000526020600020908101928215612e53579160200282015b82811115612e52578251825591602001919060010190612e37565b5b509050612e609190612eea565b5090565b828054612e7090614626565b90600052602060002090601f016020900481019282612e925760008555612ed9565b82601f10612eab57805160ff1916838001178555612ed9565b82800160010185558215612ed9579182015b82811115612ed8578251825591602001919060010190612ebd565b5b509050612ee69190612eea565b5090565b5b80821115612f03576000816000905550600101612eeb565b5090565b6000612f1a612f1584614334565b61430f565b90508083825260208201905082856020860282011115612f3d57612f3c614848565b5b60005b85811015612f6d5781612f5388826130f9565b845260208401935060208301925050600181019050612f40565b5050509392505050565b6000612f8a612f8584614360565b61430f565b90508083825260208201905082856020860282011115612fad57612fac614848565b5b60005b85811015612ffb57813567ffffffffffffffff811115612fd357612fd2614843565b5b808601612fe08982613242565b85526020850194506020840193505050600181019050612fb0565b5050509392505050565b60006130186130138461438c565b61430f565b9050808382526020820190508285602086028201111561303b5761303a614848565b5b60005b8581101561306b5781613051888261329e565b84526020840193506020830192505060018101905061303e565b5050509392505050565b6000613088613083846143b8565b61430f565b9050828152602081018484840111156130a4576130a361484d565b5b6130af8482856145e4565b509392505050565b60006130ca6130c5846143e9565b61430f565b9050828152602081018484840111156130e6576130e561484d565b5b6130f18482856145e4565b509392505050565b60008135905061310881614f4c565b92915050565b600082601f83011261312357613122614843565b5b8135613133848260208601612f07565b91505092915050565b60008083601f84011261315257613151614843565b5b8235905067ffffffffffffffff81111561316f5761316e61483e565b5b60208301915083602082028301111561318b5761318a614848565b5b9250929050565b600082601f8301126131a7576131a6614843565b5b81356131b7848260208601612f77565b91505092915050565b600082601f8301126131d5576131d4614843565b5b81356131e5848260208601613005565b91505092915050565b6000813590506131fd81614f63565b92915050565b60008135905061321281614f7a565b92915050565b60008135905061322781614f91565b92915050565b60008151905061323c81614f91565b92915050565b600082601f83011261325757613256614843565b5b8135613267848260208601613075565b91505092915050565b600082601f83011261328557613284614843565b5b81356132958482602086016130b7565b91505092915050565b6000813590506132ad81614fa8565b92915050565b6000815190506132c281614fa8565b92915050565b6000602082840312156132de576132dd614857565b5b60006132ec848285016130f9565b91505092915050565b6000806040838503121561330c5761330b614857565b5b600061331a858286016130f9565b925050602061332b858286016130f9565b9150509250929050565b600080600080600060a0868803121561335157613350614857565b5b600061335f888289016130f9565b9550506020613370888289016130f9565b945050604086013567ffffffffffffffff81111561339157613390614852565b5b61339d888289016131c0565b935050606086013567ffffffffffffffff8111156133be576133bd614852565b5b6133ca888289016131c0565b925050608086013567ffffffffffffffff8111156133eb576133ea614852565b5b6133f788828901613242565b9150509295509295909350565b600080600080600060a086880312156134205761341f614857565b5b600061342e888289016130f9565b955050602061343f888289016130f9565b94505060406134508882890161329e565b93505060606134618882890161329e565b925050608086013567ffffffffffffffff81111561348257613481614852565b5b61348e88828901613242565b9150509295509295909350565b6000806000606084860312156134b4576134b3614857565b5b60006134c2868287016130f9565b935050602084013567ffffffffffffffff8111156134e3576134e2614852565b5b6134ef868287016131c0565b925050604084013567ffffffffffffffff8111156135105761350f614852565b5b61351c868287016131c0565b9150509250925092565b6000806040838503121561353d5761353c614857565b5b600061354b858286016130f9565b925050602061355c858286016131ee565b9150509250929050565b6000806040838503121561357d5761357c614857565b5b600061358b858286016130f9565b925050602061359c8582860161329e565b9150509250929050565b6000806000606084860312156135bf576135be614857565b5b60006135cd868287016130f9565b93505060206135de8682870161329e565b92505060406135ef8682870161329e565b9150509250925092565b600080604083850312156136105761360f614857565b5b600083013567ffffffffffffffff81111561362e5761362d614852565b5b61363a8582860161310e565b925050602083013567ffffffffffffffff81111561365b5761365a614852565b5b613667858286016131c0565b9150509250929050565b6000806000806080858703121561368b5761368a614857565b5b600085013567ffffffffffffffff8111156136a9576136a8614852565b5b6136b58782880161310e565b945050602085013567ffffffffffffffff8111156136d6576136d5614852565b5b6136e2878288016131c0565b935050604085013567ffffffffffffffff81111561370357613702614852565b5b61370f878288016131c0565b925050606085013567ffffffffffffffff8111156137305761372f614852565b5b61373c87828801613192565b91505092959194509250565b6000806020838503121561375f5761375e614857565b5b600083013567ffffffffffffffff81111561377d5761377c614852565b5b6137898582860161313c565b92509250509250929050565b6000602082840312156137ab576137aa614857565b5b600082013567ffffffffffffffff8111156137c9576137c8614852565b5b6137d5848285016131c0565b91505092915050565b6000602082840312156137f4576137f3614857565b5b6000613802848285016131ee565b91505092915050565b60006020828403121561382157613820614857565b5b600061382f84828501613203565b91505092915050565b60006020828403121561384e5761384d614857565b5b600061385c84828501613218565b91505092915050565b60006020828403121561387b5761387a614857565b5b60006138898482850161322d565b91505092915050565b6000602082840312156138a8576138a7614857565b5b600082013567ffffffffffffffff8111156138c6576138c5614852565b5b6138d284828501613270565b91505092915050565b6000602082840312156138f1576138f0614857565b5b60006138ff8482850161329e565b91505092915050565b60006020828403121561391e5761391d614857565b5b600061392c848285016132b3565b91505092915050565b60006139418383613e07565b60208301905092915050565b61395681614566565b82525050565b61396d61396882614566565b6146d2565b82525050565b600061397e8261443f565b613988818561446d565b93506139938361441a565b8060005b838110156139c45781516139ab8882613935565b97506139b683614460565b925050600181019050613997565b5085935050505092915050565b6139da81614578565b82525050565b6139e981614584565b82525050565b613a006139fb82614584565b6146e4565b82525050565b6000613a118261444a565b613a1b818561447e565b9350613a2b8185602086016145f3565b613a348161485c565b840191505092915050565b6000613a4a82614455565b613a54818561448f565b9350613a648185602086016145f3565b613a6d8161485c565b840191505092915050565b6000613a8382614455565b613a8d81856144a0565b9350613a9d8185602086016145f3565b80840191505092915050565b60008154613ab681614626565b613ac081866144a0565b94506001821660008114613adb5760018114613aec57613b1f565b60ff19831686528186019350613b1f565b613af58561442a565b60005b83811015613b1757815481890152600182019150602081019050613af8565b838801955050505b50505092915050565b6000613b3560348361448f565b9150613b4082614887565b604082019050919050565b6000613b5860288361448f565b9150613b63826148d6565b604082019050919050565b6000613b7b60218361448f565b9150613b8682614925565b604082019050919050565b6000613b9e602b8361448f565b9150613ba982614974565b604082019050919050565b6000613bc1602f8361448f565b9150613bcc826149c3565b604082019050919050565b6000613be460268361448f565b9150613bef82614a12565b604082019050919050565b6000613c0760248361448f565b9150613c1282614a61565b604082019050919050565b6000613c2a60298361448f565b9150613c3582614ab0565b604082019050919050565b6000613c4d60258361448f565b9150613c5882614aff565b604082019050919050565b6000613c7060258361448f565b9150613c7b82614b4e565b604082019050919050565b6000613c9360328361448f565b9150613c9e82614b9d565b604082019050919050565b6000613cb660338361448f565b9150613cc182614bec565b604082019050919050565b6000613cd960238361448f565b9150613ce482614c3b565b604082019050919050565b6000613cfc602a8361448f565b9150613d0782614c8a565b604082019050919050565b6000613d1f60208361448f565b9150613d2a82614cd9565b602082019050919050565b6000613d4260278361448f565b9150613d4d82614d02565b604082019050919050565b6000613d6560298361448f565b9150613d7082614d51565b604082019050919050565b6000613d8860298361448f565b9150613d9382614da0565b604082019050919050565b6000613dab60288361448f565b9150613db682614def565b604082019050919050565b6000613dce60218361448f565b9150613dd982614e3e565b604082019050919050565b6000613df1601c8361448f565b9150613dfc82614e8d565b602082019050919050565b613e10816145da565b82525050565b613e1f816145da565b82525050565b6000613e31828461395c565b60148201915081905092915050565b6000613e4c82856139ef565b602082019150613e5c82846139ef565b6020820191508190509392505050565b6000613e788286613a78565b9150613e848285613a78565b9150613e908284613aa9565b9150819050949350505050565b6000602082019050613eb2600083018461394d565b92915050565b600060a082019050613ecd600083018861394d565b613eda602083018761394d565b8181036040830152613eec8186613973565b90508181036060830152613f008185613973565b90508181036080830152613f148184613a06565b90509695505050505050565b600060a082019050613f35600083018861394d565b613f42602083018761394d565b613f4f6040830186613e16565b613f5c6060830185613e16565b8181036080830152613f6e8184613a06565b90509695505050505050565b60006020820190508181036000830152613f948184613973565b905092915050565b60006040820190508181036000830152613fb68185613973565b90508181036020830152613fca8184613973565b90509392505050565b6000602082019050613fe860008301846139d1565b92915050565b600060208201905061400360008301846139e0565b92915050565b600060208201905081810360008301526140238184613a3f565b905092915050565b6000602082019050818103600083015261404481613b28565b9050919050565b6000602082019050818103600083015261406481613b4b565b9050919050565b6000602082019050818103600083015261408481613b6e565b9050919050565b600060208201905081810360008301526140a481613b91565b9050919050565b600060208201905081810360008301526140c481613bb4565b9050919050565b600060208201905081810360008301526140e481613bd7565b9050919050565b6000602082019050818103600083015261410481613bfa565b9050919050565b6000602082019050818103600083015261412481613c1d565b9050919050565b6000602082019050818103600083015261414481613c40565b9050919050565b6000602082019050818103600083015261416481613c63565b9050919050565b6000602082019050818103600083015261418481613c86565b9050919050565b600060208201905081810360008301526141a481613ca9565b9050919050565b600060208201905081810360008301526141c481613ccc565b9050919050565b600060208201905081810360008301526141e481613cef565b9050919050565b6000602082019050818103600083015261420481613d12565b9050919050565b6000602082019050818103600083015261422481613d35565b9050919050565b6000602082019050818103600083015261424481613d58565b9050919050565b6000602082019050818103600083015261426481613d7b565b9050919050565b6000602082019050818103600083015261428481613d9e565b9050919050565b600060208201905081810360008301526142a481613dc1565b9050919050565b600060208201905081810360008301526142c481613de4565b9050919050565b60006020820190506142e06000830184613e16565b92915050565b60006040820190506142fb6000830185613e16565b6143086020830184613e16565b9392505050565b600061431961432a565b90506143258282614658565b919050565b6000604051905090565b600067ffffffffffffffff82111561434f5761434e6147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561437b5761437a6147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143a7576143a66147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d3576143d26147ed565b5b6143dc8261485c565b9050602081019050919050565b600067ffffffffffffffff821115614404576144036147ed565b5b61440d8261485c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144b6826145da565b91506144c1836145da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144f6576144f5614731565b5b828201905092915050565b600061450c826145da565b9150614517836145da565b92508261452757614526614760565b5b828204905092915050565b600061453d826145da565b9150614548836145da565b92508282101561455b5761455a614731565b5b828203905092915050565b6000614571826145ba565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146115780820151818401526020810190506145f6565b83811115614620576000848401525b50505050565b6000600282049050600182168061463e57607f821691505b602082108114156146525761465161478f565b5b50919050565b6146618261485c565b810181811067ffffffffffffffff821117156146805761467f6147ed565b5b80604052505050565b6000614694826145da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146c7576146c6614731565b5b600182019050919050565b60006146dd826146ee565b9050919050565b6000819050919050565b60006146f98261486d565b9050919050565b600061470b826145da565b9150614716836145da565b92508261472657614725614760565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561483b5760046000803e61483860005161487a565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4176657261676520545620546f6b656e20436c61696d2069732070617573656460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f6e756d626572206f6620696473206e65656420746f206d61746368206e756d6260008201527f6572206f66206164647265737365730000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f2043726561747572657320696e207468697320776160008201527f6c6c65742e000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6e756d626572206f6620616d6f756e7473206e65656420746f206d617463682060008201527f6e756d626572206f662061646472657373657300000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f75722061646472657373206973206e6f74206f6e2074686520736e61707360008201527f686f742e203a2800000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f546869732077616c6c657420616c726561647920636c61696d65642e00000000600082015250565b600060443d1015614ec657614f49565b614ece61432a565b60043d036004823e80513d602482011167ffffffffffffffff82111715614ef6575050614f49565b808201805167ffffffffffffffff811115614f145750505050614f49565b80602083010160043d038501811115614f31575050505050614f49565b614f4082602001850186614658565b82955050505050505b90565b614f5581614566565b8114614f6057600080fd5b50565b614f6c81614578565b8114614f7757600080fd5b50565b614f8381614584565b8114614f8e57600080fd5b50565b614f9a8161458e565b8114614fa557600080fd5b50565b614fb1816145da565b8114614fbc57600080fd5b5056fea2646970667358221220ffb02c5bd8489e31d5f745db4374eb3969f518e821176f5f91bac3af1b36ecd864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d564a3133375048587a627a79556b6e37557773696b53524135797671486437504d47525571325252393448652f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : uri_ (string): https://gateway.pinata.cloud/ipfs/QmVJ137PHXzbzyUkn7UwsikSRA5yvqHd7PMGRUq2RR94He/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d564a3133375048587a627a79556b6e37557773696b53524135797671
Arg [4] : 486437504d47525571325252393448652f000000000000000000000000000000
Deployed Bytecode Sourcemap
515:3277:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2115:228:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1166:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2870:79:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2545:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3221:76;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3332:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2695:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2977:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3459:75;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;754:31;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1991:505;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3990:430:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;694:26:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3107:77;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1352:373;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3689:101;;;:::i;:::-;;2500:508:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;607:33:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;724:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;708:342:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1661:101:11;;;:::i;:::-;;3563:95:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1029:85:11;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3076:153:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;819:24:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;644:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3296:166:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3529:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;392:310:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;789:26:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2115:228:3;2201:7;2247:1;2228:21;;:7;:21;;;;2220:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2314:9;:13;2324:2;2314:13;;;;;;;;;;;:22;2328:7;2314:22;;;;;;;;;;;;;;;;2307:29;;2115:228;;;;:::o;1166:305::-;1268:4;1318:26;1303:41;;;:11;:41;;;;:109;;;;1375:37;1360:52;;;:11;:52;;;;1303:109;:161;;;;1428:36;1452:11;1428:23;:36::i;:::-;1303:161;1284:180;;1166:305;;;:::o;2870:79:1:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2931:13:1::1;2939:4;2931:7;:13::i;:::-;2870:79:::0;:::o;2545:128::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2642:9:1::1;2625:14;:26;;;;;;;;;;;;:::i;:::-;;2667:1;2657:7;:11;;;;2545:128:::0;:::o;3221:76::-;3265:7;3287:5;;3280:12;;3221:76;:::o;3332:100::-;3382:16;3413:14;3406:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3332:100;:::o;2695:153::-;2748:13;2800:14;2810:3;2800:9;:14::i;:::-;2816;:3;:12;:14::i;:::-;2832:9;2783:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2769:74;;2695:153;;;:::o;2977:98::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3060:10:1::1;3048:9;:22;;;;;;;;;;;;:::i;:::-;;2977:98:::0;:::o;3459:75::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3523:6:1::1;3514;;:15;;;;;;;;;;;;;;;;;;3459:75:::0;:::o;754:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1991:505::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2162:15:1::1;2180:9;:16;2162:34;;2224:3;:10;2210;:24;2202:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;2314:7;:14;2300:10;:28;2292:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;2396:6;2391:101;2412:10;2408:1;:14;2391:101;;;2437:48;2443:9;2453:1;2443:12;;;;;;;;:::i;:::-;;;;;;;;2457:3;2461:1;2457:6;;;;;;;;:::i;:::-;;;;;;;;2465:7;2473:1;2465:10;;;;;;;;:::i;:::-;;;;;;;;2477:4;2482:1;2477:7;;;;;;;;:::i;:::-;;;;;;;;2437:5;:48::i;:::-;2424:3;;;;;:::i;:::-;;;;2391:101;;;;2156:340;1991:505:::0;;;;:::o;3990:430:3:-;4223:12;:10;:12::i;:::-;4215:20;;:4;:20;;;:60;;;;4239:36;4256:4;4262:12;:10;:12::i;:::-;4239:16;:36::i;:::-;4215:60;4194:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4361:52;4384:4;4390:2;4394:3;4399:7;4408:4;4361:22;:52::i;:::-;3990:430;;;;;:::o;694:26:1:-;;;;:::o;3107:77::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3172:7:1::1;3164:5;:15;;;;3107:77:::0;:::o;1352:373::-;1131:1;1093:13;;;;;;;;;;;:23;;;1117:10;1093:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;1085:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;1189:6;;;;;;;;;;;1188:7;1180:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;1274:5;;1247:11;:23;1259:10;1247:23;;;;;;;;;;;;;;;;:32;;1239:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1440:12:::1;1482:10;1465:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;1455:39;;;;;;1440:54;;1508:51;1527:12;;1508:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1541:11;;1554:4;1508:18;:51::i;:::-;1500:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;1635:5;;1609:11;:23;1621:10;1609:23;;;;;;;;;;;;;;;:31;;;;1646:55;1652:10;1664:14;1679:7;;1664:23;;;;;;;;:::i;:::-;;;;;;;;;;1689:1;1646:55;;;;;;;;;;;;;;;;::::0;:5:::1;:55::i;:::-;1707:13;:11;:13::i;:::-;1434:291;1352:373:::0;;:::o;3689:101::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3742:10:1::1;3734:28;;:51;3763:21;3734:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3689:101::o:0;2500:508:3:-;2651:16;2710:3;:10;2691:8;:15;:29;2683:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2777:30;2824:8;:15;2810:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:63;;2856:9;2851:120;2875:8;:15;2871:1;:19;2851:120;;;2930:30;2940:8;2949:1;2940:11;;;;;;;;:::i;:::-;;;;;;;;2953:3;2957:1;2953:6;;;;;;;;:::i;:::-;;;;;;;;2930:9;:30::i;:::-;2911:13;2925:1;2911:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2892:3;;;;:::i;:::-;;;2851:120;;;;2988:13;2981:20;;;2500:508;;;;:::o;607:33:1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;724:25::-;;;;;;;;;;;;;:::o;708:342:4:-;878:12;:10;:12::i;:::-;867:23;;:7;:23;;;:66;;;;894:39;911:7;920:12;:10;:12::i;:::-;894:16;:39::i;:::-;867:66;846:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;1011:32;1022:7;1031:3;1036:6;1011:10;:32::i;:::-;708:342;;;:::o;1661:101:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3563:95:1:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3643:10:1::1;3629:11;:24;;;;3563:95:::0;:::o;1029:85:11:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;3076:153:3:-;3170:52;3189:12;:10;:12::i;:::-;3203:8;3213;3170:18;:52::i;:::-;3076:153;;:::o;819:24:1:-;;;;:::o;644:46::-;;;;;;;;;;;;;;;;;:::o;3296:166:3:-;3395:4;3418:18;:27;3437:7;3418:27;;;;;;;;;;;;;;;:37;3446:8;3418:37;;;;;;;;;;;;;;;;;;;;;;;;;3411:44;;3296:166;;;;:::o;3529:389::-;3737:12;:10;:12::i;:::-;3729:20;;:4;:20;;;:60;;;;3753:36;3770:4;3776:12;:10;:12::i;:::-;3753:16;:36::i;:::-;3729:60;3708:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;3866:45;3884:4;3890:2;3894;3898:6;3906:4;3866:17;:45::i;:::-;3529:389;;;;;:::o;1911:198:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;392:310:4:-;537:12;:10;:12::i;:::-;526:23;;:7;:23;;;:66;;;;553:39;570:7;579:12;:10;:12::i;:::-;553:16;:39::i;:::-;526:66;505:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;670:25;676:7;685:2;689:5;670;:25::i;:::-;392:310;;;:::o;789:26:1:-;;;;:::o;829:155:5:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;640:96:2:-;693:7;719:10;712:17;;640:96;:::o;7881:86:3:-;7954:6;7947:4;:13;;;;;;;;;;;;:::i;:::-;;7881:86;:::o;1870:103::-;1930:13;1962:4;1955:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1870:103;;;:::o;328:703:12:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;8340:553:3:-;8501:1;8487:16;;:2;:16;;;;8479:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8552:16;8571:12;:10;:12::i;:::-;8552:31;;8594:102;8615:8;8633:1;8637:2;8641:21;8659:2;8641:17;:21::i;:::-;8664:25;8682:6;8664:17;:25::i;:::-;8691:4;8594:20;:102::i;:::-;8728:6;8707:9;:13;8717:2;8707:13;;;;;;;;;;;:17;8721:2;8707:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;8786:2;8749:52;;8782:1;8749:52;;8764:8;8749:52;;;8790:2;8794:6;8749:52;;;;;;;:::i;:::-;;;;;;;;8812:74;8843:8;8861:1;8865:2;8869;8873:6;8881:4;8812:30;:74::i;:::-;8469:424;8340:553;;;;:::o;6013:1045::-;6233:7;:14;6219:3;:10;:28;6211:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6324:1;6310:16;;:2;:16;;;;6302:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6379:16;6398:12;:10;:12::i;:::-;6379:31;;6421:60;6442:8;6452:4;6458:2;6462:3;6467:7;6476:4;6421:20;:60::i;:::-;6497:9;6492:411;6516:3;:10;6512:1;:14;6492:411;;;6547:10;6560:3;6564:1;6560:6;;;;;;;;:::i;:::-;;;;;;;;6547:19;;6580:14;6597:7;6605:1;6597:10;;;;;;;;:::i;:::-;;;;;;;;6580:27;;6622:19;6644:9;:13;6654:2;6644:13;;;;;;;;;;;:19;6658:4;6644:19;;;;;;;;;;;;;;;;6622:41;;6700:6;6685:11;:21;;6677:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6831:6;6817:11;:20;6795:9;:13;6805:2;6795:13;;;;;;;;;;;:19;6809:4;6795:19;;;;;;;;;;;;;;;:42;;;;6886:6;6865:9;:13;6875:2;6865:13;;;;;;;;;;;:17;6879:2;6865:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6533:370;;;6528:3;;;;:::i;:::-;;;6492:411;;;;6948:2;6918:47;;6942:4;6918:47;;6932:8;6918:47;;;6952:3;6957:7;6918:47;;;;;;;:::i;:::-;;;;;;;;6976:75;7012:8;7022:4;7028:2;7032:3;7037:7;7046:4;6976:35;:75::i;:::-;6201:857;6013:1045;;;;;:::o;847:184:10:-;968:4;1020;991:25;1004:5;1011:4;991:12;:25::i;:::-;:33;984:40;;847:184;;;;;:::o;1750:196:1:-;1816:1;1792:14;:21;;;;:25;1788:154;;;1869:1;1845:14;:21;;;;:25;;;;:::i;:::-;1841:1;1831:7;;:11;;;;:::i;:::-;:39;1827:109;;;1892:1;1882:7;:11;;;;1827:109;;;1918:7;;:9;;;;;;;;;:::i;:::-;;;;;;1827:109;1788:154;1750:196::o;11017:867:3:-;11180:1;11164:18;;:4;:18;;;;11156:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11254:7;:14;11240:3;:10;:28;11232:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11324:16;11343:12;:10;:12::i;:::-;11324:31;;11366:66;11387:8;11397:4;11411:1;11415:3;11420:7;11366:66;;;;;;;;;;;;:20;:66::i;:::-;11448:9;11443:364;11467:3;:10;11463:1;:14;11443:364;;;11498:10;11511:3;11515:1;11511:6;;;;;;;;:::i;:::-;;;;;;;;11498:19;;11531:14;11548:7;11556:1;11548:10;;;;;;;;:::i;:::-;;;;;;;;11531:27;;11573:19;11595:9;:13;11605:2;11595:13;;;;;;;;;;;:19;11609:4;11595:19;;;;;;;;;;;;;;;;11573:41;;11651:6;11636:11;:21;;11628:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11776:6;11762:11;:20;11740:9;:13;11750:2;11740:13;;;;;;;;;;;:19;11754:4;11740:19;;;;;;;;;;;;;;;:42;;;;11484:323;;;11479:3;;;;;:::i;:::-;;;;11443:364;;;;11860:1;11822:55;;11846:4;11822:55;;11836:8;11822:55;;;11864:3;11869:7;11822:55;;;;;;;:::i;:::-;;;;;;;;11146:738;11017:867;;;:::o;2263:187:11:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;12019:323:3:-;12169:8;12160:17;;:5;:17;;;;12152:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12271:8;12233:18;:25;12252:5;12233:25;;;;;;;;;;;;;;;:35;12259:8;12233:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12316:8;12294:41;;12309:5;12294:41;;;12326:8;12294:41;;;;;;:::i;:::-;;;;;;;;12019:323;;;:::o;4870:797::-;5065:1;5051:16;;:2;:16;;;;5043:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5120:16;5139:12;:10;:12::i;:::-;5120:31;;5162:96;5183:8;5193:4;5199:2;5203:21;5221:2;5203:17;:21::i;:::-;5226:25;5244:6;5226:17;:25::i;:::-;5253:4;5162:20;:96::i;:::-;5269:19;5291:9;:13;5301:2;5291:13;;;;;;;;;;;:19;5305:4;5291:19;;;;;;;;;;;;;;;;5269:41;;5343:6;5328:11;:21;;5320:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5466:6;5452:11;:20;5430:9;:13;5440:2;5430:13;;;;;;;;;;;:19;5444:4;5430:19;;;;;;;;;;;;;;;:42;;;;5513:6;5492:9;:13;5502:2;5492:13;;;;;;;;;;;:17;5506:2;5492:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5566:2;5535:46;;5560:4;5535:46;;5550:8;5535:46;;;5570:2;5574:6;5535:46;;;;;;;:::i;:::-;;;;;;;;5592:68;5623:8;5633:4;5639:2;5643;5647:6;5655:4;5592:30;:68::i;:::-;5033:634;;4870:797;;;;;:::o;10193:630::-;10331:1;10315:18;;:4;:18;;;;10307:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10384:16;10403:12;:10;:12::i;:::-;10384:31;;10426:102;10447:8;10457:4;10471:1;10475:21;10493:2;10475:17;:21::i;:::-;10498:25;10516:6;10498:17;:25::i;:::-;10426:102;;;;;;;;;;;;:20;:102::i;:::-;10539:19;10561:9;:13;10571:2;10561:13;;;;;;;;;;;:19;10575:4;10561:19;;;;;;;;;;;;;;;;10539:41;;10613:6;10598:11;:21;;10590:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10730:6;10716:11;:20;10694:9;:13;10704:2;10694:13;;;;;;;;;;;:19;10708:4;10694:19;;;;;;;;;;;;;;;:42;;;;10801:1;10762:54;;10787:4;10762:54;;10777:8;10762:54;;;10805:2;10809:6;10762:54;;;;;;;:::i;:::-;;;;;;;;10297:526;;10193:630;;;:::o;15025:193::-;15091:16;15119:22;15158:1;15144:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:41;;15181:7;15170:5;15176:1;15170:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;15206:5;15199:12;;;15025:193;;;:::o;13276:214::-;;;;;;;:::o;13496:725::-;13703:15;:2;:13;;;:15::i;:::-;13699:516;;;13755:2;13738:38;;;13777:8;13787:4;13793:2;13797:6;13805:4;13738:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13734:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14081:6;14074:14;;;;;;;;;;;:::i;:::-;;;;;;;;13734:471;;;14128:62;;;;;;;;;;:::i;:::-;;;;;;;;13734:471;13871:43;;;13859:55;;;:8;:55;;;;13855:152;;13938:50;;;;;;;;;;:::i;:::-;;;;;;;;13855:152;13811:210;13699:516;13496:725;;;;;;:::o;14227:792::-;14459:15;:2;:13;;;:15::i;:::-;14455:558;;;14511:2;14494:43;;;14538:8;14548:4;14554:3;14559:7;14568:4;14494:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14490:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14879:6;14872:14;;;;;;;;;;;:::i;:::-;;;;;;;;14490:513;;;14926:62;;;;;;;;;;:::i;:::-;;;;;;;;14490:513;14664:48;;;14652:60;;;:8;:60;;;;14648:157;;14736:50;;;;;;;;;;:::i;:::-;;;;;;;;14648:157;14574:245;14455:558;14227:792;;;;;;:::o;1383:688:10:-;1466:7;1485:20;1508:4;1485:27;;1527:9;1522:514;1546:5;:12;1542:1;:16;1522:514;;;1579:20;1602:5;1608:1;1602:8;;;;;;;;:::i;:::-;;;;;;;;1579:31;;1644:12;1628;:28;1624:402;;1796:12;1810;1779:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1769:55;;;;;;1754:70;;1624:402;;;1983:12;1997;1966:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1956:55;;;;;;1941:70;;1624:402;1565:471;1560:3;;;;;:::i;:::-;;;;1522:514;;;;2052:12;2045:19;;;1383:688;;;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;767:954::-;872:5;897:90;913:73;979:6;913:73;:::i;:::-;897:90;:::i;:::-;888:99;;1007:5;1036:6;1029:5;1022:21;1070:4;1063:5;1059:16;1052:23;;1096:6;1146:3;1138:4;1130:6;1126:17;1121:3;1117:27;1114:36;1111:143;;;1165:79;;:::i;:::-;1111:143;1278:1;1263:452;1288:6;1285:1;1282:13;1263:452;;;1370:3;1357:17;1406:18;1393:11;1390:35;1387:122;;;1428:79;;:::i;:::-;1387:122;1552:11;1544:6;1540:24;1590:46;1632:3;1620:10;1590:46;:::i;:::-;1585:3;1578:59;1666:4;1661:3;1657:14;1650:21;;1700:4;1695:3;1691:14;1684:21;;1323:392;;1310:1;1307;1303:9;1298:14;;1263:452;;;1267:14;878:843;;767:954;;;;;:::o;1744:722::-;1840:5;1865:81;1881:64;1938:6;1881:64;:::i;:::-;1865:81;:::i;:::-;1856:90;;1966:5;1995:6;1988:5;1981:21;2029:4;2022:5;2018:16;2011:23;;2055:6;2105:3;2097:4;2089:6;2085:17;2080:3;2076:27;2073:36;2070:143;;;2124:79;;:::i;:::-;2070:143;2237:1;2222:238;2247:6;2244:1;2241:13;2222:238;;;2315:3;2344:37;2377:3;2365:10;2344:37;:::i;:::-;2339:3;2332:50;2411:4;2406:3;2402:14;2395:21;;2445:4;2440:3;2436:14;2429:21;;2282:178;2269:1;2266;2262:9;2257:14;;2222:238;;;2226:14;1846:620;;1744:722;;;;;:::o;2472:410::-;2549:5;2574:65;2590:48;2631:6;2590:48;:::i;:::-;2574:65;:::i;:::-;2565:74;;2662:6;2655:5;2648:21;2700:4;2693:5;2689:16;2738:3;2729:6;2724:3;2720:16;2717:25;2714:112;;;2745:79;;:::i;:::-;2714:112;2835:41;2869:6;2864:3;2859;2835:41;:::i;:::-;2555:327;2472:410;;;;;:::o;2888:412::-;2966:5;2991:66;3007:49;3049:6;3007:49;:::i;:::-;2991:66;:::i;:::-;2982:75;;3080:6;3073:5;3066:21;3118:4;3111:5;3107:16;3156:3;3147:6;3142:3;3138:16;3135:25;3132:112;;;3163:79;;:::i;:::-;3132:112;3253:41;3287:6;3282:3;3277;3253:41;:::i;:::-;2972:328;2888:412;;;;;:::o;3306:139::-;3352:5;3390:6;3377:20;3368:29;;3406:33;3433:5;3406:33;:::i;:::-;3306:139;;;;:::o;3468:370::-;3539:5;3588:3;3581:4;3573:6;3569:17;3565:27;3555:122;;3596:79;;:::i;:::-;3555:122;3713:6;3700:20;3738:94;3828:3;3820:6;3813:4;3805:6;3801:17;3738:94;:::i;:::-;3729:103;;3545:293;3468:370;;;;:::o;3861:568::-;3934:8;3944:6;3994:3;3987:4;3979:6;3975:17;3971:27;3961:122;;4002:79;;:::i;:::-;3961:122;4115:6;4102:20;4092:30;;4145:18;4137:6;4134:30;4131:117;;;4167:79;;:::i;:::-;4131:117;4281:4;4273:6;4269:17;4257:29;;4335:3;4327:4;4319:6;4315:17;4305:8;4301:32;4298:41;4295:128;;;4342:79;;:::i;:::-;4295:128;3861:568;;;;;:::o;4450:388::-;4530:5;4579:3;4572:4;4564:6;4560:17;4556:27;4546:122;;4587:79;;:::i;:::-;4546:122;4704:6;4691:20;4729:103;4828:3;4820:6;4813:4;4805:6;4801:17;4729:103;:::i;:::-;4720:112;;4536:302;4450:388;;;;:::o;4861:370::-;4932:5;4981:3;4974:4;4966:6;4962:17;4958:27;4948:122;;4989:79;;:::i;:::-;4948:122;5106:6;5093:20;5131:94;5221:3;5213:6;5206:4;5198:6;5194:17;5131:94;:::i;:::-;5122:103;;4938:293;4861:370;;;;:::o;5237:133::-;5280:5;5318:6;5305:20;5296:29;;5334:30;5358:5;5334:30;:::i;:::-;5237:133;;;;:::o;5376:139::-;5422:5;5460:6;5447:20;5438:29;;5476:33;5503:5;5476:33;:::i;:::-;5376:139;;;;:::o;5521:137::-;5566:5;5604:6;5591:20;5582:29;;5620:32;5646:5;5620:32;:::i;:::-;5521:137;;;;:::o;5664:141::-;5720:5;5751:6;5745:13;5736:22;;5767:32;5793:5;5767:32;:::i;:::-;5664:141;;;;:::o;5824:338::-;5879:5;5928:3;5921:4;5913:6;5909:17;5905:27;5895:122;;5936:79;;:::i;:::-;5895:122;6053:6;6040:20;6078:78;6152:3;6144:6;6137:4;6129:6;6125:17;6078:78;:::i;:::-;6069:87;;5885:277;5824:338;;;;:::o;6182:340::-;6238:5;6287:3;6280:4;6272:6;6268:17;6264:27;6254:122;;6295:79;;:::i;:::-;6254:122;6412:6;6399:20;6437:79;6512:3;6504:6;6497:4;6489:6;6485:17;6437:79;:::i;:::-;6428:88;;6244:278;6182:340;;;;:::o;6528:139::-;6574:5;6612:6;6599:20;6590:29;;6628:33;6655:5;6628:33;:::i;:::-;6528:139;;;;:::o;6673:143::-;6730:5;6761:6;6755:13;6746:22;;6777:33;6804:5;6777:33;:::i;:::-;6673:143;;;;:::o;6822:329::-;6881:6;6930:2;6918:9;6909:7;6905:23;6901:32;6898:119;;;6936:79;;:::i;:::-;6898:119;7056:1;7081:53;7126:7;7117:6;7106:9;7102:22;7081:53;:::i;:::-;7071:63;;7027:117;6822:329;;;;:::o;7157:474::-;7225:6;7233;7282:2;7270:9;7261:7;7257:23;7253:32;7250:119;;;7288:79;;:::i;:::-;7250:119;7408:1;7433:53;7478:7;7469:6;7458:9;7454:22;7433:53;:::i;:::-;7423:63;;7379:117;7535:2;7561:53;7606:7;7597:6;7586:9;7582:22;7561:53;:::i;:::-;7551:63;;7506:118;7157:474;;;;;:::o;7637:1509::-;7791:6;7799;7807;7815;7823;7872:3;7860:9;7851:7;7847:23;7843:33;7840:120;;;7879:79;;:::i;:::-;7840:120;7999:1;8024:53;8069:7;8060:6;8049:9;8045:22;8024:53;:::i;:::-;8014:63;;7970:117;8126:2;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8097:118;8282:2;8271:9;8267:18;8254:32;8313:18;8305:6;8302:30;8299:117;;;8335:79;;:::i;:::-;8299:117;8440:78;8510:7;8501:6;8490:9;8486:22;8440:78;:::i;:::-;8430:88;;8225:303;8595:2;8584:9;8580:18;8567:32;8626:18;8618:6;8615:30;8612:117;;;8648:79;;:::i;:::-;8612:117;8753:78;8823:7;8814:6;8803:9;8799:22;8753:78;:::i;:::-;8743:88;;8538:303;8908:3;8897:9;8893:19;8880:33;8940:18;8932:6;8929:30;8926:117;;;8962:79;;:::i;:::-;8926:117;9067:62;9121:7;9112:6;9101:9;9097:22;9067:62;:::i;:::-;9057:72;;8851:288;7637:1509;;;;;;;;:::o;9152:1089::-;9256:6;9264;9272;9280;9288;9337:3;9325:9;9316:7;9312:23;9308:33;9305:120;;;9344:79;;:::i;:::-;9305:120;9464:1;9489:53;9534:7;9525:6;9514:9;9510:22;9489:53;:::i;:::-;9479:63;;9435:117;9591:2;9617:53;9662:7;9653:6;9642:9;9638:22;9617:53;:::i;:::-;9607:63;;9562:118;9719:2;9745:53;9790:7;9781:6;9770:9;9766:22;9745:53;:::i;:::-;9735:63;;9690:118;9847:2;9873:53;9918:7;9909:6;9898:9;9894:22;9873:53;:::i;:::-;9863:63;;9818:118;10003:3;9992:9;9988:19;9975:33;10035:18;10027:6;10024:30;10021:117;;;10057:79;;:::i;:::-;10021:117;10162:62;10216:7;10207:6;10196:9;10192:22;10162:62;:::i;:::-;10152:72;;9946:288;9152:1089;;;;;;;;:::o;10247:1039::-;10374:6;10382;10390;10439:2;10427:9;10418:7;10414:23;10410:32;10407:119;;;10445:79;;:::i;:::-;10407:119;10565:1;10590:53;10635:7;10626:6;10615:9;10611:22;10590:53;:::i;:::-;10580:63;;10536:117;10720:2;10709:9;10705:18;10692:32;10751:18;10743:6;10740:30;10737:117;;;10773:79;;:::i;:::-;10737:117;10878:78;10948:7;10939:6;10928:9;10924:22;10878:78;:::i;:::-;10868:88;;10663:303;11033:2;11022:9;11018:18;11005:32;11064:18;11056:6;11053:30;11050:117;;;11086:79;;:::i;:::-;11050:117;11191:78;11261:7;11252:6;11241:9;11237:22;11191:78;:::i;:::-;11181:88;;10976:303;10247:1039;;;;;:::o;11292:468::-;11357:6;11365;11414:2;11402:9;11393:7;11389:23;11385:32;11382:119;;;11420:79;;:::i;:::-;11382:119;11540:1;11565:53;11610:7;11601:6;11590:9;11586:22;11565:53;:::i;:::-;11555:63;;11511:117;11667:2;11693:50;11735:7;11726:6;11715:9;11711:22;11693:50;:::i;:::-;11683:60;;11638:115;11292:468;;;;;:::o;11766:474::-;11834:6;11842;11891:2;11879:9;11870:7;11866:23;11862:32;11859:119;;;11897:79;;:::i;:::-;11859:119;12017:1;12042:53;12087:7;12078:6;12067:9;12063:22;12042:53;:::i;:::-;12032:63;;11988:117;12144:2;12170:53;12215:7;12206:6;12195:9;12191:22;12170:53;:::i;:::-;12160:63;;12115:118;11766:474;;;;;:::o;12246:619::-;12323:6;12331;12339;12388:2;12376:9;12367:7;12363:23;12359:32;12356:119;;;12394:79;;:::i;:::-;12356:119;12514:1;12539:53;12584:7;12575:6;12564:9;12560:22;12539:53;:::i;:::-;12529:63;;12485:117;12641:2;12667:53;12712:7;12703:6;12692:9;12688:22;12667:53;:::i;:::-;12657:63;;12612:118;12769:2;12795:53;12840:7;12831:6;12820:9;12816:22;12795:53;:::i;:::-;12785:63;;12740:118;12246:619;;;;;:::o;12871:894::-;12989:6;12997;13046:2;13034:9;13025:7;13021:23;13017:32;13014:119;;;13052:79;;:::i;:::-;13014:119;13200:1;13189:9;13185:17;13172:31;13230:18;13222:6;13219:30;13216:117;;;13252:79;;:::i;:::-;13216:117;13357:78;13427:7;13418:6;13407:9;13403:22;13357:78;:::i;:::-;13347:88;;13143:302;13512:2;13501:9;13497:18;13484:32;13543:18;13535:6;13532:30;13529:117;;;13565:79;;:::i;:::-;13529:117;13670:78;13740:7;13731:6;13720:9;13716:22;13670:78;:::i;:::-;13660:88;;13455:303;12871:894;;;;;:::o;13771:1623::-;13966:6;13974;13982;13990;14039:3;14027:9;14018:7;14014:23;14010:33;14007:120;;;14046:79;;:::i;:::-;14007:120;14194:1;14183:9;14179:17;14166:31;14224:18;14216:6;14213:30;14210:117;;;14246:79;;:::i;:::-;14210:117;14351:78;14421:7;14412:6;14401:9;14397:22;14351:78;:::i;:::-;14341:88;;14137:302;14506:2;14495:9;14491:18;14478:32;14537:18;14529:6;14526:30;14523:117;;;14559:79;;:::i;:::-;14523:117;14664:78;14734:7;14725:6;14714:9;14710:22;14664:78;:::i;:::-;14654:88;;14449:303;14819:2;14808:9;14804:18;14791:32;14850:18;14842:6;14839:30;14836:117;;;14872:79;;:::i;:::-;14836:117;14977:78;15047:7;15038:6;15027:9;15023:22;14977:78;:::i;:::-;14967:88;;14762:303;15132:2;15121:9;15117:18;15104:32;15163:18;15155:6;15152:30;15149:117;;;15185:79;;:::i;:::-;15149:117;15290:87;15369:7;15360:6;15349:9;15345:22;15290:87;:::i;:::-;15280:97;;15075:312;13771:1623;;;;;;;:::o;15400:559::-;15486:6;15494;15543:2;15531:9;15522:7;15518:23;15514:32;15511:119;;;15549:79;;:::i;:::-;15511:119;15697:1;15686:9;15682:17;15669:31;15727:18;15719:6;15716:30;15713:117;;;15749:79;;:::i;:::-;15713:117;15862:80;15934:7;15925:6;15914:9;15910:22;15862:80;:::i;:::-;15844:98;;;;15640:312;15400:559;;;;;:::o;15965:539::-;16049:6;16098:2;16086:9;16077:7;16073:23;16069:32;16066:119;;;16104:79;;:::i;:::-;16066:119;16252:1;16241:9;16237:17;16224:31;16282:18;16274:6;16271:30;16268:117;;;16304:79;;:::i;:::-;16268:117;16409:78;16479:7;16470:6;16459:9;16455:22;16409:78;:::i;:::-;16399:88;;16195:302;15965:539;;;;:::o;16510:323::-;16566:6;16615:2;16603:9;16594:7;16590:23;16586:32;16583:119;;;16621:79;;:::i;:::-;16583:119;16741:1;16766:50;16808:7;16799:6;16788:9;16784:22;16766:50;:::i;:::-;16756:60;;16712:114;16510:323;;;;:::o;16839:329::-;16898:6;16947:2;16935:9;16926:7;16922:23;16918:32;16915:119;;;16953:79;;:::i;:::-;16915:119;17073:1;17098:53;17143:7;17134:6;17123:9;17119:22;17098:53;:::i;:::-;17088:63;;17044:117;16839:329;;;;:::o;17174:327::-;17232:6;17281:2;17269:9;17260:7;17256:23;17252:32;17249:119;;;17287:79;;:::i;:::-;17249:119;17407:1;17432:52;17476:7;17467:6;17456:9;17452:22;17432:52;:::i;:::-;17422:62;;17378:116;17174:327;;;;:::o;17507:349::-;17576:6;17625:2;17613:9;17604:7;17600:23;17596:32;17593:119;;;17631:79;;:::i;:::-;17593:119;17751:1;17776:63;17831:7;17822:6;17811:9;17807:22;17776:63;:::i;:::-;17766:73;;17722:127;17507:349;;;;:::o;17862:509::-;17931:6;17980:2;17968:9;17959:7;17955:23;17951:32;17948:119;;;17986:79;;:::i;:::-;17948:119;18134:1;18123:9;18119:17;18106:31;18164:18;18156:6;18153:30;18150:117;;;18186:79;;:::i;:::-;18150:117;18291:63;18346:7;18337:6;18326:9;18322:22;18291:63;:::i;:::-;18281:73;;18077:287;17862:509;;;;:::o;18377:329::-;18436:6;18485:2;18473:9;18464:7;18460:23;18456:32;18453:119;;;18491:79;;:::i;:::-;18453:119;18611:1;18636:53;18681:7;18672:6;18661:9;18657:22;18636:53;:::i;:::-;18626:63;;18582:117;18377:329;;;;:::o;18712:351::-;18782:6;18831:2;18819:9;18810:7;18806:23;18802:32;18799:119;;;18837:79;;:::i;:::-;18799:119;18957:1;18982:64;19038:7;19029:6;19018:9;19014:22;18982:64;:::i;:::-;18972:74;;18928:128;18712:351;;;;:::o;19069:179::-;19138:10;19159:46;19201:3;19193:6;19159:46;:::i;:::-;19237:4;19232:3;19228:14;19214:28;;19069:179;;;;:::o;19254:118::-;19341:24;19359:5;19341:24;:::i;:::-;19336:3;19329:37;19254:118;;:::o;19378:157::-;19483:45;19503:24;19521:5;19503:24;:::i;:::-;19483:45;:::i;:::-;19478:3;19471:58;19378:157;;:::o;19571:732::-;19690:3;19719:54;19767:5;19719:54;:::i;:::-;19789:86;19868:6;19863:3;19789:86;:::i;:::-;19782:93;;19899:56;19949:5;19899:56;:::i;:::-;19978:7;20009:1;19994:284;20019:6;20016:1;20013:13;19994:284;;;20095:6;20089:13;20122:63;20181:3;20166:13;20122:63;:::i;:::-;20115:70;;20208:60;20261:6;20208:60;:::i;:::-;20198:70;;20054:224;20041:1;20038;20034:9;20029:14;;19994:284;;;19998:14;20294:3;20287:10;;19695:608;;;19571:732;;;;:::o;20309:109::-;20390:21;20405:5;20390:21;:::i;:::-;20385:3;20378:34;20309:109;;:::o;20424:118::-;20511:24;20529:5;20511:24;:::i;:::-;20506:3;20499:37;20424:118;;:::o;20548:157::-;20653:45;20673:24;20691:5;20673:24;:::i;:::-;20653:45;:::i;:::-;20648:3;20641:58;20548:157;;:::o;20711:360::-;20797:3;20825:38;20857:5;20825:38;:::i;:::-;20879:70;20942:6;20937:3;20879:70;:::i;:::-;20872:77;;20958:52;21003:6;20998:3;20991:4;20984:5;20980:16;20958:52;:::i;:::-;21035:29;21057:6;21035:29;:::i;:::-;21030:3;21026:39;21019:46;;20801:270;20711:360;;;;:::o;21077:364::-;21165:3;21193:39;21226:5;21193:39;:::i;:::-;21248:71;21312:6;21307:3;21248:71;:::i;:::-;21241:78;;21328:52;21373:6;21368:3;21361:4;21354:5;21350:16;21328:52;:::i;:::-;21405:29;21427:6;21405:29;:::i;:::-;21400:3;21396:39;21389:46;;21169:272;21077:364;;;;:::o;21447:377::-;21553:3;21581:39;21614:5;21581:39;:::i;:::-;21636:89;21718:6;21713:3;21636:89;:::i;:::-;21629:96;;21734:52;21779:6;21774:3;21767:4;21760:5;21756:16;21734:52;:::i;:::-;21811:6;21806:3;21802:16;21795:23;;21557:267;21447:377;;;;:::o;21854:845::-;21957:3;21994:5;21988:12;22023:36;22049:9;22023:36;:::i;:::-;22075:89;22157:6;22152:3;22075:89;:::i;:::-;22068:96;;22195:1;22184:9;22180:17;22211:1;22206:137;;;;22357:1;22352:341;;;;22173:520;;22206:137;22290:4;22286:9;22275;22271:25;22266:3;22259:38;22326:6;22321:3;22317:16;22310:23;;22206:137;;22352:341;22419:38;22451:5;22419:38;:::i;:::-;22479:1;22493:154;22507:6;22504:1;22501:13;22493:154;;;22581:7;22575:14;22571:1;22566:3;22562:11;22555:35;22631:1;22622:7;22618:15;22607:26;;22529:4;22526:1;22522:12;22517:17;;22493:154;;;22676:6;22671:3;22667:16;22660:23;;22359:334;;22173:520;;21961:738;;21854:845;;;;:::o;22705:366::-;22847:3;22868:67;22932:2;22927:3;22868:67;:::i;:::-;22861:74;;22944:93;23033:3;22944:93;:::i;:::-;23062:2;23057:3;23053:12;23046:19;;22705:366;;;:::o;23077:::-;23219:3;23240:67;23304:2;23299:3;23240:67;:::i;:::-;23233:74;;23316:93;23405:3;23316:93;:::i;:::-;23434:2;23429:3;23425:12;23418:19;;23077:366;;;:::o;23449:::-;23591:3;23612:67;23676:2;23671:3;23612:67;:::i;:::-;23605:74;;23688:93;23777:3;23688:93;:::i;:::-;23806:2;23801:3;23797:12;23790:19;;23449:366;;;:::o;23821:::-;23963:3;23984:67;24048:2;24043:3;23984:67;:::i;:::-;23977:74;;24060:93;24149:3;24060:93;:::i;:::-;24178:2;24173:3;24169:12;24162:19;;23821:366;;;:::o;24193:::-;24335:3;24356:67;24420:2;24415:3;24356:67;:::i;:::-;24349:74;;24432:93;24521:3;24432:93;:::i;:::-;24550:2;24545:3;24541:12;24534:19;;24193:366;;;:::o;24565:::-;24707:3;24728:67;24792:2;24787:3;24728:67;:::i;:::-;24721:74;;24804:93;24893:3;24804:93;:::i;:::-;24922:2;24917:3;24913:12;24906:19;;24565:366;;;:::o;24937:::-;25079:3;25100:67;25164:2;25159:3;25100:67;:::i;:::-;25093:74;;25176:93;25265:3;25176:93;:::i;:::-;25294:2;25289:3;25285:12;25278:19;;24937:366;;;:::o;25309:::-;25451:3;25472:67;25536:2;25531:3;25472:67;:::i;:::-;25465:74;;25548:93;25637:3;25548:93;:::i;:::-;25666:2;25661:3;25657:12;25650:19;;25309:366;;;:::o;25681:::-;25823:3;25844:67;25908:2;25903:3;25844:67;:::i;:::-;25837:74;;25920:93;26009:3;25920:93;:::i;:::-;26038:2;26033:3;26029:12;26022:19;;25681:366;;;:::o;26053:::-;26195:3;26216:67;26280:2;26275:3;26216:67;:::i;:::-;26209:74;;26292:93;26381:3;26292:93;:::i;:::-;26410:2;26405:3;26401:12;26394:19;;26053:366;;;:::o;26425:::-;26567:3;26588:67;26652:2;26647:3;26588:67;:::i;:::-;26581:74;;26664:93;26753:3;26664:93;:::i;:::-;26782:2;26777:3;26773:12;26766:19;;26425:366;;;:::o;26797:::-;26939:3;26960:67;27024:2;27019:3;26960:67;:::i;:::-;26953:74;;27036:93;27125:3;27036:93;:::i;:::-;27154:2;27149:3;27145:12;27138:19;;26797:366;;;:::o;27169:::-;27311:3;27332:67;27396:2;27391:3;27332:67;:::i;:::-;27325:74;;27408:93;27497:3;27408:93;:::i;:::-;27526:2;27521:3;27517:12;27510:19;;27169:366;;;:::o;27541:::-;27683:3;27704:67;27768:2;27763:3;27704:67;:::i;:::-;27697:74;;27780:93;27869:3;27780:93;:::i;:::-;27898:2;27893:3;27889:12;27882:19;;27541:366;;;:::o;27913:::-;28055:3;28076:67;28140:2;28135:3;28076:67;:::i;:::-;28069:74;;28152:93;28241:3;28152:93;:::i;:::-;28270:2;28265:3;28261:12;28254:19;;27913:366;;;:::o;28285:::-;28427:3;28448:67;28512:2;28507:3;28448:67;:::i;:::-;28441:74;;28524:93;28613:3;28524:93;:::i;:::-;28642:2;28637:3;28633:12;28626:19;;28285:366;;;:::o;28657:::-;28799:3;28820:67;28884:2;28879:3;28820:67;:::i;:::-;28813:74;;28896:93;28985:3;28896:93;:::i;:::-;29014:2;29009:3;29005:12;28998:19;;28657:366;;;:::o;29029:::-;29171:3;29192:67;29256:2;29251:3;29192:67;:::i;:::-;29185:74;;29268:93;29357:3;29268:93;:::i;:::-;29386:2;29381:3;29377:12;29370:19;;29029:366;;;:::o;29401:::-;29543:3;29564:67;29628:2;29623:3;29564:67;:::i;:::-;29557:74;;29640:93;29729:3;29640:93;:::i;:::-;29758:2;29753:3;29749:12;29742:19;;29401:366;;;:::o;29773:::-;29915:3;29936:67;30000:2;29995:3;29936:67;:::i;:::-;29929:74;;30012:93;30101:3;30012:93;:::i;:::-;30130:2;30125:3;30121:12;30114:19;;29773:366;;;:::o;30145:::-;30287:3;30308:67;30372:2;30367:3;30308:67;:::i;:::-;30301:74;;30384:93;30473:3;30384:93;:::i;:::-;30502:2;30497:3;30493:12;30486:19;;30145:366;;;:::o;30517:108::-;30594:24;30612:5;30594:24;:::i;:::-;30589:3;30582:37;30517:108;;:::o;30631:118::-;30718:24;30736:5;30718:24;:::i;:::-;30713:3;30706:37;30631:118;;:::o;30755:256::-;30867:3;30882:75;30953:3;30944:6;30882:75;:::i;:::-;30982:2;30977:3;30973:12;30966:19;;31002:3;30995:10;;30755:256;;;;:::o;31017:397::-;31157:3;31172:75;31243:3;31234:6;31172:75;:::i;:::-;31272:2;31267:3;31263:12;31256:19;;31285:75;31356:3;31347:6;31285:75;:::i;:::-;31385:2;31380:3;31376:12;31369:19;;31405:3;31398:10;;31017:397;;;;;:::o;31420:589::-;31645:3;31667:95;31758:3;31749:6;31667:95;:::i;:::-;31660:102;;31779:95;31870:3;31861:6;31779:95;:::i;:::-;31772:102;;31891:92;31979:3;31970:6;31891:92;:::i;:::-;31884:99;;32000:3;31993:10;;31420:589;;;;;;:::o;32015:222::-;32108:4;32146:2;32135:9;32131:18;32123:26;;32159:71;32227:1;32216:9;32212:17;32203:6;32159:71;:::i;:::-;32015:222;;;;:::o;32243:1053::-;32566:4;32604:3;32593:9;32589:19;32581:27;;32618:71;32686:1;32675:9;32671:17;32662:6;32618:71;:::i;:::-;32699:72;32767:2;32756:9;32752:18;32743:6;32699:72;:::i;:::-;32818:9;32812:4;32808:20;32803:2;32792:9;32788:18;32781:48;32846:108;32949:4;32940:6;32846:108;:::i;:::-;32838:116;;33001:9;32995:4;32991:20;32986:2;32975:9;32971:18;32964:48;33029:108;33132:4;33123:6;33029:108;:::i;:::-;33021:116;;33185:9;33179:4;33175:20;33169:3;33158:9;33154:19;33147:49;33213:76;33284:4;33275:6;33213:76;:::i;:::-;33205:84;;32243:1053;;;;;;;;:::o;33302:751::-;33525:4;33563:3;33552:9;33548:19;33540:27;;33577:71;33645:1;33634:9;33630:17;33621:6;33577:71;:::i;:::-;33658:72;33726:2;33715:9;33711:18;33702:6;33658:72;:::i;:::-;33740;33808:2;33797:9;33793:18;33784:6;33740:72;:::i;:::-;33822;33890:2;33879:9;33875:18;33866:6;33822:72;:::i;:::-;33942:9;33936:4;33932:20;33926:3;33915:9;33911:19;33904:49;33970:76;34041:4;34032:6;33970:76;:::i;:::-;33962:84;;33302:751;;;;;;;;:::o;34059:373::-;34202:4;34240:2;34229:9;34225:18;34217:26;;34289:9;34283:4;34279:20;34275:1;34264:9;34260:17;34253:47;34317:108;34420:4;34411:6;34317:108;:::i;:::-;34309:116;;34059:373;;;;:::o;34438:634::-;34659:4;34697:2;34686:9;34682:18;34674:26;;34746:9;34740:4;34736:20;34732:1;34721:9;34717:17;34710:47;34774:108;34877:4;34868:6;34774:108;:::i;:::-;34766:116;;34929:9;34923:4;34919:20;34914:2;34903:9;34899:18;34892:48;34957:108;35060:4;35051:6;34957:108;:::i;:::-;34949:116;;34438:634;;;;;:::o;35078:210::-;35165:4;35203:2;35192:9;35188:18;35180:26;;35216:65;35278:1;35267:9;35263:17;35254:6;35216:65;:::i;:::-;35078:210;;;;:::o;35294:222::-;35387:4;35425:2;35414:9;35410:18;35402:26;;35438:71;35506:1;35495:9;35491:17;35482:6;35438:71;:::i;:::-;35294:222;;;;:::o;35522:313::-;35635:4;35673:2;35662:9;35658:18;35650:26;;35722:9;35716:4;35712:20;35708:1;35697:9;35693:17;35686:47;35750:78;35823:4;35814:6;35750:78;:::i;:::-;35742:86;;35522:313;;;;:::o;35841:419::-;36007:4;36045:2;36034:9;36030:18;36022:26;;36094:9;36088:4;36084:20;36080:1;36069:9;36065:17;36058:47;36122:131;36248:4;36122:131;:::i;:::-;36114:139;;35841:419;;;:::o;36266:::-;36432:4;36470:2;36459:9;36455:18;36447:26;;36519:9;36513:4;36509:20;36505:1;36494:9;36490:17;36483:47;36547:131;36673:4;36547:131;:::i;:::-;36539:139;;36266:419;;;:::o;36691:::-;36857:4;36895:2;36884:9;36880:18;36872:26;;36944:9;36938:4;36934:20;36930:1;36919:9;36915:17;36908:47;36972:131;37098:4;36972:131;:::i;:::-;36964:139;;36691:419;;;:::o;37116:::-;37282:4;37320:2;37309:9;37305:18;37297:26;;37369:9;37363:4;37359:20;37355:1;37344:9;37340:17;37333:47;37397:131;37523:4;37397:131;:::i;:::-;37389:139;;37116:419;;;:::o;37541:::-;37707:4;37745:2;37734:9;37730:18;37722:26;;37794:9;37788:4;37784:20;37780:1;37769:9;37765:17;37758:47;37822:131;37948:4;37822:131;:::i;:::-;37814:139;;37541:419;;;:::o;37966:::-;38132:4;38170:2;38159:9;38155:18;38147:26;;38219:9;38213:4;38209:20;38205:1;38194:9;38190:17;38183:47;38247:131;38373:4;38247:131;:::i;:::-;38239:139;;37966:419;;;:::o;38391:::-;38557:4;38595:2;38584:9;38580:18;38572:26;;38644:9;38638:4;38634:20;38630:1;38619:9;38615:17;38608:47;38672:131;38798:4;38672:131;:::i;:::-;38664:139;;38391:419;;;:::o;38816:::-;38982:4;39020:2;39009:9;39005:18;38997:26;;39069:9;39063:4;39059:20;39055:1;39044:9;39040:17;39033:47;39097:131;39223:4;39097:131;:::i;:::-;39089:139;;38816:419;;;:::o;39241:::-;39407:4;39445:2;39434:9;39430:18;39422:26;;39494:9;39488:4;39484:20;39480:1;39469:9;39465:17;39458:47;39522:131;39648:4;39522:131;:::i;:::-;39514:139;;39241:419;;;:::o;39666:::-;39832:4;39870:2;39859:9;39855:18;39847:26;;39919:9;39913:4;39909:20;39905:1;39894:9;39890:17;39883:47;39947:131;40073:4;39947:131;:::i;:::-;39939:139;;39666:419;;;:::o;40091:::-;40257:4;40295:2;40284:9;40280:18;40272:26;;40344:9;40338:4;40334:20;40330:1;40319:9;40315:17;40308:47;40372:131;40498:4;40372:131;:::i;:::-;40364:139;;40091:419;;;:::o;40516:::-;40682:4;40720:2;40709:9;40705:18;40697:26;;40769:9;40763:4;40759:20;40755:1;40744:9;40740:17;40733:47;40797:131;40923:4;40797:131;:::i;:::-;40789:139;;40516:419;;;:::o;40941:::-;41107:4;41145:2;41134:9;41130:18;41122:26;;41194:9;41188:4;41184:20;41180:1;41169:9;41165:17;41158:47;41222:131;41348:4;41222:131;:::i;:::-;41214:139;;40941:419;;;:::o;41366:::-;41532:4;41570:2;41559:9;41555:18;41547:26;;41619:9;41613:4;41609:20;41605:1;41594:9;41590:17;41583:47;41647:131;41773:4;41647:131;:::i;:::-;41639:139;;41366:419;;;:::o;41791:::-;41957:4;41995:2;41984:9;41980:18;41972:26;;42044:9;42038:4;42034:20;42030:1;42019:9;42015:17;42008:47;42072:131;42198:4;42072:131;:::i;:::-;42064:139;;41791:419;;;:::o;42216:::-;42382:4;42420:2;42409:9;42405:18;42397:26;;42469:9;42463:4;42459:20;42455:1;42444:9;42440:17;42433:47;42497:131;42623:4;42497:131;:::i;:::-;42489:139;;42216:419;;;:::o;42641:::-;42807:4;42845:2;42834:9;42830:18;42822:26;;42894:9;42888:4;42884:20;42880:1;42869:9;42865:17;42858:47;42922:131;43048:4;42922:131;:::i;:::-;42914:139;;42641:419;;;:::o;43066:::-;43232:4;43270:2;43259:9;43255:18;43247:26;;43319:9;43313:4;43309:20;43305:1;43294:9;43290:17;43283:47;43347:131;43473:4;43347:131;:::i;:::-;43339:139;;43066:419;;;:::o;43491:::-;43657:4;43695:2;43684:9;43680:18;43672:26;;43744:9;43738:4;43734:20;43730:1;43719:9;43715:17;43708:47;43772:131;43898:4;43772:131;:::i;:::-;43764:139;;43491:419;;;:::o;43916:::-;44082:4;44120:2;44109:9;44105:18;44097:26;;44169:9;44163:4;44159:20;44155:1;44144:9;44140:17;44133:47;44197:131;44323:4;44197:131;:::i;:::-;44189:139;;43916:419;;;:::o;44341:::-;44507:4;44545:2;44534:9;44530:18;44522:26;;44594:9;44588:4;44584:20;44580:1;44569:9;44565:17;44558:47;44622:131;44748:4;44622:131;:::i;:::-;44614:139;;44341:419;;;:::o;44766:222::-;44859:4;44897:2;44886:9;44882:18;44874:26;;44910:71;44978:1;44967:9;44963:17;44954:6;44910:71;:::i;:::-;44766:222;;;;:::o;44994:332::-;45115:4;45153:2;45142:9;45138:18;45130:26;;45166:71;45234:1;45223:9;45219:17;45210:6;45166:71;:::i;:::-;45247:72;45315:2;45304:9;45300:18;45291:6;45247:72;:::i;:::-;44994:332;;;;;:::o;45332:129::-;45366:6;45393:20;;:::i;:::-;45383:30;;45422:33;45450:4;45442:6;45422:33;:::i;:::-;45332:129;;;:::o;45467:75::-;45500:6;45533:2;45527:9;45517:19;;45467:75;:::o;45548:311::-;45625:4;45715:18;45707:6;45704:30;45701:56;;;45737:18;;:::i;:::-;45701:56;45787:4;45779:6;45775:17;45767:25;;45847:4;45841;45837:15;45829:23;;45548:311;;;:::o;45865:320::-;45951:4;46041:18;46033:6;46030:30;46027:56;;;46063:18;;:::i;:::-;46027:56;46113:4;46105:6;46101:17;46093:25;;46173:4;46167;46163:15;46155:23;;45865:320;;;:::o;46191:311::-;46268:4;46358:18;46350:6;46347:30;46344:56;;;46380:18;;:::i;:::-;46344:56;46430:4;46422:6;46418:17;46410:25;;46490:4;46484;46480:15;46472:23;;46191:311;;;:::o;46508:307::-;46569:4;46659:18;46651:6;46648:30;46645:56;;;46681:18;;:::i;:::-;46645:56;46719:29;46741:6;46719:29;:::i;:::-;46711:37;;46803:4;46797;46793:15;46785:23;;46508:307;;;:::o;46821:308::-;46883:4;46973:18;46965:6;46962:30;46959:56;;;46995:18;;:::i;:::-;46959:56;47033:29;47055:6;47033:29;:::i;:::-;47025:37;;47117:4;47111;47107:15;47099:23;;46821:308;;;:::o;47135:132::-;47202:4;47225:3;47217:11;;47255:4;47250:3;47246:14;47238:22;;47135:132;;;:::o;47273:141::-;47322:4;47345:3;47337:11;;47368:3;47365:1;47358:14;47402:4;47399:1;47389:18;47381:26;;47273:141;;;:::o;47420:114::-;47487:6;47521:5;47515:12;47505:22;;47420:114;;;:::o;47540:98::-;47591:6;47625:5;47619:12;47609:22;;47540:98;;;:::o;47644:99::-;47696:6;47730:5;47724:12;47714:22;;47644:99;;;:::o;47749:113::-;47819:4;47851;47846:3;47842:14;47834:22;;47749:113;;;:::o;47868:184::-;47967:11;48001:6;47996:3;47989:19;48041:4;48036:3;48032:14;48017:29;;47868:184;;;;:::o;48058:168::-;48141:11;48175:6;48170:3;48163:19;48215:4;48210:3;48206:14;48191:29;;48058:168;;;;:::o;48232:169::-;48316:11;48350:6;48345:3;48338:19;48390:4;48385:3;48381:14;48366:29;;48232:169;;;;:::o;48407:148::-;48509:11;48546:3;48531:18;;48407:148;;;;:::o;48561:305::-;48601:3;48620:20;48638:1;48620:20;:::i;:::-;48615:25;;48654:20;48672:1;48654:20;:::i;:::-;48649:25;;48808:1;48740:66;48736:74;48733:1;48730:81;48727:107;;;48814:18;;:::i;:::-;48727:107;48858:1;48855;48851:9;48844:16;;48561:305;;;;:::o;48872:185::-;48912:1;48929:20;48947:1;48929:20;:::i;:::-;48924:25;;48963:20;48981:1;48963:20;:::i;:::-;48958:25;;49002:1;48992:35;;49007:18;;:::i;:::-;48992:35;49049:1;49046;49042:9;49037:14;;48872:185;;;;:::o;49063:191::-;49103:4;49123:20;49141:1;49123:20;:::i;:::-;49118:25;;49157:20;49175:1;49157:20;:::i;:::-;49152:25;;49196:1;49193;49190:8;49187:34;;;49201:18;;:::i;:::-;49187:34;49246:1;49243;49239:9;49231:17;;49063:191;;;;:::o;49260:96::-;49297:7;49326:24;49344:5;49326:24;:::i;:::-;49315:35;;49260:96;;;:::o;49362:90::-;49396:7;49439:5;49432:13;49425:21;49414:32;;49362:90;;;:::o;49458:77::-;49495:7;49524:5;49513:16;;49458:77;;;:::o;49541:149::-;49577:7;49617:66;49610:5;49606:78;49595:89;;49541:149;;;:::o;49696:126::-;49733:7;49773:42;49766:5;49762:54;49751:65;;49696:126;;;:::o;49828:77::-;49865:7;49894:5;49883:16;;49828:77;;;:::o;49911:154::-;49995:6;49990:3;49985;49972:30;50057:1;50048:6;50043:3;50039:16;50032:27;49911:154;;;:::o;50071:307::-;50139:1;50149:113;50163:6;50160:1;50157:13;50149:113;;;50248:1;50243:3;50239:11;50233:18;50229:1;50224:3;50220:11;50213:39;50185:2;50182:1;50178:10;50173:15;;50149:113;;;50280:6;50277:1;50274:13;50271:101;;;50360:1;50351:6;50346:3;50342:16;50335:27;50271:101;50120:258;50071:307;;;:::o;50384:320::-;50428:6;50465:1;50459:4;50455:12;50445:22;;50512:1;50506:4;50502:12;50533:18;50523:81;;50589:4;50581:6;50577:17;50567:27;;50523:81;50651:2;50643:6;50640:14;50620:18;50617:38;50614:84;;;50670:18;;:::i;:::-;50614:84;50435:269;50384:320;;;:::o;50710:281::-;50793:27;50815:4;50793:27;:::i;:::-;50785:6;50781:40;50923:6;50911:10;50908:22;50887:18;50875:10;50872:34;50869:62;50866:88;;;50934:18;;:::i;:::-;50866:88;50974:10;50970:2;50963:22;50753:238;50710:281;;:::o;50997:233::-;51036:3;51059:24;51077:5;51059:24;:::i;:::-;51050:33;;51105:66;51098:5;51095:77;51092:103;;;51175:18;;:::i;:::-;51092:103;51222:1;51215:5;51211:13;51204:20;;50997:233;;;:::o;51236:100::-;51275:7;51304:26;51324:5;51304:26;:::i;:::-;51293:37;;51236:100;;;:::o;51342:79::-;51381:7;51410:5;51399:16;;51342:79;;;:::o;51427:94::-;51466:7;51495:20;51509:5;51495:20;:::i;:::-;51484:31;;51427:94;;;:::o;51527:176::-;51559:1;51576:20;51594:1;51576:20;:::i;:::-;51571:25;;51610:20;51628:1;51610:20;:::i;:::-;51605:25;;51649:1;51639:35;;51654:18;;:::i;:::-;51639:35;51695:1;51692;51688:9;51683:14;;51527:176;;;;:::o;51709:180::-;51757:77;51754:1;51747:88;51854:4;51851:1;51844:15;51878:4;51875:1;51868:15;51895:180;51943:77;51940:1;51933:88;52040:4;52037:1;52030:15;52064:4;52061:1;52054:15;52081:180;52129:77;52126:1;52119:88;52226:4;52223:1;52216:15;52250:4;52247:1;52240:15;52267:180;52315:77;52312:1;52305:88;52412:4;52409:1;52402:15;52436:4;52433:1;52426:15;52453:180;52501:77;52498:1;52491:88;52598:4;52595:1;52588:15;52622:4;52619:1;52612:15;52639:183;52674:3;52712:1;52694:16;52691:23;52688:128;;;52750:1;52747;52744;52729:23;52772:34;52803:1;52797:8;52772:34;:::i;:::-;52765:41;;52688:128;52639:183;:::o;52828:117::-;52937:1;52934;52927:12;52951:117;53060:1;53057;53050:12;53074:117;53183:1;53180;53173:12;53197:117;53306:1;53303;53296:12;53320:117;53429:1;53426;53419:12;53443:117;53552:1;53549;53542:12;53566:102;53607:6;53658:2;53654:7;53649:2;53642:5;53638:14;53634:28;53624:38;;53566:102;;;:::o;53674:94::-;53707:8;53755:5;53751:2;53747:14;53726:35;;53674:94;;;:::o;53774:106::-;53818:8;53867:5;53862:3;53858:15;53837:36;;53774:106;;;:::o;53886:239::-;54026:34;54022:1;54014:6;54010:14;54003:58;54095:22;54090:2;54082:6;54078:15;54071:47;53886:239;:::o;54131:227::-;54271:34;54267:1;54259:6;54255:14;54248:58;54340:10;54335:2;54327:6;54323:15;54316:35;54131:227;:::o;54364:220::-;54504:34;54500:1;54492:6;54488:14;54481:58;54573:3;54568:2;54560:6;54556:15;54549:28;54364:220;:::o;54590:230::-;54730:34;54726:1;54718:6;54714:14;54707:58;54799:13;54794:2;54786:6;54782:15;54775:38;54590:230;:::o;54826:234::-;54966:34;54962:1;54954:6;54950:14;54943:58;55035:17;55030:2;55022:6;55018:15;55011:42;54826:234;:::o;55066:225::-;55206:34;55202:1;55194:6;55190:14;55183:58;55275:8;55270:2;55262:6;55258:15;55251:33;55066:225;:::o;55297:223::-;55437:34;55433:1;55425:6;55421:14;55414:58;55506:6;55501:2;55493:6;55489:15;55482:31;55297:223;:::o;55526:228::-;55666:34;55662:1;55654:6;55650:14;55643:58;55735:11;55730:2;55722:6;55718:15;55711:36;55526:228;:::o;55760:224::-;55900:34;55896:1;55888:6;55884:14;55877:58;55969:7;55964:2;55956:6;55952:15;55945:32;55760:224;:::o;55990:::-;56130:34;56126:1;56118:6;56114:14;56107:58;56199:7;56194:2;56186:6;56182:15;56175:32;55990:224;:::o;56220:237::-;56360:34;56356:1;56348:6;56344:14;56337:58;56429:20;56424:2;56416:6;56412:15;56405:45;56220:237;:::o;56463:238::-;56603:34;56599:1;56591:6;56587:14;56580:58;56672:21;56667:2;56659:6;56655:15;56648:46;56463:238;:::o;56707:222::-;56847:34;56843:1;56835:6;56831:14;56824:58;56916:5;56911:2;56903:6;56899:15;56892:30;56707:222;:::o;56935:229::-;57075:34;57071:1;57063:6;57059:14;57052:58;57144:12;57139:2;57131:6;57127:15;57120:37;56935:229;:::o;57170:182::-;57310:34;57306:1;57298:6;57294:14;57287:58;57170:182;:::o;57358:230::-;57498:34;57494:1;57486:6;57482:14;57475:58;57567:9;57562:2;57554:6;57550:15;57543:34;57358:230;:::o;57598:240::-;57742:34;57738:1;57730:6;57726:14;57719:58;57815:11;57810:2;57802:6;57798:15;57791:36;57598:240;:::o;57848:::-;57992:34;57988:1;57980:6;57976:14;57969:58;58065:11;58060:2;58052:6;58048:15;58041:36;57848:240;:::o;58098:239::-;58242:34;58238:1;58230:6;58226:14;58219:58;58315:10;58310:2;58302:6;58298:15;58291:35;58098:239;:::o;58347:232::-;58491:34;58487:1;58479:6;58475:14;58468:58;58564:3;58559:2;58551:6;58547:15;58540:28;58347:232;:::o;58589:186::-;58733:30;58729:1;58721:6;58717:14;58710:54;58589:186;:::o;58785:783::-;58824:3;58866:4;58848:16;58845:26;58842:39;;;58874:5;;58842:39;58907:20;;:::i;:::-;58986:1;58968:16;58964:24;58961:1;58955:4;58940:49;59023:4;59017:11;59134:16;59127:4;59119:6;59115:17;59112:39;59075:18;59067:6;59064:30;59044:125;59041:166;;;59188:5;;;;59041:166;59242:6;59236:4;59232:17;59282:3;59276:10;59313:18;59305:6;59302:30;59299:43;;;59335:5;;;;;;59299:43;59387:6;59380:4;59375:3;59371:14;59367:27;59450:1;59432:16;59428:24;59422:4;59418:35;59413:3;59410:44;59407:57;;;59457:5;;;;;;;59407:57;59478;59526:6;59520:4;59516:17;59508:6;59504:30;59498:4;59478:57;:::i;:::-;59555:3;59548:10;;58828:740;;;;;58785:783;;:::o;59578:130::-;59655:24;59673:5;59655:24;:::i;:::-;59648:5;59645:35;59635:63;;59694:1;59691;59684:12;59635:63;59578:130;:::o;59718:124::-;59792:21;59807:5;59792:21;:::i;:::-;59785:5;59782:32;59772:60;;59828:1;59825;59818:12;59772:60;59718:124;:::o;59852:130::-;59929:24;59947:5;59929:24;:::i;:::-;59922:5;59919:35;59909:63;;59968:1;59965;59958:12;59909:63;59852:130;:::o;59992:128::-;60068:23;60085:5;60068:23;:::i;:::-;60061:5;60058:34;60048:62;;60106:1;60103;60096:12;60048:62;59992:128;:::o;60130:130::-;60207:24;60225:5;60207:24;:::i;:::-;60200:5;60197:35;60187:63;;60246:1;60243;60236:12;60187:63;60130:130;:::o
Swarm Source
ipfs://ffb02c5bd8489e31d5f745db4374eb3969f518e821176f5f91bac3af1b36ecd8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.