ERC-1155
Overview
Max Total Supply
0
Holders
124
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Madness
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-02-07 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.2; 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); } } 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); } } } } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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); } 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; } 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); } contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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; } } abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates weither any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_mint}. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual override { super._mint(account, id, amount, data); _totalSupply[id] += amount; } /** * @dev See {ERC1155-_mintBatch}. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._mintBatch(to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } /** * @dev See {ERC1155-_burn}. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual override { super._burn(account, id, amount); _totalSupply[id] -= amount; } /** * @dev See {ERC1155-_burnBatch}. */ function _burnBatch( address account, uint256[] memory ids, uint256[] memory amounts ) internal virtual override { super._burnBatch(account, ids, amounts); for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } contract Madness is ERC1155, Ownable, ERC1155Burnable { constructor() ERC1155("") {} mapping(uint256 => string) public _uris; mapping(uint256 => uint256) public _prices; mapping(uint256 => bool) public _saleStarted; mapping(address => mapping(uint256 => uint256)) public _credits; address public treasury; function setTreasury(address to) public onlyOwner { treasury = to; } function mint(uint256 id, uint256 amount, bytes memory data) public payable { require(_saleStarted[id] == true, "this NFT is unavailable or does not exist"); require(msg.value == _prices[id]*amount, "msg.value does not match the price of this NFT"); _mint(msg.sender, id, amount, data); } function creditedMint(uint256 tokenId, uint256 amount, bytes memory data) public { require(_credits[msg.sender][tokenId] > 0, "You do not have any mint credits"); require(_credits[msg.sender][tokenId] >= amount, "You do not have enough mint credits for this transaction"); _mint(msg.sender, tokenId, amount, data); _credits[msg.sender][tokenId]-=amount; } function uri(uint256 tokenId) override public view returns (string memory) { return(_uris[tokenId]); } function credits(address account, uint256 tokenId) public view returns (uint256){ return(_credits[account][tokenId]); } function setURI(uint256 tokenId, string memory URL) public onlyOwner { _uris[tokenId] = URL; } function setPriceWei(uint256 tokenId, uint256 price) public onlyOwner { _prices[tokenId] = price; } function setPriceFTM(uint256 tokenId, uint256 price) public onlyOwner { _prices[tokenId] = (1 ether)*price; } function startSale(uint256 tokenId) public onlyOwner { require(_saleStarted[tokenId] != true, "Sale has already started for this tokenId"); _saleStarted[tokenId] = true; } function pauseSale(uint256 tokenId) public onlyOwner { require(_saleStarted[tokenId] != false, "Sale is already paused for this tokenId"); _saleStarted[tokenId] = false; } function withdrawAll () public onlyOwner { require(treasury != address(0), "Cannot withdraw to burn address"); payable(treasury).transfer(address(this).balance); } function addBatchCredits(address[] memory to, uint256[] memory amounts, uint256 tokenId) public onlyOwner{ require(to.length == amounts.length, "to[] and amounts[] must be the same length"); for (uint256 i = 0; i < to.length; i++){ _credits[to[i]][tokenId] += amounts[i]; } } function addCredits(address to, uint tokenId, uint count) public onlyOwner{ _credits[to][tokenId] += count; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_credits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_prices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_saleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_uris","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"addBatchCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"addCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"creditedMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"credits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPriceFTM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPriceWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"URL","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200005a60201b60201c565b5062000054620000486200007660201b60201c565b6200007e60201b60201c565b62000259565b80600290805190602001906200007292919062000144565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200015290620001f4565b90600052602060002090601f016020900481019282620001765760008555620001c2565b82601f106200019157805160ff1916838001178555620001c2565b82800160010185558215620001c2579182015b82811115620001c1578251825591602001919060010190620001a4565b5b509050620001d19190620001d5565b5090565b5b80821115620001f0576000816000905550600101620001d6565b5090565b600060028204905060018216806200020d57607f821691505b602082108114156200022457620002236200022a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614d6180620002696000396000f3fe6080604052600436106101cc5760003560e01c80636eceb09c116100f7578063e985e9c511610095578063f5298aca11610064578063f5298aca1461065a578063f75592df14610683578063fe776dd0146106c0578063ff76a861146106fd576101cc565b8063e985e9c5146105a2578063f0f44260146105df578063f242432a14610608578063f2fde38b14610631576101cc565b8063862440e2116100d1578063862440e2146104fc5780638da5cb5b14610525578063a22cb46514610550578063b9d8ed3414610579576101cc565b80636eceb09c146104a5578063715018a6146104ce578063853828b6146104e5576101cc565b80633a66e4b61161016f5780634f1f6baa1161013e5780634f1f6baa146103ff57806361d027b3146104285780636896cb33146104535780636b20c4541461047c576101cc565b80633a66e4b61461033357806342f764181461035c57806347958d51146103855780634e1273f4146103c2576101cc565b80630e3ab61d116101ab5780630e3ab61d146102675780630e89341c146102905780631233ce8d146102cd5780632eb2c2d61461030a576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806308dc9f421461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f391906134df565b61073a565b60405161020591906140a3565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613675565b610803565b6040516102429190613d86565b60405180910390f35b61026560048036038101906102609190613798565b6108e5565b005b34801561027357600080fd5b5061028e600480360381019061028991906136cf565b6109bd565b005b34801561029c57600080fd5b506102b760048036038101906102b291906136cf565b610ad0565b6040516102c49190613da1565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef91906136cf565b610b75565b6040516103019190613da1565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c91906132ae565b610c15565b005b34801561033f57600080fd5b5061035a600480360381019061035591906136cf565b610cb6565b005b34801561036857600080fd5b50610383600480360381019061037e9190613758565b610dc9565b005b34801561039157600080fd5b506103ac60048036038101906103a791906134df565b610e74565b6040516103b991906140a3565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613572565b610e99565b6040516103f69190613d2d565b60405180910390f35b34801561040b57600080fd5b50610426600480360381019061042191906135ea565b610fb2565b005b34801561043457600080fd5b5061043d611132565b60405161044a9190613c50565b60405180910390f35b34801561045f57600080fd5b5061047a6004803603810190610475919061351f565b611158565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613414565b611240565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613798565b6112dd565b005b3480156104da57600080fd5b506104e361147b565b005b3480156104f157600080fd5b506104fa611503565b005b34801561050857600080fd5b50610523600480360381019061051e91906136fc565b61167c565b005b34801561053157600080fd5b5061053a611724565b6040516105479190613c50565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061349f565b61174e565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613758565b6118cf565b005b3480156105ae57600080fd5b506105c960048036038101906105c4919061326e565b611967565b6040516105d69190613d86565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190613241565b6119fb565b005b34801561061457600080fd5b5061062f600480360381019061062a919061337d565b611abb565b005b34801561063d57600080fd5b5061065860048036038101906106539190613241565b611b5c565b005b34801561066657600080fd5b50610681600480360381019061067c919061351f565b611c54565b005b34801561068f57600080fd5b506106aa60048036038101906106a591906136cf565b611cf1565b6040516106b79190613d86565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e291906136cf565b611d11565b6040516106f491906140a3565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f91906134df565b611d29565b60405161073191906140a3565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290613e23565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ce57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108de57506108dd82611d84565b5b9050919050565b600115156006600085815260200190815260200160002060009054906101000a900460ff1615151461094c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094390613e63565b60405180910390fd5b81600560008581526020019081526020016000205461096b919061428d565b34146109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a390613fe3565b60405180910390fd5b6109b833848484611dee565b505050565b6109c5611f84565b73ffffffffffffffffffffffffffffffffffffffff166109e3611724565b73ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090613fa3565b60405180910390fd5b600115156006600083815260200190815260200160002060009054906101000a900460ff1615151415610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890613e03565b60405180910390fd5b60016006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6060600460008381526020019081526020016000208054610af0906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1c906143d1565b8015610b695780601f10610b3e57610100808354040283529160200191610b69565b820191906000526020600020905b815481529060010190602001808311610b4c57829003601f168201915b50505050509050919050565b60046020528060005260406000206000915090508054610b94906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc0906143d1565b8015610c0d5780601f10610be257610100808354040283529160200191610c0d565b820191906000526020600020905b815481529060010190602001808311610bf057829003601f168201915b505050505081565b610c1d611f84565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c635750610c6285610c5d611f84565b611967565b5b610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990613f23565b60405180910390fd5b610caf8585858585611f8c565b5050505050565b610cbe611f84565b73ffffffffffffffffffffffffffffffffffffffff16610cdc611724565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613fa3565b60405180910390fd5b600015156006600083815260200190815260200160002060009054906101000a900460ff1615151415610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190614083565b60405180910390fd5b60006006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610dd1611f84565b73ffffffffffffffffffffffffffffffffffffffff16610def611724565b73ffffffffffffffffffffffffffffffffffffffff1614610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c90613fa3565b60405180910390fd5b80670de0b6b3a7640000610e59919061428d565b60056000848152602001908152602001600020819055505050565b6007602052816000526040600020602052806000526040600020600091509150505481565b60608151835114610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690614023565b60405180910390fd5b6000835167ffffffffffffffff811115610efc57610efb61450a565b5b604051908082528060200260200182016040528015610f2a5781602001602082028036833780820191505090505b50905060005b8451811015610fa757610f77858281518110610f4f57610f4e6144db565b5b6020026020010151858381518110610f6a57610f696144db565b5b602002602001015161073a565b828281518110610f8a57610f896144db565b5b60200260200101818152505080610fa090614434565b9050610f30565b508091505092915050565b610fba611f84565b73ffffffffffffffffffffffffffffffffffffffff16610fd8611724565b73ffffffffffffffffffffffffffffffffffffffff161461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590613fa3565b60405180910390fd5b8151835114611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990613ea3565b60405180910390fd5b60005b835181101561112c57828181518110611091576110906144db565b5b6020026020010151600760008684815181106110b0576110af6144db565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008282546111129190614237565b92505081905550808061112490614434565b915050611075565b50505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611160611f84565b73ffffffffffffffffffffffffffffffffffffffff1661117e611724565b73ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90613fa3565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008282546112349190614237565b92505081905550505050565b611248611f84565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061128e575061128d83611288611f84565b611967565b5b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613ee3565b60405180910390fd5b6112d88383836122a0565b505050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205411611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613f83565b60405180910390fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020541015611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90613fc3565b60405180910390fd5b61140f33848484611dee565b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020600082825461146f91906142e7565b92505081905550505050565b611483611f84565b73ffffffffffffffffffffffffffffffffffffffff166114a1611724565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613fa3565b60405180910390fd5b6115016000612551565b565b61150b611f84565b73ffffffffffffffffffffffffffffffffffffffff16611529611724565b73ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613fa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613ec3565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611679573d6000803e3d6000fd5b50565b611684611f84565b73ffffffffffffffffffffffffffffffffffffffff166116a2611724565b73ffffffffffffffffffffffffffffffffffffffff16146116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90613fa3565b60405180910390fd5b8060046000848152602001908152602001600020908051906020019061171f929190612f19565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1661176d611f84565b73ffffffffffffffffffffffffffffffffffffffff1614156117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614003565b60405180910390fd5b80600160006117d1611f84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661187e611f84565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c39190613d86565b60405180910390a35050565b6118d7611f84565b73ffffffffffffffffffffffffffffffffffffffff166118f5611724565b73ffffffffffffffffffffffffffffffffffffffff161461194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613fa3565b60405180910390fd5b8060056000848152602001908152602001600020819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a03611f84565b73ffffffffffffffffffffffffffffffffffffffff16611a21611724565b73ffffffffffffffffffffffffffffffffffffffff1614611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e90613fa3565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ac3611f84565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611b095750611b0885611b03611f84565b611967565b5b611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90613ee3565b60405180910390fd5b611b558585858585612617565b5050505050565b611b64611f84565b73ffffffffffffffffffffffffffffffffffffffff16611b82611724565b73ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90613fa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f90613e43565b60405180910390fd5b611c5181612551565b50565b611c5c611f84565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611ca25750611ca183611c9c611f84565b611967565b5b611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613ee3565b60405180910390fd5b611cec838383612899565b505050565b60066020528060005260406000206000915054906101000a900460ff1681565b60056020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590614063565b60405180910390fd5b6000611e68611f84565b9050611e8981600087611e7a88612ab6565b611e8388612ab6565b87612b30565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee89190614237565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611f669291906140be565b60405180910390a4611f7d81600087878787612b38565b5050505050565b600033905090565b8151835114611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614043565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790613f03565b60405180910390fd5b600061204a611f84565b905061205a818787878787612b30565b60005b845181101561220b57600085828151811061207b5761207a6144db565b5b60200260200101519050600085838151811061209a576120996144db565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561213b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213290613f63565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121f09190614237565b925050819055505050508061220490614434565b905061205d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612282929190613d4f565b60405180910390a4612298818787878787612d1f565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790613f43565b60405180910390fd5b8051825114612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90614043565b60405180910390fd5b600061235e611f84565b905061237e81856000868660405180602001604052806000815250612b30565b60005b83518110156124cb57600084828151811061239f5761239e6144db565b5b6020026020010151905060008483815181106123be576123bd6144db565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690613e83565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806124c390614434565b915050612381565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612543929190613d4f565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267e90613f03565b60405180910390fd5b6000612691611f84565b90506126b18187876126a288612ab6565b6126ab88612ab6565b87612b30565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90613f63565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127fd9190614237565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161287a9291906140be565b60405180910390a4612890828888888888612b38565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090613f43565b60405180910390fd5b6000612913611f84565b90506129438185600061292587612ab6565b61292e87612ab6565b60405180602001604052806000815250612b30565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190613e83565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612aa79291906140be565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115612ad557612ad461450a565b5b604051908082528060200260200182016040528015612b035781602001602082028036833780820191505090505b5090508281600081518110612b1b57612b1a6144db565b5b60200260200101818152505080915050919050565b505050505050565b612b578473ffffffffffffffffffffffffffffffffffffffff16612f06565b15612d17578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612b9d959493929190613cd3565b602060405180830381600087803b158015612bb757600080fd5b505af1925050508015612be857506040513d601f19601f82011682018060405250810190612be591906136a2565b60015b612c8e57612bf4614539565b806308c379a01415612c515750612c09614c39565b80612c145750612c53565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c489190613da1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8590613dc3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c90613de3565b60405180910390fd5b505b505050505050565b612d3e8473ffffffffffffffffffffffffffffffffffffffff16612f06565b15612efe578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612d84959493929190613c6b565b602060405180830381600087803b158015612d9e57600080fd5b505af1925050508015612dcf57506040513d601f19601f82011682018060405250810190612dcc91906136a2565b60015b612e7557612ddb614539565b806308c379a01415612e385750612df0614c39565b80612dfb5750612e3a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2f9190613da1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6c90613dc3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef390613de3565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612f25906143d1565b90600052602060002090601f016020900481019282612f475760008555612f8e565b82601f10612f6057805160ff1916838001178555612f8e565b82800160010185558215612f8e579182015b82811115612f8d578251825591602001919060010190612f72565b5b509050612f9b9190612f9f565b5090565b5b80821115612fb8576000816000905550600101612fa0565b5090565b6000612fcf612fca8461410c565b6140e7565b90508083825260208201905082856020860282011115612ff257612ff1614560565b5b60005b8581101561302257816130088882613120565b845260208401935060208301925050600181019050612ff5565b5050509392505050565b600061303f61303a84614138565b6140e7565b9050808382526020820190508285602086028201111561306257613061614560565b5b60005b858110156130925781613078888261322c565b845260208401935060208301925050600181019050613065565b5050509392505050565b60006130af6130aa84614164565b6140e7565b9050828152602081018484840111156130cb576130ca614565565b5b6130d684828561438f565b509392505050565b60006130f16130ec84614195565b6140e7565b90508281526020810184848401111561310d5761310c614565565b5b61311884828561438f565b509392505050565b60008135905061312f81614ccf565b92915050565b600082601f83011261314a5761314961455b565b5b813561315a848260208601612fbc565b91505092915050565b600082601f8301126131785761317761455b565b5b813561318884826020860161302c565b91505092915050565b6000813590506131a081614ce6565b92915050565b6000813590506131b581614cfd565b92915050565b6000815190506131ca81614cfd565b92915050565b600082601f8301126131e5576131e461455b565b5b81356131f584826020860161309c565b91505092915050565b600082601f8301126132135761321261455b565b5b81356132238482602086016130de565b91505092915050565b60008135905061323b81614d14565b92915050565b6000602082840312156132575761325661456f565b5b600061326584828501613120565b91505092915050565b600080604083850312156132855761328461456f565b5b600061329385828601613120565b92505060206132a485828601613120565b9150509250929050565b600080600080600060a086880312156132ca576132c961456f565b5b60006132d888828901613120565b95505060206132e988828901613120565b945050604086013567ffffffffffffffff81111561330a5761330961456a565b5b61331688828901613163565b935050606086013567ffffffffffffffff8111156133375761333661456a565b5b61334388828901613163565b925050608086013567ffffffffffffffff8111156133645761336361456a565b5b613370888289016131d0565b9150509295509295909350565b600080600080600060a086880312156133995761339861456f565b5b60006133a788828901613120565b95505060206133b888828901613120565b94505060406133c98882890161322c565b93505060606133da8882890161322c565b925050608086013567ffffffffffffffff8111156133fb576133fa61456a565b5b613407888289016131d0565b9150509295509295909350565b60008060006060848603121561342d5761342c61456f565b5b600061343b86828701613120565b935050602084013567ffffffffffffffff81111561345c5761345b61456a565b5b61346886828701613163565b925050604084013567ffffffffffffffff8111156134895761348861456a565b5b61349586828701613163565b9150509250925092565b600080604083850312156134b6576134b561456f565b5b60006134c485828601613120565b92505060206134d585828601613191565b9150509250929050565b600080604083850312156134f6576134f561456f565b5b600061350485828601613120565b92505060206135158582860161322c565b9150509250929050565b6000806000606084860312156135385761353761456f565b5b600061354686828701613120565b93505060206135578682870161322c565b92505060406135688682870161322c565b9150509250925092565b600080604083850312156135895761358861456f565b5b600083013567ffffffffffffffff8111156135a7576135a661456a565b5b6135b385828601613135565b925050602083013567ffffffffffffffff8111156135d4576135d361456a565b5b6135e085828601613163565b9150509250929050565b6000806000606084860312156136035761360261456f565b5b600084013567ffffffffffffffff8111156136215761362061456a565b5b61362d86828701613135565b935050602084013567ffffffffffffffff81111561364e5761364d61456a565b5b61365a86828701613163565b925050604061366b8682870161322c565b9150509250925092565b60006020828403121561368b5761368a61456f565b5b6000613699848285016131a6565b91505092915050565b6000602082840312156136b8576136b761456f565b5b60006136c6848285016131bb565b91505092915050565b6000602082840312156136e5576136e461456f565b5b60006136f38482850161322c565b91505092915050565b600080604083850312156137135761371261456f565b5b60006137218582860161322c565b925050602083013567ffffffffffffffff8111156137425761374161456a565b5b61374e858286016131fe565b9150509250929050565b6000806040838503121561376f5761376e61456f565b5b600061377d8582860161322c565b925050602061378e8582860161322c565b9150509250929050565b6000806000606084860312156137b1576137b061456f565b5b60006137bf8682870161322c565b93505060206137d08682870161322c565b925050604084013567ffffffffffffffff8111156137f1576137f061456a565b5b6137fd868287016131d0565b9150509250925092565b60006138138383613c32565b60208301905092915050565b6138288161431b565b82525050565b6000613839826141d6565b6138438185614204565b935061384e836141c6565b8060005b8381101561387f5781516138668882613807565b9750613871836141f7565b925050600181019050613852565b5085935050505092915050565b6138958161432d565b82525050565b60006138a6826141e1565b6138b08185614215565b93506138c081856020860161439e565b6138c981614574565b840191505092915050565b60006138df826141ec565b6138e98185614226565b93506138f981856020860161439e565b61390281614574565b840191505092915050565b600061391a603483614226565b915061392582614592565b604082019050919050565b600061393d602883614226565b9150613948826145e1565b604082019050919050565b6000613960602983614226565b915061396b82614630565b604082019050919050565b6000613983602b83614226565b915061398e8261467f565b604082019050919050565b60006139a6602683614226565b91506139b1826146ce565b604082019050919050565b60006139c9602983614226565b91506139d48261471d565b604082019050919050565b60006139ec602483614226565b91506139f78261476c565b604082019050919050565b6000613a0f602a83614226565b9150613a1a826147bb565b604082019050919050565b6000613a32601f83614226565b9150613a3d8261480a565b602082019050919050565b6000613a55602983614226565b9150613a6082614833565b604082019050919050565b6000613a78602583614226565b9150613a8382614882565b604082019050919050565b6000613a9b603283614226565b9150613aa6826148d1565b604082019050919050565b6000613abe602383614226565b9150613ac982614920565b604082019050919050565b6000613ae1602a83614226565b9150613aec8261496f565b604082019050919050565b6000613b04602083614226565b9150613b0f826149be565b602082019050919050565b6000613b27602083614226565b9150613b32826149e7565b602082019050919050565b6000613b4a603883614226565b9150613b5582614a10565b604082019050919050565b6000613b6d602e83614226565b9150613b7882614a5f565b604082019050919050565b6000613b90602983614226565b9150613b9b82614aae565b604082019050919050565b6000613bb3602983614226565b9150613bbe82614afd565b604082019050919050565b6000613bd6602883614226565b9150613be182614b4c565b604082019050919050565b6000613bf9602183614226565b9150613c0482614b9b565b604082019050919050565b6000613c1c602783614226565b9150613c2782614bea565b604082019050919050565b613c3b81614385565b82525050565b613c4a81614385565b82525050565b6000602082019050613c65600083018461381f565b92915050565b600060a082019050613c80600083018861381f565b613c8d602083018761381f565b8181036040830152613c9f818661382e565b90508181036060830152613cb3818561382e565b90508181036080830152613cc7818461389b565b90509695505050505050565b600060a082019050613ce8600083018861381f565b613cf5602083018761381f565b613d026040830186613c41565b613d0f6060830185613c41565b8181036080830152613d21818461389b565b90509695505050505050565b60006020820190508181036000830152613d47818461382e565b905092915050565b60006040820190508181036000830152613d69818561382e565b90508181036020830152613d7d818461382e565b90509392505050565b6000602082019050613d9b600083018461388c565b92915050565b60006020820190508181036000830152613dbb81846138d4565b905092915050565b60006020820190508181036000830152613ddc8161390d565b9050919050565b60006020820190508181036000830152613dfc81613930565b9050919050565b60006020820190508181036000830152613e1c81613953565b9050919050565b60006020820190508181036000830152613e3c81613976565b9050919050565b60006020820190508181036000830152613e5c81613999565b9050919050565b60006020820190508181036000830152613e7c816139bc565b9050919050565b60006020820190508181036000830152613e9c816139df565b9050919050565b60006020820190508181036000830152613ebc81613a02565b9050919050565b60006020820190508181036000830152613edc81613a25565b9050919050565b60006020820190508181036000830152613efc81613a48565b9050919050565b60006020820190508181036000830152613f1c81613a6b565b9050919050565b60006020820190508181036000830152613f3c81613a8e565b9050919050565b60006020820190508181036000830152613f5c81613ab1565b9050919050565b60006020820190508181036000830152613f7c81613ad4565b9050919050565b60006020820190508181036000830152613f9c81613af7565b9050919050565b60006020820190508181036000830152613fbc81613b1a565b9050919050565b60006020820190508181036000830152613fdc81613b3d565b9050919050565b60006020820190508181036000830152613ffc81613b60565b9050919050565b6000602082019050818103600083015261401c81613b83565b9050919050565b6000602082019050818103600083015261403c81613ba6565b9050919050565b6000602082019050818103600083015261405c81613bc9565b9050919050565b6000602082019050818103600083015261407c81613bec565b9050919050565b6000602082019050818103600083015261409c81613c0f565b9050919050565b60006020820190506140b86000830184613c41565b92915050565b60006040820190506140d36000830185613c41565b6140e06020830184613c41565b9392505050565b60006140f1614102565b90506140fd8282614403565b919050565b6000604051905090565b600067ffffffffffffffff8211156141275761412661450a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141535761415261450a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561417f5761417e61450a565b5b61418882614574565b9050602081019050919050565b600067ffffffffffffffff8211156141b0576141af61450a565b5b6141b982614574565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061424282614385565b915061424d83614385565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142825761428161447d565b5b828201905092915050565b600061429882614385565b91506142a383614385565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142dc576142db61447d565b5b828202905092915050565b60006142f282614385565b91506142fd83614385565b9250828210156143105761430f61447d565b5b828203905092915050565b600061432682614365565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143bc5780820151818401526020810190506143a1565b838111156143cb576000848401525b50505050565b600060028204905060018216806143e957607f821691505b602082108114156143fd576143fc6144ac565b5b50919050565b61440c82614574565b810181811067ffffffffffffffff8211171561442b5761442a61450a565b5b80604052505050565b600061443f82614385565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144725761447161447d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156145585760046000803e614555600051614585565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f53616c652068617320616c7265616479207374617274656420666f722074686960008201527f7320746f6b656e49640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f74686973204e465420697320756e617661696c61626c65206f7220646f65732060008201527f6e6f742065786973740000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f746f5b5d20616e6420616d6f756e74735b5d206d75737420626520746865207360008201527f616d65206c656e67746800000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420776974686472617720746f206275726e206164647265737300600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f596f7520646f206e6f74206861766520616e79206d696e742063726564697473600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520646f206e6f74206861766520656e6f756768206d696e74206372656460008201527f69747320666f722074686973207472616e73616374696f6e0000000000000000602082015250565b7f6d73672e76616c756520646f6573206e6f74206d61746368207468652070726960008201527f6365206f662074686973204e4654000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520697320616c72656164792070617573656420666f7220746869732060008201527f746f6b656e496400000000000000000000000000000000000000000000000000602082015250565b600060443d1015614c4957614ccc565b614c51614102565b60043d036004823e80513d602482011167ffffffffffffffff82111715614c79575050614ccc565b808201805167ffffffffffffffff811115614c975750505050614ccc565b80602083010160043d038501811115614cb4575050505050614ccc565b614cc382602001850186614403565b82955050505050505b90565b614cd88161431b565b8114614ce357600080fd5b50565b614cef8161432d565b8114614cfa57600080fd5b50565b614d0681614339565b8114614d1157600080fd5b50565b614d1d81614385565b8114614d2857600080fd5b5056fea26469706673582212203421bac4ea3b2cec515f0f6ea9571cdc3ee7728a078dc1a0644aeeea29f6971f64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101cc5760003560e01c80636eceb09c116100f7578063e985e9c511610095578063f5298aca11610064578063f5298aca1461065a578063f75592df14610683578063fe776dd0146106c0578063ff76a861146106fd576101cc565b8063e985e9c5146105a2578063f0f44260146105df578063f242432a14610608578063f2fde38b14610631576101cc565b8063862440e2116100d1578063862440e2146104fc5780638da5cb5b14610525578063a22cb46514610550578063b9d8ed3414610579576101cc565b80636eceb09c146104a5578063715018a6146104ce578063853828b6146104e5576101cc565b80633a66e4b61161016f5780634f1f6baa1161013e5780634f1f6baa146103ff57806361d027b3146104285780636896cb33146104535780636b20c4541461047c576101cc565b80633a66e4b61461033357806342f764181461035c57806347958d51146103855780634e1273f4146103c2576101cc565b80630e3ab61d116101ab5780630e3ab61d146102675780630e89341c146102905780631233ce8d146102cd5780632eb2c2d61461030a576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806308dc9f421461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f391906134df565b61073a565b60405161020591906140a3565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613675565b610803565b6040516102429190613d86565b60405180910390f35b61026560048036038101906102609190613798565b6108e5565b005b34801561027357600080fd5b5061028e600480360381019061028991906136cf565b6109bd565b005b34801561029c57600080fd5b506102b760048036038101906102b291906136cf565b610ad0565b6040516102c49190613da1565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef91906136cf565b610b75565b6040516103019190613da1565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c91906132ae565b610c15565b005b34801561033f57600080fd5b5061035a600480360381019061035591906136cf565b610cb6565b005b34801561036857600080fd5b50610383600480360381019061037e9190613758565b610dc9565b005b34801561039157600080fd5b506103ac60048036038101906103a791906134df565b610e74565b6040516103b991906140a3565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613572565b610e99565b6040516103f69190613d2d565b60405180910390f35b34801561040b57600080fd5b50610426600480360381019061042191906135ea565b610fb2565b005b34801561043457600080fd5b5061043d611132565b60405161044a9190613c50565b60405180910390f35b34801561045f57600080fd5b5061047a6004803603810190610475919061351f565b611158565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613414565b611240565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613798565b6112dd565b005b3480156104da57600080fd5b506104e361147b565b005b3480156104f157600080fd5b506104fa611503565b005b34801561050857600080fd5b50610523600480360381019061051e91906136fc565b61167c565b005b34801561053157600080fd5b5061053a611724565b6040516105479190613c50565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061349f565b61174e565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613758565b6118cf565b005b3480156105ae57600080fd5b506105c960048036038101906105c4919061326e565b611967565b6040516105d69190613d86565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190613241565b6119fb565b005b34801561061457600080fd5b5061062f600480360381019061062a919061337d565b611abb565b005b34801561063d57600080fd5b5061065860048036038101906106539190613241565b611b5c565b005b34801561066657600080fd5b50610681600480360381019061067c919061351f565b611c54565b005b34801561068f57600080fd5b506106aa60048036038101906106a591906136cf565b611cf1565b6040516106b79190613d86565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e291906136cf565b611d11565b6040516106f491906140a3565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f91906134df565b611d29565b60405161073191906140a3565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290613e23565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ce57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108de57506108dd82611d84565b5b9050919050565b600115156006600085815260200190815260200160002060009054906101000a900460ff1615151461094c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094390613e63565b60405180910390fd5b81600560008581526020019081526020016000205461096b919061428d565b34146109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a390613fe3565b60405180910390fd5b6109b833848484611dee565b505050565b6109c5611f84565b73ffffffffffffffffffffffffffffffffffffffff166109e3611724565b73ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090613fa3565b60405180910390fd5b600115156006600083815260200190815260200160002060009054906101000a900460ff1615151415610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890613e03565b60405180910390fd5b60016006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6060600460008381526020019081526020016000208054610af0906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1c906143d1565b8015610b695780601f10610b3e57610100808354040283529160200191610b69565b820191906000526020600020905b815481529060010190602001808311610b4c57829003601f168201915b50505050509050919050565b60046020528060005260406000206000915090508054610b94906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc0906143d1565b8015610c0d5780601f10610be257610100808354040283529160200191610c0d565b820191906000526020600020905b815481529060010190602001808311610bf057829003601f168201915b505050505081565b610c1d611f84565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c635750610c6285610c5d611f84565b611967565b5b610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990613f23565b60405180910390fd5b610caf8585858585611f8c565b5050505050565b610cbe611f84565b73ffffffffffffffffffffffffffffffffffffffff16610cdc611724565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613fa3565b60405180910390fd5b600015156006600083815260200190815260200160002060009054906101000a900460ff1615151415610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190614083565b60405180910390fd5b60006006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610dd1611f84565b73ffffffffffffffffffffffffffffffffffffffff16610def611724565b73ffffffffffffffffffffffffffffffffffffffff1614610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c90613fa3565b60405180910390fd5b80670de0b6b3a7640000610e59919061428d565b60056000848152602001908152602001600020819055505050565b6007602052816000526040600020602052806000526040600020600091509150505481565b60608151835114610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690614023565b60405180910390fd5b6000835167ffffffffffffffff811115610efc57610efb61450a565b5b604051908082528060200260200182016040528015610f2a5781602001602082028036833780820191505090505b50905060005b8451811015610fa757610f77858281518110610f4f57610f4e6144db565b5b6020026020010151858381518110610f6a57610f696144db565b5b602002602001015161073a565b828281518110610f8a57610f896144db565b5b60200260200101818152505080610fa090614434565b9050610f30565b508091505092915050565b610fba611f84565b73ffffffffffffffffffffffffffffffffffffffff16610fd8611724565b73ffffffffffffffffffffffffffffffffffffffff161461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590613fa3565b60405180910390fd5b8151835114611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990613ea3565b60405180910390fd5b60005b835181101561112c57828181518110611091576110906144db565b5b6020026020010151600760008684815181106110b0576110af6144db565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008282546111129190614237565b92505081905550808061112490614434565b915050611075565b50505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611160611f84565b73ffffffffffffffffffffffffffffffffffffffff1661117e611724565b73ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90613fa3565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008282546112349190614237565b92505081905550505050565b611248611f84565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061128e575061128d83611288611f84565b611967565b5b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613ee3565b60405180910390fd5b6112d88383836122a0565b505050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205411611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613f83565b60405180910390fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020541015611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90613fc3565b60405180910390fd5b61140f33848484611dee565b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020600082825461146f91906142e7565b92505081905550505050565b611483611f84565b73ffffffffffffffffffffffffffffffffffffffff166114a1611724565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613fa3565b60405180910390fd5b6115016000612551565b565b61150b611f84565b73ffffffffffffffffffffffffffffffffffffffff16611529611724565b73ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613fa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613ec3565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611679573d6000803e3d6000fd5b50565b611684611f84565b73ffffffffffffffffffffffffffffffffffffffff166116a2611724565b73ffffffffffffffffffffffffffffffffffffffff16146116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90613fa3565b60405180910390fd5b8060046000848152602001908152602001600020908051906020019061171f929190612f19565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1661176d611f84565b73ffffffffffffffffffffffffffffffffffffffff1614156117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614003565b60405180910390fd5b80600160006117d1611f84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661187e611f84565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c39190613d86565b60405180910390a35050565b6118d7611f84565b73ffffffffffffffffffffffffffffffffffffffff166118f5611724565b73ffffffffffffffffffffffffffffffffffffffff161461194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613fa3565b60405180910390fd5b8060056000848152602001908152602001600020819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a03611f84565b73ffffffffffffffffffffffffffffffffffffffff16611a21611724565b73ffffffffffffffffffffffffffffffffffffffff1614611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e90613fa3565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ac3611f84565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611b095750611b0885611b03611f84565b611967565b5b611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90613ee3565b60405180910390fd5b611b558585858585612617565b5050505050565b611b64611f84565b73ffffffffffffffffffffffffffffffffffffffff16611b82611724565b73ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90613fa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f90613e43565b60405180910390fd5b611c5181612551565b50565b611c5c611f84565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611ca25750611ca183611c9c611f84565b611967565b5b611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613ee3565b60405180910390fd5b611cec838383612899565b505050565b60066020528060005260406000206000915054906101000a900460ff1681565b60056020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590614063565b60405180910390fd5b6000611e68611f84565b9050611e8981600087611e7a88612ab6565b611e8388612ab6565b87612b30565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee89190614237565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611f669291906140be565b60405180910390a4611f7d81600087878787612b38565b5050505050565b600033905090565b8151835114611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614043565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790613f03565b60405180910390fd5b600061204a611f84565b905061205a818787878787612b30565b60005b845181101561220b57600085828151811061207b5761207a6144db565b5b60200260200101519050600085838151811061209a576120996144db565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561213b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213290613f63565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121f09190614237565b925050819055505050508061220490614434565b905061205d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612282929190613d4f565b60405180910390a4612298818787878787612d1f565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790613f43565b60405180910390fd5b8051825114612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90614043565b60405180910390fd5b600061235e611f84565b905061237e81856000868660405180602001604052806000815250612b30565b60005b83518110156124cb57600084828151811061239f5761239e6144db565b5b6020026020010151905060008483815181106123be576123bd6144db565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690613e83565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806124c390614434565b915050612381565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612543929190613d4f565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267e90613f03565b60405180910390fd5b6000612691611f84565b90506126b18187876126a288612ab6565b6126ab88612ab6565b87612b30565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90613f63565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127fd9190614237565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161287a9291906140be565b60405180910390a4612890828888888888612b38565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090613f43565b60405180910390fd5b6000612913611f84565b90506129438185600061292587612ab6565b61292e87612ab6565b60405180602001604052806000815250612b30565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190613e83565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612aa79291906140be565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115612ad557612ad461450a565b5b604051908082528060200260200182016040528015612b035781602001602082028036833780820191505090505b5090508281600081518110612b1b57612b1a6144db565b5b60200260200101818152505080915050919050565b505050505050565b612b578473ffffffffffffffffffffffffffffffffffffffff16612f06565b15612d17578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612b9d959493929190613cd3565b602060405180830381600087803b158015612bb757600080fd5b505af1925050508015612be857506040513d601f19601f82011682018060405250810190612be591906136a2565b60015b612c8e57612bf4614539565b806308c379a01415612c515750612c09614c39565b80612c145750612c53565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c489190613da1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8590613dc3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c90613de3565b60405180910390fd5b505b505050505050565b612d3e8473ffffffffffffffffffffffffffffffffffffffff16612f06565b15612efe578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612d84959493929190613c6b565b602060405180830381600087803b158015612d9e57600080fd5b505af1925050508015612dcf57506040513d601f19601f82011682018060405250810190612dcc91906136a2565b60015b612e7557612ddb614539565b806308c379a01415612e385750612df0614c39565b80612dfb5750612e3a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2f9190613da1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6c90613dc3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef390613de3565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612f25906143d1565b90600052602060002090601f016020900481019282612f475760008555612f8e565b82601f10612f6057805160ff1916838001178555612f8e565b82800160010185558215612f8e579182015b82811115612f8d578251825591602001919060010190612f72565b5b509050612f9b9190612f9f565b5090565b5b80821115612fb8576000816000905550600101612fa0565b5090565b6000612fcf612fca8461410c565b6140e7565b90508083825260208201905082856020860282011115612ff257612ff1614560565b5b60005b8581101561302257816130088882613120565b845260208401935060208301925050600181019050612ff5565b5050509392505050565b600061303f61303a84614138565b6140e7565b9050808382526020820190508285602086028201111561306257613061614560565b5b60005b858110156130925781613078888261322c565b845260208401935060208301925050600181019050613065565b5050509392505050565b60006130af6130aa84614164565b6140e7565b9050828152602081018484840111156130cb576130ca614565565b5b6130d684828561438f565b509392505050565b60006130f16130ec84614195565b6140e7565b90508281526020810184848401111561310d5761310c614565565b5b61311884828561438f565b509392505050565b60008135905061312f81614ccf565b92915050565b600082601f83011261314a5761314961455b565b5b813561315a848260208601612fbc565b91505092915050565b600082601f8301126131785761317761455b565b5b813561318884826020860161302c565b91505092915050565b6000813590506131a081614ce6565b92915050565b6000813590506131b581614cfd565b92915050565b6000815190506131ca81614cfd565b92915050565b600082601f8301126131e5576131e461455b565b5b81356131f584826020860161309c565b91505092915050565b600082601f8301126132135761321261455b565b5b81356132238482602086016130de565b91505092915050565b60008135905061323b81614d14565b92915050565b6000602082840312156132575761325661456f565b5b600061326584828501613120565b91505092915050565b600080604083850312156132855761328461456f565b5b600061329385828601613120565b92505060206132a485828601613120565b9150509250929050565b600080600080600060a086880312156132ca576132c961456f565b5b60006132d888828901613120565b95505060206132e988828901613120565b945050604086013567ffffffffffffffff81111561330a5761330961456a565b5b61331688828901613163565b935050606086013567ffffffffffffffff8111156133375761333661456a565b5b61334388828901613163565b925050608086013567ffffffffffffffff8111156133645761336361456a565b5b613370888289016131d0565b9150509295509295909350565b600080600080600060a086880312156133995761339861456f565b5b60006133a788828901613120565b95505060206133b888828901613120565b94505060406133c98882890161322c565b93505060606133da8882890161322c565b925050608086013567ffffffffffffffff8111156133fb576133fa61456a565b5b613407888289016131d0565b9150509295509295909350565b60008060006060848603121561342d5761342c61456f565b5b600061343b86828701613120565b935050602084013567ffffffffffffffff81111561345c5761345b61456a565b5b61346886828701613163565b925050604084013567ffffffffffffffff8111156134895761348861456a565b5b61349586828701613163565b9150509250925092565b600080604083850312156134b6576134b561456f565b5b60006134c485828601613120565b92505060206134d585828601613191565b9150509250929050565b600080604083850312156134f6576134f561456f565b5b600061350485828601613120565b92505060206135158582860161322c565b9150509250929050565b6000806000606084860312156135385761353761456f565b5b600061354686828701613120565b93505060206135578682870161322c565b92505060406135688682870161322c565b9150509250925092565b600080604083850312156135895761358861456f565b5b600083013567ffffffffffffffff8111156135a7576135a661456a565b5b6135b385828601613135565b925050602083013567ffffffffffffffff8111156135d4576135d361456a565b5b6135e085828601613163565b9150509250929050565b6000806000606084860312156136035761360261456f565b5b600084013567ffffffffffffffff8111156136215761362061456a565b5b61362d86828701613135565b935050602084013567ffffffffffffffff81111561364e5761364d61456a565b5b61365a86828701613163565b925050604061366b8682870161322c565b9150509250925092565b60006020828403121561368b5761368a61456f565b5b6000613699848285016131a6565b91505092915050565b6000602082840312156136b8576136b761456f565b5b60006136c6848285016131bb565b91505092915050565b6000602082840312156136e5576136e461456f565b5b60006136f38482850161322c565b91505092915050565b600080604083850312156137135761371261456f565b5b60006137218582860161322c565b925050602083013567ffffffffffffffff8111156137425761374161456a565b5b61374e858286016131fe565b9150509250929050565b6000806040838503121561376f5761376e61456f565b5b600061377d8582860161322c565b925050602061378e8582860161322c565b9150509250929050565b6000806000606084860312156137b1576137b061456f565b5b60006137bf8682870161322c565b93505060206137d08682870161322c565b925050604084013567ffffffffffffffff8111156137f1576137f061456a565b5b6137fd868287016131d0565b9150509250925092565b60006138138383613c32565b60208301905092915050565b6138288161431b565b82525050565b6000613839826141d6565b6138438185614204565b935061384e836141c6565b8060005b8381101561387f5781516138668882613807565b9750613871836141f7565b925050600181019050613852565b5085935050505092915050565b6138958161432d565b82525050565b60006138a6826141e1565b6138b08185614215565b93506138c081856020860161439e565b6138c981614574565b840191505092915050565b60006138df826141ec565b6138e98185614226565b93506138f981856020860161439e565b61390281614574565b840191505092915050565b600061391a603483614226565b915061392582614592565b604082019050919050565b600061393d602883614226565b9150613948826145e1565b604082019050919050565b6000613960602983614226565b915061396b82614630565b604082019050919050565b6000613983602b83614226565b915061398e8261467f565b604082019050919050565b60006139a6602683614226565b91506139b1826146ce565b604082019050919050565b60006139c9602983614226565b91506139d48261471d565b604082019050919050565b60006139ec602483614226565b91506139f78261476c565b604082019050919050565b6000613a0f602a83614226565b9150613a1a826147bb565b604082019050919050565b6000613a32601f83614226565b9150613a3d8261480a565b602082019050919050565b6000613a55602983614226565b9150613a6082614833565b604082019050919050565b6000613a78602583614226565b9150613a8382614882565b604082019050919050565b6000613a9b603283614226565b9150613aa6826148d1565b604082019050919050565b6000613abe602383614226565b9150613ac982614920565b604082019050919050565b6000613ae1602a83614226565b9150613aec8261496f565b604082019050919050565b6000613b04602083614226565b9150613b0f826149be565b602082019050919050565b6000613b27602083614226565b9150613b32826149e7565b602082019050919050565b6000613b4a603883614226565b9150613b5582614a10565b604082019050919050565b6000613b6d602e83614226565b9150613b7882614a5f565b604082019050919050565b6000613b90602983614226565b9150613b9b82614aae565b604082019050919050565b6000613bb3602983614226565b9150613bbe82614afd565b604082019050919050565b6000613bd6602883614226565b9150613be182614b4c565b604082019050919050565b6000613bf9602183614226565b9150613c0482614b9b565b604082019050919050565b6000613c1c602783614226565b9150613c2782614bea565b604082019050919050565b613c3b81614385565b82525050565b613c4a81614385565b82525050565b6000602082019050613c65600083018461381f565b92915050565b600060a082019050613c80600083018861381f565b613c8d602083018761381f565b8181036040830152613c9f818661382e565b90508181036060830152613cb3818561382e565b90508181036080830152613cc7818461389b565b90509695505050505050565b600060a082019050613ce8600083018861381f565b613cf5602083018761381f565b613d026040830186613c41565b613d0f6060830185613c41565b8181036080830152613d21818461389b565b90509695505050505050565b60006020820190508181036000830152613d47818461382e565b905092915050565b60006040820190508181036000830152613d69818561382e565b90508181036020830152613d7d818461382e565b90509392505050565b6000602082019050613d9b600083018461388c565b92915050565b60006020820190508181036000830152613dbb81846138d4565b905092915050565b60006020820190508181036000830152613ddc8161390d565b9050919050565b60006020820190508181036000830152613dfc81613930565b9050919050565b60006020820190508181036000830152613e1c81613953565b9050919050565b60006020820190508181036000830152613e3c81613976565b9050919050565b60006020820190508181036000830152613e5c81613999565b9050919050565b60006020820190508181036000830152613e7c816139bc565b9050919050565b60006020820190508181036000830152613e9c816139df565b9050919050565b60006020820190508181036000830152613ebc81613a02565b9050919050565b60006020820190508181036000830152613edc81613a25565b9050919050565b60006020820190508181036000830152613efc81613a48565b9050919050565b60006020820190508181036000830152613f1c81613a6b565b9050919050565b60006020820190508181036000830152613f3c81613a8e565b9050919050565b60006020820190508181036000830152613f5c81613ab1565b9050919050565b60006020820190508181036000830152613f7c81613ad4565b9050919050565b60006020820190508181036000830152613f9c81613af7565b9050919050565b60006020820190508181036000830152613fbc81613b1a565b9050919050565b60006020820190508181036000830152613fdc81613b3d565b9050919050565b60006020820190508181036000830152613ffc81613b60565b9050919050565b6000602082019050818103600083015261401c81613b83565b9050919050565b6000602082019050818103600083015261403c81613ba6565b9050919050565b6000602082019050818103600083015261405c81613bc9565b9050919050565b6000602082019050818103600083015261407c81613bec565b9050919050565b6000602082019050818103600083015261409c81613c0f565b9050919050565b60006020820190506140b86000830184613c41565b92915050565b60006040820190506140d36000830185613c41565b6140e06020830184613c41565b9392505050565b60006140f1614102565b90506140fd8282614403565b919050565b6000604051905090565b600067ffffffffffffffff8211156141275761412661450a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141535761415261450a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561417f5761417e61450a565b5b61418882614574565b9050602081019050919050565b600067ffffffffffffffff8211156141b0576141af61450a565b5b6141b982614574565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061424282614385565b915061424d83614385565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142825761428161447d565b5b828201905092915050565b600061429882614385565b91506142a383614385565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142dc576142db61447d565b5b828202905092915050565b60006142f282614385565b91506142fd83614385565b9250828210156143105761430f61447d565b5b828203905092915050565b600061432682614365565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143bc5780820151818401526020810190506143a1565b838111156143cb576000848401525b50505050565b600060028204905060018216806143e957607f821691505b602082108114156143fd576143fc6144ac565b5b50919050565b61440c82614574565b810181811067ffffffffffffffff8211171561442b5761442a61450a565b5b80604052505050565b600061443f82614385565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144725761447161447d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156145585760046000803e614555600051614585565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f53616c652068617320616c7265616479207374617274656420666f722074686960008201527f7320746f6b656e49640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f74686973204e465420697320756e617661696c61626c65206f7220646f65732060008201527f6e6f742065786973740000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f746f5b5d20616e6420616d6f756e74735b5d206d75737420626520746865207360008201527f616d65206c656e67746800000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420776974686472617720746f206275726e206164647265737300600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f596f7520646f206e6f74206861766520616e79206d696e742063726564697473600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520646f206e6f74206861766520656e6f756768206d696e74206372656460008201527f69747320666f722074686973207472616e73616374696f6e0000000000000000602082015250565b7f6d73672e76616c756520646f6573206e6f74206d61746368207468652070726960008201527f6365206f662074686973204e4654000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520697320616c72656164792070617573656420666f7220746869732060008201527f746f6b656e496400000000000000000000000000000000000000000000000000602082015250565b600060443d1015614c4957614ccc565b614c51614102565b60043d036004823e80513d602482011167ffffffffffffffff82111715614c79575050614ccc565b808201805167ffffffffffffffff811115614c975750505050614ccc565b80602083010160043d038501811115614cb4575050505050614ccc565b614cc382602001850186614403565b82955050505050505b90565b614cd88161431b565b8114614ce357600080fd5b50565b614cef8161432d565b8114614cfa57600080fd5b50565b614d0681614339565b8114614d1157600080fd5b50565b614d1d81614385565b8114614d2857600080fd5b5056fea26469706673582212203421bac4ea3b2cec515f0f6ea9571cdc3ee7728a078dc1a0644aeeea29f6971f64736f6c63430008070033
Deployed Bytecode Sourcemap
34695:2875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18783:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17806:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35140:325;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36510:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35877:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34792:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20878:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36712:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36379:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34938:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19180:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37108:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35014:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37444:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34333:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35473:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1361:94;;;;;;;;;;;;;:::i;:::-;;36914:186;;;;;;;;;;;;;:::i;:::-;;36142:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;710:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19777:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36258:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20160:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35050:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20400:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1610:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34004:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34887:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34838:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36001:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18783:231;18869:7;18916:1;18897:21;;:7;:21;;;;18889:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18984:9;:13;18994:2;18984:13;;;;;;;;;;;:22;18998:7;18984:22;;;;;;;;;;;;;;;;18977:29;;18783:231;;;;:::o;17806:310::-;17908:4;17960:26;17945:41;;;:11;:41;;;;:110;;;;18018:37;18003:52;;;:11;:52;;;;17945:110;:163;;;;18072:36;18096:11;18072:23;:36::i;:::-;17945:163;17925:183;;17806:310;;;:::o;35140:325::-;35260:4;35240:24;;:12;:16;35253:2;35240:16;;;;;;;;;;;;;;;;;;;;;:24;;;35232:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;35354:6;35342:7;:11;35350:2;35342:11;;;;;;;;;;;;:18;;;;:::i;:::-;35329:9;:31;35321:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35422:35;35428:10;35440:2;35444:6;35452:4;35422:5;:35::i;:::-;35140:325;;;:::o;36510:194::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:4:::1;36582:29;;:12;:21;36595:7;36582:21;;;;;;;;;;;;;;;;;;;;;:29;;;;36574:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;36692:4;36668:12;:21;36681:7;36668:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;36510:194:::0;:::o;35877:116::-;35937:13;35970:5;:14;35976:7;35970:14;;;;;;;;;;;35963:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35877:116;;;:::o;34792:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20878:442::-;21119:12;:10;:12::i;:::-;21111:20;;:4;:20;;;:60;;;;21135:36;21152:4;21158:12;:10;:12::i;:::-;21135:16;:36::i;:::-;21111:60;21089:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21260:52;21283:4;21289:2;21293:3;21298:7;21307:4;21260:22;:52::i;:::-;20878:442;;;;;:::o;36712:194::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36809:5:::1;36784:30;;:12;:21;36797:7;36784:21;;;;;;;;;;;;;;;;;;;;;:30;;;;36776:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;36893:5;36869:12;:21;36882:7;36869:21;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36712:194:::0;:::o;36379:123::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36489:5:::1;36480:7;36479:15;;;;:::i;:::-;36460:7;:16;36468:7;36460:16;;;;;;;;;;;:34;;;;36379:123:::0;;:::o;34938:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19180:524::-;19336:16;19397:3;:10;19378:8;:15;:29;19370:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;19466:30;19513:8;:15;19499:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19466:63;;19547:9;19542:122;19566:8;:15;19562:1;:19;19542:122;;;19622:30;19632:8;19641:1;19632:11;;;;;;;;:::i;:::-;;;;;;;;19645:3;19649:1;19645:6;;;;;;;;:::i;:::-;;;;;;;;19622:9;:30::i;:::-;19603:13;19617:1;19603:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;19583:3;;;;:::i;:::-;;;19542:122;;;;19683:13;19676:20;;;19180:524;;;;:::o;37108:328::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37251:7:::1;:14;37238:2;:9;:27;37230:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;37330:9;37325:104;37349:2;:9;37345:1;:13;37325:104;;;37407:7;37415:1;37407:10;;;;;;;;:::i;:::-;;;;;;;;37379:8;:15;37388:2;37391:1;37388:5;;;;;;;;:::i;:::-;;;;;;;;37379:15;;;;;;;;;;;;;;;:24;37395:7;37379:24;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;37360:3;;;;;:::i;:::-;;;;37325:104;;;;37108:328:::0;;;:::o;35014:23::-;;;;;;;;;;;;;:::o;37444:123::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37554:5:::1;37529:8;:12;37538:2;37529:12;;;;;;;;;;;;;;;:21;37542:7;37529:21;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;37444:123:::0;;;:::o;34333:353::-;34509:12;:10;:12::i;:::-;34498:23;;:7;:23;;;:66;;;;34525:39;34542:7;34551:12;:10;:12::i;:::-;34525:16;:39::i;:::-;34498:66;34476:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;34646:32;34657:7;34666:3;34671:6;34646:10;:32::i;:::-;34333:353;;;:::o;35473:396::-;35605:1;35573:8;:20;35582:10;35573:20;;;;;;;;;;;;;;;:29;35594:7;35573:29;;;;;;;;;;;;:33;35565:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;35695:6;35662:8;:20;35671:10;35662:20;;;;;;;;;;;;;;;:29;35683:7;35662:29;;;;;;;;;;;;:39;;35654:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;35773:40;35779:10;35791:7;35800:6;35808:4;35773:5;:40::i;:::-;35855:6;35824:8;:20;35833:10;35824:20;;;;;;;;;;;;;;;:29;35845:7;35824:29;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;35473:396;;;:::o;1361:94::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1426:21:::1;1444:1;1426:9;:21::i;:::-;1361:94::o:0;36914:186::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36994:1:::1;36974:22;;:8;;;;;;;;;;;:22;;;;36966:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37051:8;;;;;;;;;;;37043:26;;:49;37070:21;37043:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36914:186::o:0;36142:108::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36239:3:::1;36222:5;:14;36228:7;36222:14;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;36142:108:::0;;:::o;710:87::-;756:7;783:6;;;;;;;;;;;776:13;;710:87;:::o;19777:311::-;19896:8;19880:24;;:12;:10;:12::i;:::-;:24;;;;19872:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;20008:8;19963:18;:32;19982:12;:10;:12::i;:::-;19963:32;;;;;;;;;;;;;;;:42;19996:8;19963:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20061:8;20032:48;;20047:12;:10;:12::i;:::-;20032:48;;;20071:8;20032:48;;;;;;:::i;:::-;;;;;;;;19777:311;;:::o;36258:113::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36358:5:::1;36339:7;:16;36347:7;36339:16;;;;;;;;;;;:24;;;;36258:113:::0;;:::o;20160:168::-;20259:4;20283:18;:27;20302:7;20283:27;;;;;;;;;;;;;;;:37;20311:8;20283:37;;;;;;;;;;;;;;;;;;;;;;;;;20276:44;;20160:168;;;;:::o;35050:82::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35122:2:::1;35111:8;;:13;;;;;;;;;;;;;;;;;;35050:82:::0;:::o;20400:401::-;20616:12;:10;:12::i;:::-;20608:20;;:4;:20;;;:60;;;;20632:36;20649:4;20655:12;:10;:12::i;:::-;20632:16;:36::i;:::-;20608:60;20586:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;20748:45;20766:4;20772:2;20776;20780:6;20788:4;20748:17;:45::i;:::-;20400:401;;;;;:::o;1610:192::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1719:1:::1;1699:22;;:8;:22;;;;1691:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1775:19;1785:8;1775:9;:19::i;:::-;1610:192:::0;:::o;34004:321::-;34155:12;:10;:12::i;:::-;34144:23;;:7;:23;;;:66;;;;34171:39;34188:7;34197:12;:10;:12::i;:::-;34171:16;:39::i;:::-;34144:66;34122:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;34292:25;34298:7;34307:2;34311:5;34292;:25::i;:::-;34004:321;;;:::o;34887:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;34838:42::-;;;;;;;;;;;;;;;;;:::o;36001:133::-;36073:7;36099:8;:17;36108:7;36099:17;;;;;;;;;;;;;;;:26;36117:7;36099:26;;;;;;;;;;;;36092:34;;36001:133;;;;:::o;10501:157::-;10586:4;10625:25;10610:40;;;:11;:40;;;;10603:47;;10501:157;;;:::o;25369:599::-;25546:1;25527:21;;:7;:21;;;;25519:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25599:16;25618:12;:10;:12::i;:::-;25599:31;;25643:107;25664:8;25682:1;25686:7;25695:21;25713:2;25695:17;:21::i;:::-;25718:25;25736:6;25718:17;:25::i;:::-;25745:4;25643:20;:107::i;:::-;25789:6;25763:9;:13;25773:2;25763:13;;;;;;;;;;;:22;25777:7;25763:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;25848:7;25811:57;;25844:1;25811:57;;25826:8;25811:57;;;25857:2;25861:6;25811:57;;;;;;;:::i;:::-;;;;;;;;25881:79;25912:8;25930:1;25934:7;25943:2;25947:6;25955:4;25881:30;:79::i;:::-;25508:460;25369:599;;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;22962:1074::-;23189:7;:14;23175:3;:10;:28;23167:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;23281:1;23267:16;;:2;:16;;;;23259:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23338:16;23357:12;:10;:12::i;:::-;23338:31;;23382:60;23403:8;23413:4;23419:2;23423:3;23428:7;23437:4;23382:20;:60::i;:::-;23460:9;23455:421;23479:3;:10;23475:1;:14;23455:421;;;23511:10;23524:3;23528:1;23524:6;;;;;;;;:::i;:::-;;;;;;;;23511:19;;23545:14;23562:7;23570:1;23562:10;;;;;;;;:::i;:::-;;;;;;;;23545:27;;23589:19;23611:9;:13;23621:2;23611:13;;;;;;;;;;;:19;23625:4;23611:19;;;;;;;;;;;;;;;;23589:41;;23668:6;23653:11;:21;;23645:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23801:6;23787:11;:20;23765:9;:13;23775:2;23765:13;;;;;;;;;;;:19;23779:4;23765:19;;;;;;;;;;;;;;;:42;;;;23858:6;23837:9;:13;23847:2;23837:13;;;;;;;;;;;:17;23851:2;23837:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23496:380;;;23491:3;;;;:::i;:::-;;;23455:421;;;;23923:2;23893:47;;23917:4;23893:47;;23907:8;23893:47;;;23927:3;23932:7;23893:47;;;;;;;:::i;:::-;;;;;;;;23953:75;23989:8;23999:4;24005:2;24009:3;24014:7;24023:4;23953:35;:75::i;:::-;23156:880;22962:1074;;;;;:::o;28196:918::-;28370:1;28351:21;;:7;:21;;;;28343:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28445:7;:14;28431:3;:10;:28;28423:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28517:16;28536:12;:10;:12::i;:::-;28517:31;;28561:69;28582:8;28592:7;28609:1;28613:3;28618:7;28561:69;;;;;;;;;;;;:20;:69::i;:::-;28648:9;28643:388;28667:3;:10;28663:1;:14;28643:388;;;28699:10;28712:3;28716:1;28712:6;;;;;;;;:::i;:::-;;;;;;;;28699:19;;28733:14;28750:7;28758:1;28750:10;;;;;;;;:::i;:::-;;;;;;;;28733:27;;28777:22;28802:9;:13;28812:2;28802:13;;;;;;;;;;;:22;28816:7;28802:22;;;;;;;;;;;;;;;;28777:47;;28865:6;28847:14;:24;;28839:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28998:6;28981:14;:23;28956:9;:13;28966:2;28956:13;;;;;;;;;;;:22;28970:7;28956:22;;;;;;;;;;;;;;;:48;;;;28684:347;;;28679:3;;;;;:::i;:::-;;;;28643:388;;;;29089:1;29048:58;;29072:7;29048:58;;29062:8;29048:58;;;29093:3;29098:7;29048:58;;;;;;;:::i;:::-;;;;;;;;28332:782;28196:918;;;:::o;1810:173::-;1866:16;1885:6;;;;;;;;;;;1866:25;;1911:8;1902:6;;:17;;;;;;;;;;;;;;;;;;1966:8;1935:40;;1956:8;1935:40;;;;;;;;;;;;1855:128;1810:173;:::o;21784:820::-;21986:1;21972:16;;:2;:16;;;;21964:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22043:16;22062:12;:10;:12::i;:::-;22043:31;;22087:96;22108:8;22118:4;22124:2;22128:21;22146:2;22128:17;:21::i;:::-;22151:25;22169:6;22151:17;:25::i;:::-;22178:4;22087:20;:96::i;:::-;22196:19;22218:9;:13;22228:2;22218:13;;;;;;;;;;;:19;22232:4;22218:19;;;;;;;;;;;;;;;;22196:41;;22271:6;22256:11;:21;;22248:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22396:6;22382:11;:20;22360:9;:13;22370:2;22360:13;;;;;;;;;;;:19;22374:4;22360:19;;;;;;;;;;;;;;;:42;;;;22445:6;22424:9;:13;22434:2;22424:13;;;;;;;;;;;:17;22438:2;22424:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;22500:2;22469:46;;22494:4;22469:46;;22484:8;22469:46;;;22504:2;22508:6;22469:46;;;;;;;:::i;:::-;;;;;;;;22528:68;22559:8;22569:4;22575:2;22579;22583:6;22591:4;22528:30;:68::i;:::-;21953:651;;21784:820;;;;;:::o;27318:675::-;27467:1;27448:21;;:7;:21;;;;27440:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27522:16;27541:12;:10;:12::i;:::-;27522:31;;27566:105;27587:8;27597:7;27614:1;27618:21;27636:2;27618:17;:21::i;:::-;27641:25;27659:6;27641:17;:25::i;:::-;27566:105;;;;;;;;;;;;:20;:105::i;:::-;27684:22;27709:9;:13;27719:2;27709:13;;;;;;;;;;;:22;27723:7;27709:22;;;;;;;;;;;;;;;;27684:47;;27768:6;27750:14;:24;;27742:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27893:6;27876:14;:23;27851:9;:13;27861:2;27851:13;;;;;;;;;;;:22;27865:7;27851:22;;;;;;;;;;;;;;;:48;;;;27970:1;27928:57;;27953:7;27928:57;;27943:8;27928:57;;;27974:2;27978:6;27928:57;;;;;;;:::i;:::-;;;;;;;;27429:564;;27318:675;;;:::o;31872:198::-;31938:16;31967:22;32006:1;31992:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31967:41;;32030:7;32019:5;32025:1;32019:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;32057:5;32050:12;;;31872:198;;;:::o;30070:221::-;;;;;;;:::o;30299:744::-;30514:15;:2;:13;;;:15::i;:::-;30510:526;;;30567:2;30550:38;;;30589:8;30599:4;30605:2;30609:6;30617:4;30550:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30546:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;30898:6;30891:14;;;;;;;;;;;:::i;:::-;;;;;;;;30546:479;;;30947:62;;;;;;;;;;:::i;:::-;;;;;;;;30546:479;30684:43;;;30672:55;;;:8;:55;;;;30668:154;;30752:50;;;;;;;;;;:::i;:::-;;;;;;;;30668:154;30623:214;30510:526;30299:744;;;;;;:::o;31051:813::-;31291:15;:2;:13;;;:15::i;:::-;31287:570;;;31344:2;31327:43;;;31371:8;31381:4;31387:3;31392:7;31401:4;31327:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31323:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;31719:6;31712:14;;;;;;;;;;;:::i;:::-;;;;;;;;31323:523;;;31768:62;;;;;;;;;;:::i;:::-;;;;;;;;31323:523;31500:48;;;31488:60;;;:8;:60;;;;31484:159;;31573:50;;;;;;;;;;:::i;:::-;;;;;;;;31484:159;31407:251;31287:570;31051:813;;;;;;:::o;2600:387::-;2660:4;2868:12;2935:7;2923:20;2915:28;;2978:1;2971:4;:8;2964:15;;;2600:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722: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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1039::-;8105:6;8113;8121;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8451:2;8440:9;8436:18;8423:32;8482:18;8474:6;8471:30;8468:117;;;8504:79;;:::i;:::-;8468:117;8609:78;8679:7;8670:6;8659:9;8655:22;8609:78;:::i;:::-;8599:88;;8394:303;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;7978:1039;;;;;:::o;9023:468::-;9088:6;9096;9145:2;9133:9;9124:7;9120:23;9116:32;9113:119;;;9151:79;;:::i;:::-;9113:119;9271:1;9296:53;9341:7;9332:6;9321:9;9317:22;9296:53;:::i;:::-;9286:63;;9242:117;9398:2;9424:50;9466:7;9457:6;9446:9;9442:22;9424:50;:::i;:::-;9414:60;;9369:115;9023:468;;;;;:::o;9497:474::-;9565:6;9573;9622:2;9610:9;9601:7;9597:23;9593:32;9590:119;;;9628:79;;:::i;:::-;9590:119;9748:1;9773:53;9818:7;9809:6;9798:9;9794:22;9773:53;:::i;:::-;9763:63;;9719:117;9875:2;9901:53;9946:7;9937:6;9926:9;9922:22;9901:53;:::i;:::-;9891:63;;9846:118;9497:474;;;;;:::o;9977:619::-;10054:6;10062;10070;10119:2;10107:9;10098:7;10094:23;10090:32;10087:119;;;10125:79;;:::i;:::-;10087:119;10245:1;10270:53;10315:7;10306:6;10295:9;10291:22;10270:53;:::i;:::-;10260:63;;10216:117;10372:2;10398:53;10443:7;10434:6;10423:9;10419:22;10398:53;:::i;:::-;10388:63;;10343:118;10500:2;10526:53;10571:7;10562:6;10551:9;10547:22;10526:53;:::i;:::-;10516:63;;10471:118;9977:619;;;;;:::o;10602:894::-;10720:6;10728;10777:2;10765:9;10756:7;10752:23;10748:32;10745:119;;;10783:79;;:::i;:::-;10745:119;10931:1;10920:9;10916:17;10903:31;10961:18;10953:6;10950:30;10947:117;;;10983:79;;:::i;:::-;10947:117;11088:78;11158:7;11149:6;11138:9;11134:22;11088:78;:::i;:::-;11078:88;;10874:302;11243:2;11232:9;11228:18;11215:32;11274:18;11266:6;11263:30;11260:117;;;11296:79;;:::i;:::-;11260:117;11401:78;11471:7;11462:6;11451:9;11447:22;11401:78;:::i;:::-;11391:88;;11186:303;10602:894;;;;;:::o;11502:1039::-;11629:6;11637;11645;11694:2;11682:9;11673:7;11669:23;11665:32;11662:119;;;11700:79;;:::i;:::-;11662:119;11848:1;11837:9;11833:17;11820:31;11878:18;11870:6;11867:30;11864:117;;;11900:79;;:::i;:::-;11864:117;12005:78;12075:7;12066:6;12055:9;12051:22;12005:78;:::i;:::-;11995:88;;11791:302;12160:2;12149:9;12145:18;12132:32;12191:18;12183:6;12180:30;12177:117;;;12213:79;;:::i;:::-;12177:117;12318:78;12388:7;12379:6;12368:9;12364:22;12318:78;:::i;:::-;12308:88;;12103:303;12445:2;12471:53;12516:7;12507:6;12496:9;12492:22;12471:53;:::i;:::-;12461:63;;12416:118;11502:1039;;;;;:::o;12547:327::-;12605:6;12654:2;12642:9;12633:7;12629:23;12625:32;12622:119;;;12660:79;;:::i;:::-;12622:119;12780:1;12805:52;12849:7;12840:6;12829:9;12825:22;12805:52;:::i;:::-;12795:62;;12751:116;12547:327;;;;:::o;12880:349::-;12949:6;12998:2;12986:9;12977:7;12973:23;12969:32;12966:119;;;13004:79;;:::i;:::-;12966:119;13124:1;13149:63;13204:7;13195:6;13184:9;13180:22;13149:63;:::i;:::-;13139:73;;13095:127;12880:349;;;;:::o;13235:329::-;13294:6;13343:2;13331:9;13322:7;13318:23;13314:32;13311:119;;;13349:79;;:::i;:::-;13311:119;13469:1;13494:53;13539:7;13530:6;13519:9;13515:22;13494:53;:::i;:::-;13484:63;;13440:117;13235:329;;;;:::o;13570:654::-;13648:6;13656;13705:2;13693:9;13684:7;13680:23;13676:32;13673:119;;;13711:79;;:::i;:::-;13673:119;13831:1;13856:53;13901:7;13892:6;13881:9;13877:22;13856:53;:::i;:::-;13846:63;;13802:117;13986:2;13975:9;13971:18;13958:32;14017:18;14009:6;14006:30;14003:117;;;14039:79;;:::i;:::-;14003:117;14144:63;14199:7;14190:6;14179:9;14175:22;14144:63;:::i;:::-;14134:73;;13929:288;13570:654;;;;;:::o;14230:474::-;14298:6;14306;14355:2;14343:9;14334:7;14330:23;14326:32;14323:119;;;14361:79;;:::i;:::-;14323:119;14481:1;14506:53;14551:7;14542:6;14531:9;14527:22;14506:53;:::i;:::-;14496:63;;14452:117;14608:2;14634:53;14679:7;14670:6;14659:9;14655:22;14634:53;:::i;:::-;14624:63;;14579:118;14230:474;;;;;:::o;14710:797::-;14796:6;14804;14812;14861:2;14849:9;14840:7;14836:23;14832:32;14829:119;;;14867:79;;:::i;:::-;14829:119;14987:1;15012:53;15057:7;15048:6;15037:9;15033:22;15012:53;:::i;:::-;15002:63;;14958:117;15114:2;15140:53;15185:7;15176:6;15165:9;15161:22;15140:53;:::i;:::-;15130:63;;15085:118;15270:2;15259:9;15255:18;15242:32;15301:18;15293:6;15290:30;15287:117;;;15323:79;;:::i;:::-;15287:117;15428:62;15482:7;15473:6;15462:9;15458:22;15428:62;:::i;:::-;15418:72;;15213:287;14710:797;;;;;:::o;15513:179::-;15582:10;15603:46;15645:3;15637:6;15603:46;:::i;:::-;15681:4;15676:3;15672:14;15658:28;;15513:179;;;;:::o;15698:118::-;15785:24;15803:5;15785:24;:::i;:::-;15780:3;15773:37;15698:118;;:::o;15852:732::-;15971:3;16000:54;16048:5;16000:54;:::i;:::-;16070:86;16149:6;16144:3;16070:86;:::i;:::-;16063:93;;16180:56;16230:5;16180:56;:::i;:::-;16259:7;16290:1;16275:284;16300:6;16297:1;16294:13;16275:284;;;16376:6;16370:13;16403:63;16462:3;16447:13;16403:63;:::i;:::-;16396:70;;16489:60;16542:6;16489:60;:::i;:::-;16479:70;;16335:224;16322:1;16319;16315:9;16310:14;;16275:284;;;16279:14;16575:3;16568:10;;15976:608;;;15852:732;;;;:::o;16590:109::-;16671:21;16686:5;16671:21;:::i;:::-;16666:3;16659:34;16590:109;;:::o;16705:360::-;16791:3;16819:38;16851:5;16819:38;:::i;:::-;16873:70;16936:6;16931:3;16873:70;:::i;:::-;16866:77;;16952:52;16997:6;16992:3;16985:4;16978:5;16974:16;16952:52;:::i;:::-;17029:29;17051:6;17029:29;:::i;:::-;17024:3;17020:39;17013:46;;16795:270;16705:360;;;;:::o;17071:364::-;17159:3;17187:39;17220:5;17187:39;:::i;:::-;17242:71;17306:6;17301:3;17242:71;:::i;:::-;17235:78;;17322:52;17367:6;17362:3;17355:4;17348:5;17344:16;17322:52;:::i;:::-;17399:29;17421:6;17399:29;:::i;:::-;17394:3;17390:39;17383:46;;17163:272;17071:364;;;;:::o;17441:366::-;17583:3;17604:67;17668:2;17663:3;17604:67;:::i;:::-;17597:74;;17680:93;17769:3;17680:93;:::i;:::-;17798:2;17793:3;17789:12;17782:19;;17441:366;;;:::o;17813:::-;17955:3;17976:67;18040:2;18035:3;17976:67;:::i;:::-;17969:74;;18052:93;18141:3;18052:93;:::i;:::-;18170:2;18165:3;18161:12;18154:19;;17813:366;;;:::o;18185:::-;18327:3;18348:67;18412:2;18407:3;18348:67;:::i;:::-;18341:74;;18424:93;18513:3;18424:93;:::i;:::-;18542:2;18537:3;18533:12;18526:19;;18185:366;;;:::o;18557:::-;18699:3;18720:67;18784:2;18779:3;18720:67;:::i;:::-;18713:74;;18796:93;18885:3;18796:93;:::i;:::-;18914:2;18909:3;18905:12;18898:19;;18557:366;;;:::o;18929:::-;19071:3;19092:67;19156:2;19151:3;19092:67;:::i;:::-;19085:74;;19168:93;19257:3;19168:93;:::i;:::-;19286:2;19281:3;19277:12;19270:19;;18929:366;;;:::o;19301:::-;19443:3;19464:67;19528:2;19523:3;19464:67;:::i;:::-;19457:74;;19540:93;19629:3;19540:93;:::i;:::-;19658:2;19653:3;19649:12;19642:19;;19301:366;;;:::o;19673:::-;19815:3;19836:67;19900:2;19895:3;19836:67;:::i;:::-;19829:74;;19912:93;20001:3;19912:93;:::i;:::-;20030:2;20025:3;20021:12;20014:19;;19673:366;;;:::o;20045:::-;20187:3;20208:67;20272:2;20267:3;20208:67;:::i;:::-;20201:74;;20284:93;20373:3;20284:93;:::i;:::-;20402:2;20397:3;20393:12;20386:19;;20045:366;;;:::o;20417:::-;20559:3;20580:67;20644:2;20639:3;20580:67;:::i;:::-;20573:74;;20656:93;20745:3;20656:93;:::i;:::-;20774:2;20769:3;20765:12;20758:19;;20417:366;;;:::o;20789:::-;20931:3;20952:67;21016:2;21011:3;20952:67;:::i;:::-;20945:74;;21028:93;21117:3;21028:93;:::i;:::-;21146:2;21141:3;21137:12;21130:19;;20789:366;;;:::o;21161:::-;21303:3;21324:67;21388:2;21383:3;21324:67;:::i;:::-;21317:74;;21400:93;21489:3;21400:93;:::i;:::-;21518:2;21513:3;21509:12;21502:19;;21161:366;;;:::o;21533:::-;21675:3;21696:67;21760:2;21755:3;21696:67;:::i;:::-;21689:74;;21772:93;21861:3;21772:93;:::i;:::-;21890:2;21885:3;21881:12;21874:19;;21533:366;;;:::o;21905:::-;22047:3;22068:67;22132:2;22127:3;22068:67;:::i;:::-;22061:74;;22144:93;22233:3;22144:93;:::i;:::-;22262:2;22257:3;22253:12;22246:19;;21905:366;;;:::o;22277:::-;22419:3;22440:67;22504:2;22499:3;22440:67;:::i;:::-;22433:74;;22516:93;22605:3;22516:93;:::i;:::-;22634:2;22629:3;22625:12;22618:19;;22277:366;;;:::o;22649:::-;22791:3;22812:67;22876:2;22871:3;22812:67;:::i;:::-;22805:74;;22888:93;22977:3;22888:93;:::i;:::-;23006:2;23001:3;22997:12;22990:19;;22649:366;;;:::o;23021:::-;23163:3;23184:67;23248:2;23243:3;23184:67;:::i;:::-;23177:74;;23260:93;23349:3;23260:93;:::i;:::-;23378:2;23373:3;23369:12;23362:19;;23021:366;;;:::o;23393:::-;23535:3;23556:67;23620:2;23615:3;23556:67;:::i;:::-;23549:74;;23632:93;23721:3;23632:93;:::i;:::-;23750:2;23745:3;23741:12;23734:19;;23393:366;;;:::o;23765:::-;23907:3;23928:67;23992:2;23987:3;23928:67;:::i;:::-;23921:74;;24004:93;24093:3;24004:93;:::i;:::-;24122:2;24117:3;24113:12;24106:19;;23765:366;;;:::o;24137:::-;24279:3;24300:67;24364:2;24359:3;24300:67;:::i;:::-;24293:74;;24376:93;24465:3;24376:93;:::i;:::-;24494:2;24489:3;24485:12;24478:19;;24137:366;;;:::o;24509:::-;24651:3;24672:67;24736:2;24731:3;24672:67;:::i;:::-;24665:74;;24748:93;24837:3;24748:93;:::i;:::-;24866:2;24861:3;24857:12;24850:19;;24509:366;;;:::o;24881:::-;25023:3;25044:67;25108:2;25103:3;25044:67;:::i;:::-;25037:74;;25120:93;25209:3;25120:93;:::i;:::-;25238:2;25233:3;25229:12;25222:19;;24881:366;;;:::o;25253:::-;25395:3;25416:67;25480:2;25475:3;25416:67;:::i;:::-;25409:74;;25492:93;25581:3;25492:93;:::i;:::-;25610:2;25605:3;25601:12;25594:19;;25253:366;;;:::o;25625:::-;25767:3;25788:67;25852:2;25847:3;25788:67;:::i;:::-;25781:74;;25864:93;25953:3;25864:93;:::i;:::-;25982:2;25977:3;25973:12;25966:19;;25625:366;;;:::o;25997:108::-;26074:24;26092:5;26074:24;:::i;:::-;26069:3;26062:37;25997:108;;:::o;26111:118::-;26198:24;26216:5;26198:24;:::i;:::-;26193:3;26186:37;26111:118;;:::o;26235:222::-;26328:4;26366:2;26355:9;26351:18;26343:26;;26379:71;26447:1;26436:9;26432:17;26423:6;26379:71;:::i;:::-;26235:222;;;;:::o;26463:1053::-;26786:4;26824:3;26813:9;26809:19;26801:27;;26838:71;26906:1;26895:9;26891:17;26882:6;26838:71;:::i;:::-;26919:72;26987:2;26976:9;26972:18;26963:6;26919:72;:::i;:::-;27038:9;27032:4;27028:20;27023:2;27012:9;27008:18;27001:48;27066:108;27169:4;27160:6;27066:108;:::i;:::-;27058:116;;27221:9;27215:4;27211:20;27206:2;27195:9;27191:18;27184:48;27249:108;27352:4;27343:6;27249:108;:::i;:::-;27241:116;;27405:9;27399:4;27395:20;27389:3;27378:9;27374:19;27367:49;27433:76;27504:4;27495:6;27433:76;:::i;:::-;27425:84;;26463:1053;;;;;;;;:::o;27522:751::-;27745:4;27783:3;27772:9;27768:19;27760:27;;27797:71;27865:1;27854:9;27850:17;27841:6;27797:71;:::i;:::-;27878:72;27946:2;27935:9;27931:18;27922:6;27878:72;:::i;:::-;27960;28028:2;28017:9;28013:18;28004:6;27960:72;:::i;:::-;28042;28110:2;28099:9;28095:18;28086:6;28042:72;:::i;:::-;28162:9;28156:4;28152:20;28146:3;28135:9;28131:19;28124:49;28190:76;28261:4;28252:6;28190:76;:::i;:::-;28182:84;;27522:751;;;;;;;;:::o;28279:373::-;28422:4;28460:2;28449:9;28445:18;28437:26;;28509:9;28503:4;28499:20;28495:1;28484:9;28480:17;28473:47;28537:108;28640:4;28631:6;28537:108;:::i;:::-;28529:116;;28279:373;;;;:::o;28658:634::-;28879:4;28917:2;28906:9;28902:18;28894:26;;28966:9;28960:4;28956:20;28952:1;28941:9;28937:17;28930:47;28994:108;29097:4;29088:6;28994:108;:::i;:::-;28986:116;;29149:9;29143:4;29139:20;29134:2;29123:9;29119:18;29112:48;29177:108;29280:4;29271:6;29177:108;:::i;:::-;29169:116;;28658:634;;;;;:::o;29298:210::-;29385:4;29423:2;29412:9;29408:18;29400:26;;29436:65;29498:1;29487:9;29483:17;29474:6;29436:65;:::i;:::-;29298:210;;;;:::o;29514:313::-;29627:4;29665:2;29654:9;29650:18;29642:26;;29714:9;29708:4;29704:20;29700:1;29689:9;29685:17;29678:47;29742:78;29815:4;29806:6;29742:78;:::i;:::-;29734:86;;29514:313;;;;:::o;29833:419::-;29999:4;30037:2;30026:9;30022:18;30014:26;;30086:9;30080:4;30076:20;30072:1;30061:9;30057:17;30050:47;30114:131;30240:4;30114:131;:::i;:::-;30106:139;;29833:419;;;:::o;30258:::-;30424:4;30462:2;30451:9;30447:18;30439:26;;30511:9;30505:4;30501:20;30497:1;30486:9;30482:17;30475:47;30539:131;30665:4;30539:131;:::i;:::-;30531:139;;30258:419;;;:::o;30683:::-;30849:4;30887:2;30876:9;30872:18;30864:26;;30936:9;30930:4;30926:20;30922:1;30911:9;30907:17;30900:47;30964:131;31090:4;30964:131;:::i;:::-;30956:139;;30683:419;;;:::o;31108:::-;31274:4;31312:2;31301:9;31297:18;31289:26;;31361:9;31355:4;31351:20;31347:1;31336:9;31332:17;31325:47;31389:131;31515:4;31389:131;:::i;:::-;31381:139;;31108:419;;;:::o;31533:::-;31699:4;31737:2;31726:9;31722:18;31714:26;;31786:9;31780:4;31776:20;31772:1;31761:9;31757:17;31750:47;31814:131;31940:4;31814:131;:::i;:::-;31806:139;;31533:419;;;:::o;31958:::-;32124:4;32162:2;32151:9;32147:18;32139:26;;32211:9;32205:4;32201:20;32197:1;32186:9;32182:17;32175:47;32239:131;32365:4;32239:131;:::i;:::-;32231:139;;31958:419;;;:::o;32383:::-;32549:4;32587:2;32576:9;32572:18;32564:26;;32636:9;32630:4;32626:20;32622:1;32611:9;32607:17;32600:47;32664:131;32790:4;32664:131;:::i;:::-;32656:139;;32383:419;;;:::o;32808:::-;32974:4;33012:2;33001:9;32997:18;32989:26;;33061:9;33055:4;33051:20;33047:1;33036:9;33032:17;33025:47;33089:131;33215:4;33089:131;:::i;:::-;33081:139;;32808:419;;;:::o;33233:::-;33399:4;33437:2;33426:9;33422:18;33414:26;;33486:9;33480:4;33476:20;33472:1;33461:9;33457:17;33450:47;33514:131;33640:4;33514:131;:::i;:::-;33506:139;;33233:419;;;:::o;33658:::-;33824:4;33862:2;33851:9;33847:18;33839:26;;33911:9;33905:4;33901:20;33897:1;33886:9;33882:17;33875:47;33939:131;34065:4;33939:131;:::i;:::-;33931:139;;33658:419;;;:::o;34083:::-;34249:4;34287:2;34276:9;34272:18;34264:26;;34336:9;34330:4;34326:20;34322:1;34311:9;34307:17;34300:47;34364:131;34490:4;34364:131;:::i;:::-;34356:139;;34083:419;;;:::o;34508:::-;34674:4;34712:2;34701:9;34697:18;34689:26;;34761:9;34755:4;34751:20;34747:1;34736:9;34732:17;34725:47;34789:131;34915:4;34789:131;:::i;:::-;34781:139;;34508:419;;;:::o;34933:::-;35099:4;35137:2;35126:9;35122:18;35114:26;;35186:9;35180:4;35176:20;35172:1;35161:9;35157:17;35150:47;35214:131;35340:4;35214:131;:::i;:::-;35206:139;;34933:419;;;:::o;35358:::-;35524:4;35562:2;35551:9;35547:18;35539:26;;35611:9;35605:4;35601:20;35597:1;35586:9;35582:17;35575:47;35639:131;35765:4;35639:131;:::i;:::-;35631:139;;35358:419;;;:::o;35783:::-;35949:4;35987:2;35976:9;35972:18;35964:26;;36036:9;36030:4;36026:20;36022:1;36011:9;36007:17;36000:47;36064:131;36190:4;36064:131;:::i;:::-;36056:139;;35783:419;;;:::o;36208:::-;36374:4;36412:2;36401:9;36397:18;36389:26;;36461:9;36455:4;36451:20;36447:1;36436:9;36432:17;36425:47;36489:131;36615:4;36489:131;:::i;:::-;36481:139;;36208:419;;;:::o;36633:::-;36799:4;36837:2;36826:9;36822:18;36814:26;;36886:9;36880:4;36876:20;36872:1;36861:9;36857:17;36850:47;36914:131;37040:4;36914:131;:::i;:::-;36906:139;;36633:419;;;:::o;37058:::-;37224:4;37262:2;37251:9;37247:18;37239:26;;37311:9;37305:4;37301:20;37297:1;37286:9;37282:17;37275:47;37339:131;37465:4;37339:131;:::i;:::-;37331:139;;37058:419;;;:::o;37483:::-;37649:4;37687:2;37676:9;37672:18;37664:26;;37736:9;37730:4;37726:20;37722:1;37711:9;37707:17;37700:47;37764:131;37890:4;37764:131;:::i;:::-;37756:139;;37483:419;;;:::o;37908:::-;38074:4;38112:2;38101:9;38097:18;38089:26;;38161:9;38155:4;38151:20;38147:1;38136:9;38132:17;38125:47;38189:131;38315:4;38189:131;:::i;:::-;38181:139;;37908:419;;;:::o;38333:::-;38499:4;38537:2;38526:9;38522:18;38514:26;;38586:9;38580:4;38576:20;38572:1;38561:9;38557:17;38550:47;38614:131;38740:4;38614:131;:::i;:::-;38606:139;;38333:419;;;:::o;38758:::-;38924:4;38962:2;38951:9;38947:18;38939:26;;39011:9;39005:4;39001:20;38997:1;38986:9;38982:17;38975:47;39039:131;39165:4;39039:131;:::i;:::-;39031:139;;38758:419;;;:::o;39183:::-;39349:4;39387:2;39376:9;39372:18;39364:26;;39436:9;39430:4;39426:20;39422:1;39411:9;39407:17;39400:47;39464:131;39590:4;39464:131;:::i;:::-;39456:139;;39183:419;;;:::o;39608:222::-;39701:4;39739:2;39728:9;39724:18;39716:26;;39752:71;39820:1;39809:9;39805:17;39796:6;39752:71;:::i;:::-;39608:222;;;;:::o;39836:332::-;39957:4;39995:2;39984:9;39980:18;39972:26;;40008:71;40076:1;40065:9;40061:17;40052:6;40008:71;:::i;:::-;40089:72;40157:2;40146:9;40142:18;40133:6;40089:72;:::i;:::-;39836:332;;;;;:::o;40174:129::-;40208:6;40235:20;;:::i;:::-;40225:30;;40264:33;40292:4;40284:6;40264:33;:::i;:::-;40174:129;;;:::o;40309:75::-;40342:6;40375:2;40369:9;40359:19;;40309:75;:::o;40390:311::-;40467:4;40557:18;40549:6;40546:30;40543:56;;;40579:18;;:::i;:::-;40543:56;40629:4;40621:6;40617:17;40609:25;;40689:4;40683;40679:15;40671:23;;40390:311;;;:::o;40707:::-;40784:4;40874:18;40866:6;40863:30;40860:56;;;40896:18;;:::i;:::-;40860:56;40946:4;40938:6;40934:17;40926:25;;41006:4;41000;40996:15;40988:23;;40707:311;;;:::o;41024:307::-;41085:4;41175:18;41167:6;41164:30;41161:56;;;41197:18;;:::i;:::-;41161:56;41235:29;41257:6;41235:29;:::i;:::-;41227:37;;41319:4;41313;41309:15;41301:23;;41024:307;;;:::o;41337:308::-;41399:4;41489:18;41481:6;41478:30;41475:56;;;41511:18;;:::i;:::-;41475:56;41549:29;41571:6;41549:29;:::i;:::-;41541:37;;41633:4;41627;41623:15;41615:23;;41337:308;;;:::o;41651:132::-;41718:4;41741:3;41733:11;;41771:4;41766:3;41762:14;41754:22;;41651:132;;;:::o;41789:114::-;41856:6;41890:5;41884:12;41874:22;;41789:114;;;:::o;41909:98::-;41960:6;41994:5;41988:12;41978:22;;41909:98;;;:::o;42013:99::-;42065:6;42099:5;42093:12;42083:22;;42013:99;;;:::o;42118:113::-;42188:4;42220;42215:3;42211:14;42203:22;;42118:113;;;:::o;42237:184::-;42336:11;42370:6;42365:3;42358:19;42410:4;42405:3;42401:14;42386:29;;42237:184;;;;:::o;42427:168::-;42510:11;42544:6;42539:3;42532:19;42584:4;42579:3;42575:14;42560:29;;42427:168;;;;:::o;42601:169::-;42685:11;42719:6;42714:3;42707:19;42759:4;42754:3;42750:14;42735:29;;42601:169;;;;:::o;42776:305::-;42816:3;42835:20;42853:1;42835:20;:::i;:::-;42830:25;;42869:20;42887:1;42869:20;:::i;:::-;42864:25;;43023:1;42955:66;42951:74;42948:1;42945:81;42942:107;;;43029:18;;:::i;:::-;42942:107;43073:1;43070;43066:9;43059:16;;42776:305;;;;:::o;43087:348::-;43127:7;43150:20;43168:1;43150:20;:::i;:::-;43145:25;;43184:20;43202:1;43184:20;:::i;:::-;43179:25;;43372:1;43304:66;43300:74;43297:1;43294:81;43289:1;43282:9;43275:17;43271:105;43268:131;;;43379:18;;:::i;:::-;43268:131;43427:1;43424;43420:9;43409:20;;43087:348;;;;:::o;43441:191::-;43481:4;43501:20;43519:1;43501:20;:::i;:::-;43496:25;;43535:20;43553:1;43535:20;:::i;:::-;43530:25;;43574:1;43571;43568:8;43565:34;;;43579:18;;:::i;:::-;43565:34;43624:1;43621;43617:9;43609:17;;43441:191;;;;:::o;43638:96::-;43675:7;43704:24;43722:5;43704:24;:::i;:::-;43693:35;;43638:96;;;:::o;43740:90::-;43774:7;43817:5;43810:13;43803:21;43792:32;;43740:90;;;:::o;43836:149::-;43872:7;43912:66;43905:5;43901:78;43890:89;;43836:149;;;:::o;43991:126::-;44028:7;44068:42;44061:5;44057:54;44046:65;;43991:126;;;:::o;44123:77::-;44160:7;44189:5;44178:16;;44123:77;;;:::o;44206:154::-;44290:6;44285:3;44280;44267:30;44352:1;44343:6;44338:3;44334:16;44327:27;44206:154;;;:::o;44366:307::-;44434:1;44444:113;44458:6;44455:1;44452:13;44444:113;;;44543:1;44538:3;44534:11;44528:18;44524:1;44519:3;44515:11;44508:39;44480:2;44477:1;44473:10;44468:15;;44444:113;;;44575:6;44572:1;44569:13;44566:101;;;44655:1;44646:6;44641:3;44637:16;44630:27;44566:101;44415:258;44366:307;;;:::o;44679:320::-;44723:6;44760:1;44754:4;44750:12;44740:22;;44807:1;44801:4;44797:12;44828:18;44818:81;;44884:4;44876:6;44872:17;44862:27;;44818:81;44946:2;44938:6;44935:14;44915:18;44912:38;44909:84;;;44965:18;;:::i;:::-;44909:84;44730:269;44679:320;;;:::o;45005:281::-;45088:27;45110:4;45088:27;:::i;:::-;45080:6;45076:40;45218:6;45206:10;45203:22;45182:18;45170:10;45167:34;45164:62;45161:88;;;45229:18;;:::i;:::-;45161:88;45269:10;45265:2;45258:22;45048:238;45005:281;;:::o;45292:233::-;45331:3;45354:24;45372:5;45354:24;:::i;:::-;45345:33;;45400:66;45393:5;45390:77;45387:103;;;45470:18;;:::i;:::-;45387:103;45517:1;45510:5;45506:13;45499:20;;45292:233;;;:::o;45531:180::-;45579:77;45576:1;45569:88;45676:4;45673:1;45666:15;45700:4;45697:1;45690:15;45717:180;45765:77;45762:1;45755:88;45862:4;45859:1;45852:15;45886:4;45883:1;45876:15;45903:180;45951:77;45948:1;45941:88;46048:4;46045:1;46038:15;46072:4;46069:1;46062:15;46089:180;46137:77;46134:1;46127:88;46234:4;46231:1;46224:15;46258:4;46255:1;46248:15;46275:183;46310:3;46348:1;46330:16;46327:23;46324:128;;;46386:1;46383;46380;46365:23;46408:34;46439:1;46433:8;46408:34;:::i;:::-;46401:41;;46324:128;46275:183;:::o;46464:117::-;46573:1;46570;46563:12;46587:117;46696:1;46693;46686:12;46710:117;46819:1;46816;46809:12;46833:117;46942:1;46939;46932:12;46956:117;47065:1;47062;47055:12;47079:102;47120:6;47171:2;47167:7;47162:2;47155:5;47151:14;47147:28;47137:38;;47079:102;;;:::o;47187:106::-;47231:8;47280:5;47275:3;47271:15;47250:36;;47187:106;;;:::o;47299:239::-;47439:34;47435:1;47427:6;47423:14;47416:58;47508:22;47503:2;47495:6;47491:15;47484:47;47299:239;:::o;47544:227::-;47684:34;47680:1;47672:6;47668:14;47661:58;47753:10;47748:2;47740:6;47736:15;47729:35;47544:227;:::o;47777:228::-;47917:34;47913:1;47905:6;47901:14;47894:58;47986:11;47981:2;47973:6;47969:15;47962:36;47777:228;:::o;48011:230::-;48151:34;48147:1;48139:6;48135:14;48128:58;48220:13;48215:2;48207:6;48203:15;48196:38;48011:230;:::o;48247:225::-;48387:34;48383:1;48375:6;48371:14;48364:58;48456:8;48451:2;48443:6;48439:15;48432:33;48247:225;:::o;48478:228::-;48618:34;48614:1;48606:6;48602:14;48595:58;48687:11;48682:2;48674:6;48670:15;48663:36;48478:228;:::o;48712:223::-;48852:34;48848:1;48840:6;48836:14;48829:58;48921:6;48916:2;48908:6;48904:15;48897:31;48712:223;:::o;48941:229::-;49081:34;49077:1;49069:6;49065:14;49058:58;49150:12;49145:2;49137:6;49133:15;49126:37;48941:229;:::o;49176:181::-;49316:33;49312:1;49304:6;49300:14;49293:57;49176:181;:::o;49363:228::-;49503:34;49499:1;49491:6;49487:14;49480:58;49572:11;49567:2;49559:6;49555:15;49548:36;49363:228;:::o;49597:224::-;49737:34;49733:1;49725:6;49721:14;49714:58;49806:7;49801:2;49793:6;49789:15;49782:32;49597:224;:::o;49827:237::-;49967:34;49963:1;49955:6;49951:14;49944:58;50036:20;50031:2;50023:6;50019:15;50012:45;49827:237;:::o;50070:222::-;50210:34;50206:1;50198:6;50194:14;50187:58;50279:5;50274:2;50266:6;50262:15;50255:30;50070:222;:::o;50298:229::-;50438:34;50434:1;50426:6;50422:14;50415:58;50507:12;50502:2;50494:6;50490:15;50483:37;50298:229;:::o;50533:182::-;50673:34;50669:1;50661:6;50657:14;50650:58;50533:182;:::o;50721:::-;50861:34;50857:1;50849:6;50845:14;50838:58;50721:182;:::o;50909:243::-;51049:34;51045:1;51037:6;51033:14;51026:58;51118:26;51113:2;51105:6;51101:15;51094:51;50909:243;:::o;51158:233::-;51298:34;51294:1;51286:6;51282:14;51275:58;51367:16;51362:2;51354:6;51350:15;51343:41;51158:233;:::o;51397:228::-;51537:34;51533:1;51525:6;51521:14;51514:58;51606:11;51601:2;51593:6;51589:15;51582:36;51397:228;:::o;51631:::-;51771:34;51767:1;51759:6;51755:14;51748:58;51840:11;51835:2;51827:6;51823:15;51816:36;51631:228;:::o;51865:227::-;52005:34;52001:1;51993:6;51989:14;51982:58;52074:10;52069:2;52061:6;52057:15;52050:35;51865:227;:::o;52098:220::-;52238:34;52234:1;52226:6;52222:14;52215:58;52307:3;52302:2;52294:6;52290:15;52283:28;52098:220;:::o;52324:226::-;52464:34;52460:1;52452:6;52448:14;52441:58;52533:9;52528:2;52520:6;52516:15;52509:34;52324:226;:::o;52556:711::-;52595:3;52633:4;52615:16;52612:26;52609:39;;;52641:5;;52609:39;52670:20;;:::i;:::-;52745:1;52727:16;52723:24;52720:1;52714:4;52699:49;52778:4;52772:11;52877:16;52870:4;52862:6;52858:17;52855:39;52822:18;52814:6;52811:30;52795:113;52792:146;;;52923:5;;;;52792:146;52969:6;52963:4;52959:17;53005:3;52999:10;53032:18;53024:6;53021:30;53018:43;;;53054:5;;;;;;53018:43;53102:6;53095:4;53090:3;53086:14;53082:27;53161:1;53143:16;53139:24;53133:4;53129:35;53124:3;53121:44;53118:57;;;53168:5;;;;;;;53118:57;53185;53233:6;53227:4;53223:17;53215:6;53211:30;53205:4;53185:57;:::i;:::-;53258:3;53251:10;;52599:668;;;;;52556:711;;:::o;53273:122::-;53346:24;53364:5;53346:24;:::i;:::-;53339:5;53336:35;53326:63;;53385:1;53382;53375:12;53326:63;53273:122;:::o;53401:116::-;53471:21;53486:5;53471:21;:::i;:::-;53464:5;53461:32;53451:60;;53507:1;53504;53497:12;53451:60;53401:116;:::o;53523:120::-;53595:23;53612:5;53595:23;:::i;:::-;53588:5;53585:34;53575:62;;53633:1;53630;53623:12;53575:62;53523:120;:::o;53649:122::-;53722:24;53740:5;53722:24;:::i;:::-;53715:5;53712:35;53702:63;;53761:1;53758;53751:12;53702:63;53649:122;:::o
Swarm Source
ipfs://3421bac4ea3b2cec515f0f6ea9571cdc3ee7728a078dc1a0644aeeea29f6971f
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.