Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 238 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21270507 | 15 days ago | IN | 0 ETH | 0.00039309 | ||||
Set Approval For... | 21256199 | 17 days ago | IN | 0 ETH | 0.0003703 | ||||
Set Approval For... | 19792825 | 221 days ago | IN | 0 ETH | 0.00021781 | ||||
Set Approval For... | 15180336 | 875 days ago | IN | 0 ETH | 0.00230193 | ||||
Set Approval For... | 15159567 | 878 days ago | IN | 0 ETH | 0.00025798 | ||||
Set Approval For... | 15049052 | 895 days ago | IN | 0 ETH | 0.00300018 | ||||
Set Approval For... | 15024710 | 900 days ago | IN | 0 ETH | 0.00224505 | ||||
Set Approval For... | 14639598 | 963 days ago | IN | 0 ETH | 0.00130425 | ||||
Set Approval For... | 14579696 | 972 days ago | IN | 0 ETH | 0.00165584 | ||||
Set Approval For... | 14516976 | 982 days ago | IN | 0 ETH | 0.00310067 | ||||
Set Approval For... | 14287932 | 1018 days ago | IN | 0 ETH | 0.00122673 | ||||
Set Approval For... | 14217737 | 1029 days ago | IN | 0 ETH | 0.00382888 | ||||
Set Approval For... | 14199246 | 1032 days ago | IN | 0 ETH | 0.0019488 | ||||
Set Approval For... | 14198433 | 1032 days ago | IN | 0 ETH | 0.00201584 | ||||
Set Approval For... | 14185422 | 1034 days ago | IN | 0 ETH | 0.00260819 | ||||
Set Approval For... | 14175154 | 1035 days ago | IN | 0 ETH | 0.00350247 | ||||
Set Approval For... | 14087061 | 1049 days ago | IN | 0 ETH | 0.00465501 | ||||
Set Approval For... | 14043568 | 1056 days ago | IN | 0 ETH | 0.00621552 | ||||
Set Approval For... | 14041746 | 1056 days ago | IN | 0 ETH | 0.00378769 | ||||
Set Approval For... | 14040593 | 1056 days ago | IN | 0 ETH | 0.00514306 | ||||
Set Approval For... | 14026307 | 1058 days ago | IN | 0 ETH | 0.00450974 | ||||
Set Approval For... | 14024977 | 1059 days ago | IN | 0 ETH | 0.01230084 | ||||
Set Approval For... | 14023857 | 1059 days ago | IN | 0 ETH | 0.00771047 | ||||
Set Approval For... | 14023815 | 1059 days ago | IN | 0 ETH | 0.00569002 | ||||
Set Approval For... | 14023678 | 1059 days ago | IN | 0 ETH | 0.00485989 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14010301 | 1061 days ago | 17.36 ETH |
Loading...
Loading
Contract Name:
METAINVASION
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-30 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.4; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol /** * @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/introspection/IERC165.sol /** * @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/utils/introspection/ERC165.sol /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor() { } /** * @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 { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( 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 `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (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 `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address account, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try 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; } } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } contract METAINVASION is ERC1155, Ownable { string public constant name = "METAINVASION"; string public constant symbol = "META"; using SafeMath for uint256; using Strings for uint256; uint256 public totalSupply = 0; string private baseURI; string private blindURI; uint256 public constant MAX_NFT_PUBLIC = 8788; uint256 private constant MAX_NFT = 8888; uint256 public constant maxGiveaway=100; uint256 public NFTPrice = 150000000000000000; // 0.15 ETH uint256 public MAX_NFT_PRICE = 200000000000000000; // 0.2 ETH bool public reveal; bool public isActive; bool public isPresaleActive; bytes32 public root; uint256 public giveawayCount; /* * Function to reveal all NFTs */ function revealNow() external onlyOwner { reveal = true; } /* * Function to mint NFTs */ function mint(address to, uint32 count) internal { if (count > 1) { uint256[] memory ids = new uint256[](uint256(count)); uint256[] memory amounts = new uint256[](uint256(count)); for (uint32 i = 0; i < count; i++) { ids[i] = totalSupply + i; amounts[i] = 1; } _mintBatch(to, ids, amounts, ""); } else { _mint(to, totalSupply, 1, ""); } totalSupply += count; } /* * Function setIsActive to activate/desactivate the smart contract */ function setIsActive( bool _isActive ) external onlyOwner { isActive = _isActive; } /* * Function setPrice allow the owner to set the price of an NFT */ function setPrice( uint256 _price ) external onlyOwner { require(_price <= MAX_NFT_PRICE, 'The price must be smaller or equal to MAX_NFT_PRICE'); require(_price > 0, 'The price must be greater than 0'); NFTPrice = _price; } /* * Function setPresaleActive to activate/desactivate the presale */ function setPresaleActive( bool _isActive ) external onlyOwner { isPresaleActive = _isActive; } /* * Function to set Base and Blind URI */ function setURIs( string memory _blindURI, string memory _URI ) external onlyOwner { blindURI = _blindURI; baseURI = _URI; } /* * Function to withdraw collected amount during minting by the owner */ function withdraw( ) public onlyOwner { uint balance = address(this).balance; require(balance > 0, "Balance should be more then zero"); payable(owner()).transfer(balance); } /* * Function to mint new NFTs during the public sale * It is payable. Amount is calculated as per (NFTPrice.mul(_numOfTokens)) */ function mintNFT( uint32 _numOfTokens ) public payable { require(isActive, 'Contract is not active'); require(!isPresaleActive, 'Presale still active'); require(totalSupply.add(_numOfTokens).sub(giveawayCount) <= MAX_NFT_PUBLIC, "Purchase would exceed max public supply of NFTs"); require( msg.value >= NFTPrice.mul(_numOfTokens), "Ether value sent is not correct"); mint(msg.sender,_numOfTokens); } /* * Function to mint new NFTs during the presale * It is payable. Amount is calculated as per (NFTPrice.mul(_numOfTokens)) */ function mintNFTDuringPresale( uint32 _numOfTokens, bytes32[] memory _proof ) public payable { require(isActive, 'Contract is not active'); require(isPresaleActive, 'Presale not active'); require(verify(_proof, bytes32(uint256(uint160(msg.sender)))), "Not whitelisted"); require(totalSupply.sub(giveawayCount) < MAX_NFT_PUBLIC, 'All public tokens have been minted'); require(totalSupply.add(_numOfTokens).sub(giveawayCount) <= MAX_NFT_PUBLIC, 'Purchase would exceed max public supply of NFTs'); require( msg.value >= NFTPrice.mul(_numOfTokens), "Ether value sent is not correct"); mint(msg.sender,_numOfTokens); } /* * Function to mint all NFTs for giveaway and partnerships */ function mintByOwner( address _to ) public onlyOwner { require(totalSupply.add(1) < MAX_NFT, "Tokens number to mint cannot exceed number of MAX tokens"); mint(_to,1); } /* * Function to mint all NFTs for giveaway and partnerships */ function mintMultipleByOwner( address[] memory _to ) public onlyOwner { require(totalSupply.add(_to.length) < MAX_NFT, "Tokens number to mint cannot exceed number of MAX tokens"); require(giveawayCount.add(_to.length)<=maxGiveaway,"Cannot do that much giveaway"); for(uint256 i = 0; i < _to.length; i++){ mint(_to[i],1); } giveawayCount=giveawayCount.add(_to.length); } /* * Function to get token URI of given token ID * URI will be blank untill totalSupply reaches MAX_NFT_PUBLIC */ function uri( uint256 _tokenId ) public view virtual override returns (string memory) { require(_tokenId<totalSupply, "ERC1155Metadata: URI query for nonexistent token"); if (!reveal) { return string(abi.encodePacked(blindURI)); } else { return string(abi.encodePacked(baseURI, _tokenId.toString())); } } /* * Function to set the merkle root */ function setRoot(uint256 _root) onlyOwner() public { root = bytes32(_root); } /* * Function to verify the proof */ function verify(bytes32[] memory proof, bytes32 leaf) public view returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = sha256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = sha256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":[],"name":"MAX_NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"mintMultipleByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_numOfTokens","type":"uint32"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_numOfTokens","type":"uint32"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintNFTDuringPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealNow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_root","type":"uint256"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_blindURI","type":"string"},{"internalType":"string","name":"_URI","type":"string"}],"name":"setURIs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600455670214e8348c4f00006007556702c68af0bb1400006008553480156200002e57600080fd5b506200004f620000436200005560201b60201c565b6200005d60201b60201c565b62000123565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61544a80620001336000396000f3fe6080604052600436106102035760003560e01c8063715018a611610118578063b533731d116100a0578063e9be0f3f1161006f578063e9be0f3f14610714578063ebf0c7171461073f578063f242432a1461076a578063f2f5a7e514610793578063f2fde38b146107bc57610203565b8063b533731d1461065a578063d1d80f3014610683578063e8254174146106ae578063e985e9c5146106d757610203565b806395d89b41116100e757806395d89b4114610573578063972a2a621461059e578063a22cb465146105db578063a38bffda14610604578063a475b5dd1461062f57610203565b8063715018a6146104dd5780638cdb9069146104f45780638da5cb5b1461051f57806391b7f5ed1461054a57610203565b80633ccfd60b1161019b5780634cdb44001161016a5780634cdb4400146104195780634e1273f414610442578063560b26081461047f5780635f0f45b21461049b57806360d938dc146104b257610203565b80633ccfd60b146103925780633f8121a2146103a957806341de0e52146103d2578063459ba3ae146103ee57610203565b806318160ddd116101d757806318160ddd146102ea57806322f3e2d4146103155780632750fc78146103405780632eb2c2d61461036957610203565b8062fdd58e1461020857806301ffc9a71461024557806306fdde03146102825780630e89341c146102ad575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a919061386c565b6107e5565b60405161023c9190614664565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906139fb565b6108ae565b60405161027991906142cc565b60405180910390f35b34801561028e57600080fd5b50610297610990565b6040516102a49190614302565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190613ab9565b6109c9565b6040516102e19190614302565b60405180910390f35b3480156102f657600080fd5b506102ff610a7e565b60405161030c9190614664565b60405180910390f35b34801561032157600080fd5b5061032a610a84565b60405161033791906142cc565b60405180910390f35b34801561034c57600080fd5b50610367600480360381019061036291906139a9565b610a97565b005b34801561037557600080fd5b50610390600480360381019061038b91906136e2565b610b30565b005b34801561039e57600080fd5b506103a7610bd1565b005b3480156103b557600080fd5b506103d060048036038101906103cb91906139a9565b610ce6565b005b6103ec60048036038101906103e79190613ae2565b610d7f565b005b3480156103fa57600080fd5b50610403610efb565b6040516104109190614664565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b91906138a8565b610f00565b005b34801561044e57600080fd5b50610469600480360381019061046491906138e9565b6110b8565b6040516104769190614273565b60405180910390f35b61049960048036038101906104949190613b0b565b611269565b005b3480156104a757600080fd5b506104b06114a1565b005b3480156104be57600080fd5b506104c761153a565b6040516104d491906142cc565b60405180910390f35b3480156104e957600080fd5b506104f261154d565b005b34801561050057600080fd5b506105096115d5565b6040516105169190614664565b60405180910390f35b34801561052b57600080fd5b506105346115db565b6040516105419190614196565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613ab9565b611605565b005b34801561057f57600080fd5b50610588611713565b6040516105959190614302565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613955565b61174c565b6040516105d291906142cc565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613830565b6118b9565b005b34801561061057600080fd5b50610619611a3a565b6040516106269190614664565b60405180910390f35b34801561063b57600080fd5b50610644611a40565b60405161065191906142cc565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c919061367d565b611a53565b005b34801561068f57600080fd5b50610698611b36565b6040516106a59190614664565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190613a4d565b611b3c565b005b3480156106e357600080fd5b506106fe60048036038101906106f991906136a6565b611bea565b60405161070b91906142cc565b60405180910390f35b34801561072057600080fd5b50610729611c7e565b6040516107369190614664565b60405180910390f35b34801561074b57600080fd5b50610754611c84565b60405161076191906142e7565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c91906137a1565b611c8a565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190613ab9565b611d2b565b005b3480156107c857600080fd5b506107e360048036038101906107de919061367d565b611db4565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084d90614364565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610989575061098882611eac565b5b9050919050565b6040518060400160405280600c81526020017f4d455441494e564153494f4e000000000000000000000000000000000000000081525081565b60606004548210610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690614564565b60405180910390fd5b600960009054906101000a900460ff16610a4b576006604051602001610a35919061415b565b6040516020818303038152906040529050610a79565b6005610a5683611f16565b604051602001610a67929190614172565b60405160208183030381529060405290505b919050565b60045481565b600960019054906101000a900460ff1681565b610a9f6120c3565b73ffffffffffffffffffffffffffffffffffffffff16610abd6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90614544565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b610b386120c3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b7e5750610b7d85610b786120c3565b611bea565b5b610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb490614484565b60405180910390fd5b610bca85858585856120cb565b5050505050565b610bd96120c3565b73ffffffffffffffffffffffffffffffffffffffff16610bf76115db565b73ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490614544565b60405180910390fd5b600047905060008111610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90614444565b60405180910390fd5b610c9d6115db565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ce2573d6000803e3d6000fd5b5050565b610cee6120c3565b73ffffffffffffffffffffffffffffffffffffffff16610d0c6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990614544565b60405180910390fd5b80600960026101000a81548160ff02191690831515021790555050565b600960019054906101000a900460ff16610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590614504565b60405180910390fd5b600960029054906101000a900460ff1615610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906143a4565b60405180910390fd5b612254610e50600b54610e428463ffffffff1660045461242b90919063ffffffff16565b61244190919063ffffffff16565b1115610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8890614584565b60405180910390fd5b610eac8163ffffffff1660075461245790919063ffffffff16565b341015610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee590614424565b60405180910390fd5b610ef8338261246d565b50565b606481565b610f086120c3565b73ffffffffffffffffffffffffffffffffffffffff16610f266115db565b73ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390614544565b60405180910390fd5b6122b8610f95825160045461242b90919063ffffffff16565b10610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc906144c4565b60405180910390fd5b6064610fed8251600b5461242b90919063ffffffff16565b111561102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590614644565b60405180910390fd5b60005b815181101561109857611085828281518110611076577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600161246d565b808061109090614a97565b915050611031565b506110af8151600b5461242b90919063ffffffff16565b600b8190555050565b606081518351146110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f5906145c4565b60405180910390fd5b6000835167ffffffffffffffff811115611141577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561116f5781602001602082028036833780820191505090505b50905060005b845181101561125e576112088582815181106111ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106111fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516107e5565b828281518110611241577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061125790614a97565b9050611175565b508091505092915050565b600960019054906101000a900460ff166112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90614504565b60405180910390fd5b600960029054906101000a900460ff16611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90614404565b60405180910390fd5b61132a813373ffffffffffffffffffffffffffffffffffffffff1660001b61174c565b611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906144a4565b60405180910390fd5b612254611383600b5460045461244190919063ffffffff16565b106113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906145e4565b60405180910390fd5b6122546113f5600b546113e78563ffffffff1660045461242b90919063ffffffff16565b61244190919063ffffffff16565b1115611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90614584565b60405180910390fd5b6114518263ffffffff1660075461245790919063ffffffff16565b341015611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90614424565b60405180910390fd5b61149d338361246d565b5050565b6114a96120c3565b73ffffffffffffffffffffffffffffffffffffffff166114c76115db565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490614544565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b600960029054906101000a900460ff1681565b6115556120c3565b73ffffffffffffffffffffffffffffffffffffffff166115736115db565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090614544565b60405180910390fd5b6115d360006126a9565b565b60085481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61160d6120c3565b73ffffffffffffffffffffffffffffffffffffffff1661162b6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890614544565b60405180910390fd5b6008548111156116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd906143c4565b60405180910390fd5b60008111611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614524565b60405180910390fd5b8060078190555050565b6040518060400160405280600481526020017f4d4554410000000000000000000000000000000000000000000000000000000081525081565b60008082905060005b84518110156118aa576000858281518110611799577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161182257600283826040516020016117bf929190614118565b6040516020818303038152906040526040516117db9190614144565b602060405180830381855afa1580156117f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061181b91906139d2565b9250611896565b60028184604051602001611837929190614118565b6040516020818303038152906040526040516118539190614144565b602060405180830381855afa158015611870573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061189391906139d2565b92505b5080806118a290614a97565b915050611755565b50600a54811491505092915050565b8173ffffffffffffffffffffffffffffffffffffffff166118d86120c3565b73ffffffffffffffffffffffffffffffffffffffff16141561192f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611926906145a4565b60405180910390fd5b806001600061193c6120c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119e96120c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a2e91906142cc565b60405180910390a35050565b60075481565b600960009054906101000a900460ff1681565b611a5b6120c3565b73ffffffffffffffffffffffffffffffffffffffff16611a796115db565b73ffffffffffffffffffffffffffffffffffffffff1614611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690614544565b60405180910390fd5b6122b8611ae8600160045461242b90919063ffffffff16565b10611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906144c4565b60405180910390fd5b611b3381600161246d565b50565b61225481565b611b446120c3565b73ffffffffffffffffffffffffffffffffffffffff16611b626115db565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614544565b60405180910390fd5b8160069080519060200190611bce9291906132a0565b508060059080519060200190611be59291906132a0565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b600a5481565b611c926120c3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611cd85750611cd785611cd26120c3565b611bea565b5b611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e906143e4565b60405180910390fd5b611d24858585858561276f565b5050505050565b611d336120c3565b73ffffffffffffffffffffffffffffffffffffffff16611d516115db565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90614544565b60405180910390fd5b8060001b600a8190555050565b611dbc6120c3565b73ffffffffffffffffffffffffffffffffffffffff16611dda6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790614544565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790614384565b60405180910390fd5b611ea9816126a9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415611f5e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120be565b600082905060005b60008214611f90578080611f7990614a97565b915050600a82611f8991906148a5565b9150611f66565b60008167ffffffffffffffff811115611fd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120045781602001600182028036833780820191505090505b5090505b600085146120b75760018261201d9190614930565b9150600a8561202c9190614b17565b6030612038919061484f565b60f81b818381518110612074577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120b091906148a5565b9450612008565b8093505050505b919050565b600033905090565b815183511461210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210690614604565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614464565b60405180910390fd5b60006121896120c3565b90506121998187878787876129f1565b60005b84518110156123965760008582815181106121e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110612225577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd906144e4565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237b919061484f565b925050819055505050508061238f90614a97565b905061219c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161240d929190614295565b60405180910390a46124238187878787876129f9565b505050505050565b60008183612439919061484f565b905092915050565b6000818361244f9190614930565b905092915050565b6000818361246591906148d6565b905092915050565b60018163ffffffff1611156126675760008163ffffffff1667ffffffffffffffff8111156124c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124f25781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff81111561253d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561256b5781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015612644578063ffffffff16600454612599919061484f565b838263ffffffff16815181106125d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506001828263ffffffff1681518110612625577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061263c90614ae0565b915050612571565b5061266084838360405180602001604052806000815250612be0565b5050612686565b61268582600454600160405180602001604052806000815250612e4a565b5b8063ffffffff166004600082825461269e919061484f565b925050819055505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d690614464565b60405180910390fd5b60006127e96120c3565b90506128098187876127fa88612fe0565b61280388612fe0565b876129f1565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156128a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612897906144e4565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612955919061484f565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516129d292919061467f565b60405180910390a46129e88288888888886130a6565b50505050505050565b505050505050565b612a188473ffffffffffffffffffffffffffffffffffffffff1661328d565b15612bd8578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612a5e9594939291906141b1565b602060405180830381600087803b158015612a7857600080fd5b505af1925050508015612aa957506040513d601f19601f82011682018060405250810190612aa69190613a24565b60015b612b4f57612ab5614c04565b806308c379a01415612b125750612aca6152f4565b80612ad55750612b14565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b099190614302565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614324565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd90614344565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4790614624565b60405180910390fd5b8151835114612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b90614604565b60405180910390fd5b6000612c9e6120c3565b9050612caf816000878787876129f1565b60005b8451811015612db457838181518110612cf4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600080878481518110612d38577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d9a919061484f565b925050819055508080612dac90614a97565b915050612cb2565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612e2c929190614295565b60405180910390a4612e43816000878787876129f9565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb190614624565b60405180910390fd5b6000612ec46120c3565b9050612ee581600087612ed688612fe0565b612edf88612fe0565b876129f1565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f44919061484f565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612fc292919061467f565b60405180910390a4612fd9816000878787876130a6565b5050505050565b60606000600167ffffffffffffffff811115613025577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156130535781602001602082028036833780820191505090505b5090508281600081518110613091577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6130c58473ffffffffffffffffffffffffffffffffffffffff1661328d565b15613285578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161310b959493929190614219565b602060405180830381600087803b15801561312557600080fd5b505af192505050801561315657506040513d601f19601f820116820180604052508101906131539190613a24565b60015b6131fc57613162614c04565b806308c379a014156131bf57506131776152f4565b8061318257506131c1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b69190614302565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614324565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327a90614344565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546132ac90614a34565b90600052602060002090601f0160209004810192826132ce5760008555613315565b82601f106132e757805160ff1916838001178555613315565b82800160010185558215613315579182015b828111156133145782518255916020019190600101906132f9565b5b5090506133229190613326565b5090565b5b8082111561333f576000816000905550600101613327565b5090565b6000613356613351846146cd565b6146a8565b9050808382526020820190508285602086028201111561337557600080fd5b60005b858110156133a5578161338b8882613503565b845260208401935060208301925050600181019050613378565b5050509392505050565b60006133c26133bd846146f9565b6146a8565b905080838252602082019050828560208602820111156133e157600080fd5b60005b8581101561341157816133f788826135ab565b8452602084019350602083019250506001810190506133e4565b5050509392505050565b600061342e61342984614725565b6146a8565b9050808382526020820190508285602086028201111561344d57600080fd5b60005b8581101561347d57816134638882613653565b845260208401935060208301925050600181019050613450565b5050509392505050565b600061349a61349584614751565b6146a8565b9050828152602081018484840111156134b257600080fd5b6134bd8482856149f2565b509392505050565b60006134d86134d384614782565b6146a8565b9050828152602081018484840111156134f057600080fd5b6134fb8482856149f2565b509392505050565b6000813590506135128161538a565b92915050565b600082601f83011261352957600080fd5b8135613539848260208601613343565b91505092915050565b600082601f83011261355357600080fd5b81356135638482602086016133af565b91505092915050565b600082601f83011261357d57600080fd5b813561358d84826020860161341b565b91505092915050565b6000813590506135a5816153a1565b92915050565b6000813590506135ba816153b8565b92915050565b6000815190506135cf816153b8565b92915050565b6000813590506135e4816153cf565b92915050565b6000815190506135f9816153cf565b92915050565b600082601f83011261361057600080fd5b8135613620848260208601613487565b91505092915050565b600082601f83011261363a57600080fd5b813561364a8482602086016134c5565b91505092915050565b600081359050613662816153e6565b92915050565b600081359050613677816153fd565b92915050565b60006020828403121561368f57600080fd5b600061369d84828501613503565b91505092915050565b600080604083850312156136b957600080fd5b60006136c785828601613503565b92505060206136d885828601613503565b9150509250929050565b600080600080600060a086880312156136fa57600080fd5b600061370888828901613503565b955050602061371988828901613503565b945050604086013567ffffffffffffffff81111561373657600080fd5b6137428882890161356c565b935050606086013567ffffffffffffffff81111561375f57600080fd5b61376b8882890161356c565b925050608086013567ffffffffffffffff81111561378857600080fd5b613794888289016135ff565b9150509295509295909350565b600080600080600060a086880312156137b957600080fd5b60006137c788828901613503565b95505060206137d888828901613503565b94505060406137e988828901613653565b93505060606137fa88828901613653565b925050608086013567ffffffffffffffff81111561381757600080fd5b613823888289016135ff565b9150509295509295909350565b6000806040838503121561384357600080fd5b600061385185828601613503565b925050602061386285828601613596565b9150509250929050565b6000806040838503121561387f57600080fd5b600061388d85828601613503565b925050602061389e85828601613653565b9150509250929050565b6000602082840312156138ba57600080fd5b600082013567ffffffffffffffff8111156138d457600080fd5b6138e084828501613518565b91505092915050565b600080604083850312156138fc57600080fd5b600083013567ffffffffffffffff81111561391657600080fd5b61392285828601613518565b925050602083013567ffffffffffffffff81111561393f57600080fd5b61394b8582860161356c565b9150509250929050565b6000806040838503121561396857600080fd5b600083013567ffffffffffffffff81111561398257600080fd5b61398e85828601613542565b925050602061399f858286016135ab565b9150509250929050565b6000602082840312156139bb57600080fd5b60006139c984828501613596565b91505092915050565b6000602082840312156139e457600080fd5b60006139f2848285016135c0565b91505092915050565b600060208284031215613a0d57600080fd5b6000613a1b848285016135d5565b91505092915050565b600060208284031215613a3657600080fd5b6000613a44848285016135ea565b91505092915050565b60008060408385031215613a6057600080fd5b600083013567ffffffffffffffff811115613a7a57600080fd5b613a8685828601613629565b925050602083013567ffffffffffffffff811115613aa357600080fd5b613aaf85828601613629565b9150509250929050565b600060208284031215613acb57600080fd5b6000613ad984828501613653565b91505092915050565b600060208284031215613af457600080fd5b6000613b0284828501613668565b91505092915050565b60008060408385031215613b1e57600080fd5b6000613b2c85828601613668565b925050602083013567ffffffffffffffff811115613b4957600080fd5b613b5585828601613542565b9150509250929050565b6000613b6b83836140fa565b60208301905092915050565b613b8081614964565b82525050565b6000613b91826147d8565b613b9b8185614806565b9350613ba6836147b3565b8060005b83811015613bd7578151613bbe8882613b5f565b9750613bc9836147f9565b925050600181019050613baa565b5085935050505092915050565b613bed81614976565b82525050565b613bfc81614982565b82525050565b613c13613c0e82614982565b614b0d565b82525050565b6000613c24826147e3565b613c2e8185614817565b9350613c3e818560208601614a01565b613c4781614c26565b840191505092915050565b6000613c5d826147e3565b613c678185614828565b9350613c77818560208601614a01565b80840191505092915050565b6000613c8e826147ee565b613c988185614833565b9350613ca8818560208601614a01565b613cb181614c26565b840191505092915050565b6000613cc7826147ee565b613cd18185614844565b9350613ce1818560208601614a01565b80840191505092915050565b60008154613cfa81614a34565b613d048186614844565b94506001821660008114613d1f5760018114613d3057613d63565b60ff19831686528186019350613d63565b613d39856147c3565b60005b83811015613d5b57815481890152600182019150602081019050613d3c565b838801955050505b50505092915050565b6000613d79603483614833565b9150613d8482614c44565b604082019050919050565b6000613d9c602883614833565b9150613da782614c93565b604082019050919050565b6000613dbf602b83614833565b9150613dca82614ce2565b604082019050919050565b6000613de2602683614833565b9150613ded82614d31565b604082019050919050565b6000613e05601483614833565b9150613e1082614d80565b602082019050919050565b6000613e28603383614833565b9150613e3382614da9565b604082019050919050565b6000613e4b602983614833565b9150613e5682614df8565b604082019050919050565b6000613e6e601283614833565b9150613e7982614e47565b602082019050919050565b6000613e91601f83614833565b9150613e9c82614e70565b602082019050919050565b6000613eb4602083614833565b9150613ebf82614e99565b602082019050919050565b6000613ed7602583614833565b9150613ee282614ec2565b604082019050919050565b6000613efa603283614833565b9150613f0582614f11565b604082019050919050565b6000613f1d600f83614833565b9150613f2882614f60565b602082019050919050565b6000613f40603883614833565b9150613f4b82614f89565b604082019050919050565b6000613f63602a83614833565b9150613f6e82614fd8565b604082019050919050565b6000613f86601683614833565b9150613f9182615027565b602082019050919050565b6000613fa9602083614833565b9150613fb482615050565b602082019050919050565b6000613fcc602083614833565b9150613fd782615079565b602082019050919050565b6000613fef603083614833565b9150613ffa826150a2565b604082019050919050565b6000614012602f83614833565b915061401d826150f1565b604082019050919050565b6000614035602983614833565b915061404082615140565b604082019050919050565b6000614058602983614833565b91506140638261518f565b604082019050919050565b600061407b602283614833565b9150614086826151de565b604082019050919050565b600061409e602883614833565b91506140a98261522d565b604082019050919050565b60006140c1602183614833565b91506140cc8261527c565b604082019050919050565b60006140e4601c83614833565b91506140ef826152cb565b602082019050919050565b614103816149d8565b82525050565b614112816149d8565b82525050565b60006141248285613c02565b6020820191506141348284613c02565b6020820191508190509392505050565b60006141508284613c52565b915081905092915050565b60006141678284613ced565b915081905092915050565b600061417e8285613ced565b915061418a8284613cbc565b91508190509392505050565b60006020820190506141ab6000830184613b77565b92915050565b600060a0820190506141c66000830188613b77565b6141d36020830187613b77565b81810360408301526141e58186613b86565b905081810360608301526141f98185613b86565b9050818103608083015261420d8184613c19565b90509695505050505050565b600060a08201905061422e6000830188613b77565b61423b6020830187613b77565b6142486040830186614109565b6142556060830185614109565b81810360808301526142678184613c19565b90509695505050505050565b6000602082019050818103600083015261428d8184613b86565b905092915050565b600060408201905081810360008301526142af8185613b86565b905081810360208301526142c38184613b86565b90509392505050565b60006020820190506142e16000830184613be4565b92915050565b60006020820190506142fc6000830184613bf3565b92915050565b6000602082019050818103600083015261431c8184613c83565b905092915050565b6000602082019050818103600083015261433d81613d6c565b9050919050565b6000602082019050818103600083015261435d81613d8f565b9050919050565b6000602082019050818103600083015261437d81613db2565b9050919050565b6000602082019050818103600083015261439d81613dd5565b9050919050565b600060208201905081810360008301526143bd81613df8565b9050919050565b600060208201905081810360008301526143dd81613e1b565b9050919050565b600060208201905081810360008301526143fd81613e3e565b9050919050565b6000602082019050818103600083015261441d81613e61565b9050919050565b6000602082019050818103600083015261443d81613e84565b9050919050565b6000602082019050818103600083015261445d81613ea7565b9050919050565b6000602082019050818103600083015261447d81613eca565b9050919050565b6000602082019050818103600083015261449d81613eed565b9050919050565b600060208201905081810360008301526144bd81613f10565b9050919050565b600060208201905081810360008301526144dd81613f33565b9050919050565b600060208201905081810360008301526144fd81613f56565b9050919050565b6000602082019050818103600083015261451d81613f79565b9050919050565b6000602082019050818103600083015261453d81613f9c565b9050919050565b6000602082019050818103600083015261455d81613fbf565b9050919050565b6000602082019050818103600083015261457d81613fe2565b9050919050565b6000602082019050818103600083015261459d81614005565b9050919050565b600060208201905081810360008301526145bd81614028565b9050919050565b600060208201905081810360008301526145dd8161404b565b9050919050565b600060208201905081810360008301526145fd8161406e565b9050919050565b6000602082019050818103600083015261461d81614091565b9050919050565b6000602082019050818103600083015261463d816140b4565b9050919050565b6000602082019050818103600083015261465d816140d7565b9050919050565b60006020820190506146796000830184614109565b92915050565b60006040820190506146946000830185614109565b6146a16020830184614109565b9392505050565b60006146b26146c3565b90506146be8282614a66565b919050565b6000604051905090565b600067ffffffffffffffff8211156146e8576146e7614bd5565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561471457614713614bd5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147405761473f614bd5565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561476c5761476b614bd5565b5b61477582614c26565b9050602081019050919050565b600067ffffffffffffffff82111561479d5761479c614bd5565b5b6147a682614c26565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061485a826149d8565b9150614865836149d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561489a57614899614b48565b5b828201905092915050565b60006148b0826149d8565b91506148bb836149d8565b9250826148cb576148ca614b77565b5b828204905092915050565b60006148e1826149d8565b91506148ec836149d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561492557614924614b48565b5b828202905092915050565b600061493b826149d8565b9150614946836149d8565b92508282101561495957614958614b48565b5b828203905092915050565b600061496f826149b8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a1f578082015181840152602081019050614a04565b83811115614a2e576000848401525b50505050565b60006002820490506001821680614a4c57607f821691505b60208210811415614a6057614a5f614ba6565b5b50919050565b614a6f82614c26565b810181811067ffffffffffffffff82111715614a8e57614a8d614bd5565b5b80604052505050565b6000614aa2826149d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ad557614ad4614b48565b5b600182019050919050565b6000614aeb826149e2565b915063ffffffff821415614b0257614b01614b48565b5b600182019050919050565b6000819050919050565b6000614b22826149d8565b9150614b2d836149d8565b925082614b3d57614b3c614b77565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614c235760046000803e614c20600051614c37565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f50726573616c65207374696c6c20616374697665000000000000000000000000600082015250565b7f546865207072696365206d75737420626520736d616c6c6572206f722065717560008201527f616c20746f204d41585f4e46545f505249434500000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f50726573616c65206e6f74206163746976650000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f546f6b656e73206e756d62657220746f206d696e742063616e6e6f742065786360008201527f656564206e756d626572206f66204d415820746f6b656e730000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b7f546865207072696365206d7573742062652067726561746572207468616e2030600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135354d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d6178207075626c696360008201527f20737570706c79206f66204e4654730000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f416c6c207075626c696320746f6b656e732068617665206265656e206d696e7460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420646f2074686174206d75636820676976656177617900000000600082015250565b600060443d101561530457615387565b61530c6146c3565b60043d036004823e80513d602482011167ffffffffffffffff82111715615334575050615387565b808201805167ffffffffffffffff8111156153525750505050615387565b80602083010160043d03850181111561536f575050505050615387565b61537e82602001850186614a66565b82955050505050505b90565b61539381614964565b811461539e57600080fd5b50565b6153aa81614976565b81146153b557600080fd5b50565b6153c181614982565b81146153cc57600080fd5b50565b6153d88161498c565b81146153e357600080fd5b50565b6153ef816149d8565b81146153fa57600080fd5b50565b615406816149e2565b811461541157600080fd5b5056fea264697066735822122083b86f881fbcb165455885c369474ef1739913074dd18c3f42a7345d4bea676364736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102035760003560e01c8063715018a611610118578063b533731d116100a0578063e9be0f3f1161006f578063e9be0f3f14610714578063ebf0c7171461073f578063f242432a1461076a578063f2f5a7e514610793578063f2fde38b146107bc57610203565b8063b533731d1461065a578063d1d80f3014610683578063e8254174146106ae578063e985e9c5146106d757610203565b806395d89b41116100e757806395d89b4114610573578063972a2a621461059e578063a22cb465146105db578063a38bffda14610604578063a475b5dd1461062f57610203565b8063715018a6146104dd5780638cdb9069146104f45780638da5cb5b1461051f57806391b7f5ed1461054a57610203565b80633ccfd60b1161019b5780634cdb44001161016a5780634cdb4400146104195780634e1273f414610442578063560b26081461047f5780635f0f45b21461049b57806360d938dc146104b257610203565b80633ccfd60b146103925780633f8121a2146103a957806341de0e52146103d2578063459ba3ae146103ee57610203565b806318160ddd116101d757806318160ddd146102ea57806322f3e2d4146103155780632750fc78146103405780632eb2c2d61461036957610203565b8062fdd58e1461020857806301ffc9a71461024557806306fdde03146102825780630e89341c146102ad575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a919061386c565b6107e5565b60405161023c9190614664565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906139fb565b6108ae565b60405161027991906142cc565b60405180910390f35b34801561028e57600080fd5b50610297610990565b6040516102a49190614302565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190613ab9565b6109c9565b6040516102e19190614302565b60405180910390f35b3480156102f657600080fd5b506102ff610a7e565b60405161030c9190614664565b60405180910390f35b34801561032157600080fd5b5061032a610a84565b60405161033791906142cc565b60405180910390f35b34801561034c57600080fd5b50610367600480360381019061036291906139a9565b610a97565b005b34801561037557600080fd5b50610390600480360381019061038b91906136e2565b610b30565b005b34801561039e57600080fd5b506103a7610bd1565b005b3480156103b557600080fd5b506103d060048036038101906103cb91906139a9565b610ce6565b005b6103ec60048036038101906103e79190613ae2565b610d7f565b005b3480156103fa57600080fd5b50610403610efb565b6040516104109190614664565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b91906138a8565b610f00565b005b34801561044e57600080fd5b50610469600480360381019061046491906138e9565b6110b8565b6040516104769190614273565b60405180910390f35b61049960048036038101906104949190613b0b565b611269565b005b3480156104a757600080fd5b506104b06114a1565b005b3480156104be57600080fd5b506104c761153a565b6040516104d491906142cc565b60405180910390f35b3480156104e957600080fd5b506104f261154d565b005b34801561050057600080fd5b506105096115d5565b6040516105169190614664565b60405180910390f35b34801561052b57600080fd5b506105346115db565b6040516105419190614196565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613ab9565b611605565b005b34801561057f57600080fd5b50610588611713565b6040516105959190614302565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613955565b61174c565b6040516105d291906142cc565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613830565b6118b9565b005b34801561061057600080fd5b50610619611a3a565b6040516106269190614664565b60405180910390f35b34801561063b57600080fd5b50610644611a40565b60405161065191906142cc565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c919061367d565b611a53565b005b34801561068f57600080fd5b50610698611b36565b6040516106a59190614664565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190613a4d565b611b3c565b005b3480156106e357600080fd5b506106fe60048036038101906106f991906136a6565b611bea565b60405161070b91906142cc565b60405180910390f35b34801561072057600080fd5b50610729611c7e565b6040516107369190614664565b60405180910390f35b34801561074b57600080fd5b50610754611c84565b60405161076191906142e7565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c91906137a1565b611c8a565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190613ab9565b611d2b565b005b3480156107c857600080fd5b506107e360048036038101906107de919061367d565b611db4565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084d90614364565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610989575061098882611eac565b5b9050919050565b6040518060400160405280600c81526020017f4d455441494e564153494f4e000000000000000000000000000000000000000081525081565b60606004548210610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690614564565b60405180910390fd5b600960009054906101000a900460ff16610a4b576006604051602001610a35919061415b565b6040516020818303038152906040529050610a79565b6005610a5683611f16565b604051602001610a67929190614172565b60405160208183030381529060405290505b919050565b60045481565b600960019054906101000a900460ff1681565b610a9f6120c3565b73ffffffffffffffffffffffffffffffffffffffff16610abd6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90614544565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b610b386120c3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b7e5750610b7d85610b786120c3565b611bea565b5b610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb490614484565b60405180910390fd5b610bca85858585856120cb565b5050505050565b610bd96120c3565b73ffffffffffffffffffffffffffffffffffffffff16610bf76115db565b73ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490614544565b60405180910390fd5b600047905060008111610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90614444565b60405180910390fd5b610c9d6115db565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ce2573d6000803e3d6000fd5b5050565b610cee6120c3565b73ffffffffffffffffffffffffffffffffffffffff16610d0c6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990614544565b60405180910390fd5b80600960026101000a81548160ff02191690831515021790555050565b600960019054906101000a900460ff16610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590614504565b60405180910390fd5b600960029054906101000a900460ff1615610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906143a4565b60405180910390fd5b612254610e50600b54610e428463ffffffff1660045461242b90919063ffffffff16565b61244190919063ffffffff16565b1115610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8890614584565b60405180910390fd5b610eac8163ffffffff1660075461245790919063ffffffff16565b341015610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee590614424565b60405180910390fd5b610ef8338261246d565b50565b606481565b610f086120c3565b73ffffffffffffffffffffffffffffffffffffffff16610f266115db565b73ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390614544565b60405180910390fd5b6122b8610f95825160045461242b90919063ffffffff16565b10610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc906144c4565b60405180910390fd5b6064610fed8251600b5461242b90919063ffffffff16565b111561102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590614644565b60405180910390fd5b60005b815181101561109857611085828281518110611076577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600161246d565b808061109090614a97565b915050611031565b506110af8151600b5461242b90919063ffffffff16565b600b8190555050565b606081518351146110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f5906145c4565b60405180910390fd5b6000835167ffffffffffffffff811115611141577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561116f5781602001602082028036833780820191505090505b50905060005b845181101561125e576112088582815181106111ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106111fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516107e5565b828281518110611241577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061125790614a97565b9050611175565b508091505092915050565b600960019054906101000a900460ff166112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90614504565b60405180910390fd5b600960029054906101000a900460ff16611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90614404565b60405180910390fd5b61132a813373ffffffffffffffffffffffffffffffffffffffff1660001b61174c565b611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906144a4565b60405180910390fd5b612254611383600b5460045461244190919063ffffffff16565b106113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906145e4565b60405180910390fd5b6122546113f5600b546113e78563ffffffff1660045461242b90919063ffffffff16565b61244190919063ffffffff16565b1115611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90614584565b60405180910390fd5b6114518263ffffffff1660075461245790919063ffffffff16565b341015611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90614424565b60405180910390fd5b61149d338361246d565b5050565b6114a96120c3565b73ffffffffffffffffffffffffffffffffffffffff166114c76115db565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490614544565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b600960029054906101000a900460ff1681565b6115556120c3565b73ffffffffffffffffffffffffffffffffffffffff166115736115db565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090614544565b60405180910390fd5b6115d360006126a9565b565b60085481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61160d6120c3565b73ffffffffffffffffffffffffffffffffffffffff1661162b6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890614544565b60405180910390fd5b6008548111156116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd906143c4565b60405180910390fd5b60008111611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614524565b60405180910390fd5b8060078190555050565b6040518060400160405280600481526020017f4d4554410000000000000000000000000000000000000000000000000000000081525081565b60008082905060005b84518110156118aa576000858281518110611799577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161182257600283826040516020016117bf929190614118565b6040516020818303038152906040526040516117db9190614144565b602060405180830381855afa1580156117f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061181b91906139d2565b9250611896565b60028184604051602001611837929190614118565b6040516020818303038152906040526040516118539190614144565b602060405180830381855afa158015611870573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061189391906139d2565b92505b5080806118a290614a97565b915050611755565b50600a54811491505092915050565b8173ffffffffffffffffffffffffffffffffffffffff166118d86120c3565b73ffffffffffffffffffffffffffffffffffffffff16141561192f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611926906145a4565b60405180910390fd5b806001600061193c6120c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119e96120c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a2e91906142cc565b60405180910390a35050565b60075481565b600960009054906101000a900460ff1681565b611a5b6120c3565b73ffffffffffffffffffffffffffffffffffffffff16611a796115db565b73ffffffffffffffffffffffffffffffffffffffff1614611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690614544565b60405180910390fd5b6122b8611ae8600160045461242b90919063ffffffff16565b10611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906144c4565b60405180910390fd5b611b3381600161246d565b50565b61225481565b611b446120c3565b73ffffffffffffffffffffffffffffffffffffffff16611b626115db565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614544565b60405180910390fd5b8160069080519060200190611bce9291906132a0565b508060059080519060200190611be59291906132a0565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b600a5481565b611c926120c3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611cd85750611cd785611cd26120c3565b611bea565b5b611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e906143e4565b60405180910390fd5b611d24858585858561276f565b5050505050565b611d336120c3565b73ffffffffffffffffffffffffffffffffffffffff16611d516115db565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90614544565b60405180910390fd5b8060001b600a8190555050565b611dbc6120c3565b73ffffffffffffffffffffffffffffffffffffffff16611dda6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790614544565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790614384565b60405180910390fd5b611ea9816126a9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415611f5e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120be565b600082905060005b60008214611f90578080611f7990614a97565b915050600a82611f8991906148a5565b9150611f66565b60008167ffffffffffffffff811115611fd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120045781602001600182028036833780820191505090505b5090505b600085146120b75760018261201d9190614930565b9150600a8561202c9190614b17565b6030612038919061484f565b60f81b818381518110612074577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120b091906148a5565b9450612008565b8093505050505b919050565b600033905090565b815183511461210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210690614604565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614464565b60405180910390fd5b60006121896120c3565b90506121998187878787876129f1565b60005b84518110156123965760008582815181106121e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110612225577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd906144e4565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237b919061484f565b925050819055505050508061238f90614a97565b905061219c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161240d929190614295565b60405180910390a46124238187878787876129f9565b505050505050565b60008183612439919061484f565b905092915050565b6000818361244f9190614930565b905092915050565b6000818361246591906148d6565b905092915050565b60018163ffffffff1611156126675760008163ffffffff1667ffffffffffffffff8111156124c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124f25781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff81111561253d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561256b5781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015612644578063ffffffff16600454612599919061484f565b838263ffffffff16815181106125d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506001828263ffffffff1681518110612625577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061263c90614ae0565b915050612571565b5061266084838360405180602001604052806000815250612be0565b5050612686565b61268582600454600160405180602001604052806000815250612e4a565b5b8063ffffffff166004600082825461269e919061484f565b925050819055505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d690614464565b60405180910390fd5b60006127e96120c3565b90506128098187876127fa88612fe0565b61280388612fe0565b876129f1565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156128a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612897906144e4565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612955919061484f565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516129d292919061467f565b60405180910390a46129e88288888888886130a6565b50505050505050565b505050505050565b612a188473ffffffffffffffffffffffffffffffffffffffff1661328d565b15612bd8578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612a5e9594939291906141b1565b602060405180830381600087803b158015612a7857600080fd5b505af1925050508015612aa957506040513d601f19601f82011682018060405250810190612aa69190613a24565b60015b612b4f57612ab5614c04565b806308c379a01415612b125750612aca6152f4565b80612ad55750612b14565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b099190614302565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614324565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd90614344565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4790614624565b60405180910390fd5b8151835114612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b90614604565b60405180910390fd5b6000612c9e6120c3565b9050612caf816000878787876129f1565b60005b8451811015612db457838181518110612cf4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600080878481518110612d38577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d9a919061484f565b925050819055508080612dac90614a97565b915050612cb2565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612e2c929190614295565b60405180910390a4612e43816000878787876129f9565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb190614624565b60405180910390fd5b6000612ec46120c3565b9050612ee581600087612ed688612fe0565b612edf88612fe0565b876129f1565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f44919061484f565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612fc292919061467f565b60405180910390a4612fd9816000878787876130a6565b5050505050565b60606000600167ffffffffffffffff811115613025577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156130535781602001602082028036833780820191505090505b5090508281600081518110613091577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6130c58473ffffffffffffffffffffffffffffffffffffffff1661328d565b15613285578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161310b959493929190614219565b602060405180830381600087803b15801561312557600080fd5b505af192505050801561315657506040513d601f19601f820116820180604052508101906131539190613a24565b60015b6131fc57613162614c04565b806308c379a014156131bf57506131776152f4565b8061318257506131c1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b69190614302565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614324565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327a90614344565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546132ac90614a34565b90600052602060002090601f0160209004810192826132ce5760008555613315565b82601f106132e757805160ff1916838001178555613315565b82800160010185558215613315579182015b828111156133145782518255916020019190600101906132f9565b5b5090506133229190613326565b5090565b5b8082111561333f576000816000905550600101613327565b5090565b6000613356613351846146cd565b6146a8565b9050808382526020820190508285602086028201111561337557600080fd5b60005b858110156133a5578161338b8882613503565b845260208401935060208301925050600181019050613378565b5050509392505050565b60006133c26133bd846146f9565b6146a8565b905080838252602082019050828560208602820111156133e157600080fd5b60005b8581101561341157816133f788826135ab565b8452602084019350602083019250506001810190506133e4565b5050509392505050565b600061342e61342984614725565b6146a8565b9050808382526020820190508285602086028201111561344d57600080fd5b60005b8581101561347d57816134638882613653565b845260208401935060208301925050600181019050613450565b5050509392505050565b600061349a61349584614751565b6146a8565b9050828152602081018484840111156134b257600080fd5b6134bd8482856149f2565b509392505050565b60006134d86134d384614782565b6146a8565b9050828152602081018484840111156134f057600080fd5b6134fb8482856149f2565b509392505050565b6000813590506135128161538a565b92915050565b600082601f83011261352957600080fd5b8135613539848260208601613343565b91505092915050565b600082601f83011261355357600080fd5b81356135638482602086016133af565b91505092915050565b600082601f83011261357d57600080fd5b813561358d84826020860161341b565b91505092915050565b6000813590506135a5816153a1565b92915050565b6000813590506135ba816153b8565b92915050565b6000815190506135cf816153b8565b92915050565b6000813590506135e4816153cf565b92915050565b6000815190506135f9816153cf565b92915050565b600082601f83011261361057600080fd5b8135613620848260208601613487565b91505092915050565b600082601f83011261363a57600080fd5b813561364a8482602086016134c5565b91505092915050565b600081359050613662816153e6565b92915050565b600081359050613677816153fd565b92915050565b60006020828403121561368f57600080fd5b600061369d84828501613503565b91505092915050565b600080604083850312156136b957600080fd5b60006136c785828601613503565b92505060206136d885828601613503565b9150509250929050565b600080600080600060a086880312156136fa57600080fd5b600061370888828901613503565b955050602061371988828901613503565b945050604086013567ffffffffffffffff81111561373657600080fd5b6137428882890161356c565b935050606086013567ffffffffffffffff81111561375f57600080fd5b61376b8882890161356c565b925050608086013567ffffffffffffffff81111561378857600080fd5b613794888289016135ff565b9150509295509295909350565b600080600080600060a086880312156137b957600080fd5b60006137c788828901613503565b95505060206137d888828901613503565b94505060406137e988828901613653565b93505060606137fa88828901613653565b925050608086013567ffffffffffffffff81111561381757600080fd5b613823888289016135ff565b9150509295509295909350565b6000806040838503121561384357600080fd5b600061385185828601613503565b925050602061386285828601613596565b9150509250929050565b6000806040838503121561387f57600080fd5b600061388d85828601613503565b925050602061389e85828601613653565b9150509250929050565b6000602082840312156138ba57600080fd5b600082013567ffffffffffffffff8111156138d457600080fd5b6138e084828501613518565b91505092915050565b600080604083850312156138fc57600080fd5b600083013567ffffffffffffffff81111561391657600080fd5b61392285828601613518565b925050602083013567ffffffffffffffff81111561393f57600080fd5b61394b8582860161356c565b9150509250929050565b6000806040838503121561396857600080fd5b600083013567ffffffffffffffff81111561398257600080fd5b61398e85828601613542565b925050602061399f858286016135ab565b9150509250929050565b6000602082840312156139bb57600080fd5b60006139c984828501613596565b91505092915050565b6000602082840312156139e457600080fd5b60006139f2848285016135c0565b91505092915050565b600060208284031215613a0d57600080fd5b6000613a1b848285016135d5565b91505092915050565b600060208284031215613a3657600080fd5b6000613a44848285016135ea565b91505092915050565b60008060408385031215613a6057600080fd5b600083013567ffffffffffffffff811115613a7a57600080fd5b613a8685828601613629565b925050602083013567ffffffffffffffff811115613aa357600080fd5b613aaf85828601613629565b9150509250929050565b600060208284031215613acb57600080fd5b6000613ad984828501613653565b91505092915050565b600060208284031215613af457600080fd5b6000613b0284828501613668565b91505092915050565b60008060408385031215613b1e57600080fd5b6000613b2c85828601613668565b925050602083013567ffffffffffffffff811115613b4957600080fd5b613b5585828601613542565b9150509250929050565b6000613b6b83836140fa565b60208301905092915050565b613b8081614964565b82525050565b6000613b91826147d8565b613b9b8185614806565b9350613ba6836147b3565b8060005b83811015613bd7578151613bbe8882613b5f565b9750613bc9836147f9565b925050600181019050613baa565b5085935050505092915050565b613bed81614976565b82525050565b613bfc81614982565b82525050565b613c13613c0e82614982565b614b0d565b82525050565b6000613c24826147e3565b613c2e8185614817565b9350613c3e818560208601614a01565b613c4781614c26565b840191505092915050565b6000613c5d826147e3565b613c678185614828565b9350613c77818560208601614a01565b80840191505092915050565b6000613c8e826147ee565b613c988185614833565b9350613ca8818560208601614a01565b613cb181614c26565b840191505092915050565b6000613cc7826147ee565b613cd18185614844565b9350613ce1818560208601614a01565b80840191505092915050565b60008154613cfa81614a34565b613d048186614844565b94506001821660008114613d1f5760018114613d3057613d63565b60ff19831686528186019350613d63565b613d39856147c3565b60005b83811015613d5b57815481890152600182019150602081019050613d3c565b838801955050505b50505092915050565b6000613d79603483614833565b9150613d8482614c44565b604082019050919050565b6000613d9c602883614833565b9150613da782614c93565b604082019050919050565b6000613dbf602b83614833565b9150613dca82614ce2565b604082019050919050565b6000613de2602683614833565b9150613ded82614d31565b604082019050919050565b6000613e05601483614833565b9150613e1082614d80565b602082019050919050565b6000613e28603383614833565b9150613e3382614da9565b604082019050919050565b6000613e4b602983614833565b9150613e5682614df8565b604082019050919050565b6000613e6e601283614833565b9150613e7982614e47565b602082019050919050565b6000613e91601f83614833565b9150613e9c82614e70565b602082019050919050565b6000613eb4602083614833565b9150613ebf82614e99565b602082019050919050565b6000613ed7602583614833565b9150613ee282614ec2565b604082019050919050565b6000613efa603283614833565b9150613f0582614f11565b604082019050919050565b6000613f1d600f83614833565b9150613f2882614f60565b602082019050919050565b6000613f40603883614833565b9150613f4b82614f89565b604082019050919050565b6000613f63602a83614833565b9150613f6e82614fd8565b604082019050919050565b6000613f86601683614833565b9150613f9182615027565b602082019050919050565b6000613fa9602083614833565b9150613fb482615050565b602082019050919050565b6000613fcc602083614833565b9150613fd782615079565b602082019050919050565b6000613fef603083614833565b9150613ffa826150a2565b604082019050919050565b6000614012602f83614833565b915061401d826150f1565b604082019050919050565b6000614035602983614833565b915061404082615140565b604082019050919050565b6000614058602983614833565b91506140638261518f565b604082019050919050565b600061407b602283614833565b9150614086826151de565b604082019050919050565b600061409e602883614833565b91506140a98261522d565b604082019050919050565b60006140c1602183614833565b91506140cc8261527c565b604082019050919050565b60006140e4601c83614833565b91506140ef826152cb565b602082019050919050565b614103816149d8565b82525050565b614112816149d8565b82525050565b60006141248285613c02565b6020820191506141348284613c02565b6020820191508190509392505050565b60006141508284613c52565b915081905092915050565b60006141678284613ced565b915081905092915050565b600061417e8285613ced565b915061418a8284613cbc565b91508190509392505050565b60006020820190506141ab6000830184613b77565b92915050565b600060a0820190506141c66000830188613b77565b6141d36020830187613b77565b81810360408301526141e58186613b86565b905081810360608301526141f98185613b86565b9050818103608083015261420d8184613c19565b90509695505050505050565b600060a08201905061422e6000830188613b77565b61423b6020830187613b77565b6142486040830186614109565b6142556060830185614109565b81810360808301526142678184613c19565b90509695505050505050565b6000602082019050818103600083015261428d8184613b86565b905092915050565b600060408201905081810360008301526142af8185613b86565b905081810360208301526142c38184613b86565b90509392505050565b60006020820190506142e16000830184613be4565b92915050565b60006020820190506142fc6000830184613bf3565b92915050565b6000602082019050818103600083015261431c8184613c83565b905092915050565b6000602082019050818103600083015261433d81613d6c565b9050919050565b6000602082019050818103600083015261435d81613d8f565b9050919050565b6000602082019050818103600083015261437d81613db2565b9050919050565b6000602082019050818103600083015261439d81613dd5565b9050919050565b600060208201905081810360008301526143bd81613df8565b9050919050565b600060208201905081810360008301526143dd81613e1b565b9050919050565b600060208201905081810360008301526143fd81613e3e565b9050919050565b6000602082019050818103600083015261441d81613e61565b9050919050565b6000602082019050818103600083015261443d81613e84565b9050919050565b6000602082019050818103600083015261445d81613ea7565b9050919050565b6000602082019050818103600083015261447d81613eca565b9050919050565b6000602082019050818103600083015261449d81613eed565b9050919050565b600060208201905081810360008301526144bd81613f10565b9050919050565b600060208201905081810360008301526144dd81613f33565b9050919050565b600060208201905081810360008301526144fd81613f56565b9050919050565b6000602082019050818103600083015261451d81613f79565b9050919050565b6000602082019050818103600083015261453d81613f9c565b9050919050565b6000602082019050818103600083015261455d81613fbf565b9050919050565b6000602082019050818103600083015261457d81613fe2565b9050919050565b6000602082019050818103600083015261459d81614005565b9050919050565b600060208201905081810360008301526145bd81614028565b9050919050565b600060208201905081810360008301526145dd8161404b565b9050919050565b600060208201905081810360008301526145fd8161406e565b9050919050565b6000602082019050818103600083015261461d81614091565b9050919050565b6000602082019050818103600083015261463d816140b4565b9050919050565b6000602082019050818103600083015261465d816140d7565b9050919050565b60006020820190506146796000830184614109565b92915050565b60006040820190506146946000830185614109565b6146a16020830184614109565b9392505050565b60006146b26146c3565b90506146be8282614a66565b919050565b6000604051905090565b600067ffffffffffffffff8211156146e8576146e7614bd5565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561471457614713614bd5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147405761473f614bd5565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561476c5761476b614bd5565b5b61477582614c26565b9050602081019050919050565b600067ffffffffffffffff82111561479d5761479c614bd5565b5b6147a682614c26565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061485a826149d8565b9150614865836149d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561489a57614899614b48565b5b828201905092915050565b60006148b0826149d8565b91506148bb836149d8565b9250826148cb576148ca614b77565b5b828204905092915050565b60006148e1826149d8565b91506148ec836149d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561492557614924614b48565b5b828202905092915050565b600061493b826149d8565b9150614946836149d8565b92508282101561495957614958614b48565b5b828203905092915050565b600061496f826149b8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a1f578082015181840152602081019050614a04565b83811115614a2e576000848401525b50505050565b60006002820490506001821680614a4c57607f821691505b60208210811415614a6057614a5f614ba6565b5b50919050565b614a6f82614c26565b810181811067ffffffffffffffff82111715614a8e57614a8d614bd5565b5b80604052505050565b6000614aa2826149d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ad557614ad4614b48565b5b600182019050919050565b6000614aeb826149e2565b915063ffffffff821415614b0257614b01614b48565b5b600182019050919050565b6000819050919050565b6000614b22826149d8565b9150614b2d836149d8565b925082614b3d57614b3c614b77565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614c235760046000803e614c20600051614c37565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f50726573616c65207374696c6c20616374697665000000000000000000000000600082015250565b7f546865207072696365206d75737420626520736d616c6c6572206f722065717560008201527f616c20746f204d41585f4e46545f505249434500000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f50726573616c65206e6f74206163746976650000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f546f6b656e73206e756d62657220746f206d696e742063616e6e6f742065786360008201527f656564206e756d626572206f66204d415820746f6b656e730000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b7f546865207072696365206d7573742062652067726561746572207468616e2030600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135354d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d6178207075626c696360008201527f20737570706c79206f66204e4654730000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f416c6c207075626c696320746f6b656e732068617665206265656e206d696e7460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420646f2074686174206d75636820676976656177617900000000600082015250565b600060443d101561530457615387565b61530c6146c3565b60043d036004823e80513d602482011167ffffffffffffffff82111715615334575050615387565b808201805167ffffffffffffffff8111156153525750505050615387565b80602083010160043d03850181111561536f575050505050615387565b61537e82602001850186614a66565b82955050505050505b90565b61539381614964565b811461539e57600080fd5b50565b6153aa81614976565b81146153b557600080fd5b50565b6153c181614982565b81146153cc57600080fd5b50565b6153d88161498c565b81146153e357600080fd5b50565b6153ef816149d8565b81146153fa57600080fd5b50565b615406816149e2565b811461541157600080fd5b5056fea264697066735822122083b86f881fbcb165455885c369474ef1739913074dd18c3f42a7345d4bea676364736f6c63430008040033
Deployed Bytecode Sourcemap
42795:7010:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20809:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19832:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42844:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48351:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43011:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43408:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44357:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22904:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45516:236;;;;;;;;;;;;;:::i;:::-;;44987:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45919:495;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43205:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47732:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21206:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46576:742;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43582:98;;;;;;;;;;;;;:::i;:::-;;43435:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1362:94;;;;;;;;;;;;;:::i;:::-;;43315:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;711:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44593:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42895:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49016:786;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21803:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43251:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43383:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47410:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43107:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45217:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22186:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43495:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43469:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22426:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48860:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1611:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20809:231;20895:7;20942:1;20923:21;;:7;:21;;;;20915:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21010:9;:13;21020:2;21010:13;;;;;;;;;;;:22;21024:7;21010:22;;;;;;;;;;;;;;;;21003:29;;20809:231;;;;:::o;19832:310::-;19934:4;19986:26;19971:41;;;:11;:41;;;;:110;;;;20044:37;20029:52;;;:11;:52;;;;19971:110;:163;;;;20098:36;20122:11;20098:23;:36::i;:::-;19971:163;19951:183;;19832:310;;;:::o;42844:44::-;;;;;;;;;;;;;;;;;;;:::o;48351:441::-;48486:13;48535:11;;48526:8;:20;48518:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;48615:6;;;;;;;;;;;48610:175;;48669:8;48652:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;48638:41;;;;48610:175;48743:7;48752:19;:8;:17;:19::i;:::-;48726:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48712:61;;48351:441;;;;:::o;43011:30::-;;;;:::o;43408:20::-;;;;;;;;;;;;;:::o;44357:137::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44477:9:::1;44466:8;;:20;;;;;;;;;;;;;;;;;;44357:137:::0;:::o;22904:442::-;23145:12;:10;:12::i;:::-;23137:20;;:4;:20;;;:60;;;;23161:36;23178:4;23184:12;:10;:12::i;:::-;23161:16;:36::i;:::-;23137:60;23115:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23286:52;23309:4;23315:2;23319:3;23324:7;23333:4;23286:22;:52::i;:::-;22904:442;;;;;:::o;45516:236::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45596:12:::1;45611:21;45596:36;;45661:1;45651:7;:11;45643:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;45718:7;:5;:7::i;:::-;45710:25;;:34;45736:7;45710:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;1002:1;45516:236::o:0;44987:158::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45128:9:::1;45110:15;;:27;;;;;;;;;;;;;;;;;;44987:158:::0;:::o;45919:495::-;46039:8;;;;;;;;;;;46031:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;46094:15;;;;;;;;;;;46093:16;46085:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;43148:4;46153:48;46187:13;;46153:29;46169:12;46153:29;;:11;;:15;;:29;;;;:::i;:::-;:33;;:48;;;;:::i;:::-;:66;;46145:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;46304:26;46317:12;46304:26;;:8;;:12;;:26;;;;:::i;:::-;46291:9;:39;;46282:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;46377:29;46382:10;46393:12;46377:4;:29::i;:::-;45919:495;:::o;43205:39::-;43241:3;43205:39;:::o;47732:471::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43194:4:::1;47860:27;47876:3;:10;47860:11;;:15;;:27;;;;:::i;:::-;:37;47852:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;43241:3;47977:29;47995:3;:10;47977:13;;:17;;:29;;;;:::i;:::-;:42;;47969:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;48066:9;48062:80;48085:3;:10;48081:1;:14;48062:80;;;48116:14;48121:3;48125:1;48121:6;;;;;;;;;;;;;;;;;;;;;;48128:1;48116:4;:14::i;:::-;48097:3;;;;;:::i;:::-;;;;48062:80;;;;48166:29;48184:3;:10;48166:13;;:17;;:29;;;;:::i;:::-;48152:13;:43;;;;47732:471:::0;:::o;21206:524::-;21362:16;21423:3;:10;21404:8;:15;:29;21396:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21492:30;21539:8;:15;21525:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21492:63;;21573:9;21568:122;21592:8;:15;21588:1;:19;21568:122;;;21648:30;21658:8;21667:1;21658:11;;;;;;;;;;;;;;;;;;;;;;21671:3;21675:1;21671:6;;;;;;;;;;;;;;;;;;;;;;21648:9;:30::i;:::-;21629:13;21643:1;21629:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;21609:3;;;;:::i;:::-;;;21568:122;;;;21709:13;21702:20;;;21206:524;;;;:::o;46576:742::-;46736:8;;;;;;;;;;;46728:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;46790:15;;;;;;;;;;;46782:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;46847:53;46854:6;46886:10;46870:28;;46862:37;;46847:6;:53::i;:::-;46839:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43148:4;46939:30;46955:13;;46939:11;;:15;;:30;;;;:::i;:::-;:47;46931:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;43148:4;47044:48;47078:13;;47044:29;47060:12;47044:29;;:11;;:15;;:29;;;;:::i;:::-;:33;;:48;;;;:::i;:::-;:66;;47036:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;47195:26;47208:12;47195:26;;:8;;:12;;:26;;;;:::i;:::-;47182:9;:39;;47173:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;47268:29;47273:10;47284:12;47268:4;:29::i;:::-;46576:742;;:::o;43582:98::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43668:4:::1;43659:6;;:13;;;;;;;;;;;;;;;;;;43582:98::o:0;43435:27::-;;;;;;;;;;;;;:::o;1362:94::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1427:21:::1;1445:1;1427:9;:21::i;:::-;1362:94::o:0;43315:49::-;;;;:::o;711:87::-;757:7;784:6;;;;;;;;;;;777:13;;711:87;:::o;44593:288::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44710:13:::1;;44700:6;:23;;44692:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44807:1;44798:6;:10;44790:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44867:6;44856:8;:17;;;;44593:288:::0;:::o;42895:38::-;;;;;;;;;;;;;;;;;;;:::o;49016:786::-;49091:4;49108:20;49131:4;49108:27;;49153:9;49148:531;49172:5;:12;49168:1;:16;49148:531;;;49206:20;49229:5;49235:1;49229:8;;;;;;;;;;;;;;;;;;;;;;49206:31;;49286:12;49270;:28;49266:402;;49413:52;49437:12;49451;49420:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49413:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49398:67;;49266:402;;;49600:52;49624:12;49638;49607:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49600:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49585:67;;49266:402;49148:531;49186:3;;;;;:::i;:::-;;;;49148:531;;;;49790:4;;49774:12;:20;49767:27;;;49016:786;;;;:::o;21803:311::-;21922:8;21906:24;;:12;:10;:12::i;:::-;:24;;;;21898:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22034:8;21989:18;:32;22008:12;:10;:12::i;:::-;21989:32;;;;;;;;;;;;;;;:42;22022:8;21989:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22087:8;22058:48;;22073:12;:10;:12::i;:::-;22058:48;;;22097:8;22058:48;;;;;;:::i;:::-;;;;;;;;21803:311;;:::o;43251:44::-;;;;:::o;43383:18::-;;;;;;;;;;;;;:::o;47410:230::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43194:4:::1;47521:18;47537:1;47521:11;;:15;;:18;;;;:::i;:::-;:28;47513:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47621:11;47626:3;47630:1;47621:4;:11::i;:::-;47410:230:::0;:::o;43107:45::-;43148:4;43107:45;:::o;45217:197::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45372:9:::1;45361:8;:20;;;;;;;;;;;;:::i;:::-;;45402:4;45392:7;:14;;;;;;;;;;;;:::i;:::-;;45217:197:::0;;:::o;22186:168::-;22285:4;22309:18;:27;22328:7;22309:27;;;;;;;;;;;;;;;:37;22337:8;22309:37;;;;;;;;;;;;;;;;;;;;;;;;;22302:44;;22186:168;;;;:::o;43495:28::-;;;;:::o;43469:19::-;;;;:::o;22426:401::-;22642:12;:10;:12::i;:::-;22634:20;;:4;:20;;;:60;;;;22658:36;22675:4;22681:12;:10;:12::i;:::-;22658:16;:36::i;:::-;22634:60;22612:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22774:45;22792:4;22798:2;22802;22806:6;22814:4;22774:17;:45::i;:::-;22426:401;;;;;:::o;48860:91::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48937:5:::1;48929:14;;48922:4;:21;;;;48860:91:::0;:::o;1611:192::-;942:12;:10;:12::i;:::-;931:23;;:7;:5;:7::i;:::-;:23;;;923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1720:1:::1;1700:22;;:8;:22;;;;1692:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1776:19;1786:8;1776:9;:19::i;:::-;1611:192:::0;:::o;11642:157::-;11727:4;11766:25;11751:40;;;:11;:40;;;;11744:47;;11642:157;;;:::o;41038:723::-;41094:13;41324:1;41315:5;:10;41311:53;;;41342:10;;;;;;;;;;;;;;;;;;;;;41311:53;41374:12;41389:5;41374:20;;41405:14;41430:78;41445:1;41437:4;:9;41430:78;;41463:8;;;;;:::i;:::-;;;;41494:2;41486:10;;;;;:::i;:::-;;;41430:78;;;41518:19;41550:6;41540:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41518:39;;41568:154;41584:1;41575:5;:10;41568:154;;41612:1;41602:11;;;;;:::i;:::-;;;41679:2;41671:5;:10;;;;:::i;:::-;41658:2;:24;;;;:::i;:::-;41645:39;;41628:6;41635;41628:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;41708:2;41699:11;;;;;:::i;:::-;;;41568:154;;;41746:6;41732:21;;;;;41038:723;;;;:::o;94:98::-;147:7;174:10;167:17;;94:98;:::o;24988:1074::-;25215:7;:14;25201:3;:10;:28;25193:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25307:1;25293:16;;:2;:16;;;;25285:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25364:16;25383:12;:10;:12::i;:::-;25364:31;;25408:60;25429:8;25439:4;25445:2;25449:3;25454:7;25463:4;25408:20;:60::i;:::-;25486:9;25481:421;25505:3;:10;25501:1;:14;25481:421;;;25537:10;25550:3;25554:1;25550:6;;;;;;;;;;;;;;;;;;;;;;25537:19;;25571:14;25588:7;25596:1;25588:10;;;;;;;;;;;;;;;;;;;;;;25571:27;;25615:19;25637:9;:13;25647:2;25637:13;;;;;;;;;;;:19;25651:4;25637:19;;;;;;;;;;;;;;;;25615:41;;25694:6;25679:11;:21;;25671:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25827:6;25813:11;:20;25791:9;:13;25801:2;25791:13;;;;;;;;;;;:19;25805:4;25791:19;;;;;;;;;;;;;;;:42;;;;25884:6;25863:9;:13;25873:2;25863:13;;;;;;;;;;;:17;25877:2;25863:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25481:421;;;25517:3;;;;:::i;:::-;;;25481:421;;;;25949:2;25919:47;;25943:4;25919:47;;25933:8;25919:47;;;25953:3;25958:7;25919:47;;;;;;;:::i;:::-;;;;;;;;25979:75;26015:8;26025:4;26031:2;26035:3;26040:7;26049:4;25979:35;:75::i;:::-;24988:1074;;;;;;:::o;36647:98::-;36705:7;36736:1;36732;:5;;;;:::i;:::-;36725:12;;36647:98;;;;:::o;37028:::-;37086:7;37117:1;37113;:5;;;;:::i;:::-;37106:12;;37028:98;;;;:::o;37385:::-;37443:7;37474:1;37470;:5;;;;:::i;:::-;37463:12;;37385:98;;;;:::o;43738:519::-;43810:1;43802:5;:9;;;43798:419;;;43828:20;43873:5;43865:14;;43851:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43828:52;;43895:24;43944:5;43936:14;;43922:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43895:56;;43973:8;43968:127;43991:5;43987:9;;:1;:9;;;43968:127;;;44045:1;44031:15;;:11;;:15;;;;:::i;:::-;44022:3;44026:1;44022:6;;;;;;;;;;;;;;;;;;;;;;;:24;;;;;44078:1;44065:7;44073:1;44065:10;;;;;;;;;;;;;;;;;;;;;;;:14;;;;;43998:3;;;;;:::i;:::-;;;;43968:127;;;;44111:32;44122:2;44126:3;44131:7;44111:32;;;;;;;;;;;;:10;:32::i;:::-;43798:419;;;;;44176:29;44182:2;44186:11;;44199:1;44176:29;;;;;;;;;;;;:5;:29::i;:::-;43798:419;44244:5;44229:20;;:11;;:20;;;;;;;:::i;:::-;;;;;;;;43738:519;;:::o;1811:173::-;1867:16;1886:6;;;;;;;;;;;1867:25;;1912:8;1903:6;;:17;;;;;;;;;;;;;;;;;;1967:8;1936:40;;1957:8;1936:40;;;;;;;;;;;;1811:173;;:::o;23810:820::-;24012:1;23998:16;;:2;:16;;;;23990:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24069:16;24088:12;:10;:12::i;:::-;24069:31;;24113:96;24134:8;24144:4;24150:2;24154:21;24172:2;24154:17;:21::i;:::-;24177:25;24195:6;24177:17;:25::i;:::-;24204:4;24113:20;:96::i;:::-;24222:19;24244:9;:13;24254:2;24244:13;;;;;;;;;;;:19;24258:4;24244:19;;;;;;;;;;;;;;;;24222:41;;24297:6;24282:11;:21;;24274:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24422:6;24408:11;:20;24386:9;:13;24396:2;24386:13;;;;;;;;;;;:19;24400:4;24386:19;;;;;;;;;;;;;;;:42;;;;24471:6;24450:9;:13;24460:2;24450:13;;;;;;;;;;;:17;24464:2;24450:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24526:2;24495:46;;24520:4;24495:46;;24510:8;24495:46;;;24530:2;24534:6;24495:46;;;;;;;:::i;:::-;;;;;;;;24554:68;24585:8;24595:4;24601:2;24605;24609:6;24617:4;24554:30;:68::i;:::-;23810:820;;;;;;;:::o;32096:221::-;;;;;;;:::o;33077:813::-;33317:15;:2;:13;;;:15::i;:::-;33313:570;;;33370:2;33353:43;;;33397:8;33407:4;33413:3;33418:7;33427:4;33353:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33349:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33745:6;33738:14;;;;;;;;;;;:::i;:::-;;;;;;;;33349:523;;;33794:62;;;;;;;;;;:::i;:::-;;;;;;;;33349:523;33526:48;;;33514:60;;;:8;:60;;;;33510:159;;33599:50;;;;;;;;;;:::i;:::-;;;;;;;;33510:159;33433:251;33313:570;33077:813;;;;;;:::o;28350:735::-;28542:1;28528:16;;:2;:16;;;;28520:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28615:7;:14;28601:3;:10;:28;28593:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28687:16;28706:12;:10;:12::i;:::-;28687:31;;28731:66;28752:8;28770:1;28774:2;28778:3;28783:7;28792:4;28731:20;:66::i;:::-;28815:9;28810:103;28834:3;:10;28830:1;:14;28810:103;;;28891:7;28899:1;28891:10;;;;;;;;;;;;;;;;;;;;;;28866:9;:17;28876:3;28880:1;28876:6;;;;;;;;;;;;;;;;;;;;;;28866:17;;;;;;;;;;;:21;28884:2;28866:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;28846:3;;;;;:::i;:::-;;;;28810:103;;;;28966:2;28930:53;;28962:1;28930:53;;28944:8;28930:53;;;28970:3;28975:7;28930:53;;;;;;;:::i;:::-;;;;;;;;28996:81;29032:8;29050:1;29054:2;29058:3;29063:7;29072:4;28996:35;:81::i;:::-;28350:735;;;;;:::o;27395:599::-;27572:1;27553:21;;:7;:21;;;;27545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27625:16;27644:12;:10;:12::i;:::-;27625:31;;27669:107;27690:8;27708:1;27712:7;27721:21;27739:2;27721:17;:21::i;:::-;27744:25;27762:6;27744:17;:25::i;:::-;27771:4;27669:20;:107::i;:::-;27815:6;27789:9;:13;27799:2;27789:13;;;;;;;;;;;:22;27803:7;27789:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;27874:7;27837:57;;27870:1;27837:57;;27852:8;27837:57;;;27883:2;27887:6;27837:57;;;;;;;:::i;:::-;;;;;;;;27907:79;27938:8;27956:1;27960:7;27969:2;27973:6;27981:4;27907:30;:79::i;:::-;27395:599;;;;;:::o;33898:198::-;33964:16;33993:22;34032:1;34018:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33993:41;;34056:7;34045:5;34051:1;34045:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;34083:5;34076:12;;;33898:198;;;:::o;32325:744::-;32540:15;:2;:13;;;:15::i;:::-;32536:526;;;32593:2;32576:38;;;32615:8;32625:4;32631:2;32635:6;32643:4;32576:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32572:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32924:6;32917:14;;;;;;;;;;;:::i;:::-;;;;;;;;32572:479;;;32973:62;;;;;;;;;;:::i;:::-;;;;;;;;32572:479;32710:43;;;32698:55;;;:8;:55;;;;32694:154;;32778:50;;;;;;;;;;:::i;:::-;;;;;;;;32694:154;32649:214;32536:526;32325:744;;;;;;:::o;2726:387::-;2786:4;2994:12;3061:7;3049:20;3041:28;;3104:1;3097:4;:8;3090:15;;;2726:387;;;:::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;1380:655::-;1476:5;1501:81;1517:64;1574:6;1517:64;:::i;:::-;1501:81;:::i;:::-;1492:90;;1602:5;1631:6;1624:5;1617:21;1665:4;1658:5;1654:16;1647:23;;1691:6;1741:3;1733:4;1725:6;1721:17;1716:3;1712:27;1709:36;1706:2;;;1770:1;1767;1760:12;1706:2;1806:1;1791:238;1816:6;1813:1;1810:13;1791:238;;;1884:3;1913:37;1946:3;1934:10;1913:37;:::i;:::-;1908:3;1901:50;1980:4;1975:3;1971:14;1964:21;;2014:4;2009:3;2005:14;1998:21;;1851:178;1838:1;1835;1831:9;1826:14;;1791:238;;;1795:14;1482:553;;;;;;;:::o;2041:343::-;2118:5;2143:65;2159:48;2200:6;2159:48;:::i;:::-;2143:65;:::i;:::-;2134:74;;2231:6;2224:5;2217:21;2269:4;2262:5;2258:16;2307:3;2298:6;2293:3;2289:16;2286:25;2283:2;;;2324:1;2321;2314:12;2283:2;2337:41;2371:6;2366:3;2361;2337:41;:::i;:::-;2124:260;;;;;;:::o;2390:345::-;2468:5;2493:66;2509:49;2551:6;2509:49;:::i;:::-;2493:66;:::i;:::-;2484:75;;2582:6;2575:5;2568:21;2620:4;2613:5;2609:16;2658:3;2649:6;2644:3;2640:16;2637:25;2634:2;;;2675:1;2672;2665:12;2634:2;2688:41;2722:6;2717:3;2712;2688:41;:::i;:::-;2474:261;;;;;;:::o;2741:139::-;2787:5;2825:6;2812:20;2803:29;;2841:33;2868:5;2841:33;:::i;:::-;2793:87;;;;:::o;2903:303::-;2974:5;3023:3;3016:4;3008:6;3004:17;3000:27;2990:2;;3041:1;3038;3031:12;2990:2;3081:6;3068:20;3106:94;3196:3;3188:6;3181:4;3173:6;3169:17;3106:94;:::i;:::-;3097:103;;2980:226;;;;;:::o;3229:303::-;3300:5;3349:3;3342:4;3334:6;3330:17;3326:27;3316:2;;3367:1;3364;3357:12;3316:2;3407:6;3394:20;3432:94;3522:3;3514:6;3507:4;3499:6;3495:17;3432:94;:::i;:::-;3423:103;;3306:226;;;;;:::o;3555:303::-;3626:5;3675:3;3668:4;3660:6;3656:17;3652:27;3642:2;;3693:1;3690;3683:12;3642:2;3733:6;3720:20;3758:94;3848:3;3840:6;3833:4;3825:6;3821:17;3758:94;:::i;:::-;3749:103;;3632:226;;;;;:::o;3864:133::-;3907:5;3945:6;3932:20;3923:29;;3961:30;3985:5;3961:30;:::i;:::-;3913:84;;;;:::o;4003:139::-;4049:5;4087:6;4074:20;4065:29;;4103:33;4130:5;4103:33;:::i;:::-;4055:87;;;;:::o;4148:143::-;4205:5;4236:6;4230:13;4221:22;;4252:33;4279:5;4252:33;:::i;:::-;4211:80;;;;:::o;4297:137::-;4342:5;4380:6;4367:20;4358:29;;4396:32;4422:5;4396:32;:::i;:::-;4348:86;;;;:::o;4440:141::-;4496:5;4527:6;4521:13;4512:22;;4543:32;4569:5;4543:32;:::i;:::-;4502:79;;;;:::o;4600:271::-;4655:5;4704:3;4697:4;4689:6;4685:17;4681:27;4671:2;;4722:1;4719;4712:12;4671:2;4762:6;4749:20;4787:78;4861:3;4853:6;4846:4;4838:6;4834:17;4787:78;:::i;:::-;4778:87;;4661:210;;;;;:::o;4891:273::-;4947:5;4996:3;4989:4;4981:6;4977:17;4973:27;4963:2;;5014:1;5011;5004:12;4963:2;5054:6;5041:20;5079:79;5154:3;5146:6;5139:4;5131:6;5127:17;5079:79;:::i;:::-;5070:88;;4953:211;;;;;:::o;5170:139::-;5216:5;5254:6;5241:20;5232:29;;5270:33;5297:5;5270:33;:::i;:::-;5222:87;;;;:::o;5315:137::-;5360:5;5398:6;5385:20;5376:29;;5414:32;5440:5;5414:32;:::i;:::-;5366:86;;;;:::o;5458:262::-;5517:6;5566:2;5554:9;5545:7;5541:23;5537:32;5534:2;;;5582:1;5579;5572:12;5534:2;5625:1;5650:53;5695:7;5686:6;5675:9;5671:22;5650:53;:::i;:::-;5640:63;;5596:117;5524:196;;;;:::o;5726:407::-;5794:6;5802;5851:2;5839:9;5830:7;5826:23;5822:32;5819:2;;;5867:1;5864;5857:12;5819:2;5910:1;5935:53;5980:7;5971:6;5960:9;5956:22;5935:53;:::i;:::-;5925:63;;5881:117;6037:2;6063:53;6108:7;6099:6;6088:9;6084:22;6063:53;:::i;:::-;6053:63;;6008:118;5809:324;;;;;:::o;6139:1241::-;6293:6;6301;6309;6317;6325;6374:3;6362:9;6353:7;6349:23;6345:33;6342:2;;;6391:1;6388;6381:12;6342:2;6434:1;6459:53;6504:7;6495:6;6484:9;6480:22;6459:53;:::i;:::-;6449:63;;6405:117;6561:2;6587:53;6632:7;6623:6;6612:9;6608:22;6587:53;:::i;:::-;6577:63;;6532:118;6717:2;6706:9;6702:18;6689:32;6748:18;6740:6;6737:30;6734:2;;;6780:1;6777;6770:12;6734:2;6808:78;6878:7;6869:6;6858:9;6854:22;6808:78;:::i;:::-;6798:88;;6660:236;6963:2;6952:9;6948:18;6935:32;6994:18;6986:6;6983:30;6980:2;;;7026:1;7023;7016:12;6980:2;7054:78;7124:7;7115:6;7104:9;7100:22;7054:78;:::i;:::-;7044:88;;6906:236;7209:3;7198:9;7194:19;7181:33;7241:18;7233:6;7230:30;7227:2;;;7273:1;7270;7263:12;7227:2;7301:62;7355:7;7346:6;7335:9;7331:22;7301:62;:::i;:::-;7291:72;;7152:221;6332:1048;;;;;;;;:::o;7386:955::-;7490:6;7498;7506;7514;7522;7571:3;7559:9;7550:7;7546:23;7542:33;7539:2;;;7588:1;7585;7578:12;7539:2;7631:1;7656:53;7701:7;7692:6;7681:9;7677:22;7656:53;:::i;:::-;7646:63;;7602:117;7758:2;7784:53;7829:7;7820:6;7809:9;7805:22;7784:53;:::i;:::-;7774:63;;7729:118;7886:2;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7857:118;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;8170:3;8159:9;8155:19;8142:33;8202:18;8194:6;8191:30;8188:2;;;8234:1;8231;8224:12;8188:2;8262:62;8316:7;8307:6;8296:9;8292:22;8262:62;:::i;:::-;8252:72;;8113:221;7529:812;;;;;;;;:::o;8347:401::-;8412:6;8420;8469:2;8457:9;8448:7;8444:23;8440:32;8437:2;;;8485:1;8482;8475:12;8437:2;8528:1;8553:53;8598:7;8589:6;8578:9;8574:22;8553:53;:::i;:::-;8543:63;;8499:117;8655:2;8681:50;8723:7;8714:6;8703:9;8699:22;8681:50;:::i;:::-;8671:60;;8626:115;8427:321;;;;;:::o;8754:407::-;8822:6;8830;8879:2;8867:9;8858:7;8854:23;8850:32;8847:2;;;8895:1;8892;8885:12;8847:2;8938:1;8963:53;9008:7;8999:6;8988:9;8984:22;8963:53;:::i;:::-;8953:63;;8909:117;9065:2;9091:53;9136:7;9127:6;9116:9;9112:22;9091:53;:::i;:::-;9081:63;;9036:118;8837:324;;;;;:::o;9167:405::-;9251:6;9300:2;9288:9;9279:7;9275:23;9271:32;9268:2;;;9316:1;9313;9306:12;9268:2;9387:1;9376:9;9372:17;9359:31;9417:18;9409:6;9406:30;9403:2;;;9449:1;9446;9439:12;9403:2;9477:78;9547:7;9538:6;9527:9;9523:22;9477:78;:::i;:::-;9467:88;;9330:235;9258:314;;;;:::o;9578:693::-;9696:6;9704;9753:2;9741:9;9732:7;9728:23;9724:32;9721:2;;;9769:1;9766;9759:12;9721:2;9840:1;9829:9;9825:17;9812:31;9870:18;9862:6;9859:30;9856:2;;;9902:1;9899;9892:12;9856:2;9930:78;10000:7;9991:6;9980:9;9976:22;9930:78;:::i;:::-;9920:88;;9783:235;10085:2;10074:9;10070:18;10057:32;10116:18;10108:6;10105:30;10102:2;;;10148:1;10145;10138:12;10102:2;10176:78;10246:7;10237:6;10226:9;10222:22;10176:78;:::i;:::-;10166:88;;10028:236;9711:560;;;;;:::o;10277:550::-;10370:6;10378;10427:2;10415:9;10406:7;10402:23;10398:32;10395:2;;;10443:1;10440;10433:12;10395:2;10514:1;10503:9;10499:17;10486:31;10544:18;10536:6;10533:30;10530:2;;;10576:1;10573;10566:12;10530:2;10604:78;10674:7;10665:6;10654:9;10650:22;10604:78;:::i;:::-;10594:88;;10457:235;10731:2;10757:53;10802:7;10793:6;10782:9;10778:22;10757:53;:::i;:::-;10747:63;;10702:118;10385:442;;;;;:::o;10833:256::-;10889:6;10938:2;10926:9;10917:7;10913:23;10909:32;10906:2;;;10954:1;10951;10944:12;10906:2;10997:1;11022:50;11064:7;11055:6;11044:9;11040:22;11022:50;:::i;:::-;11012:60;;10968:114;10896:193;;;;:::o;11095:284::-;11165:6;11214:2;11202:9;11193:7;11189:23;11185:32;11182:2;;;11230:1;11227;11220:12;11182:2;11273:1;11298:64;11354:7;11345:6;11334:9;11330:22;11298:64;:::i;:::-;11288:74;;11244:128;11172:207;;;;:::o;11385:260::-;11443:6;11492:2;11480:9;11471:7;11467:23;11463:32;11460:2;;;11508:1;11505;11498:12;11460:2;11551:1;11576:52;11620:7;11611:6;11600:9;11596:22;11576:52;:::i;:::-;11566:62;;11522:116;11450:195;;;;:::o;11651:282::-;11720:6;11769:2;11757:9;11748:7;11744:23;11740:32;11737:2;;;11785:1;11782;11775:12;11737:2;11828:1;11853:63;11908:7;11899:6;11888:9;11884:22;11853:63;:::i;:::-;11843:73;;11799:127;11727:206;;;;:::o;11939:633::-;12027:6;12035;12084:2;12072:9;12063:7;12059:23;12055:32;12052:2;;;12100:1;12097;12090:12;12052:2;12171:1;12160:9;12156:17;12143:31;12201:18;12193:6;12190:30;12187:2;;;12233:1;12230;12223:12;12187:2;12261:63;12316:7;12307:6;12296:9;12292:22;12261:63;:::i;:::-;12251:73;;12114:220;12401:2;12390:9;12386:18;12373:32;12432:18;12424:6;12421:30;12418:2;;;12464:1;12461;12454:12;12418:2;12492:63;12547:7;12538:6;12527:9;12523:22;12492:63;:::i;:::-;12482:73;;12344:221;12042:530;;;;;:::o;12578:262::-;12637:6;12686:2;12674:9;12665:7;12661:23;12657:32;12654:2;;;12702:1;12699;12692:12;12654:2;12745:1;12770:53;12815:7;12806:6;12795:9;12791:22;12770:53;:::i;:::-;12760:63;;12716:117;12644:196;;;;:::o;12846:260::-;12904:6;12953:2;12941:9;12932:7;12928:23;12924:32;12921:2;;;12969:1;12966;12959:12;12921:2;13012:1;13037:52;13081:7;13072:6;13061:9;13057:22;13037:52;:::i;:::-;13027:62;;12983:116;12911:195;;;;:::o;13112:548::-;13204:6;13212;13261:2;13249:9;13240:7;13236:23;13232:32;13229:2;;;13277:1;13274;13267:12;13229:2;13320:1;13345:52;13389:7;13380:6;13369:9;13365:22;13345:52;:::i;:::-;13335:62;;13291:116;13474:2;13463:9;13459:18;13446:32;13505:18;13497:6;13494:30;13491:2;;;13537:1;13534;13527:12;13491:2;13565:78;13635:7;13626:6;13615:9;13611:22;13565:78;:::i;:::-;13555:88;;13417:236;13219:441;;;;;:::o;13666:179::-;13735:10;13756:46;13798:3;13790:6;13756:46;:::i;:::-;13834:4;13829:3;13825:14;13811:28;;13746:99;;;;:::o;13851:118::-;13938:24;13956:5;13938:24;:::i;:::-;13933:3;13926:37;13916:53;;:::o;14005:732::-;14124:3;14153:54;14201:5;14153:54;:::i;:::-;14223:86;14302:6;14297:3;14223:86;:::i;:::-;14216:93;;14333:56;14383:5;14333:56;:::i;:::-;14412:7;14443:1;14428:284;14453:6;14450:1;14447:13;14428:284;;;14529:6;14523:13;14556:63;14615:3;14600:13;14556:63;:::i;:::-;14549:70;;14642:60;14695:6;14642:60;:::i;:::-;14632:70;;14488:224;14475:1;14472;14468:9;14463:14;;14428:284;;;14432:14;14728:3;14721:10;;14129:608;;;;;;;:::o;14743:109::-;14824:21;14839:5;14824:21;:::i;:::-;14819:3;14812:34;14802:50;;:::o;14858:118::-;14945:24;14963:5;14945:24;:::i;:::-;14940:3;14933:37;14923:53;;:::o;14982:157::-;15087:45;15107:24;15125:5;15107:24;:::i;:::-;15087:45;:::i;:::-;15082:3;15075:58;15065:74;;:::o;15145:360::-;15231:3;15259:38;15291:5;15259:38;:::i;:::-;15313:70;15376:6;15371:3;15313:70;:::i;:::-;15306:77;;15392:52;15437:6;15432:3;15425:4;15418:5;15414:16;15392:52;:::i;:::-;15469:29;15491:6;15469:29;:::i;:::-;15464:3;15460:39;15453:46;;15235:270;;;;;:::o;15511:373::-;15615:3;15643:38;15675:5;15643:38;:::i;:::-;15697:88;15778:6;15773:3;15697:88;:::i;:::-;15690:95;;15794:52;15839:6;15834:3;15827:4;15820:5;15816:16;15794:52;:::i;:::-;15871:6;15866:3;15862:16;15855:23;;15619:265;;;;;:::o;15890:364::-;15978:3;16006:39;16039:5;16006:39;:::i;:::-;16061:71;16125:6;16120:3;16061:71;:::i;:::-;16054:78;;16141:52;16186:6;16181:3;16174:4;16167:5;16163:16;16141:52;:::i;:::-;16218:29;16240:6;16218:29;:::i;:::-;16213:3;16209:39;16202:46;;15982:272;;;;;:::o;16260:377::-;16366:3;16394:39;16427:5;16394:39;:::i;:::-;16449:89;16531:6;16526:3;16449:89;:::i;:::-;16442:96;;16547:52;16592:6;16587:3;16580:4;16573:5;16569:16;16547:52;:::i;:::-;16624:6;16619:3;16615:16;16608:23;;16370:267;;;;;:::o;16667:845::-;16770:3;16807:5;16801:12;16836:36;16862:9;16836:36;:::i;:::-;16888:89;16970:6;16965:3;16888:89;:::i;:::-;16881:96;;17008:1;16997:9;16993:17;17024:1;17019:137;;;;17170:1;17165:341;;;;16986:520;;17019:137;17103:4;17099:9;17088;17084:25;17079:3;17072:38;17139:6;17134:3;17130:16;17123:23;;17019:137;;17165:341;17232:38;17264:5;17232:38;:::i;:::-;17292:1;17306:154;17320:6;17317:1;17314:13;17306:154;;;17394:7;17388:14;17384:1;17379:3;17375:11;17368:35;17444:1;17435:7;17431:15;17420:26;;17342:4;17339:1;17335:12;17330:17;;17306:154;;;17489:6;17484:3;17480:16;17473:23;;17172:334;;16986:520;;16774:738;;;;;;:::o;17518:366::-;17660:3;17681:67;17745:2;17740:3;17681:67;:::i;:::-;17674:74;;17757:93;17846:3;17757:93;:::i;:::-;17875:2;17870:3;17866:12;17859:19;;17664:220;;;:::o;17890:366::-;18032:3;18053:67;18117:2;18112:3;18053:67;:::i;:::-;18046:74;;18129:93;18218:3;18129:93;:::i;:::-;18247:2;18242:3;18238:12;18231:19;;18036:220;;;:::o;18262:366::-;18404:3;18425:67;18489:2;18484:3;18425:67;:::i;:::-;18418:74;;18501:93;18590:3;18501:93;:::i;:::-;18619:2;18614:3;18610:12;18603:19;;18408:220;;;:::o;18634:366::-;18776:3;18797:67;18861:2;18856:3;18797:67;:::i;:::-;18790:74;;18873:93;18962:3;18873:93;:::i;:::-;18991:2;18986:3;18982:12;18975:19;;18780:220;;;:::o;19006:366::-;19148:3;19169:67;19233:2;19228:3;19169:67;:::i;:::-;19162:74;;19245:93;19334:3;19245:93;:::i;:::-;19363:2;19358:3;19354:12;19347:19;;19152:220;;;:::o;19378:366::-;19520:3;19541:67;19605:2;19600:3;19541:67;:::i;:::-;19534:74;;19617:93;19706:3;19617:93;:::i;:::-;19735:2;19730:3;19726:12;19719:19;;19524:220;;;:::o;19750:366::-;19892:3;19913:67;19977:2;19972:3;19913:67;:::i;:::-;19906:74;;19989:93;20078:3;19989:93;:::i;:::-;20107:2;20102:3;20098:12;20091:19;;19896:220;;;:::o;20122:366::-;20264:3;20285:67;20349:2;20344:3;20285:67;:::i;:::-;20278:74;;20361:93;20450:3;20361:93;:::i;:::-;20479:2;20474:3;20470:12;20463:19;;20268:220;;;:::o;20494:366::-;20636:3;20657:67;20721:2;20716:3;20657:67;:::i;:::-;20650:74;;20733:93;20822:3;20733:93;:::i;:::-;20851:2;20846:3;20842:12;20835:19;;20640:220;;;:::o;20866:366::-;21008:3;21029:67;21093:2;21088:3;21029:67;:::i;:::-;21022:74;;21105:93;21194:3;21105:93;:::i;:::-;21223:2;21218:3;21214:12;21207:19;;21012:220;;;:::o;21238:366::-;21380:3;21401:67;21465:2;21460:3;21401:67;:::i;:::-;21394:74;;21477:93;21566:3;21477:93;:::i;:::-;21595:2;21590:3;21586:12;21579:19;;21384:220;;;:::o;21610:366::-;21752:3;21773:67;21837:2;21832:3;21773:67;:::i;:::-;21766:74;;21849:93;21938:3;21849:93;:::i;:::-;21967:2;21962:3;21958:12;21951:19;;21756:220;;;:::o;21982:366::-;22124:3;22145:67;22209:2;22204:3;22145:67;:::i;:::-;22138:74;;22221:93;22310:3;22221:93;:::i;:::-;22339:2;22334:3;22330:12;22323:19;;22128:220;;;:::o;22354:366::-;22496:3;22517:67;22581:2;22576:3;22517:67;:::i;:::-;22510:74;;22593:93;22682:3;22593:93;:::i;:::-;22711:2;22706:3;22702:12;22695:19;;22500:220;;;:::o;22726:366::-;22868:3;22889:67;22953:2;22948:3;22889:67;:::i;:::-;22882:74;;22965:93;23054:3;22965:93;:::i;:::-;23083:2;23078:3;23074:12;23067:19;;22872:220;;;:::o;23098:366::-;23240:3;23261:67;23325:2;23320:3;23261:67;:::i;:::-;23254:74;;23337:93;23426:3;23337:93;:::i;:::-;23455:2;23450:3;23446:12;23439:19;;23244:220;;;:::o;23470:366::-;23612:3;23633:67;23697:2;23692:3;23633:67;:::i;:::-;23626:74;;23709:93;23798:3;23709:93;:::i;:::-;23827:2;23822:3;23818:12;23811:19;;23616:220;;;:::o;23842:366::-;23984:3;24005:67;24069:2;24064:3;24005:67;:::i;:::-;23998:74;;24081:93;24170:3;24081:93;:::i;:::-;24199:2;24194:3;24190:12;24183:19;;23988:220;;;:::o;24214:366::-;24356:3;24377:67;24441:2;24436:3;24377:67;:::i;:::-;24370:74;;24453:93;24542:3;24453:93;:::i;:::-;24571:2;24566:3;24562:12;24555:19;;24360:220;;;:::o;24586:366::-;24728:3;24749:67;24813:2;24808:3;24749:67;:::i;:::-;24742:74;;24825:93;24914:3;24825:93;:::i;:::-;24943:2;24938:3;24934:12;24927:19;;24732:220;;;:::o;24958:366::-;25100:3;25121:67;25185:2;25180:3;25121:67;:::i;:::-;25114:74;;25197:93;25286:3;25197:93;:::i;:::-;25315:2;25310:3;25306:12;25299:19;;25104:220;;;:::o;25330:366::-;25472:3;25493:67;25557:2;25552:3;25493:67;:::i;:::-;25486:74;;25569:93;25658:3;25569:93;:::i;:::-;25687:2;25682:3;25678:12;25671:19;;25476:220;;;:::o;25702:366::-;25844:3;25865:67;25929:2;25924:3;25865:67;:::i;:::-;25858:74;;25941:93;26030:3;25941:93;:::i;:::-;26059:2;26054:3;26050:12;26043:19;;25848:220;;;:::o;26074:366::-;26216:3;26237:67;26301:2;26296:3;26237:67;:::i;:::-;26230:74;;26313:93;26402:3;26313:93;:::i;:::-;26431:2;26426:3;26422:12;26415:19;;26220:220;;;:::o;26446:366::-;26588:3;26609:67;26673:2;26668:3;26609:67;:::i;:::-;26602:74;;26685:93;26774:3;26685:93;:::i;:::-;26803:2;26798:3;26794:12;26787:19;;26592:220;;;:::o;26818:366::-;26960:3;26981:67;27045:2;27040:3;26981:67;:::i;:::-;26974:74;;27057:93;27146:3;27057:93;:::i;:::-;27175:2;27170:3;27166:12;27159:19;;26964:220;;;:::o;27190:108::-;27267:24;27285:5;27267:24;:::i;:::-;27262:3;27255:37;27245:53;;:::o;27304:118::-;27391:24;27409:5;27391:24;:::i;:::-;27386:3;27379:37;27369:53;;:::o;27428:397::-;27568:3;27583:75;27654:3;27645:6;27583:75;:::i;:::-;27683:2;27678:3;27674:12;27667:19;;27696:75;27767:3;27758:6;27696:75;:::i;:::-;27796:2;27791:3;27787:12;27780:19;;27816:3;27809:10;;27572:253;;;;;:::o;27831:271::-;27961:3;27983:93;28072:3;28063:6;27983:93;:::i;:::-;27976:100;;28093:3;28086:10;;27965:137;;;;:::o;28108:269::-;28237:3;28259:92;28347:3;28338:6;28259:92;:::i;:::-;28252:99;;28368:3;28361:10;;28241:136;;;;:::o;28383:429::-;28560:3;28582:92;28670:3;28661:6;28582:92;:::i;:::-;28575:99;;28691:95;28782:3;28773:6;28691:95;:::i;:::-;28684:102;;28803:3;28796:10;;28564:248;;;;;:::o;28818:222::-;28911:4;28949:2;28938:9;28934:18;28926:26;;28962:71;29030:1;29019:9;29015:17;29006:6;28962:71;:::i;:::-;28916:124;;;;:::o;29046:1053::-;29369:4;29407:3;29396:9;29392:19;29384:27;;29421:71;29489:1;29478:9;29474:17;29465:6;29421:71;:::i;:::-;29502:72;29570:2;29559:9;29555:18;29546:6;29502:72;:::i;:::-;29621:9;29615:4;29611:20;29606:2;29595:9;29591:18;29584:48;29649:108;29752:4;29743:6;29649:108;:::i;:::-;29641:116;;29804:9;29798:4;29794:20;29789:2;29778:9;29774:18;29767:48;29832:108;29935:4;29926:6;29832:108;:::i;:::-;29824:116;;29988:9;29982:4;29978:20;29972:3;29961:9;29957:19;29950:49;30016:76;30087:4;30078:6;30016:76;:::i;:::-;30008:84;;29374:725;;;;;;;;:::o;30105:751::-;30328:4;30366:3;30355:9;30351:19;30343:27;;30380:71;30448:1;30437:9;30433:17;30424:6;30380:71;:::i;:::-;30461:72;30529:2;30518:9;30514:18;30505:6;30461:72;:::i;:::-;30543;30611:2;30600:9;30596:18;30587:6;30543:72;:::i;:::-;30625;30693:2;30682:9;30678:18;30669:6;30625:72;:::i;:::-;30745:9;30739:4;30735:20;30729:3;30718:9;30714:19;30707:49;30773:76;30844:4;30835:6;30773:76;:::i;:::-;30765:84;;30333:523;;;;;;;;:::o;30862:373::-;31005:4;31043:2;31032:9;31028:18;31020:26;;31092:9;31086:4;31082:20;31078:1;31067:9;31063:17;31056:47;31120:108;31223:4;31214:6;31120:108;:::i;:::-;31112:116;;31010:225;;;;:::o;31241:634::-;31462:4;31500:2;31489:9;31485:18;31477:26;;31549:9;31543:4;31539:20;31535:1;31524:9;31520:17;31513:47;31577:108;31680:4;31671:6;31577:108;:::i;:::-;31569:116;;31732:9;31726:4;31722:20;31717:2;31706:9;31702:18;31695:48;31760:108;31863:4;31854:6;31760:108;:::i;:::-;31752:116;;31467:408;;;;;:::o;31881:210::-;31968:4;32006:2;31995:9;31991:18;31983:26;;32019:65;32081:1;32070:9;32066:17;32057:6;32019:65;:::i;:::-;31973:118;;;;:::o;32097:222::-;32190:4;32228:2;32217:9;32213:18;32205:26;;32241:71;32309:1;32298:9;32294:17;32285:6;32241:71;:::i;:::-;32195:124;;;;:::o;32325:313::-;32438:4;32476:2;32465:9;32461:18;32453:26;;32525:9;32519:4;32515:20;32511:1;32500:9;32496:17;32489:47;32553:78;32626:4;32617:6;32553:78;:::i;:::-;32545:86;;32443:195;;;;:::o;32644:419::-;32810:4;32848:2;32837:9;32833:18;32825:26;;32897:9;32891:4;32887:20;32883:1;32872:9;32868:17;32861:47;32925:131;33051:4;32925:131;:::i;:::-;32917:139;;32815:248;;;:::o;33069:419::-;33235:4;33273:2;33262:9;33258:18;33250:26;;33322:9;33316:4;33312:20;33308:1;33297:9;33293:17;33286:47;33350:131;33476:4;33350:131;:::i;:::-;33342:139;;33240:248;;;:::o;33494:419::-;33660:4;33698:2;33687:9;33683:18;33675:26;;33747:9;33741:4;33737:20;33733:1;33722:9;33718:17;33711:47;33775:131;33901:4;33775:131;:::i;:::-;33767:139;;33665:248;;;:::o;33919:419::-;34085:4;34123:2;34112:9;34108:18;34100:26;;34172:9;34166:4;34162:20;34158:1;34147:9;34143:17;34136:47;34200:131;34326:4;34200:131;:::i;:::-;34192:139;;34090:248;;;:::o;34344:419::-;34510:4;34548:2;34537:9;34533:18;34525:26;;34597:9;34591:4;34587:20;34583:1;34572:9;34568:17;34561:47;34625:131;34751:4;34625:131;:::i;:::-;34617:139;;34515:248;;;:::o;34769:419::-;34935:4;34973:2;34962:9;34958:18;34950:26;;35022:9;35016:4;35012:20;35008:1;34997:9;34993:17;34986:47;35050:131;35176:4;35050:131;:::i;:::-;35042:139;;34940:248;;;:::o;35194:419::-;35360:4;35398:2;35387:9;35383:18;35375:26;;35447:9;35441:4;35437:20;35433:1;35422:9;35418:17;35411:47;35475:131;35601:4;35475:131;:::i;:::-;35467:139;;35365:248;;;:::o;35619:419::-;35785:4;35823:2;35812:9;35808:18;35800:26;;35872:9;35866:4;35862:20;35858:1;35847:9;35843:17;35836:47;35900:131;36026:4;35900:131;:::i;:::-;35892:139;;35790:248;;;:::o;36044:419::-;36210:4;36248:2;36237:9;36233:18;36225:26;;36297:9;36291:4;36287:20;36283:1;36272:9;36268:17;36261:47;36325:131;36451:4;36325:131;:::i;:::-;36317:139;;36215:248;;;:::o;36469:419::-;36635:4;36673:2;36662:9;36658:18;36650:26;;36722:9;36716:4;36712:20;36708:1;36697:9;36693:17;36686:47;36750:131;36876:4;36750:131;:::i;:::-;36742:139;;36640:248;;;:::o;36894:419::-;37060:4;37098:2;37087:9;37083:18;37075:26;;37147:9;37141:4;37137:20;37133:1;37122:9;37118:17;37111:47;37175:131;37301:4;37175:131;:::i;:::-;37167:139;;37065:248;;;:::o;37319:419::-;37485:4;37523:2;37512:9;37508:18;37500:26;;37572:9;37566:4;37562:20;37558:1;37547:9;37543:17;37536:47;37600:131;37726:4;37600:131;:::i;:::-;37592:139;;37490:248;;;:::o;37744:419::-;37910:4;37948:2;37937:9;37933:18;37925:26;;37997:9;37991:4;37987:20;37983:1;37972:9;37968:17;37961:47;38025:131;38151:4;38025:131;:::i;:::-;38017:139;;37915:248;;;:::o;38169:419::-;38335:4;38373:2;38362:9;38358:18;38350:26;;38422:9;38416:4;38412:20;38408:1;38397:9;38393:17;38386:47;38450:131;38576:4;38450:131;:::i;:::-;38442:139;;38340:248;;;:::o;38594:419::-;38760:4;38798:2;38787:9;38783:18;38775:26;;38847:9;38841:4;38837:20;38833:1;38822:9;38818:17;38811:47;38875:131;39001:4;38875:131;:::i;:::-;38867:139;;38765:248;;;:::o;39019:419::-;39185:4;39223:2;39212:9;39208:18;39200:26;;39272:9;39266:4;39262:20;39258:1;39247:9;39243:17;39236:47;39300:131;39426:4;39300:131;:::i;:::-;39292:139;;39190:248;;;:::o;39444:419::-;39610:4;39648:2;39637:9;39633:18;39625:26;;39697:9;39691:4;39687:20;39683:1;39672:9;39668:17;39661:47;39725:131;39851:4;39725:131;:::i;:::-;39717:139;;39615:248;;;:::o;39869:419::-;40035:4;40073:2;40062:9;40058:18;40050:26;;40122:9;40116:4;40112:20;40108:1;40097:9;40093:17;40086:47;40150:131;40276:4;40150:131;:::i;:::-;40142:139;;40040:248;;;:::o;40294:419::-;40460:4;40498:2;40487:9;40483:18;40475:26;;40547:9;40541:4;40537:20;40533:1;40522:9;40518:17;40511:47;40575:131;40701:4;40575:131;:::i;:::-;40567:139;;40465:248;;;:::o;40719:419::-;40885:4;40923:2;40912:9;40908:18;40900:26;;40972:9;40966:4;40962:20;40958:1;40947:9;40943:17;40936:47;41000:131;41126:4;41000:131;:::i;:::-;40992:139;;40890:248;;;:::o;41144:419::-;41310:4;41348:2;41337:9;41333:18;41325:26;;41397:9;41391:4;41387:20;41383:1;41372:9;41368:17;41361:47;41425:131;41551:4;41425:131;:::i;:::-;41417:139;;41315:248;;;:::o;41569:419::-;41735:4;41773:2;41762:9;41758:18;41750:26;;41822:9;41816:4;41812:20;41808:1;41797:9;41793:17;41786:47;41850:131;41976:4;41850:131;:::i;:::-;41842:139;;41740:248;;;:::o;41994:419::-;42160:4;42198:2;42187:9;42183:18;42175:26;;42247:9;42241:4;42237:20;42233:1;42222:9;42218:17;42211:47;42275:131;42401:4;42275:131;:::i;:::-;42267:139;;42165:248;;;:::o;42419:419::-;42585:4;42623:2;42612:9;42608:18;42600:26;;42672:9;42666:4;42662:20;42658:1;42647:9;42643:17;42636:47;42700:131;42826:4;42700:131;:::i;:::-;42692:139;;42590:248;;;:::o;42844:419::-;43010:4;43048:2;43037:9;43033:18;43025:26;;43097:9;43091:4;43087:20;43083:1;43072:9;43068:17;43061:47;43125:131;43251:4;43125:131;:::i;:::-;43117:139;;43015:248;;;:::o;43269:419::-;43435:4;43473:2;43462:9;43458:18;43450:26;;43522:9;43516:4;43512:20;43508:1;43497:9;43493:17;43486:47;43550:131;43676:4;43550:131;:::i;:::-;43542:139;;43440:248;;;:::o;43694:222::-;43787:4;43825:2;43814:9;43810:18;43802:26;;43838:71;43906:1;43895:9;43891:17;43882:6;43838:71;:::i;:::-;43792:124;;;;:::o;43922:332::-;44043:4;44081:2;44070:9;44066:18;44058:26;;44094:71;44162:1;44151:9;44147:17;44138:6;44094:71;:::i;:::-;44175:72;44243:2;44232:9;44228:18;44219:6;44175:72;:::i;:::-;44048:206;;;;;:::o;44260:129::-;44294:6;44321:20;;:::i;:::-;44311:30;;44350:33;44378:4;44370:6;44350:33;:::i;:::-;44301:88;;;:::o;44395:75::-;44428:6;44461:2;44455:9;44445:19;;44435:35;:::o;44476:311::-;44553:4;44643:18;44635:6;44632:30;44629:2;;;44665:18;;:::i;:::-;44629:2;44715:4;44707:6;44703:17;44695:25;;44775:4;44769;44765:15;44757:23;;44558:229;;;:::o;44793:311::-;44870:4;44960:18;44952:6;44949:30;44946:2;;;44982:18;;:::i;:::-;44946:2;45032:4;45024:6;45020:17;45012:25;;45092:4;45086;45082:15;45074:23;;44875:229;;;:::o;45110:311::-;45187:4;45277:18;45269:6;45266:30;45263:2;;;45299:18;;:::i;:::-;45263:2;45349:4;45341:6;45337:17;45329:25;;45409:4;45403;45399:15;45391:23;;45192:229;;;:::o;45427:307::-;45488:4;45578:18;45570:6;45567:30;45564:2;;;45600:18;;:::i;:::-;45564:2;45638:29;45660:6;45638:29;:::i;:::-;45630:37;;45722:4;45716;45712:15;45704:23;;45493:241;;;:::o;45740:308::-;45802:4;45892:18;45884:6;45881:30;45878:2;;;45914:18;;:::i;:::-;45878:2;45952:29;45974:6;45952:29;:::i;:::-;45944:37;;46036:4;46030;46026:15;46018:23;;45807:241;;;:::o;46054:132::-;46121:4;46144:3;46136:11;;46174:4;46169:3;46165:14;46157:22;;46126:60;;;:::o;46192:141::-;46241:4;46264:3;46256:11;;46287:3;46284:1;46277:14;46321:4;46318:1;46308:18;46300:26;;46246:87;;;:::o;46339:114::-;46406:6;46440:5;46434:12;46424:22;;46413:40;;;:::o;46459:98::-;46510:6;46544:5;46538:12;46528:22;;46517:40;;;:::o;46563:99::-;46615:6;46649:5;46643:12;46633:22;;46622:40;;;:::o;46668:113::-;46738:4;46770;46765:3;46761:14;46753:22;;46743:38;;;:::o;46787:184::-;46886:11;46920:6;46915:3;46908:19;46960:4;46955:3;46951:14;46936:29;;46898:73;;;;:::o;46977:168::-;47060:11;47094:6;47089:3;47082:19;47134:4;47129:3;47125:14;47110:29;;47072:73;;;;:::o;47151:147::-;47252:11;47289:3;47274:18;;47264:34;;;;:::o;47304:169::-;47388:11;47422:6;47417:3;47410:19;47462:4;47457:3;47453:14;47438:29;;47400:73;;;;:::o;47479:148::-;47581:11;47618:3;47603:18;;47593:34;;;;:::o;47633:305::-;47673:3;47692:20;47710:1;47692:20;:::i;:::-;47687:25;;47726:20;47744:1;47726:20;:::i;:::-;47721:25;;47880:1;47812:66;47808:74;47805:1;47802:81;47799:2;;;47886:18;;:::i;:::-;47799:2;47930:1;47927;47923:9;47916:16;;47677:261;;;;:::o;47944:185::-;47984:1;48001:20;48019:1;48001:20;:::i;:::-;47996:25;;48035:20;48053:1;48035:20;:::i;:::-;48030:25;;48074:1;48064:2;;48079:18;;:::i;:::-;48064:2;48121:1;48118;48114:9;48109:14;;47986:143;;;;:::o;48135:348::-;48175:7;48198:20;48216:1;48198:20;:::i;:::-;48193:25;;48232:20;48250:1;48232:20;:::i;:::-;48227:25;;48420:1;48352:66;48348:74;48345:1;48342:81;48337:1;48330:9;48323:17;48319:105;48316:2;;;48427:18;;:::i;:::-;48316:2;48475:1;48472;48468:9;48457:20;;48183:300;;;;:::o;48489:191::-;48529:4;48549:20;48567:1;48549:20;:::i;:::-;48544:25;;48583:20;48601:1;48583:20;:::i;:::-;48578:25;;48622:1;48619;48616:8;48613:2;;;48627:18;;:::i;:::-;48613:2;48672:1;48669;48665:9;48657:17;;48534:146;;;;:::o;48686:96::-;48723:7;48752:24;48770:5;48752:24;:::i;:::-;48741:35;;48731:51;;;:::o;48788:90::-;48822:7;48865:5;48858:13;48851:21;48840:32;;48830:48;;;:::o;48884:77::-;48921:7;48950:5;48939:16;;48929:32;;;:::o;48967:149::-;49003:7;49043:66;49036:5;49032:78;49021:89;;49011:105;;;:::o;49122:126::-;49159:7;49199:42;49192:5;49188:54;49177:65;;49167:81;;;:::o;49254:77::-;49291:7;49320:5;49309:16;;49299:32;;;:::o;49337:93::-;49373:7;49413:10;49406:5;49402:22;49391:33;;49381:49;;;:::o;49436:154::-;49520:6;49515:3;49510;49497:30;49582:1;49573:6;49568:3;49564:16;49557:27;49487:103;;;:::o;49596:307::-;49664:1;49674:113;49688:6;49685:1;49682:13;49674:113;;;49773:1;49768:3;49764:11;49758:18;49754:1;49749:3;49745:11;49738:39;49710:2;49707:1;49703:10;49698:15;;49674:113;;;49805:6;49802:1;49799:13;49796:2;;;49885:1;49876:6;49871:3;49867:16;49860:27;49796:2;49645:258;;;;:::o;49909:320::-;49953:6;49990:1;49984:4;49980:12;49970:22;;50037:1;50031:4;50027:12;50058:18;50048:2;;50114:4;50106:6;50102:17;50092:27;;50048:2;50176;50168:6;50165:14;50145:18;50142:38;50139:2;;;50195:18;;:::i;:::-;50139:2;49960:269;;;;:::o;50235:281::-;50318:27;50340:4;50318:27;:::i;:::-;50310:6;50306:40;50448:6;50436:10;50433:22;50412:18;50400:10;50397:34;50394:62;50391:2;;;50459:18;;:::i;:::-;50391:2;50499:10;50495:2;50488:22;50278:238;;;:::o;50522:233::-;50561:3;50584:24;50602:5;50584:24;:::i;:::-;50575:33;;50630:66;50623:5;50620:77;50617:2;;;50700:18;;:::i;:::-;50617:2;50747:1;50740:5;50736:13;50729:20;;50565:190;;;:::o;50761:175::-;50799:3;50822:23;50839:5;50822:23;:::i;:::-;50813:32;;50867:10;50860:5;50857:21;50854:2;;;50881:18;;:::i;:::-;50854:2;50928:1;50921:5;50917:13;50910:20;;50803:133;;;:::o;50942:79::-;50981:7;51010:5;50999:16;;50989:32;;;:::o;51027:176::-;51059:1;51076:20;51094:1;51076:20;:::i;:::-;51071:25;;51110:20;51128:1;51110:20;:::i;:::-;51105:25;;51149:1;51139:2;;51154:18;;:::i;:::-;51139:2;51195:1;51192;51188:9;51183:14;;51061:142;;;;:::o;51209:180::-;51257:77;51254:1;51247:88;51354:4;51351:1;51344:15;51378:4;51375:1;51368:15;51395:180;51443:77;51440:1;51433:88;51540:4;51537:1;51530:15;51564:4;51561:1;51554:15;51581:180;51629:77;51626:1;51619:88;51726:4;51723:1;51716:15;51750:4;51747:1;51740:15;51767:180;51815:77;51812:1;51805:88;51912:4;51909:1;51902:15;51936:4;51933:1;51926:15;51953:183;51988:3;52026:1;52008:16;52005:23;52002:2;;;52064:1;52061;52058;52043:23;52086:34;52117:1;52111:8;52086:34;:::i;:::-;52079:41;;52002:2;51992:144;:::o;52142:102::-;52183:6;52234:2;52230:7;52225:2;52218:5;52214:14;52210:28;52200:38;;52190:54;;;:::o;52250:106::-;52294:8;52343:5;52338:3;52334:15;52313:36;;52303:53;;;:::o;52362:239::-;52502:34;52498:1;52490:6;52486:14;52479:58;52571:22;52566:2;52558:6;52554:15;52547:47;52468:133;:::o;52607:227::-;52747:34;52743:1;52735:6;52731:14;52724:58;52816:10;52811:2;52803:6;52799:15;52792:35;52713:121;:::o;52840:230::-;52980:34;52976:1;52968:6;52964:14;52957:58;53049:13;53044:2;53036:6;53032:15;53025:38;52946:124;:::o;53076:225::-;53216:34;53212:1;53204:6;53200:14;53193:58;53285:8;53280:2;53272:6;53268:15;53261:33;53182:119;:::o;53307:170::-;53447:22;53443:1;53435:6;53431:14;53424:46;53413:64;:::o;53483:238::-;53623:34;53619:1;53611:6;53607:14;53600:58;53692:21;53687:2;53679:6;53675:15;53668:46;53589:132;:::o;53727:228::-;53867:34;53863:1;53855:6;53851:14;53844:58;53936:11;53931:2;53923:6;53919:15;53912:36;53833:122;:::o;53961:168::-;54101:20;54097:1;54089:6;54085:14;54078:44;54067:62;:::o;54135:181::-;54275:33;54271:1;54263:6;54259:14;54252:57;54241:75;:::o;54322:182::-;54462:34;54458:1;54450:6;54446:14;54439:58;54428:76;:::o;54510:224::-;54650:34;54646:1;54638:6;54634:14;54627:58;54719:7;54714:2;54706:6;54702:15;54695:32;54616:118;:::o;54740:237::-;54880:34;54876:1;54868:6;54864:14;54857:58;54949:20;54944:2;54936:6;54932:15;54925:45;54846:131;:::o;54983:165::-;55123:17;55119:1;55111:6;55107:14;55100:41;55089:59;:::o;55154:243::-;55294:34;55290:1;55282:6;55278:14;55271:58;55363:26;55358:2;55350:6;55346:15;55339:51;55260:137;:::o;55403:229::-;55543:34;55539:1;55531:6;55527:14;55520:58;55612:12;55607:2;55599:6;55595:15;55588:37;55509:123;:::o;55638:172::-;55778:24;55774:1;55766:6;55762:14;55755:48;55744:66;:::o;55816:182::-;55956:34;55952:1;55944:6;55940:14;55933:58;55922:76;:::o;56004:182::-;56144:34;56140:1;56132:6;56128:14;56121:58;56110:76;:::o;56192:235::-;56332:34;56328:1;56320:6;56316:14;56309:58;56401:18;56396:2;56388:6;56384:15;56377:43;56298:129;:::o;56433:234::-;56573:34;56569:1;56561:6;56557:14;56550:58;56642:17;56637:2;56629:6;56625:15;56618:42;56539:128;:::o;56673:228::-;56813:34;56809:1;56801:6;56797:14;56790:58;56882:11;56877:2;56869:6;56865:15;56858:36;56779:122;:::o;56907:228::-;57047:34;57043:1;57035:6;57031:14;57024:58;57116:11;57111:2;57103:6;57099:15;57092:36;57013:122;:::o;57141:221::-;57281:34;57277:1;57269:6;57265:14;57258:58;57350:4;57345:2;57337:6;57333:15;57326:29;57247:115;:::o;57368:227::-;57508:34;57504:1;57496:6;57492:14;57485:58;57577:10;57572:2;57564:6;57560:15;57553:35;57474:121;:::o;57601:220::-;57741:34;57737:1;57729:6;57725:14;57718:58;57810:3;57805:2;57797:6;57793:15;57786:28;57707:114;:::o;57827:178::-;57967:30;57963:1;57955:6;57951:14;57944:54;57933:72;:::o;58011:711::-;58050:3;58088:4;58070:16;58067:26;58064:2;;;58096:5;;58064:2;58125:20;;:::i;:::-;58200:1;58182:16;58178:24;58175:1;58169:4;58154:49;58233:4;58227:11;58332:16;58325:4;58317:6;58313:17;58310:39;58277:18;58269:6;58266:30;58250:113;58247:2;;;58378:5;;;;58247:2;58424:6;58418:4;58414:17;58460:3;58454:10;58487:18;58479:6;58476:30;58473:2;;;58509:5;;;;;;58473:2;58557:6;58550:4;58545:3;58541:14;58537:27;58616:1;58598:16;58594:24;58588:4;58584:35;58579:3;58576:44;58573:2;;;58623:5;;;;;;;58573:2;58640:57;58688:6;58682:4;58678:17;58670:6;58666:30;58660:4;58640:57;:::i;:::-;58713:3;58706:10;;58054:668;;;;;;;:::o;58728:122::-;58801:24;58819:5;58801:24;:::i;:::-;58794:5;58791:35;58781:2;;58840:1;58837;58830:12;58781:2;58771:79;:::o;58856:116::-;58926:21;58941:5;58926:21;:::i;:::-;58919:5;58916:32;58906:2;;58962:1;58959;58952:12;58906:2;58896:76;:::o;58978:122::-;59051:24;59069:5;59051:24;:::i;:::-;59044:5;59041:35;59031:2;;59090:1;59087;59080:12;59031:2;59021:79;:::o;59106:120::-;59178:23;59195:5;59178:23;:::i;:::-;59171:5;59168:34;59158:2;;59216:1;59213;59206:12;59158:2;59148:78;:::o;59232:122::-;59305:24;59323:5;59305:24;:::i;:::-;59298:5;59295:35;59285:2;;59344:1;59341;59334:12;59285:2;59275:79;:::o;59360:120::-;59432:23;59449:5;59432:23;:::i;:::-;59425:5;59422:34;59412:2;;59470:1;59467;59460:12;59412:2;59402:78;:::o
Swarm Source
ipfs://83b86f881fbcb165455885c369474ef1739913074dd18c3f42a7345d4bea6763
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.