Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0.0002946 ETH
Eth Value
$0.60 (@ $2,035.23/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 84 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint | 23738325 | 124 days ago | IN | 0.0002946 ETH | 0.0001584 | ||||
| Update_public_pr... | 23738283 | 124 days ago | IN | 0 ETH | 0.00010735 | ||||
| Mint | 23738194 | 124 days ago | IN | 0 ETH | 0.00015923 | ||||
| Mint | 23738146 | 124 days ago | IN | 0 ETH | 0.00016363 | ||||
| Air Drop | 23738065 | 124 days ago | IN | 0 ETH | 0.00014805 | ||||
| Air Drop | 23737909 | 124 days ago | IN | 0 ETH | 0.00018234 | ||||
| Mint | 23737875 | 124 days ago | IN | 0 ETH | 0.0001554 | ||||
| Air Drop | 23735046 | 125 days ago | IN | 0 ETH | 0.00022235 | ||||
| Air Drop | 23731793 | 125 days ago | IN | 0 ETH | 0.00019052 | ||||
| Air Drop | 23730818 | 125 days ago | IN | 0 ETH | 0.00019122 | ||||
| Air Drop | 23721652 | 127 days ago | IN | 0 ETH | 0.00021249 | ||||
| Withdraw | 23715822 | 127 days ago | IN | 0 ETH | 0.0000643 | ||||
| Air Drop | 23710913 | 128 days ago | IN | 0 ETH | 0.00017151 | ||||
| Air Drop | 23710056 | 128 days ago | IN | 0 ETH | 0.00013313 | ||||
| Air Drop | 23710044 | 128 days ago | IN | 0 ETH | 0.00016875 | ||||
| Air Drop | 23706730 | 129 days ago | IN | 0 ETH | 0.00017065 | ||||
| Mint | 23675880 | 133 days ago | IN | 0.01 ETH | 0.0001475 | ||||
| Mint | 17254829 | 1032 days ago | IN | 0.044 ETH | 0.00374893 | ||||
| Update_public_pr... | 16942505 | 1076 days ago | IN | 0 ETH | 0.00060571 | ||||
| Set Approval For... | 16685385 | 1112 days ago | IN | 0 ETH | 0.002936 | ||||
| Set Approval For... | 16283695 | 1168 days ago | IN | 0 ETH | 0.00063454 | ||||
| Set Approval For... | 16204424 | 1179 days ago | IN | 0 ETH | 0.0006294 | ||||
| Set Approval For... | 16185227 | 1182 days ago | IN | 0 ETH | 0.00111368 | ||||
| Mint | 16042170 | 1202 days ago | IN | 0.0088 ETH | 0.00120995 | ||||
| Withdraw | 16042141 | 1202 days ago | IN | 0 ETH | 0.00035783 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PUDGYPENIS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-09-17
*/
/**
*Submitted for verification at Etherscan.io on 2022-08-23
*/
// SPDX-License-Identifier: MIT
/*
⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠤⢤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢀⠎⠀⠀⠀⠘⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢠⣾⡖⢦⣰⣿⢲⠸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢨⠻⢷⣟⠙⠿⠞⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⠦⠤⠷⠶⠶⠂⠀⢸⠀⠀⠀⠀⠀⠀⢀⢀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⡆⡄⢸⠀⠀⠀⠀⠀⢠⠃⢸⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⡇⡇⢸⣇⡀⠀⠀⡠⠁⢠⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⣸⠃⢻⠈⠈⠉⢙⣳⣥⣄⣀⠔⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠸⡆⠀⠀⠰⣧⣶⠌⠂⠀⠀⠉⠁⠀⠀⠉⠳⡄⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠹⢦⣀⣀⣀⡀⠀⢀⣀⣀⡀⠀⢀⣀⡠⠚⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠉⡹⠉⠉⠉⠉⢉⠇⢠⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠰⡉⠑⠁⢠⠃⠀⠀⣟⠓⠋⢠⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠛⠒⠁⠀⠀⠀⠈⠓⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
*/
// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol
// OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.0;
library MerkleProof {
function verify(
bytes32[] memory proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProof(proof, leaf) == root;
}
function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash <= proofElement) {
// Hash(current computed hash + current element of the proof)
computedHash = _efficientHash(computedHash, proofElement);
} else {
// Hash(current element of the proof + current computed hash)
computedHash = _efficientHash(proofElement, computedHash);
}
}
return computedHash;
}
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
library Address {
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
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");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
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");
}
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);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
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);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
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);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
interface IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
function approve(address to, uint256 tokenId) external;
function setApprovalForAll(address operator, bool _approved) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
interface IERC721Enumerable is IERC721 {
function totalSupply() external view returns (uint256);
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
interface IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: contracts/finalcontract.sol
pragma solidity ^0.8.0;
error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error UnableDetermineTokenOwner();
error URIQueryForNonexistentToken();
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
using Address for address;
using Strings for uint256;
struct TokenOwnership {
address addr;
uint64 startTimestamp;
}
struct AddressData {
uint128 balance;
uint128 numberMinted;
}
uint256 internal _currentIndex;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to ownership details
// An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
mapping(uint256 => TokenOwnership) internal _ownerships;
// Mapping owner address to address data
mapping(address => AddressData) private _addressData;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function totalSupply() public view override returns (uint256) {
return _currentIndex;
}
function tokenByIndex(uint256 index) public view override returns (uint256) {
if (index >= totalSupply()) revert TokenIndexOutOfBounds();
return index;
}
function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();
uint256 numMintedSoFar = totalSupply();
uint256 tokenIdsIdx;
address currOwnershipAddr;
// Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
unchecked {
for (uint256 i; i < numMintedSoFar; i++) {
TokenOwnership memory ownership = _ownerships[i];
if (ownership.addr != address(0)) {
currOwnershipAddr = ownership.addr;
}
if (currOwnershipAddr == owner) {
if (tokenIdsIdx == index) {
return i;
}
tokenIdsIdx++;
}
}
}
// Execution should never reach this point.
assert(false);
return tokenIdsIdx;
}
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
interfaceId == type(IERC721Enumerable).interfaceId ||
super.supportsInterface(interfaceId);
}
function balanceOf(address owner) public view override returns (uint256) {
if (owner == address(0)) revert BalanceQueryForZeroAddress();
return uint256(_addressData[owner].balance);
}
function _numberMinted(address owner) internal view returns (uint256) {
if (owner == address(0)) revert MintedQueryForZeroAddress();
return uint256(_addressData[owner].numberMinted);
}
function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken();
unchecked {
for (uint256 curr = tokenId; curr >= 0; curr--) {
TokenOwnership memory ownership = _ownerships[curr];
if (ownership.addr != address(0)) {
return ownership;
}
}
}
revert UnableDetermineTokenOwner();
}
function ownerOf(uint256 tokenId) public view override returns (address) {
return ownershipOf(tokenId).addr;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
if (!_exists(tokenId)) revert URIQueryForNonexistentToken();
string memory baseURI = _baseURI();
return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
}
function _baseURI() internal view virtual returns (string memory) {
return '';
}
function approve(address to, uint256 tokenId) public override {
address owner = ERC721A.ownerOf(tokenId);
if (to == owner) revert ApprovalToCurrentOwner();
if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) revert ApprovalCallerNotOwnerNorApproved();
_approve(to, tokenId, owner);
}
function getApproved(uint256 tokenId) public view override returns (address) {
if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();
return _tokenApprovals[tokenId];
}
function setApprovalForAll(address operator, bool approved) public override {
if (operator == _msgSender()) revert ApproveToCaller();
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
_transfer(from, to, tokenId);
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, '');
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public override {
_transfer(from, to, tokenId);
if (!_checkOnERC721Received(from, to, tokenId, _data)) revert TransferToNonERC721ReceiverImplementer();
}
function _exists(uint256 tokenId) internal view returns (bool) {
return tokenId < _currentIndex;
}
function _safeMint(address to, uint256 quantity) internal {
_safeMint(to, quantity, '');
}
function _safeMint(
address to,
uint256 quantity,
bytes memory _data
) internal {
_mint(to, quantity, _data, true);
}
function _mint(
address to,
uint256 quantity,
bytes memory _data,
bool safe
) internal {
uint256 startTokenId = _currentIndex;
if (to == address(0)) revert MintToZeroAddress();
if (quantity == 0) revert MintZeroQuantity();
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are incredibly unrealistic.
// balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
// updatedIndex overflows if _currentIndex + quantity > 1.56e77 (2**256) - 1
unchecked {
_addressData[to].balance += uint128(quantity);
_addressData[to].numberMinted += uint128(quantity);
_ownerships[startTokenId].addr = to;
_ownerships[startTokenId].startTimestamp = uint64(block.timestamp);
uint256 updatedIndex = startTokenId;
for (uint256 i; i < quantity; i++) {
emit Transfer(address(0), to, updatedIndex);
if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
updatedIndex++;
}
_currentIndex = updatedIndex;
}
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
function _transfer(
address from,
address to,
uint256 tokenId
) private {
TokenOwnership memory prevOwnership = ownershipOf(tokenId);
bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
getApproved(tokenId) == _msgSender() ||
isApprovedForAll(prevOwnership.addr, _msgSender()));
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
if (to == address(0)) revert TransferToZeroAddress();
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, prevOwnership.addr);
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
_addressData[from].balance -= 1;
_addressData[to].balance += 1;
_ownerships[tokenId].addr = to;
_ownerships[tokenId].startTimestamp = uint64(block.timestamp);
// If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
if (_ownerships[nextTokenId].addr == address(0)) {
if (_exists(nextTokenId)) {
_ownerships[nextTokenId].addr = prevOwnership.addr;
_ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
}
}
}
emit Transfer(from, to, tokenId);
_afterTokenTransfers(from, to, tokenId, 1);
}
function _approve(
address to,
uint256 tokenId,
address owner
) private {
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) revert TransferToNonERC721ReceiverImplementer();
else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
}
contract PUDGYPENIS is ERC721A, Ownable{
using Strings for uint256;
uint256 public constant MAX_SUPPLY = 8888;
uint256 public constant MAX_PUBLIC_MINT = 88;
uint256 public constant MAX_WHITELIST_MINT = 1;
uint256 public PUBLIC_SALE_PRICE = .01 ether;
uint256 public WHITELIST_SALE_PRICE = .00 ether;
string private baseTokenUri;
string public placeholderTokenUri;
bool public isRevealed;
bool public publicSale;
bool public whiteListSale;
bool public pause;
bool public teamMinted;
bytes32 private merkleRoot;
mapping(address => uint256) public totalPublicMint;
mapping(address => uint256) public totalWhitelistMint;
constructor() ERC721A("PUDGY PENIS", "PUDGE"){
}
modifier callerIsUser() {
require(tx.origin == msg.sender, "PUDGY :: Cannot be called by a contract");
_;
}
function mint(uint256 _quantity) external payable callerIsUser{
require(publicSale, "PUDGY :: Not Yet Active.");
require((totalSupply() + _quantity) <= MAX_SUPPLY, "PUDGY :: Beyond Max Supply");
require((totalPublicMint[msg.sender] +_quantity) <= MAX_PUBLIC_MINT, "PUDGY :: Already minted 3 times!");
require(msg.value >= (PUBLIC_SALE_PRICE * _quantity), "PUDGY :: Below ");
totalPublicMint[msg.sender] += _quantity;
_safeMint(msg.sender, _quantity);
}
function whitelistMint(bytes32[] memory _merkleProof, uint256 _quantity) external payable callerIsUser{
require(whiteListSale, "PUDGY :: Minting is on Pause");
require((totalSupply() + _quantity) <= MAX_SUPPLY, "PUDGY :: Cannot mint beyond max supply");
require((totalWhitelistMint[msg.sender] + _quantity) <= MAX_WHITELIST_MINT, "PUDGY :: Cannot mint beyond whitelist max mint!");
require(msg.value >= (WHITELIST_SALE_PRICE * _quantity), "PUDGY :: Payment is below the price");
//create leaf node
bytes32 sender = keccak256(abi.encodePacked(msg.sender));
require(MerkleProof.verify(_merkleProof, merkleRoot, sender), "PUDGY :: You are not whitelisted");
totalWhitelistMint[msg.sender] += _quantity;
_safeMint(msg.sender, _quantity);
}
function teamMint() external onlyOwner{
require(!teamMinted, "PUDGY :: Team already minted");
teamMinted = true;
_safeMint(msg.sender, 500);
}
function _baseURI() internal view virtual override returns (string memory) {
return baseTokenUri;
}
//return uri for certain token
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
uint256 trueId = tokenId + 1;
if(!isRevealed){
return placeholderTokenUri;
}
//string memory baseURI = _baseURI();
return bytes(baseTokenUri).length > 0 ? string(abi.encodePacked(baseTokenUri, trueId.toString(), ".json")) : "";
}
/// @dev walletOf() function shouldn't be called on-chain due to gas consumption
function walletOf() external view returns(uint256[] memory){
address _owner = msg.sender;
uint256 numberOfOwnedNFT = balanceOf(_owner);
uint256[] memory ownerIds = new uint256[](numberOfOwnedNFT);
for(uint256 index = 0; index < numberOfOwnedNFT; index++){
ownerIds[index] = tokenOfOwnerByIndex(_owner, index);
}
return ownerIds;
}
function setTokenUri(string memory _baseTokenUri) external onlyOwner{
baseTokenUri = _baseTokenUri;
}
function setPlaceHolderUri(string memory _placeholderTokenUri) external onlyOwner{
placeholderTokenUri = _placeholderTokenUri;
}
function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner{
merkleRoot = _merkleRoot;
}
function getMerkleRoot() external view returns (bytes32){
return merkleRoot;
}
function togglePause() external onlyOwner{
pause = !pause;
}
function toggleWhiteListSale() external onlyOwner{
whiteListSale = !whiteListSale;
}
function togglePublicSale() external onlyOwner{
publicSale = !publicSale;
}
function update_public_price(uint price) external onlyOwner {
PUBLIC_SALE_PRICE = price;
}
function update_preSale_price(uint price) external onlyOwner {
WHITELIST_SALE_PRICE = price;
}
function AirDrop(address[] memory _wallets, uint _count) public onlyOwner{
require(_wallets.length > 0, "mint at least one token");
require(totalSupply() + _wallets.length <= MAX_SUPPLY, "not enough tokens left");
for (uint i = 0; i < _wallets.length; i++)
{
_safeMint(_wallets[i], _count);
}
}
function toggleReveal() external onlyOwner{
isRevealed = !isRevealed;
}
function withdraw() external onlyOwner{
uint _balance = address(this).balance;
payable(owner()).transfer(_balance );//owner
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableDetermineTokenOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WHITELIST_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeholderTokenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_placeholderTokenUri","type":"string"}],"name":"setPlaceHolderUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenUri","type":"string"}],"name":"setTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhiteListSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalWhitelistMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_preSale_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_public_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052662386f26fc1000060085560006009553480156200002157600080fd5b506040518060400160405280600b81526020017f50554447592050454e49530000000000000000000000000000000000000000008152506040518060400160405280600581526020017f50554447450000000000000000000000000000000000000000000000000000008152508160019080519060200190620000a6929190620001b6565b508060029080519060200190620000bf929190620001b6565b505050620000e2620000d6620000e860201b60201c565b620000f060201b60201c565b620002cb565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001c49062000266565b90600052602060002090601f016020900481019282620001e8576000855562000234565b82601f106200020357805160ff191683800117855562000234565b8280016001018555821562000234579182015b828111156200023357825182559160200191906001019062000216565b5b50905062000243919062000247565b5090565b5b808211156200026257600081600090555060010162000248565b5090565b600060028204905060018216806200027f57607f821691505b602082108114156200029657620002956200029c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614f2f80620002db6000396000f3fe6080604052600436106102935760003560e01c806370a082311161015a578063b88d4fde116100c1578063e222c7f91161007a578063e222c7f9146109a0578063e2a70eaf146109b7578063e8b5498d146109e0578063e985e9c514610a0b578063eeb9052f14610a48578063f2fde38b14610a7157610293565b8063b88d4fde146108b6578063ba7a86b8146108df578063bc912e1a146108f6578063c08dfd3c14610921578063c4ae31681461094c578063c87b56dd1461096357610293565b80638bb64a8c116101135780638bb64a8c146107db5780638da5cb5b146107f257806395d89b411461081d578063a0712d6814610848578063a22cb46514610864578063b0962c531461088d57610293565b806370a08231146106dd578063715018a61461071a5780637cb647591461073157806383a974a21461075a5780638456cb591461078557806386a173ee146107b057610293565b806332cb6b0c116101fe5780634f6ccce7116101b75780634f6ccce7146105cd57806354214f691461060a5780635b8ad429146106355780636352211e1461064c57806363adc5a51461068957806365f13097146106b257610293565b806332cb6b0c146104e157806333bc1c5c1461050c5780633ccfd60b1461053757806342842e0e1461054e57806349590657146105775780634cf5f7a4146105a257610293565b8063095ea7b311610250578063095ea7b3146103ce57806318160ddd146103f75780631c16521c1461042257806323b872dd1461045f5780632904e6d9146104885780632f745c59146104a457610293565b806301ffc9a7146102985780630345e3cb146102d55780630675b7c61461031257806306fdde031461033b57806307e89ec014610366578063081812fc14610391575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613cef565b610a9a565b6040516102cc91906142df565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613a47565b610be4565b6040516103099190614537565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613d49565b610bfc565b005b34801561034757600080fd5b50610350610c92565b60405161035d9190614315565b60405180910390f35b34801561037257600080fd5b5061037b610d24565b6040516103889190614537565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613d92565b610d2a565b6040516103c59190614256565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613bca565b610da6565b005b34801561040357600080fd5b5061040c610eb1565b6040516104199190614537565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613a47565b610eba565b6040516104569190614537565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613ab4565b610ed2565b005b6104a2600480360381019061049d9190613c66565b610ee2565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613bca565b6111b0565b6040516104d89190614537565b60405180910390f35b3480156104ed57600080fd5b506104f6611374565b6040516105039190614537565b60405180910390f35b34801561051857600080fd5b5061052161137a565b60405161052e91906142df565b60405180910390f35b34801561054357600080fd5b5061054c61138d565b005b34801561055a57600080fd5b5061057560048036038101906105709190613ab4565b61145f565b005b34801561058357600080fd5b5061058c61147f565b60405161059991906142fa565b60405180910390f35b3480156105ae57600080fd5b506105b7611489565b6040516105c49190614315565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef9190613d92565b611517565b6040516106019190614537565b60405180910390f35b34801561061657600080fd5b5061061f611561565b60405161062c91906142df565b60405180910390f35b34801561064157600080fd5b5061064a611574565b005b34801561065857600080fd5b50610673600480360381019061066e9190613d92565b61161c565b6040516106809190614256565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613d92565b611632565b005b3480156106be57600080fd5b506106c76116b8565b6040516106d49190614537565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190613a47565b6116bd565b6040516107119190614537565b60405180910390f35b34801561072657600080fd5b5061072f61179d565b005b34801561073d57600080fd5b5061075860048036038101906107539190613cc2565b611825565b005b34801561076657600080fd5b5061076f6118ab565b60405161077c91906142bd565b60405180910390f35b34801561079157600080fd5b5061079a61195d565b6040516107a791906142df565b60405180910390f35b3480156107bc57600080fd5b506107c5611970565b6040516107d291906142df565b60405180910390f35b3480156107e757600080fd5b506107f0611983565b005b3480156107fe57600080fd5b50610807611a2b565b6040516108149190614256565b60405180910390f35b34801561082957600080fd5b50610832611a55565b60405161083f9190614315565b60405180910390f35b610862600480360381019061085d9190613d92565b611ae7565b005b34801561087057600080fd5b5061088b60048036038101906108869190613b8a565b611d3c565b005b34801561089957600080fd5b506108b460048036038101906108af9190613d49565b611eb4565b005b3480156108c257600080fd5b506108dd60048036038101906108d89190613b07565b611f4a565b005b3480156108eb57600080fd5b506108f4611f9d565b005b34801561090257600080fd5b5061090b612092565b6040516109189190614537565b60405180910390f35b34801561092d57600080fd5b50610936612098565b6040516109439190614537565b60405180910390f35b34801561095857600080fd5b5061096161209d565b005b34801561096f57600080fd5b5061098a60048036038101906109859190613d92565b612145565b6040516109979190614315565b60405180910390f35b3480156109ac57600080fd5b506109b56122a7565b005b3480156109c357600080fd5b506109de60048036038101906109d99190613d92565b61234f565b005b3480156109ec57600080fd5b506109f56123d5565b604051610a0291906142df565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190613a74565b6123e8565b604051610a3f91906142df565b60405180910390f35b348015610a5457600080fd5b50610a6f6004803603810190610a6a9190613c0a565b61247c565b005b348015610a7d57600080fd5b50610a986004803603810190610a939190613a47565b6125dc565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bcd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bdd5750610bdc826126d4565b5b9050919050565b600f6020528060005260406000206000915090505481565b610c0461273e565b73ffffffffffffffffffffffffffffffffffffffff16610c22611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614417565b60405180910390fd5b80600a9080519060200190610c8e9291906136d0565b5050565b606060018054610ca190614897565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90614897565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b5050505050905090565b60085481565b6000610d3582612746565b610d6b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610db18261161c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e19576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e3861273e565b73ffffffffffffffffffffffffffffffffffffffff1614158015610e6a5750610e6881610e6361273e565b6123e8565b155b15610ea1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eac838383612753565b505050565b60008054905090565b600e6020528060005260406000206000915090505481565b610edd838383612805565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f47906143f7565b60405180910390fd5b600c60029054906101000a900460ff16610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f96906143d7565b60405180910390fd5b6122b881610fab610eb1565b610fb591906146c2565b1115610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed906144b7565b60405180910390fd5b600181600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461104391906146c2565b1115611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b906144f7565b60405180910390fd5b806009546110929190614749565b3410156110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906143b7565b60405180910390fd5b6000336040516020016110e7919061420c565b60405160208183030381529060405280519060200120905061110c83600d5483612d2a565b61114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290614477565b60405180910390fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119a91906146c2565b925050819055506111ab3383612d41565b505050565b60006111bb836116bd565b82106111f3576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111fd610eb1565b905060008060005b83811015611357576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146112f757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611349578684141561134057819550505050505061136e565b83806001019450505b508080600101915050611205565b50600061136757611366614998565b5b8193505050505b92915050565b6122b881565b600c60019054906101000a900460ff1681565b61139561273e565b73ffffffffffffffffffffffffffffffffffffffff166113b3611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614417565b60405180910390fd5b6000479050611416611a2b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561145b573d6000803e3d6000fd5b5050565b61147a83838360405180602001604052806000815250611f4a565b505050565b6000600d54905090565b600b805461149690614897565b80601f01602080910402602001604051908101604052809291908181526020018280546114c290614897565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b505050505081565b6000611521610eb1565b8210611559576040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600c60009054906101000a900460ff1681565b61157c61273e565b73ffffffffffffffffffffffffffffffffffffffff1661159a611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790614417565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b600061162782612d5f565b600001519050919050565b61163a61273e565b73ffffffffffffffffffffffffffffffffffffffff16611658611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590614417565b60405180910390fd5b8060098190555050565b605881565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611725576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117a561273e565b73ffffffffffffffffffffffffffffffffffffffff166117c3611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090614417565b60405180910390fd5b6118236000612ee7565b565b61182d61273e565b73ffffffffffffffffffffffffffffffffffffffff1661184b611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614417565b60405180910390fd5b80600d8190555050565b6060600033905060006118bd826116bd565b905060008167ffffffffffffffff8111156118db576118da614a83565b5b6040519080825280602002602001820160405280156119095781602001602082028036833780820191505090505b50905060005b828110156119535761192184826111b0565b82828151811061193457611933614a54565b5b602002602001018181525050808061194b906148fa565b91505061190f565b5080935050505090565b600c60039054906101000a900460ff1681565b600c60029054906101000a900460ff1681565b61198b61273e565b73ffffffffffffffffffffffffffffffffffffffff166119a9611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146119ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f690614417565b60405180910390fd5b600c60029054906101000a900460ff1615600c60026101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a6490614897565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9090614897565b8015611add5780601f10611ab257610100808354040283529160200191611add565b820191906000526020600020905b815481529060010190602001808311611ac057829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906143f7565b60405180910390fd5b600c60019054906101000a900460ff16611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614497565b60405180910390fd5b6122b881611bb0610eb1565b611bba91906146c2565b1115611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290614377565b60405180910390fd5b605881600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4891906146c2565b1115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614397565b60405180910390fd5b80600854611c979190614749565b341015611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090614337565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2891906146c2565b92505081905550611d393382612d41565b50565b611d4461273e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611db661273e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e6361273e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ea891906142df565b60405180910390a35050565b611ebc61273e565b73ffffffffffffffffffffffffffffffffffffffff16611eda611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614417565b60405180910390fd5b80600b9080519060200190611f469291906136d0565b5050565b611f55848484612805565b611f6184848484612fad565b611f97576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611fa561273e565b73ffffffffffffffffffffffffffffffffffffffff16611fc3611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090614417565b60405180910390fd5b600c60049054906101000a900460ff1615612069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206090614457565b60405180910390fd5b6001600c60046101000a81548160ff021916908315150217905550612090336101f4612d41565b565b60095481565b600181565b6120a561273e565b73ffffffffffffffffffffffffffffffffffffffff166120c3611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614612119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211090614417565b60405180910390fd5b600c60039054906101000a900460ff1615600c60036101000a81548160ff021916908315150217905550565b606061215082612746565b61218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614437565b60405180910390fd5b600060018361219e91906146c2565b9050600c60009054906101000a900460ff1661224757600b80546121c190614897565b80601f01602080910402602001604051908101604052809291908181526020018280546121ed90614897565b801561223a5780601f1061220f5761010080835404028352916020019161223a565b820191906000526020600020905b81548152906001019060200180831161221d57829003601f168201915b50505050509150506122a2565b6000600a805461225690614897565b905011612272576040518060200160405280600081525061229e565b600a61227d8261313b565b60405160200161228e929190614227565b6040516020818303038152906040525b9150505b919050565b6122af61273e565b73ffffffffffffffffffffffffffffffffffffffff166122cd611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90614417565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b61235761273e565b73ffffffffffffffffffffffffffffffffffffffff16612375611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146123cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c290614417565b60405180910390fd5b8060088190555050565b600c60049054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61248461273e565b73ffffffffffffffffffffffffffffffffffffffff166124a2611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90614417565b60405180910390fd5b600082511161253c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612533906144d7565b60405180910390fd5b6122b88251612549610eb1565b61255391906146c2565b1115612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b90614517565b60405180910390fd5b60005b82518110156125d7576125c48382815181106125b6576125b5614a54565b5b602002602001015183612d41565b80806125cf906148fa565b915050612597565b505050565b6125e461273e565b73ffffffffffffffffffffffffffffffffffffffff16612602611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614612658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264f90614417565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bf90614357565b60405180910390fd5b6126d181612ee7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061281082612d5f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661283761273e565b73ffffffffffffffffffffffffffffffffffffffff161480612893575061285c61273e565b73ffffffffffffffffffffffffffffffffffffffff1661287b84610d2a565b73ffffffffffffffffffffffffffffffffffffffff16145b806128af57506128ae82600001516128a961273e565b6123e8565b5b9050806128e8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612951576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129b8576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129c5858585600161329c565b6129d56000848460000151612753565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612cba57612c1981612746565b15612cb95782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d2385858560016132a2565b5050505050565b600082612d3785846132a8565b1490509392505050565b612d5b82826040518060200160405280600081525061331d565b5050565b612d67613756565b612d7082612746565b612da6576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008290505b60008110612eaf576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ea0578092505050612ee2565b50808060019003915050612dac565b506040517fe7c0edfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612fce8473ffffffffffffffffffffffffffffffffffffffff1661332f565b1561312e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ff761273e565b8786866040518563ffffffff1660e01b81526004016130199493929190614271565b602060405180830381600087803b15801561303357600080fd5b505af192505050801561306457506040513d601f19601f820116820180604052508101906130619190613d1c565b60015b6130de573d8060008114613094576040519150601f19603f3d011682016040523d82523d6000602084013e613099565b606091505b506000815114156130d6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613133565b600190505b949350505050565b60606000821415613183576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613297565b600082905060005b600082146131b557808061319e906148fa565b915050600a826131ae9190614718565b915061318b565b60008167ffffffffffffffff8111156131d1576131d0614a83565b5b6040519080825280601f01601f1916602001820160405280156132035781602001600182028036833780820191505090505b5090505b600085146132905760018261321c91906147a3565b9150600a8561322b9190614967565b603061323791906146c2565b60f81b81838151811061324d5761324c614a54565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132899190614718565b9450613207565b8093505050505b919050565b50505050565b50505050565b60008082905060005b84518110156133125760008582815181106132cf576132ce614a54565b5b602002602001015190508083116132f1576132ea8382613352565b92506132fe565b6132fb8184613352565b92505b50808061330a906148fa565b9150506132b1565b508091505092915050565b61332a8383836001613369565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156133d6576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613411576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61341e600086838761329c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156136b357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483801561366757506136656000888488612fad565b155b1561369e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818060010192505080806001019150506135ec565b5080600081905550506136c960008683876132a2565b5050505050565b8280546136dc90614897565b90600052602060002090601f0160209004810192826136fe5760008555613745565b82601f1061371757805160ff1916838001178555613745565b82800160010185558215613745579182015b82811115613744578251825591602001919060010190613729565b5b5090506137529190613790565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137a9576000816000905550600101613791565b5090565b60006137c06137bb84614577565b614552565b905080838252602082019050828560208602820111156137e3576137e2614ab7565b5b60005b8581101561381357816137f98882613911565b8452602084019350602083019250506001810190506137e6565b5050509392505050565b600061383061382b846145a3565b614552565b9050808382526020820190508285602086028201111561385357613852614ab7565b5b60005b8581101561388357816138698882613997565b845260208401935060208301925050600181019050613856565b5050509392505050565b60006138a061389b846145cf565b614552565b9050828152602081018484840111156138bc576138bb614abc565b5b6138c7848285614855565b509392505050565b60006138e26138dd84614600565b614552565b9050828152602081018484840111156138fe576138fd614abc565b5b613909848285614855565b509392505050565b60008135905061392081614e86565b92915050565b600082601f83011261393b5761393a614ab2565b5b813561394b8482602086016137ad565b91505092915050565b600082601f83011261396957613968614ab2565b5b813561397984826020860161381d565b91505092915050565b60008135905061399181614e9d565b92915050565b6000813590506139a681614eb4565b92915050565b6000813590506139bb81614ecb565b92915050565b6000815190506139d081614ecb565b92915050565b600082601f8301126139eb576139ea614ab2565b5b81356139fb84826020860161388d565b91505092915050565b600082601f830112613a1957613a18614ab2565b5b8135613a298482602086016138cf565b91505092915050565b600081359050613a4181614ee2565b92915050565b600060208284031215613a5d57613a5c614ac6565b5b6000613a6b84828501613911565b91505092915050565b60008060408385031215613a8b57613a8a614ac6565b5b6000613a9985828601613911565b9250506020613aaa85828601613911565b9150509250929050565b600080600060608486031215613acd57613acc614ac6565b5b6000613adb86828701613911565b9350506020613aec86828701613911565b9250506040613afd86828701613a32565b9150509250925092565b60008060008060808587031215613b2157613b20614ac6565b5b6000613b2f87828801613911565b9450506020613b4087828801613911565b9350506040613b5187828801613a32565b925050606085013567ffffffffffffffff811115613b7257613b71614ac1565b5b613b7e878288016139d6565b91505092959194509250565b60008060408385031215613ba157613ba0614ac6565b5b6000613baf85828601613911565b9250506020613bc085828601613982565b9150509250929050565b60008060408385031215613be157613be0614ac6565b5b6000613bef85828601613911565b9250506020613c0085828601613a32565b9150509250929050565b60008060408385031215613c2157613c20614ac6565b5b600083013567ffffffffffffffff811115613c3f57613c3e614ac1565b5b613c4b85828601613926565b9250506020613c5c85828601613a32565b9150509250929050565b60008060408385031215613c7d57613c7c614ac6565b5b600083013567ffffffffffffffff811115613c9b57613c9a614ac1565b5b613ca785828601613954565b9250506020613cb885828601613a32565b9150509250929050565b600060208284031215613cd857613cd7614ac6565b5b6000613ce684828501613997565b91505092915050565b600060208284031215613d0557613d04614ac6565b5b6000613d13848285016139ac565b91505092915050565b600060208284031215613d3257613d31614ac6565b5b6000613d40848285016139c1565b91505092915050565b600060208284031215613d5f57613d5e614ac6565b5b600082013567ffffffffffffffff811115613d7d57613d7c614ac1565b5b613d8984828501613a04565b91505092915050565b600060208284031215613da857613da7614ac6565b5b6000613db684828501613a32565b91505092915050565b6000613dcb83836141ee565b60208301905092915050565b613de0816147d7565b82525050565b613df7613df2826147d7565b614943565b82525050565b6000613e0882614656565b613e128185614684565b9350613e1d83614631565b8060005b83811015613e4e578151613e358882613dbf565b9750613e4083614677565b925050600181019050613e21565b5085935050505092915050565b613e64816147e9565b82525050565b613e73816147f5565b82525050565b6000613e8482614661565b613e8e8185614695565b9350613e9e818560208601614864565b613ea781614acb565b840191505092915050565b6000613ebd8261466c565b613ec781856146a6565b9350613ed7818560208601614864565b613ee081614acb565b840191505092915050565b6000613ef68261466c565b613f0081856146b7565b9350613f10818560208601614864565b80840191505092915050565b60008154613f2981614897565b613f3381866146b7565b94506001821660008114613f4e5760018114613f5f57613f92565b60ff19831686528186019350613f92565b613f6885614641565b60005b83811015613f8a57815481890152600182019150602081019050613f6b565b838801955050505b50505092915050565b6000613fa8600f836146a6565b9150613fb382614ae9565b602082019050919050565b6000613fcb6026836146a6565b9150613fd682614b12565b604082019050919050565b6000613fee601a836146a6565b9150613ff982614b61565b602082019050919050565b60006140116020836146a6565b915061401c82614b8a565b602082019050919050565b60006140346023836146a6565b915061403f82614bb3565b604082019050919050565b6000614057601c836146a6565b915061406282614c02565b602082019050919050565b600061407a6005836146b7565b915061408582614c2b565b600582019050919050565b600061409d6027836146a6565b91506140a882614c54565b604082019050919050565b60006140c06020836146a6565b91506140cb82614ca3565b602082019050919050565b60006140e3602f836146a6565b91506140ee82614ccc565b604082019050919050565b6000614106601c836146a6565b915061411182614d1b565b602082019050919050565b60006141296020836146a6565b915061413482614d44565b602082019050919050565b600061414c6018836146a6565b915061415782614d6d565b602082019050919050565b600061416f6026836146a6565b915061417a82614d96565b604082019050919050565b60006141926017836146a6565b915061419d82614de5565b602082019050919050565b60006141b5602f836146a6565b91506141c082614e0e565b604082019050919050565b60006141d86016836146a6565b91506141e382614e5d565b602082019050919050565b6141f78161484b565b82525050565b6142068161484b565b82525050565b60006142188284613de6565b60148201915081905092915050565b60006142338285613f1c565b915061423f8284613eeb565b915061424a8261406d565b91508190509392505050565b600060208201905061426b6000830184613dd7565b92915050565b60006080820190506142866000830187613dd7565b6142936020830186613dd7565b6142a060408301856141fd565b81810360608301526142b28184613e79565b905095945050505050565b600060208201905081810360008301526142d78184613dfd565b905092915050565b60006020820190506142f46000830184613e5b565b92915050565b600060208201905061430f6000830184613e6a565b92915050565b6000602082019050818103600083015261432f8184613eb2565b905092915050565b6000602082019050818103600083015261435081613f9b565b9050919050565b6000602082019050818103600083015261437081613fbe565b9050919050565b6000602082019050818103600083015261439081613fe1565b9050919050565b600060208201905081810360008301526143b081614004565b9050919050565b600060208201905081810360008301526143d081614027565b9050919050565b600060208201905081810360008301526143f08161404a565b9050919050565b6000602082019050818103600083015261441081614090565b9050919050565b60006020820190508181036000830152614430816140b3565b9050919050565b60006020820190508181036000830152614450816140d6565b9050919050565b60006020820190508181036000830152614470816140f9565b9050919050565b600060208201905081810360008301526144908161411c565b9050919050565b600060208201905081810360008301526144b08161413f565b9050919050565b600060208201905081810360008301526144d081614162565b9050919050565b600060208201905081810360008301526144f081614185565b9050919050565b60006020820190508181036000830152614510816141a8565b9050919050565b60006020820190508181036000830152614530816141cb565b9050919050565b600060208201905061454c60008301846141fd565b92915050565b600061455c61456d565b905061456882826148c9565b919050565b6000604051905090565b600067ffffffffffffffff82111561459257614591614a83565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145be576145bd614a83565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145ea576145e9614a83565b5b6145f382614acb565b9050602081019050919050565b600067ffffffffffffffff82111561461b5761461a614a83565b5b61462482614acb565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146cd8261484b565b91506146d88361484b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561470d5761470c6149c7565b5b828201905092915050565b60006147238261484b565b915061472e8361484b565b92508261473e5761473d6149f6565b5b828204905092915050565b60006147548261484b565b915061475f8361484b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614798576147976149c7565b5b828202905092915050565b60006147ae8261484b565b91506147b98361484b565b9250828210156147cc576147cb6149c7565b5b828203905092915050565b60006147e28261482b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614882578082015181840152602081019050614867565b83811115614891576000848401525b50505050565b600060028204905060018216806148af57607f821691505b602082108114156148c3576148c2614a25565b5b50919050565b6148d282614acb565b810181811067ffffffffffffffff821117156148f1576148f0614a83565b5b80604052505050565b60006149058261484b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614938576149376149c7565b5b600182019050919050565b600061494e82614955565b9050919050565b600061496082614adc565b9050919050565b60006149728261484b565b915061497d8361484b565b92508261498d5761498c6149f6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f5055444759203a3a2042656c6f77200000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5055444759203a3a204265796f6e64204d617820537570706c79000000000000600082015250565b7f5055444759203a3a20416c7265616479206d696e74656420332074696d657321600082015250565b7f5055444759203a3a205061796d656e742069732062656c6f772074686520707260008201527f6963650000000000000000000000000000000000000000000000000000000000602082015250565b7f5055444759203a3a204d696e74696e67206973206f6e20506175736500000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f5055444759203a3a2043616e6e6f742062652063616c6c65642062792061206360008201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5055444759203a3a205465616d20616c7265616479206d696e74656400000000600082015250565b7f5055444759203a3a20596f7520617265206e6f742077686974656c6973746564600082015250565b7f5055444759203a3a204e6f7420596574204163746976652e0000000000000000600082015250565b7f5055444759203a3a2043616e6e6f74206d696e74206265796f6e64206d61782060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f5055444759203a3a2043616e6e6f74206d696e74206265796f6e64207768697460008201527f656c697374206d6178206d696e74210000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b614e8f816147d7565b8114614e9a57600080fd5b50565b614ea6816147e9565b8114614eb157600080fd5b50565b614ebd816147f5565b8114614ec857600080fd5b50565b614ed4816147ff565b8114614edf57600080fd5b50565b614eeb8161484b565b8114614ef657600080fd5b5056fea26469706673582212206a7415b0872e95ae72b7d7d53ba3e28c06655928dce99a0de3307b0b4c7434cf64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102935760003560e01c806370a082311161015a578063b88d4fde116100c1578063e222c7f91161007a578063e222c7f9146109a0578063e2a70eaf146109b7578063e8b5498d146109e0578063e985e9c514610a0b578063eeb9052f14610a48578063f2fde38b14610a7157610293565b8063b88d4fde146108b6578063ba7a86b8146108df578063bc912e1a146108f6578063c08dfd3c14610921578063c4ae31681461094c578063c87b56dd1461096357610293565b80638bb64a8c116101135780638bb64a8c146107db5780638da5cb5b146107f257806395d89b411461081d578063a0712d6814610848578063a22cb46514610864578063b0962c531461088d57610293565b806370a08231146106dd578063715018a61461071a5780637cb647591461073157806383a974a21461075a5780638456cb591461078557806386a173ee146107b057610293565b806332cb6b0c116101fe5780634f6ccce7116101b75780634f6ccce7146105cd57806354214f691461060a5780635b8ad429146106355780636352211e1461064c57806363adc5a51461068957806365f13097146106b257610293565b806332cb6b0c146104e157806333bc1c5c1461050c5780633ccfd60b1461053757806342842e0e1461054e57806349590657146105775780634cf5f7a4146105a257610293565b8063095ea7b311610250578063095ea7b3146103ce57806318160ddd146103f75780631c16521c1461042257806323b872dd1461045f5780632904e6d9146104885780632f745c59146104a457610293565b806301ffc9a7146102985780630345e3cb146102d55780630675b7c61461031257806306fdde031461033b57806307e89ec014610366578063081812fc14610391575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613cef565b610a9a565b6040516102cc91906142df565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613a47565b610be4565b6040516103099190614537565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613d49565b610bfc565b005b34801561034757600080fd5b50610350610c92565b60405161035d9190614315565b60405180910390f35b34801561037257600080fd5b5061037b610d24565b6040516103889190614537565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613d92565b610d2a565b6040516103c59190614256565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613bca565b610da6565b005b34801561040357600080fd5b5061040c610eb1565b6040516104199190614537565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613a47565b610eba565b6040516104569190614537565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613ab4565b610ed2565b005b6104a2600480360381019061049d9190613c66565b610ee2565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613bca565b6111b0565b6040516104d89190614537565b60405180910390f35b3480156104ed57600080fd5b506104f6611374565b6040516105039190614537565b60405180910390f35b34801561051857600080fd5b5061052161137a565b60405161052e91906142df565b60405180910390f35b34801561054357600080fd5b5061054c61138d565b005b34801561055a57600080fd5b5061057560048036038101906105709190613ab4565b61145f565b005b34801561058357600080fd5b5061058c61147f565b60405161059991906142fa565b60405180910390f35b3480156105ae57600080fd5b506105b7611489565b6040516105c49190614315565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef9190613d92565b611517565b6040516106019190614537565b60405180910390f35b34801561061657600080fd5b5061061f611561565b60405161062c91906142df565b60405180910390f35b34801561064157600080fd5b5061064a611574565b005b34801561065857600080fd5b50610673600480360381019061066e9190613d92565b61161c565b6040516106809190614256565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613d92565b611632565b005b3480156106be57600080fd5b506106c76116b8565b6040516106d49190614537565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190613a47565b6116bd565b6040516107119190614537565b60405180910390f35b34801561072657600080fd5b5061072f61179d565b005b34801561073d57600080fd5b5061075860048036038101906107539190613cc2565b611825565b005b34801561076657600080fd5b5061076f6118ab565b60405161077c91906142bd565b60405180910390f35b34801561079157600080fd5b5061079a61195d565b6040516107a791906142df565b60405180910390f35b3480156107bc57600080fd5b506107c5611970565b6040516107d291906142df565b60405180910390f35b3480156107e757600080fd5b506107f0611983565b005b3480156107fe57600080fd5b50610807611a2b565b6040516108149190614256565b60405180910390f35b34801561082957600080fd5b50610832611a55565b60405161083f9190614315565b60405180910390f35b610862600480360381019061085d9190613d92565b611ae7565b005b34801561087057600080fd5b5061088b60048036038101906108869190613b8a565b611d3c565b005b34801561089957600080fd5b506108b460048036038101906108af9190613d49565b611eb4565b005b3480156108c257600080fd5b506108dd60048036038101906108d89190613b07565b611f4a565b005b3480156108eb57600080fd5b506108f4611f9d565b005b34801561090257600080fd5b5061090b612092565b6040516109189190614537565b60405180910390f35b34801561092d57600080fd5b50610936612098565b6040516109439190614537565b60405180910390f35b34801561095857600080fd5b5061096161209d565b005b34801561096f57600080fd5b5061098a60048036038101906109859190613d92565b612145565b6040516109979190614315565b60405180910390f35b3480156109ac57600080fd5b506109b56122a7565b005b3480156109c357600080fd5b506109de60048036038101906109d99190613d92565b61234f565b005b3480156109ec57600080fd5b506109f56123d5565b604051610a0291906142df565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190613a74565b6123e8565b604051610a3f91906142df565b60405180910390f35b348015610a5457600080fd5b50610a6f6004803603810190610a6a9190613c0a565b61247c565b005b348015610a7d57600080fd5b50610a986004803603810190610a939190613a47565b6125dc565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bcd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bdd5750610bdc826126d4565b5b9050919050565b600f6020528060005260406000206000915090505481565b610c0461273e565b73ffffffffffffffffffffffffffffffffffffffff16610c22611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614417565b60405180910390fd5b80600a9080519060200190610c8e9291906136d0565b5050565b606060018054610ca190614897565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90614897565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b5050505050905090565b60085481565b6000610d3582612746565b610d6b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610db18261161c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e19576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e3861273e565b73ffffffffffffffffffffffffffffffffffffffff1614158015610e6a5750610e6881610e6361273e565b6123e8565b155b15610ea1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eac838383612753565b505050565b60008054905090565b600e6020528060005260406000206000915090505481565b610edd838383612805565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f47906143f7565b60405180910390fd5b600c60029054906101000a900460ff16610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f96906143d7565b60405180910390fd5b6122b881610fab610eb1565b610fb591906146c2565b1115610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed906144b7565b60405180910390fd5b600181600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461104391906146c2565b1115611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b906144f7565b60405180910390fd5b806009546110929190614749565b3410156110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906143b7565b60405180910390fd5b6000336040516020016110e7919061420c565b60405160208183030381529060405280519060200120905061110c83600d5483612d2a565b61114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290614477565b60405180910390fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119a91906146c2565b925050819055506111ab3383612d41565b505050565b60006111bb836116bd565b82106111f3576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111fd610eb1565b905060008060005b83811015611357576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146112f757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611349578684141561134057819550505050505061136e565b83806001019450505b508080600101915050611205565b50600061136757611366614998565b5b8193505050505b92915050565b6122b881565b600c60019054906101000a900460ff1681565b61139561273e565b73ffffffffffffffffffffffffffffffffffffffff166113b3611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614417565b60405180910390fd5b6000479050611416611a2b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561145b573d6000803e3d6000fd5b5050565b61147a83838360405180602001604052806000815250611f4a565b505050565b6000600d54905090565b600b805461149690614897565b80601f01602080910402602001604051908101604052809291908181526020018280546114c290614897565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b505050505081565b6000611521610eb1565b8210611559576040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600c60009054906101000a900460ff1681565b61157c61273e565b73ffffffffffffffffffffffffffffffffffffffff1661159a611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790614417565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b600061162782612d5f565b600001519050919050565b61163a61273e565b73ffffffffffffffffffffffffffffffffffffffff16611658611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590614417565b60405180910390fd5b8060098190555050565b605881565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611725576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117a561273e565b73ffffffffffffffffffffffffffffffffffffffff166117c3611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090614417565b60405180910390fd5b6118236000612ee7565b565b61182d61273e565b73ffffffffffffffffffffffffffffffffffffffff1661184b611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614417565b60405180910390fd5b80600d8190555050565b6060600033905060006118bd826116bd565b905060008167ffffffffffffffff8111156118db576118da614a83565b5b6040519080825280602002602001820160405280156119095781602001602082028036833780820191505090505b50905060005b828110156119535761192184826111b0565b82828151811061193457611933614a54565b5b602002602001018181525050808061194b906148fa565b91505061190f565b5080935050505090565b600c60039054906101000a900460ff1681565b600c60029054906101000a900460ff1681565b61198b61273e565b73ffffffffffffffffffffffffffffffffffffffff166119a9611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146119ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f690614417565b60405180910390fd5b600c60029054906101000a900460ff1615600c60026101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a6490614897565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9090614897565b8015611add5780601f10611ab257610100808354040283529160200191611add565b820191906000526020600020905b815481529060010190602001808311611ac057829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906143f7565b60405180910390fd5b600c60019054906101000a900460ff16611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614497565b60405180910390fd5b6122b881611bb0610eb1565b611bba91906146c2565b1115611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290614377565b60405180910390fd5b605881600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4891906146c2565b1115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614397565b60405180910390fd5b80600854611c979190614749565b341015611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090614337565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2891906146c2565b92505081905550611d393382612d41565b50565b611d4461273e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611db661273e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e6361273e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ea891906142df565b60405180910390a35050565b611ebc61273e565b73ffffffffffffffffffffffffffffffffffffffff16611eda611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614417565b60405180910390fd5b80600b9080519060200190611f469291906136d0565b5050565b611f55848484612805565b611f6184848484612fad565b611f97576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611fa561273e565b73ffffffffffffffffffffffffffffffffffffffff16611fc3611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090614417565b60405180910390fd5b600c60049054906101000a900460ff1615612069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206090614457565b60405180910390fd5b6001600c60046101000a81548160ff021916908315150217905550612090336101f4612d41565b565b60095481565b600181565b6120a561273e565b73ffffffffffffffffffffffffffffffffffffffff166120c3611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614612119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211090614417565b60405180910390fd5b600c60039054906101000a900460ff1615600c60036101000a81548160ff021916908315150217905550565b606061215082612746565b61218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614437565b60405180910390fd5b600060018361219e91906146c2565b9050600c60009054906101000a900460ff1661224757600b80546121c190614897565b80601f01602080910402602001604051908101604052809291908181526020018280546121ed90614897565b801561223a5780601f1061220f5761010080835404028352916020019161223a565b820191906000526020600020905b81548152906001019060200180831161221d57829003601f168201915b50505050509150506122a2565b6000600a805461225690614897565b905011612272576040518060200160405280600081525061229e565b600a61227d8261313b565b60405160200161228e929190614227565b6040516020818303038152906040525b9150505b919050565b6122af61273e565b73ffffffffffffffffffffffffffffffffffffffff166122cd611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90614417565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b61235761273e565b73ffffffffffffffffffffffffffffffffffffffff16612375611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146123cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c290614417565b60405180910390fd5b8060088190555050565b600c60049054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61248461273e565b73ffffffffffffffffffffffffffffffffffffffff166124a2611a2b565b73ffffffffffffffffffffffffffffffffffffffff16146124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90614417565b60405180910390fd5b600082511161253c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612533906144d7565b60405180910390fd5b6122b88251612549610eb1565b61255391906146c2565b1115612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b90614517565b60405180910390fd5b60005b82518110156125d7576125c48382815181106125b6576125b5614a54565b5b602002602001015183612d41565b80806125cf906148fa565b915050612597565b505050565b6125e461273e565b73ffffffffffffffffffffffffffffffffffffffff16612602611a2b565b73ffffffffffffffffffffffffffffffffffffffff1614612658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264f90614417565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bf90614357565b60405180910390fd5b6126d181612ee7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061281082612d5f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661283761273e565b73ffffffffffffffffffffffffffffffffffffffff161480612893575061285c61273e565b73ffffffffffffffffffffffffffffffffffffffff1661287b84610d2a565b73ffffffffffffffffffffffffffffffffffffffff16145b806128af57506128ae82600001516128a961273e565b6123e8565b5b9050806128e8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612951576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129b8576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129c5858585600161329c565b6129d56000848460000151612753565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612cba57612c1981612746565b15612cb95782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d2385858560016132a2565b5050505050565b600082612d3785846132a8565b1490509392505050565b612d5b82826040518060200160405280600081525061331d565b5050565b612d67613756565b612d7082612746565b612da6576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008290505b60008110612eaf576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ea0578092505050612ee2565b50808060019003915050612dac565b506040517fe7c0edfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612fce8473ffffffffffffffffffffffffffffffffffffffff1661332f565b1561312e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ff761273e565b8786866040518563ffffffff1660e01b81526004016130199493929190614271565b602060405180830381600087803b15801561303357600080fd5b505af192505050801561306457506040513d601f19601f820116820180604052508101906130619190613d1c565b60015b6130de573d8060008114613094576040519150601f19603f3d011682016040523d82523d6000602084013e613099565b606091505b506000815114156130d6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613133565b600190505b949350505050565b60606000821415613183576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613297565b600082905060005b600082146131b557808061319e906148fa565b915050600a826131ae9190614718565b915061318b565b60008167ffffffffffffffff8111156131d1576131d0614a83565b5b6040519080825280601f01601f1916602001820160405280156132035781602001600182028036833780820191505090505b5090505b600085146132905760018261321c91906147a3565b9150600a8561322b9190614967565b603061323791906146c2565b60f81b81838151811061324d5761324c614a54565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132899190614718565b9450613207565b8093505050505b919050565b50505050565b50505050565b60008082905060005b84518110156133125760008582815181106132cf576132ce614a54565b5b602002602001015190508083116132f1576132ea8382613352565b92506132fe565b6132fb8184613352565b92505b50808061330a906148fa565b9150506132b1565b508091505092915050565b61332a8383836001613369565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156133d6576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613411576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61341e600086838761329c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156136b357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483801561366757506136656000888488612fad565b155b1561369e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818060010192505080806001019150506135ec565b5080600081905550506136c960008683876132a2565b5050505050565b8280546136dc90614897565b90600052602060002090601f0160209004810192826136fe5760008555613745565b82601f1061371757805160ff1916838001178555613745565b82800160010185558215613745579182015b82811115613744578251825591602001919060010190613729565b5b5090506137529190613790565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137a9576000816000905550600101613791565b5090565b60006137c06137bb84614577565b614552565b905080838252602082019050828560208602820111156137e3576137e2614ab7565b5b60005b8581101561381357816137f98882613911565b8452602084019350602083019250506001810190506137e6565b5050509392505050565b600061383061382b846145a3565b614552565b9050808382526020820190508285602086028201111561385357613852614ab7565b5b60005b8581101561388357816138698882613997565b845260208401935060208301925050600181019050613856565b5050509392505050565b60006138a061389b846145cf565b614552565b9050828152602081018484840111156138bc576138bb614abc565b5b6138c7848285614855565b509392505050565b60006138e26138dd84614600565b614552565b9050828152602081018484840111156138fe576138fd614abc565b5b613909848285614855565b509392505050565b60008135905061392081614e86565b92915050565b600082601f83011261393b5761393a614ab2565b5b813561394b8482602086016137ad565b91505092915050565b600082601f83011261396957613968614ab2565b5b813561397984826020860161381d565b91505092915050565b60008135905061399181614e9d565b92915050565b6000813590506139a681614eb4565b92915050565b6000813590506139bb81614ecb565b92915050565b6000815190506139d081614ecb565b92915050565b600082601f8301126139eb576139ea614ab2565b5b81356139fb84826020860161388d565b91505092915050565b600082601f830112613a1957613a18614ab2565b5b8135613a298482602086016138cf565b91505092915050565b600081359050613a4181614ee2565b92915050565b600060208284031215613a5d57613a5c614ac6565b5b6000613a6b84828501613911565b91505092915050565b60008060408385031215613a8b57613a8a614ac6565b5b6000613a9985828601613911565b9250506020613aaa85828601613911565b9150509250929050565b600080600060608486031215613acd57613acc614ac6565b5b6000613adb86828701613911565b9350506020613aec86828701613911565b9250506040613afd86828701613a32565b9150509250925092565b60008060008060808587031215613b2157613b20614ac6565b5b6000613b2f87828801613911565b9450506020613b4087828801613911565b9350506040613b5187828801613a32565b925050606085013567ffffffffffffffff811115613b7257613b71614ac1565b5b613b7e878288016139d6565b91505092959194509250565b60008060408385031215613ba157613ba0614ac6565b5b6000613baf85828601613911565b9250506020613bc085828601613982565b9150509250929050565b60008060408385031215613be157613be0614ac6565b5b6000613bef85828601613911565b9250506020613c0085828601613a32565b9150509250929050565b60008060408385031215613c2157613c20614ac6565b5b600083013567ffffffffffffffff811115613c3f57613c3e614ac1565b5b613c4b85828601613926565b9250506020613c5c85828601613a32565b9150509250929050565b60008060408385031215613c7d57613c7c614ac6565b5b600083013567ffffffffffffffff811115613c9b57613c9a614ac1565b5b613ca785828601613954565b9250506020613cb885828601613a32565b9150509250929050565b600060208284031215613cd857613cd7614ac6565b5b6000613ce684828501613997565b91505092915050565b600060208284031215613d0557613d04614ac6565b5b6000613d13848285016139ac565b91505092915050565b600060208284031215613d3257613d31614ac6565b5b6000613d40848285016139c1565b91505092915050565b600060208284031215613d5f57613d5e614ac6565b5b600082013567ffffffffffffffff811115613d7d57613d7c614ac1565b5b613d8984828501613a04565b91505092915050565b600060208284031215613da857613da7614ac6565b5b6000613db684828501613a32565b91505092915050565b6000613dcb83836141ee565b60208301905092915050565b613de0816147d7565b82525050565b613df7613df2826147d7565b614943565b82525050565b6000613e0882614656565b613e128185614684565b9350613e1d83614631565b8060005b83811015613e4e578151613e358882613dbf565b9750613e4083614677565b925050600181019050613e21565b5085935050505092915050565b613e64816147e9565b82525050565b613e73816147f5565b82525050565b6000613e8482614661565b613e8e8185614695565b9350613e9e818560208601614864565b613ea781614acb565b840191505092915050565b6000613ebd8261466c565b613ec781856146a6565b9350613ed7818560208601614864565b613ee081614acb565b840191505092915050565b6000613ef68261466c565b613f0081856146b7565b9350613f10818560208601614864565b80840191505092915050565b60008154613f2981614897565b613f3381866146b7565b94506001821660008114613f4e5760018114613f5f57613f92565b60ff19831686528186019350613f92565b613f6885614641565b60005b83811015613f8a57815481890152600182019150602081019050613f6b565b838801955050505b50505092915050565b6000613fa8600f836146a6565b9150613fb382614ae9565b602082019050919050565b6000613fcb6026836146a6565b9150613fd682614b12565b604082019050919050565b6000613fee601a836146a6565b9150613ff982614b61565b602082019050919050565b60006140116020836146a6565b915061401c82614b8a565b602082019050919050565b60006140346023836146a6565b915061403f82614bb3565b604082019050919050565b6000614057601c836146a6565b915061406282614c02565b602082019050919050565b600061407a6005836146b7565b915061408582614c2b565b600582019050919050565b600061409d6027836146a6565b91506140a882614c54565b604082019050919050565b60006140c06020836146a6565b91506140cb82614ca3565b602082019050919050565b60006140e3602f836146a6565b91506140ee82614ccc565b604082019050919050565b6000614106601c836146a6565b915061411182614d1b565b602082019050919050565b60006141296020836146a6565b915061413482614d44565b602082019050919050565b600061414c6018836146a6565b915061415782614d6d565b602082019050919050565b600061416f6026836146a6565b915061417a82614d96565b604082019050919050565b60006141926017836146a6565b915061419d82614de5565b602082019050919050565b60006141b5602f836146a6565b91506141c082614e0e565b604082019050919050565b60006141d86016836146a6565b91506141e382614e5d565b602082019050919050565b6141f78161484b565b82525050565b6142068161484b565b82525050565b60006142188284613de6565b60148201915081905092915050565b60006142338285613f1c565b915061423f8284613eeb565b915061424a8261406d565b91508190509392505050565b600060208201905061426b6000830184613dd7565b92915050565b60006080820190506142866000830187613dd7565b6142936020830186613dd7565b6142a060408301856141fd565b81810360608301526142b28184613e79565b905095945050505050565b600060208201905081810360008301526142d78184613dfd565b905092915050565b60006020820190506142f46000830184613e5b565b92915050565b600060208201905061430f6000830184613e6a565b92915050565b6000602082019050818103600083015261432f8184613eb2565b905092915050565b6000602082019050818103600083015261435081613f9b565b9050919050565b6000602082019050818103600083015261437081613fbe565b9050919050565b6000602082019050818103600083015261439081613fe1565b9050919050565b600060208201905081810360008301526143b081614004565b9050919050565b600060208201905081810360008301526143d081614027565b9050919050565b600060208201905081810360008301526143f08161404a565b9050919050565b6000602082019050818103600083015261441081614090565b9050919050565b60006020820190508181036000830152614430816140b3565b9050919050565b60006020820190508181036000830152614450816140d6565b9050919050565b60006020820190508181036000830152614470816140f9565b9050919050565b600060208201905081810360008301526144908161411c565b9050919050565b600060208201905081810360008301526144b08161413f565b9050919050565b600060208201905081810360008301526144d081614162565b9050919050565b600060208201905081810360008301526144f081614185565b9050919050565b60006020820190508181036000830152614510816141a8565b9050919050565b60006020820190508181036000830152614530816141cb565b9050919050565b600060208201905061454c60008301846141fd565b92915050565b600061455c61456d565b905061456882826148c9565b919050565b6000604051905090565b600067ffffffffffffffff82111561459257614591614a83565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145be576145bd614a83565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145ea576145e9614a83565b5b6145f382614acb565b9050602081019050919050565b600067ffffffffffffffff82111561461b5761461a614a83565b5b61462482614acb565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146cd8261484b565b91506146d88361484b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561470d5761470c6149c7565b5b828201905092915050565b60006147238261484b565b915061472e8361484b565b92508261473e5761473d6149f6565b5b828204905092915050565b60006147548261484b565b915061475f8361484b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614798576147976149c7565b5b828202905092915050565b60006147ae8261484b565b91506147b98361484b565b9250828210156147cc576147cb6149c7565b5b828203905092915050565b60006147e28261482b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614882578082015181840152602081019050614867565b83811115614891576000848401525b50505050565b600060028204905060018216806148af57607f821691505b602082108114156148c3576148c2614a25565b5b50919050565b6148d282614acb565b810181811067ffffffffffffffff821117156148f1576148f0614a83565b5b80604052505050565b60006149058261484b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614938576149376149c7565b5b600182019050919050565b600061494e82614955565b9050919050565b600061496082614adc565b9050919050565b60006149728261484b565b915061497d8361484b565b92508261498d5761498c6149f6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f5055444759203a3a2042656c6f77200000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5055444759203a3a204265796f6e64204d617820537570706c79000000000000600082015250565b7f5055444759203a3a20416c7265616479206d696e74656420332074696d657321600082015250565b7f5055444759203a3a205061796d656e742069732062656c6f772074686520707260008201527f6963650000000000000000000000000000000000000000000000000000000000602082015250565b7f5055444759203a3a204d696e74696e67206973206f6e20506175736500000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f5055444759203a3a2043616e6e6f742062652063616c6c65642062792061206360008201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5055444759203a3a205465616d20616c7265616479206d696e74656400000000600082015250565b7f5055444759203a3a20596f7520617265206e6f742077686974656c6973746564600082015250565b7f5055444759203a3a204e6f7420596574204163746976652e0000000000000000600082015250565b7f5055444759203a3a2043616e6e6f74206d696e74206265796f6e64206d61782060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f5055444759203a3a2043616e6e6f74206d696e74206265796f6e64207768697460008201527f656c697374206d6178206d696e74210000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b614e8f816147d7565b8114614e9a57600080fd5b50565b614ea6816147e9565b8114614eb157600080fd5b50565b614ebd816147f5565b8114614ec857600080fd5b50565b614ed4816147ff565b8114614edf57600080fd5b50565b614eeb8161484b565b8114614ef657600080fd5b5056fea26469706673582212206a7415b0872e95ae72b7d7d53ba3e28c06655928dce99a0de3307b0b4c7434cf64736f6c63430008070033
Deployed Bytecode Sourcemap
25555:5181:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16587:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26208:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29144:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18046:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25785:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19057:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18702:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15250:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26151:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19734:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26992:824;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15543:1036;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25633:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26000:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30597:136;;;;;;;;;;;;;:::i;:::-;;19914:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29528:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25927:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15359:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25971:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30504:85;;;;;;;;;;;;;:::i;:::-;;17912:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30027:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25681:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16967:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5502:103;;;;;;;;;;;;;:::i;:::-;;29415:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28730:406;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26061:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26029:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29710:98;;;;;;;;;;;;;:::i;:::-;;5275:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18156:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26471:513;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19271:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29265:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20109:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27824:174;;;;;;;;;;;;;:::i;:::-;;25836:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25732:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29628:74;;;;;;;;;;;;;:::i;:::-;;28163:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29816:89;;;;;;;;;;;;;:::i;:::-;;29914:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26085:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19560:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30139:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5615:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16587:372;16689:4;16741:25;16726:40;;;:11;:40;;;;:105;;;;16798:33;16783:48;;;:11;:48;;;;16726:105;:172;;;;16863:35;16848:50;;;:11;:50;;;;16726:172;:225;;;;16915:36;16939:11;16915:23;:36::i;:::-;16726:225;16706:245;;16587:372;;;:::o;26208:53::-;;;;;;;;;;;;;;;;;:::o;29144:115::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29238:13:::1;29223:12;:28;;;;;;;;;;;;:::i;:::-;;29144:115:::0;:::o;18046:100::-;18100:13;18133:5;18126:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18046:100;:::o;25785:44::-;;;;:::o;19057:204::-;19125:7;19150:16;19158:7;19150;:16::i;:::-;19145:64;;19175:34;;;;;;;;;;;;;;19145:64;19229:15;:24;19245:7;19229:24;;;;;;;;;;;;;;;;;;;;;19222:31;;19057:204;;;:::o;18702:345::-;18775:13;18791:24;18807:7;18791:15;:24::i;:::-;18775:40;;18836:5;18830:11;;:2;:11;;;18826:48;;;18850:24;;;;;;;;;;;;;;18826:48;18907:5;18891:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;18917:37;18934:5;18941:12;:10;:12::i;:::-;18917:16;:37::i;:::-;18916:38;18891:63;18887:111;;;18963:35;;;;;;;;;;;;;;18887:111;19011:28;19020:2;19024:7;19033:5;19011:8;:28::i;:::-;18764:283;18702:345;;:::o;15250:101::-;15303:7;15330:13;;15323:20;;15250:101;:::o;26151:50::-;;;;;;;;;;;;;;;;;:::o;19734:170::-;19868:28;19878:4;19884:2;19888:7;19868:9;:28::i;:::-;19734:170;;;:::o;26992:824::-;26389:10;26376:23;;:9;:23;;;26368:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27113:13:::1;;;;;;;;;;;27105:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25670:4;27195:9;27179:13;:11;:13::i;:::-;:25;;;;:::i;:::-;27178:41;;27170:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;25777:1;27315:9;27282:18;:30;27301:10;27282:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;27281:67;;27273:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;27456:9;27433:20;;:32;;;;:::i;:::-;27419:9;:47;;27411:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;27545:14;27589:10;27572:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;27562:39;;;;;;27545:56;;27620:52;27639:12;27653:10;;27665:6;27620:18;:52::i;:::-;27612:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27756:9;27722:18;:30;27741:10;27722:30;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;27776:32;27786:10;27798:9;27776;:32::i;:::-;27094:722;26992:824:::0;;:::o;15543:1036::-;15632:7;15665:16;15675:5;15665:9;:16::i;:::-;15656:5;:25;15652:61;;15690:23;;;;;;;;;;;;;;15652:61;15724:22;15749:13;:11;:13::i;:::-;15724:38;;15773:19;15803:25;15992:9;15987:466;16007:14;16003:1;:18;15987:466;;;16047:31;16081:11;:14;16093:1;16081:14;;;;;;;;;;;16047:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16144:1;16118:28;;:9;:14;;;:28;;;16114:111;;16191:9;:14;;;16171:34;;16114:111;16268:5;16247:26;;:17;:26;;;16243:195;;;16317:5;16302:11;:20;16298:85;;;16358:1;16351:8;;;;;;;;;16298:85;16405:13;;;;;;;16243:195;16028:425;16023:3;;;;;;;15987:466;;;;16536:5;16529:13;;;;:::i;:::-;;16560:11;16553:18;;;;;15543:1036;;;;;:::o;25633:41::-;25670:4;25633:41;:::o;26000:22::-;;;;;;;;;;;;;:::o;30597:136::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30638:13:::1;30654:21;30638:37;;30694:7;:5;:7::i;:::-;30686:25;;:36;30712:8;30686:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30635:98;30597:136::o:0;19914:185::-;20052:39;20069:4;20075:2;20079:7;20052:39;;;;;;;;;;;;:16;:39::i;:::-;19914:185;;;:::o;29528:92::-;29576:7;29602:10;;29595:17;;29528:92;:::o;25927:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15359:176::-;15426:7;15459:13;:11;:13::i;:::-;15450:5;:22;15446:58;;15481:23;;;;;;;;;;;;;;15446:58;15522:5;15515:12;;15359:176;;;:::o;25971:22::-;;;;;;;;;;;;;:::o;30504:85::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30571:10:::1;;;;;;;;;;;30570:11;30557:10;;:24;;;;;;;;;;;;;;;;;;30504:85::o:0;17912:124::-;17976:7;18003:20;18015:7;18003:11;:20::i;:::-;:25;;;17996:32;;17912:124;;;:::o;30027:108::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30122:5:::1;30099:20;:28;;;;30027:108:::0;:::o;25681:44::-;25723:2;25681:44;:::o;16967:206::-;17031:7;17072:1;17055:19;;:5;:19;;;17051:60;;;17083:28;;;;;;;;;;;;;;17051:60;17137:12;:19;17150:5;17137:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;17129:36;;17122:43;;16967:206;;;:::o;5502:103::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5567:30:::1;5594:1;5567:18;:30::i;:::-;5502:103::o:0;29415:105::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29501:11:::1;29488:10;:24;;;;29415:105:::0;:::o;28730:406::-;28772:16;28800:14;28817:10;28800:27;;28838:24;28865:17;28875:6;28865:9;:17::i;:::-;28838:44;;28893:25;28935:16;28921:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28893:59;;28969:13;28965:136;28996:16;28988:5;:24;28965:136;;;29055:34;29075:6;29083:5;29055:19;:34::i;:::-;29037:8;29046:5;29037:15;;;;;;;;:::i;:::-;;;;;;;:52;;;;;29014:7;;;;;:::i;:::-;;;;28965:136;;;;29120:8;29113:15;;;;;28730:406;:::o;26061:17::-;;;;;;;;;;;;;:::o;26029:25::-;;;;;;;;;;;;;:::o;29710:98::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29787:13:::1;;;;;;;;;;;29786:14;29770:13;;:30;;;;;;;;;;;;;;;;;;29710:98::o:0;5275:87::-;5321:7;5348:6;;;;;;;;;;;5341:13;;5275:87;:::o;18156:104::-;18212:13;18245:7;18238:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18156:104;:::o;26471:513::-;26389:10;26376:23;;:9;:23;;;26368:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26552:10:::1;;;;;;;;;;;26544:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;25670:4;26627:9;26611:13;:11;:13::i;:::-;:25;;;;:::i;:::-;26610:41;;26602:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;25723:2;26731:9;26702:15;:27;26718:10;26702:27;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;26701:59;;26693:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;26850:9;26830:17;;:29;;;;:::i;:::-;26816:9;:44;;26808:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;26924:9;26893:15;:27;26909:10;26893:27;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;26944:32;26954:10;26966:9;26944;:32::i;:::-;26471:513:::0;:::o;19271:279::-;19374:12;:10;:12::i;:::-;19362:24;;:8;:24;;;19358:54;;;19395:17;;;;;;;;;;;;;;19358:54;19470:8;19425:18;:32;19444:12;:10;:12::i;:::-;19425:32;;;;;;;;;;;;;;;:42;19458:8;19425:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;19523:8;19494:48;;19509:12;:10;:12::i;:::-;19494:48;;;19533:8;19494:48;;;;;;:::i;:::-;;;;;;;;19271:279;;:::o;29265:142::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29379:20:::1;29357:19;:42;;;;;;;;;;;;:::i;:::-;;29265:142:::0;:::o;20109:308::-;20268:28;20278:4;20284:2;20288:7;20268:9;:28::i;:::-;20312:48;20335:4;20341:2;20345:7;20354:5;20312:22;:48::i;:::-;20307:102;;20369:40;;;;;;;;;;;;;;20307:102;20109:308;;;;:::o;27824:174::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27882:10:::1;;;;;;;;;;;27881:11;27873:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;27949:4;27936:10;;:17;;;;;;;;;;;;;;;;;;27964:26;27974:10;27986:3;27964:9;:26::i;:::-;27824:174::o:0;25836:47::-;;;;:::o;25732:46::-;25777:1;25732:46;:::o;29628:74::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29689:5:::1;;;;;;;;;;;29688:6;29680:5;;:14;;;;;;;;;;;;;;;;;;29628:74::o:0;28163:473::-;28236:13;28270:16;28278:7;28270;:16::i;:::-;28262:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28351:14;28378:1;28368:7;:11;;;;:::i;:::-;28351:28;;28396:10;;;;;;;;;;;28392:68;;28429:19;28422:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28392:68;28553:1;28530:12;28524:26;;;;;:::i;:::-;;;:30;:104;;;;;;;;;;;;;;;;;28581:12;28595:17;:6;:15;:17::i;:::-;28564:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28524:104;28517:111;;;28163:473;;;;:::o;29816:89::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29887:10:::1;;;;;;;;;;;29886:11;29873:10;;:24;;;;;;;;;;;;;;;;;;29816:89::o:0;29914:104::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30005:5:::1;29985:17;:25;;;;29914:104:::0;:::o;26085:22::-;;;;;;;;;;;;;:::o;19560:164::-;19657:4;19681:18;:25;19700:5;19681:25;;;;;;;;;;;;;;;:35;19707:8;19681:35;;;;;;;;;;;;;;;;;;;;;;;;;19674:42;;19560:164;;;;:::o;30139:357::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30249:1:::1;30231:8;:15;:19;30223:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;25670:4;30313:8;:15;30297:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:45;;30289:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;30385:6;30380:109;30401:8;:15;30397:1;:19;30380:109;;;30447:30;30457:8;30466:1;30457:11;;;;;;;;:::i;:::-;;;;;;;;30470:6;30447:9;:30::i;:::-;30418:3;;;;;:::i;:::-;;;;30380:109;;;;30139:357:::0;;:::o;5615:201::-;5423:12;:10;:12::i;:::-;5412:23;;:7;:5;:7::i;:::-;:23;;;5404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5724:1:::1;5704:22;;:8;:22;;;;5696:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5780:28;5799:8;5780:18;:28::i;:::-;5615:201:::0;:::o;10908:157::-;10993:4;11032:25;11017:40;;;:11;:40;;;;11010:47;;10908:157;;;:::o;4674:98::-;4727:7;4754:10;4747:17;;4674:98;:::o;20427:112::-;20484:4;20518:13;;20508:7;:23;20501:30;;20427:112;;;:::o;24236:196::-;24378:2;24351:15;:24;24367:7;24351:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24416:7;24412:2;24396:28;;24405:5;24396:28;;;;;;;;;;;;24236:196;;;:::o;22264:1962::-;22379:35;22417:20;22429:7;22417:11;:20::i;:::-;22379:58;;22450:22;22492:13;:18;;;22476:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;22551:12;:10;:12::i;:::-;22527:36;;:20;22539:7;22527:11;:20::i;:::-;:36;;;22476:87;:154;;;;22580:50;22597:13;:18;;;22617:12;:10;:12::i;:::-;22580:16;:50::i;:::-;22476:154;22450:181;;22649:17;22644:66;;22675:35;;;;;;;;;;;;;;22644:66;22747:4;22725:26;;:13;:18;;;:26;;;22721:67;;22760:28;;;;;;;;;;;;;;22721:67;22817:1;22803:16;;:2;:16;;;22799:52;;;22828:23;;;;;;;;;;;;;;22799:52;22864:43;22886:4;22892:2;22896:7;22905:1;22864:21;:43::i;:::-;22972:49;22989:1;22993:7;23002:13;:18;;;22972:8;:49::i;:::-;23347:1;23317:12;:18;23330:4;23317:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23391:1;23363:12;:16;23376:2;23363:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23437:2;23409:11;:20;23421:7;23409:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;23499:15;23454:11;:20;23466:7;23454:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;23767:19;23799:1;23789:7;:11;23767:33;;23860:1;23819:43;;:11;:24;23831:11;23819:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;23815:295;;;23887:20;23895:11;23887:7;:20::i;:::-;23883:212;;;23964:13;:18;;;23932:11;:24;23944:11;23932:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;24047:13;:28;;;24005:11;:24;24017:11;24005:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;23883:212;23815:295;23292:829;24157:7;24153:2;24138:27;;24147:4;24138:27;;;;;;;;;;;;24176:42;24197:4;24203:2;24207:7;24216:1;24176:20;:42::i;:::-;22368:1858;;22264:1962;;;:::o;1616:190::-;1741:4;1794;1765:25;1778:5;1785:4;1765:12;:25::i;:::-;:33;1758:40;;1616:190;;;;;:::o;20547:104::-;20616:27;20626:2;20630:8;20616:27;;;;;;;;;;;;:9;:27::i;:::-;20547:104;;:::o;17398:504::-;17459:21;;:::i;:::-;17498:16;17506:7;17498;:16::i;:::-;17493:61;;17523:31;;;;;;;;;;;;;;17493:61;17597:12;17612:7;17597:22;;17592:245;17629:1;17621:4;:9;17592:245;;17659:31;17693:11;:17;17705:4;17693:17;;;;;;;;;;;17659:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17759:1;17733:28;;:9;:14;;;:28;;;17729:93;;17793:9;17786:16;;;;;;17729:93;17640:197;17632:6;;;;;;;;17592:245;;;;17867:27;;;;;;;;;;;;;;17398:504;;;;:::o;5826:191::-;5900:16;5919:6;;;;;;;;;;;5900:25;;5945:8;5936:6;;:17;;;;;;;;;;;;;;;;;;6000:8;5969:40;;5990:8;5969:40;;;;;;;;;;;;5889:128;5826:191;:::o;24442:765::-;24597:4;24618:15;:2;:13;;;:15::i;:::-;24614:586;;;24670:2;24654:36;;;24691:12;:10;:12::i;:::-;24705:4;24711:7;24720:5;24654:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;24650:495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24917:1;24900:6;:13;:18;24896:234;;;24927:40;;;;;;;;;;;;;;24896:234;25080:6;25074:13;25065:6;25061:2;25057:15;25050:38;24650:495;24787:45;;;24777:55;;;:6;:55;;;;24770:62;;;;;24614:586;25184:4;25177:11;;24442:765;;;;;;;:::o;2961:723::-;3017:13;3247:1;3238:5;:10;3234:53;;;3265:10;;;;;;;;;;;;;;;;;;;;;3234:53;3297:12;3312:5;3297:20;;3328:14;3353:78;3368:1;3360:4;:9;3353:78;;3386:8;;;;;:::i;:::-;;;;3417:2;3409:10;;;;;:::i;:::-;;;3353:78;;;3441:19;3473:6;3463:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3441:39;;3491:154;3507:1;3498:5;:10;3491:154;;3535:1;3525:11;;;;;:::i;:::-;;;3602:2;3594:5;:10;;;;:::i;:::-;3581:2;:24;;;;:::i;:::-;3568:39;;3551:6;3558;3551:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3631:2;3622:11;;;;;:::i;:::-;;;3491:154;;;3669:6;3655:21;;;;;2961:723;;;;:::o;25217:159::-;;;;;:::o;25386:158::-;;;;;:::o;1814:675::-;1897:7;1917:20;1940:4;1917:27;;1960:9;1955:497;1979:5;:12;1975:1;:16;1955:497;;;2013:20;2036:5;2042:1;2036:8;;;;;;;;:::i;:::-;;;;;;;;2013:31;;2079:12;2063;:28;2059:382;;2206:42;2221:12;2235;2206:14;:42::i;:::-;2191:57;;2059:382;;;2383:42;2398:12;2412;2383:14;:42::i;:::-;2368:57;;2059:382;1998:454;1993:3;;;;;:::i;:::-;;;;1955:497;;;;2469:12;2462:19;;;1814:675;;;;:::o;20661:163::-;20784:32;20790:2;20794:8;20804:5;20811:4;20784:5;:32::i;:::-;20661:163;;;:::o;6205:326::-;6265:4;6522:1;6500:7;:19;;;:23;6493:30;;6205:326;;;:::o;2497:224::-;2565:13;2628:1;2622:4;2615:15;2657:1;2651:4;2644:15;2698:4;2692;2682:21;2673:30;;2497:224;;;;:::o;20834:1420::-;20973:20;20996:13;;20973:36;;21038:1;21024:16;;:2;:16;;;21020:48;;;21049:19;;;;;;;;;;;;;;21020:48;21095:1;21083:8;:13;21079:44;;;21105:18;;;;;;;;;;;;;;21079:44;21136:61;21166:1;21170:2;21174:12;21188:8;21136:21;:61::i;:::-;21512:8;21476:12;:16;21489:2;21476:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21577:8;21536:12;:16;21549:2;21536:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21636:2;21603:11;:25;21615:12;21603:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;21703:15;21653:11;:25;21665:12;21653:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;21736:20;21759:12;21736:35;;21793:9;21788:330;21808:8;21804:1;:12;21788:330;;;21872:12;21868:2;21847:38;;21864:1;21847:38;;;;;;;;;;;;21908:4;:68;;;;;21917:59;21948:1;21952:2;21956:12;21970:5;21917:22;:59::i;:::-;21916:60;21908:68;21904:164;;;22008:40;;;;;;;;;;;;;;21904:164;22088:14;;;;;;;21818:3;;;;;;;21788:330;;;;22150:12;22134:13;:28;;;;21451:723;22186:60;22215:1;22219:2;22223:12;22237:8;22186:20;:60::i;:::-;20962:1292;20834:1420;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::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:139::-;3447:5;3485:6;3472:20;3463:29;;3501:33;3528:5;3501:33;:::i;:::-;3401:139;;;;:::o;3546:137::-;3591:5;3629:6;3616:20;3607:29;;3645:32;3671:5;3645:32;:::i;:::-;3546:137;;;;:::o;3689:141::-;3745:5;3776:6;3770:13;3761:22;;3792:32;3818:5;3792:32;:::i;:::-;3689:141;;;;:::o;3849:338::-;3904:5;3953:3;3946:4;3938:6;3934:17;3930:27;3920:122;;3961:79;;:::i;:::-;3920:122;4078:6;4065:20;4103:78;4177:3;4169:6;4162:4;4154:6;4150:17;4103:78;:::i;:::-;4094:87;;3910:277;3849:338;;;;:::o;4207:340::-;4263:5;4312:3;4305:4;4297:6;4293:17;4289:27;4279:122;;4320:79;;:::i;:::-;4279:122;4437:6;4424:20;4462:79;4537:3;4529:6;4522:4;4514:6;4510:17;4462:79;:::i;:::-;4453:88;;4269:278;4207:340;;;;:::o;4553:139::-;4599:5;4637:6;4624:20;4615:29;;4653:33;4680:5;4653:33;:::i;:::-;4553:139;;;;:::o;4698:329::-;4757:6;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;4698:329;;;;:::o;5033:474::-;5101:6;5109;5158:2;5146:9;5137:7;5133:23;5129:32;5126:119;;;5164:79;;:::i;:::-;5126:119;5284:1;5309:53;5354:7;5345:6;5334:9;5330:22;5309:53;:::i;:::-;5299:63;;5255:117;5411:2;5437:53;5482:7;5473:6;5462:9;5458:22;5437:53;:::i;:::-;5427:63;;5382:118;5033:474;;;;;:::o;5513:619::-;5590:6;5598;5606;5655:2;5643:9;5634:7;5630:23;5626:32;5623:119;;;5661:79;;:::i;:::-;5623:119;5781:1;5806:53;5851:7;5842:6;5831:9;5827:22;5806:53;:::i;:::-;5796:63;;5752:117;5908:2;5934:53;5979:7;5970:6;5959:9;5955:22;5934:53;:::i;:::-;5924:63;;5879:118;6036:2;6062:53;6107:7;6098:6;6087:9;6083:22;6062:53;:::i;:::-;6052:63;;6007:118;5513:619;;;;;:::o;6138:943::-;6233:6;6241;6249;6257;6306:3;6294:9;6285:7;6281:23;6277:33;6274:120;;;6313:79;;:::i;:::-;6274:120;6433:1;6458:53;6503:7;6494:6;6483:9;6479:22;6458:53;:::i;:::-;6448:63;;6404:117;6560:2;6586:53;6631:7;6622:6;6611:9;6607:22;6586:53;:::i;:::-;6576:63;;6531:118;6688:2;6714:53;6759:7;6750:6;6739:9;6735:22;6714:53;:::i;:::-;6704:63;;6659:118;6844:2;6833:9;6829:18;6816:32;6875:18;6867:6;6864:30;6861:117;;;6897:79;;:::i;:::-;6861:117;7002:62;7056:7;7047:6;7036:9;7032:22;7002:62;:::i;:::-;6992:72;;6787:287;6138:943;;;;;;;:::o;7087:468::-;7152:6;7160;7209:2;7197:9;7188:7;7184:23;7180:32;7177:119;;;7215:79;;:::i;:::-;7177:119;7335:1;7360:53;7405:7;7396:6;7385:9;7381:22;7360:53;:::i;:::-;7350:63;;7306:117;7462:2;7488:50;7530:7;7521:6;7510:9;7506:22;7488:50;:::i;:::-;7478:60;;7433:115;7087:468;;;;;:::o;7561:474::-;7629:6;7637;7686:2;7674:9;7665:7;7661:23;7657:32;7654:119;;;7692:79;;:::i;:::-;7654:119;7812:1;7837:53;7882:7;7873:6;7862:9;7858:22;7837:53;:::i;:::-;7827:63;;7783:117;7939:2;7965:53;8010:7;8001:6;7990:9;7986:22;7965:53;:::i;:::-;7955:63;;7910:118;7561:474;;;;;:::o;8041:684::-;8134:6;8142;8191:2;8179:9;8170:7;8166:23;8162:32;8159:119;;;8197:79;;:::i;:::-;8159:119;8345:1;8334:9;8330:17;8317:31;8375:18;8367:6;8364:30;8361:117;;;8397:79;;:::i;:::-;8361:117;8502:78;8572:7;8563:6;8552:9;8548:22;8502:78;:::i;:::-;8492:88;;8288:302;8629:2;8655:53;8700:7;8691:6;8680:9;8676:22;8655:53;:::i;:::-;8645:63;;8600:118;8041:684;;;;;:::o;8731:::-;8824:6;8832;8881:2;8869:9;8860:7;8856:23;8852:32;8849:119;;;8887:79;;:::i;:::-;8849:119;9035:1;9024:9;9020:17;9007:31;9065:18;9057:6;9054:30;9051:117;;;9087:79;;:::i;:::-;9051:117;9192:78;9262:7;9253:6;9242:9;9238:22;9192:78;:::i;:::-;9182:88;;8978:302;9319:2;9345:53;9390:7;9381:6;9370:9;9366:22;9345:53;:::i;:::-;9335:63;;9290:118;8731:684;;;;;:::o;9421:329::-;9480:6;9529:2;9517:9;9508:7;9504:23;9500:32;9497:119;;;9535:79;;:::i;:::-;9497:119;9655:1;9680:53;9725:7;9716:6;9705:9;9701:22;9680:53;:::i;:::-;9670:63;;9626:117;9421:329;;;;:::o;9756:327::-;9814:6;9863:2;9851:9;9842:7;9838:23;9834:32;9831:119;;;9869:79;;:::i;:::-;9831:119;9989:1;10014:52;10058:7;10049:6;10038:9;10034:22;10014:52;:::i;:::-;10004:62;;9960:116;9756:327;;;;:::o;10089:349::-;10158:6;10207:2;10195:9;10186:7;10182:23;10178:32;10175:119;;;10213:79;;:::i;:::-;10175:119;10333:1;10358:63;10413:7;10404:6;10393:9;10389:22;10358:63;:::i;:::-;10348:73;;10304:127;10089:349;;;;:::o;10444:509::-;10513:6;10562:2;10550:9;10541:7;10537:23;10533:32;10530:119;;;10568:79;;:::i;:::-;10530:119;10716:1;10705:9;10701:17;10688:31;10746:18;10738:6;10735:30;10732:117;;;10768:79;;:::i;:::-;10732:117;10873:63;10928:7;10919:6;10908:9;10904:22;10873:63;:::i;:::-;10863:73;;10659:287;10444:509;;;;:::o;10959:329::-;11018:6;11067:2;11055:9;11046:7;11042:23;11038:32;11035:119;;;11073:79;;:::i;:::-;11035:119;11193:1;11218:53;11263:7;11254:6;11243:9;11239:22;11218:53;:::i;:::-;11208:63;;11164:117;10959:329;;;;:::o;11294:179::-;11363:10;11384:46;11426:3;11418:6;11384:46;:::i;:::-;11462:4;11457:3;11453:14;11439:28;;11294:179;;;;:::o;11479:118::-;11566:24;11584:5;11566:24;:::i;:::-;11561:3;11554:37;11479:118;;:::o;11603:157::-;11708:45;11728:24;11746:5;11728:24;:::i;:::-;11708:45;:::i;:::-;11703:3;11696:58;11603:157;;:::o;11796:732::-;11915:3;11944:54;11992:5;11944:54;:::i;:::-;12014:86;12093:6;12088:3;12014:86;:::i;:::-;12007:93;;12124:56;12174:5;12124:56;:::i;:::-;12203:7;12234:1;12219:284;12244:6;12241:1;12238:13;12219:284;;;12320:6;12314:13;12347:63;12406:3;12391:13;12347:63;:::i;:::-;12340:70;;12433:60;12486:6;12433:60;:::i;:::-;12423:70;;12279:224;12266:1;12263;12259:9;12254:14;;12219:284;;;12223:14;12519:3;12512:10;;11920:608;;;11796:732;;;;:::o;12534:109::-;12615:21;12630:5;12615:21;:::i;:::-;12610:3;12603:34;12534:109;;:::o;12649:118::-;12736:24;12754:5;12736:24;:::i;:::-;12731:3;12724:37;12649:118;;:::o;12773:360::-;12859:3;12887:38;12919:5;12887:38;:::i;:::-;12941:70;13004:6;12999:3;12941:70;:::i;:::-;12934:77;;13020:52;13065:6;13060:3;13053:4;13046:5;13042:16;13020:52;:::i;:::-;13097:29;13119:6;13097:29;:::i;:::-;13092:3;13088:39;13081:46;;12863:270;12773:360;;;;:::o;13139:364::-;13227:3;13255:39;13288:5;13255:39;:::i;:::-;13310:71;13374:6;13369:3;13310:71;:::i;:::-;13303:78;;13390:52;13435:6;13430:3;13423:4;13416:5;13412:16;13390:52;:::i;:::-;13467:29;13489:6;13467:29;:::i;:::-;13462:3;13458:39;13451:46;;13231:272;13139:364;;;;:::o;13509:377::-;13615:3;13643:39;13676:5;13643:39;:::i;:::-;13698:89;13780:6;13775:3;13698:89;:::i;:::-;13691:96;;13796:52;13841:6;13836:3;13829:4;13822:5;13818:16;13796:52;:::i;:::-;13873:6;13868:3;13864:16;13857:23;;13619:267;13509:377;;;;:::o;13916:845::-;14019:3;14056:5;14050:12;14085:36;14111:9;14085:36;:::i;:::-;14137:89;14219:6;14214:3;14137:89;:::i;:::-;14130:96;;14257:1;14246:9;14242:17;14273:1;14268:137;;;;14419:1;14414:341;;;;14235:520;;14268:137;14352:4;14348:9;14337;14333:25;14328:3;14321:38;14388:6;14383:3;14379:16;14372:23;;14268:137;;14414:341;14481:38;14513:5;14481:38;:::i;:::-;14541:1;14555:154;14569:6;14566:1;14563:13;14555:154;;;14643:7;14637:14;14633:1;14628:3;14624:11;14617:35;14693:1;14684:7;14680:15;14669:26;;14591:4;14588:1;14584:12;14579:17;;14555:154;;;14738:6;14733:3;14729:16;14722:23;;14421:334;;14235:520;;14023:738;;13916:845;;;;:::o;14767:366::-;14909:3;14930:67;14994:2;14989:3;14930:67;:::i;:::-;14923:74;;15006:93;15095:3;15006:93;:::i;:::-;15124:2;15119:3;15115:12;15108:19;;14767:366;;;:::o;15139:::-;15281:3;15302:67;15366:2;15361:3;15302:67;:::i;:::-;15295:74;;15378:93;15467:3;15378:93;:::i;:::-;15496:2;15491:3;15487:12;15480:19;;15139:366;;;:::o;15511:::-;15653:3;15674:67;15738:2;15733:3;15674:67;:::i;:::-;15667:74;;15750:93;15839:3;15750:93;:::i;:::-;15868:2;15863:3;15859:12;15852:19;;15511:366;;;:::o;15883:::-;16025:3;16046:67;16110:2;16105:3;16046:67;:::i;:::-;16039:74;;16122:93;16211:3;16122:93;:::i;:::-;16240:2;16235:3;16231:12;16224:19;;15883:366;;;:::o;16255:::-;16397:3;16418:67;16482:2;16477:3;16418:67;:::i;:::-;16411:74;;16494:93;16583:3;16494:93;:::i;:::-;16612:2;16607:3;16603:12;16596:19;;16255:366;;;:::o;16627:::-;16769:3;16790:67;16854:2;16849:3;16790:67;:::i;:::-;16783:74;;16866:93;16955:3;16866:93;:::i;:::-;16984:2;16979:3;16975:12;16968:19;;16627:366;;;:::o;16999:400::-;17159:3;17180:84;17262:1;17257:3;17180:84;:::i;:::-;17173:91;;17273:93;17362:3;17273:93;:::i;:::-;17391:1;17386:3;17382:11;17375:18;;16999:400;;;:::o;17405:366::-;17547:3;17568:67;17632:2;17627:3;17568:67;:::i;:::-;17561:74;;17644:93;17733:3;17644:93;:::i;:::-;17762:2;17757:3;17753:12;17746:19;;17405:366;;;:::o;17777:::-;17919:3;17940:67;18004:2;17999:3;17940:67;:::i;:::-;17933:74;;18016:93;18105:3;18016:93;:::i;:::-;18134:2;18129:3;18125:12;18118:19;;17777:366;;;:::o;18149:::-;18291:3;18312:67;18376:2;18371:3;18312:67;:::i;:::-;18305:74;;18388:93;18477:3;18388:93;:::i;:::-;18506:2;18501:3;18497:12;18490:19;;18149:366;;;:::o;18521:::-;18663:3;18684:67;18748:2;18743:3;18684:67;:::i;:::-;18677:74;;18760:93;18849:3;18760:93;:::i;:::-;18878:2;18873:3;18869:12;18862:19;;18521:366;;;:::o;18893:::-;19035:3;19056:67;19120:2;19115:3;19056:67;:::i;:::-;19049:74;;19132:93;19221:3;19132:93;:::i;:::-;19250:2;19245:3;19241:12;19234:19;;18893:366;;;:::o;19265:::-;19407:3;19428:67;19492:2;19487:3;19428:67;:::i;:::-;19421:74;;19504:93;19593:3;19504:93;:::i;:::-;19622:2;19617:3;19613:12;19606:19;;19265:366;;;:::o;19637:::-;19779:3;19800:67;19864:2;19859:3;19800:67;:::i;:::-;19793:74;;19876:93;19965:3;19876:93;:::i;:::-;19994:2;19989:3;19985:12;19978:19;;19637:366;;;:::o;20009:::-;20151:3;20172:67;20236:2;20231:3;20172:67;:::i;:::-;20165:74;;20248:93;20337:3;20248:93;:::i;:::-;20366:2;20361:3;20357:12;20350:19;;20009:366;;;:::o;20381:::-;20523:3;20544:67;20608:2;20603:3;20544:67;:::i;:::-;20537:74;;20620:93;20709:3;20620:93;:::i;:::-;20738:2;20733:3;20729:12;20722:19;;20381:366;;;:::o;20753:::-;20895:3;20916:67;20980:2;20975:3;20916:67;:::i;:::-;20909:74;;20992:93;21081:3;20992:93;:::i;:::-;21110:2;21105:3;21101:12;21094:19;;20753:366;;;:::o;21125:108::-;21202:24;21220:5;21202:24;:::i;:::-;21197:3;21190:37;21125:108;;:::o;21239:118::-;21326:24;21344:5;21326:24;:::i;:::-;21321:3;21314:37;21239:118;;:::o;21363:256::-;21475:3;21490:75;21561:3;21552:6;21490:75;:::i;:::-;21590:2;21585:3;21581:12;21574:19;;21610:3;21603:10;;21363:256;;;;:::o;21625:695::-;21903:3;21925:92;22013:3;22004:6;21925:92;:::i;:::-;21918:99;;22034:95;22125:3;22116:6;22034:95;:::i;:::-;22027:102;;22146:148;22290:3;22146:148;:::i;:::-;22139:155;;22311:3;22304:10;;21625:695;;;;;:::o;22326:222::-;22419:4;22457:2;22446:9;22442:18;22434:26;;22470:71;22538:1;22527:9;22523:17;22514:6;22470:71;:::i;:::-;22326:222;;;;:::o;22554:640::-;22749:4;22787:3;22776:9;22772:19;22764:27;;22801:71;22869:1;22858:9;22854:17;22845:6;22801:71;:::i;:::-;22882:72;22950:2;22939:9;22935:18;22926:6;22882:72;:::i;:::-;22964;23032:2;23021:9;23017:18;23008:6;22964:72;:::i;:::-;23083:9;23077:4;23073:20;23068:2;23057:9;23053:18;23046:48;23111:76;23182:4;23173:6;23111:76;:::i;:::-;23103:84;;22554:640;;;;;;;:::o;23200:373::-;23343:4;23381:2;23370:9;23366:18;23358:26;;23430:9;23424:4;23420:20;23416:1;23405:9;23401:17;23394:47;23458:108;23561:4;23552:6;23458:108;:::i;:::-;23450:116;;23200:373;;;;:::o;23579:210::-;23666:4;23704:2;23693:9;23689:18;23681:26;;23717:65;23779:1;23768:9;23764:17;23755:6;23717:65;:::i;:::-;23579:210;;;;:::o;23795:222::-;23888:4;23926:2;23915:9;23911:18;23903:26;;23939:71;24007:1;23996:9;23992:17;23983:6;23939:71;:::i;:::-;23795:222;;;;:::o;24023:313::-;24136:4;24174:2;24163:9;24159:18;24151:26;;24223:9;24217:4;24213:20;24209:1;24198:9;24194:17;24187:47;24251:78;24324:4;24315:6;24251:78;:::i;:::-;24243:86;;24023:313;;;;:::o;24342:419::-;24508:4;24546:2;24535:9;24531:18;24523:26;;24595:9;24589:4;24585:20;24581:1;24570:9;24566:17;24559:47;24623:131;24749:4;24623:131;:::i;:::-;24615:139;;24342:419;;;:::o;24767:::-;24933:4;24971:2;24960:9;24956:18;24948:26;;25020:9;25014:4;25010:20;25006:1;24995:9;24991:17;24984:47;25048:131;25174:4;25048:131;:::i;:::-;25040:139;;24767:419;;;:::o;25192:::-;25358:4;25396:2;25385:9;25381:18;25373:26;;25445:9;25439:4;25435:20;25431:1;25420:9;25416:17;25409:47;25473:131;25599:4;25473:131;:::i;:::-;25465:139;;25192:419;;;:::o;25617:::-;25783:4;25821:2;25810:9;25806:18;25798:26;;25870:9;25864:4;25860:20;25856:1;25845:9;25841:17;25834:47;25898:131;26024:4;25898:131;:::i;:::-;25890:139;;25617:419;;;:::o;26042:::-;26208:4;26246:2;26235:9;26231:18;26223:26;;26295:9;26289:4;26285:20;26281:1;26270:9;26266:17;26259:47;26323:131;26449:4;26323:131;:::i;:::-;26315:139;;26042:419;;;:::o;26467:::-;26633:4;26671:2;26660:9;26656:18;26648:26;;26720:9;26714:4;26710:20;26706:1;26695:9;26691:17;26684:47;26748:131;26874:4;26748:131;:::i;:::-;26740:139;;26467:419;;;:::o;26892:::-;27058:4;27096:2;27085:9;27081:18;27073:26;;27145:9;27139:4;27135:20;27131:1;27120:9;27116:17;27109:47;27173:131;27299:4;27173:131;:::i;:::-;27165:139;;26892:419;;;:::o;27317:::-;27483:4;27521:2;27510:9;27506:18;27498:26;;27570:9;27564:4;27560:20;27556:1;27545:9;27541:17;27534:47;27598:131;27724:4;27598:131;:::i;:::-;27590:139;;27317:419;;;:::o;27742:::-;27908:4;27946:2;27935:9;27931:18;27923:26;;27995:9;27989:4;27985:20;27981:1;27970:9;27966:17;27959:47;28023:131;28149:4;28023:131;:::i;:::-;28015:139;;27742:419;;;:::o;28167:::-;28333:4;28371:2;28360:9;28356:18;28348:26;;28420:9;28414:4;28410:20;28406:1;28395:9;28391:17;28384:47;28448:131;28574:4;28448:131;:::i;:::-;28440:139;;28167:419;;;:::o;28592:::-;28758:4;28796:2;28785:9;28781:18;28773:26;;28845:9;28839:4;28835:20;28831:1;28820:9;28816:17;28809:47;28873:131;28999:4;28873:131;:::i;:::-;28865:139;;28592:419;;;:::o;29017:::-;29183:4;29221:2;29210:9;29206:18;29198:26;;29270:9;29264:4;29260:20;29256:1;29245:9;29241:17;29234:47;29298:131;29424:4;29298:131;:::i;:::-;29290:139;;29017:419;;;:::o;29442:::-;29608:4;29646:2;29635:9;29631:18;29623:26;;29695:9;29689:4;29685:20;29681:1;29670:9;29666:17;29659:47;29723:131;29849:4;29723:131;:::i;:::-;29715:139;;29442:419;;;:::o;29867:::-;30033:4;30071:2;30060:9;30056:18;30048:26;;30120:9;30114:4;30110:20;30106:1;30095:9;30091:17;30084:47;30148:131;30274:4;30148:131;:::i;:::-;30140:139;;29867:419;;;:::o;30292:::-;30458:4;30496:2;30485:9;30481:18;30473:26;;30545:9;30539:4;30535:20;30531:1;30520:9;30516:17;30509:47;30573:131;30699:4;30573:131;:::i;:::-;30565:139;;30292:419;;;:::o;30717:::-;30883:4;30921:2;30910:9;30906:18;30898:26;;30970:9;30964:4;30960:20;30956:1;30945:9;30941:17;30934:47;30998:131;31124:4;30998:131;:::i;:::-;30990:139;;30717:419;;;:::o;31142:222::-;31235:4;31273:2;31262:9;31258:18;31250:26;;31286:71;31354:1;31343:9;31339:17;31330:6;31286:71;:::i;:::-;31142:222;;;;:::o;31370:129::-;31404:6;31431:20;;:::i;:::-;31421:30;;31460:33;31488:4;31480:6;31460:33;:::i;:::-;31370:129;;;:::o;31505:75::-;31538:6;31571:2;31565:9;31555:19;;31505:75;:::o;31586:311::-;31663:4;31753:18;31745:6;31742:30;31739:56;;;31775:18;;:::i;:::-;31739:56;31825:4;31817:6;31813:17;31805:25;;31885:4;31879;31875:15;31867:23;;31586:311;;;:::o;31903:::-;31980:4;32070:18;32062:6;32059:30;32056:56;;;32092:18;;:::i;:::-;32056:56;32142:4;32134:6;32130:17;32122:25;;32202:4;32196;32192:15;32184:23;;31903:311;;;:::o;32220:307::-;32281:4;32371:18;32363:6;32360:30;32357:56;;;32393:18;;:::i;:::-;32357:56;32431:29;32453:6;32431:29;:::i;:::-;32423:37;;32515:4;32509;32505:15;32497:23;;32220:307;;;:::o;32533:308::-;32595:4;32685:18;32677:6;32674:30;32671:56;;;32707:18;;:::i;:::-;32671:56;32745:29;32767:6;32745:29;:::i;:::-;32737:37;;32829:4;32823;32819:15;32811:23;;32533:308;;;:::o;32847:132::-;32914:4;32937:3;32929:11;;32967:4;32962:3;32958:14;32950:22;;32847:132;;;:::o;32985:141::-;33034:4;33057:3;33049:11;;33080:3;33077:1;33070:14;33114:4;33111:1;33101:18;33093:26;;32985:141;;;:::o;33132:114::-;33199:6;33233:5;33227:12;33217:22;;33132:114;;;:::o;33252:98::-;33303:6;33337:5;33331:12;33321:22;;33252:98;;;:::o;33356:99::-;33408:6;33442:5;33436:12;33426:22;;33356:99;;;:::o;33461:113::-;33531:4;33563;33558:3;33554:14;33546:22;;33461:113;;;:::o;33580:184::-;33679:11;33713:6;33708:3;33701:19;33753:4;33748:3;33744:14;33729:29;;33580:184;;;;:::o;33770:168::-;33853:11;33887:6;33882:3;33875:19;33927:4;33922:3;33918:14;33903:29;;33770:168;;;;:::o;33944:169::-;34028:11;34062:6;34057:3;34050:19;34102:4;34097:3;34093:14;34078:29;;33944:169;;;;:::o;34119:148::-;34221:11;34258:3;34243:18;;34119:148;;;;:::o;34273:305::-;34313:3;34332:20;34350:1;34332:20;:::i;:::-;34327:25;;34366:20;34384:1;34366:20;:::i;:::-;34361:25;;34520:1;34452:66;34448:74;34445:1;34442:81;34439:107;;;34526:18;;:::i;:::-;34439:107;34570:1;34567;34563:9;34556:16;;34273:305;;;;:::o;34584:185::-;34624:1;34641:20;34659:1;34641:20;:::i;:::-;34636:25;;34675:20;34693:1;34675:20;:::i;:::-;34670:25;;34714:1;34704:35;;34719:18;;:::i;:::-;34704:35;34761:1;34758;34754:9;34749:14;;34584:185;;;;:::o;34775:348::-;34815:7;34838:20;34856:1;34838:20;:::i;:::-;34833:25;;34872:20;34890:1;34872:20;:::i;:::-;34867:25;;35060:1;34992:66;34988:74;34985:1;34982:81;34977:1;34970:9;34963:17;34959:105;34956:131;;;35067:18;;:::i;:::-;34956:131;35115:1;35112;35108:9;35097:20;;34775:348;;;;:::o;35129:191::-;35169:4;35189:20;35207:1;35189:20;:::i;:::-;35184:25;;35223:20;35241:1;35223:20;:::i;:::-;35218:25;;35262:1;35259;35256:8;35253:34;;;35267:18;;:::i;:::-;35253:34;35312:1;35309;35305:9;35297:17;;35129:191;;;;:::o;35326:96::-;35363:7;35392:24;35410:5;35392:24;:::i;:::-;35381:35;;35326:96;;;:::o;35428:90::-;35462:7;35505:5;35498:13;35491:21;35480:32;;35428:90;;;:::o;35524:77::-;35561:7;35590:5;35579:16;;35524:77;;;:::o;35607:149::-;35643:7;35683:66;35676:5;35672:78;35661:89;;35607:149;;;:::o;35762:126::-;35799:7;35839:42;35832:5;35828:54;35817:65;;35762:126;;;:::o;35894:77::-;35931:7;35960:5;35949:16;;35894:77;;;:::o;35977:154::-;36061:6;36056:3;36051;36038:30;36123:1;36114:6;36109:3;36105:16;36098:27;35977:154;;;:::o;36137:307::-;36205:1;36215:113;36229:6;36226:1;36223:13;36215:113;;;36314:1;36309:3;36305:11;36299:18;36295:1;36290:3;36286:11;36279:39;36251:2;36248:1;36244:10;36239:15;;36215:113;;;36346:6;36343:1;36340:13;36337:101;;;36426:1;36417:6;36412:3;36408:16;36401:27;36337:101;36186:258;36137:307;;;:::o;36450:320::-;36494:6;36531:1;36525:4;36521:12;36511:22;;36578:1;36572:4;36568:12;36599:18;36589:81;;36655:4;36647:6;36643:17;36633:27;;36589:81;36717:2;36709:6;36706:14;36686:18;36683:38;36680:84;;;36736:18;;:::i;:::-;36680:84;36501:269;36450:320;;;:::o;36776:281::-;36859:27;36881:4;36859:27;:::i;:::-;36851:6;36847:40;36989:6;36977:10;36974:22;36953:18;36941:10;36938:34;36935:62;36932:88;;;37000:18;;:::i;:::-;36932:88;37040:10;37036:2;37029:22;36819:238;36776:281;;:::o;37063:233::-;37102:3;37125:24;37143:5;37125:24;:::i;:::-;37116:33;;37171:66;37164:5;37161:77;37158:103;;;37241:18;;:::i;:::-;37158:103;37288:1;37281:5;37277:13;37270:20;;37063:233;;;:::o;37302:100::-;37341:7;37370:26;37390:5;37370:26;:::i;:::-;37359:37;;37302:100;;;:::o;37408:94::-;37447:7;37476:20;37490:5;37476:20;:::i;:::-;37465:31;;37408:94;;;:::o;37508:176::-;37540:1;37557:20;37575:1;37557:20;:::i;:::-;37552:25;;37591:20;37609:1;37591:20;:::i;:::-;37586:25;;37630:1;37620:35;;37635:18;;:::i;:::-;37620:35;37676:1;37673;37669:9;37664:14;;37508:176;;;;:::o;37690:180::-;37738:77;37735:1;37728:88;37835:4;37832:1;37825:15;37859:4;37856:1;37849:15;37876:180;37924:77;37921:1;37914:88;38021:4;38018:1;38011:15;38045:4;38042:1;38035:15;38062:180;38110:77;38107:1;38100:88;38207:4;38204:1;38197:15;38231:4;38228:1;38221:15;38248:180;38296:77;38293:1;38286:88;38393:4;38390:1;38383:15;38417:4;38414:1;38407:15;38434:180;38482:77;38479:1;38472:88;38579:4;38576:1;38569:15;38603:4;38600:1;38593:15;38620:180;38668:77;38665:1;38658:88;38765:4;38762:1;38755:15;38789:4;38786:1;38779:15;38806:117;38915:1;38912;38905:12;38929:117;39038:1;39035;39028:12;39052:117;39161:1;39158;39151:12;39175:117;39284:1;39281;39274:12;39298:117;39407:1;39404;39397:12;39421:102;39462:6;39513:2;39509:7;39504:2;39497:5;39493:14;39489:28;39479:38;;39421:102;;;:::o;39529:94::-;39562:8;39610:5;39606:2;39602:14;39581:35;;39529:94;;;:::o;39629:165::-;39769:17;39765:1;39757:6;39753:14;39746:41;39629:165;:::o;39800:225::-;39940:34;39936:1;39928:6;39924:14;39917:58;40009:8;40004:2;39996:6;39992:15;39985:33;39800:225;:::o;40031:176::-;40171:28;40167:1;40159:6;40155:14;40148:52;40031:176;:::o;40213:182::-;40353:34;40349:1;40341:6;40337:14;40330:58;40213:182;:::o;40401:222::-;40541:34;40537:1;40529:6;40525:14;40518:58;40610:5;40605:2;40597:6;40593:15;40586:30;40401:222;:::o;40629:178::-;40769:30;40765:1;40757:6;40753:14;40746:54;40629:178;:::o;40813:155::-;40953:7;40949:1;40941:6;40937:14;40930:31;40813:155;:::o;40974:226::-;41114:34;41110:1;41102:6;41098:14;41091:58;41183:9;41178:2;41170:6;41166:15;41159:34;40974:226;:::o;41206:182::-;41346:34;41342:1;41334:6;41330:14;41323:58;41206:182;:::o;41394:234::-;41534:34;41530:1;41522:6;41518:14;41511:58;41603:17;41598:2;41590:6;41586:15;41579:42;41394:234;:::o;41634:178::-;41774:30;41770:1;41762:6;41758:14;41751:54;41634:178;:::o;41818:182::-;41958:34;41954:1;41946:6;41942:14;41935:58;41818:182;:::o;42006:174::-;42146:26;42142:1;42134:6;42130:14;42123:50;42006:174;:::o;42186:225::-;42326:34;42322:1;42314:6;42310:14;42303:58;42395:8;42390:2;42382:6;42378:15;42371:33;42186:225;:::o;42417:173::-;42557:25;42553:1;42545:6;42541:14;42534:49;42417:173;:::o;42596:234::-;42736:34;42732:1;42724:6;42720:14;42713:58;42805:17;42800:2;42792:6;42788:15;42781:42;42596:234;:::o;42836:172::-;42976:24;42972:1;42964:6;42960:14;42953:48;42836:172;:::o;43014:122::-;43087:24;43105:5;43087:24;:::i;:::-;43080:5;43077:35;43067:63;;43126:1;43123;43116:12;43067:63;43014:122;:::o;43142:116::-;43212:21;43227:5;43212:21;:::i;:::-;43205:5;43202:32;43192:60;;43248:1;43245;43238:12;43192:60;43142:116;:::o;43264:122::-;43337:24;43355:5;43337:24;:::i;:::-;43330:5;43327:35;43317:63;;43376:1;43373;43366:12;43317:63;43264:122;:::o;43392:120::-;43464:23;43481:5;43464:23;:::i;:::-;43457:5;43454:34;43444:62;;43502:1;43499;43492:12;43444:62;43392:120;:::o;43518:122::-;43591:24;43609:5;43591:24;:::i;:::-;43584:5;43581:35;43571:63;;43630:1;43627;43620:12;43571:63;43518:122;:::o
Swarm Source
ipfs://6a7415b0872e95ae72b7d7d53ba3e28c06655928dce99a0de3307b0b4c7434cf
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.60
Net Worth in ETH
0.000295
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,035.23 | 0.0002946 | $0.599579 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.