ERC-1155
Overview
Max Total Supply
43
Holders
43
Total Transfers
-
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:
CampaignV0
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-20 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface 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); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract 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; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (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); } } // File @openzeppelin/contracts/utils/cryptography/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } // File contracts/CampaignV0.sol pragma solidity ^0.8.0; interface ICampaignV0 { function totalVoteCount() external view returns (uint64[] memory); function isVoted(address addr) external view returns (bool); function startDate() external view returns (uint256); function setStartDate(uint256 newTimestamp) external; // contract owner required function endDate() external view returns (uint256); function setEndDate(uint256 newTimestamp) external; // contract owner required function setUri(string memory newUri) external; // contract owner required function contractURI() external view returns (string memory); function setContractURI(string memory uri) external; function vote( uint8[] memory sortedIds, // Length from 1 to 3, ascending order bytes memory memo, // Within 128 bytes bytes32 ticket, bytes memory signature ) external; } contract CampaignV0 is ERC1155, ICampaignV0, Ownable { uint256 private _startDate; uint256 private _endDate; string private _contractUri; uint256 private _nextTokenId; // Array for candidate's total vote count uint64[] private _voteCounts; // Flag whether address is voted or not mapping(address => bool) private _isVoted; constructor( string memory tokenBaseUri, string memory contractBaseUri, uint8 totalCandidates, uint256 campaignStartDate, uint256 campaignEndDate ) ERC1155( string( abi.encodePacked( tokenBaseUri, "/", Strings.toHexString(block.chainid), "/", Strings.toHexString(uint256(uint160(address(this))), 20), "/{id}" ) ) ) { _contractUri = string( abi.encodePacked( contractBaseUri, "/", Strings.toHexString(block.chainid), "/", Strings.toHexString(uint256(uint160(address(this))), 20) ) ); _voteCounts = new uint64[](totalCandidates); _startDate = campaignStartDate; _endDate = campaignEndDate; _nextTokenId = 0; } function setUri(string memory newUri) external override { require(_msgSender() == owner(), "not an contract owner"); _setURI(newUri); } function setStartDate(uint256 newTimestamp) external override { require(_msgSender() == owner(), "not an contract owner"); _startDate = newTimestamp; } function setEndDate(uint256 newTimestamp) external override { require(_msgSender() == owner(), "not an contract owner"); _endDate = newTimestamp; } function totalVoteCount() external view override returns (uint64[] memory) { return _voteCounts; } function isVoted(address addr) external view override returns (bool) { return _isVoted[addr]; } function startDate() external view override returns (uint256) { return _startDate; } function endDate() external view override returns (uint256) { return _endDate; } function vote( uint8[] memory sortedIds, bytes memory memo, bytes32 ticket, bytes memory signature ) external override { require(block.timestamp >= _startDate, "vote not started yet"); require(block.timestamp <= _endDate, "vote is ended already"); require(!_isVoted[_msgSender()], "User is voted"); require( sortedIds.length >= 1 && sortedIds.length <= 3, "Ids length not in [1,3]" ); require(_isAscendingOrder(sortedIds), "Ids not in ascending order"); require(memo.length <= 128, "Memo should be within 128 bytes"); require(_isAuthorized(ticket, signature), "The vote is not authorized"); _mint(_msgSender(), _nextTokenId, 1, ""); _nextTokenId++; for (uint8 i = 0; i < sortedIds.length; i++) { _voteCounts[sortedIds[i]] += 1; } _isVoted[_msgSender()] = true; } function _isAuthorized(bytes32 hash, bytes memory signature) internal view returns (bool) { return owner() == ECDSA.recover(hash, signature); } function _isAscendingOrder(uint8[] memory arr) internal pure returns (bool) { if (arr.length == 1) return true; for (uint8 i = 1; i < arr.length; i++) { if (arr[i] <= arr[i - 1]) return false; } return true; } function contractURI() external view override returns (string memory) { return _contractUri; } function setContractURI(string memory uri) external override { require(_msgSender() == owner(), "not an contract owner"); _contractUri = uri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"tokenBaseUri","type":"string"},{"internalType":"string","name":"contractBaseUri","type":"string"},{"internalType":"uint8","name":"totalCandidates","type":"uint8"},{"internalType":"uint256","name":"campaignStartDate","type":"uint256"},{"internalType":"uint256","name":"campaignEndDate","type":"uint256"}],"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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endDate","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"isVoted","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":"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":"string","name":"uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"setEndDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"setStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVoteCount","outputs":[{"internalType":"uint64[]","name":"","type":"uint64[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"sortedIds","type":"uint8[]"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"bytes32","name":"ticket","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162005a4638038062005a4683398181016040528101906200003791906200089e565b846200004e46620001fe60201b6200131a1760201c565b6200007c3073ffffffffffffffffffffffffffffffffffffffff1660146200029260201b620013a01760201c565b604051602001620000909392919062000a4f565b604051602081830303815290604052620000b081620005a160201b60201c565b50620000d1620000c5620005bd60201b60201c565b620005c560201b60201c565b83620000e846620001fe60201b6200131a1760201c565b620001163073ffffffffffffffffffffffffffffffffffffffff1660146200029260201b620013a01760201c565b6040516020016200012a93929190620009fe565b60405160208183030381529060405260069080519060200190620001509291906200068b565b508260ff1667ffffffffffffffff81111562000195577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015620001c45781602001602082028036833780820191505090505b5060089080519060200190620001dc9291906200071c565b5081600481905550806005819055506000600781905550505050505062000e96565b6060600082141562000248576040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090506200028d565b600082905060005b6000821462000276578080620002669062000cfb565b915050600882901c915062000250565b6200028884826200029260201b60201c565b925050505b919050565b606060006002836002620002a7919062000bb2565b620002b3919062000b55565b67ffffffffffffffff811115620002f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015620003265781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811062000385577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811062000410577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262000452919062000bb2565b6200045e919062000b55565b90505b600181111562000550577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110620004c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b82828151811062000506577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080620005489062000c60565b905062000461565b506000841462000597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200058e9062000aad565b60405180910390fd5b8091505092915050565b8060029080519060200190620005b99291906200068b565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620006999062000c8f565b90600052602060002090601f016020900481019282620006bd576000855562000709565b82601f10620006d857805160ff191683800117855562000709565b8280016001018555821562000709579182015b8281111562000708578251825591602001919060010190620006eb565b5b509050620007189190620007df565b5090565b82805482825590600052602060002090600301600490048101928215620007cc5791602002820160005b838211156200079457835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550926020019260080160208160070104928301926001030262000746565b8015620007ca5782816101000a81549067ffffffffffffffff021916905560080160208160070104928301926001030262000794565b505b509050620007db9190620007df565b5090565b5b80821115620007fa576000816000905550600101620007e0565b5090565b6000620008156200080f8462000af8565b62000acf565b9050828152602081018484840111156200082e57600080fd5b6200083b84828562000c2a565b509392505050565b600082601f8301126200085557600080fd5b815162000867848260208601620007fe565b91505092915050565b600081519050620008818162000e62565b92915050565b600081519050620008988162000e7c565b92915050565b600080600080600060a08688031215620008b757600080fd5b600086015167ffffffffffffffff811115620008d257600080fd5b620008e08882890162000843565b955050602086015167ffffffffffffffff811115620008fe57600080fd5b6200090c8882890162000843565b94505060406200091f8882890162000887565b9350506060620009328882890162000870565b9250506080620009458882890162000870565b9150509295509295909350565b60006200095f8262000b2e565b6200096b818562000b4a565b93506200097d81856020860162000c2a565b80840191505092915050565b60006200099860208362000b39565b9150620009a58262000de7565b602082019050919050565b6000620009bf60058362000b4a565b9150620009cc8262000e10565b600582019050919050565b6000620009e660018362000b4a565b9150620009f38262000e39565b600182019050919050565b600062000a0c828662000952565b915062000a1982620009d7565b915062000a27828562000952565b915062000a3482620009d7565b915062000a42828462000952565b9150819050949350505050565b600062000a5d828662000952565b915062000a6a82620009d7565b915062000a78828562000952565b915062000a8582620009d7565b915062000a93828462000952565b915062000aa082620009b0565b9150819050949350505050565b6000602082019050818103600083015262000ac88162000989565b9050919050565b600062000adb62000aee565b905062000ae9828262000cc5565b919050565b6000604051905090565b600067ffffffffffffffff82111562000b165762000b1562000da7565b5b62000b218262000dd6565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600062000b628262000c13565b915062000b6f8362000c13565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ba75762000ba662000d49565b5b828201905092915050565b600062000bbf8262000c13565b915062000bcc8362000c13565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c085762000c0762000d49565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b60005b8381101562000c4a57808201518184015260208101905062000c2d565b8381111562000c5a576000848401525b50505050565b600062000c6d8262000c13565b9150600082141562000c845762000c8362000d49565b5b600182039050919050565b6000600282049050600182168062000ca857607f821691505b6020821081141562000cbf5762000cbe62000d78565b5b50919050565b62000cd08262000dd6565b810181811067ffffffffffffffff8211171562000cf25762000cf162000da7565b5b80604052505050565b600062000d088262000c13565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000d3e5762000d3d62000d49565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f2f7b69647d000000000000000000000000000000000000000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b62000e6d8162000c13565b811462000e7957600080fd5b50565b62000e878162000c1d565b811462000e9357600080fd5b50565b614ba08062000ea66000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063893d8f4c116100b8578063c24a0f8b1161007c578063c24a0f8b14610323578063cbff75cb14610341578063e8a3d48514610371578063e985e9c51461038f578063f242432a146103bf578063f2fde38b146103db57610136565b8063893d8f4c146102935780638da5cb5b146102b1578063938e3d7b146102cf5780639b642de1146102eb578063a22cb4651461030757610136565b80632eb2c2d6116100ff5780632eb2c2d6146102055780633784f000146102215780634e1273f41461023d578063715018a61461026d57806382d95df51461027757610136565b8062fdd58e1461013b57806301ffc9a71461016b5780630b97bc861461019b5780630e89341c146101b957806318bdcbf9146101e9575b600080fd5b610155600480360381019061015091906131c5565b6103f7565b6040516101629190613e43565b60405180910390f35b61018560048036038101906101809190613318565b6104c0565b6040516101929190613a81565b60405180910390f35b6101a36105a2565b6040516101b09190613e43565b60405180910390f35b6101d360048036038101906101ce91906133ab565b6105ac565b6040516101e09190613ae1565b60405180910390f35b61020360048036038101906101fe919061326d565b610640565b005b61021f600480360381019061021a919061303b565b610a2b565b005b61023b600480360381019061023691906133ab565b610acc565b005b61025760048036038101906102529190613201565b610b52565b6040516102649190613a06565b60405180910390f35b610275610d03565b005b610291600480360381019061028c91906133ab565b610d8b565b005b61029b610e11565b6040516102a89190613a5f565b60405180910390f35b6102b9610e9d565b6040516102c69190613929565b60405180910390f35b6102e960048036038101906102e4919061336a565b610ec7565b005b6103056004803603810190610300919061336a565b610f5d565b005b610321600480360381019061031c9190613189565b610fe5565b005b61032b610ffb565b6040516103389190613e43565b60405180910390f35b61035b60048036038101906103569190612fd6565b611005565b6040516103689190613a81565b60405180910390f35b61037961105b565b6040516103869190613ae1565b60405180910390f35b6103a960048036038101906103a49190612fff565b6110ed565b6040516103b69190613a81565b60405180910390f35b6103d960048036038101906103d491906130fa565b611181565b005b6103f560048036038101906103f09190612fd6565b611222565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045f90613ba3565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061059b575061059a8261169a565b5b9050919050565b6000600454905090565b6060600280546105bb90614269565b80601f01602080910402602001604051908101604052809291908181526020018280546105e790614269565b80156106345780601f1061060957610100808354040283529160200191610634565b820191906000526020600020905b81548152906001019060200180831161061757829003601f168201915b50505050509050919050565b600454421015610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90613d83565b60405180910390fd5b6005544211156106ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c190613ce3565b60405180910390fd5b600960006106d6611704565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075590613cc3565b60405180910390fd5b600184511015801561077257506003845111155b6107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a890613d43565b60405180910390fd5b6107ba8461170c565b6107f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f090613c03565b60405180910390fd5b60808351111561083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083590613da3565b60405180910390fd5b61084882826117fb565b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90613d63565b60405180910390fd5b6108ac610892611704565b600754600160405180602001604052806000815250611844565b600760008154809291906108bf906142cc565b919050555060005b84518160ff1610156109c55760016008868360ff1681518110610913577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160ff1681548110610955577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600491828204019190066008028282829054906101000a900467ffffffffffffffff1661098c9190614092565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080806109bd90614315565b9150506108c7565b506001600960006109d4611704565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b610a33611704565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a795750610a7885610a73611704565b6110ed565b5b610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90613c63565b60405180910390fd5b610ac585858585856119da565b5050505050565b610ad4610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610af2611704565b73ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613c83565b60405180910390fd5b8060058190555050565b60608151835114610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90613de3565b60405180910390fd5b6000835167ffffffffffffffff811115610bdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c095781602001602082028036833780820191505090505b50905060005b8451811015610cf857610ca2858281518110610c54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c95577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516103f7565b828281518110610cdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610cf1906142cc565b9050610c0f565b508091505092915050565b610d0b611704565b73ffffffffffffffffffffffffffffffffffffffff16610d29610e9d565b73ffffffffffffffffffffffffffffffffffffffff1614610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7690613d23565b60405180910390fd5b610d896000611d3a565b565b610d93610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610db1611704565b73ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613c83565b60405180910390fd5b8060048190555050565b60606008805480602002602001604051908101604052809291908181526020018280548015610e9357602002820191906000526020600020906000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610e4e5790505b5050505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ecf610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610eed611704565b73ffffffffffffffffffffffffffffffffffffffff1614610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90613c83565b60405180910390fd5b8060069080519060200190610f59929190612c0e565b5050565b610f65610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610f83611704565b73ffffffffffffffffffffffffffffffffffffffff1614610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613c83565b60405180910390fd5b610fe281611e00565b50565b610ff7610ff0611704565b8383611e1a565b5050565b6000600554905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606006805461106a90614269565b80601f016020809104026020016040519081016040528092919081815260200182805461109690614269565b80156110e35780601f106110b8576101008083540402835291602001916110e3565b820191906000526020600020905b8154815290600101906020018083116110c657829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611189611704565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111cf57506111ce856111c9611704565b6110ed565b5b61120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590613be3565b60405180910390fd5b61121b8585858585611f87565b5050505050565b61122a611704565b73ffffffffffffffffffffffffffffffffffffffff16611248610e9d565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590613d23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590613bc3565b60405180910390fd5b61131781611d3a565b50565b60606000821415611362576040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905061139b565b600082905060005b6000821461138c57808061137d906142cc565b915050600882901c915061136a565b61139684826113a0565b925050505b919050565b6060600060028360026113b391906140d0565b6113bd919061403c565b67ffffffffffffffff8111156113fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561142e5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061148c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611516577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261155691906140d0565b611560919061403c565b90505b600181111561164c577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106115c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611605577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806116459061423f565b9050611563565b5060008414611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790613b43565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600060018251141561172157600190506117f6565b6000600190505b82518160ff1610156117f05782600182611742919061412a565b60ff168151811061177c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160ff16838260ff16815181106117c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160ff16116117dd5760009150506117f6565b80806117e890614315565b915050611728565b50600190505b919050565b60006118078383612209565b73ffffffffffffffffffffffffffffffffffffffff16611825610e9d565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab90613e23565b60405180910390fd5b60006118be611704565b90506118df816000876118d088612230565b6118d988612230565b876122f6565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461193e919061403c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516119bc929190613e5e565b60405180910390a46119d3816000878787876122fe565b5050505050565b8151835114611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590613e03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590613c43565b60405180910390fd5b6000611a98611704565b9050611aa88187878787876122f6565b60005b8451811015611ca5576000858281518110611aef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611b34577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90613d03565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c8a919061403c565b9250508190555050505080611c9e906142cc565b9050611aab565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d1c929190613a28565b60405180910390a4611d328187878787876124e5565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060029080519060200190611e16929190612c0e565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8090613dc3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f7a9190613a81565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90613c43565b60405180910390fd5b6000612001611704565b905061202181878761201288612230565b61201b88612230565b876122f6565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156120b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120af90613d03565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216d919061403c565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516121ea929190613e5e565b60405180910390a46122008288888888886122fe565b50505050505050565b600080600061221885856126cc565b915091506122258161274f565b819250505092915050565b60606000600167ffffffffffffffff811115612275577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156122a35781602001602082028036833780820191505090505b50905082816000815181106122e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b61231d8473ffffffffffffffffffffffffffffffffffffffff16612aa0565b156124dd578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123639594939291906139ac565b602060405180830381600087803b15801561237d57600080fd5b505af19250505080156123ae57506040513d601f19601f820116820180604052508101906123ab9190613341565b60015b612454576123ba6143cc565b806308c379a0141561241757506123cf614a4a565b806123da5750612419565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e9190613ae1565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90613b23565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d290613b63565b60405180910390fd5b505b505050505050565b6125048473ffffffffffffffffffffffffffffffffffffffff16612aa0565b156126c4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161254a959493929190613944565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f820116820180604052508101906125929190613341565b60015b61263b576125a16143cc565b806308c379a014156125fe57506125b6614a4a565b806125c15750612600565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f59190613ae1565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263290613b23565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b990613b63565b60405180910390fd5b505b505050505050565b60008060418351141561270e5760008060006020860151925060408601519150606086015160001a905061270287828585612ab3565b94509450505050612748565b60408351141561273f576000806020850151915060408501519050612734868383612bc0565b935093505050612748565b60006002915091505b9250929050565b60006004811115612789577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156127c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156127cd57612a9d565b60016004811115612807577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612840577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890613b03565b60405180910390fd5b600260048111156128bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156128f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292c90613b83565b60405180910390fd5b6003600481111561296f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156129a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156129e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e090613c23565b60405180910390fd5b600480811115612a22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612a5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9390613ca3565b60405180910390fd5b5b50565b600080823b905060008111915050919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612aee576000600391509150612bb7565b601b8560ff1614158015612b065750601c8560ff1614155b15612b18576000600491509150612bb7565b600060018787878760405160008152602001604052604051612b3d9493929190613a9c565b6020604051602081039080840390855afa158015612b5f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bae57600060019250925050612bb7565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050612c0087828885612ab3565b935093505050935093915050565b828054612c1a90614269565b90600052602060002090601f016020900481019282612c3c5760008555612c83565b82601f10612c5557805160ff1916838001178555612c83565b82800160010185558215612c83579182015b82811115612c82578251825591602001919060010190612c67565b5b509050612c909190612c94565b5090565b5b80821115612cad576000816000905550600101612c95565b5090565b6000612cc4612cbf84613eac565b613e87565b90508083825260208201905082856020860282011115612ce357600080fd5b60005b85811015612d135781612cf98882612e71565b845260208401935060208301925050600181019050612ce6565b5050509392505050565b6000612d30612d2b84613ed8565b613e87565b90508083825260208201905082856020860282011115612d4f57600080fd5b60005b85811015612d7f5781612d658882612fac565b845260208401935060208301925050600181019050612d52565b5050509392505050565b6000612d9c612d9784613f04565b613e87565b90508083825260208201905082856020860282011115612dbb57600080fd5b60005b85811015612deb5781612dd18882612fc1565b845260208401935060208301925050600181019050612dbe565b5050509392505050565b6000612e08612e0384613f30565b613e87565b905082815260208101848484011115612e2057600080fd5b612e2b8482856141fd565b509392505050565b6000612e46612e4184613f61565b613e87565b905082815260208101848484011115612e5e57600080fd5b612e698482856141fd565b509392505050565b600081359050612e8081614ae0565b92915050565b600082601f830112612e9757600080fd5b8135612ea7848260208601612cb1565b91505092915050565b600082601f830112612ec157600080fd5b8135612ed1848260208601612d1d565b91505092915050565b600082601f830112612eeb57600080fd5b8135612efb848260208601612d89565b91505092915050565b600081359050612f1381614af7565b92915050565b600081359050612f2881614b0e565b92915050565b600081359050612f3d81614b25565b92915050565b600081519050612f5281614b25565b92915050565b600082601f830112612f6957600080fd5b8135612f79848260208601612df5565b91505092915050565b600082601f830112612f9357600080fd5b8135612fa3848260208601612e33565b91505092915050565b600081359050612fbb81614b3c565b92915050565b600081359050612fd081614b53565b92915050565b600060208284031215612fe857600080fd5b6000612ff684828501612e71565b91505092915050565b6000806040838503121561301257600080fd5b600061302085828601612e71565b925050602061303185828601612e71565b9150509250929050565b600080600080600060a0868803121561305357600080fd5b600061306188828901612e71565b955050602061307288828901612e71565b945050604086013567ffffffffffffffff81111561308f57600080fd5b61309b88828901612eb0565b935050606086013567ffffffffffffffff8111156130b857600080fd5b6130c488828901612eb0565b925050608086013567ffffffffffffffff8111156130e157600080fd5b6130ed88828901612f58565b9150509295509295909350565b600080600080600060a0868803121561311257600080fd5b600061312088828901612e71565b955050602061313188828901612e71565b945050604061314288828901612fac565b935050606061315388828901612fac565b925050608086013567ffffffffffffffff81111561317057600080fd5b61317c88828901612f58565b9150509295509295909350565b6000806040838503121561319c57600080fd5b60006131aa85828601612e71565b92505060206131bb85828601612f04565b9150509250929050565b600080604083850312156131d857600080fd5b60006131e685828601612e71565b92505060206131f785828601612fac565b9150509250929050565b6000806040838503121561321457600080fd5b600083013567ffffffffffffffff81111561322e57600080fd5b61323a85828601612e86565b925050602083013567ffffffffffffffff81111561325757600080fd5b61326385828601612eb0565b9150509250929050565b6000806000806080858703121561328357600080fd5b600085013567ffffffffffffffff81111561329d57600080fd5b6132a987828801612eda565b945050602085013567ffffffffffffffff8111156132c657600080fd5b6132d287828801612f58565b93505060406132e387828801612f19565b925050606085013567ffffffffffffffff81111561330057600080fd5b61330c87828801612f58565b91505092959194509250565b60006020828403121561332a57600080fd5b600061333884828501612f2e565b91505092915050565b60006020828403121561335357600080fd5b600061336184828501612f43565b91505092915050565b60006020828403121561337c57600080fd5b600082013567ffffffffffffffff81111561339657600080fd5b6133a284828501612f82565b91505092915050565b6000602082840312156133bd57600080fd5b60006133cb84828501612fac565b91505092915050565b60006133e083836138ed565b60208301905092915050565b60006133f8838361390b565b60208301905092915050565b61340d8161415e565b82525050565b600061341e82613fb2565b6134288185613ff8565b935061343383613f92565b8060005b8381101561346457815161344b88826133d4565b975061345683613fde565b925050600181019050613437565b5085935050505092915050565b600061347c82613fbd565b6134868185614009565b935061349183613fa2565b8060005b838110156134c25781516134a988826133ec565b97506134b483613feb565b925050600181019050613495565b5085935050505092915050565b6134d881614170565b82525050565b6134e78161417c565b82525050565b60006134f882613fc8565b613502818561401a565b935061351281856020860161420c565b61351b816143ee565b840191505092915050565b600061353182613fd3565b61353b818561402b565b935061354b81856020860161420c565b613554816143ee565b840191505092915050565b600061356c60188361402b565b91506135778261440c565b602082019050919050565b600061358f60348361402b565b915061359a82614435565b604082019050919050565b60006135b260208361402b565b91506135bd82614484565b602082019050919050565b60006135d560288361402b565b91506135e0826144ad565b604082019050919050565b60006135f8601f8361402b565b9150613603826144fc565b602082019050919050565b600061361b602b8361402b565b915061362682614525565b604082019050919050565b600061363e60268361402b565b915061364982614574565b604082019050919050565b600061366160298361402b565b915061366c826145c3565b604082019050919050565b6000613684601a8361402b565b915061368f82614612565b602082019050919050565b60006136a760228361402b565b91506136b28261463b565b604082019050919050565b60006136ca60258361402b565b91506136d58261468a565b604082019050919050565b60006136ed60328361402b565b91506136f8826146d9565b604082019050919050565b600061371060158361402b565b915061371b82614728565b602082019050919050565b600061373360228361402b565b915061373e82614751565b604082019050919050565b6000613756600d8361402b565b9150613761826147a0565b602082019050919050565b600061377960158361402b565b9150613784826147c9565b602082019050919050565b600061379c602a8361402b565b91506137a7826147f2565b604082019050919050565b60006137bf60208361402b565b91506137ca82614841565b602082019050919050565b60006137e260178361402b565b91506137ed8261486a565b602082019050919050565b6000613805601a8361402b565b915061381082614893565b602082019050919050565b600061382860148361402b565b9150613833826148bc565b602082019050919050565b600061384b601f8361402b565b9150613856826148e5565b602082019050919050565b600061386e60298361402b565b91506138798261490e565b604082019050919050565b600061389160298361402b565b915061389c8261495d565b604082019050919050565b60006138b460288361402b565b91506138bf826149ac565b604082019050919050565b60006138d760218361402b565b91506138e2826149fb565b604082019050919050565b6138f6816141d2565b82525050565b613905816141d2565b82525050565b613914816141dc565b82525050565b613923816141f0565b82525050565b600060208201905061393e6000830184613404565b92915050565b600060a0820190506139596000830188613404565b6139666020830187613404565b81810360408301526139788186613413565b9050818103606083015261398c8185613413565b905081810360808301526139a081846134ed565b90509695505050505050565b600060a0820190506139c16000830188613404565b6139ce6020830187613404565b6139db60408301866138fc565b6139e860608301856138fc565b81810360808301526139fa81846134ed565b90509695505050505050565b60006020820190508181036000830152613a208184613413565b905092915050565b60006040820190508181036000830152613a428185613413565b90508181036020830152613a568184613413565b90509392505050565b60006020820190508181036000830152613a798184613471565b905092915050565b6000602082019050613a9660008301846134cf565b92915050565b6000608082019050613ab160008301876134de565b613abe602083018661391a565b613acb60408301856134de565b613ad860608301846134de565b95945050505050565b60006020820190508181036000830152613afb8184613526565b905092915050565b60006020820190508181036000830152613b1c8161355f565b9050919050565b60006020820190508181036000830152613b3c81613582565b9050919050565b60006020820190508181036000830152613b5c816135a5565b9050919050565b60006020820190508181036000830152613b7c816135c8565b9050919050565b60006020820190508181036000830152613b9c816135eb565b9050919050565b60006020820190508181036000830152613bbc8161360e565b9050919050565b60006020820190508181036000830152613bdc81613631565b9050919050565b60006020820190508181036000830152613bfc81613654565b9050919050565b60006020820190508181036000830152613c1c81613677565b9050919050565b60006020820190508181036000830152613c3c8161369a565b9050919050565b60006020820190508181036000830152613c5c816136bd565b9050919050565b60006020820190508181036000830152613c7c816136e0565b9050919050565b60006020820190508181036000830152613c9c81613703565b9050919050565b60006020820190508181036000830152613cbc81613726565b9050919050565b60006020820190508181036000830152613cdc81613749565b9050919050565b60006020820190508181036000830152613cfc8161376c565b9050919050565b60006020820190508181036000830152613d1c8161378f565b9050919050565b60006020820190508181036000830152613d3c816137b2565b9050919050565b60006020820190508181036000830152613d5c816137d5565b9050919050565b60006020820190508181036000830152613d7c816137f8565b9050919050565b60006020820190508181036000830152613d9c8161381b565b9050919050565b60006020820190508181036000830152613dbc8161383e565b9050919050565b60006020820190508181036000830152613ddc81613861565b9050919050565b60006020820190508181036000830152613dfc81613884565b9050919050565b60006020820190508181036000830152613e1c816138a7565b9050919050565b60006020820190508181036000830152613e3c816138ca565b9050919050565b6000602082019050613e5860008301846138fc565b92915050565b6000604082019050613e7360008301856138fc565b613e8060208301846138fc565b9392505050565b6000613e91613ea2565b9050613e9d828261429b565b919050565b6000604051905090565b600067ffffffffffffffff821115613ec757613ec661439d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ef357613ef261439d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f1f57613f1e61439d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f4b57613f4a61439d565b5b613f54826143ee565b9050602081019050919050565b600067ffffffffffffffff821115613f7c57613f7b61439d565b5b613f85826143ee565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614047826141d2565b9150614052836141d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140875761408661433f565b5b828201905092915050565b600061409d826141dc565b91506140a8836141dc565b92508267ffffffffffffffff038211156140c5576140c461433f565b5b828201905092915050565b60006140db826141d2565b91506140e6836141d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561411f5761411e61433f565b5b828202905092915050565b6000614135826141f0565b9150614140836141f0565b9250828210156141535761415261433f565b5b828203905092915050565b6000614169826141b2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561422a57808201518184015260208101905061420f565b83811115614239576000848401525b50505050565b600061424a826141d2565b9150600082141561425e5761425d61433f565b5b600182039050919050565b6000600282049050600182168061428157607f821691505b602082108114156142955761429461436e565b5b50919050565b6142a4826143ee565b810181811067ffffffffffffffff821117156142c3576142c261439d565b5b80604052505050565b60006142d7826141d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561430a5761430961433f565b5b600182019050919050565b6000614320826141f0565b915060ff8214156143345761433361433f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156143eb5760046000803e6143e86000516143ff565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496473206e6f7420696e20617363656e64696e67206f72646572000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6e6f7420616e20636f6e7472616374206f776e65720000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5573657220697320766f74656400000000000000000000000000000000000000600082015250565b7f766f746520697320656e64656420616c72656164790000000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496473206c656e677468206e6f7420696e205b312c335d000000000000000000600082015250565b7f54686520766f7465206973206e6f7420617574686f72697a6564000000000000600082015250565b7f766f7465206e6f74207374617274656420796574000000000000000000000000600082015250565b7f4d656d6f2073686f756c642062652077697468696e2031323820627974657300600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614a5a57614add565b614a62613ea2565b60043d036004823e80513d602482011167ffffffffffffffff82111715614a8a575050614add565b808201805167ffffffffffffffff811115614aa85750505050614add565b80602083010160043d038501811115614ac5575050505050614add565b614ad48260200185018661429b565b82955050505050505b90565b614ae98161415e565b8114614af457600080fd5b50565b614b0081614170565b8114614b0b57600080fd5b50565b614b178161417c565b8114614b2257600080fd5b50565b614b2e81614186565b8114614b3957600080fd5b50565b614b45816141d2565b8114614b5057600080fd5b50565b614b5c816141f0565b8114614b6757600080fd5b5056fea264697066735822122089556867a32813ef9d82515d63f5df9acc02002ffc343d8d6022accea30642c064736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000061e7c50000000000000000000000000000000000000000000000000000000000621dd280000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e6d6574617a6f6e732e636f6d2f6d6574616461746100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e6d6574617a6f6e732e636f6d2f6d6574616461746100000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063893d8f4c116100b8578063c24a0f8b1161007c578063c24a0f8b14610323578063cbff75cb14610341578063e8a3d48514610371578063e985e9c51461038f578063f242432a146103bf578063f2fde38b146103db57610136565b8063893d8f4c146102935780638da5cb5b146102b1578063938e3d7b146102cf5780639b642de1146102eb578063a22cb4651461030757610136565b80632eb2c2d6116100ff5780632eb2c2d6146102055780633784f000146102215780634e1273f41461023d578063715018a61461026d57806382d95df51461027757610136565b8062fdd58e1461013b57806301ffc9a71461016b5780630b97bc861461019b5780630e89341c146101b957806318bdcbf9146101e9575b600080fd5b610155600480360381019061015091906131c5565b6103f7565b6040516101629190613e43565b60405180910390f35b61018560048036038101906101809190613318565b6104c0565b6040516101929190613a81565b60405180910390f35b6101a36105a2565b6040516101b09190613e43565b60405180910390f35b6101d360048036038101906101ce91906133ab565b6105ac565b6040516101e09190613ae1565b60405180910390f35b61020360048036038101906101fe919061326d565b610640565b005b61021f600480360381019061021a919061303b565b610a2b565b005b61023b600480360381019061023691906133ab565b610acc565b005b61025760048036038101906102529190613201565b610b52565b6040516102649190613a06565b60405180910390f35b610275610d03565b005b610291600480360381019061028c91906133ab565b610d8b565b005b61029b610e11565b6040516102a89190613a5f565b60405180910390f35b6102b9610e9d565b6040516102c69190613929565b60405180910390f35b6102e960048036038101906102e4919061336a565b610ec7565b005b6103056004803603810190610300919061336a565b610f5d565b005b610321600480360381019061031c9190613189565b610fe5565b005b61032b610ffb565b6040516103389190613e43565b60405180910390f35b61035b60048036038101906103569190612fd6565b611005565b6040516103689190613a81565b60405180910390f35b61037961105b565b6040516103869190613ae1565b60405180910390f35b6103a960048036038101906103a49190612fff565b6110ed565b6040516103b69190613a81565b60405180910390f35b6103d960048036038101906103d491906130fa565b611181565b005b6103f560048036038101906103f09190612fd6565b611222565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045f90613ba3565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061059b575061059a8261169a565b5b9050919050565b6000600454905090565b6060600280546105bb90614269565b80601f01602080910402602001604051908101604052809291908181526020018280546105e790614269565b80156106345780601f1061060957610100808354040283529160200191610634565b820191906000526020600020905b81548152906001019060200180831161061757829003601f168201915b50505050509050919050565b600454421015610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90613d83565b60405180910390fd5b6005544211156106ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c190613ce3565b60405180910390fd5b600960006106d6611704565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075590613cc3565b60405180910390fd5b600184511015801561077257506003845111155b6107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a890613d43565b60405180910390fd5b6107ba8461170c565b6107f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f090613c03565b60405180910390fd5b60808351111561083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083590613da3565b60405180910390fd5b61084882826117fb565b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90613d63565b60405180910390fd5b6108ac610892611704565b600754600160405180602001604052806000815250611844565b600760008154809291906108bf906142cc565b919050555060005b84518160ff1610156109c55760016008868360ff1681518110610913577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160ff1681548110610955577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600491828204019190066008028282829054906101000a900467ffffffffffffffff1661098c9190614092565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080806109bd90614315565b9150506108c7565b506001600960006109d4611704565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b610a33611704565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a795750610a7885610a73611704565b6110ed565b5b610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90613c63565b60405180910390fd5b610ac585858585856119da565b5050505050565b610ad4610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610af2611704565b73ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613c83565b60405180910390fd5b8060058190555050565b60608151835114610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90613de3565b60405180910390fd5b6000835167ffffffffffffffff811115610bdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c095781602001602082028036833780820191505090505b50905060005b8451811015610cf857610ca2858281518110610c54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c95577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516103f7565b828281518110610cdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610cf1906142cc565b9050610c0f565b508091505092915050565b610d0b611704565b73ffffffffffffffffffffffffffffffffffffffff16610d29610e9d565b73ffffffffffffffffffffffffffffffffffffffff1614610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7690613d23565b60405180910390fd5b610d896000611d3a565b565b610d93610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610db1611704565b73ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613c83565b60405180910390fd5b8060048190555050565b60606008805480602002602001604051908101604052809291908181526020018280548015610e9357602002820191906000526020600020906000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610e4e5790505b5050505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ecf610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610eed611704565b73ffffffffffffffffffffffffffffffffffffffff1614610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90613c83565b60405180910390fd5b8060069080519060200190610f59929190612c0e565b5050565b610f65610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610f83611704565b73ffffffffffffffffffffffffffffffffffffffff1614610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613c83565b60405180910390fd5b610fe281611e00565b50565b610ff7610ff0611704565b8383611e1a565b5050565b6000600554905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606006805461106a90614269565b80601f016020809104026020016040519081016040528092919081815260200182805461109690614269565b80156110e35780601f106110b8576101008083540402835291602001916110e3565b820191906000526020600020905b8154815290600101906020018083116110c657829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611189611704565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111cf57506111ce856111c9611704565b6110ed565b5b61120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590613be3565b60405180910390fd5b61121b8585858585611f87565b5050505050565b61122a611704565b73ffffffffffffffffffffffffffffffffffffffff16611248610e9d565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590613d23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590613bc3565b60405180910390fd5b61131781611d3a565b50565b60606000821415611362576040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905061139b565b600082905060005b6000821461138c57808061137d906142cc565b915050600882901c915061136a565b61139684826113a0565b925050505b919050565b6060600060028360026113b391906140d0565b6113bd919061403c565b67ffffffffffffffff8111156113fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561142e5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061148c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611516577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261155691906140d0565b611560919061403c565b90505b600181111561164c577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106115c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611605577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806116459061423f565b9050611563565b5060008414611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790613b43565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600060018251141561172157600190506117f6565b6000600190505b82518160ff1610156117f05782600182611742919061412a565b60ff168151811061177c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160ff16838260ff16815181106117c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160ff16116117dd5760009150506117f6565b80806117e890614315565b915050611728565b50600190505b919050565b60006118078383612209565b73ffffffffffffffffffffffffffffffffffffffff16611825610e9d565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab90613e23565b60405180910390fd5b60006118be611704565b90506118df816000876118d088612230565b6118d988612230565b876122f6565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461193e919061403c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516119bc929190613e5e565b60405180910390a46119d3816000878787876122fe565b5050505050565b8151835114611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590613e03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590613c43565b60405180910390fd5b6000611a98611704565b9050611aa88187878787876122f6565b60005b8451811015611ca5576000858281518110611aef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611b34577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90613d03565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c8a919061403c565b9250508190555050505080611c9e906142cc565b9050611aab565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d1c929190613a28565b60405180910390a4611d328187878787876124e5565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060029080519060200190611e16929190612c0e565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8090613dc3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f7a9190613a81565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90613c43565b60405180910390fd5b6000612001611704565b905061202181878761201288612230565b61201b88612230565b876122f6565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156120b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120af90613d03565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216d919061403c565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516121ea929190613e5e565b60405180910390a46122008288888888886122fe565b50505050505050565b600080600061221885856126cc565b915091506122258161274f565b819250505092915050565b60606000600167ffffffffffffffff811115612275577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156122a35781602001602082028036833780820191505090505b50905082816000815181106122e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b61231d8473ffffffffffffffffffffffffffffffffffffffff16612aa0565b156124dd578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123639594939291906139ac565b602060405180830381600087803b15801561237d57600080fd5b505af19250505080156123ae57506040513d601f19601f820116820180604052508101906123ab9190613341565b60015b612454576123ba6143cc565b806308c379a0141561241757506123cf614a4a565b806123da5750612419565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e9190613ae1565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90613b23565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d290613b63565b60405180910390fd5b505b505050505050565b6125048473ffffffffffffffffffffffffffffffffffffffff16612aa0565b156126c4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161254a959493929190613944565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f820116820180604052508101906125929190613341565b60015b61263b576125a16143cc565b806308c379a014156125fe57506125b6614a4a565b806125c15750612600565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f59190613ae1565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263290613b23565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b990613b63565b60405180910390fd5b505b505050505050565b60008060418351141561270e5760008060006020860151925060408601519150606086015160001a905061270287828585612ab3565b94509450505050612748565b60408351141561273f576000806020850151915060408501519050612734868383612bc0565b935093505050612748565b60006002915091505b9250929050565b60006004811115612789577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156127c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156127cd57612a9d565b60016004811115612807577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612840577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890613b03565b60405180910390fd5b600260048111156128bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156128f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292c90613b83565b60405180910390fd5b6003600481111561296f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156129a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156129e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e090613c23565b60405180910390fd5b600480811115612a22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612a5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9390613ca3565b60405180910390fd5b5b50565b600080823b905060008111915050919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612aee576000600391509150612bb7565b601b8560ff1614158015612b065750601c8560ff1614155b15612b18576000600491509150612bb7565b600060018787878760405160008152602001604052604051612b3d9493929190613a9c565b6020604051602081039080840390855afa158015612b5f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bae57600060019250925050612bb7565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050612c0087828885612ab3565b935093505050935093915050565b828054612c1a90614269565b90600052602060002090601f016020900481019282612c3c5760008555612c83565b82601f10612c5557805160ff1916838001178555612c83565b82800160010185558215612c83579182015b82811115612c82578251825591602001919060010190612c67565b5b509050612c909190612c94565b5090565b5b80821115612cad576000816000905550600101612c95565b5090565b6000612cc4612cbf84613eac565b613e87565b90508083825260208201905082856020860282011115612ce357600080fd5b60005b85811015612d135781612cf98882612e71565b845260208401935060208301925050600181019050612ce6565b5050509392505050565b6000612d30612d2b84613ed8565b613e87565b90508083825260208201905082856020860282011115612d4f57600080fd5b60005b85811015612d7f5781612d658882612fac565b845260208401935060208301925050600181019050612d52565b5050509392505050565b6000612d9c612d9784613f04565b613e87565b90508083825260208201905082856020860282011115612dbb57600080fd5b60005b85811015612deb5781612dd18882612fc1565b845260208401935060208301925050600181019050612dbe565b5050509392505050565b6000612e08612e0384613f30565b613e87565b905082815260208101848484011115612e2057600080fd5b612e2b8482856141fd565b509392505050565b6000612e46612e4184613f61565b613e87565b905082815260208101848484011115612e5e57600080fd5b612e698482856141fd565b509392505050565b600081359050612e8081614ae0565b92915050565b600082601f830112612e9757600080fd5b8135612ea7848260208601612cb1565b91505092915050565b600082601f830112612ec157600080fd5b8135612ed1848260208601612d1d565b91505092915050565b600082601f830112612eeb57600080fd5b8135612efb848260208601612d89565b91505092915050565b600081359050612f1381614af7565b92915050565b600081359050612f2881614b0e565b92915050565b600081359050612f3d81614b25565b92915050565b600081519050612f5281614b25565b92915050565b600082601f830112612f6957600080fd5b8135612f79848260208601612df5565b91505092915050565b600082601f830112612f9357600080fd5b8135612fa3848260208601612e33565b91505092915050565b600081359050612fbb81614b3c565b92915050565b600081359050612fd081614b53565b92915050565b600060208284031215612fe857600080fd5b6000612ff684828501612e71565b91505092915050565b6000806040838503121561301257600080fd5b600061302085828601612e71565b925050602061303185828601612e71565b9150509250929050565b600080600080600060a0868803121561305357600080fd5b600061306188828901612e71565b955050602061307288828901612e71565b945050604086013567ffffffffffffffff81111561308f57600080fd5b61309b88828901612eb0565b935050606086013567ffffffffffffffff8111156130b857600080fd5b6130c488828901612eb0565b925050608086013567ffffffffffffffff8111156130e157600080fd5b6130ed88828901612f58565b9150509295509295909350565b600080600080600060a0868803121561311257600080fd5b600061312088828901612e71565b955050602061313188828901612e71565b945050604061314288828901612fac565b935050606061315388828901612fac565b925050608086013567ffffffffffffffff81111561317057600080fd5b61317c88828901612f58565b9150509295509295909350565b6000806040838503121561319c57600080fd5b60006131aa85828601612e71565b92505060206131bb85828601612f04565b9150509250929050565b600080604083850312156131d857600080fd5b60006131e685828601612e71565b92505060206131f785828601612fac565b9150509250929050565b6000806040838503121561321457600080fd5b600083013567ffffffffffffffff81111561322e57600080fd5b61323a85828601612e86565b925050602083013567ffffffffffffffff81111561325757600080fd5b61326385828601612eb0565b9150509250929050565b6000806000806080858703121561328357600080fd5b600085013567ffffffffffffffff81111561329d57600080fd5b6132a987828801612eda565b945050602085013567ffffffffffffffff8111156132c657600080fd5b6132d287828801612f58565b93505060406132e387828801612f19565b925050606085013567ffffffffffffffff81111561330057600080fd5b61330c87828801612f58565b91505092959194509250565b60006020828403121561332a57600080fd5b600061333884828501612f2e565b91505092915050565b60006020828403121561335357600080fd5b600061336184828501612f43565b91505092915050565b60006020828403121561337c57600080fd5b600082013567ffffffffffffffff81111561339657600080fd5b6133a284828501612f82565b91505092915050565b6000602082840312156133bd57600080fd5b60006133cb84828501612fac565b91505092915050565b60006133e083836138ed565b60208301905092915050565b60006133f8838361390b565b60208301905092915050565b61340d8161415e565b82525050565b600061341e82613fb2565b6134288185613ff8565b935061343383613f92565b8060005b8381101561346457815161344b88826133d4565b975061345683613fde565b925050600181019050613437565b5085935050505092915050565b600061347c82613fbd565b6134868185614009565b935061349183613fa2565b8060005b838110156134c25781516134a988826133ec565b97506134b483613feb565b925050600181019050613495565b5085935050505092915050565b6134d881614170565b82525050565b6134e78161417c565b82525050565b60006134f882613fc8565b613502818561401a565b935061351281856020860161420c565b61351b816143ee565b840191505092915050565b600061353182613fd3565b61353b818561402b565b935061354b81856020860161420c565b613554816143ee565b840191505092915050565b600061356c60188361402b565b91506135778261440c565b602082019050919050565b600061358f60348361402b565b915061359a82614435565b604082019050919050565b60006135b260208361402b565b91506135bd82614484565b602082019050919050565b60006135d560288361402b565b91506135e0826144ad565b604082019050919050565b60006135f8601f8361402b565b9150613603826144fc565b602082019050919050565b600061361b602b8361402b565b915061362682614525565b604082019050919050565b600061363e60268361402b565b915061364982614574565b604082019050919050565b600061366160298361402b565b915061366c826145c3565b604082019050919050565b6000613684601a8361402b565b915061368f82614612565b602082019050919050565b60006136a760228361402b565b91506136b28261463b565b604082019050919050565b60006136ca60258361402b565b91506136d58261468a565b604082019050919050565b60006136ed60328361402b565b91506136f8826146d9565b604082019050919050565b600061371060158361402b565b915061371b82614728565b602082019050919050565b600061373360228361402b565b915061373e82614751565b604082019050919050565b6000613756600d8361402b565b9150613761826147a0565b602082019050919050565b600061377960158361402b565b9150613784826147c9565b602082019050919050565b600061379c602a8361402b565b91506137a7826147f2565b604082019050919050565b60006137bf60208361402b565b91506137ca82614841565b602082019050919050565b60006137e260178361402b565b91506137ed8261486a565b602082019050919050565b6000613805601a8361402b565b915061381082614893565b602082019050919050565b600061382860148361402b565b9150613833826148bc565b602082019050919050565b600061384b601f8361402b565b9150613856826148e5565b602082019050919050565b600061386e60298361402b565b91506138798261490e565b604082019050919050565b600061389160298361402b565b915061389c8261495d565b604082019050919050565b60006138b460288361402b565b91506138bf826149ac565b604082019050919050565b60006138d760218361402b565b91506138e2826149fb565b604082019050919050565b6138f6816141d2565b82525050565b613905816141d2565b82525050565b613914816141dc565b82525050565b613923816141f0565b82525050565b600060208201905061393e6000830184613404565b92915050565b600060a0820190506139596000830188613404565b6139666020830187613404565b81810360408301526139788186613413565b9050818103606083015261398c8185613413565b905081810360808301526139a081846134ed565b90509695505050505050565b600060a0820190506139c16000830188613404565b6139ce6020830187613404565b6139db60408301866138fc565b6139e860608301856138fc565b81810360808301526139fa81846134ed565b90509695505050505050565b60006020820190508181036000830152613a208184613413565b905092915050565b60006040820190508181036000830152613a428185613413565b90508181036020830152613a568184613413565b90509392505050565b60006020820190508181036000830152613a798184613471565b905092915050565b6000602082019050613a9660008301846134cf565b92915050565b6000608082019050613ab160008301876134de565b613abe602083018661391a565b613acb60408301856134de565b613ad860608301846134de565b95945050505050565b60006020820190508181036000830152613afb8184613526565b905092915050565b60006020820190508181036000830152613b1c8161355f565b9050919050565b60006020820190508181036000830152613b3c81613582565b9050919050565b60006020820190508181036000830152613b5c816135a5565b9050919050565b60006020820190508181036000830152613b7c816135c8565b9050919050565b60006020820190508181036000830152613b9c816135eb565b9050919050565b60006020820190508181036000830152613bbc8161360e565b9050919050565b60006020820190508181036000830152613bdc81613631565b9050919050565b60006020820190508181036000830152613bfc81613654565b9050919050565b60006020820190508181036000830152613c1c81613677565b9050919050565b60006020820190508181036000830152613c3c8161369a565b9050919050565b60006020820190508181036000830152613c5c816136bd565b9050919050565b60006020820190508181036000830152613c7c816136e0565b9050919050565b60006020820190508181036000830152613c9c81613703565b9050919050565b60006020820190508181036000830152613cbc81613726565b9050919050565b60006020820190508181036000830152613cdc81613749565b9050919050565b60006020820190508181036000830152613cfc8161376c565b9050919050565b60006020820190508181036000830152613d1c8161378f565b9050919050565b60006020820190508181036000830152613d3c816137b2565b9050919050565b60006020820190508181036000830152613d5c816137d5565b9050919050565b60006020820190508181036000830152613d7c816137f8565b9050919050565b60006020820190508181036000830152613d9c8161381b565b9050919050565b60006020820190508181036000830152613dbc8161383e565b9050919050565b60006020820190508181036000830152613ddc81613861565b9050919050565b60006020820190508181036000830152613dfc81613884565b9050919050565b60006020820190508181036000830152613e1c816138a7565b9050919050565b60006020820190508181036000830152613e3c816138ca565b9050919050565b6000602082019050613e5860008301846138fc565b92915050565b6000604082019050613e7360008301856138fc565b613e8060208301846138fc565b9392505050565b6000613e91613ea2565b9050613e9d828261429b565b919050565b6000604051905090565b600067ffffffffffffffff821115613ec757613ec661439d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ef357613ef261439d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f1f57613f1e61439d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f4b57613f4a61439d565b5b613f54826143ee565b9050602081019050919050565b600067ffffffffffffffff821115613f7c57613f7b61439d565b5b613f85826143ee565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614047826141d2565b9150614052836141d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140875761408661433f565b5b828201905092915050565b600061409d826141dc565b91506140a8836141dc565b92508267ffffffffffffffff038211156140c5576140c461433f565b5b828201905092915050565b60006140db826141d2565b91506140e6836141d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561411f5761411e61433f565b5b828202905092915050565b6000614135826141f0565b9150614140836141f0565b9250828210156141535761415261433f565b5b828203905092915050565b6000614169826141b2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561422a57808201518184015260208101905061420f565b83811115614239576000848401525b50505050565b600061424a826141d2565b9150600082141561425e5761425d61433f565b5b600182039050919050565b6000600282049050600182168061428157607f821691505b602082108114156142955761429461436e565b5b50919050565b6142a4826143ee565b810181811067ffffffffffffffff821117156142c3576142c261439d565b5b80604052505050565b60006142d7826141d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561430a5761430961433f565b5b600182019050919050565b6000614320826141f0565b915060ff8214156143345761433361433f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156143eb5760046000803e6143e86000516143ff565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496473206e6f7420696e20617363656e64696e67206f72646572000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6e6f7420616e20636f6e7472616374206f776e65720000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5573657220697320766f74656400000000000000000000000000000000000000600082015250565b7f766f746520697320656e64656420616c72656164790000000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496473206c656e677468206e6f7420696e205b312c335d000000000000000000600082015250565b7f54686520766f7465206973206e6f7420617574686f72697a6564000000000000600082015250565b7f766f7465206e6f74207374617274656420796574000000000000000000000000600082015250565b7f4d656d6f2073686f756c642062652077697468696e2031323820627974657300600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614a5a57614add565b614a62613ea2565b60043d036004823e80513d602482011167ffffffffffffffff82111715614a8a575050614add565b808201805167ffffffffffffffff811115614aa85750505050614add565b80602083010160043d038501811115614ac5575050505050614add565b614ad48260200185018661429b565b82955050505050505b90565b614ae98161415e565b8114614af457600080fd5b50565b614b0081614170565b8114614b0b57600080fd5b50565b614b178161417c565b8114614b2257600080fd5b50565b614b2e81614186565b8114614b3957600080fd5b50565b614b45816141d2565b8114614b5057600080fd5b50565b614b5c816141f0565b8114614b6757600080fd5b5056fea264697066735822122089556867a32813ef9d82515d63f5df9acc02002ffc343d8d6022accea30642c064736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000061e7c50000000000000000000000000000000000000000000000000000000000621dd280000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e6d6574617a6f6e732e636f6d2f6d6574616461746100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e6d6574617a6f6e732e636f6d2f6d6574616461746100000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : tokenBaseUri (string): https://api.metazons.com/metadata
Arg [1] : contractBaseUri (string): https://api.metazons.com/metadata
Arg [2] : totalCandidates (uint8): 42
Arg [3] : campaignStartDate (uint256): 1642579200
Arg [4] : campaignEndDate (uint256): 1646121600
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [3] : 0000000000000000000000000000000000000000000000000000000061e7c500
Arg [4] : 00000000000000000000000000000000000000000000000000000000621dd280
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [6] : 68747470733a2f2f6170692e6d6574617a6f6e732e636f6d2f6d657461646174
Arg [7] : 6100000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [9] : 68747470733a2f2f6170692e6d6574617a6f6e732e636f6d2f6d657461646174
Arg [10] : 6100000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
49106:3668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20443:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19466:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51015:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20187:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51207:874;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22382:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50628:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20840:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47363:103;;;:::i;:::-;;50458:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50794:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46712:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52615:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50304:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21437:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51113:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50906:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52507:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21664:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21904:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47621:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20443:231;20529:7;20576:1;20557:21;;:7;:21;;;;20549:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20644:9;:13;20654:2;20644:13;;;;;;;;;;;:22;20658:7;20644:22;;;;;;;;;;;;;;;;20637:29;;20443:231;;;;:::o;19466:310::-;19568:4;19620:26;19605:41;;;:11;:41;;;;:110;;;;19678:37;19663:52;;;:11;:52;;;;19605:110;:163;;;;19732:36;19756:11;19732:23;:36::i;:::-;19605:163;19585:183;;19466:310;;;:::o;51015:92::-;51068:7;51091:10;;51084:17;;51015:92;:::o;20187:105::-;20247:13;20280:4;20273:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20187:105;;;:::o;51207:874::-;51383:10;;51364:15;:29;;51356:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51452:8;;51433:15;:27;;51425:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51502:8;:22;51511:12;:10;:12::i;:::-;51502:22;;;;;;;;;;;;;;;;;;;;;;;;;51501:23;51493:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;51585:1;51565:9;:16;:21;;:46;;;;;51610:1;51590:9;:16;:21;;51565:46;51549:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;51667:28;51685:9;51667:17;:28::i;:::-;51659:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51756:3;51741:4;:11;:18;;51733:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51810:32;51824:6;51832:9;51810:13;:32::i;:::-;51802:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51880:40;51886:12;:10;:12::i;:::-;51900;;51914:1;51880:40;;;;;;;;;;;;:5;:40::i;:::-;51927:12;;:14;;;;;;;;;:::i;:::-;;;;;;51953:7;51948:92;51970:9;:16;51966:1;:20;;;51948:92;;;52031:1;52002:11;52014:9;52024:1;52014:12;;;;;;;;;;;;;;;;;;;;;;;;52002:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;51988:3;;;;;:::i;:::-;;;;51948:92;;;;52071:4;52046:8;:22;52055:12;:10;:12::i;:::-;52046:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51207:874;;;;:::o;22382:442::-;22623:12;:10;:12::i;:::-;22615:20;;:4;:20;;;:60;;;;22639:36;22656:4;22662:12;:10;:12::i;:::-;22639:16;:36::i;:::-;22615:60;22593:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22764:52;22787:4;22793:2;22797:3;22802:7;22811:4;22764:22;:52::i;:::-;22382:442;;;;;:::o;50628:160::-;50719:7;:5;:7::i;:::-;50703:23;;:12;:10;:12::i;:::-;:23;;;50695:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50770:12;50759:8;:23;;;;50628:160;:::o;20840:524::-;20996:16;21057:3;:10;21038:8;:15;:29;21030:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21126:30;21173:8;:15;21159:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21126:63;;21207:9;21202:122;21226:8;:15;21222:1;:19;21202:122;;;21282:30;21292:8;21301:1;21292:11;;;;;;;;;;;;;;;;;;;;;;21305:3;21309:1;21305:6;;;;;;;;;;;;;;;;;;;;;;21282:9;:30::i;:::-;21263:13;21277:1;21263:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;21243:3;;;;:::i;:::-;;;21202:122;;;;21343:13;21336:20;;;20840:524;;;;:::o;47363:103::-;46943:12;:10;:12::i;:::-;46932:23;;:7;:5;:7::i;:::-;:23;;;46924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47428:30:::1;47455:1;47428:18;:30::i;:::-;47363:103::o:0;50458:164::-;50551:7;:5;:7::i;:::-;50535:23;;:12;:10;:12::i;:::-;:23;;;50527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50604:12;50591:10;:25;;;;50458:164;:::o;50794:106::-;50852:15;50883:11;50876:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50794:106;:::o;46712:87::-;46758:7;46785:6;;;;;;;;;;;46778:13;;46712:87;:::o;52615:156::-;52707:7;:5;:7::i;:::-;52691:23;;:12;:10;:12::i;:::-;:23;;;52683:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;52762:3;52747:12;:18;;;;;;;;;;;;:::i;:::-;;52615:156;:::o;50304:148::-;50391:7;:5;:7::i;:::-;50375:23;;:12;:10;:12::i;:::-;:23;;;50367:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50431:15;50439:6;50431:7;:15::i;:::-;50304:148;:::o;21437:155::-;21532:52;21551:12;:10;:12::i;:::-;21565:8;21575;21532:18;:52::i;:::-;21437:155;;:::o;51113:88::-;51164:7;51187:8;;51180:15;;51113:88;:::o;50906:103::-;50969:4;50989:8;:14;50998:4;50989:14;;;;;;;;;;;;;;;;;;;;;;;;;50982:21;;50906:103;;;:::o;52507:102::-;52562:13;52591:12;52584:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52507:102;:::o;21664:168::-;21763:4;21787:18;:27;21806:7;21787:27;;;;;;;;;;;;;;;:37;21815:8;21787:37;;;;;;;;;;;;;;;;;;;;;;;;;21780:44;;21664:168;;;;:::o;21904:401::-;22120:12;:10;:12::i;:::-;22112:20;;:4;:20;;;:60;;;;22136:36;22153:4;22159:12;:10;:12::i;:::-;22136:16;:36::i;:::-;22112:60;22090:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22252:45;22270:4;22276:2;22280;22284:6;22292:4;22252:17;:45::i;:::-;21904:401;;;;;:::o;47621:201::-;46943:12;:10;:12::i;:::-;46932:23;;:7;:5;:7::i;:::-;:23;;;46924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47730:1:::1;47710:22;;:8;:22;;;;47702:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47786:28;47805:8;47786:18;:28::i;:::-;47621:201:::0;:::o;35150:340::-;35209:13;35248:1;35239:5;:10;35235:56;;;35266:13;;;;;;;;;;;;;;;;;;;;;35235:56;35301:12;35316:5;35301:20;;35332:14;35361:78;35376:1;35368:4;:9;35361:78;;35394:8;;;;;:::i;:::-;;;;35426:1;35417:10;;;;;35361:78;;;35456:26;35468:5;35475:6;35456:11;:26::i;:::-;35449:33;;;;35150:340;;;;:::o;35618:451::-;35693:13;35719:19;35764:1;35755:6;35751:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;35741:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35719:47;;35777:15;:6;35784:1;35777:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;35803;:6;35810:1;35803:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;35834:9;35859:1;35850:6;35846:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;35834:26;;35829:135;35866:1;35862;:5;35829:135;;;35901:12;35922:3;35914:5;:11;35901:25;;;;;;;;;;;;;;;;;;35889:6;35896:1;35889:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;35951:1;35941:11;;;;;35869:3;;;;:::i;:::-;;;35829:135;;;;35991:1;35982:5;:10;35974:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36054:6;36040:21;;;35618:451;;;;:::o;18221:157::-;18306:4;18345:25;18330:40;;;:11;:40;;;;18323:47;;18221:157;;;:::o;17138:98::-;17191:7;17218:10;17211:17;;17138:98;:::o;52262:239::-;52332:4;52363:1;52349:3;:10;:15;52345:32;;;52373:4;52366:11;;;;52345:32;52389:7;52399:1;52389:11;;52384:94;52406:3;:10;52402:1;:14;;;52384:94;;;52446:3;52454:1;52450;:5;;;;:::i;:::-;52446:10;;;;;;;;;;;;;;;;;;;;;;;;52436:20;;:3;52440:1;52436:6;;;;;;;;;;;;;;;;;;;;;;;;:20;;;52432:38;;52465:5;52458:12;;;;;52432:38;52418:3;;;;;:::i;:::-;;;;52384:94;;;;52491:4;52484:11;;52262:239;;;;:::o;52087:169::-;52186:4;52220:30;52234:4;52240:9;52220:13;:30::i;:::-;52209:41;;:7;:5;:7::i;:::-;:41;;;52202:48;;52087:169;;;;:::o;26858:569::-;27025:1;27011:16;;:2;:16;;;;27003:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27078:16;27097:12;:10;:12::i;:::-;27078:31;;27122:102;27143:8;27161:1;27165:2;27169:21;27187:2;27169:17;:21::i;:::-;27192:25;27210:6;27192:17;:25::i;:::-;27219:4;27122:20;:102::i;:::-;27258:6;27237:9;:13;27247:2;27237:13;;;;;;;;;;;:17;27251:2;27237:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27317:2;27280:52;;27313:1;27280:52;;27295:8;27280:52;;;27321:2;27325:6;27280:52;;;;;;;:::i;:::-;;;;;;;;27345:74;27376:8;27394:1;27398:2;27402;27406:6;27414:4;27345:30;:74::i;:::-;26858:569;;;;;:::o;24466:1074::-;24693:7;:14;24679:3;:10;:28;24671:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24785:1;24771:16;;:2;:16;;;;24763:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24842:16;24861:12;:10;:12::i;:::-;24842:31;;24886:60;24907:8;24917:4;24923:2;24927:3;24932:7;24941:4;24886:20;:60::i;:::-;24964:9;24959:421;24983:3;:10;24979:1;:14;24959:421;;;25015:10;25028:3;25032:1;25028:6;;;;;;;;;;;;;;;;;;;;;;25015:19;;25049:14;25066:7;25074:1;25066:10;;;;;;;;;;;;;;;;;;;;;;25049:27;;25093:19;25115:9;:13;25125:2;25115:13;;;;;;;;;;;:19;25129:4;25115:19;;;;;;;;;;;;;;;;25093:41;;25172:6;25157:11;:21;;25149:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25305:6;25291:11;:20;25269:9;:13;25279:2;25269:13;;;;;;;;;;;:19;25283:4;25269:19;;;;;;;;;;;;;;;:42;;;;25362:6;25341:9;:13;25351:2;25341:13;;;;;;;;;;;:17;25355:2;25341:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24959:421;;;24995:3;;;;:::i;:::-;;;24959:421;;;;25427:2;25397:47;;25421:4;25397:47;;25411:8;25397:47;;;25431:3;25436:7;25397:47;;;;;;;:::i;:::-;;;;;;;;25457:75;25493:8;25503:4;25509:2;25513:3;25518:7;25527:4;25457:35;:75::i;:::-;24466:1074;;;;;;:::o;47982:191::-;48056:16;48075:6;;;;;;;;;;;48056:25;;48101:8;48092:6;;:17;;;;;;;;;;;;;;;;;;48156:8;48125:40;;48146:8;48125:40;;;;;;;;;;;;47982:191;;:::o;26384:88::-;26458:6;26451:4;:13;;;;;;;;;;;;:::i;:::-;;26384:88;:::o;30652:331::-;30807:8;30798:17;;:5;:17;;;;30790:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30910:8;30872:18;:25;30891:5;30872:25;;;;;;;;;;;;;;;:35;30898:8;30872:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30956:8;30934:41;;30949:5;30934:41;;;30966:8;30934:41;;;;;;:::i;:::-;;;;;;;;30652:331;;;:::o;23288:820::-;23490:1;23476:16;;:2;:16;;;;23468:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23547:16;23566:12;:10;:12::i;:::-;23547:31;;23591:96;23612:8;23622:4;23628:2;23632:21;23650:2;23632:17;:21::i;:::-;23655:25;23673:6;23655:17;:25::i;:::-;23682:4;23591:20;:96::i;:::-;23700:19;23722:9;:13;23732:2;23722:13;;;;;;;;;;;:19;23736:4;23722:19;;;;;;;;;;;;;;;;23700:41;;23775:6;23760:11;:21;;23752:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23900:6;23886:11;:20;23864:9;:13;23874:2;23864:13;;;;;;;;;;;:19;23878:4;23864:19;;;;;;;;;;;;;;;:42;;;;23949:6;23928:9;:13;23938:2;23928:13;;;;;;;;;;;:17;23942:2;23928:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24004:2;23973:46;;23998:4;23973:46;;23988:8;23973:46;;;24008:2;24012:6;23973:46;;;;;;;:::i;:::-;;;;;;;;24032:68;24063:8;24073:4;24079:2;24083;24087:6;24095:4;24032:30;:68::i;:::-;23288:820;;;;;;;:::o;40482:231::-;40560:7;40581:17;40600:18;40622:27;40633:4;40639:9;40622:10;:27::i;:::-;40580:69;;;;40660:18;40672:5;40660:11;:18::i;:::-;40696:9;40689:16;;;;40482:231;;;;:::o;33741:198::-;33807:16;33836:22;33875:1;33861:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33836:41;;33899:7;33888:5;33894:1;33888:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;33926:5;33919:12;;;33741:198;;;:::o;31939:221::-;;;;;;;:::o;32168:744::-;32383:15;:2;:13;;;:15::i;:::-;32379:526;;;32436:2;32419:38;;;32458:8;32468:4;32474:2;32478:6;32486:4;32419:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32415:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32767:6;32760:14;;;;;;;;;;;:::i;:::-;;;;;;;;32415:479;;;32816:62;;;;;;;;;;:::i;:::-;;;;;;;;32415:479;32553:43;;;32541:55;;;:8;:55;;;;32537:154;;32621:50;;;;;;;;;;:::i;:::-;;;;;;;;32537:154;32492:214;32379:526;32168:744;;;;;;:::o;32920:813::-;33160:15;:2;:13;;;:15::i;:::-;33156:570;;;33213:2;33196:43;;;33240:8;33250:4;33256:3;33261:7;33270:4;33196:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33192:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33588:6;33581:14;;;;;;;;;;;:::i;:::-;;;;;;;;33192:523;;;33637:62;;;;;;;;;;:::i;:::-;;;;;;;;33192:523;33369:48;;;33357:60;;;:8;:60;;;;33353:159;;33442:50;;;;;;;;;;:::i;:::-;;;;;;;;33353:159;33276:251;33156:570;32920:813;;;;;;:::o;38372:1308::-;38453:7;38462:12;38707:2;38687:9;:16;:22;38683:990;;;38726:9;38750;38774:7;38983:4;38972:9;38968:20;38962:27;38957:32;;39033:4;39022:9;39018:20;39012:27;39007:32;;39091:4;39080:9;39076:20;39070:27;39067:1;39062:36;39057:41;;39134:25;39145:4;39151:1;39154;39157;39134:10;:25::i;:::-;39127:32;;;;;;;;;38683:990;39201:2;39181:9;:16;:22;39177:496;;;39220:9;39244:10;39456:4;39445:9;39441:20;39435:27;39430:32;;39507:4;39496:9;39492:20;39486:27;39480:33;;39549:23;39560:4;39566:1;39569:2;39549:10;:23::i;:::-;39542:30;;;;;;;;39177:496;39621:1;39625:35;39605:56;;;;38372:1308;;;;;;:::o;36643:643::-;36721:20;36712:29;;;;;;;;;;;;;;;;:5;:29;;;;;;;;;;;;;;;;;36708:571;;;36758:7;;36708:571;36819:29;36810:38;;;;;;;;;;;;;;;;:5;:38;;;;;;;;;;;;;;;;;36806:473;;;36865:34;;;;;;;;;;:::i;:::-;;;;;;;;36806:473;36930:35;36921:44;;;;;;;;;;;;;;;;:5;:44;;;;;;;;;;;;;;;;;36917:362;;;36982:41;;;;;;;;;;:::i;:::-;;;;;;;;36917:362;37054:30;37045:39;;;;;;;;;;;;;;;;:5;:39;;;;;;;;;;;;;;;;;37041:238;;;37101:44;;;;;;;;;;:::i;:::-;;;;;;;;37041:238;37176:30;37167:39;;;;;;;;;;;;;;;;:5;:39;;;;;;;;;;;;;;;;;37163:116;;;37223:44;;;;;;;;;;:::i;:::-;;;;;;;;37163:116;36643:643;;:::o;9122:387::-;9182:4;9390:12;9457:7;9445:20;9437:28;;9500:1;9493:4;:8;9486:15;;;9122:387;;;:::o;41981:1632::-;42112:7;42121:12;43046:66;43041:1;43033:10;;:79;43029:163;;;43145:1;43149:30;43129:51;;;;;;43029:163;43211:2;43206:1;:7;;;;:18;;;;;43222:2;43217:1;:7;;;;43206:18;43202:102;;;43257:1;43261:30;43241:51;;;;;;43202:102;43401:14;43418:24;43428:4;43434:1;43437;43440;43418:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43401:41;;43475:1;43457:20;;:6;:20;;;43453:103;;;43510:1;43514:29;43494:50;;;;;;;43453:103;43576:6;43584:20;43568:37;;;;;41981:1632;;;;;;;;:::o;40976:391::-;41090:7;41099:12;41124:9;41144:7;41199:66;41195:2;41191:75;41186:80;;41303:2;41298;41293:3;41289:12;41285:21;41280:26;;41334:25;41345:4;41351:1;41354;41357;41334:10;:25::i;:::-;41327:32;;;;;;40976:391;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;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:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1378:649::-;1472:5;1497:79;1513:62;1568:6;1513:62;:::i;:::-;1497:79;:::i;:::-;1488:88;;1596:5;1625:6;1618:5;1611:21;1659:4;1652:5;1648:16;1641:23;;1685:6;1735:3;1727:4;1719:6;1715:17;1710:3;1706:27;1703:36;1700:2;;;1764:1;1761;1754:12;1700:2;1800:1;1785:236;1810:6;1807:1;1804:13;1785:236;;;1878:3;1907:35;1938:3;1926:10;1907:35;:::i;:::-;1902:3;1895:48;1972:4;1967:3;1963:14;1956:21;;2006:4;2001:3;1997:14;1990:21;;1845:176;1832:1;1829;1825:9;1820:14;;1785:236;;;1789:14;1478:549;;;;;;;:::o;2033:343::-;2110:5;2135:65;2151:48;2192:6;2151:48;:::i;:::-;2135:65;:::i;:::-;2126:74;;2223:6;2216:5;2209:21;2261:4;2254:5;2250:16;2299:3;2290:6;2285:3;2281:16;2278:25;2275:2;;;2316:1;2313;2306:12;2275:2;2329:41;2363:6;2358:3;2353;2329:41;:::i;:::-;2116:260;;;;;;:::o;2382:345::-;2460:5;2485:66;2501:49;2543:6;2501:49;:::i;:::-;2485:66;:::i;:::-;2476:75;;2574:6;2567:5;2560:21;2612:4;2605:5;2601:16;2650:3;2641:6;2636:3;2632:16;2629:25;2626:2;;;2667:1;2664;2657:12;2626:2;2680:41;2714:6;2709:3;2704;2680:41;:::i;:::-;2466:261;;;;;;:::o;2733:139::-;2779:5;2817:6;2804:20;2795:29;;2833:33;2860:5;2833:33;:::i;:::-;2785:87;;;;:::o;2895:303::-;2966:5;3015:3;3008:4;3000:6;2996:17;2992:27;2982:2;;3033:1;3030;3023:12;2982:2;3073:6;3060:20;3098:94;3188:3;3180:6;3173:4;3165:6;3161:17;3098:94;:::i;:::-;3089:103;;2972:226;;;;;:::o;3221:303::-;3292:5;3341:3;3334:4;3326:6;3322:17;3318:27;3308:2;;3359:1;3356;3349:12;3308:2;3399:6;3386:20;3424:94;3514:3;3506:6;3499:4;3491:6;3487:17;3424:94;:::i;:::-;3415:103;;3298:226;;;;;:::o;3545:299::-;3614:5;3663:3;3656:4;3648:6;3644:17;3640:27;3630:2;;3681:1;3678;3671:12;3630:2;3721:6;3708:20;3746:92;3834:3;3826:6;3819:4;3811:6;3807:17;3746:92;:::i;:::-;3737:101;;3620:224;;;;;:::o;3850:133::-;3893:5;3931:6;3918:20;3909:29;;3947:30;3971:5;3947:30;:::i;:::-;3899:84;;;;:::o;3989:139::-;4035:5;4073:6;4060:20;4051:29;;4089:33;4116:5;4089:33;:::i;:::-;4041:87;;;;:::o;4134:137::-;4179:5;4217:6;4204:20;4195:29;;4233:32;4259:5;4233:32;:::i;:::-;4185:86;;;;:::o;4277:141::-;4333:5;4364:6;4358:13;4349:22;;4380:32;4406:5;4380:32;:::i;:::-;4339:79;;;;:::o;4437:271::-;4492:5;4541:3;4534:4;4526:6;4522:17;4518:27;4508:2;;4559:1;4556;4549:12;4508:2;4599:6;4586:20;4624:78;4698:3;4690:6;4683:4;4675:6;4671:17;4624:78;:::i;:::-;4615:87;;4498:210;;;;;:::o;4728:273::-;4784:5;4833:3;4826:4;4818:6;4814:17;4810:27;4800:2;;4851:1;4848;4841:12;4800:2;4891:6;4878:20;4916:79;4991:3;4983:6;4976:4;4968:6;4964:17;4916:79;:::i;:::-;4907:88;;4790:211;;;;;:::o;5007:139::-;5053:5;5091:6;5078:20;5069:29;;5107:33;5134:5;5107:33;:::i;:::-;5059:87;;;;:::o;5152:135::-;5196:5;5234:6;5221:20;5212:29;;5250:31;5275:5;5250:31;:::i;:::-;5202:85;;;;:::o;5293:262::-;5352:6;5401:2;5389:9;5380:7;5376:23;5372:32;5369:2;;;5417:1;5414;5407:12;5369:2;5460:1;5485:53;5530:7;5521:6;5510:9;5506:22;5485:53;:::i;:::-;5475:63;;5431:117;5359:196;;;;:::o;5561:407::-;5629:6;5637;5686:2;5674:9;5665:7;5661:23;5657:32;5654:2;;;5702:1;5699;5692:12;5654:2;5745:1;5770:53;5815:7;5806:6;5795:9;5791:22;5770:53;:::i;:::-;5760:63;;5716:117;5872:2;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5843:118;5644:324;;;;;:::o;5974:1241::-;6128:6;6136;6144;6152;6160;6209:3;6197:9;6188:7;6184:23;6180:33;6177:2;;;6226:1;6223;6216:12;6177:2;6269:1;6294:53;6339:7;6330:6;6319:9;6315:22;6294:53;:::i;:::-;6284:63;;6240:117;6396:2;6422:53;6467:7;6458:6;6447:9;6443:22;6422:53;:::i;:::-;6412:63;;6367:118;6552:2;6541:9;6537:18;6524:32;6583:18;6575:6;6572:30;6569:2;;;6615:1;6612;6605:12;6569:2;6643:78;6713:7;6704:6;6693:9;6689:22;6643:78;:::i;:::-;6633:88;;6495:236;6798:2;6787:9;6783:18;6770:32;6829:18;6821:6;6818:30;6815:2;;;6861:1;6858;6851:12;6815:2;6889:78;6959:7;6950:6;6939:9;6935:22;6889:78;:::i;:::-;6879:88;;6741:236;7044:3;7033:9;7029:19;7016:33;7076:18;7068:6;7065:30;7062:2;;;7108:1;7105;7098:12;7062:2;7136:62;7190:7;7181:6;7170:9;7166:22;7136:62;:::i;:::-;7126:72;;6987:221;6167:1048;;;;;;;;:::o;7221:955::-;7325:6;7333;7341;7349;7357;7406:3;7394:9;7385:7;7381:23;7377:33;7374:2;;;7423:1;7420;7413:12;7374:2;7466:1;7491:53;7536:7;7527:6;7516:9;7512:22;7491:53;:::i;:::-;7481:63;;7437:117;7593:2;7619:53;7664:7;7655:6;7644:9;7640:22;7619:53;:::i;:::-;7609:63;;7564:118;7721:2;7747:53;7792:7;7783:6;7772:9;7768:22;7747:53;:::i;:::-;7737:63;;7692:118;7849:2;7875:53;7920:7;7911:6;7900:9;7896:22;7875:53;:::i;:::-;7865:63;;7820:118;8005:3;7994:9;7990:19;7977:33;8037:18;8029:6;8026:30;8023:2;;;8069:1;8066;8059:12;8023:2;8097:62;8151:7;8142:6;8131:9;8127:22;8097:62;:::i;:::-;8087:72;;7948:221;7364:812;;;;;;;;:::o;8182:401::-;8247:6;8255;8304:2;8292:9;8283:7;8279:23;8275:32;8272:2;;;8320:1;8317;8310:12;8272:2;8363:1;8388:53;8433:7;8424:6;8413:9;8409:22;8388:53;:::i;:::-;8378:63;;8334:117;8490:2;8516:50;8558:7;8549:6;8538:9;8534:22;8516:50;:::i;:::-;8506:60;;8461:115;8262:321;;;;;:::o;8589:407::-;8657:6;8665;8714:2;8702:9;8693:7;8689:23;8685:32;8682:2;;;8730:1;8727;8720:12;8682:2;8773:1;8798:53;8843:7;8834:6;8823:9;8819:22;8798:53;:::i;:::-;8788:63;;8744:117;8900:2;8926:53;8971:7;8962:6;8951:9;8947:22;8926:53;:::i;:::-;8916:63;;8871:118;8672:324;;;;;:::o;9002:693::-;9120:6;9128;9177:2;9165:9;9156:7;9152:23;9148:32;9145:2;;;9193:1;9190;9183:12;9145:2;9264:1;9253:9;9249:17;9236:31;9294:18;9286:6;9283:30;9280:2;;;9326:1;9323;9316:12;9280:2;9354:78;9424:7;9415:6;9404:9;9400:22;9354:78;:::i;:::-;9344:88;;9207:235;9509:2;9498:9;9494:18;9481:32;9540:18;9532:6;9529:30;9526:2;;;9572:1;9569;9562:12;9526:2;9600:78;9670:7;9661:6;9650:9;9646:22;9600:78;:::i;:::-;9590:88;;9452:236;9135:560;;;;;:::o;9701:1059::-;9828:6;9836;9844;9852;9901:3;9889:9;9880:7;9876:23;9872:33;9869:2;;;9918:1;9915;9908:12;9869:2;9989:1;9978:9;9974:17;9961:31;10019:18;10011:6;10008:30;10005:2;;;10051:1;10048;10041:12;10005:2;10079:76;10147:7;10138:6;10127:9;10123:22;10079:76;:::i;:::-;10069:86;;9932:233;10232:2;10221:9;10217:18;10204:32;10263:18;10255:6;10252:30;10249:2;;;10295:1;10292;10285:12;10249:2;10323:62;10377:7;10368:6;10357:9;10353:22;10323:62;:::i;:::-;10313:72;;10175:220;10434:2;10460:53;10505:7;10496:6;10485:9;10481:22;10460:53;:::i;:::-;10450:63;;10405:118;10590:2;10579:9;10575:18;10562:32;10621:18;10613:6;10610:30;10607:2;;;10653:1;10650;10643:12;10607:2;10681:62;10735:7;10726:6;10715:9;10711:22;10681:62;:::i;:::-;10671:72;;10533:220;9859:901;;;;;;;:::o;10766:260::-;10824:6;10873:2;10861:9;10852:7;10848:23;10844:32;10841:2;;;10889:1;10886;10879:12;10841:2;10932:1;10957:52;11001:7;10992:6;10981:9;10977:22;10957:52;:::i;:::-;10947:62;;10903:116;10831:195;;;;:::o;11032:282::-;11101:6;11150:2;11138:9;11129:7;11125:23;11121:32;11118:2;;;11166:1;11163;11156:12;11118:2;11209:1;11234:63;11289:7;11280:6;11269:9;11265:22;11234:63;:::i;:::-;11224:73;;11180:127;11108:206;;;;:::o;11320:375::-;11389:6;11438:2;11426:9;11417:7;11413:23;11409:32;11406:2;;;11454:1;11451;11444:12;11406:2;11525:1;11514:9;11510:17;11497:31;11555:18;11547:6;11544:30;11541:2;;;11587:1;11584;11577:12;11541:2;11615:63;11670:7;11661:6;11650:9;11646:22;11615:63;:::i;:::-;11605:73;;11468:220;11396:299;;;;:::o;11701:262::-;11760:6;11809:2;11797:9;11788:7;11784:23;11780:32;11777:2;;;11825:1;11822;11815:12;11777:2;11868:1;11893:53;11938:7;11929:6;11918:9;11914:22;11893:53;:::i;:::-;11883:63;;11839:117;11767:196;;;;:::o;11969:179::-;12038:10;12059:46;12101:3;12093:6;12059:46;:::i;:::-;12137:4;12132:3;12128:14;12114:28;;12049:99;;;;:::o;12154:175::-;12221:10;12242:44;12282:3;12274:6;12242:44;:::i;:::-;12318:4;12313:3;12309:14;12295:28;;12232:97;;;;:::o;12335:118::-;12422:24;12440:5;12422:24;:::i;:::-;12417:3;12410:37;12400:53;;:::o;12489:732::-;12608:3;12637:54;12685:5;12637:54;:::i;:::-;12707:86;12786:6;12781:3;12707:86;:::i;:::-;12700:93;;12817:56;12867:5;12817:56;:::i;:::-;12896:7;12927:1;12912:284;12937:6;12934:1;12931:13;12912:284;;;13013:6;13007:13;13040:63;13099:3;13084:13;13040:63;:::i;:::-;13033:70;;13126:60;13179:6;13126:60;:::i;:::-;13116:70;;12972:224;12959:1;12956;12952:9;12947:14;;12912:284;;;12916:14;13212:3;13205:10;;12613:608;;;;;;;:::o;13255:724::-;13372:3;13401:53;13448:5;13401:53;:::i;:::-;13470:85;13548:6;13543:3;13470:85;:::i;:::-;13463:92;;13579:55;13628:5;13579:55;:::i;:::-;13657:7;13688:1;13673:281;13698:6;13695:1;13692:13;13673:281;;;13774:6;13768:13;13801:61;13858:3;13843:13;13801:61;:::i;:::-;13794:68;;13885:59;13937:6;13885:59;:::i;:::-;13875:69;;13733:221;13720:1;13717;13713:9;13708:14;;13673:281;;;13677:14;13970:3;13963:10;;13377:602;;;;;;;:::o;13985:109::-;14066:21;14081:5;14066:21;:::i;:::-;14061:3;14054:34;14044:50;;:::o;14100:118::-;14187:24;14205:5;14187:24;:::i;:::-;14182:3;14175:37;14165:53;;:::o;14224:360::-;14310:3;14338:38;14370:5;14338:38;:::i;:::-;14392:70;14455:6;14450:3;14392:70;:::i;:::-;14385:77;;14471:52;14516:6;14511:3;14504:4;14497:5;14493:16;14471:52;:::i;:::-;14548:29;14570:6;14548:29;:::i;:::-;14543:3;14539:39;14532:46;;14314:270;;;;;:::o;14590:364::-;14678:3;14706:39;14739:5;14706:39;:::i;:::-;14761:71;14825:6;14820:3;14761:71;:::i;:::-;14754:78;;14841:52;14886:6;14881:3;14874:4;14867:5;14863:16;14841:52;:::i;:::-;14918:29;14940:6;14918:29;:::i;:::-;14913:3;14909:39;14902:46;;14682:272;;;;;:::o;14960:366::-;15102:3;15123:67;15187:2;15182:3;15123:67;:::i;:::-;15116:74;;15199:93;15288:3;15199:93;:::i;:::-;15317:2;15312:3;15308:12;15301:19;;15106:220;;;:::o;15332:366::-;15474:3;15495:67;15559:2;15554:3;15495:67;:::i;:::-;15488:74;;15571:93;15660:3;15571:93;:::i;:::-;15689:2;15684:3;15680:12;15673:19;;15478:220;;;:::o;15704:366::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15850:220;;;:::o;16076:366::-;16218:3;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16315:93;16404:3;16315:93;:::i;:::-;16433:2;16428:3;16424:12;16417:19;;16222:220;;;:::o;16448:366::-;16590:3;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16687:93;16776:3;16687:93;:::i;:::-;16805:2;16800:3;16796:12;16789:19;;16594:220;;;:::o;16820:366::-;16962:3;16983:67;17047:2;17042:3;16983:67;:::i;:::-;16976:74;;17059:93;17148:3;17059:93;:::i;:::-;17177:2;17172:3;17168:12;17161:19;;16966:220;;;:::o;17192:366::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17338:220;;;:::o;17564:366::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17710:220;;;:::o;17936:366::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;18082:220;;;:::o;18308:366::-;18450:3;18471:67;18535:2;18530:3;18471:67;:::i;:::-;18464:74;;18547:93;18636:3;18547:93;:::i;:::-;18665:2;18660:3;18656:12;18649:19;;18454:220;;;:::o;18680:366::-;18822:3;18843:67;18907:2;18902:3;18843:67;:::i;:::-;18836:74;;18919:93;19008:3;18919:93;:::i;:::-;19037:2;19032:3;19028:12;19021:19;;18826:220;;;:::o;19052:366::-;19194:3;19215:67;19279:2;19274:3;19215:67;:::i;:::-;19208:74;;19291:93;19380:3;19291:93;:::i;:::-;19409:2;19404:3;19400:12;19393:19;;19198:220;;;:::o;19424:366::-;19566:3;19587:67;19651:2;19646:3;19587:67;:::i;:::-;19580:74;;19663:93;19752:3;19663:93;:::i;:::-;19781:2;19776:3;19772:12;19765:19;;19570:220;;;:::o;19796:366::-;19938:3;19959:67;20023:2;20018:3;19959:67;:::i;:::-;19952:74;;20035:93;20124:3;20035:93;:::i;:::-;20153:2;20148:3;20144:12;20137:19;;19942:220;;;:::o;20168:366::-;20310:3;20331:67;20395:2;20390:3;20331:67;:::i;:::-;20324:74;;20407:93;20496:3;20407:93;:::i;:::-;20525:2;20520:3;20516:12;20509:19;;20314:220;;;:::o;20540:366::-;20682:3;20703:67;20767:2;20762:3;20703:67;:::i;:::-;20696:74;;20779:93;20868:3;20779:93;:::i;:::-;20897:2;20892:3;20888:12;20881:19;;20686:220;;;:::o;20912:366::-;21054:3;21075:67;21139:2;21134:3;21075:67;:::i;:::-;21068:74;;21151:93;21240:3;21151:93;:::i;:::-;21269:2;21264:3;21260:12;21253:19;;21058:220;;;:::o;21284:366::-;21426:3;21447:67;21511:2;21506:3;21447:67;:::i;:::-;21440:74;;21523:93;21612:3;21523:93;:::i;:::-;21641:2;21636:3;21632:12;21625:19;;21430:220;;;:::o;21656:366::-;21798:3;21819:67;21883:2;21878:3;21819:67;:::i;:::-;21812:74;;21895:93;21984:3;21895:93;:::i;:::-;22013:2;22008:3;22004:12;21997:19;;21802:220;;;:::o;22028:366::-;22170:3;22191:67;22255:2;22250:3;22191:67;:::i;:::-;22184:74;;22267:93;22356:3;22267:93;:::i;:::-;22385:2;22380:3;22376:12;22369:19;;22174:220;;;:::o;22400:366::-;22542:3;22563:67;22627:2;22622:3;22563:67;:::i;:::-;22556:74;;22639:93;22728:3;22639:93;:::i;:::-;22757:2;22752:3;22748:12;22741:19;;22546:220;;;:::o;22772:366::-;22914:3;22935:67;22999:2;22994:3;22935:67;:::i;:::-;22928:74;;23011:93;23100:3;23011:93;:::i;:::-;23129:2;23124:3;23120:12;23113:19;;22918:220;;;:::o;23144:366::-;23286:3;23307:67;23371:2;23366:3;23307:67;:::i;:::-;23300:74;;23383:93;23472:3;23383:93;:::i;:::-;23501:2;23496:3;23492:12;23485:19;;23290:220;;;:::o;23516:366::-;23658:3;23679:67;23743:2;23738:3;23679:67;:::i;:::-;23672:74;;23755:93;23844:3;23755:93;:::i;:::-;23873:2;23868:3;23864:12;23857:19;;23662:220;;;:::o;23888:366::-;24030:3;24051:67;24115:2;24110:3;24051:67;:::i;:::-;24044:74;;24127:93;24216:3;24127:93;:::i;:::-;24245:2;24240:3;24236:12;24229:19;;24034:220;;;:::o;24260:366::-;24402:3;24423:67;24487:2;24482:3;24423:67;:::i;:::-;24416:74;;24499:93;24588:3;24499:93;:::i;:::-;24617:2;24612:3;24608:12;24601:19;;24406:220;;;:::o;24632:108::-;24709:24;24727:5;24709:24;:::i;:::-;24704:3;24697:37;24687:53;;:::o;24746:118::-;24833:24;24851:5;24833:24;:::i;:::-;24828:3;24821:37;24811:53;;:::o;24870:105::-;24945:23;24962:5;24945:23;:::i;:::-;24940:3;24933:36;24923:52;;:::o;24981:112::-;25064:22;25080:5;25064:22;:::i;:::-;25059:3;25052:35;25042:51;;:::o;25099:222::-;25192:4;25230:2;25219:9;25215:18;25207:26;;25243:71;25311:1;25300:9;25296:17;25287:6;25243:71;:::i;:::-;25197:124;;;;:::o;25327:1053::-;25650:4;25688:3;25677:9;25673:19;25665:27;;25702:71;25770:1;25759:9;25755:17;25746:6;25702:71;:::i;:::-;25783:72;25851:2;25840:9;25836:18;25827:6;25783:72;:::i;:::-;25902:9;25896:4;25892:20;25887:2;25876:9;25872:18;25865:48;25930:108;26033:4;26024:6;25930:108;:::i;:::-;25922:116;;26085:9;26079:4;26075:20;26070:2;26059:9;26055:18;26048:48;26113:108;26216:4;26207:6;26113:108;:::i;:::-;26105:116;;26269:9;26263:4;26259:20;26253:3;26242:9;26238:19;26231:49;26297:76;26368:4;26359:6;26297:76;:::i;:::-;26289:84;;25655:725;;;;;;;;:::o;26386:751::-;26609:4;26647:3;26636:9;26632:19;26624:27;;26661:71;26729:1;26718:9;26714:17;26705:6;26661:71;:::i;:::-;26742:72;26810:2;26799:9;26795:18;26786:6;26742:72;:::i;:::-;26824;26892:2;26881:9;26877:18;26868:6;26824:72;:::i;:::-;26906;26974:2;26963:9;26959:18;26950:6;26906:72;:::i;:::-;27026:9;27020:4;27016:20;27010:3;26999:9;26995:19;26988:49;27054:76;27125:4;27116:6;27054:76;:::i;:::-;27046:84;;26614:523;;;;;;;;:::o;27143:373::-;27286:4;27324:2;27313:9;27309:18;27301:26;;27373:9;27367:4;27363:20;27359:1;27348:9;27344:17;27337:47;27401:108;27504:4;27495:6;27401:108;:::i;:::-;27393:116;;27291:225;;;;:::o;27522:634::-;27743:4;27781:2;27770:9;27766:18;27758:26;;27830:9;27824:4;27820:20;27816:1;27805:9;27801:17;27794:47;27858:108;27961:4;27952:6;27858:108;:::i;:::-;27850:116;;28013:9;28007:4;28003:20;27998:2;27987:9;27983:18;27976:48;28041:108;28144:4;28135:6;28041:108;:::i;:::-;28033:116;;27748:408;;;;;:::o;28162:369::-;28303:4;28341:2;28330:9;28326:18;28318:26;;28390:9;28384:4;28380:20;28376:1;28365:9;28361:17;28354:47;28418:106;28519:4;28510:6;28418:106;:::i;:::-;28410:114;;28308:223;;;;:::o;28537:210::-;28624:4;28662:2;28651:9;28647:18;28639:26;;28675:65;28737:1;28726:9;28722:17;28713:6;28675:65;:::i;:::-;28629:118;;;;:::o;28753:545::-;28926:4;28964:3;28953:9;28949:19;28941:27;;28978:71;29046:1;29035:9;29031:17;29022:6;28978:71;:::i;:::-;29059:68;29123:2;29112:9;29108:18;29099:6;29059:68;:::i;:::-;29137:72;29205:2;29194:9;29190:18;29181:6;29137:72;:::i;:::-;29219;29287:2;29276:9;29272:18;29263:6;29219:72;:::i;:::-;28931:367;;;;;;;:::o;29304:313::-;29417:4;29455:2;29444:9;29440:18;29432:26;;29504:9;29498:4;29494:20;29490:1;29479:9;29475:17;29468:47;29532:78;29605:4;29596:6;29532:78;:::i;:::-;29524:86;;29422:195;;;;:::o;29623:419::-;29789:4;29827:2;29816:9;29812:18;29804:26;;29876:9;29870:4;29866:20;29862:1;29851:9;29847:17;29840:47;29904:131;30030:4;29904:131;:::i;:::-;29896:139;;29794:248;;;:::o;30048:419::-;30214:4;30252:2;30241:9;30237:18;30229:26;;30301:9;30295:4;30291:20;30287:1;30276:9;30272:17;30265:47;30329:131;30455:4;30329:131;:::i;:::-;30321:139;;30219:248;;;:::o;30473:419::-;30639:4;30677:2;30666:9;30662:18;30654:26;;30726:9;30720:4;30716:20;30712:1;30701:9;30697:17;30690:47;30754:131;30880:4;30754:131;:::i;:::-;30746:139;;30644:248;;;:::o;30898:419::-;31064:4;31102:2;31091:9;31087:18;31079:26;;31151:9;31145:4;31141:20;31137:1;31126:9;31122:17;31115:47;31179:131;31305:4;31179:131;:::i;:::-;31171:139;;31069:248;;;:::o;31323:419::-;31489:4;31527:2;31516:9;31512:18;31504:26;;31576:9;31570:4;31566:20;31562:1;31551:9;31547:17;31540:47;31604:131;31730:4;31604:131;:::i;:::-;31596:139;;31494:248;;;:::o;31748:419::-;31914:4;31952:2;31941:9;31937:18;31929:26;;32001:9;31995:4;31991:20;31987:1;31976:9;31972:17;31965:47;32029:131;32155:4;32029:131;:::i;:::-;32021:139;;31919:248;;;:::o;32173:419::-;32339:4;32377:2;32366:9;32362:18;32354:26;;32426:9;32420:4;32416:20;32412:1;32401:9;32397:17;32390:47;32454:131;32580:4;32454:131;:::i;:::-;32446:139;;32344:248;;;:::o;32598:419::-;32764:4;32802:2;32791:9;32787:18;32779:26;;32851:9;32845:4;32841:20;32837:1;32826:9;32822:17;32815:47;32879:131;33005:4;32879:131;:::i;:::-;32871:139;;32769:248;;;:::o;33023:419::-;33189:4;33227:2;33216:9;33212:18;33204:26;;33276:9;33270:4;33266:20;33262:1;33251:9;33247:17;33240:47;33304:131;33430:4;33304:131;:::i;:::-;33296:139;;33194:248;;;:::o;33448:419::-;33614:4;33652:2;33641:9;33637:18;33629:26;;33701:9;33695:4;33691:20;33687:1;33676:9;33672:17;33665:47;33729:131;33855:4;33729:131;:::i;:::-;33721:139;;33619:248;;;:::o;33873:419::-;34039:4;34077:2;34066:9;34062:18;34054:26;;34126:9;34120:4;34116:20;34112:1;34101:9;34097:17;34090:47;34154:131;34280:4;34154:131;:::i;:::-;34146:139;;34044:248;;;:::o;34298:419::-;34464:4;34502:2;34491:9;34487:18;34479:26;;34551:9;34545:4;34541:20;34537:1;34526:9;34522:17;34515:47;34579:131;34705:4;34579:131;:::i;:::-;34571:139;;34469:248;;;:::o;34723:419::-;34889:4;34927:2;34916:9;34912:18;34904:26;;34976:9;34970:4;34966:20;34962:1;34951:9;34947:17;34940:47;35004:131;35130:4;35004:131;:::i;:::-;34996:139;;34894:248;;;:::o;35148:419::-;35314:4;35352:2;35341:9;35337:18;35329:26;;35401:9;35395:4;35391:20;35387:1;35376:9;35372:17;35365:47;35429:131;35555:4;35429:131;:::i;:::-;35421:139;;35319:248;;;:::o;35573:419::-;35739:4;35777:2;35766:9;35762:18;35754:26;;35826:9;35820:4;35816:20;35812:1;35801:9;35797:17;35790:47;35854:131;35980:4;35854:131;:::i;:::-;35846:139;;35744:248;;;:::o;35998:419::-;36164:4;36202:2;36191:9;36187:18;36179:26;;36251:9;36245:4;36241:20;36237:1;36226:9;36222:17;36215:47;36279:131;36405:4;36279:131;:::i;:::-;36271:139;;36169:248;;;:::o;36423:419::-;36589:4;36627:2;36616:9;36612:18;36604:26;;36676:9;36670:4;36666:20;36662:1;36651:9;36647:17;36640:47;36704:131;36830:4;36704:131;:::i;:::-;36696:139;;36594:248;;;:::o;36848:419::-;37014:4;37052:2;37041:9;37037:18;37029:26;;37101:9;37095:4;37091:20;37087:1;37076:9;37072:17;37065:47;37129:131;37255:4;37129:131;:::i;:::-;37121:139;;37019:248;;;:::o;37273:419::-;37439:4;37477:2;37466:9;37462:18;37454:26;;37526:9;37520:4;37516:20;37512:1;37501:9;37497:17;37490:47;37554:131;37680:4;37554:131;:::i;:::-;37546:139;;37444:248;;;:::o;37698:419::-;37864:4;37902:2;37891:9;37887:18;37879:26;;37951:9;37945:4;37941:20;37937:1;37926:9;37922:17;37915:47;37979:131;38105:4;37979:131;:::i;:::-;37971:139;;37869:248;;;:::o;38123:419::-;38289:4;38327:2;38316:9;38312:18;38304:26;;38376:9;38370:4;38366:20;38362:1;38351:9;38347:17;38340:47;38404:131;38530:4;38404:131;:::i;:::-;38396:139;;38294:248;;;:::o;38548:419::-;38714:4;38752:2;38741:9;38737:18;38729:26;;38801:9;38795:4;38791:20;38787:1;38776:9;38772:17;38765:47;38829:131;38955:4;38829:131;:::i;:::-;38821:139;;38719:248;;;:::o;38973:419::-;39139:4;39177:2;39166:9;39162:18;39154:26;;39226:9;39220:4;39216:20;39212:1;39201:9;39197:17;39190:47;39254:131;39380:4;39254:131;:::i;:::-;39246:139;;39144:248;;;:::o;39398:419::-;39564:4;39602:2;39591:9;39587:18;39579:26;;39651:9;39645:4;39641:20;39637:1;39626:9;39622:17;39615:47;39679:131;39805:4;39679:131;:::i;:::-;39671:139;;39569:248;;;:::o;39823:419::-;39989:4;40027:2;40016:9;40012:18;40004:26;;40076:9;40070:4;40066:20;40062:1;40051:9;40047:17;40040:47;40104:131;40230:4;40104:131;:::i;:::-;40096:139;;39994:248;;;:::o;40248:419::-;40414:4;40452:2;40441:9;40437:18;40429:26;;40501:9;40495:4;40491:20;40487:1;40476:9;40472:17;40465:47;40529:131;40655:4;40529:131;:::i;:::-;40521:139;;40419:248;;;:::o;40673:222::-;40766:4;40804:2;40793:9;40789:18;40781:26;;40817:71;40885:1;40874:9;40870:17;40861:6;40817:71;:::i;:::-;40771:124;;;;:::o;40901:332::-;41022:4;41060:2;41049:9;41045:18;41037:26;;41073:71;41141:1;41130:9;41126:17;41117:6;41073:71;:::i;:::-;41154:72;41222:2;41211:9;41207:18;41198:6;41154:72;:::i;:::-;41027:206;;;;;:::o;41239:129::-;41273:6;41300:20;;:::i;:::-;41290:30;;41329:33;41357:4;41349:6;41329:33;:::i;:::-;41280:88;;;:::o;41374:75::-;41407:6;41440:2;41434:9;41424:19;;41414:35;:::o;41455:311::-;41532:4;41622:18;41614:6;41611:30;41608:2;;;41644:18;;:::i;:::-;41608:2;41694:4;41686:6;41682:17;41674:25;;41754:4;41748;41744:15;41736:23;;41537:229;;;:::o;41772:311::-;41849:4;41939:18;41931:6;41928:30;41925:2;;;41961:18;;:::i;:::-;41925:2;42011:4;42003:6;41999:17;41991:25;;42071:4;42065;42061:15;42053:23;;41854:229;;;:::o;42089:309::-;42164:4;42254:18;42246:6;42243:30;42240:2;;;42276:18;;:::i;:::-;42240:2;42326:4;42318:6;42314:17;42306:25;;42386:4;42380;42376:15;42368:23;;42169:229;;;:::o;42404:307::-;42465:4;42555:18;42547:6;42544:30;42541:2;;;42577:18;;:::i;:::-;42541:2;42615:29;42637:6;42615:29;:::i;:::-;42607:37;;42699:4;42693;42689:15;42681:23;;42470:241;;;:::o;42717:308::-;42779:4;42869:18;42861:6;42858:30;42855:2;;;42891:18;;:::i;:::-;42855:2;42929:29;42951:6;42929:29;:::i;:::-;42921:37;;43013:4;43007;43003:15;42995:23;;42784:241;;;:::o;43031:132::-;43098:4;43121:3;43113:11;;43151:4;43146:3;43142:14;43134:22;;43103:60;;;:::o;43169:131::-;43235:4;43258:3;43250:11;;43288:4;43283:3;43279:14;43271:22;;43240:60;;;:::o;43306:114::-;43373:6;43407:5;43401:12;43391:22;;43380:40;;;:::o;43426:113::-;43492:6;43526:5;43520:12;43510:22;;43499:40;;;:::o;43545:98::-;43596:6;43630:5;43624:12;43614:22;;43603:40;;;:::o;43649:99::-;43701:6;43735:5;43729:12;43719:22;;43708:40;;;:::o;43754:113::-;43824:4;43856;43851:3;43847:14;43839:22;;43829:38;;;:::o;43873:112::-;43942:4;43974;43969:3;43965:14;43957:22;;43947:38;;;:::o;43991:184::-;44090:11;44124:6;44119:3;44112:19;44164:4;44159:3;44155:14;44140:29;;44102:73;;;;:::o;44181:183::-;44279:11;44313:6;44308:3;44301:19;44353:4;44348:3;44344:14;44329:29;;44291:73;;;;:::o;44370:168::-;44453:11;44487:6;44482:3;44475:19;44527:4;44522:3;44518:14;44503:29;;44465:73;;;;:::o;44544:169::-;44628:11;44662:6;44657:3;44650:19;44702:4;44697:3;44693:14;44678:29;;44640:73;;;;:::o;44719:305::-;44759:3;44778:20;44796:1;44778:20;:::i;:::-;44773:25;;44812:20;44830:1;44812:20;:::i;:::-;44807:25;;44966:1;44898:66;44894:74;44891:1;44888:81;44885:2;;;44972:18;;:::i;:::-;44885:2;45016:1;45013;45009:9;45002:16;;44763:261;;;;:::o;45030:254::-;45069:3;45088:19;45105:1;45088:19;:::i;:::-;45083:24;;45121:19;45138:1;45121:19;:::i;:::-;45116:24;;45226:1;45206:18;45202:26;45199:1;45196:33;45193:2;;;45232:18;;:::i;:::-;45193:2;45276:1;45273;45269:9;45262:16;;45073:211;;;;:::o;45290:348::-;45330:7;45353:20;45371:1;45353:20;:::i;:::-;45348:25;;45387:20;45405:1;45387:20;:::i;:::-;45382:25;;45575:1;45507:66;45503:74;45500:1;45497:81;45492:1;45485:9;45478:17;45474:105;45471:2;;;45582:18;;:::i;:::-;45471:2;45630:1;45627;45623:9;45612:20;;45338:300;;;;:::o;45644:185::-;45682:4;45702:18;45718:1;45702:18;:::i;:::-;45697:23;;45734:18;45750:1;45734:18;:::i;:::-;45729:23;;45771:1;45768;45765:8;45762:2;;;45776:18;;:::i;:::-;45762:2;45821:1;45818;45814:9;45806:17;;45687:142;;;;:::o;45835:96::-;45872:7;45901:24;45919:5;45901:24;:::i;:::-;45890:35;;45880:51;;;:::o;45937:90::-;45971:7;46014:5;46007:13;46000:21;45989:32;;45979:48;;;:::o;46033:77::-;46070:7;46099:5;46088:16;;46078:32;;;:::o;46116:149::-;46152:7;46192:66;46185:5;46181:78;46170:89;;46160:105;;;:::o;46271:126::-;46308:7;46348:42;46341:5;46337:54;46326:65;;46316:81;;;:::o;46403:77::-;46440:7;46469:5;46458:16;;46448:32;;;:::o;46486:101::-;46522:7;46562:18;46555:5;46551:30;46540:41;;46530:57;;;:::o;46593:86::-;46628:7;46668:4;46661:5;46657:16;46646:27;;46636:43;;;:::o;46685:154::-;46769:6;46764:3;46759;46746:30;46831:1;46822:6;46817:3;46813:16;46806:27;46736:103;;;:::o;46845:307::-;46913:1;46923:113;46937:6;46934:1;46931:13;46923:113;;;47022:1;47017:3;47013:11;47007:18;47003:1;46998:3;46994:11;46987:39;46959:2;46956:1;46952:10;46947:15;;46923:113;;;47054:6;47051:1;47048:13;47045:2;;;47134:1;47125:6;47120:3;47116:16;47109:27;47045:2;46894:258;;;;:::o;47158:171::-;47197:3;47220:24;47238:5;47220:24;:::i;:::-;47211:33;;47266:4;47259:5;47256:15;47253:2;;;47274:18;;:::i;:::-;47253:2;47321:1;47314:5;47310:13;47303:20;;47201:128;;;:::o;47335:320::-;47379:6;47416:1;47410:4;47406:12;47396:22;;47463:1;47457:4;47453:12;47484:18;47474:2;;47540:4;47532:6;47528:17;47518:27;;47474:2;47602;47594:6;47591:14;47571:18;47568:38;47565:2;;;47621:18;;:::i;:::-;47565:2;47386:269;;;;:::o;47661:281::-;47744:27;47766:4;47744:27;:::i;:::-;47736:6;47732:40;47874:6;47862:10;47859:22;47838:18;47826:10;47823:34;47820:62;47817:2;;;47885:18;;:::i;:::-;47817:2;47925:10;47921:2;47914:22;47704:238;;;:::o;47948:233::-;47987:3;48010:24;48028:5;48010:24;:::i;:::-;48001:33;;48056:66;48049:5;48046:77;48043:2;;;48126:18;;:::i;:::-;48043:2;48173:1;48166:5;48162:13;48155:20;;47991:190;;;:::o;48187:167::-;48224:3;48247:22;48263:5;48247:22;:::i;:::-;48238:31;;48291:4;48284:5;48281:15;48278:2;;;48299:18;;:::i;:::-;48278:2;48346:1;48339:5;48335:13;48328:20;;48228:126;;;:::o;48360:180::-;48408:77;48405:1;48398:88;48505:4;48502:1;48495:15;48529:4;48526:1;48519:15;48546:180;48594:77;48591:1;48584:88;48691:4;48688:1;48681:15;48715:4;48712:1;48705:15;48732:180;48780:77;48777:1;48770:88;48877:4;48874:1;48867:15;48901:4;48898:1;48891:15;48918:183;48953:3;48991:1;48973:16;48970:23;48967:2;;;49029:1;49026;49023;49008:23;49051:34;49082:1;49076:8;49051:34;:::i;:::-;49044:41;;48967:2;48957:144;:::o;49107:102::-;49148:6;49199:2;49195:7;49190:2;49183:5;49179:14;49175:28;49165:38;;49155:54;;;:::o;49215:106::-;49259:8;49308:5;49303:3;49299:15;49278:36;;49268:53;;;:::o;49327:174::-;49467:26;49463:1;49455:6;49451:14;49444:50;49433:68;:::o;49507:239::-;49647:34;49643:1;49635:6;49631:14;49624:58;49716:22;49711:2;49703:6;49699:15;49692:47;49613:133;:::o;49752:182::-;49892:34;49888:1;49880:6;49876:14;49869:58;49858:76;:::o;49940:227::-;50080:34;50076:1;50068:6;50064:14;50057:58;50149:10;50144:2;50136:6;50132:15;50125:35;50046:121;:::o;50173:181::-;50313:33;50309:1;50301:6;50297:14;50290:57;50279:75;:::o;50360:230::-;50500:34;50496:1;50488:6;50484:14;50477:58;50569:13;50564:2;50556:6;50552:15;50545:38;50466:124;:::o;50596:225::-;50736:34;50732:1;50724:6;50720:14;50713:58;50805:8;50800:2;50792:6;50788:15;50781:33;50702:119;:::o;50827:228::-;50967:34;50963:1;50955:6;50951:14;50944:58;51036:11;51031:2;51023:6;51019:15;51012:36;50933:122;:::o;51061:176::-;51201:28;51197:1;51189:6;51185:14;51178:52;51167:70;:::o;51243:221::-;51383:34;51379:1;51371:6;51367:14;51360:58;51452:4;51447:2;51439:6;51435:15;51428:29;51349:115;:::o;51470:224::-;51610:34;51606:1;51598:6;51594:14;51587:58;51679:7;51674:2;51666:6;51662:15;51655:32;51576:118;:::o;51700:237::-;51840:34;51836:1;51828:6;51824:14;51817:58;51909:20;51904:2;51896:6;51892:15;51885:45;51806:131;:::o;51943:171::-;52083:23;52079:1;52071:6;52067:14;52060:47;52049:65;:::o;52120:221::-;52260:34;52256:1;52248:6;52244:14;52237:58;52329:4;52324:2;52316:6;52312:15;52305:29;52226:115;:::o;52347:163::-;52487:15;52483:1;52475:6;52471:14;52464:39;52453:57;:::o;52516:171::-;52656:23;52652:1;52644:6;52640:14;52633:47;52622:65;:::o;52693:229::-;52833:34;52829:1;52821:6;52817:14;52810:58;52902:12;52897:2;52889:6;52885:15;52878:37;52799:123;:::o;52928:182::-;53068:34;53064:1;53056:6;53052:14;53045:58;53034:76;:::o;53116:173::-;53256:25;53252:1;53244:6;53240:14;53233:49;53222:67;:::o;53295:176::-;53435:28;53431:1;53423:6;53419:14;53412:52;53401:70;:::o;53477:170::-;53617:22;53613:1;53605:6;53601:14;53594:46;53583:64;:::o;53653:181::-;53793:33;53789:1;53781:6;53777:14;53770:57;53759:75;:::o;53840:228::-;53980:34;53976:1;53968:6;53964:14;53957:58;54049:11;54044:2;54036:6;54032:15;54025:36;53946:122;:::o;54074:228::-;54214:34;54210:1;54202:6;54198:14;54191:58;54283:11;54278:2;54270:6;54266:15;54259:36;54180:122;:::o;54308:227::-;54448:34;54444:1;54436:6;54432:14;54425:58;54517:10;54512:2;54504:6;54500:15;54493:35;54414:121;:::o;54541:220::-;54681:34;54677:1;54669:6;54665:14;54658:58;54750:3;54745:2;54737:6;54733:15;54726:28;54647:114;:::o;54767:711::-;54806:3;54844:4;54826:16;54823:26;54820:2;;;54852:5;;54820:2;54881:20;;:::i;:::-;54956:1;54938:16;54934:24;54931:1;54925:4;54910:49;54989:4;54983:11;55088:16;55081:4;55073:6;55069:17;55066:39;55033:18;55025:6;55022:30;55006:113;55003:2;;;55134:5;;;;55003:2;55180:6;55174:4;55170:17;55216:3;55210:10;55243:18;55235:6;55232:30;55229:2;;;55265:5;;;;;;55229:2;55313:6;55306:4;55301:3;55297:14;55293:27;55372:1;55354:16;55350:24;55344:4;55340:35;55335:3;55332:44;55329:2;;;55379:5;;;;;;;55329:2;55396:57;55444:6;55438:4;55434:17;55426:6;55422:30;55416:4;55396:57;:::i;:::-;55469:3;55462:10;;54810:668;;;;;;;:::o;55484:122::-;55557:24;55575:5;55557:24;:::i;:::-;55550:5;55547:35;55537:2;;55596:1;55593;55586:12;55537:2;55527:79;:::o;55612:116::-;55682:21;55697:5;55682:21;:::i;:::-;55675:5;55672:32;55662:2;;55718:1;55715;55708:12;55662:2;55652:76;:::o;55734:122::-;55807:24;55825:5;55807:24;:::i;:::-;55800:5;55797:35;55787:2;;55846:1;55843;55836:12;55787:2;55777:79;:::o;55862:120::-;55934:23;55951:5;55934:23;:::i;:::-;55927:5;55924:34;55914:2;;55972:1;55969;55962:12;55914:2;55904:78;:::o;55988:122::-;56061:24;56079:5;56061:24;:::i;:::-;56054:5;56051:35;56041:2;;56100:1;56097;56090:12;56041:2;56031:79;:::o;56116:118::-;56187:22;56203:5;56187:22;:::i;:::-;56180:5;56177:33;56167:2;;56224:1;56221;56214:12;56167:2;56157:77;:::o
Swarm Source
ipfs://89556867a32813ef9d82515d63f5df9acc02002ffc343d8d6022accea30642c0
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.