Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 11,720 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 77542020 | 3 days ago | IN | 0 AVAX | 0.00000049 | ||||
| Set Approval For... | 76449640 | 18 days ago | IN | 0 AVAX | 0.0000011 | ||||
| Set Approval For... | 75917191 | 25 days ago | IN | 0 AVAX | 0.0000077 | ||||
| Set Approval For... | 73681749 | 60 days ago | IN | 0 AVAX | 0.0000726 | ||||
| Set Approval For... | 73367346 | 64 days ago | IN | 0 AVAX | 0.00000236 | ||||
| Set Approval For... | 71814762 | 91 days ago | IN | 0 AVAX | 0.00000753 | ||||
| Set Approval For... | 70190862 | 122 days ago | IN | 0 AVAX | 0.00003172 | ||||
| Safe Transfer Fr... | 69792265 | 129 days ago | IN | 0 AVAX | 0.00007076 | ||||
| Set Approval For... | 69778528 | 129 days ago | IN | 0 AVAX | 0.00000472 | ||||
| Transfer From | 69412379 | 136 days ago | IN | 0 AVAX | 0.00003638 | ||||
| Transfer From | 69412377 | 136 days ago | IN | 0 AVAX | 0.00003924 | ||||
| Set Approval For... | 68248293 | 159 days ago | IN | 0 AVAX | 0.00088905 | ||||
| Set Approval For... | 68248288 | 159 days ago | IN | 0 AVAX | 0.00088905 | ||||
| Set Approval For... | 66961222 | 183 days ago | IN | 0 AVAX | 0.00025471 | ||||
| Safe Transfer Fr... | 63572299 | 247 days ago | IN | 0 AVAX | 0.00018051 | ||||
| Safe Transfer Fr... | 63572269 | 247 days ago | IN | 0 AVAX | 0.00023206 | ||||
| Set Approval For... | 62273266 | 269 days ago | IN | 0 AVAX | 0.0001243 | ||||
| Set Approval For... | 59018311 | 327 days ago | IN | 0 AVAX | 0.00011665 | ||||
| Set Approval For... | 57742651 | 353 days ago | IN | 0 AVAX | 0.00011686 | ||||
| Set Approval For... | 57266239 | 363 days ago | IN | 0 AVAX | 0.00004995 | ||||
| Set Approval For... | 56550687 | 377 days ago | IN | 0 AVAX | 0.00004807 | ||||
| Set Approval For... | 56419591 | 380 days ago | IN | 0 AVAX | 0.00005927 | ||||
| Set Approval For... | 56173538 | 385 days ago | IN | 0 AVAX | 0.00006376 | ||||
| Set Approval For... | 56165346 | 385 days ago | IN | 0 AVAX | 0.00011665 | ||||
| Set Approval For... | 55586118 | 397 days ago | IN | 0 AVAX | 0.00006667 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 7559964 | 1535 days ago | 17,500 AVAX |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AvaxHomes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at snowscan.xyz on 2021-12-02
*/
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// OpenZeppelin Contracts v4.4.0 (utils/Counters.sol)
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// 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;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev Edit for rawOwnerOf token
*/
function rawOwnerOf(uint256 tokenId) public view returns (address) {
return _owners[tokenId];
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
address to = address(0);
_beforeTokenTransfer(owner, to, tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, to, tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
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("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
//author: mickey.
contract AvaxHomes is ERC721Enumerable, Ownable {
using SafeMath for uint256;
using Counters for Counters.Counter;
address public architect;
uint256 public startingIndex;
uint256 public startingIndexBlock;
mapping(address => bool) public excludedList;
uint256 public constant MAX_ELEMENTS = 10000;
uint256 public constant PRICE = 1.75 ether;
uint256 public constant MAX_PER_TX = 20;
uint256 public maxMintWhitelist = 2;
Counters.Counter private _tokenIds;
string public baseTokenURI;
struct Whitelist {
address addr;
uint hasMinted;
}
mapping(address => Whitelist) public whitelist;
address[] whitelistAddr;
address public constant devAddress = 0xEa1fF804deb8CaBE309C941bD3D1AbfC6a1c6DFd;
bool public saleIsActive = false;
bool public privateSaleIsActive = true;
event congratsForYourHome(uint256 indexed id);
constructor() ERC721('AvaxHomes', 'AXHOME') {
architect = devAddress;
}
function setWhitelistMaxMint(uint256 maxMintWL) onlyOwner public {
maxMintWhitelist = maxMintWL;
}
function addWhitelist(address[] memory addrs) onlyOwner public returns(bool success) {
whitelistAddr = addrs;
for(uint i = 0; i < whitelistAddr.length; i++) {
addAddressToWhitelist(whitelistAddr[i]);
}
success = true;
}
function _baseURI() internal view virtual override returns (string memory) {
return baseTokenURI;
}
function setBaseURI(string memory baseURI) public onlyOwner {
baseTokenURI = baseURI;
}
function flipSaleState() public onlyOwner {
saleIsActive = !saleIsActive;
}
function flipPrivateSaleState() public onlyOwner {
privateSaleIsActive = !privateSaleIsActive;
}
function mintToken(address _to, uint numberOfTokens) public payable {
require(saleIsActive, "Sale must be active to mint");
require(totalSupply().add(numberOfTokens) <= MAX_ELEMENTS, "Exceeds max supply");
require(PRICE.mul(numberOfTokens) <= msg.value, "AVAX sent is incorrect");
if(privateSaleIsActive) {
require(numberOfTokens <= maxMintWhitelist, "Above max tx count");
require(isWhitelisted(_to), "Is not whitelisted");
require(whitelist[_to].hasMinted.add(numberOfTokens) <= maxMintWhitelist, "Can only mint 2 while whitelisted");
require(whitelist[_to].hasMinted <= maxMintWhitelist, "Can only mint 2 while whitelisted");
whitelist[_to].hasMinted = whitelist[_to].hasMinted.add(numberOfTokens);
} else {
require(numberOfTokens <= MAX_PER_TX, "Above max tx count");
}
for(uint i = 0; i < numberOfTokens; i++) {
uint mintIndex = totalSupply();
_safeMint(_to, mintIndex);
emit congratsForYourHome(mintIndex);
}
}
function transferFrom(
address from,
address to,
uint256 tokenId
) public override {
require(
_isApprovedOrOwner(_msgSender(), tokenId),
'ERC721: transfer caller is not owner nor approved'
);
_transfer(from, to, tokenId);
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public override {
safeTransferFrom(from, to, tokenId, '');
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public override {
require(
_isApprovedOrOwner(_msgSender(), tokenId),
'ERC721: transfer caller is not owner nor approved'
);
_safeTransfer(from, to, tokenId, _data);
}
function setStartingIndex() public onlyOwner {
require(startingIndex == 0, "Starting index is already set");
require(startingIndexBlock != 0, "Starting index block must be set");
startingIndex = uint(blockhash(startingIndexBlock)) % MAX_ELEMENTS;
// just in case if this function is called late
if (block.number.sub(startingIndexBlock) > 255) {
startingIndex = uint(blockhash(block.number - 1)) % MAX_ELEMENTS;
}
}
function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) {
require(!isWhitelisted(addr), "Already whitelisted");
whitelist[addr].addr = addr;
whitelist[addr].hasMinted = 0;
success = true;
}
function isWhitelisted(address addr) public view returns (bool isWhiteListed) {
return whitelist[addr].addr == addr;
}
function mintUnsoldTokens(uint256[] memory _tokensId) public onlyOwner {
require(saleIsActive == false, "Sale is still active");
for (uint256 i = 0; i < _tokensId.length; i++) {
if(rawOwnerOf(_tokensId[i]) == address(0)){
mintToken(owner(), _tokensId[i]);
}
}
}
function claimAVAX() public {
require(devAddress == _msgSender(), "Ownable: caller is not the devAddress");
payable(address(devAddress)).transfer(address(this).balance);
//or _withdraw(devAddress);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"congratsForYourHome","type":"event"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"architect","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAVAX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPrivateSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"isWhiteListed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokensId","type":"uint256[]"}],"name":"mintUnsoldTokens","outputs":[],"stateMutability":"nonpayable","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":"privateSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"rawOwnerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintWL","type":"uint256"}],"name":"setWhitelistMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[],"name":"totalSupply","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":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"hasMinted","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526002600f556000601460006101000a81548160ff0219169083151502179055506001601460016101000a81548160ff0219169083151502179055503480156200004c57600080fd5b506040518060400160405280600981526020017f41766178486f6d657300000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4158484f4d4500000000000000000000000000000000000000000000000000008152508160009080519060200190620000d192919062000236565b508060019080519060200190620000ea92919062000236565b5050506200010d620001016200016860201b60201c565b6200017060201b60201c565b73ea1ff804deb8cabe309c941bd3d1abfc6a1c6dfd600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200034b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024490620002e6565b90600052602060002090601f016020900481019282620002685760008555620002b4565b82601f106200028357805160ff1916838001178555620002b4565b82800160010185558215620002b4579182015b82811115620002b357825182559160200191906001019062000296565b5b509050620002c39190620002c7565b5090565b5b80821115620002e2576000816000905550600101620002c8565b5090565b60006002820490506001821680620002ff57607f821691505b602082108114156200031657620003156200031c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6152a0806200035b6000396000f3fe6080604052600436106102665760003560e01c80637b9417c811610144578063c87b56dd116100b6578063e985e9c51161007a578063e985e9c514610937578063e986655014610974578063eb8d24441461098b578063edac985b146109b6578063f2fde38b146109f3578063f43a22dc14610a1c57610266565b8063c87b56dd14610850578063cb774d471461088d578063d547cfb7146108b8578063e2146963146108e3578063e36d64981461090c57610266565b806395d89b411161010857806395d89b41146107415780639b19251a1461076c578063a22cb465146107aa578063a759a7c8146107d3578063b2992bb0146107fe578063b88d4fde1461082757610266565b80637b9417c8146106465780637f81be69146106835780638d859f3e146106c05780638da5cb5b146106eb578063936a9ec21461071657610266565b80633719e3b0116101dd57806355f804b3116101a157806355f804b3146105335780635600d2fa1461055c5780636352211e1461059957806370a08231146105d6578063715018a61461061357806379c650681461062a57610266565b80633719e3b01461044e5780633ad10ef6146104655780633af32abf1461049057806342842e0e146104cd5780634f6ccce7146104f657610266565b8063095ea7b31161022f578063095ea7b31461035257806318160ddd1461037b57806323b872dd146103a65780632f745c59146103cf57806334918dfd1461040c5780633502a7161461042357610266565b8062b214ec1461026b57806301ffc9a71461028257806304737a01146102bf57806306fdde03146102ea578063081812fc14610315575b600080fd5b34801561027757600080fd5b50610280610a47565b005b34801561028e57600080fd5b506102a960048036038101906102a49190613bb8565b610b2d565b6040516102b69190614203565b60405180910390f35b3480156102cb57600080fd5b506102d4610ba7565b6040516102e19190614203565b60405180910390f35b3480156102f657600080fd5b506102ff610bba565b60405161030c919061421e565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190613c5b565b610c4c565b6040516103499190614173565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613ae6565b610cd1565b005b34801561038757600080fd5b50610390610de9565b60405161039d91906145e0565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906139d0565b610df6565b005b3480156103db57600080fd5b506103f660048036038101906103f19190613ae6565b610e56565b60405161040391906145e0565b60405180910390f35b34801561041857600080fd5b50610421610efb565b005b34801561042f57600080fd5b50610438610fa3565b60405161044591906145e0565b60405180910390f35b34801561045a57600080fd5b50610463610fa9565b005b34801561047157600080fd5b5061047a611051565b6040516104879190614173565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613963565b611069565b6040516104c49190614203565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906139d0565b611103565b005b34801561050257600080fd5b5061051d60048036038101906105189190613c5b565b611123565b60405161052a91906145e0565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190613c12565b611194565b005b34801561056857600080fd5b50610583600480360381019061057e9190613963565b61122a565b6040516105909190614203565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190613c5b565b61124a565b6040516105cd9190614173565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613963565b6112fc565b60405161060a91906145e0565b60405180910390f35b34801561061f57600080fd5b506106286113b4565b005b610644600480360381019061063f9190613ae6565b61143c565b005b34801561065257600080fd5b5061066d60048036038101906106689190613963565b611854565b60405161067a9190614203565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613c5b565b6119ed565b6040516106b79190614173565b60405180910390f35b3480156106cc57600080fd5b506106d5611a2a565b6040516106e291906145e0565b60405180910390f35b3480156106f757600080fd5b50610700611a36565b60405161070d9190614173565b60405180910390f35b34801561072257600080fd5b5061072b611a60565b6040516107389190614173565b60405180910390f35b34801561074d57600080fd5b50610756611a86565b604051610763919061421e565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190613963565b611b18565b6040516107a19291906141da565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190613aa6565b611b5c565b005b3480156107df57600080fd5b506107e8611cdd565b6040516107f591906145e0565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613b6f565b611ce3565b005b34801561083357600080fd5b5061084e60048036038101906108499190613a23565b611e5b565b005b34801561085c57600080fd5b5061087760048036038101906108729190613c5b565b611ebd565b604051610884919061421e565b60405180910390f35b34801561089957600080fd5b506108a2611f64565b6040516108af91906145e0565b60405180910390f35b3480156108c457600080fd5b506108cd611f6a565b6040516108da919061421e565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190613c5b565b611ff8565b005b34801561091857600080fd5b5061092161207e565b60405161092e91906145e0565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613990565b612084565b60405161096b9190614203565b60405180910390f35b34801561098057600080fd5b50610989612118565b005b34801561099757600080fd5b506109a061227d565b6040516109ad9190614203565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d89190613b26565b612290565b6040516109ea9190614203565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a159190613963565b61239a565b005b348015610a2857600080fd5b50610a31612492565b604051610a3e91906145e0565b60405180910390f35b610a4f612497565b73ffffffffffffffffffffffffffffffffffffffff1673ea1ff804deb8cabe309c941bd3d1abfc6a1c6dfd73ffffffffffffffffffffffffffffffffffffffff1614610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac790614360565b60405180910390fd5b73ea1ff804deb8cabe309c941bd3d1abfc6a1c6dfd73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b2a573d6000803e3d6000fd5b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba05750610b9f8261249f565b5b9050919050565b601460019054906101000a900460ff1681565b606060008054610bc9906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf5906148e8565b8015610c425780601f10610c1757610100808354040283529160200191610c42565b820191906000526020600020905b815481529060010190602001808311610c2557829003601f168201915b5050505050905090565b6000610c5782612581565b610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90614460565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cdc8261124a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490614520565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6c612497565b73ffffffffffffffffffffffffffffffffffffffff161480610d9b5750610d9a81610d95612497565b612084565b5b610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906143c0565b60405180910390fd5b610de483836125ed565b505050565b6000600880549050905090565b610e07610e01612497565b826126a6565b610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90614560565b60405180910390fd5b610e51838383612784565b505050565b6000610e61836112fc565b8210610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990614240565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f03612497565b73ffffffffffffffffffffffffffffffffffffffff16610f21611a36565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90614480565b60405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b61271081565b610fb1612497565b73ffffffffffffffffffffffffffffffffffffffff16610fcf611a36565b73ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90614480565b60405180910390fd5b601460019054906101000a900460ff1615601460016101000a81548160ff021916908315150217905550565b73ea1ff804deb8cabe309c941bd3d1abfc6a1c6dfd81565b60008173ffffffffffffffffffffffffffffffffffffffff16601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b61111e83838360405180602001604052806000815250611e5b565b505050565b600061112d610de9565b821061116e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611165906145c0565b60405180910390fd5b6008828154811061118257611181614a81565b5b90600052602060002001549050919050565b61119c612497565b73ffffffffffffffffffffffffffffffffffffffff166111ba611a36565b73ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790614480565b60405180910390fd5b80601190805190602001906112269291906135b1565b5050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea90614400565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561136d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611364906143e0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113bc612497565b73ffffffffffffffffffffffffffffffffffffffff166113da611a36565b73ffffffffffffffffffffffffffffffffffffffff1614611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142790614480565b60405180910390fd5b61143a60006129e0565b565b601460009054906101000a900460ff1661148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290614320565b60405180910390fd5b6127106114a88261149a610de9565b612aa690919063ffffffff16565b11156114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090614420565b60405180910390fd5b34611505826718493fba64ef0000612abc90919063ffffffff16565b1115611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90614380565b60405180910390fd5b601460019054906101000a900460ff16156117a857600f548111156115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159790614300565b60405180910390fd5b6115a982611069565b6115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90614580565b60405180910390fd5b600f5461164082601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612aa690919063ffffffff16565b1115611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890614500565b60405180910390fd5b600f54601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541115611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90614500565b60405180910390fd5b61175d81601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612aa690919063ffffffff16565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506117ed565b60148111156117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390614300565b60405180910390fd5b5b60005b8181101561184f576000611802610de9565b905061180e8482612ad2565b807f3569967c3e62da72195400a4ade3df25a1bd8c77982e0da0d6ea72f6d5c6075660405160405180910390a25080806118479061494b565b9150506117f0565b505050565b600061185e612497565b73ffffffffffffffffffffffffffffffffffffffff1661187c611a36565b73ffffffffffffffffffffffffffffffffffffffff16146118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990614480565b60405180910390fd5b6118db82611069565b1561191b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611912906144e0565b60405180910390fd5b81601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555060019050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6718493fba64ef000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611a95906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac1906148e8565b8015611b0e5780601f10611ae357610100808354040283529160200191611b0e565b820191906000526020600020905b815481529060010190602001808311611af157829003601f168201915b5050505050905090565b60126020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b611b64612497565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc9906142e0565b60405180910390fd5b8060056000611bdf612497565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c8c612497565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cd19190614203565b60405180910390a35050565b600f5481565b611ceb612497565b73ffffffffffffffffffffffffffffffffffffffff16611d09611a36565b73ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614480565b60405180910390fd5b60001515601460009054906101000a900460ff16151514611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906145a0565b60405180910390fd5b60005b8151811015611e5757600073ffffffffffffffffffffffffffffffffffffffff16611dfc838381518110611def57611dee614a81565b5b60200260200101516119ed565b73ffffffffffffffffffffffffffffffffffffffff161415611e4457611e43611e23611a36565b838381518110611e3657611e35614a81565b5b602002602001015161143c565b5b8080611e4f9061494b565b915050611db8565b5050565b611e6c611e66612497565b836126a6565b611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614560565b60405180910390fd5b611eb784848484612af0565b50505050565b6060611ec882612581565b611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe906144c0565b60405180910390fd5b6000611f11612b4c565b90506000815111611f315760405180602001604052806000815250611f5c565b80611f3b84612bde565b604051602001611f4c92919061414f565b6040516020818303038152906040525b915050919050565b600c5481565b60118054611f77906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054611fa3906148e8565b8015611ff05780601f10611fc557610100808354040283529160200191611ff0565b820191906000526020600020905b815481529060010190602001808311611fd357829003601f168201915b505050505081565b612000612497565b73ffffffffffffffffffffffffffffffffffffffff1661201e611a36565b73ffffffffffffffffffffffffffffffffffffffff1614612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614480565b60405180910390fd5b80600f8190555050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612120612497565b73ffffffffffffffffffffffffffffffffffffffff1661213e611a36565b73ffffffffffffffffffffffffffffffffffffffff1614612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b90614480565b60405180910390fd5b6000600c54146121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d0906143a0565b60405180910390fd5b6000600d54141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614540565b60405180910390fd5b612710600d544060001c6122339190614994565b600c8190555060ff612250600d5443612d3f90919063ffffffff16565b111561227b5761271060014361226691906147fe565b4060001c6122749190614994565b600c819055505b565b601460009054906101000a900460ff1681565b600061229a612497565b73ffffffffffffffffffffffffffffffffffffffff166122b8611a36565b73ffffffffffffffffffffffffffffffffffffffff161461230e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230590614480565b60405180910390fd5b8160139080519060200190612324929190613637565b5060005b6013805490508110156123905761237c6013828154811061234c5761234b614a81565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611854565b5080806123889061494b565b915050612328565b5060019050919050565b6123a2612497565b73ffffffffffffffffffffffffffffffffffffffff166123c0611a36565b73ffffffffffffffffffffffffffffffffffffffff1614612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d90614480565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614280565b60405180910390fd5b61248f816129e0565b50565b601481565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061256a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061257a575061257982612d55565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126608361124a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006126b182612581565b6126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e790614340565b60405180910390fd5b60006126fb8361124a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061276a57508373ffffffffffffffffffffffffffffffffffffffff1661275284610c4c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061277b575061277a8185612084565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127a48261124a565b73ffffffffffffffffffffffffffffffffffffffff16146127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f1906144a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561286a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612861906142c0565b60405180910390fd5b612875838383612dbf565b6128806000826125ed565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d091906147fe565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612927919061471d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612ab4919061471d565b905092915050565b60008183612aca91906147a4565b905092915050565b612aec828260405180602001604052806000815250612ed3565b5050565b612afb848484612784565b612b0784848484612f2e565b612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d90614260565b60405180910390fd5b50505050565b606060118054612b5b906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b87906148e8565b8015612bd45780601f10612ba957610100808354040283529160200191612bd4565b820191906000526020600020905b815481529060010190602001808311612bb757829003601f168201915b5050505050905090565b60606000821415612c26576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d3a565b600082905060005b60008214612c58578080612c419061494b565b915050600a82612c519190614773565b9150612c2e565b60008167ffffffffffffffff811115612c7457612c73614ab0565b5b6040519080825280601f01601f191660200182016040528015612ca65781602001600182028036833780820191505090505b5090505b60008514612d3357600182612cbf91906147fe565b9150600a85612cce9190614994565b6030612cda919061471d565b60f81b818381518110612cf057612cef614a81565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d2c9190614773565b9450612caa565b8093505050505b919050565b60008183612d4d91906147fe565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612dca8383836130c5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e0d57612e08816130ca565b612e4c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e4b57612e4a8382613113565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e8f57612e8a81613280565b612ece565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ecd57612ecc8282613351565b5b5b505050565b612edd83836133d0565b612eea6000848484612f2e565b612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2090614260565b60405180910390fd5b505050565b6000612f4f8473ffffffffffffffffffffffffffffffffffffffff1661359e565b156130b8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f78612497565b8786866040518563ffffffff1660e01b8152600401612f9a949392919061418e565b602060405180830381600087803b158015612fb457600080fd5b505af1925050508015612fe557506040513d601f19601f82011682018060405250810190612fe29190613be5565b60015b613068573d8060008114613015576040519150601f19603f3d011682016040523d82523d6000602084013e61301a565b606091505b50600081511415613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790614260565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130bd565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613120846112fc565b61312a91906147fe565b905060006007600084815260200190815260200160002054905081811461320f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061329491906147fe565b90506000600960008481526020019081526020016000205490506000600883815481106132c4576132c3614a81565b5b9060005260206000200154905080600883815481106132e6576132e5614a81565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061333557613334614a52565b5b6001900381819060005260206000200160009055905550505050565b600061335c836112fc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343790614440565b60405180910390fd5b61344981612581565b15613489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613480906142a0565b60405180910390fd5b61349560008383612dbf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134e5919061471d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135bd906148e8565b90600052602060002090601f0160209004810192826135df5760008555613626565b82601f106135f857805160ff1916838001178555613626565b82800160010185558215613626579182015b8281111561362557825182559160200191906001019061360a565b5b50905061363391906136c1565b5090565b8280548282559060005260206000209081019282156136b0579160200282015b828111156136af5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613657565b5b5090506136bd91906136c1565b5090565b5b808211156136da5760008160009055506001016136c2565b5090565b60006136f16136ec84614620565b6145fb565b9050808382526020820190508285602086028201111561371457613713614ae4565b5b60005b85811015613744578161372a8882613842565b845260208401935060208301925050600181019050613717565b5050509392505050565b600061376161375c8461464c565b6145fb565b9050808382526020820190508285602086028201111561378457613783614ae4565b5b60005b858110156137b4578161379a888261394e565b845260208401935060208301925050600181019050613787565b5050509392505050565b60006137d16137cc84614678565b6145fb565b9050828152602081018484840111156137ed576137ec614ae9565b5b6137f88482856148a6565b509392505050565b600061381361380e846146a9565b6145fb565b90508281526020810184848401111561382f5761382e614ae9565b5b61383a8482856148a6565b509392505050565b6000813590506138518161520e565b92915050565b600082601f83011261386c5761386b614adf565b5b813561387c8482602086016136de565b91505092915050565b600082601f83011261389a57613899614adf565b5b81356138aa84826020860161374e565b91505092915050565b6000813590506138c281615225565b92915050565b6000813590506138d78161523c565b92915050565b6000815190506138ec8161523c565b92915050565b600082601f83011261390757613906614adf565b5b81356139178482602086016137be565b91505092915050565b600082601f83011261393557613934614adf565b5b8135613945848260208601613800565b91505092915050565b60008135905061395d81615253565b92915050565b60006020828403121561397957613978614af3565b5b600061398784828501613842565b91505092915050565b600080604083850312156139a7576139a6614af3565b5b60006139b585828601613842565b92505060206139c685828601613842565b9150509250929050565b6000806000606084860312156139e9576139e8614af3565b5b60006139f786828701613842565b9350506020613a0886828701613842565b9250506040613a198682870161394e565b9150509250925092565b60008060008060808587031215613a3d57613a3c614af3565b5b6000613a4b87828801613842565b9450506020613a5c87828801613842565b9350506040613a6d8782880161394e565b925050606085013567ffffffffffffffff811115613a8e57613a8d614aee565b5b613a9a878288016138f2565b91505092959194509250565b60008060408385031215613abd57613abc614af3565b5b6000613acb85828601613842565b9250506020613adc858286016138b3565b9150509250929050565b60008060408385031215613afd57613afc614af3565b5b6000613b0b85828601613842565b9250506020613b1c8582860161394e565b9150509250929050565b600060208284031215613b3c57613b3b614af3565b5b600082013567ffffffffffffffff811115613b5a57613b59614aee565b5b613b6684828501613857565b91505092915050565b600060208284031215613b8557613b84614af3565b5b600082013567ffffffffffffffff811115613ba357613ba2614aee565b5b613baf84828501613885565b91505092915050565b600060208284031215613bce57613bcd614af3565b5b6000613bdc848285016138c8565b91505092915050565b600060208284031215613bfb57613bfa614af3565b5b6000613c09848285016138dd565b91505092915050565b600060208284031215613c2857613c27614af3565b5b600082013567ffffffffffffffff811115613c4657613c45614aee565b5b613c5284828501613920565b91505092915050565b600060208284031215613c7157613c70614af3565b5b6000613c7f8482850161394e565b91505092915050565b613c9181614832565b82525050565b613ca081614844565b82525050565b6000613cb1826146da565b613cbb81856146f0565b9350613ccb8185602086016148b5565b613cd481614af8565b840191505092915050565b6000613cea826146e5565b613cf48185614701565b9350613d048185602086016148b5565b613d0d81614af8565b840191505092915050565b6000613d23826146e5565b613d2d8185614712565b9350613d3d8185602086016148b5565b80840191505092915050565b6000613d56602b83614701565b9150613d6182614b09565b604082019050919050565b6000613d79603283614701565b9150613d8482614b58565b604082019050919050565b6000613d9c602683614701565b9150613da782614ba7565b604082019050919050565b6000613dbf601c83614701565b9150613dca82614bf6565b602082019050919050565b6000613de2602483614701565b9150613ded82614c1f565b604082019050919050565b6000613e05601983614701565b9150613e1082614c6e565b602082019050919050565b6000613e28601283614701565b9150613e3382614c97565b602082019050919050565b6000613e4b601b83614701565b9150613e5682614cc0565b602082019050919050565b6000613e6e602c83614701565b9150613e7982614ce9565b604082019050919050565b6000613e91602583614701565b9150613e9c82614d38565b604082019050919050565b6000613eb4601683614701565b9150613ebf82614d87565b602082019050919050565b6000613ed7601d83614701565b9150613ee282614db0565b602082019050919050565b6000613efa603883614701565b9150613f0582614dd9565b604082019050919050565b6000613f1d602a83614701565b9150613f2882614e28565b604082019050919050565b6000613f40602983614701565b9150613f4b82614e77565b604082019050919050565b6000613f63601283614701565b9150613f6e82614ec6565b602082019050919050565b6000613f86602083614701565b9150613f9182614eef565b602082019050919050565b6000613fa9602c83614701565b9150613fb482614f18565b604082019050919050565b6000613fcc602083614701565b9150613fd782614f67565b602082019050919050565b6000613fef602983614701565b9150613ffa82614f90565b604082019050919050565b6000614012602f83614701565b915061401d82614fdf565b604082019050919050565b6000614035601383614701565b91506140408261502e565b602082019050919050565b6000614058602183614701565b915061406382615057565b604082019050919050565b600061407b602183614701565b9150614086826150a6565b604082019050919050565b600061409e602083614701565b91506140a9826150f5565b602082019050919050565b60006140c1603183614701565b91506140cc8261511e565b604082019050919050565b60006140e4601283614701565b91506140ef8261516d565b602082019050919050565b6000614107601483614701565b915061411282615196565b602082019050919050565b600061412a602c83614701565b9150614135826151bf565b604082019050919050565b6141498161489c565b82525050565b600061415b8285613d18565b91506141678284613d18565b91508190509392505050565b60006020820190506141886000830184613c88565b92915050565b60006080820190506141a36000830187613c88565b6141b06020830186613c88565b6141bd6040830185614140565b81810360608301526141cf8184613ca6565b905095945050505050565b60006040820190506141ef6000830185613c88565b6141fc6020830184614140565b9392505050565b60006020820190506142186000830184613c97565b92915050565b600060208201905081810360008301526142388184613cdf565b905092915050565b6000602082019050818103600083015261425981613d49565b9050919050565b6000602082019050818103600083015261427981613d6c565b9050919050565b6000602082019050818103600083015261429981613d8f565b9050919050565b600060208201905081810360008301526142b981613db2565b9050919050565b600060208201905081810360008301526142d981613dd5565b9050919050565b600060208201905081810360008301526142f981613df8565b9050919050565b6000602082019050818103600083015261431981613e1b565b9050919050565b6000602082019050818103600083015261433981613e3e565b9050919050565b6000602082019050818103600083015261435981613e61565b9050919050565b6000602082019050818103600083015261437981613e84565b9050919050565b6000602082019050818103600083015261439981613ea7565b9050919050565b600060208201905081810360008301526143b981613eca565b9050919050565b600060208201905081810360008301526143d981613eed565b9050919050565b600060208201905081810360008301526143f981613f10565b9050919050565b6000602082019050818103600083015261441981613f33565b9050919050565b6000602082019050818103600083015261443981613f56565b9050919050565b6000602082019050818103600083015261445981613f79565b9050919050565b6000602082019050818103600083015261447981613f9c565b9050919050565b6000602082019050818103600083015261449981613fbf565b9050919050565b600060208201905081810360008301526144b981613fe2565b9050919050565b600060208201905081810360008301526144d981614005565b9050919050565b600060208201905081810360008301526144f981614028565b9050919050565b600060208201905081810360008301526145198161404b565b9050919050565b600060208201905081810360008301526145398161406e565b9050919050565b6000602082019050818103600083015261455981614091565b9050919050565b60006020820190508181036000830152614579816140b4565b9050919050565b60006020820190508181036000830152614599816140d7565b9050919050565b600060208201905081810360008301526145b9816140fa565b9050919050565b600060208201905081810360008301526145d98161411d565b9050919050565b60006020820190506145f56000830184614140565b92915050565b6000614605614616565b9050614611828261491a565b919050565b6000604051905090565b600067ffffffffffffffff82111561463b5761463a614ab0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561466757614666614ab0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561469357614692614ab0565b5b61469c82614af8565b9050602081019050919050565b600067ffffffffffffffff8211156146c4576146c3614ab0565b5b6146cd82614af8565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147288261489c565b91506147338361489c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614768576147676149c5565b5b828201905092915050565b600061477e8261489c565b91506147898361489c565b925082614799576147986149f4565b5b828204905092915050565b60006147af8261489c565b91506147ba8361489c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f3576147f26149c5565b5b828202905092915050565b60006148098261489c565b91506148148361489c565b925082821015614827576148266149c5565b5b828203905092915050565b600061483d8261487c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148d35780820151818401526020810190506148b8565b838111156148e2576000848401525b50505050565b6000600282049050600182168061490057607f821691505b6020821081141561491457614913614a23565b5b50919050565b61492382614af8565b810181811067ffffffffffffffff8211171561494257614941614ab0565b5b80604052505050565b60006149568261489c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614989576149886149c5565b5b600182019050919050565b600061499f8261489c565b91506149aa8361489c565b9250826149ba576149b96149f4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41626f7665206d617820747820636f756e740000000000000000000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520646576416460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f415641582073656e7420697320696e636f727265637400000000000000000000600082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f416c72656164792077686974656c697374656400000000000000000000000000600082015250565b7f43616e206f6e6c79206d696e742032207768696c652077686974656c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4973206e6f742077686974656c69737465640000000000000000000000000000600082015250565b7f53616c65206973207374696c6c20616374697665000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61521781614832565b811461522257600080fd5b50565b61522e81614844565b811461523957600080fd5b50565b61524581614850565b811461525057600080fd5b50565b61525c8161489c565b811461526757600080fd5b5056fea2646970667358221220704e9a82801ea81989493fabacd938ffd645b01fbccae56edc3d417c5978dba264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102665760003560e01c80637b9417c811610144578063c87b56dd116100b6578063e985e9c51161007a578063e985e9c514610937578063e986655014610974578063eb8d24441461098b578063edac985b146109b6578063f2fde38b146109f3578063f43a22dc14610a1c57610266565b8063c87b56dd14610850578063cb774d471461088d578063d547cfb7146108b8578063e2146963146108e3578063e36d64981461090c57610266565b806395d89b411161010857806395d89b41146107415780639b19251a1461076c578063a22cb465146107aa578063a759a7c8146107d3578063b2992bb0146107fe578063b88d4fde1461082757610266565b80637b9417c8146106465780637f81be69146106835780638d859f3e146106c05780638da5cb5b146106eb578063936a9ec21461071657610266565b80633719e3b0116101dd57806355f804b3116101a157806355f804b3146105335780635600d2fa1461055c5780636352211e1461059957806370a08231146105d6578063715018a61461061357806379c650681461062a57610266565b80633719e3b01461044e5780633ad10ef6146104655780633af32abf1461049057806342842e0e146104cd5780634f6ccce7146104f657610266565b8063095ea7b31161022f578063095ea7b31461035257806318160ddd1461037b57806323b872dd146103a65780632f745c59146103cf57806334918dfd1461040c5780633502a7161461042357610266565b8062b214ec1461026b57806301ffc9a71461028257806304737a01146102bf57806306fdde03146102ea578063081812fc14610315575b600080fd5b34801561027757600080fd5b50610280610a47565b005b34801561028e57600080fd5b506102a960048036038101906102a49190613bb8565b610b2d565b6040516102b69190614203565b60405180910390f35b3480156102cb57600080fd5b506102d4610ba7565b6040516102e19190614203565b60405180910390f35b3480156102f657600080fd5b506102ff610bba565b60405161030c919061421e565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190613c5b565b610c4c565b6040516103499190614173565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613ae6565b610cd1565b005b34801561038757600080fd5b50610390610de9565b60405161039d91906145e0565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906139d0565b610df6565b005b3480156103db57600080fd5b506103f660048036038101906103f19190613ae6565b610e56565b60405161040391906145e0565b60405180910390f35b34801561041857600080fd5b50610421610efb565b005b34801561042f57600080fd5b50610438610fa3565b60405161044591906145e0565b60405180910390f35b34801561045a57600080fd5b50610463610fa9565b005b34801561047157600080fd5b5061047a611051565b6040516104879190614173565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613963565b611069565b6040516104c49190614203565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906139d0565b611103565b005b34801561050257600080fd5b5061051d60048036038101906105189190613c5b565b611123565b60405161052a91906145e0565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190613c12565b611194565b005b34801561056857600080fd5b50610583600480360381019061057e9190613963565b61122a565b6040516105909190614203565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190613c5b565b61124a565b6040516105cd9190614173565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613963565b6112fc565b60405161060a91906145e0565b60405180910390f35b34801561061f57600080fd5b506106286113b4565b005b610644600480360381019061063f9190613ae6565b61143c565b005b34801561065257600080fd5b5061066d60048036038101906106689190613963565b611854565b60405161067a9190614203565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613c5b565b6119ed565b6040516106b79190614173565b60405180910390f35b3480156106cc57600080fd5b506106d5611a2a565b6040516106e291906145e0565b60405180910390f35b3480156106f757600080fd5b50610700611a36565b60405161070d9190614173565b60405180910390f35b34801561072257600080fd5b5061072b611a60565b6040516107389190614173565b60405180910390f35b34801561074d57600080fd5b50610756611a86565b604051610763919061421e565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190613963565b611b18565b6040516107a19291906141da565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190613aa6565b611b5c565b005b3480156107df57600080fd5b506107e8611cdd565b6040516107f591906145e0565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613b6f565b611ce3565b005b34801561083357600080fd5b5061084e60048036038101906108499190613a23565b611e5b565b005b34801561085c57600080fd5b5061087760048036038101906108729190613c5b565b611ebd565b604051610884919061421e565b60405180910390f35b34801561089957600080fd5b506108a2611f64565b6040516108af91906145e0565b60405180910390f35b3480156108c457600080fd5b506108cd611f6a565b6040516108da919061421e565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190613c5b565b611ff8565b005b34801561091857600080fd5b5061092161207e565b60405161092e91906145e0565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613990565b612084565b60405161096b9190614203565b60405180910390f35b34801561098057600080fd5b50610989612118565b005b34801561099757600080fd5b506109a061227d565b6040516109ad9190614203565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d89190613b26565b612290565b6040516109ea9190614203565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a159190613963565b61239a565b005b348015610a2857600080fd5b50610a31612492565b604051610a3e91906145e0565b60405180910390f35b610a4f612497565b73ffffffffffffffffffffffffffffffffffffffff1673ea1ff804deb8cabe309c941bd3d1abfc6a1c6dfd73ffffffffffffffffffffffffffffffffffffffff1614610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac790614360565b60405180910390fd5b73ea1ff804deb8cabe309c941bd3d1abfc6a1c6dfd73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b2a573d6000803e3d6000fd5b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba05750610b9f8261249f565b5b9050919050565b601460019054906101000a900460ff1681565b606060008054610bc9906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf5906148e8565b8015610c425780601f10610c1757610100808354040283529160200191610c42565b820191906000526020600020905b815481529060010190602001808311610c2557829003601f168201915b5050505050905090565b6000610c5782612581565b610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90614460565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cdc8261124a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490614520565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6c612497565b73ffffffffffffffffffffffffffffffffffffffff161480610d9b5750610d9a81610d95612497565b612084565b5b610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906143c0565b60405180910390fd5b610de483836125ed565b505050565b6000600880549050905090565b610e07610e01612497565b826126a6565b610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90614560565b60405180910390fd5b610e51838383612784565b505050565b6000610e61836112fc565b8210610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990614240565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f03612497565b73ffffffffffffffffffffffffffffffffffffffff16610f21611a36565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90614480565b60405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b61271081565b610fb1612497565b73ffffffffffffffffffffffffffffffffffffffff16610fcf611a36565b73ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90614480565b60405180910390fd5b601460019054906101000a900460ff1615601460016101000a81548160ff021916908315150217905550565b73ea1ff804deb8cabe309c941bd3d1abfc6a1c6dfd81565b60008173ffffffffffffffffffffffffffffffffffffffff16601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b61111e83838360405180602001604052806000815250611e5b565b505050565b600061112d610de9565b821061116e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611165906145c0565b60405180910390fd5b6008828154811061118257611181614a81565b5b90600052602060002001549050919050565b61119c612497565b73ffffffffffffffffffffffffffffffffffffffff166111ba611a36565b73ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790614480565b60405180910390fd5b80601190805190602001906112269291906135b1565b5050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea90614400565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561136d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611364906143e0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113bc612497565b73ffffffffffffffffffffffffffffffffffffffff166113da611a36565b73ffffffffffffffffffffffffffffffffffffffff1614611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142790614480565b60405180910390fd5b61143a60006129e0565b565b601460009054906101000a900460ff1661148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290614320565b60405180910390fd5b6127106114a88261149a610de9565b612aa690919063ffffffff16565b11156114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090614420565b60405180910390fd5b34611505826718493fba64ef0000612abc90919063ffffffff16565b1115611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90614380565b60405180910390fd5b601460019054906101000a900460ff16156117a857600f548111156115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159790614300565b60405180910390fd5b6115a982611069565b6115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90614580565b60405180910390fd5b600f5461164082601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612aa690919063ffffffff16565b1115611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890614500565b60405180910390fd5b600f54601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541115611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90614500565b60405180910390fd5b61175d81601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612aa690919063ffffffff16565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506117ed565b60148111156117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390614300565b60405180910390fd5b5b60005b8181101561184f576000611802610de9565b905061180e8482612ad2565b807f3569967c3e62da72195400a4ade3df25a1bd8c77982e0da0d6ea72f6d5c6075660405160405180910390a25080806118479061494b565b9150506117f0565b505050565b600061185e612497565b73ffffffffffffffffffffffffffffffffffffffff1661187c611a36565b73ffffffffffffffffffffffffffffffffffffffff16146118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990614480565b60405180910390fd5b6118db82611069565b1561191b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611912906144e0565b60405180910390fd5b81601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555060019050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6718493fba64ef000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611a95906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac1906148e8565b8015611b0e5780601f10611ae357610100808354040283529160200191611b0e565b820191906000526020600020905b815481529060010190602001808311611af157829003601f168201915b5050505050905090565b60126020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b611b64612497565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc9906142e0565b60405180910390fd5b8060056000611bdf612497565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c8c612497565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cd19190614203565b60405180910390a35050565b600f5481565b611ceb612497565b73ffffffffffffffffffffffffffffffffffffffff16611d09611a36565b73ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614480565b60405180910390fd5b60001515601460009054906101000a900460ff16151514611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906145a0565b60405180910390fd5b60005b8151811015611e5757600073ffffffffffffffffffffffffffffffffffffffff16611dfc838381518110611def57611dee614a81565b5b60200260200101516119ed565b73ffffffffffffffffffffffffffffffffffffffff161415611e4457611e43611e23611a36565b838381518110611e3657611e35614a81565b5b602002602001015161143c565b5b8080611e4f9061494b565b915050611db8565b5050565b611e6c611e66612497565b836126a6565b611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614560565b60405180910390fd5b611eb784848484612af0565b50505050565b6060611ec882612581565b611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe906144c0565b60405180910390fd5b6000611f11612b4c565b90506000815111611f315760405180602001604052806000815250611f5c565b80611f3b84612bde565b604051602001611f4c92919061414f565b6040516020818303038152906040525b915050919050565b600c5481565b60118054611f77906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054611fa3906148e8565b8015611ff05780601f10611fc557610100808354040283529160200191611ff0565b820191906000526020600020905b815481529060010190602001808311611fd357829003601f168201915b505050505081565b612000612497565b73ffffffffffffffffffffffffffffffffffffffff1661201e611a36565b73ffffffffffffffffffffffffffffffffffffffff1614612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614480565b60405180910390fd5b80600f8190555050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612120612497565b73ffffffffffffffffffffffffffffffffffffffff1661213e611a36565b73ffffffffffffffffffffffffffffffffffffffff1614612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b90614480565b60405180910390fd5b6000600c54146121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d0906143a0565b60405180910390fd5b6000600d54141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614540565b60405180910390fd5b612710600d544060001c6122339190614994565b600c8190555060ff612250600d5443612d3f90919063ffffffff16565b111561227b5761271060014361226691906147fe565b4060001c6122749190614994565b600c819055505b565b601460009054906101000a900460ff1681565b600061229a612497565b73ffffffffffffffffffffffffffffffffffffffff166122b8611a36565b73ffffffffffffffffffffffffffffffffffffffff161461230e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230590614480565b60405180910390fd5b8160139080519060200190612324929190613637565b5060005b6013805490508110156123905761237c6013828154811061234c5761234b614a81565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611854565b5080806123889061494b565b915050612328565b5060019050919050565b6123a2612497565b73ffffffffffffffffffffffffffffffffffffffff166123c0611a36565b73ffffffffffffffffffffffffffffffffffffffff1614612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d90614480565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614280565b60405180910390fd5b61248f816129e0565b50565b601481565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061256a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061257a575061257982612d55565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126608361124a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006126b182612581565b6126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e790614340565b60405180910390fd5b60006126fb8361124a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061276a57508373ffffffffffffffffffffffffffffffffffffffff1661275284610c4c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061277b575061277a8185612084565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127a48261124a565b73ffffffffffffffffffffffffffffffffffffffff16146127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f1906144a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561286a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612861906142c0565b60405180910390fd5b612875838383612dbf565b6128806000826125ed565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d091906147fe565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612927919061471d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612ab4919061471d565b905092915050565b60008183612aca91906147a4565b905092915050565b612aec828260405180602001604052806000815250612ed3565b5050565b612afb848484612784565b612b0784848484612f2e565b612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d90614260565b60405180910390fd5b50505050565b606060118054612b5b906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b87906148e8565b8015612bd45780601f10612ba957610100808354040283529160200191612bd4565b820191906000526020600020905b815481529060010190602001808311612bb757829003601f168201915b5050505050905090565b60606000821415612c26576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d3a565b600082905060005b60008214612c58578080612c419061494b565b915050600a82612c519190614773565b9150612c2e565b60008167ffffffffffffffff811115612c7457612c73614ab0565b5b6040519080825280601f01601f191660200182016040528015612ca65781602001600182028036833780820191505090505b5090505b60008514612d3357600182612cbf91906147fe565b9150600a85612cce9190614994565b6030612cda919061471d565b60f81b818381518110612cf057612cef614a81565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d2c9190614773565b9450612caa565b8093505050505b919050565b60008183612d4d91906147fe565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612dca8383836130c5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e0d57612e08816130ca565b612e4c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e4b57612e4a8382613113565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e8f57612e8a81613280565b612ece565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ecd57612ecc8282613351565b5b5b505050565b612edd83836133d0565b612eea6000848484612f2e565b612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2090614260565b60405180910390fd5b505050565b6000612f4f8473ffffffffffffffffffffffffffffffffffffffff1661359e565b156130b8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f78612497565b8786866040518563ffffffff1660e01b8152600401612f9a949392919061418e565b602060405180830381600087803b158015612fb457600080fd5b505af1925050508015612fe557506040513d601f19601f82011682018060405250810190612fe29190613be5565b60015b613068573d8060008114613015576040519150601f19603f3d011682016040523d82523d6000602084013e61301a565b606091505b50600081511415613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790614260565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130bd565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613120846112fc565b61312a91906147fe565b905060006007600084815260200190815260200160002054905081811461320f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061329491906147fe565b90506000600960008481526020019081526020016000205490506000600883815481106132c4576132c3614a81565b5b9060005260206000200154905080600883815481106132e6576132e5614a81565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061333557613334614a52565b5b6001900381819060005260206000200160009055905550505050565b600061335c836112fc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343790614440565b60405180910390fd5b61344981612581565b15613489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613480906142a0565b60405180910390fd5b61349560008383612dbf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134e5919061471d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135bd906148e8565b90600052602060002090601f0160209004810192826135df5760008555613626565b82601f106135f857805160ff1916838001178555613626565b82800160010185558215613626579182015b8281111561362557825182559160200191906001019061360a565b5b50905061363391906136c1565b5090565b8280548282559060005260206000209081019282156136b0579160200282015b828111156136af5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613657565b5b5090506136bd91906136c1565b5090565b5b808211156136da5760008160009055506001016136c2565b5090565b60006136f16136ec84614620565b6145fb565b9050808382526020820190508285602086028201111561371457613713614ae4565b5b60005b85811015613744578161372a8882613842565b845260208401935060208301925050600181019050613717565b5050509392505050565b600061376161375c8461464c565b6145fb565b9050808382526020820190508285602086028201111561378457613783614ae4565b5b60005b858110156137b4578161379a888261394e565b845260208401935060208301925050600181019050613787565b5050509392505050565b60006137d16137cc84614678565b6145fb565b9050828152602081018484840111156137ed576137ec614ae9565b5b6137f88482856148a6565b509392505050565b600061381361380e846146a9565b6145fb565b90508281526020810184848401111561382f5761382e614ae9565b5b61383a8482856148a6565b509392505050565b6000813590506138518161520e565b92915050565b600082601f83011261386c5761386b614adf565b5b813561387c8482602086016136de565b91505092915050565b600082601f83011261389a57613899614adf565b5b81356138aa84826020860161374e565b91505092915050565b6000813590506138c281615225565b92915050565b6000813590506138d78161523c565b92915050565b6000815190506138ec8161523c565b92915050565b600082601f83011261390757613906614adf565b5b81356139178482602086016137be565b91505092915050565b600082601f83011261393557613934614adf565b5b8135613945848260208601613800565b91505092915050565b60008135905061395d81615253565b92915050565b60006020828403121561397957613978614af3565b5b600061398784828501613842565b91505092915050565b600080604083850312156139a7576139a6614af3565b5b60006139b585828601613842565b92505060206139c685828601613842565b9150509250929050565b6000806000606084860312156139e9576139e8614af3565b5b60006139f786828701613842565b9350506020613a0886828701613842565b9250506040613a198682870161394e565b9150509250925092565b60008060008060808587031215613a3d57613a3c614af3565b5b6000613a4b87828801613842565b9450506020613a5c87828801613842565b9350506040613a6d8782880161394e565b925050606085013567ffffffffffffffff811115613a8e57613a8d614aee565b5b613a9a878288016138f2565b91505092959194509250565b60008060408385031215613abd57613abc614af3565b5b6000613acb85828601613842565b9250506020613adc858286016138b3565b9150509250929050565b60008060408385031215613afd57613afc614af3565b5b6000613b0b85828601613842565b9250506020613b1c8582860161394e565b9150509250929050565b600060208284031215613b3c57613b3b614af3565b5b600082013567ffffffffffffffff811115613b5a57613b59614aee565b5b613b6684828501613857565b91505092915050565b600060208284031215613b8557613b84614af3565b5b600082013567ffffffffffffffff811115613ba357613ba2614aee565b5b613baf84828501613885565b91505092915050565b600060208284031215613bce57613bcd614af3565b5b6000613bdc848285016138c8565b91505092915050565b600060208284031215613bfb57613bfa614af3565b5b6000613c09848285016138dd565b91505092915050565b600060208284031215613c2857613c27614af3565b5b600082013567ffffffffffffffff811115613c4657613c45614aee565b5b613c5284828501613920565b91505092915050565b600060208284031215613c7157613c70614af3565b5b6000613c7f8482850161394e565b91505092915050565b613c9181614832565b82525050565b613ca081614844565b82525050565b6000613cb1826146da565b613cbb81856146f0565b9350613ccb8185602086016148b5565b613cd481614af8565b840191505092915050565b6000613cea826146e5565b613cf48185614701565b9350613d048185602086016148b5565b613d0d81614af8565b840191505092915050565b6000613d23826146e5565b613d2d8185614712565b9350613d3d8185602086016148b5565b80840191505092915050565b6000613d56602b83614701565b9150613d6182614b09565b604082019050919050565b6000613d79603283614701565b9150613d8482614b58565b604082019050919050565b6000613d9c602683614701565b9150613da782614ba7565b604082019050919050565b6000613dbf601c83614701565b9150613dca82614bf6565b602082019050919050565b6000613de2602483614701565b9150613ded82614c1f565b604082019050919050565b6000613e05601983614701565b9150613e1082614c6e565b602082019050919050565b6000613e28601283614701565b9150613e3382614c97565b602082019050919050565b6000613e4b601b83614701565b9150613e5682614cc0565b602082019050919050565b6000613e6e602c83614701565b9150613e7982614ce9565b604082019050919050565b6000613e91602583614701565b9150613e9c82614d38565b604082019050919050565b6000613eb4601683614701565b9150613ebf82614d87565b602082019050919050565b6000613ed7601d83614701565b9150613ee282614db0565b602082019050919050565b6000613efa603883614701565b9150613f0582614dd9565b604082019050919050565b6000613f1d602a83614701565b9150613f2882614e28565b604082019050919050565b6000613f40602983614701565b9150613f4b82614e77565b604082019050919050565b6000613f63601283614701565b9150613f6e82614ec6565b602082019050919050565b6000613f86602083614701565b9150613f9182614eef565b602082019050919050565b6000613fa9602c83614701565b9150613fb482614f18565b604082019050919050565b6000613fcc602083614701565b9150613fd782614f67565b602082019050919050565b6000613fef602983614701565b9150613ffa82614f90565b604082019050919050565b6000614012602f83614701565b915061401d82614fdf565b604082019050919050565b6000614035601383614701565b91506140408261502e565b602082019050919050565b6000614058602183614701565b915061406382615057565b604082019050919050565b600061407b602183614701565b9150614086826150a6565b604082019050919050565b600061409e602083614701565b91506140a9826150f5565b602082019050919050565b60006140c1603183614701565b91506140cc8261511e565b604082019050919050565b60006140e4601283614701565b91506140ef8261516d565b602082019050919050565b6000614107601483614701565b915061411282615196565b602082019050919050565b600061412a602c83614701565b9150614135826151bf565b604082019050919050565b6141498161489c565b82525050565b600061415b8285613d18565b91506141678284613d18565b91508190509392505050565b60006020820190506141886000830184613c88565b92915050565b60006080820190506141a36000830187613c88565b6141b06020830186613c88565b6141bd6040830185614140565b81810360608301526141cf8184613ca6565b905095945050505050565b60006040820190506141ef6000830185613c88565b6141fc6020830184614140565b9392505050565b60006020820190506142186000830184613c97565b92915050565b600060208201905081810360008301526142388184613cdf565b905092915050565b6000602082019050818103600083015261425981613d49565b9050919050565b6000602082019050818103600083015261427981613d6c565b9050919050565b6000602082019050818103600083015261429981613d8f565b9050919050565b600060208201905081810360008301526142b981613db2565b9050919050565b600060208201905081810360008301526142d981613dd5565b9050919050565b600060208201905081810360008301526142f981613df8565b9050919050565b6000602082019050818103600083015261431981613e1b565b9050919050565b6000602082019050818103600083015261433981613e3e565b9050919050565b6000602082019050818103600083015261435981613e61565b9050919050565b6000602082019050818103600083015261437981613e84565b9050919050565b6000602082019050818103600083015261439981613ea7565b9050919050565b600060208201905081810360008301526143b981613eca565b9050919050565b600060208201905081810360008301526143d981613eed565b9050919050565b600060208201905081810360008301526143f981613f10565b9050919050565b6000602082019050818103600083015261441981613f33565b9050919050565b6000602082019050818103600083015261443981613f56565b9050919050565b6000602082019050818103600083015261445981613f79565b9050919050565b6000602082019050818103600083015261447981613f9c565b9050919050565b6000602082019050818103600083015261449981613fbf565b9050919050565b600060208201905081810360008301526144b981613fe2565b9050919050565b600060208201905081810360008301526144d981614005565b9050919050565b600060208201905081810360008301526144f981614028565b9050919050565b600060208201905081810360008301526145198161404b565b9050919050565b600060208201905081810360008301526145398161406e565b9050919050565b6000602082019050818103600083015261455981614091565b9050919050565b60006020820190508181036000830152614579816140b4565b9050919050565b60006020820190508181036000830152614599816140d7565b9050919050565b600060208201905081810360008301526145b9816140fa565b9050919050565b600060208201905081810360008301526145d98161411d565b9050919050565b60006020820190506145f56000830184614140565b92915050565b6000614605614616565b9050614611828261491a565b919050565b6000604051905090565b600067ffffffffffffffff82111561463b5761463a614ab0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561466757614666614ab0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561469357614692614ab0565b5b61469c82614af8565b9050602081019050919050565b600067ffffffffffffffff8211156146c4576146c3614ab0565b5b6146cd82614af8565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147288261489c565b91506147338361489c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614768576147676149c5565b5b828201905092915050565b600061477e8261489c565b91506147898361489c565b925082614799576147986149f4565b5b828204905092915050565b60006147af8261489c565b91506147ba8361489c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f3576147f26149c5565b5b828202905092915050565b60006148098261489c565b91506148148361489c565b925082821015614827576148266149c5565b5b828203905092915050565b600061483d8261487c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148d35780820151818401526020810190506148b8565b838111156148e2576000848401525b50505050565b6000600282049050600182168061490057607f821691505b6020821081141561491457614913614a23565b5b50919050565b61492382614af8565b810181811067ffffffffffffffff8211171561494257614941614ab0565b5b80604052505050565b60006149568261489c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614989576149886149c5565b5b600182019050919050565b600061499f8261489c565b91506149aa8361489c565b9250826149ba576149b96149f4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41626f7665206d617820747820636f756e740000000000000000000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520646576416460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f415641582073656e7420697320696e636f727265637400000000000000000000600082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f416c72656164792077686974656c697374656400000000000000000000000000600082015250565b7f43616e206f6e6c79206d696e742032207768696c652077686974656c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4973206e6f742077686974656c69737465640000000000000000000000000000600082015250565b7f53616c65206973207374696c6c20616374697665000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61521781614832565b811461522257600080fd5b50565b61522e81614844565b811461523957600080fd5b50565b61524581614850565b811461525057600080fd5b50565b61525c8161489c565b811461526757600080fd5b5056fea2646970667358221220704e9a82801ea81989493fabacd938ffd645b01fbccae56edc3d417c5978dba264736f6c63430008070033
Deployed Bytecode Sourcemap
54154:5401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59317:233;;;;;;;;;;;;;:::i;:::-;;47983:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55006:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35969:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37528:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37051:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48623:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57208:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48291:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55837:89;;;;;;;;;;;;;:::i;:::-;;54447:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55934:110;;;;;;;;;;;;;:::i;:::-;;54879:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58833:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57529:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48813:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55726:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54394:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35489:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35219:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11895:103;;;;;;;;;;;;;:::i;:::-;;56052:1148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58567:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35793:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54498:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11244:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54288:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36138:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54794:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;37821:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54593:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58973:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57710:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36313:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54319:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54680:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55204:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54354:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38187:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58073:486;;;;;;;;;;;;;:::i;:::-;;54967:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55324:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12153:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54547:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59317:233;59378:12;:10;:12::i;:::-;59364:26;;54916:42;59364:26;;;59356:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54916:42;59443:37;;:60;59481:21;59443:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59317:233::o;47983:224::-;48085:4;48124:35;48109:50;;;:11;:50;;;;:90;;;;48163:36;48187:11;48163:23;:36::i;:::-;48109:90;48102:97;;47983:224;;;:::o;55006:38::-;;;;;;;;;;;;;:::o;35969:100::-;36023:13;36056:5;36049:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35969:100;:::o;37528:221::-;37604:7;37632:16;37640:7;37632;:16::i;:::-;37624:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37717:15;:24;37733:7;37717:24;;;;;;;;;;;;;;;;;;;;;37710:31;;37528:221;;;:::o;37051:411::-;37132:13;37148:23;37163:7;37148:14;:23::i;:::-;37132:39;;37196:5;37190:11;;:2;:11;;;;37182:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37290:5;37274:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37299:37;37316:5;37323:12;:10;:12::i;:::-;37299:16;:37::i;:::-;37274:62;37252:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;37433:21;37442:2;37446:7;37433:8;:21::i;:::-;37121:341;37051:411;;:::o;48623:113::-;48684:7;48711:10;:17;;;;48704:24;;48623:113;:::o;57208:313::-;57352:41;57371:12;:10;:12::i;:::-;57385:7;57352:18;:41::i;:::-;57330:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;57485:28;57495:4;57501:2;57505:7;57485:9;:28::i;:::-;57208:313;;;:::o;48291:256::-;48388:7;48424:23;48441:5;48424:16;:23::i;:::-;48416:5;:31;48408:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;48513:12;:19;48526:5;48513:19;;;;;;;;;;;;;;;:26;48533:5;48513:26;;;;;;;;;;;;48506:33;;48291:256;;;;:::o;55837:89::-;11475:12;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55906:12:::1;;;;;;;;;;;55905:13;55890:12;;:28;;;;;;;;;;;;;;;;;;55837:89::o:0;54447:44::-;54486:5;54447:44;:::o;55934:110::-;11475:12;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56017:19:::1;;;;;;;;;;;56016:20;55994:19;;:42;;;;;;;;;;;;;;;;;;55934:110::o:0;54879:79::-;54916:42;54879:79;:::o;58833:132::-;58891:18;58953:4;58929:28;;:9;:15;58939:4;58929:15;;;;;;;;;;;;;;;:20;;;;;;;;;;;;:28;;;58922:35;;58833:132;;;:::o;57529:173::-;57655:39;57672:4;57678:2;57682:7;57655:39;;;;;;;;;;;;:16;:39::i;:::-;57529:173;;;:::o;48813:233::-;48888:7;48924:30;:28;:30::i;:::-;48916:5;:38;48908:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;49021:10;49032:5;49021:17;;;;;;;;:::i;:::-;;;;;;;;;;49014:24;;48813:233;;;:::o;55726:103::-;11475:12;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55814:7:::1;55799:12;:22;;;;;;;;;;;;:::i;:::-;;55726:103:::0;:::o;54394:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;35489:239::-;35561:7;35581:13;35597:7;:16;35605:7;35597:16;;;;;;;;;;;;;;;;;;;;;35581:32;;35649:1;35632:19;;:5;:19;;;;35624:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35715:5;35708:12;;;35489:239;;;:::o;35219:208::-;35291:7;35336:1;35319:19;;:5;:19;;;;35311:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35403:9;:16;35413:5;35403:16;;;;;;;;;;;;;;;;35396:23;;35219:208;;;:::o;11895:103::-;11475:12;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11960:30:::1;11987:1;11960:18;:30::i;:::-;11895:103::o:0;56052:1148::-;56141:12;;;;;;;;;;;56133:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;54486:5;56206:33;56224:14;56206:13;:11;:13::i;:::-;:17;;:33;;;;:::i;:::-;:49;;56198:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;56328:9;56299:25;56309:14;54530:10;56299:9;;:25;;;;:::i;:::-;:38;;56291:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;56380:19;;;;;;;;;;;56377:604;;;56444:16;;56426:14;:34;;56418:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;56508:18;56522:3;56508:13;:18::i;:::-;56500:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;56622:16;;56574:44;56603:14;56574:9;:14;56584:3;56574:14;;;;;;;;;;;;;;;:24;;;:28;;:44;;;;:::i;:::-;:64;;56566:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;56729:16;;56701:9;:14;56711:3;56701:14;;;;;;;;;;;;;;;:24;;;:44;;56693:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;56827:44;56856:14;56827:9;:14;56837:3;56827:14;;;;;;;;;;;;;;;:24;;;:28;;:44;;;;:::i;:::-;56800:9;:14;56810:3;56800:14;;;;;;;;;;;;;;;:24;;:71;;;;56377:604;;;54584:2;56916:14;:28;;56908:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;56377:604;56999:6;56995:198;57015:14;57011:1;:18;56995:198;;;57053:14;57070:13;:11;:13::i;:::-;57053:30;;57100:25;57110:3;57115:9;57100;:25::i;:::-;57169:9;57149:30;;;;;;;;;;57036:157;57031:3;;;;;:::i;:::-;;;;56995:198;;;;56052:1148;;:::o;58567:258::-;58637:12;11475;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58671:19:::1;58685:4;58671:13;:19::i;:::-;58670:20;58662:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;58748:4;58725:9;:15;58735:4;58725:15;;;;;;;;;;;;;;;:20;;;:27;;;;;;;;;;;;;;;;;;58791:1;58763:9;:15;58773:4;58763:15;;;;;;;;;;;;;;;:25;;:29;;;;58813:4;58803:14;;58567:258:::0;;;:::o;35793:109::-;35851:7;35878;:16;35886:7;35878:16;;;;;;;;;;;;;;;;;;;;;35871:23;;35793:109;;;:::o;54498:42::-;54530:10;54498:42;:::o;11244:87::-;11290:7;11317:6;;;;;;;;;;;11310:13;;11244:87;:::o;54288:24::-;;;;;;;;;;;;;:::o;36138:104::-;36194:13;36227:7;36220:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36138:104;:::o;54794:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37821:295::-;37936:12;:10;:12::i;:::-;37924:24;;:8;:24;;;;37916:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38036:8;37991:18;:32;38010:12;:10;:12::i;:::-;37991:32;;;;;;;;;;;;;;;:42;38024:8;37991:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;38089:8;38060:48;;38075:12;:10;:12::i;:::-;38060:48;;;38099:8;38060:48;;;;;;:::i;:::-;;;;;;;;37821:295;;:::o;54593:35::-;;;;:::o;58973:336::-;11475:12;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59079:5:::1;59063:21;;:12;;;;;;;;;;;:21;;;59055:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;59125:9;59120:182;59144:9;:16;59140:1;:20;59120:182;;;59221:1;59185:38;;:24;59196:9;59206:1;59196:12;;;;;;;;:::i;:::-;;;;;;;;59185:10;:24::i;:::-;:38;;;59182:109;;;59243:32;59253:7;:5;:7::i;:::-;59262:9;59272:1;59262:12;;;;;;;;:::i;:::-;;;;;;;;59243:9;:32::i;:::-;59182:109;59162:3;;;;;:::i;:::-;;;;59120:182;;;;58973:336:::0;:::o;57710:355::-;57885:41;57904:12;:10;:12::i;:::-;57918:7;57885:18;:41::i;:::-;57863:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;58018:39;58032:4;58038:2;58042:7;58051:5;58018:13;:39::i;:::-;57710:355;;;;:::o;36313:334::-;36386:13;36420:16;36428:7;36420;:16::i;:::-;36412:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36501:21;36525:10;:8;:10::i;:::-;36501:34;;36577:1;36559:7;36553:21;:25;:86;;;;;;;;;;;;;;;;;36605:7;36614:18;:7;:16;:18::i;:::-;36588:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36553:86;36546:93;;;36313:334;;;:::o;54319:28::-;;;;:::o;54680:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55204:112::-;11475:12;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55299:9:::1;55280:16;:28;;;;55204:112:::0;:::o;54354:33::-;;;;:::o;38187:164::-;38284:4;38308:18;:25;38327:5;38308:25;;;;;;;;;;;;;;;:35;38334:8;38308:35;;;;;;;;;;;;;;;;;;;;;;;;;38301:42;;38187:164;;;;:::o;58073:486::-;11475:12;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58154:1:::1;58137:13;;:18;58129:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;58230:1;58208:18;;:23;;58200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54486:5;58310:18;;58300:29;58295:35;;:50;;;;:::i;:::-;58279:13;:66;;;;58456:3;58417:36;58434:18;;58417:12;:16;;:36;;;;:::i;:::-;:42;58413:139;;;54486:5;58522:1;58507:12;:16;;;;:::i;:::-;58497:27;58492:33;;:48;;;;:::i;:::-;58476:13;:64;;;;58413:139;58073:486::o:0;54967:32::-;;;;;;;;;;;;;:::o;55324:273::-;55395:12;11475;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55436:5:::1;55420:13;:21;;;;;;;;;;;;:::i;:::-;;55456:6;55452:113;55472:13;:20;;;;55468:1;:24;55452:113;;;55514:39;55536:13;55550:1;55536:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;55514:21;:39::i;:::-;;55494:3;;;;;:::i;:::-;;;;55452:113;;;;55585:4;55575:14;;55324:273:::0;;;:::o;12153:201::-;11475:12;:10;:12::i;:::-;11464:23;;:7;:5;:7::i;:::-;:23;;;11456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12262:1:::1;12242:22;;:8;:22;;;;12234:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12318:28;12337:8;12318:18;:28::i;:::-;12153:201:::0;:::o;54547:39::-;54584:2;54547:39;:::o;8728:98::-;8781:7;8808:10;8801:17;;8728:98;:::o;34862:293::-;34964:4;35012:25;34997:40;;;:11;:40;;;;:101;;;;35065:33;35050:48;;;:11;:48;;;;34997:101;:150;;;;35111:36;35135:11;35111:23;:36::i;:::-;34997:150;34981:166;;34862:293;;;:::o;40922:127::-;40987:4;41039:1;41011:30;;:7;:16;41019:7;41011:16;;;;;;;;;;;;;;;;;;;;;:30;;;;41004:37;;40922:127;;;:::o;44922:174::-;45024:2;44997:15;:24;45013:7;44997:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45080:7;45076:2;45042:46;;45051:23;45066:7;45051:14;:23::i;:::-;45042:46;;;;;;;;;;;;44922:174;;:::o;41216:348::-;41309:4;41334:16;41342:7;41334;:16::i;:::-;41326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41410:13;41426:23;41441:7;41426:14;:23::i;:::-;41410:39;;41479:5;41468:16;;:7;:16;;;:51;;;;41512:7;41488:31;;:20;41500:7;41488:11;:20::i;:::-;:31;;;41468:51;:87;;;;41523:32;41540:5;41547:7;41523:16;:32::i;:::-;41468:87;41460:96;;;41216:348;;;;:::o;44226:578::-;44385:4;44358:31;;:23;44373:7;44358:14;:23::i;:::-;:31;;;44350:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44468:1;44454:16;;:2;:16;;;;44446:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44524:39;44545:4;44551:2;44555:7;44524:20;:39::i;:::-;44628:29;44645:1;44649:7;44628:8;:29::i;:::-;44689:1;44670:9;:15;44680:4;44670:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;44718:1;44701:9;:13;44711:2;44701:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44749:2;44730:7;:16;44738:7;44730:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44788:7;44784:2;44769:27;;44778:4;44769:27;;;;;;;;;;;;44226:578;;;:::o;12514:191::-;12588:16;12607:6;;;;;;;;;;;12588:25;;12633:8;12624:6;;:17;;;;;;;;;;;;;;;;;;12688:8;12657:40;;12678:8;12657:40;;;;;;;;;;;;12577:128;12514:191;:::o;26490:98::-;26548:7;26579:1;26575;:5;;;;:::i;:::-;26568:12;;26490:98;;;;:::o;27228:::-;27286:7;27317:1;27313;:5;;;;:::i;:::-;27306:12;;27228:98;;;;:::o;41906:110::-;41982:26;41992:2;41996:7;41982:26;;;;;;;;;;;;:9;:26::i;:::-;41906:110;;:::o;40294:315::-;40451:28;40461:4;40467:2;40471:7;40451:9;:28::i;:::-;40498:48;40521:4;40527:2;40531:7;40540:5;40498:22;:48::i;:::-;40490:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;40294:315;;;;:::o;55605:113::-;55665:13;55698:12;55691:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55605:113;:::o;30939:723::-;30995:13;31225:1;31216:5;:10;31212:53;;;31243:10;;;;;;;;;;;;;;;;;;;;;31212:53;31275:12;31290:5;31275:20;;31306:14;31331:78;31346:1;31338:4;:9;31331:78;;31364:8;;;;;:::i;:::-;;;;31395:2;31387:10;;;;;:::i;:::-;;;31331:78;;;31419:19;31451:6;31441:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31419:39;;31469:154;31485:1;31476:5;:10;31469:154;;31513:1;31503:11;;;;;:::i;:::-;;;31580:2;31572:5;:10;;;;:::i;:::-;31559:2;:24;;;;:::i;:::-;31546:39;;31529:6;31536;31529:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;31609:2;31600:11;;;;;:::i;:::-;;;31469:154;;;31647:6;31633:21;;;;;30939:723;;;;:::o;26871:98::-;26929:7;26960:1;26956;:5;;;;:::i;:::-;26949:12;;26871:98;;;;:::o;33469:157::-;33554:4;33593:25;33578:40;;;:11;:40;;;;33571:47;;33469:157;;;:::o;49659:589::-;49803:45;49830:4;49836:2;49840:7;49803:26;:45::i;:::-;49881:1;49865:18;;:4;:18;;;49861:187;;;49900:40;49932:7;49900:31;:40::i;:::-;49861:187;;;49970:2;49962:10;;:4;:10;;;49958:90;;49989:47;50022:4;50028:7;49989:32;:47::i;:::-;49958:90;49861:187;50076:1;50062:16;;:2;:16;;;50058:183;;;50095:45;50132:7;50095:36;:45::i;:::-;50058:183;;;50168:4;50162:10;;:2;:10;;;50158:83;;50189:40;50217:2;50221:7;50189:27;:40::i;:::-;50158:83;50058:183;49659:589;;;:::o;42243:321::-;42373:18;42379:2;42383:7;42373:5;:18::i;:::-;42424:54;42455:1;42459:2;42463:7;42472:5;42424:22;:54::i;:::-;42402:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;42243:321;;;:::o;45661:803::-;45816:4;45837:15;:2;:13;;;:15::i;:::-;45833:624;;;45889:2;45873:36;;;45910:12;:10;:12::i;:::-;45924:4;45930:7;45939:5;45873:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45869:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46136:1;46119:6;:13;:18;46115:272;;;46162:60;;;;;;;;;;:::i;:::-;;;;;;;;46115:272;46337:6;46331:13;46322:6;46318:2;46314:15;46307:38;45869:533;46006:45;;;45996:55;;;:6;:55;;;;45989:62;;;;;45833:624;46441:4;46434:11;;45661:803;;;;;;;:::o;47036:126::-;;;;:::o;50971:164::-;51075:10;:17;;;;51048:15;:24;51064:7;51048:24;;;;;;;;;;;:44;;;;51103:10;51119:7;51103:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50971:164;:::o;51762:988::-;52028:22;52078:1;52053:22;52070:4;52053:16;:22::i;:::-;:26;;;;:::i;:::-;52028:51;;52090:18;52111:17;:26;52129:7;52111:26;;;;;;;;;;;;52090:47;;52258:14;52244:10;:28;52240:328;;52289:19;52311:12;:18;52324:4;52311:18;;;;;;;;;;;;;;;:34;52330:14;52311:34;;;;;;;;;;;;52289:56;;52395:11;52362:12;:18;52375:4;52362:18;;;;;;;;;;;;;;;:30;52381:10;52362:30;;;;;;;;;;;:44;;;;52512:10;52479:17;:30;52497:11;52479:30;;;;;;;;;;;:43;;;;52274:294;52240:328;52664:17;:26;52682:7;52664:26;;;;;;;;;;;52657:33;;;52708:12;:18;52721:4;52708:18;;;;;;;;;;;;;;;:34;52727:14;52708:34;;;;;;;;;;;52701:41;;;51843:907;;51762:988;;:::o;53045:1079::-;53298:22;53343:1;53323:10;:17;;;;:21;;;;:::i;:::-;53298:46;;53355:18;53376:15;:24;53392:7;53376:24;;;;;;;;;;;;53355:45;;53727:19;53749:10;53760:14;53749:26;;;;;;;;:::i;:::-;;;;;;;;;;53727:48;;53813:11;53788:10;53799;53788:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;53924:10;53893:15;:28;53909:11;53893:28;;;;;;;;;;;:41;;;;54065:15;:24;54081:7;54065:24;;;;;;;;;;;54058:31;;;54100:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53116:1008;;;53045:1079;:::o;50549:221::-;50634:14;50651:20;50668:2;50651:16;:20::i;:::-;50634:37;;50709:7;50682:12;:16;50695:2;50682:16;;;;;;;;;;;;;;;:24;50699:6;50682:24;;;;;;;;;;;:34;;;;50756:6;50727:17;:26;50745:7;50727:26;;;;;;;;;;;:35;;;;50623:147;50549:221;;:::o;42900:382::-;42994:1;42980:16;;:2;:16;;;;42972:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43053:16;43061:7;43053;:16::i;:::-;43052:17;43044:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43115:45;43144:1;43148:2;43152:7;43115:20;:45::i;:::-;43190:1;43173:9;:13;43183:2;43173:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;43221:2;43202:7;:16;43210:7;43202:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;43266:7;43262:2;43241:33;;43258:1;43241:33;;;;;;;;;;;;42900:382;;:::o;797:387::-;857:4;1065:12;1132:7;1120:20;1112:28;;1175:1;1168:4;:8;1161:15;;;797:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:619::-;5445:6;5453;5461;5510:2;5498:9;5489:7;5485:23;5481:32;5478:119;;;5516:79;;:::i;:::-;5478:119;5636:1;5661:53;5706:7;5697:6;5686:9;5682:22;5661:53;:::i;:::-;5651:63;;5607:117;5763:2;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5734:118;5891:2;5917:53;5962:7;5953:6;5942:9;5938:22;5917:53;:::i;:::-;5907:63;;5862:118;5368:619;;;;;:::o;5993:943::-;6088:6;6096;6104;6112;6161:3;6149:9;6140:7;6136:23;6132:33;6129:120;;;6168:79;;:::i;:::-;6129:120;6288:1;6313:53;6358:7;6349:6;6338:9;6334:22;6313:53;:::i;:::-;6303:63;;6259:117;6415:2;6441:53;6486:7;6477:6;6466:9;6462:22;6441:53;:::i;:::-;6431:63;;6386:118;6543:2;6569:53;6614:7;6605:6;6594:9;6590:22;6569:53;:::i;:::-;6559:63;;6514:118;6699:2;6688:9;6684:18;6671:32;6730:18;6722:6;6719:30;6716:117;;;6752:79;;:::i;:::-;6716:117;6857:62;6911:7;6902:6;6891:9;6887:22;6857:62;:::i;:::-;6847:72;;6642:287;5993:943;;;;;;;:::o;6942:468::-;7007:6;7015;7064:2;7052:9;7043:7;7039:23;7035:32;7032:119;;;7070:79;;:::i;:::-;7032:119;7190:1;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7161:117;7317:2;7343:50;7385:7;7376:6;7365:9;7361:22;7343:50;:::i;:::-;7333:60;;7288:115;6942:468;;;;;:::o;7416:474::-;7484:6;7492;7541:2;7529:9;7520:7;7516:23;7512:32;7509:119;;;7547:79;;:::i;:::-;7509:119;7667:1;7692:53;7737:7;7728:6;7717:9;7713:22;7692:53;:::i;:::-;7682:63;;7638:117;7794:2;7820:53;7865:7;7856:6;7845:9;7841:22;7820:53;:::i;:::-;7810:63;;7765:118;7416:474;;;;;:::o;7896:539::-;7980:6;8029:2;8017:9;8008:7;8004:23;8000:32;7997:119;;;8035:79;;:::i;:::-;7997:119;8183:1;8172:9;8168:17;8155:31;8213:18;8205:6;8202:30;8199:117;;;8235:79;;:::i;:::-;8199:117;8340:78;8410:7;8401:6;8390:9;8386:22;8340:78;:::i;:::-;8330:88;;8126:302;7896:539;;;;:::o;8441:::-;8525:6;8574:2;8562:9;8553:7;8549:23;8545:32;8542:119;;;8580:79;;:::i;:::-;8542:119;8728:1;8717:9;8713:17;8700:31;8758:18;8750:6;8747:30;8744:117;;;8780:79;;:::i;:::-;8744:117;8885:78;8955:7;8946:6;8935:9;8931:22;8885:78;:::i;:::-;8875:88;;8671:302;8441:539;;;;:::o;8986:327::-;9044:6;9093:2;9081:9;9072:7;9068:23;9064:32;9061:119;;;9099:79;;:::i;:::-;9061:119;9219:1;9244:52;9288:7;9279:6;9268:9;9264:22;9244:52;:::i;:::-;9234:62;;9190:116;8986:327;;;;:::o;9319:349::-;9388:6;9437:2;9425:9;9416:7;9412:23;9408:32;9405:119;;;9443:79;;:::i;:::-;9405:119;9563:1;9588:63;9643:7;9634:6;9623:9;9619:22;9588:63;:::i;:::-;9578:73;;9534:127;9319:349;;;;:::o;9674:509::-;9743:6;9792:2;9780:9;9771:7;9767:23;9763:32;9760:119;;;9798:79;;:::i;:::-;9760:119;9946:1;9935:9;9931:17;9918:31;9976:18;9968:6;9965:30;9962:117;;;9998:79;;:::i;:::-;9962:117;10103:63;10158:7;10149:6;10138:9;10134:22;10103:63;:::i;:::-;10093:73;;9889:287;9674:509;;;;:::o;10189:329::-;10248:6;10297:2;10285:9;10276:7;10272:23;10268:32;10265:119;;;10303:79;;:::i;:::-;10265:119;10423:1;10448:53;10493:7;10484:6;10473:9;10469:22;10448:53;:::i;:::-;10438:63;;10394:117;10189:329;;;;:::o;10524:118::-;10611:24;10629:5;10611:24;:::i;:::-;10606:3;10599:37;10524:118;;:::o;10648:109::-;10729:21;10744:5;10729:21;:::i;:::-;10724:3;10717:34;10648:109;;:::o;10763:360::-;10849:3;10877:38;10909:5;10877:38;:::i;:::-;10931:70;10994:6;10989:3;10931:70;:::i;:::-;10924:77;;11010:52;11055:6;11050:3;11043:4;11036:5;11032:16;11010:52;:::i;:::-;11087:29;11109:6;11087:29;:::i;:::-;11082:3;11078:39;11071:46;;10853:270;10763:360;;;;:::o;11129:364::-;11217:3;11245:39;11278:5;11245:39;:::i;:::-;11300:71;11364:6;11359:3;11300:71;:::i;:::-;11293:78;;11380:52;11425:6;11420:3;11413:4;11406:5;11402:16;11380:52;:::i;:::-;11457:29;11479:6;11457:29;:::i;:::-;11452:3;11448:39;11441:46;;11221:272;11129:364;;;;:::o;11499:377::-;11605:3;11633:39;11666:5;11633:39;:::i;:::-;11688:89;11770:6;11765:3;11688:89;:::i;:::-;11681:96;;11786:52;11831:6;11826:3;11819:4;11812:5;11808:16;11786:52;:::i;:::-;11863:6;11858:3;11854:16;11847:23;;11609:267;11499:377;;;;:::o;11882:366::-;12024:3;12045:67;12109:2;12104:3;12045:67;:::i;:::-;12038:74;;12121:93;12210:3;12121:93;:::i;:::-;12239:2;12234:3;12230:12;12223:19;;11882:366;;;:::o;12254:::-;12396:3;12417:67;12481:2;12476:3;12417:67;:::i;:::-;12410:74;;12493:93;12582:3;12493:93;:::i;:::-;12611:2;12606:3;12602:12;12595:19;;12254:366;;;:::o;12626:::-;12768:3;12789:67;12853:2;12848:3;12789:67;:::i;:::-;12782:74;;12865:93;12954:3;12865:93;:::i;:::-;12983:2;12978:3;12974:12;12967:19;;12626:366;;;:::o;12998:::-;13140:3;13161:67;13225:2;13220:3;13161:67;:::i;:::-;13154:74;;13237:93;13326:3;13237:93;:::i;:::-;13355:2;13350:3;13346:12;13339:19;;12998:366;;;:::o;13370:::-;13512:3;13533:67;13597:2;13592:3;13533:67;:::i;:::-;13526:74;;13609:93;13698:3;13609:93;:::i;:::-;13727:2;13722:3;13718:12;13711:19;;13370:366;;;:::o;13742:::-;13884:3;13905:67;13969:2;13964:3;13905:67;:::i;:::-;13898:74;;13981:93;14070:3;13981:93;:::i;:::-;14099:2;14094:3;14090:12;14083:19;;13742:366;;;:::o;14114:::-;14256:3;14277:67;14341:2;14336:3;14277:67;:::i;:::-;14270:74;;14353:93;14442:3;14353:93;:::i;:::-;14471:2;14466:3;14462:12;14455:19;;14114:366;;;:::o;14486:::-;14628:3;14649:67;14713:2;14708:3;14649:67;:::i;:::-;14642:74;;14725:93;14814:3;14725:93;:::i;:::-;14843:2;14838:3;14834:12;14827:19;;14486:366;;;:::o;14858:::-;15000:3;15021:67;15085:2;15080:3;15021:67;:::i;:::-;15014:74;;15097:93;15186:3;15097:93;:::i;:::-;15215:2;15210:3;15206:12;15199:19;;14858:366;;;:::o;15230:::-;15372:3;15393:67;15457:2;15452:3;15393:67;:::i;:::-;15386:74;;15469:93;15558:3;15469:93;:::i;:::-;15587:2;15582:3;15578:12;15571:19;;15230:366;;;:::o;15602:::-;15744:3;15765:67;15829:2;15824:3;15765:67;:::i;:::-;15758:74;;15841:93;15930:3;15841:93;:::i;:::-;15959:2;15954:3;15950:12;15943:19;;15602:366;;;:::o;15974:::-;16116:3;16137:67;16201:2;16196:3;16137:67;:::i;:::-;16130:74;;16213:93;16302:3;16213:93;:::i;:::-;16331:2;16326:3;16322:12;16315:19;;15974:366;;;:::o;16346:::-;16488:3;16509:67;16573:2;16568:3;16509:67;:::i;:::-;16502:74;;16585:93;16674:3;16585:93;:::i;:::-;16703:2;16698:3;16694:12;16687:19;;16346:366;;;:::o;16718:::-;16860:3;16881:67;16945:2;16940:3;16881:67;:::i;:::-;16874:74;;16957:93;17046:3;16957:93;:::i;:::-;17075:2;17070:3;17066:12;17059:19;;16718:366;;;:::o;17090:::-;17232:3;17253:67;17317:2;17312:3;17253:67;:::i;:::-;17246:74;;17329:93;17418:3;17329:93;:::i;:::-;17447:2;17442:3;17438:12;17431:19;;17090:366;;;:::o;17462:::-;17604:3;17625:67;17689:2;17684:3;17625:67;:::i;:::-;17618:74;;17701:93;17790:3;17701:93;:::i;:::-;17819:2;17814:3;17810:12;17803:19;;17462:366;;;:::o;17834:::-;17976:3;17997:67;18061:2;18056:3;17997:67;:::i;:::-;17990:74;;18073:93;18162:3;18073:93;:::i;:::-;18191:2;18186:3;18182:12;18175:19;;17834:366;;;:::o;18206:::-;18348:3;18369:67;18433:2;18428:3;18369:67;:::i;:::-;18362:74;;18445:93;18534:3;18445:93;:::i;:::-;18563:2;18558:3;18554:12;18547:19;;18206:366;;;:::o;18578:::-;18720:3;18741:67;18805:2;18800:3;18741:67;:::i;:::-;18734:74;;18817:93;18906:3;18817:93;:::i;:::-;18935:2;18930:3;18926:12;18919:19;;18578:366;;;:::o;18950:::-;19092:3;19113:67;19177:2;19172:3;19113:67;:::i;:::-;19106:74;;19189:93;19278:3;19189:93;:::i;:::-;19307:2;19302:3;19298:12;19291:19;;18950:366;;;:::o;19322:::-;19464:3;19485:67;19549:2;19544:3;19485:67;:::i;:::-;19478:74;;19561:93;19650:3;19561:93;:::i;:::-;19679:2;19674:3;19670:12;19663:19;;19322:366;;;:::o;19694:::-;19836:3;19857:67;19921:2;19916:3;19857:67;:::i;:::-;19850:74;;19933:93;20022:3;19933:93;:::i;:::-;20051:2;20046:3;20042:12;20035:19;;19694:366;;;:::o;20066:::-;20208:3;20229:67;20293:2;20288:3;20229:67;:::i;:::-;20222:74;;20305:93;20394:3;20305:93;:::i;:::-;20423:2;20418:3;20414:12;20407:19;;20066:366;;;:::o;20438:::-;20580:3;20601:67;20665:2;20660:3;20601:67;:::i;:::-;20594:74;;20677:93;20766:3;20677:93;:::i;:::-;20795:2;20790:3;20786:12;20779:19;;20438:366;;;:::o;20810:::-;20952:3;20973:67;21037:2;21032:3;20973:67;:::i;:::-;20966:74;;21049:93;21138:3;21049:93;:::i;:::-;21167:2;21162:3;21158:12;21151:19;;20810:366;;;:::o;21182:::-;21324:3;21345:67;21409:2;21404:3;21345:67;:::i;:::-;21338:74;;21421:93;21510:3;21421:93;:::i;:::-;21539:2;21534:3;21530:12;21523:19;;21182:366;;;:::o;21554:::-;21696:3;21717:67;21781:2;21776:3;21717:67;:::i;:::-;21710:74;;21793:93;21882:3;21793:93;:::i;:::-;21911:2;21906:3;21902:12;21895:19;;21554:366;;;:::o;21926:::-;22068:3;22089:67;22153:2;22148:3;22089:67;:::i;:::-;22082:74;;22165:93;22254:3;22165:93;:::i;:::-;22283:2;22278:3;22274:12;22267:19;;21926:366;;;:::o;22298:::-;22440:3;22461:67;22525:2;22520:3;22461:67;:::i;:::-;22454:74;;22537:93;22626:3;22537:93;:::i;:::-;22655:2;22650:3;22646:12;22639:19;;22298:366;;;:::o;22670:118::-;22757:24;22775:5;22757:24;:::i;:::-;22752:3;22745:37;22670:118;;:::o;22794:435::-;22974:3;22996:95;23087:3;23078:6;22996:95;:::i;:::-;22989:102;;23108:95;23199:3;23190:6;23108:95;:::i;:::-;23101:102;;23220:3;23213:10;;22794:435;;;;;:::o;23235:222::-;23328:4;23366:2;23355:9;23351:18;23343:26;;23379:71;23447:1;23436:9;23432:17;23423:6;23379:71;:::i;:::-;23235:222;;;;:::o;23463:640::-;23658:4;23696:3;23685:9;23681:19;23673:27;;23710:71;23778:1;23767:9;23763:17;23754:6;23710:71;:::i;:::-;23791:72;23859:2;23848:9;23844:18;23835:6;23791:72;:::i;:::-;23873;23941:2;23930:9;23926:18;23917:6;23873:72;:::i;:::-;23992:9;23986:4;23982:20;23977:2;23966:9;23962:18;23955:48;24020:76;24091:4;24082:6;24020:76;:::i;:::-;24012:84;;23463:640;;;;;;;:::o;24109:332::-;24230:4;24268:2;24257:9;24253:18;24245:26;;24281:71;24349:1;24338:9;24334:17;24325:6;24281:71;:::i;:::-;24362:72;24430:2;24419:9;24415:18;24406:6;24362:72;:::i;:::-;24109:332;;;;;:::o;24447:210::-;24534:4;24572:2;24561:9;24557:18;24549:26;;24585:65;24647:1;24636:9;24632:17;24623:6;24585:65;:::i;:::-;24447:210;;;;:::o;24663:313::-;24776:4;24814:2;24803:9;24799:18;24791:26;;24863:9;24857:4;24853:20;24849:1;24838:9;24834:17;24827:47;24891:78;24964:4;24955:6;24891:78;:::i;:::-;24883:86;;24663:313;;;;:::o;24982:419::-;25148:4;25186:2;25175:9;25171:18;25163:26;;25235:9;25229:4;25225:20;25221:1;25210:9;25206:17;25199:47;25263:131;25389:4;25263:131;:::i;:::-;25255:139;;24982:419;;;:::o;25407:::-;25573:4;25611:2;25600:9;25596:18;25588:26;;25660:9;25654:4;25650:20;25646:1;25635:9;25631:17;25624:47;25688:131;25814:4;25688:131;:::i;:::-;25680:139;;25407:419;;;:::o;25832:::-;25998:4;26036:2;26025:9;26021:18;26013:26;;26085:9;26079:4;26075:20;26071:1;26060:9;26056:17;26049:47;26113:131;26239:4;26113:131;:::i;:::-;26105:139;;25832:419;;;:::o;26257:::-;26423:4;26461:2;26450:9;26446:18;26438:26;;26510:9;26504:4;26500:20;26496:1;26485:9;26481:17;26474:47;26538:131;26664:4;26538:131;:::i;:::-;26530:139;;26257:419;;;:::o;26682:::-;26848:4;26886:2;26875:9;26871:18;26863:26;;26935:9;26929:4;26925:20;26921:1;26910:9;26906:17;26899:47;26963:131;27089:4;26963:131;:::i;:::-;26955:139;;26682:419;;;:::o;27107:::-;27273:4;27311:2;27300:9;27296:18;27288:26;;27360:9;27354:4;27350:20;27346:1;27335:9;27331:17;27324:47;27388:131;27514:4;27388:131;:::i;:::-;27380:139;;27107:419;;;:::o;27532:::-;27698:4;27736:2;27725:9;27721:18;27713:26;;27785:9;27779:4;27775:20;27771:1;27760:9;27756:17;27749:47;27813:131;27939:4;27813:131;:::i;:::-;27805:139;;27532:419;;;:::o;27957:::-;28123:4;28161:2;28150:9;28146:18;28138:26;;28210:9;28204:4;28200:20;28196:1;28185:9;28181:17;28174:47;28238:131;28364:4;28238:131;:::i;:::-;28230:139;;27957:419;;;:::o;28382:::-;28548:4;28586:2;28575:9;28571:18;28563:26;;28635:9;28629:4;28625:20;28621:1;28610:9;28606:17;28599:47;28663:131;28789:4;28663:131;:::i;:::-;28655:139;;28382:419;;;:::o;28807:::-;28973:4;29011:2;29000:9;28996:18;28988:26;;29060:9;29054:4;29050:20;29046:1;29035:9;29031:17;29024:47;29088:131;29214:4;29088:131;:::i;:::-;29080:139;;28807:419;;;:::o;29232:::-;29398:4;29436:2;29425:9;29421:18;29413:26;;29485:9;29479:4;29475:20;29471:1;29460:9;29456:17;29449:47;29513:131;29639:4;29513:131;:::i;:::-;29505:139;;29232:419;;;:::o;29657:::-;29823:4;29861:2;29850:9;29846:18;29838:26;;29910:9;29904:4;29900:20;29896:1;29885:9;29881:17;29874:47;29938:131;30064:4;29938:131;:::i;:::-;29930:139;;29657:419;;;:::o;30082:::-;30248:4;30286:2;30275:9;30271:18;30263:26;;30335:9;30329:4;30325:20;30321:1;30310:9;30306:17;30299:47;30363:131;30489:4;30363:131;:::i;:::-;30355:139;;30082:419;;;:::o;30507:::-;30673:4;30711:2;30700:9;30696:18;30688:26;;30760:9;30754:4;30750:20;30746:1;30735:9;30731:17;30724:47;30788:131;30914:4;30788:131;:::i;:::-;30780:139;;30507:419;;;:::o;30932:::-;31098:4;31136:2;31125:9;31121:18;31113:26;;31185:9;31179:4;31175:20;31171:1;31160:9;31156:17;31149:47;31213:131;31339:4;31213:131;:::i;:::-;31205:139;;30932:419;;;:::o;31357:::-;31523:4;31561:2;31550:9;31546:18;31538:26;;31610:9;31604:4;31600:20;31596:1;31585:9;31581:17;31574:47;31638:131;31764:4;31638:131;:::i;:::-;31630:139;;31357:419;;;:::o;31782:::-;31948:4;31986:2;31975:9;31971:18;31963:26;;32035:9;32029:4;32025:20;32021:1;32010:9;32006:17;31999:47;32063:131;32189:4;32063:131;:::i;:::-;32055:139;;31782:419;;;:::o;32207:::-;32373:4;32411:2;32400:9;32396:18;32388:26;;32460:9;32454:4;32450:20;32446:1;32435:9;32431:17;32424:47;32488:131;32614:4;32488:131;:::i;:::-;32480:139;;32207:419;;;:::o;32632:::-;32798:4;32836:2;32825:9;32821:18;32813:26;;32885:9;32879:4;32875:20;32871:1;32860:9;32856:17;32849:47;32913:131;33039:4;32913:131;:::i;:::-;32905:139;;32632:419;;;:::o;33057:::-;33223:4;33261:2;33250:9;33246:18;33238:26;;33310:9;33304:4;33300:20;33296:1;33285:9;33281:17;33274:47;33338:131;33464:4;33338:131;:::i;:::-;33330:139;;33057:419;;;:::o;33482:::-;33648:4;33686:2;33675:9;33671:18;33663:26;;33735:9;33729:4;33725:20;33721:1;33710:9;33706:17;33699:47;33763:131;33889:4;33763:131;:::i;:::-;33755:139;;33482:419;;;:::o;33907:::-;34073:4;34111:2;34100:9;34096:18;34088:26;;34160:9;34154:4;34150:20;34146:1;34135:9;34131:17;34124:47;34188:131;34314:4;34188:131;:::i;:::-;34180:139;;33907:419;;;:::o;34332:::-;34498:4;34536:2;34525:9;34521:18;34513:26;;34585:9;34579:4;34575:20;34571:1;34560:9;34556:17;34549:47;34613:131;34739:4;34613:131;:::i;:::-;34605:139;;34332:419;;;:::o;34757:::-;34923:4;34961:2;34950:9;34946:18;34938:26;;35010:9;35004:4;35000:20;34996:1;34985:9;34981:17;34974:47;35038:131;35164:4;35038:131;:::i;:::-;35030:139;;34757:419;;;:::o;35182:::-;35348:4;35386:2;35375:9;35371:18;35363:26;;35435:9;35429:4;35425:20;35421:1;35410:9;35406:17;35399:47;35463:131;35589:4;35463:131;:::i;:::-;35455:139;;35182:419;;;:::o;35607:::-;35773:4;35811:2;35800:9;35796:18;35788:26;;35860:9;35854:4;35850:20;35846:1;35835:9;35831:17;35824:47;35888:131;36014:4;35888:131;:::i;:::-;35880:139;;35607:419;;;:::o;36032:::-;36198:4;36236:2;36225:9;36221:18;36213:26;;36285:9;36279:4;36275:20;36271:1;36260:9;36256:17;36249:47;36313:131;36439:4;36313:131;:::i;:::-;36305:139;;36032:419;;;:::o;36457:::-;36623:4;36661:2;36650:9;36646:18;36638:26;;36710:9;36704:4;36700:20;36696:1;36685:9;36681:17;36674:47;36738:131;36864:4;36738:131;:::i;:::-;36730:139;;36457:419;;;:::o;36882:::-;37048:4;37086:2;37075:9;37071:18;37063:26;;37135:9;37129:4;37125:20;37121:1;37110:9;37106:17;37099:47;37163:131;37289:4;37163:131;:::i;:::-;37155:139;;36882:419;;;:::o;37307:222::-;37400:4;37438:2;37427:9;37423:18;37415:26;;37451:71;37519:1;37508:9;37504:17;37495:6;37451:71;:::i;:::-;37307:222;;;;:::o;37535:129::-;37569:6;37596:20;;:::i;:::-;37586:30;;37625:33;37653:4;37645:6;37625:33;:::i;:::-;37535:129;;;:::o;37670:75::-;37703:6;37736:2;37730:9;37720:19;;37670:75;:::o;37751:311::-;37828:4;37918:18;37910:6;37907:30;37904:56;;;37940:18;;:::i;:::-;37904:56;37990:4;37982:6;37978:17;37970:25;;38050:4;38044;38040:15;38032:23;;37751:311;;;:::o;38068:::-;38145:4;38235:18;38227:6;38224:30;38221:56;;;38257:18;;:::i;:::-;38221:56;38307:4;38299:6;38295:17;38287:25;;38367:4;38361;38357:15;38349:23;;38068:311;;;:::o;38385:307::-;38446:4;38536:18;38528:6;38525:30;38522:56;;;38558:18;;:::i;:::-;38522:56;38596:29;38618:6;38596:29;:::i;:::-;38588:37;;38680:4;38674;38670:15;38662:23;;38385:307;;;:::o;38698:308::-;38760:4;38850:18;38842:6;38839:30;38836:56;;;38872:18;;:::i;:::-;38836:56;38910:29;38932:6;38910:29;:::i;:::-;38902:37;;38994:4;38988;38984:15;38976:23;;38698:308;;;:::o;39012:98::-;39063:6;39097:5;39091:12;39081:22;;39012:98;;;:::o;39116:99::-;39168:6;39202:5;39196:12;39186:22;;39116:99;;;:::o;39221:168::-;39304:11;39338:6;39333:3;39326:19;39378:4;39373:3;39369:14;39354:29;;39221:168;;;;:::o;39395:169::-;39479:11;39513:6;39508:3;39501:19;39553:4;39548:3;39544:14;39529:29;;39395:169;;;;:::o;39570:148::-;39672:11;39709:3;39694:18;;39570:148;;;;:::o;39724:305::-;39764:3;39783:20;39801:1;39783:20;:::i;:::-;39778:25;;39817:20;39835:1;39817:20;:::i;:::-;39812:25;;39971:1;39903:66;39899:74;39896:1;39893:81;39890:107;;;39977:18;;:::i;:::-;39890:107;40021:1;40018;40014:9;40007:16;;39724:305;;;;:::o;40035:185::-;40075:1;40092:20;40110:1;40092:20;:::i;:::-;40087:25;;40126:20;40144:1;40126:20;:::i;:::-;40121:25;;40165:1;40155:35;;40170:18;;:::i;:::-;40155:35;40212:1;40209;40205:9;40200:14;;40035:185;;;;:::o;40226:348::-;40266:7;40289:20;40307:1;40289:20;:::i;:::-;40284:25;;40323:20;40341:1;40323:20;:::i;:::-;40318:25;;40511:1;40443:66;40439:74;40436:1;40433:81;40428:1;40421:9;40414:17;40410:105;40407:131;;;40518:18;;:::i;:::-;40407:131;40566:1;40563;40559:9;40548:20;;40226:348;;;;:::o;40580:191::-;40620:4;40640:20;40658:1;40640:20;:::i;:::-;40635:25;;40674:20;40692:1;40674:20;:::i;:::-;40669:25;;40713:1;40710;40707:8;40704:34;;;40718:18;;:::i;:::-;40704:34;40763:1;40760;40756:9;40748:17;;40580:191;;;;:::o;40777:96::-;40814:7;40843:24;40861:5;40843:24;:::i;:::-;40832:35;;40777:96;;;:::o;40879:90::-;40913:7;40956:5;40949:13;40942:21;40931:32;;40879:90;;;:::o;40975:149::-;41011:7;41051:66;41044:5;41040:78;41029:89;;40975:149;;;:::o;41130:126::-;41167:7;41207:42;41200:5;41196:54;41185:65;;41130:126;;;:::o;41262:77::-;41299:7;41328:5;41317:16;;41262:77;;;:::o;41345:154::-;41429:6;41424:3;41419;41406:30;41491:1;41482:6;41477:3;41473:16;41466:27;41345:154;;;:::o;41505:307::-;41573:1;41583:113;41597:6;41594:1;41591:13;41583:113;;;41682:1;41677:3;41673:11;41667:18;41663:1;41658:3;41654:11;41647:39;41619:2;41616:1;41612:10;41607:15;;41583:113;;;41714:6;41711:1;41708:13;41705:101;;;41794:1;41785:6;41780:3;41776:16;41769:27;41705:101;41554:258;41505:307;;;:::o;41818:320::-;41862:6;41899:1;41893:4;41889:12;41879:22;;41946:1;41940:4;41936:12;41967:18;41957:81;;42023:4;42015:6;42011:17;42001:27;;41957:81;42085:2;42077:6;42074:14;42054:18;42051:38;42048:84;;;42104:18;;:::i;:::-;42048:84;41869:269;41818:320;;;:::o;42144:281::-;42227:27;42249:4;42227:27;:::i;:::-;42219:6;42215:40;42357:6;42345:10;42342:22;42321:18;42309:10;42306:34;42303:62;42300:88;;;42368:18;;:::i;:::-;42300:88;42408:10;42404:2;42397:22;42187:238;42144:281;;:::o;42431:233::-;42470:3;42493:24;42511:5;42493:24;:::i;:::-;42484:33;;42539:66;42532:5;42529:77;42526:103;;;42609:18;;:::i;:::-;42526:103;42656:1;42649:5;42645:13;42638:20;;42431:233;;;:::o;42670:176::-;42702:1;42719:20;42737:1;42719:20;:::i;:::-;42714:25;;42753:20;42771:1;42753:20;:::i;:::-;42748:25;;42792:1;42782:35;;42797:18;;:::i;:::-;42782:35;42838:1;42835;42831:9;42826:14;;42670:176;;;;:::o;42852:180::-;42900:77;42897:1;42890:88;42997:4;42994:1;42987:15;43021:4;43018:1;43011:15;43038:180;43086:77;43083:1;43076:88;43183:4;43180:1;43173:15;43207:4;43204:1;43197:15;43224:180;43272:77;43269:1;43262:88;43369:4;43366:1;43359:15;43393:4;43390:1;43383:15;43410:180;43458:77;43455:1;43448:88;43555:4;43552:1;43545:15;43579:4;43576:1;43569:15;43596:180;43644:77;43641:1;43634:88;43741:4;43738:1;43731:15;43765:4;43762:1;43755:15;43782:180;43830:77;43827:1;43820:88;43927:4;43924:1;43917:15;43951:4;43948:1;43941:15;43968:117;44077:1;44074;44067:12;44091:117;44200:1;44197;44190:12;44214:117;44323:1;44320;44313:12;44337:117;44446:1;44443;44436:12;44460:117;44569:1;44566;44559:12;44583:102;44624:6;44675:2;44671:7;44666:2;44659:5;44655:14;44651:28;44641:38;;44583:102;;;:::o;44691:230::-;44831:34;44827:1;44819:6;44815:14;44808:58;44900:13;44895:2;44887:6;44883:15;44876:38;44691:230;:::o;44927:237::-;45067:34;45063:1;45055:6;45051:14;45044:58;45136:20;45131:2;45123:6;45119:15;45112:45;44927:237;:::o;45170:225::-;45310:34;45306:1;45298:6;45294:14;45287:58;45379:8;45374:2;45366:6;45362:15;45355:33;45170:225;:::o;45401:178::-;45541:30;45537:1;45529:6;45525:14;45518:54;45401:178;:::o;45585:223::-;45725:34;45721:1;45713:6;45709:14;45702:58;45794:6;45789:2;45781:6;45777:15;45770:31;45585:223;:::o;45814:175::-;45954:27;45950:1;45942:6;45938:14;45931:51;45814:175;:::o;45995:168::-;46135:20;46131:1;46123:6;46119:14;46112:44;45995:168;:::o;46169:177::-;46309:29;46305:1;46297:6;46293:14;46286:53;46169:177;:::o;46352:231::-;46492:34;46488:1;46480:6;46476:14;46469:58;46561:14;46556:2;46548:6;46544:15;46537:39;46352:231;:::o;46589:224::-;46729:34;46725:1;46717:6;46713:14;46706:58;46798:7;46793:2;46785:6;46781:15;46774:32;46589:224;:::o;46819:172::-;46959:24;46955:1;46947:6;46943:14;46936:48;46819:172;:::o;46997:179::-;47137:31;47133:1;47125:6;47121:14;47114:55;46997:179;:::o;47182:243::-;47322:34;47318:1;47310:6;47306:14;47299:58;47391:26;47386:2;47378:6;47374:15;47367:51;47182:243;:::o;47431:229::-;47571:34;47567:1;47559:6;47555:14;47548:58;47640:12;47635:2;47627:6;47623:15;47616:37;47431:229;:::o;47666:228::-;47806:34;47802:1;47794:6;47790:14;47783:58;47875:11;47870:2;47862:6;47858:15;47851:36;47666:228;:::o;47900:168::-;48040:20;48036:1;48028:6;48024:14;48017:44;47900:168;:::o;48074:182::-;48214:34;48210:1;48202:6;48198:14;48191:58;48074:182;:::o;48262:231::-;48402:34;48398:1;48390:6;48386:14;48379:58;48471:14;48466:2;48458:6;48454:15;48447:39;48262:231;:::o;48499:182::-;48639:34;48635:1;48627:6;48623:14;48616:58;48499:182;:::o;48687:228::-;48827:34;48823:1;48815:6;48811:14;48804:58;48896:11;48891:2;48883:6;48879:15;48872:36;48687:228;:::o;48921:234::-;49061:34;49057:1;49049:6;49045:14;49038:58;49130:17;49125:2;49117:6;49113:15;49106:42;48921:234;:::o;49161:169::-;49301:21;49297:1;49289:6;49285:14;49278:45;49161:169;:::o;49336:220::-;49476:34;49472:1;49464:6;49460:14;49453:58;49545:3;49540:2;49532:6;49528:15;49521:28;49336:220;:::o;49562:::-;49702:34;49698:1;49690:6;49686:14;49679:58;49771:3;49766:2;49758:6;49754:15;49747:28;49562:220;:::o;49788:182::-;49928:34;49924:1;49916:6;49912:14;49905:58;49788:182;:::o;49976:236::-;50116:34;50112:1;50104:6;50100:14;50093:58;50185:19;50180:2;50172:6;50168:15;50161:44;49976:236;:::o;50218:168::-;50358:20;50354:1;50346:6;50342:14;50335:44;50218:168;:::o;50392:170::-;50532:22;50528:1;50520:6;50516:14;50509:46;50392:170;:::o;50568:231::-;50708:34;50704:1;50696:6;50692:14;50685:58;50777:14;50772:2;50764:6;50760:15;50753:39;50568:231;:::o;50805:122::-;50878:24;50896:5;50878:24;:::i;:::-;50871:5;50868:35;50858:63;;50917:1;50914;50907:12;50858:63;50805:122;:::o;50933:116::-;51003:21;51018:5;51003:21;:::i;:::-;50996:5;50993:32;50983:60;;51039:1;51036;51029:12;50983:60;50933:116;:::o;51055:120::-;51127:23;51144:5;51127:23;:::i;:::-;51120:5;51117:34;51107:62;;51165:1;51162;51155:12;51107:62;51055:120;:::o;51181:122::-;51254:24;51272:5;51254:24;:::i;:::-;51247:5;51244:35;51234:63;;51293:1;51290;51283:12;51234:63;51181:122;:::o
Swarm Source
ipfs://704e9a82801ea81989493fabacd938ffd645b01fbccae56edc3d417c5978dba2
Loading...
Loading
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.