Source Code
Overview
HYPE Balance
HYPE Value
$0.00Latest 25 from a total of 8,115 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Recover HYPE | 17560665 | 91 days ago | IN | 0 HYPE | 0.00012446 | ||||
| Recover ERC721 | 17560625 | 91 days ago | IN | 0 HYPE | 0.00006414 | ||||
| Recover ERC721 | 17560586 | 91 days ago | IN | 0 HYPE | 0.00001509 | ||||
| Recover ERC721 | 17560574 | 91 days ago | IN | 0 HYPE | 0.00001672 | ||||
| Recover ERC721 | 17560527 | 91 days ago | IN | 0 HYPE | 0.00001421 | ||||
| Recover ERC721 | 17560502 | 91 days ago | IN | 0 HYPE | 0.00002389 | ||||
| Transfer | 16645047 | 102 days ago | IN | 0 HYPE | 0.00001008 | ||||
| Transfer | 16644384 | 102 days ago | IN | 0 HYPE | 0.00043172 | ||||
| Transfer | 16643829 | 102 days ago | IN | 0 HYPE | 0.00043796 | ||||
| Approve | 16643584 | 102 days ago | IN | 0 HYPE | 0.00043058 | ||||
| Transfer | 16643514 | 102 days ago | IN | 0 HYPE | 0.00043796 | ||||
| Approve | 16643398 | 102 days ago | IN | 0 HYPE | 0.00043058 | ||||
| Transfer | 16643323 | 102 days ago | IN | 0 HYPE | 0.00043796 | ||||
| Transfer | 16643202 | 102 days ago | IN | 0 HYPE | 0.00043796 | ||||
| Approve | 16643105 | 102 days ago | IN | 0 HYPE | 0.00043058 | ||||
| Transfer | 16643027 | 102 days ago | IN | 0 HYPE | 0.00043796 | ||||
| Approve | 16642969 | 102 days ago | IN | 0 HYPE | 0.00043058 | ||||
| Transfer | 16642889 | 102 days ago | IN | 0 HYPE | 0.00043796 | ||||
| Approve | 16642823 | 102 days ago | IN | 0 HYPE | 0.00043058 | ||||
| Transfer | 16642750 | 102 days ago | IN | 0 HYPE | 0.00043796 | ||||
| Transfer | 16642636 | 102 days ago | IN | 0 HYPE | 0.00043796 | ||||
| Remove Collectio... | 15421512 | 116 days ago | IN | 0 HYPE | 0.00288038 | ||||
| Finish Raffle | 15382097 | 116 days ago | IN | 0 HYPE | 0.00049137 | ||||
| Buy Ticket | 15382061 | 116 days ago | IN | 1.242 HYPE | 0.00054659 | ||||
| Buy Ticket | 15381239 | 116 days ago | IN | 0.069 HYPE | 0.00074735 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | ||||
|---|---|---|---|---|---|---|---|
| 17560665 | 91 days ago | 0.44452 HYPE | |||||
| 17560625 | 91 days ago | 0 HYPE | |||||
| 17560586 | 91 days ago | 0 HYPE | |||||
| 17560574 | 91 days ago | 0 HYPE | |||||
| 17560527 | 91 days ago | 0 HYPE | |||||
| 17560502 | 91 days ago | 0 HYPE | |||||
| 15382097 | 116 days ago | 0 HYPE | |||||
| 15382097 | 116 days ago | 17.25 HYPE | |||||
| 15382097 | 116 days ago | 0 HYPE | |||||
| 15382097 | 116 days ago | 0 HYPE | |||||
| 15382097 | 116 days ago | 0 HYPE | |||||
| 15382097 | 116 days ago | 0 HYPE | |||||
| 15382097 | 116 days ago | 0 HYPE | |||||
| 15382061 | 116 days ago | 0 HYPE | |||||
| 15381239 | 116 days ago | 0 HYPE | |||||
| 15381103 | 116 days ago | 0 HYPE | |||||
| 15377991 | 116 days ago | 0 HYPE | |||||
| 15376606 | 116 days ago | 0 HYPE | |||||
| 15374937 | 116 days ago | 0 HYPE | |||||
| 15349360 | 117 days ago | 0 HYPE | |||||
| 15337519 | 117 days ago | 0 HYPE | |||||
| 15337519 | 117 days ago | 0.798 HYPE | |||||
| 15337519 | 117 days ago | 0.042 HYPE | |||||
| 15337519 | 117 days ago | 0 HYPE | |||||
| 15337519 | 117 days ago | 0 HYPE |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DystoMfersRafflesCoreV3
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at hyperevmscan.io on 2025-08-14
*/
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}
// File: @openzeppelin/contracts/security/Pausable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: @openzeppelin/contracts/utils/Errors.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of common custom errors used in multiple contracts
*
* IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
* It is recommended to avoid relying on the error API for critical functionality.
*
* _Available since v5.1._
*/
library Errors {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error InsufficientBalance(uint256 balance, uint256 needed);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedCall();
/**
* @dev The deployment failed.
*/
error FailedDeployment();
/**
* @dev A necessary precompile is missing.
*/
error MissingPrecompile(address);
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert Errors.InsufficientBalance(address(this).balance, amount);
}
(bool success, bytes memory returndata) = recipient.call{value: amount}("");
if (!success) {
_revert(returndata);
}
}
/**
* @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 or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {Errors.FailedCall} error.
*
* 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.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @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`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert Errors.InsufficientBalance(address(this).balance, value);
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case
* of an unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {Errors.FailedCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.
*/
function _revert(bytes memory returndata) private pure {
// 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 ("memory-safe") {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert Errors.FailedCall();
}
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @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);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* 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[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.20;
/**
* @dev Required interface of an ERC-721 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`.
*
* 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;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC-721 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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* 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 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 address zero.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @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);
}
// File: dystomfersrafflescore_v3.sol
/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IRaffleWinnerPicker {
function pickWinner(bytes32 raffleId) external view returns (address, uint256);
}
interface IDystoLocker {
function lockedBalanceOf(address user) external view returns (uint256);
function dysto_n_mfer(uint256 tokenId) external view returns (address);
function DYSTO_MFERS() external view returns (address);
}
contract DystoMfersRafflesCoreV3 is Ownable, ReentrancyGuard, Pausable {
using Address for address payable;
address public DYSTOMFERS_ADDR;
enum RaffleType { Token, NFT }
enum RaffleStatus { Pending, Filled, Finished, Cancelled }
struct RaffleStats {
uint256 ticketsSold;
uint256 soldAmount;
uint256 feeAmount;
address winner;
uint256 winnerTicket;
}
struct Raffle {
bytes32 id;
address creator;
RaffleType rType;
address prizeAddress;
uint256 prizeAmountOrId;
address ticketToken;
uint256 ticketPrice;
uint256 ticketCount;
uint256 endTimestamp;
RaffleStatus status;
address gateToken;
bool isBurningRaffle;
uint256 maxPerUser;
RaffleStats stats;
}
struct TicketPurchase {
address buyer;
uint256 amount;
uint256 timestamp;
uint256 gateTokenId;
}
struct Collection {
address cAddress;
string cName;
uint256 cRoyaltyFees;
address cRoyaltyAddress;
}
struct AllowedToken {
address tokenAddress;
string tokenTicker;
}
struct RaffleResult {
address winner;
uint256 randomTicket;
}
mapping(address => bool) public contractWhitelist;
modifier onlyEOAorWhitelisted() {
require(
msg.sender == tx.origin || contractWhitelist[msg.sender],
"Wallet or whitelisted contract needed"
);
_;
}
address[] public allowedCollections;
mapping(address => Collection) public allowedCollectionsMap;
address[] public allowedTokens;
mapping(address => AllowedToken) public allowedTokensMap;
uint256 public maxTickets = 250;
uint256 public maxDuration = 30 days;
uint256 public platformFee = 500; // 5% (base 10000)
address public feeCollector;
address public raffleWinnerPicker;
uint256 public constant DISCOUNT_PER_10 = 10; // -0.1% each 10 locked (500 locked dystomfers equals zero fees)
address public DYSTO_LOCKER = 0xA596BefD9ba9f12f5dc3B7fA857571cA00cbe0d2;
mapping(bytes32 => Raffle) public raffles;
mapping(address => bytes32[]) public rafflesByCreator;
mapping(bytes32 => address[]) public raffleBuyers;
mapping(bytes32 => mapping(address => uint256)) public ticketsByUser;
mapping(bytes32 => bool) public raffleWinnerPicked;
mapping(bytes32 => mapping(uint256 => bool)) public gateTokenConsumed;
mapping(bytes32 => TicketPurchase[]) public ticketHistory;
mapping(bytes32 => RaffleResult) public raffleResults;
bytes32[] public allRaffleIds;
event RaffleCreated(
bytes32 indexed id,
address indexed creator,
RaffleType rType,
address prizeAddress,
uint256 prizeAmountOrId,
address ticketToken,
uint256 ticketPrice,
uint256 ticketCount,
uint256 endTimestamp
);
event TicketPurchased(bytes32 indexed raffleId, address indexed buyer, uint256 amount, uint256 gateTokenId);
event RaffleCancelled(bytes32 indexed raffleId);
event RaffleFinished(bytes32 indexed raffleId, address winner);
event WinnerPicked(bytes32 indexed raffleId, address indexed winner, uint256 winnerTicket);
uint256 public totalRafflesFinished;
uint256 public totalTicketsSold;
mapping(address => uint256) public totalTicketsSoldByToken;
mapping(address => uint256) public totalFeesCollectedByToken;
mapping(address => uint256) public rafflesCreatedByUser;
mapping(address => uint256) public ticketsBoughtByUser;
mapping(address => uint256) public rafflesWonByUser;
//earning stats
mapping(address => mapping(address => uint256)) public creatorProfits;
mapping(address => mapping(address => uint256)) public winnerPrizes;
constructor(address _feeCollector) Ownable(msg.sender) {
feeCollector = _feeCollector;
}
function _toHex(uint256 value) internal pure returns (string memory) {
bytes16 hexSymbols = "0123456789abcdef";
bytes memory buffer = new bytes(10);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 0; i < 8; i++) {
buffer[9 - i] = hexSymbols[value & 0xf];
value >>= 4;
}
return string(buffer);
}
function pause() external onlyOwner {
_pause();
}
function unpause() external onlyOwner {
_unpause();
}
function setMaxTickets(uint256 _max) external onlyOwner {
require(_max > 0 && _max <= 1000, "Invalid max");
maxTickets = _max;
}
function setMaxDuration(uint256 _duration) external onlyOwner {
require(_duration > 0 && _duration <= 60 days, "Invalid duration");
maxDuration = _duration;
}
function setPlatformFee(uint256 _fee) external onlyOwner {
require(_fee <= 1000, "Fee too high");
platformFee = _fee;
}
function setFeeCollector(address _collector) external onlyOwner {
require(_collector != address(0), "Invalid address");
feeCollector = _collector;
}
function setDystoLocker(address _locker) external onlyOwner {
require(_locker != address(0), "Invalid address");
DYSTO_LOCKER = _locker;
DYSTOMFERS_ADDR = IDystoLocker(_locker).DYSTO_MFERS();
}
function recoverHYPE() external onlyOwner {
uint256 balance = address(this).balance;
require(balance > 0, "No HYPE");
Address.sendValue(payable(owner()), balance);
}
function recoverToken(address _token, address _to) external onlyOwner {
require(_token != address(0), "token address cannot be 0");
uint256 bal = IERC20(_token).balanceOf(address(this));
IERC20(_token).transfer(_to, bal);
}
function addToWhitelist(address _contract) external onlyOwner {
require(_contract.code.length > 0, "Not a contract");
contractWhitelist[_contract] = true;
}
function removeFromWhitelist(address _contract) external onlyOwner {
require(contractWhitelist[_contract], "Not in whitelist");
contractWhitelist[_contract] = false;
}
function recoverERC721(address token, uint256 tokenId, address to) external onlyOwner {
IERC721(token).transferFrom(address(this), to, tokenId);
}
function registerCollection(address _addr, string calldata _name, uint256 _royaltyFee, address _royaltyAddr) external onlyOwner {
require(_addr != address(0), "Invalid address");
require(_royaltyFee <= 1000, "Royalty too high");
if (allowedCollectionsMap[_addr].cAddress == address(0)) allowedCollections.push(_addr);
allowedCollectionsMap[_addr] = Collection(_addr, _name, _royaltyFee, _royaltyAddr);
}
function removeCollection(address _addr) external onlyOwner {
require(_addr != address(0), "Invalid address");
require(allowedCollectionsMap[_addr].cAddress != address(0), "Collection not registered");
delete allowedCollectionsMap[_addr];
uint256 len = allowedCollections.length;
for (uint256 i = 0; i < len; i++) {
if (allowedCollections[i] == _addr) {
allowedCollections[i] = allowedCollections[len - 1];
allowedCollections.pop();
break;
}
}
}
function registerAllowedToken(address _addr, string calldata _ticker) external onlyOwner {
require(_addr != address(0), "Invalid token");
require(bytes(_ticker).length > 0, "Ticker empty");
if (allowedTokensMap[_addr].tokenAddress == address(0)) allowedTokens.push(_addr);
allowedTokensMap[_addr] = AllowedToken(_addr, _ticker);
}
function removeAllowedToken(address _addr) external onlyOwner {
require(_addr != address(0), "Invalid token");
require(allowedTokensMap[_addr].tokenAddress != address(0), "Token not registered");
delete allowedTokensMap[_addr];
uint256 len = allowedTokens.length;
for (uint256 i = 0; i < len; i++) {
if (allowedTokens[i] == _addr) {
allowedTokens[i] = allowedTokens[len - 1];
allowedTokens.pop();
break;
}
}
}
function setraffleWinnerPicker(address _picker) external onlyOwner {
raffleWinnerPicker = _picker;
}
function _generateRaffleId(address creator, address prizeAddress, uint256 nonce) internal view returns (bytes32) {
return keccak256(abi.encodePacked(block.timestamp, creator, prizeAddress, nonce));
}
function createRaffle(
RaffleType rType,
address prizeAddress,
uint256 prizeAmountOrId,
address ticketToken,
uint256 ticketPrice,
uint256 ticketCount,
uint256 duration,
uint256 maxPerUser,
address gateToken,
bool isBurningRaffle
) external payable whenNotPaused returns (bytes32) {
if (ticketToken != address(0)) require(allowedTokensMap[ticketToken].tokenAddress != address(0), "Ticket Token not allowed");
require(ticketCount > 0 && ticketCount <= maxTickets, "Invalid ticket count");
require(duration <= maxDuration, "Duration too long");
require(ticketPrice > 0, "Ticket price required");
require(maxPerUser > 0 && maxPerUser <= ticketCount, "Invalid maxPerUser");
if (rType == RaffleType.Token) {
if (prizeAddress == address(0)) {
require(prizeAmountOrId > 0, "Invalid prize amount");
require(msg.value == prizeAmountOrId, "Exact native value required");
} else {
require(allowedTokensMap[prizeAddress].tokenAddress != address(0), "Token not allowed");
require(IERC20(prizeAddress).transferFrom(msg.sender, address(this), prizeAmountOrId), "Token transfer failed");
}
} else if (rType == RaffleType.NFT) {
require(allowedCollectionsMap[prizeAddress].cAddress != address(0), "Collection not allowed");
IERC721(prizeAddress).transferFrom(msg.sender, address(this), prizeAmountOrId);
} else {
revert("Invalid raffle type sent");
}
bytes32 id = _generateRaffleId(msg.sender, prizeAddress, ticketCount + block.number);
Raffle storage r = raffles[id];
r.id = id;
r.creator = msg.sender;
r.rType = rType;
r.prizeAddress = prizeAddress;
r.prizeAmountOrId = prizeAmountOrId;
r.ticketToken = ticketToken;
r.ticketPrice = ticketPrice;
r.ticketCount = ticketCount;
r.endTimestamp = block.timestamp + duration;
r.status = RaffleStatus.Pending;
r.gateToken = gateToken;
r.isBurningRaffle = isBurningRaffle;
r.maxPerUser = maxPerUser;
rafflesByCreator[msg.sender].push(id);
allRaffleIds.push(id);
rafflesCreatedByUser[msg.sender]++;
emit RaffleCreated(
id, msg.sender, rType, prizeAddress,
prizeAmountOrId, ticketToken, ticketPrice,
ticketCount, r.endTimestamp
);
return id;
}
function buyTicket(bytes32 raffleId, uint256 amount, uint256 gateTokenId) external payable nonReentrant whenNotPaused onlyEOAorWhitelisted {
require(amount > 0, "Invalid amount");
Raffle storage r = raffles[raffleId];
require(r.status == RaffleStatus.Pending, "Not available");
require(block.timestamp < r.endTimestamp, "Raffle ended");
require(msg.sender != r.creator, "Buying from creator not allowed");
if (r.gateToken != address(0)) {
bool isDystoMfers = (r.gateToken == DYSTOMFERS_ADDR);
bool ok;
if (isDystoMfers) {
bool ownsDirect = IERC721(r.gateToken).ownerOf(gateTokenId) == msg.sender;
bool ownsLocked = IDystoLocker(DYSTO_LOCKER).dysto_n_mfer(gateTokenId) == msg.sender;
ok = (ownsDirect || ownsLocked);
} else {
ok = (IERC721(r.gateToken).ownerOf(gateTokenId) == msg.sender);
}
require(ok, "Not owner of exclusive tokenId");
require(!gateTokenConsumed[raffleId][gateTokenId], "Exclusive token already used!");
} else {
require(gateTokenId == 0, "gateTokenId not expected");
}
uint256 remaining = r.ticketCount - r.stats.ticketsSold;
require(amount <= remaining, "Not enough tickets left");
uint256 alreadyBought = ticketsByUser[raffleId][msg.sender];
require(alreadyBought + amount <= r.maxPerUser, "Exceeds per-user limit");
uint256 total = r.ticketPrice * amount;
if (r.ticketToken == address(0)) {
require(msg.value == total, "Incorrect HYPE amount");
} else {
require(IERC20(r.ticketToken).transferFrom(msg.sender, address(this), total), "Payment failed");
}
if (alreadyBought == 0) {
raffleBuyers[raffleId].push(msg.sender);
}
ticketsByUser[raffleId][msg.sender] += amount;
r.stats.ticketsSold += amount;
r.stats.soldAmount += total;
ticketHistory[raffleId].push(TicketPurchase({
buyer: msg.sender,
amount: amount,
timestamp: block.timestamp,
gateTokenId: gateTokenId
}));
ticketsBoughtByUser[msg.sender] += amount;
totalTicketsSold += amount;
if (r.gateToken != address(0)) {
gateTokenConsumed[raffleId][gateTokenId] = true;
}
emit TicketPurchased(raffleId, msg.sender, amount, gateTokenId);
if (r.stats.ticketsSold == r.ticketCount) {
r.status = RaffleStatus.Filled;
}
}
function finishRaffle(bytes32 raffleId) external nonReentrant whenNotPaused onlyEOAorWhitelisted {
Raffle storage r = raffles[raffleId];
require(r.status == RaffleStatus.Filled, "Raffle must be filled to finish");
require(raffleWinnerPicker != address(0), "Raffle winner picker not configured");
require(feeCollector != address(0), "Fee collector address not set");
require(!raffleWinnerPicked[raffleId], "Winner already picked for this raffle");
address winner;
uint256 randTicket;
// PICK WINNER
try IRaffleWinnerPicker(raffleWinnerPicker).pickWinner(raffleId) returns (address w, uint256 rt) {
require(w != address(0), "Winner is zero address");
winner = w;
randTicket = rt;
} catch Error(string memory reason) {
revert(string(abi.encodePacked("Picker Error (reason): ", reason)));
} catch Panic(uint256 errorCode) {
revert(string(abi.encodePacked("Picker Panic: code ", _toHex(errorCode))));
} catch {
revert("Picker Error: unknown failure");
}
raffleWinnerPicked[raffleId] = true;
raffleResults[raffleId] = RaffleResult({
winner: winner,
randomTicket: randTicket
});
r.status = RaffleStatus.Finished;
r.stats.winner = winner;
r.stats.winnerTicket = randTicket;
emit WinnerPicked(raffleId, winner, randTicket);
// fees
uint256 locked = IDystoLocker(DYSTO_LOCKER).lockedBalanceOf(r.creator);
uint256 discount = (locked / 10) * DISCOUNT_PER_10;
uint256 bps = platformFee > discount ? platformFee - discount : 0;
uint256 fee = (r.stats.soldAmount * bps) / 10000;
uint256 creatorShare = r.stats.soldAmount - fee;
r.stats.feeAmount = fee;
// Payout to creator / burn addy and royalties.
address payoutRecipient = r.isBurningRaffle ? address(0x000000000000000000000000000000000000dEaD) : r.creator;
if (r.ticketToken == address(0)) {
// Payout in native Hype
(bool sentFee, ) = payable(feeCollector).call{value: fee}("");
require(sentFee, "Native fee transfer failed");
(bool sentCreator, ) = payable(payoutRecipient).call{value: creatorShare}("");
require(sentCreator, "Native payout to creator failed");
} else {
// Payout in ERC20
require(IERC20(r.ticketToken).transfer(feeCollector, fee), "ERC20 fee transfer failed");
require(IERC20(r.ticketToken).transfer(payoutRecipient, creatorShare), "ERC20 payout to creator failed");
}
// Prize transfer
if (r.rType == RaffleType.Token) {
if (r.prizeAddress == address(0)) {
// Native
(bool success, ) = payable(winner).call{value: r.prizeAmountOrId}("");
require(success, "Native transfer to winner failed");
} else {
require(IERC20(r.prizeAddress).transfer(winner, r.prizeAmountOrId), "ERC20 prize transfer failed");
}
winnerPrizes[winner][r.prizeAddress] += r.prizeAmountOrId;
} else if (r.rType == RaffleType.NFT) {
IERC721(r.prizeAddress).transferFrom(address(this), winner, r.prizeAmountOrId);
winnerPrizes[winner][r.prizeAddress] += 1;
}
// stats
totalRafflesFinished++;
totalTicketsSold += r.stats.ticketsSold;
totalTicketsSoldByToken[r.ticketToken] += r.stats.ticketsSold;
totalFeesCollectedByToken[r.ticketToken] += fee;
rafflesWonByUser[winner]++;
creatorProfits[payoutRecipient][r.ticketToken] += creatorShare;
emit RaffleFinished(raffleId, winner);
}
function forceFinishRaffle(bytes32 raffleId) external nonReentrant whenNotPaused onlyEOAorWhitelisted {
Raffle storage r = raffles[raffleId];
require(msg.sender == r.creator, "Not creator");
require(r.status == RaffleStatus.Pending, "Invalid status");
require(r.stats.ticketsSold > 0, "No tickets sold");
require(raffleWinnerPicker != address(0), "Picker not set");
require(feeCollector != address(0), "Fee collector not set");
require(!raffleWinnerPicked[raffleId], "Winner already picked");
address winner;
uint256 randTicket;
// PICK WINNER
try IRaffleWinnerPicker(raffleWinnerPicker).pickWinner(raffleId) returns (address w, uint256 rt) {
require(w != address(0), "Winner is zero address");
winner = w;
randTicket = rt;
} catch Error(string memory reason) {
revert(string(abi.encodePacked("Picker Error (reason): ", reason)));
} catch Panic(uint256 errorCode) {
revert(string(abi.encodePacked("Picker Panic: code ", _toHex(errorCode))));
} catch {
revert("Picker Error: unknown failure");
}
raffleWinnerPicked[raffleId] = true;
raffleResults[raffleId] = RaffleResult({
winner: winner,
randomTicket: randTicket
});
r.status = RaffleStatus.Finished;
r.stats.winner = winner;
r.stats.winnerTicket = randTicket;
emit WinnerPicked(raffleId, winner, randTicket);
// fees
uint256 locked = IDystoLocker(DYSTO_LOCKER).lockedBalanceOf(r.creator);
uint256 discount = (locked / 10) * DISCOUNT_PER_10;
uint256 bps = platformFee > discount ? platformFee - discount : 0;
uint256 fee = (r.stats.soldAmount * bps) / 10000;
uint256 creatorShare = r.stats.soldAmount - fee;
r.stats.feeAmount = fee;
// Payout to creator / burn addy and royalties.
address payoutRecipient = r.isBurningRaffle ? address(0x000000000000000000000000000000000000dEaD) : r.creator;
if (r.ticketToken == address(0)) {
// Payout in native Native
(bool sentFee, ) = payable(feeCollector).call{value: fee}("");
require(sentFee, "Native fee transfer failed");
(bool sentCreator, ) = payable(payoutRecipient).call{value: creatorShare}("");
require(sentCreator, "Native payout to creator failed");
} else {
// Payout in ERC20
require(IERC20(r.ticketToken).transfer(feeCollector, fee), "ERC20 fee transfer failed");
require(IERC20(r.ticketToken).transfer(payoutRecipient, creatorShare), "ERC20 payout to creator failed");
}
// Prize transfer
if (r.rType == RaffleType.Token) {
if (r.prizeAddress == address(0)) {
// Native
(bool success, ) = payable(winner).call{value: r.prizeAmountOrId}("");
require(success, "Native transfer to winner failed");
} else {
require(IERC20(r.prizeAddress).transfer(winner, r.prizeAmountOrId), "ERC20 prize transfer failed");
}
winnerPrizes[winner][r.prizeAddress] += r.prizeAmountOrId;
} else if (r.rType == RaffleType.NFT) {
IERC721(r.prizeAddress).transferFrom(address(this), winner, r.prizeAmountOrId);
winnerPrizes[winner][r.prizeAddress] += 1;
}
// stats
totalRafflesFinished++;
totalTicketsSold += r.stats.ticketsSold;
totalTicketsSoldByToken[r.ticketToken] += r.stats.ticketsSold;
totalFeesCollectedByToken[r.ticketToken] += fee;
rafflesWonByUser[winner]++;
creatorProfits[payoutRecipient][r.ticketToken] += creatorShare;
emit RaffleFinished(raffleId, winner);
}
function expireAndCancelRaffle(bytes32 raffleId) external nonReentrant whenNotPaused {
Raffle storage r = raffles[raffleId];
require(msg.sender == r.creator || msg.sender == owner(), "Not authorized");
require(r.status == RaffleStatus.Pending, "Invalid status");
if (r.stats.ticketsSold > 0) {
require(block.timestamp >= r.endTimestamp, "Raffle still active");
}
r.status = RaffleStatus.Cancelled;
if (r.stats.ticketsSold > 0) {
address[] memory buyers = raffleBuyers[raffleId];
for (uint256 i = 0; i < buyers.length; i++) {
address buyer = buyers[i];
uint256 qty = ticketsByUser[raffleId][buyer];
if (qty > 0) {
uint256 refund = qty * r.ticketPrice;
if (r.ticketToken == address(0)) {
payable(buyer).sendValue(refund);
} else {
IERC20(r.ticketToken).transfer(buyer, refund);
}
}
}
}
if (r.rType == RaffleType.Token) {
if (r.prizeAddress == address(0)) {
payable(r.creator).sendValue(r.prizeAmountOrId);
} else {
IERC20(r.prizeAddress).transfer(r.creator, r.prizeAmountOrId);
}
} else if (r.rType == RaffleType.NFT) {
IERC721(r.prizeAddress).transferFrom(address(this), r.creator, r.prizeAmountOrId);
}
emit RaffleCancelled(raffleId);
}
function getTicketHistory(bytes32 id) external view returns (TicketPurchase[] memory) {
return ticketHistory[id];
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_feeCollector","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"}],"name":"RaffleCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"enum DystoMfersRafflesCoreV3.RaffleType","name":"rType","type":"uint8"},{"indexed":false,"internalType":"address","name":"prizeAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"prizeAmountOrId","type":"uint256"},{"indexed":false,"internalType":"address","name":"ticketToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"ticketPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ticketCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTimestamp","type":"uint256"}],"name":"RaffleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"winner","type":"address"}],"name":"RaffleFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gateTokenId","type":"uint256"}],"name":"TicketPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"winnerTicket","type":"uint256"}],"name":"WinnerPicked","type":"event"},{"inputs":[],"name":"DISCOUNT_PER_10","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYSTOMFERS_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYSTO_LOCKER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allRaffleIds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedCollections","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedCollectionsMap","outputs":[{"internalType":"address","name":"cAddress","type":"address"},{"internalType":"string","name":"cName","type":"string"},{"internalType":"uint256","name":"cRoyaltyFees","type":"uint256"},{"internalType":"address","name":"cRoyaltyAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedTokensMap","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"tokenTicker","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"gateTokenId","type":"uint256"}],"name":"buyTicket","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contractWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum DystoMfersRafflesCoreV3.RaffleType","name":"rType","type":"uint8"},{"internalType":"address","name":"prizeAddress","type":"address"},{"internalType":"uint256","name":"prizeAmountOrId","type":"uint256"},{"internalType":"address","name":"ticketToken","type":"address"},{"internalType":"uint256","name":"ticketPrice","type":"uint256"},{"internalType":"uint256","name":"ticketCount","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"maxPerUser","type":"uint256"},{"internalType":"address","name":"gateToken","type":"address"},{"internalType":"bool","name":"isBurningRaffle","type":"bool"}],"name":"createRaffle","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"creatorProfits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"raffleId","type":"bytes32"}],"name":"expireAndCancelRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"raffleId","type":"bytes32"}],"name":"finishRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"raffleId","type":"bytes32"}],"name":"forceFinishRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"gateTokenConsumed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getTicketHistory","outputs":[{"components":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"gateTokenId","type":"uint256"}],"internalType":"struct DystoMfersRafflesCoreV3.TicketPurchase[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"raffleBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"raffleResults","outputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"randomTicket","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"raffleWinnerPicked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleWinnerPicker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"raffles","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"enum DystoMfersRafflesCoreV3.RaffleType","name":"rType","type":"uint8"},{"internalType":"address","name":"prizeAddress","type":"address"},{"internalType":"uint256","name":"prizeAmountOrId","type":"uint256"},{"internalType":"address","name":"ticketToken","type":"address"},{"internalType":"uint256","name":"ticketPrice","type":"uint256"},{"internalType":"uint256","name":"ticketCount","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"enum DystoMfersRafflesCoreV3.RaffleStatus","name":"status","type":"uint8"},{"internalType":"address","name":"gateToken","type":"address"},{"internalType":"bool","name":"isBurningRaffle","type":"bool"},{"internalType":"uint256","name":"maxPerUser","type":"uint256"},{"components":[{"internalType":"uint256","name":"ticketsSold","type":"uint256"},{"internalType":"uint256","name":"soldAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"winnerTicket","type":"uint256"}],"internalType":"struct DystoMfersRafflesCoreV3.RaffleStats","name":"stats","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rafflesByCreator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rafflesCreatedByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rafflesWonByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverHYPE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"string","name":"_ticker","type":"string"}],"name":"registerAllowedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_royaltyFee","type":"uint256"},{"internalType":"address","name":"_royaltyAddr","type":"address"}],"name":"registerCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeAllowedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_locker","type":"address"}],"name":"setDystoLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setMaxDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setPlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_picker","type":"address"}],"name":"setraffleWinnerPicker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ticketHistory","outputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"gateTokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ticketsBoughtByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"ticketsByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalFeesCollectedByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRafflesFinished","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTicketsSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalTicketsSoldByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"winnerPrizes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405260fa60085562278d006009556101f4600a55600d80546001600160a01b03191673a596befd9ba9f12f5dc3b7fa857571ca00cbe0d2179055348015610047575f5ffd5b50604051614d45380380614d4583398101604081905261006691610117565b338061008b57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610094816100c8565b50600180556002805460ff19169055600b80546001600160a01b0319166001600160a01b0392909216919091179055610144565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610127575f5ffd5b81516001600160a01b038116811461013d575f5ffd5b9392505050565b614bf4806101515f395ff3fe608060405260043610610371575f3560e01c80638638395c116101c8578063c3477824116100fd578063e31ef12c1161009d578063ee45ab241161006d578063ee45ab2414610be3578063f0e9fcd114610bf7578063f2fde38b14610c16578063feaea58614610c35575f5ffd5b8063e31ef12c14610a8f578063e43252d714610b85578063e86ab4cb14610ba4578063ec4770c114610bd0575f5ffd5b8063cf0f34c4116100d8578063cf0f34c4146109f0578063d143d78414610a0f578063d340fd0314610a3a578063d62cd77614610a70575f5ffd5b8063c34778241461096d578063c415b95c14610998578063c6e63e5e146109b7575f5ffd5b80639ea6b4b911610168578063b5cd87bf11610143578063b5cd87bf146108e5578063b99d6aae14610904578063b9b9da1114610923578063c21892901461094e575f5ffd5b80639ea6b4b91461089e578063a42dce80146108b3578063b35d5d7a146108d2575f5ffd5b806390469a9d116101a357806390469a9d1461082c578063936f3d781461084b578063983694b11461086a5780639b89470314610889575f5ffd5b80638638395c146107dd5780638ab1d681146107f15780638da5cb5b14610810575f5ffd5b80634ca38d4a116102a957806369bcd79d1161024957806376006c071161021957806376006c071461072b57806376ff4401146107615780637dd97bef146107aa5780638456cb59146107c9575f5ffd5b806369bcd79d146106aa5780636b71537a146106d55780636db5c8fd14610702578063715018a614610717575f5ffd5b806356264d6c1161028457806356264d6c146106365780635c975abb146106555780635e5f2e261461066c57806366cbace41461068b575f5ffd5b80634ca38d4a146105d45780634e13630b146105f35780635028d05a14610617575f5ffd5b80633e4787d9116103145780633f9ca776116102ef5780633f9ca776146104fb578063411ef03b1461055857806349391898146105875780634c999f5e146105a6575f5ffd5b80633e4787d91461049d5780633f4ba83a146104bc5780633f81a7d6146104d0575f5ffd5b80631abd67261161034f5780631abd67261461041d57806326232a2e1461045457806331e69bec1461046957806334701db814610488575f5ffd5b80630403e0601461037557806312e8e2c3146103b8578063193d2417146103d9575b5f5ffd5b348015610380575f5ffd5b506103a361038f3660046141e1565b60126020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103c3575f5ffd5b506103d76103d23660046141e1565b610c54565b005b3480156103e4575f5ffd5b5061040f6103f336600461420c565b601160209081525f928352604080842090915290825290205481565b6040519081526020016103af565b348015610428575f5ffd5b50600c5461043c906001600160a01b031681565b6040516001600160a01b0390911681526020016103af565b34801561045f575f5ffd5b5061040f600a5481565b348015610474575f5ffd5b5061040f6104833660046141e1565b610ca7565b348015610493575f5ffd5b5061040f60185481565b3480156104a8575f5ffd5b506103d76104b73660046141e1565b610cc6565b3480156104c7575f5ffd5b506103d761190d565b3480156104db575f5ffd5b5061040f6104ea36600461423a565b601a6020525f908152604090205481565b348015610506575f5ffd5b506105396105153660046141e1565b60156020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016103af565b348015610563575f5ffd5b5061057761057236600461423a565b61191f565b6040516103af949392919061428a565b348015610592575f5ffd5b5061040f6105a13660046142ce565b6119e1565b3480156105b1575f5ffd5b506103a36105c036600461423a565b60036020525f908152604090205460ff1681565b3480156105df575f5ffd5b5061043c6105ee3660046141e1565b611a0c565b3480156105fe575f5ffd5b5060025461043c9061010090046001600160a01b031681565b348015610622575f5ffd5b506103d761063136600461423a565b611a34565b348015610641575f5ffd5b506103d76106503660046141e1565b611c10565b348015610660575f5ffd5b5060025460ff166103a3565b348015610677575f5ffd5b5061043c6106863660046141e1565b611c68565b348015610696575f5ffd5b506103d76106a53660046141e1565b611c77565b3480156106b5575f5ffd5b5061040f6106c436600461423a565b60196020525f908152604090205481565b3480156106e0575f5ffd5b506106f46106ef36600461423a565b611ea0565b6040516103af9291906142f8565b34801561070d575f5ffd5b5061040f60095481565b348015610722575f5ffd5b506103d7611f4c565b348015610736575f5ffd5b5061040f610745366004614323565b601f60209081525f928352604080842090915290825290205481565b34801561076c575f5ffd5b5061078061077b36600461434f565b611f5d565b604080516001600160a01b03909516855260208501939093529183015260608201526080016103af565b3480156107b5575f5ffd5b5061043c6107c436600461434f565b611fa9565b3480156107d4575f5ffd5b506103d7611fdd565b3480156107e8575f5ffd5b506103d7611fed565b3480156107fc575f5ffd5b506103d761080b36600461423a565b612047565b34801561081b575f5ffd5b505f546001600160a01b031661043c565b348015610837575f5ffd5b506103d761084636600461423a565b6120c9565b348015610856575f5ffd5b506103d76108653660046143b4565b612278565b348015610875575f5ffd5b506103d761088436600461423a565b61242d565b348015610894575f5ffd5b5061040f60085481565b3480156108a9575f5ffd5b5061040f60175481565b3480156108be575f5ffd5b506103d76108cd36600461423a565b612457565b6103d76108e0366004614423565b6124a7565b3480156108f0575f5ffd5b506103d76108ff3660046141e1565b612cf8565b34801561090f575f5ffd5b506103d761091e36600461444c565b613167565b34801561092e575f5ffd5b5061040f61093d36600461423a565b601d6020525f908152604090205481565b348015610959575f5ffd5b50600d5461043c906001600160a01b031681565b348015610978575f5ffd5b5061040f61098736600461423a565b601b6020525f908152604090205481565b3480156109a3575f5ffd5b50600b5461043c906001600160a01b031681565b3480156109c2575f5ffd5b506103a36109d136600461434f565b601360209081525f928352604080842090915290825290205460ff1681565b3480156109fb575f5ffd5b506103d7610a0a3660046141e1565b6132f8565b348015610a1a575f5ffd5b5061040f610a2936600461423a565b601c6020525f908152604090205481565b348015610a45575f5ffd5b5061040f610a54366004614323565b601e60209081525f928352604080842090915290825290205481565b348015610a7b575f5ffd5b506103d7610a8a36600461423a565b613356565b348015610a9a575f5ffd5b50610b6b610aa93660046141e1565b600e60208181525f92835260409283902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a01548d5160a081018f52600a8c01548152600b8c01549c81019c909c52600c8b01549d8c019d909d52600d8a01546001600160a01b0390811660608d015299909b015460808b0152969a8887169a60ff600160a01b90980488169a968a16999598948616979396929581851694610100830490911693600160a81b9092041691908e565b6040516103af9e9d9c9b9a999897969594939291906144d5565b348015610b90575f5ffd5b506103d7610b9f36600461423a565b613428565b348015610baf575f5ffd5b50610bc3610bbe3660046141e1565b61349d565b6040516103af91906145a9565b61040f610bde366004614624565b613536565b348015610bee575f5ffd5b5061040f600a81565b348015610c02575f5ffd5b506103d7610c113660046146c4565b613c0c565b348015610c21575f5ffd5b506103d7610c3036600461423a565b613c76565b348015610c40575f5ffd5b506103d7610c4f366004614323565b613cb0565b610c5c613df0565b6103e8811115610ca25760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064015b60405180910390fd5b600a55565b60168181548110610cb6575f80fd5b5f91825260209091200154905081565b610cce613e1c565b610cd6613e75565b33321480610cf25750335f9081526003602052604090205460ff165b610d0e5760405162461bcd60e51b8152600401610c9990614703565b5f818152600e602052604090206001600882015460ff166003811115610d3657610d3661449d565b14610d835760405162461bcd60e51b815260206004820152601f60248201527f526166666c65206d7573742062652066696c6c656420746f2066696e697368006044820152606401610c99565b600c546001600160a01b0316610de75760405162461bcd60e51b815260206004820152602360248201527f526166666c652077696e6e6572207069636b6572206e6f7420636f6e666967756044820152621c995960ea1b6064820152608401610c99565b600b546001600160a01b0316610e3f5760405162461bcd60e51b815260206004820152601d60248201527f46656520636f6c6c6563746f722061646472657373206e6f74207365740000006044820152606401610c99565b5f8281526012602052604090205460ff1615610eab5760405162461bcd60e51b815260206004820152602560248201527f57696e6e657220616c7265616479207069636b656420666f72207468697320726044820152646166666c6560d81b6064820152608401610c99565b600c546040516316fe155560e31b8152600481018490525f9182916001600160a01b039091169063b7f0aaa8906024016040805180830381865afa925050508015610f13575060408051601f3d908101601f19168201909252610f1091810190614748565b60015b610ff357610f1f614774565b806308c379a003610f755750610f336147ce565b80610f3e5750610fab565b80604051602001610f4f9190614861565b60408051601f198184030181529082905262461bcd60e51b8252610c9991600401614892565b634e487b7103610fab57610f876148a4565b90610f925750610fab565b610f9b81613ebb565b604051602001610f4f91906148c1565b60405162461bcd60e51b815260206004820152601d60248201527f5069636b6572204572726f723a20756e6b6e6f776e206661696c7572650000006044820152606401610c99565b6001600160a01b0382166110425760405162461bcd60e51b815260206004820152601660248201527557696e6e6572206973207a65726f206164647265737360501b6044820152606401610c99565b5f868152601260209081526040808320805460ff199081166001908117909255825180840184526001600160a01b038881168083528287018981528e895260158852978690209251835492166001600160a01b03199283161783559651919093015560088a0180549091166002179055600d8901805490911684179055600e8801849055518381529395509193509186917fc1ff24a495d58cd405efb9c0782d4630105d6c9aeb10b1ca1f1ac1076e1605b3910160405180910390a3600d546001840154604051632c9aab9b60e11b81526001600160a01b0391821660048201525f929190911690635935573690602401602060405180830381865afa15801561114e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117291906148e8565b90505f600a6111818184614913565b61118b9190614932565b90505f81600a541161119d575f6111ab565b81600a546111ab919061494f565b90505f6127108288600a01600101546111c49190614932565b6111ce9190614913565b90505f8188600a01600101546111e4919061494f565b600c890183905560088901549091505f90600160a81b900460ff166112165760018901546001600160a01b031661121a565b61dead5b60048a01549091506001600160a01b031661137557600b546040515f916001600160a01b03169085908381818185875af1925050503d805f8114611279576040519150601f19603f3d011682016040523d82523d5f602084013e61127e565b606091505b50509050806112cf5760405162461bcd60e51b815260206004820152601a60248201527f4e617469766520666565207472616e73666572206661696c65640000000000006044820152606401610c99565b5f826001600160a01b0316846040515f6040518083038185875af1925050503d805f8114611318576040519150601f19603f3d011682016040523d82523d5f602084013e61131d565b606091505b505090508061136e5760405162461bcd60e51b815260206004820152601f60248201527f4e6174697665207061796f757420746f2063726561746f72206661696c6564006044820152606401610c99565b50506114ff565b600489810154600b5460405163a9059cbb60e01b81526001600160a01b039182169381019390935260248301869052169063a9059cbb906044016020604051808303815f875af11580156113cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ef9190614962565b61143b5760405162461bcd60e51b815260206004820152601960248201527f455243323020666565207472616e73666572206661696c6564000000000000006044820152606401610c99565b60048981015460405163a9059cbb60e01b81526001600160a01b03848116938201939093526024810185905291169063a9059cbb906044016020604051808303815f875af115801561148f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b39190614962565b6114ff5760405162461bcd60e51b815260206004820152601e60248201527f4552433230207061796f757420746f2063726561746f72206661696c656400006044820152606401610c99565b5f60018a810154600160a01b900460ff16908111156115205761152061449d565b036116f05760028901546001600160a01b03166115de5760038901546040515f916001600160a01b038b16918381818185875af1925050503d805f8114611582576040519150601f19603f3d011682016040523d82523d5f602084013e611587565b606091505b50509050806115d85760405162461bcd60e51b815260206004820181905260248201527f4e6174697665207472616e7366657220746f2077696e6e6572206661696c65646044820152606401610c99565b506116a5565b600289015460038a015460405163a9059cbb60e01b81526001600160a01b038b81166004830152602482019290925291169063a9059cbb906044016020604051808303815f875af1158015611635573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116599190614962565b6116a55760405162461bcd60e51b815260206004820152601b60248201527f4552433230207072697a65207472616e73666572206661696c656400000000006044820152606401610c99565b60038901546001600160a01b03808a165f908152601f6020908152604080832060028f0154909416835292905290812080549091906116e590849061497d565b909155506117be9050565b6001808a810154600160a01b900460ff16908111156117115761171161449d565b036117be57600289015460038a01546040516323b872dd60e01b81526001600160a01b03909216916323b872dd9161174f9130918d91600401614990565b5f604051808303815f87803b158015611766575f5ffd5b505af1158015611778573d5f5f3e3d5ffd5b505050506001600160a01b038881165f908152601f6020908152604080832060028e015490941683529290529081208054600192906117b890849061497d565b90915550505b60178054905f6117cd836149b4565b9091555050600a890154601880545f906117e890849061497d565b9091555050600a89015460048a01546001600160a01b03165f908152601960205260408120805490919061181d90849061497d565b909155505060048901546001600160a01b03165f908152601a60205260408120805485929061184d90849061497d565b90915550506001600160a01b0388165f908152601d60205260408120805491611875836149b4565b90915550506001600160a01b038082165f908152601e6020908152604080832060048e0154909416835292905290812080548492906118b590849061497d565b90915550506040516001600160a01b03891681528a907f4c9429828b8a8a57ced9bd94f8941b01b0647e84414d1004fca57ded1a0c7fbe9060200160405180910390a250505050505050505061190a60018055565b50565b611915613df0565b61191d613fbb565b565b60056020525f9081526040902080546001820180546001600160a01b03909216929161194a906149cc565b80601f0160208091040260200160405190810160405280929190818152602001828054611976906149cc565b80156119c15780601f10611998576101008083540402835291602001916119c1565b820191905f5260205f20905b8154815290600101906020018083116119a457829003601f168201915b5050505060028301546003909301549192916001600160a01b0316905084565b600f602052815f5260405f2081815481106119fa575f80fd5b905f5260205f20015f91509150505481565b60048181548110611a1b575f80fd5b5f918252602090912001546001600160a01b0316905081565b611a3c613df0565b6001600160a01b038116611a625760405162461bcd60e51b8152600401610c9990614a04565b6001600160a01b038181165f9081526005602052604090205416611ac85760405162461bcd60e51b815260206004820152601960248201527f436f6c6c656374696f6e206e6f742072656769737465726564000000000000006044820152606401610c99565b6001600160a01b0381165f90815260056020526040812080546001600160a01b031916815590611afb6001830182614197565b505f60028201819055600390910180546001600160a01b0319169055600454905b81811015611c0b57826001600160a01b031660048281548110611b4157611b41614a2d565b5f918252602090912001546001600160a01b031603611c03576004611b6760018461494f565b81548110611b7757611b77614a2d565b5f91825260209091200154600480546001600160a01b039092169183908110611ba257611ba2614a2d565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506004805480611bde57611bde614a41565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b600101611b1c565b505050565b611c18613df0565b5f81118015611c2957506103e88111155b611c635760405162461bcd60e51b815260206004820152600b60248201526a092dcecc2d8d2c840dac2f60ab1b6044820152606401610c99565b600855565b60068181548110611a1b575f80fd5b611c7f613e1c565b611c87613e75565b33321480611ca35750335f9081526003602052604090205460ff165b611cbf5760405162461bcd60e51b8152600401610c9990614703565b5f818152600e6020526040902060018101546001600160a01b03163314611d165760405162461bcd60e51b815260206004820152600b60248201526a2737ba1031b932b0ba37b960a91b6044820152606401610c99565b5f600882015460ff166003811115611d3057611d3061449d565b14611d6e5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073746174757360901b6044820152606401610c99565b600a810154611db15760405162461bcd60e51b815260206004820152600f60248201526e139bc81d1a58dad95d1cc81cdbdb19608a1b6044820152606401610c99565b600c546001600160a01b0316611dfa5760405162461bcd60e51b815260206004820152600e60248201526d141a58dad95c881b9bdd081cd95d60921b6044820152606401610c99565b600b546001600160a01b0316611e4a5760405162461bcd60e51b81526020600482015260156024820152741199594818dbdb1b1958dd1bdc881b9bdd081cd95d605a1b6044820152606401610c99565b5f8281526012602052604090205460ff1615610eab5760405162461bcd60e51b815260206004820152601560248201527415da5b9b995c88185b1c9958591e481c1a58dad959605a1b6044820152606401610c99565b60076020525f9081526040902080546001820180546001600160a01b039092169291611ecb906149cc565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef7906149cc565b8015611f425780601f10611f1957610100808354040283529160200191611f42565b820191905f5260205f20905b815481529060010190602001808311611f2557829003601f168201915b5050505050905082565b611f54613df0565b61191d5f61400d565b6014602052815f5260405f208181548110611f76575f80fd5b5f91825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925084565b6010602052815f5260405f208181548110611fc2575f80fd5b5f918252602090912001546001600160a01b03169150829050565b611fe5613df0565b61191d61405c565b611ff5613df0565b478061202d5760405162461bcd60e51b81526020600482015260076024820152664e6f204859504560c81b6044820152606401610c99565b61190a6120415f546001600160a01b031690565b82614099565b61204f613df0565b6001600160a01b0381165f9081526003602052604090205460ff166120a95760405162461bcd60e51b815260206004820152601060248201526f139bdd081a5b881dda1a5d195b1a5cdd60821b6044820152606401610c99565b6001600160a01b03165f908152600360205260409020805460ff19169055565b6120d1613df0565b6001600160a01b0381166121175760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610c99565b6001600160a01b038181165f90815260076020526040902054166121745760405162461bcd60e51b8152602060048201526014602482015273151bdad95b881b9bdd081c9959da5cdd195c995960621b6044820152606401610c99565b6001600160a01b0381165f90815260076020526040812080546001600160a01b0319168155906121a76001830182614197565b50506006545f5b81811015611c0b57826001600160a01b0316600682815481106121d3576121d3614a2d565b5f918252602090912001546001600160a01b0316036122705760066121f960018461494f565b8154811061220957612209614a2d565b5f91825260209091200154600680546001600160a01b03909216918390811061223457612234614a2d565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480611bde57611bde614a41565b6001016121ae565b612280613df0565b6001600160a01b0385166122a65760405162461bcd60e51b8152600401610c9990614a04565b6103e88211156122eb5760405162461bcd60e51b815260206004820152601060248201526f0a4def2c2d8e8f240e8dede40d0d2ced60831b6044820152606401610c99565b6001600160a01b038581165f908152600560205260409020541661235457600480546001810182555f919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0387161790555b6040518060800160405280866001600160a01b0316815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250505060208083018690526001600160a01b0385811660409485015289811683526005825292909120835181546001600160a01b031916931692909217825582015160018201906123f39082614aa0565b5060408201516002820155606090910151600390910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b612435613df0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b61245f613df0565b6001600160a01b0381166124855760405162461bcd60e51b8152600401610c9990614a04565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6124af613e1c565b6124b7613e75565b333214806124d35750335f9081526003602052604090205460ff165b6124ef5760405162461bcd60e51b8152600401610c9990614703565b5f821161252f5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610c99565b5f838152600e6020526040812090600882015460ff1660038111156125565761255661449d565b146125935760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420617661696c61626c6560981b6044820152606401610c99565b806007015442106125d55760405162461bcd60e51b815260206004820152600c60248201526b149859999b1948195b99195960a21b6044820152606401610c99565b60018101546001600160a01b031633036126315760405162461bcd60e51b815260206004820152601f60248201527f427579696e672066726f6d2063726561746f72206e6f7420616c6c6f776564006044820152606401610c99565b600881015461010090046001600160a01b0316156128bf576002546008820154610100918290046001600160a01b039081169290910416145f81156127835760088301546040516331a9108f60e11b81525f9133916101009091046001600160a01b031690636352211e906126ae90899060040190815260200190565b602060405180830381865afa1580156126c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ed9190614b5b565b600d54604051637fecfbc360e01b8152600481018990526001600160a01b039283169390931493505f92339290911690637fecfbc390602401602060405180830381865afa158015612741573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127659190614b5b565b6001600160a01b0316149050818061277a5750805b92505050612802565b60088301546040516331a9108f60e11b815260048101869052339161010090046001600160a01b031690636352211e90602401602060405180830381865afa1580156127d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f59190614b5b565b6001600160a01b03161490505b8061284f5760405162461bcd60e51b815260206004820152601e60248201527f4e6f74206f776e6572206f66206578636c757369766520746f6b656e496400006044820152606401610c99565b5f86815260136020908152604080832087845290915290205460ff16156128b85760405162461bcd60e51b815260206004820152601d60248201527f4578636c757369766520746f6b656e20616c72656164792075736564210000006044820152606401610c99565b505061290d565b811561290d5760405162461bcd60e51b815260206004820152601860248201527f67617465546f6b656e4964206e6f7420657870656374656400000000000000006044820152606401610c99565b600a81015460068201545f916129229161494f565b9050808411156129745760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768207469636b657473206c6566740000000000000000006044820152606401610c99565b5f858152601160209081526040808320338452909152902054600983015461299c868361497d565b11156129e35760405162461bcd60e51b8152602060048201526016602482015275115e18d959591cc81c195c8b5d5cd95c881b1a5b5a5d60521b6044820152606401610c99565b5f8584600501546129f49190614932565b60048501549091506001600160a01b0316612a5557803414612a505760405162461bcd60e51b8152602060048201526015602482015274125b98dbdc9c9958dd081216541148185b5bdd5b9d605a1b6044820152606401610c99565b612b07565b6004808501546040516323b872dd60e01b81526001600160a01b03909116916323b872dd91612a8a9133913091879101614990565b6020604051808303815f875af1158015612aa6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aca9190614962565b612b075760405162461bcd60e51b815260206004820152600e60248201526d14185e5b595b9d0819985a5b195960921b6044820152606401610c99565b815f03612b3c575f8781526010602090815260408220805460018101825590835291200180546001600160a01b031916331790555b5f87815260116020908152604080832033845290915281208054889290612b6490849061497d565b9091555050600a840180548791905f90612b7f90849061497d565b9091555050600b840180548291905f90612b9a90849061497d565b90915550505f8781526014602090815260408083208151608081018352338082528185018c815242838601908152606084018d8152855460018082018855968a52888a209551600490910290950180546001600160a01b0319166001600160a01b039096169590951785559151948401949094559251600283015591516003909101558352601c90915281208054889290612c3690849061497d565b925050819055508560185f828254612c4e919061497d565b9091555050600884015461010090046001600160a01b031615612c8f575f8781526013602090815260408083208884529091529020805460ff191660011790555b6040805187815260208101879052339189917fb6223bceef12b095fbd0f387f7fb72f43908eb4368ce36cdbdc0d2b6d32c33be910160405180910390a36006840154600a85015403612ceb5760088401805460ff191660011790555b50505050611c0b60018055565b612d00613e1c565b612d08613e75565b5f818152600e6020526040902060018101546001600160a01b0316331480612d3957505f546001600160a01b031633145b612d765760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610c99565b5f600882015460ff166003811115612d9057612d9061449d565b14612dce5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073746174757360901b6044820152606401610c99565b600a81015415612e22578060070154421015612e225760405162461bcd60e51b8152602060048201526013602482015272526166666c65207374696c6c2061637469766560681b6044820152606401610c99565b60088101805460ff19166003179055600a81015415612fbc575f82815260106020908152604080832080548251818502810185019093528083529192909190830182828015612e9857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612e7a575b509394505f93505050505b8151811015612fb9575f828281518110612ebf57612ebf614a2d565b6020908102919091018101515f8781526011835260408082206001600160a01b038416835290935291909120549091508015612faf575f856005015482612f069190614932565b60048701549091506001600160a01b0316612f3357612f2e6001600160a01b03841682614099565b612fad565b60048681015460405163a9059cbb60e01b81526001600160a01b03868116938201939093526024810184905291169063a9059cbb906044016020604051808303815f875af1158015612f87573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fab9190614962565b505b505b5050600101612ea3565b50505b5f600182810154600160a01b900460ff1690811115612fdd57612fdd61449d565b0361309e5760028101546001600160a01b03166130185760038101546001820154613013916001600160a01b0390911690614099565b613133565b60028101546001820154600383015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303815f875af1158015613074573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130989190614962565b50613133565b60018082810154600160a01b900460ff16908111156130bf576130bf61449d565b03613133576002810154600182015460038301546040516323b872dd60e01b81526001600160a01b03938416936323b872dd936131059330939290911691600401614990565b5f604051808303815f87803b15801561311c575f5ffd5b505af115801561312e573d5f5f3e3d5ffd5b505050505b60405182907fb65f9c027107c653c9c1b5190af4437a21775684943c70e325624643546b4b19905f90a25061190a60018055565b61316f613df0565b6001600160a01b0383166131b55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610c99565b806131f15760405162461bcd60e51b815260206004820152600c60248201526b5469636b657220656d70747960a01b6044820152606401610c99565b6001600160a01b038381165f908152600760205260409020541661325a57600680546001810182555f919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0385161790555b6040518060400160405280846001600160a01b0316815260200183838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506001600160a01b038681168252600760209081526040909220845181546001600160a01b03191692169190911781559083015190915060018201906132f09082614aa0565b505050505050565b613300613df0565b5f811180156133125750624f1a008111155b6133515760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606401610c99565b600955565b61335e613df0565b6001600160a01b0381166133845760405162461bcd60e51b8152600401610c9990614a04565b600d80546001600160a01b0319166001600160a01b03831690811790915560408051632777b50160e01b81529051632777b501916004808201926020929091908290030181865afa1580156133db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133ff9190614b5b565b600260016101000a8154816001600160a01b0302191690836001600160a01b0316021790555050565b613430613df0565b5f816001600160a01b03163b1161347a5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b6044820152606401610c99565b6001600160a01b03165f908152600360205260409020805460ff19166001179055565b606060145f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b8282101561352b575f848152602090819020604080516080810182526004860290920180546001600160a01b031683526001808201548486015260028201549284019290925260030154606083015290835290920191016134cf565b505050509050919050565b5f61353f613e75565b6001600160a01b038816156135b4576001600160a01b038881165f90815260076020526040902054166135b45760405162461bcd60e51b815260206004820152601860248201527f5469636b657420546f6b656e206e6f7420616c6c6f77656400000000000000006044820152606401610c99565b5f861180156135c557506008548611155b6136085760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081d1a58dad95d0818dbdd5b9d60621b6044820152606401610c99565b60095485111561364e5760405162461bcd60e51b81526020600482015260116024820152704475726174696f6e20746f6f206c6f6e6760781b6044820152606401610c99565b5f87116136955760405162461bcd60e51b8152602060048201526015602482015274151a58dad95d081c1c9a58d9481c995c5d5a5c9959605a1b6044820152606401610c99565b5f841180156136a45750858411155b6136e55760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21036b0bc2832b92ab9b2b960711b6044820152606401610c99565b5f8b60018111156136f8576136f861449d565b036138b3576001600160a01b038a166137a5575f89116137515760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081c1c9a5e9948185b5bdd5b9d60621b6044820152606401610c99565b8834146137a05760405162461bcd60e51b815260206004820152601b60248201527f4578616374206e61746976652076616c756520726571756972656400000000006044820152606401610c99565b6139d5565b6001600160a01b038a81165f90815260076020526040902054166137ff5760405162461bcd60e51b8152602060048201526011602482015270151bdad95b881b9bdd08185b1b1bddd959607a1b6044820152606401610c99565b6040516323b872dd60e01b81526001600160a01b038b16906323b872dd9061382f90339030908e90600401614990565b6020604051808303815f875af115801561384b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061386f9190614962565b6137a05760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610c99565b60018b60018111156138c7576138c761449d565b0361398d576001600160a01b038a81165f908152600560205260409020541661392b5760405162461bcd60e51b815260206004820152601660248201527510dbdb1b1958dd1a5bdb881b9bdd08185b1b1bddd95960521b6044820152606401610c99565b6040516323b872dd60e01b81526001600160a01b038b16906323b872dd9061395b90339030908e90600401614990565b5f604051808303815f87803b158015613972575f5ffd5b505af1158015613984573d5f5f3e3d5ffd5b505050506139d5565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726166666c6520747970652073656e7400000000000000006044820152606401610c99565b5f613a3b338c6139e5438b61497d565b60408051426020808301919091526bffffffffffffffffffffffff19606096871b8116838501529490951b9093166054840152606880840192909252805180840390920182526088909201909152805191012090565b90505f600e5f8381526020019081526020015f20905081815f018190555033816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508c8160010160146101000a81548160ff02191690836001811115613aa757613aa761449d565b02179055506002810180546001600160a01b03808f166001600160a01b031992831617909255600383018d9055600483018054928d16929091169190911790556005810189905560068101889055613aff874261497d565b60078201556008810180546001600160b01b0319166101006001600160a01b0388160260ff60a81b191617600160a81b8615150217905560098101869055335f818152600f60209081526040808320805460018181018355918552838520018790556016805491820190557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428901869055928252601b9052908120805491613ba5836149b4565b9190505550336001600160a01b0316827f307ffadcf63a116158ce0668f08a5386c70bf41e1ac9756dfd08958260eb4f1f8f8f8f8f8f8f8960070154604051613bf49796959493929190614b76565b60405180910390a3509b9a5050505050505050505050565b613c14613df0565b6040516323b872dd60e01b81526001600160a01b038416906323b872dd90613c4490309085908790600401614990565b5f604051808303815f87803b158015613c5b575f5ffd5b505af1158015613c6d573d5f5f3e3d5ffd5b50505050505050565b613c7e613df0565b6001600160a01b038116613ca757604051631e4fbdf760e01b81525f6004820152602401610c99565b61190a8161400d565b613cb8613df0565b6001600160a01b038216613d0e5760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f742062652030000000000000006044820152606401610c99565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015613d52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d7691906148e8565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015613dc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dea9190614962565b50505050565b5f546001600160a01b0316331461191d5760405163118cdaa760e01b8152336004820152602401610c99565b600260015403613e6e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c99565b6002600155565b60025460ff161561191d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c99565b60408051600a8082528183019092526060916f181899199a1a9b1b9c1cb0b131b232b360811b915f91602082018180368337019050509050600360fc1b815f81518110613f0a57613f0a614a2d565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613f3857613f38614a2d565b60200101906001600160f81b03191690815f1a9053505f5b6008811015613fb3578285600f1660108110613f6e57613f6e614a2d565b1a60f81b82613f7e83600961494f565b81518110613f8e57613f8e614a2d565b60200101906001600160f81b03191690815f1a90535060049490941c93600101613f50565b509392505050565b613fc3614125565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b614064613e75565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ff03390565b804710156140c35760405163cf47918160e01b815247600482015260248101829052604401610c99565b5f5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461410d576040519150601f19603f3d011682016040523d82523d5f602084013e614112565b606091505b509150915081613dea57613dea8161416e565b60025460ff1661191d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c99565b80511561417e5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5080546141a3906149cc565b5f825580601f106141b2575050565b601f0160209004905f5260205f209081019061190a91905b808211156141dd575f81556001016141ca565b5090565b5f602082840312156141f1575f5ffd5b5035919050565b6001600160a01b038116811461190a575f5ffd5b5f5f6040838503121561421d575f5ffd5b82359150602083013561422f816141f8565b809150509250929050565b5f6020828403121561424a575f5ffd5b8135614255816141f8565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03851681526080602082018190525f906142ad9083018661425c565b6040830194909452506001600160a01b039190911660609091015292915050565b5f5f604083850312156142df575f5ffd5b82356142ea816141f8565b946020939093013593505050565b6001600160a01b03831681526040602082018190525f9061431b9083018461425c565b949350505050565b5f5f60408385031215614334575f5ffd5b823561433f816141f8565b9150602083013561422f816141f8565b5f5f60408385031215614360575f5ffd5b50508035926020909101359150565b5f5f83601f84011261437f575f5ffd5b50813567ffffffffffffffff811115614396575f5ffd5b6020830191508360208285010111156143ad575f5ffd5b9250929050565b5f5f5f5f5f608086880312156143c8575f5ffd5b85356143d3816141f8565b9450602086013567ffffffffffffffff8111156143ee575f5ffd5b6143fa8882890161436f565b909550935050604086013591506060860135614415816141f8565b809150509295509295909350565b5f5f5f60608486031215614435575f5ffd5b505081359360208301359350604090920135919050565b5f5f5f6040848603121561445e575f5ffd5b8335614469816141f8565b9250602084013567ffffffffffffffff811115614484575f5ffd5b6144908682870161436f565b9497909650939450505050565b634e487b7160e01b5f52602160045260245ffd5b600281106144c1576144c161449d565b9052565b600481106144c1576144c161449d565b8e81526001600160a01b038e16602082015261024081016144f9604083018f6144b1565b6001600160a01b038d81166060840152608083018d90528b1660a08301528960c08301528860e0830152876101008301526145386101208301886144c5565b6001600160a01b038616610140830152841515610160830152610180820184905282516101a083015260208301516101c083015260408301516101e083015260608301516001600160a01b031661020083015260808301516102208301529f9e505050505050505050505050505050565b602080825282518282018190525f918401906040840190835b8181101561460c57835180516001600160a01b03168452602080820151818601526040808301519086015260609182015191850191909152909301926080909201916001016145c2565b509095945050505050565b801515811461190a575f5ffd5b5f5f5f5f5f5f5f5f5f5f6101408b8d03121561463e575f5ffd5b8a356002811061464c575f5ffd5b995060208b013561465c816141f8565b985060408b0135975060608b0135614673816141f8565b965060808b0135955060a08b0135945060c08b0135935060e08b013592506101008b01356146a0816141f8565b91506101208b01356146b181614617565b809150509295989b9194979a5092959850565b5f5f5f606084860312156146d6575f5ffd5b83356146e1816141f8565b92506020840135915060408401356146f8816141f8565b809150509250925092565b60208082526025908201527f57616c6c6574206f722077686974656c697374656420636f6e7472616374206e604082015264195959195960da1b606082015260800190565b5f5f60408385031215614759575f5ffd5b8251614764816141f8565b6020939093015192949293505050565b5f60033d111561478a5760045f5f3e505f5160e01c5b90565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f1916810167ffffffffffffffff811182821017156147c7576147c761478d565b6040525050565b5f60443d10156147db5790565b6040513d600319016004823e80513d602482011167ffffffffffffffff8211171561480557505090565b808201805167ffffffffffffffff811115614821575050505090565b3d840160031901828201602001111561483b575050505090565b613fb3602082850101856147a1565b5f81518060208401855e5f93019283525090919050565b7f5069636b6572204572726f722028726561736f6e293a2000000000000000000081525f614255601783018461484a565b602081525f614255602083018461425c565b5f5f60233d11156148bd57602060045f3e50505f516001905b9091565b7202834b1b5b2b9102830b734b19d1031b7b2329606d1b81525f614255601383018461484a565b5f602082840312156148f8575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f8261492d57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417614949576149496148ff565b92915050565b81810381811115614949576149496148ff565b5f60208284031215614972575f5ffd5b815161425581614617565b80820180821115614949576149496148ff565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f600182016149c5576149c56148ff565b5060010190565b600181811c908216806149e057607f821691505b6020821081036149fe57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b601f821115611c0b57805f5260205f20601f840160051c81016020851015614a7a5750805b601f840160051c820191505b81811015614a99575f8155600101614a86565b5050505050565b815167ffffffffffffffff811115614aba57614aba61478d565b614ace81614ac884546149cc565b84614a55565b6020601f821160018114614b00575f8315614ae95750848201515b5f19600385901b1c1916600184901b178455614a99565b5f84815260208120601f198516915b82811015614b2f5787850151825560209485019460019092019101614b0f565b5084821015614b4c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215614b6b575f5ffd5b8151614255816141f8565b60e08101614b84828a6144b1565b6001600160a01b0397881660208301526040820196909652939095166060840152608083019190915260a082015260c0019190915291905056fea2646970667358221220ead205699e1fb856ca2c3fe331af75feeefc0e1f0331c4242c948b781ea3622564736f6c634300081e0033000000000000000000000000efce3cf5ff0198f9303b4270d7d117ea74f083f8
Deployed Bytecode
0x608060405260043610610371575f3560e01c80638638395c116101c8578063c3477824116100fd578063e31ef12c1161009d578063ee45ab241161006d578063ee45ab2414610be3578063f0e9fcd114610bf7578063f2fde38b14610c16578063feaea58614610c35575f5ffd5b8063e31ef12c14610a8f578063e43252d714610b85578063e86ab4cb14610ba4578063ec4770c114610bd0575f5ffd5b8063cf0f34c4116100d8578063cf0f34c4146109f0578063d143d78414610a0f578063d340fd0314610a3a578063d62cd77614610a70575f5ffd5b8063c34778241461096d578063c415b95c14610998578063c6e63e5e146109b7575f5ffd5b80639ea6b4b911610168578063b5cd87bf11610143578063b5cd87bf146108e5578063b99d6aae14610904578063b9b9da1114610923578063c21892901461094e575f5ffd5b80639ea6b4b91461089e578063a42dce80146108b3578063b35d5d7a146108d2575f5ffd5b806390469a9d116101a357806390469a9d1461082c578063936f3d781461084b578063983694b11461086a5780639b89470314610889575f5ffd5b80638638395c146107dd5780638ab1d681146107f15780638da5cb5b14610810575f5ffd5b80634ca38d4a116102a957806369bcd79d1161024957806376006c071161021957806376006c071461072b57806376ff4401146107615780637dd97bef146107aa5780638456cb59146107c9575f5ffd5b806369bcd79d146106aa5780636b71537a146106d55780636db5c8fd14610702578063715018a614610717575f5ffd5b806356264d6c1161028457806356264d6c146106365780635c975abb146106555780635e5f2e261461066c57806366cbace41461068b575f5ffd5b80634ca38d4a146105d45780634e13630b146105f35780635028d05a14610617575f5ffd5b80633e4787d9116103145780633f9ca776116102ef5780633f9ca776146104fb578063411ef03b1461055857806349391898146105875780634c999f5e146105a6575f5ffd5b80633e4787d91461049d5780633f4ba83a146104bc5780633f81a7d6146104d0575f5ffd5b80631abd67261161034f5780631abd67261461041d57806326232a2e1461045457806331e69bec1461046957806334701db814610488575f5ffd5b80630403e0601461037557806312e8e2c3146103b8578063193d2417146103d9575b5f5ffd5b348015610380575f5ffd5b506103a361038f3660046141e1565b60126020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103c3575f5ffd5b506103d76103d23660046141e1565b610c54565b005b3480156103e4575f5ffd5b5061040f6103f336600461420c565b601160209081525f928352604080842090915290825290205481565b6040519081526020016103af565b348015610428575f5ffd5b50600c5461043c906001600160a01b031681565b6040516001600160a01b0390911681526020016103af565b34801561045f575f5ffd5b5061040f600a5481565b348015610474575f5ffd5b5061040f6104833660046141e1565b610ca7565b348015610493575f5ffd5b5061040f60185481565b3480156104a8575f5ffd5b506103d76104b73660046141e1565b610cc6565b3480156104c7575f5ffd5b506103d761190d565b3480156104db575f5ffd5b5061040f6104ea36600461423a565b601a6020525f908152604090205481565b348015610506575f5ffd5b506105396105153660046141e1565b60156020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016103af565b348015610563575f5ffd5b5061057761057236600461423a565b61191f565b6040516103af949392919061428a565b348015610592575f5ffd5b5061040f6105a13660046142ce565b6119e1565b3480156105b1575f5ffd5b506103a36105c036600461423a565b60036020525f908152604090205460ff1681565b3480156105df575f5ffd5b5061043c6105ee3660046141e1565b611a0c565b3480156105fe575f5ffd5b5060025461043c9061010090046001600160a01b031681565b348015610622575f5ffd5b506103d761063136600461423a565b611a34565b348015610641575f5ffd5b506103d76106503660046141e1565b611c10565b348015610660575f5ffd5b5060025460ff166103a3565b348015610677575f5ffd5b5061043c6106863660046141e1565b611c68565b348015610696575f5ffd5b506103d76106a53660046141e1565b611c77565b3480156106b5575f5ffd5b5061040f6106c436600461423a565b60196020525f908152604090205481565b3480156106e0575f5ffd5b506106f46106ef36600461423a565b611ea0565b6040516103af9291906142f8565b34801561070d575f5ffd5b5061040f60095481565b348015610722575f5ffd5b506103d7611f4c565b348015610736575f5ffd5b5061040f610745366004614323565b601f60209081525f928352604080842090915290825290205481565b34801561076c575f5ffd5b5061078061077b36600461434f565b611f5d565b604080516001600160a01b03909516855260208501939093529183015260608201526080016103af565b3480156107b5575f5ffd5b5061043c6107c436600461434f565b611fa9565b3480156107d4575f5ffd5b506103d7611fdd565b3480156107e8575f5ffd5b506103d7611fed565b3480156107fc575f5ffd5b506103d761080b36600461423a565b612047565b34801561081b575f5ffd5b505f546001600160a01b031661043c565b348015610837575f5ffd5b506103d761084636600461423a565b6120c9565b348015610856575f5ffd5b506103d76108653660046143b4565b612278565b348015610875575f5ffd5b506103d761088436600461423a565b61242d565b348015610894575f5ffd5b5061040f60085481565b3480156108a9575f5ffd5b5061040f60175481565b3480156108be575f5ffd5b506103d76108cd36600461423a565b612457565b6103d76108e0366004614423565b6124a7565b3480156108f0575f5ffd5b506103d76108ff3660046141e1565b612cf8565b34801561090f575f5ffd5b506103d761091e36600461444c565b613167565b34801561092e575f5ffd5b5061040f61093d36600461423a565b601d6020525f908152604090205481565b348015610959575f5ffd5b50600d5461043c906001600160a01b031681565b348015610978575f5ffd5b5061040f61098736600461423a565b601b6020525f908152604090205481565b3480156109a3575f5ffd5b50600b5461043c906001600160a01b031681565b3480156109c2575f5ffd5b506103a36109d136600461434f565b601360209081525f928352604080842090915290825290205460ff1681565b3480156109fb575f5ffd5b506103d7610a0a3660046141e1565b6132f8565b348015610a1a575f5ffd5b5061040f610a2936600461423a565b601c6020525f908152604090205481565b348015610a45575f5ffd5b5061040f610a54366004614323565b601e60209081525f928352604080842090915290825290205481565b348015610a7b575f5ffd5b506103d7610a8a36600461423a565b613356565b348015610a9a575f5ffd5b50610b6b610aa93660046141e1565b600e60208181525f92835260409283902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a01548d5160a081018f52600a8c01548152600b8c01549c81019c909c52600c8b01549d8c019d909d52600d8a01546001600160a01b0390811660608d015299909b015460808b0152969a8887169a60ff600160a01b90980488169a968a16999598948616979396929581851694610100830490911693600160a81b9092041691908e565b6040516103af9e9d9c9b9a999897969594939291906144d5565b348015610b90575f5ffd5b506103d7610b9f36600461423a565b613428565b348015610baf575f5ffd5b50610bc3610bbe3660046141e1565b61349d565b6040516103af91906145a9565b61040f610bde366004614624565b613536565b348015610bee575f5ffd5b5061040f600a81565b348015610c02575f5ffd5b506103d7610c113660046146c4565b613c0c565b348015610c21575f5ffd5b506103d7610c3036600461423a565b613c76565b348015610c40575f5ffd5b506103d7610c4f366004614323565b613cb0565b610c5c613df0565b6103e8811115610ca25760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064015b60405180910390fd5b600a55565b60168181548110610cb6575f80fd5b5f91825260209091200154905081565b610cce613e1c565b610cd6613e75565b33321480610cf25750335f9081526003602052604090205460ff165b610d0e5760405162461bcd60e51b8152600401610c9990614703565b5f818152600e602052604090206001600882015460ff166003811115610d3657610d3661449d565b14610d835760405162461bcd60e51b815260206004820152601f60248201527f526166666c65206d7573742062652066696c6c656420746f2066696e697368006044820152606401610c99565b600c546001600160a01b0316610de75760405162461bcd60e51b815260206004820152602360248201527f526166666c652077696e6e6572207069636b6572206e6f7420636f6e666967756044820152621c995960ea1b6064820152608401610c99565b600b546001600160a01b0316610e3f5760405162461bcd60e51b815260206004820152601d60248201527f46656520636f6c6c6563746f722061646472657373206e6f74207365740000006044820152606401610c99565b5f8281526012602052604090205460ff1615610eab5760405162461bcd60e51b815260206004820152602560248201527f57696e6e657220616c7265616479207069636b656420666f72207468697320726044820152646166666c6560d81b6064820152608401610c99565b600c546040516316fe155560e31b8152600481018490525f9182916001600160a01b039091169063b7f0aaa8906024016040805180830381865afa925050508015610f13575060408051601f3d908101601f19168201909252610f1091810190614748565b60015b610ff357610f1f614774565b806308c379a003610f755750610f336147ce565b80610f3e5750610fab565b80604051602001610f4f9190614861565b60408051601f198184030181529082905262461bcd60e51b8252610c9991600401614892565b634e487b7103610fab57610f876148a4565b90610f925750610fab565b610f9b81613ebb565b604051602001610f4f91906148c1565b60405162461bcd60e51b815260206004820152601d60248201527f5069636b6572204572726f723a20756e6b6e6f776e206661696c7572650000006044820152606401610c99565b6001600160a01b0382166110425760405162461bcd60e51b815260206004820152601660248201527557696e6e6572206973207a65726f206164647265737360501b6044820152606401610c99565b5f868152601260209081526040808320805460ff199081166001908117909255825180840184526001600160a01b038881168083528287018981528e895260158852978690209251835492166001600160a01b03199283161783559651919093015560088a0180549091166002179055600d8901805490911684179055600e8801849055518381529395509193509186917fc1ff24a495d58cd405efb9c0782d4630105d6c9aeb10b1ca1f1ac1076e1605b3910160405180910390a3600d546001840154604051632c9aab9b60e11b81526001600160a01b0391821660048201525f929190911690635935573690602401602060405180830381865afa15801561114e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117291906148e8565b90505f600a6111818184614913565b61118b9190614932565b90505f81600a541161119d575f6111ab565b81600a546111ab919061494f565b90505f6127108288600a01600101546111c49190614932565b6111ce9190614913565b90505f8188600a01600101546111e4919061494f565b600c890183905560088901549091505f90600160a81b900460ff166112165760018901546001600160a01b031661121a565b61dead5b60048a01549091506001600160a01b031661137557600b546040515f916001600160a01b03169085908381818185875af1925050503d805f8114611279576040519150601f19603f3d011682016040523d82523d5f602084013e61127e565b606091505b50509050806112cf5760405162461bcd60e51b815260206004820152601a60248201527f4e617469766520666565207472616e73666572206661696c65640000000000006044820152606401610c99565b5f826001600160a01b0316846040515f6040518083038185875af1925050503d805f8114611318576040519150601f19603f3d011682016040523d82523d5f602084013e61131d565b606091505b505090508061136e5760405162461bcd60e51b815260206004820152601f60248201527f4e6174697665207061796f757420746f2063726561746f72206661696c6564006044820152606401610c99565b50506114ff565b600489810154600b5460405163a9059cbb60e01b81526001600160a01b039182169381019390935260248301869052169063a9059cbb906044016020604051808303815f875af11580156113cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ef9190614962565b61143b5760405162461bcd60e51b815260206004820152601960248201527f455243323020666565207472616e73666572206661696c6564000000000000006044820152606401610c99565b60048981015460405163a9059cbb60e01b81526001600160a01b03848116938201939093526024810185905291169063a9059cbb906044016020604051808303815f875af115801561148f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b39190614962565b6114ff5760405162461bcd60e51b815260206004820152601e60248201527f4552433230207061796f757420746f2063726561746f72206661696c656400006044820152606401610c99565b5f60018a810154600160a01b900460ff16908111156115205761152061449d565b036116f05760028901546001600160a01b03166115de5760038901546040515f916001600160a01b038b16918381818185875af1925050503d805f8114611582576040519150601f19603f3d011682016040523d82523d5f602084013e611587565b606091505b50509050806115d85760405162461bcd60e51b815260206004820181905260248201527f4e6174697665207472616e7366657220746f2077696e6e6572206661696c65646044820152606401610c99565b506116a5565b600289015460038a015460405163a9059cbb60e01b81526001600160a01b038b81166004830152602482019290925291169063a9059cbb906044016020604051808303815f875af1158015611635573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116599190614962565b6116a55760405162461bcd60e51b815260206004820152601b60248201527f4552433230207072697a65207472616e73666572206661696c656400000000006044820152606401610c99565b60038901546001600160a01b03808a165f908152601f6020908152604080832060028f0154909416835292905290812080549091906116e590849061497d565b909155506117be9050565b6001808a810154600160a01b900460ff16908111156117115761171161449d565b036117be57600289015460038a01546040516323b872dd60e01b81526001600160a01b03909216916323b872dd9161174f9130918d91600401614990565b5f604051808303815f87803b158015611766575f5ffd5b505af1158015611778573d5f5f3e3d5ffd5b505050506001600160a01b038881165f908152601f6020908152604080832060028e015490941683529290529081208054600192906117b890849061497d565b90915550505b60178054905f6117cd836149b4565b9091555050600a890154601880545f906117e890849061497d565b9091555050600a89015460048a01546001600160a01b03165f908152601960205260408120805490919061181d90849061497d565b909155505060048901546001600160a01b03165f908152601a60205260408120805485929061184d90849061497d565b90915550506001600160a01b0388165f908152601d60205260408120805491611875836149b4565b90915550506001600160a01b038082165f908152601e6020908152604080832060048e0154909416835292905290812080548492906118b590849061497d565b90915550506040516001600160a01b03891681528a907f4c9429828b8a8a57ced9bd94f8941b01b0647e84414d1004fca57ded1a0c7fbe9060200160405180910390a250505050505050505061190a60018055565b50565b611915613df0565b61191d613fbb565b565b60056020525f9081526040902080546001820180546001600160a01b03909216929161194a906149cc565b80601f0160208091040260200160405190810160405280929190818152602001828054611976906149cc565b80156119c15780601f10611998576101008083540402835291602001916119c1565b820191905f5260205f20905b8154815290600101906020018083116119a457829003601f168201915b5050505060028301546003909301549192916001600160a01b0316905084565b600f602052815f5260405f2081815481106119fa575f80fd5b905f5260205f20015f91509150505481565b60048181548110611a1b575f80fd5b5f918252602090912001546001600160a01b0316905081565b611a3c613df0565b6001600160a01b038116611a625760405162461bcd60e51b8152600401610c9990614a04565b6001600160a01b038181165f9081526005602052604090205416611ac85760405162461bcd60e51b815260206004820152601960248201527f436f6c6c656374696f6e206e6f742072656769737465726564000000000000006044820152606401610c99565b6001600160a01b0381165f90815260056020526040812080546001600160a01b031916815590611afb6001830182614197565b505f60028201819055600390910180546001600160a01b0319169055600454905b81811015611c0b57826001600160a01b031660048281548110611b4157611b41614a2d565b5f918252602090912001546001600160a01b031603611c03576004611b6760018461494f565b81548110611b7757611b77614a2d565b5f91825260209091200154600480546001600160a01b039092169183908110611ba257611ba2614a2d565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506004805480611bde57611bde614a41565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b600101611b1c565b505050565b611c18613df0565b5f81118015611c2957506103e88111155b611c635760405162461bcd60e51b815260206004820152600b60248201526a092dcecc2d8d2c840dac2f60ab1b6044820152606401610c99565b600855565b60068181548110611a1b575f80fd5b611c7f613e1c565b611c87613e75565b33321480611ca35750335f9081526003602052604090205460ff165b611cbf5760405162461bcd60e51b8152600401610c9990614703565b5f818152600e6020526040902060018101546001600160a01b03163314611d165760405162461bcd60e51b815260206004820152600b60248201526a2737ba1031b932b0ba37b960a91b6044820152606401610c99565b5f600882015460ff166003811115611d3057611d3061449d565b14611d6e5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073746174757360901b6044820152606401610c99565b600a810154611db15760405162461bcd60e51b815260206004820152600f60248201526e139bc81d1a58dad95d1cc81cdbdb19608a1b6044820152606401610c99565b600c546001600160a01b0316611dfa5760405162461bcd60e51b815260206004820152600e60248201526d141a58dad95c881b9bdd081cd95d60921b6044820152606401610c99565b600b546001600160a01b0316611e4a5760405162461bcd60e51b81526020600482015260156024820152741199594818dbdb1b1958dd1bdc881b9bdd081cd95d605a1b6044820152606401610c99565b5f8281526012602052604090205460ff1615610eab5760405162461bcd60e51b815260206004820152601560248201527415da5b9b995c88185b1c9958591e481c1a58dad959605a1b6044820152606401610c99565b60076020525f9081526040902080546001820180546001600160a01b039092169291611ecb906149cc565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef7906149cc565b8015611f425780601f10611f1957610100808354040283529160200191611f42565b820191905f5260205f20905b815481529060010190602001808311611f2557829003601f168201915b5050505050905082565b611f54613df0565b61191d5f61400d565b6014602052815f5260405f208181548110611f76575f80fd5b5f91825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925084565b6010602052815f5260405f208181548110611fc2575f80fd5b5f918252602090912001546001600160a01b03169150829050565b611fe5613df0565b61191d61405c565b611ff5613df0565b478061202d5760405162461bcd60e51b81526020600482015260076024820152664e6f204859504560c81b6044820152606401610c99565b61190a6120415f546001600160a01b031690565b82614099565b61204f613df0565b6001600160a01b0381165f9081526003602052604090205460ff166120a95760405162461bcd60e51b815260206004820152601060248201526f139bdd081a5b881dda1a5d195b1a5cdd60821b6044820152606401610c99565b6001600160a01b03165f908152600360205260409020805460ff19169055565b6120d1613df0565b6001600160a01b0381166121175760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610c99565b6001600160a01b038181165f90815260076020526040902054166121745760405162461bcd60e51b8152602060048201526014602482015273151bdad95b881b9bdd081c9959da5cdd195c995960621b6044820152606401610c99565b6001600160a01b0381165f90815260076020526040812080546001600160a01b0319168155906121a76001830182614197565b50506006545f5b81811015611c0b57826001600160a01b0316600682815481106121d3576121d3614a2d565b5f918252602090912001546001600160a01b0316036122705760066121f960018461494f565b8154811061220957612209614a2d565b5f91825260209091200154600680546001600160a01b03909216918390811061223457612234614a2d565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480611bde57611bde614a41565b6001016121ae565b612280613df0565b6001600160a01b0385166122a65760405162461bcd60e51b8152600401610c9990614a04565b6103e88211156122eb5760405162461bcd60e51b815260206004820152601060248201526f0a4def2c2d8e8f240e8dede40d0d2ced60831b6044820152606401610c99565b6001600160a01b038581165f908152600560205260409020541661235457600480546001810182555f919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0387161790555b6040518060800160405280866001600160a01b0316815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250505060208083018690526001600160a01b0385811660409485015289811683526005825292909120835181546001600160a01b031916931692909217825582015160018201906123f39082614aa0565b5060408201516002820155606090910151600390910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b612435613df0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b61245f613df0565b6001600160a01b0381166124855760405162461bcd60e51b8152600401610c9990614a04565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6124af613e1c565b6124b7613e75565b333214806124d35750335f9081526003602052604090205460ff165b6124ef5760405162461bcd60e51b8152600401610c9990614703565b5f821161252f5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610c99565b5f838152600e6020526040812090600882015460ff1660038111156125565761255661449d565b146125935760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420617661696c61626c6560981b6044820152606401610c99565b806007015442106125d55760405162461bcd60e51b815260206004820152600c60248201526b149859999b1948195b99195960a21b6044820152606401610c99565b60018101546001600160a01b031633036126315760405162461bcd60e51b815260206004820152601f60248201527f427579696e672066726f6d2063726561746f72206e6f7420616c6c6f776564006044820152606401610c99565b600881015461010090046001600160a01b0316156128bf576002546008820154610100918290046001600160a01b039081169290910416145f81156127835760088301546040516331a9108f60e11b81525f9133916101009091046001600160a01b031690636352211e906126ae90899060040190815260200190565b602060405180830381865afa1580156126c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ed9190614b5b565b600d54604051637fecfbc360e01b8152600481018990526001600160a01b039283169390931493505f92339290911690637fecfbc390602401602060405180830381865afa158015612741573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127659190614b5b565b6001600160a01b0316149050818061277a5750805b92505050612802565b60088301546040516331a9108f60e11b815260048101869052339161010090046001600160a01b031690636352211e90602401602060405180830381865afa1580156127d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f59190614b5b565b6001600160a01b03161490505b8061284f5760405162461bcd60e51b815260206004820152601e60248201527f4e6f74206f776e6572206f66206578636c757369766520746f6b656e496400006044820152606401610c99565b5f86815260136020908152604080832087845290915290205460ff16156128b85760405162461bcd60e51b815260206004820152601d60248201527f4578636c757369766520746f6b656e20616c72656164792075736564210000006044820152606401610c99565b505061290d565b811561290d5760405162461bcd60e51b815260206004820152601860248201527f67617465546f6b656e4964206e6f7420657870656374656400000000000000006044820152606401610c99565b600a81015460068201545f916129229161494f565b9050808411156129745760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768207469636b657473206c6566740000000000000000006044820152606401610c99565b5f858152601160209081526040808320338452909152902054600983015461299c868361497d565b11156129e35760405162461bcd60e51b8152602060048201526016602482015275115e18d959591cc81c195c8b5d5cd95c881b1a5b5a5d60521b6044820152606401610c99565b5f8584600501546129f49190614932565b60048501549091506001600160a01b0316612a5557803414612a505760405162461bcd60e51b8152602060048201526015602482015274125b98dbdc9c9958dd081216541148185b5bdd5b9d605a1b6044820152606401610c99565b612b07565b6004808501546040516323b872dd60e01b81526001600160a01b03909116916323b872dd91612a8a9133913091879101614990565b6020604051808303815f875af1158015612aa6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aca9190614962565b612b075760405162461bcd60e51b815260206004820152600e60248201526d14185e5b595b9d0819985a5b195960921b6044820152606401610c99565b815f03612b3c575f8781526010602090815260408220805460018101825590835291200180546001600160a01b031916331790555b5f87815260116020908152604080832033845290915281208054889290612b6490849061497d565b9091555050600a840180548791905f90612b7f90849061497d565b9091555050600b840180548291905f90612b9a90849061497d565b90915550505f8781526014602090815260408083208151608081018352338082528185018c815242838601908152606084018d8152855460018082018855968a52888a209551600490910290950180546001600160a01b0319166001600160a01b039096169590951785559151948401949094559251600283015591516003909101558352601c90915281208054889290612c3690849061497d565b925050819055508560185f828254612c4e919061497d565b9091555050600884015461010090046001600160a01b031615612c8f575f8781526013602090815260408083208884529091529020805460ff191660011790555b6040805187815260208101879052339189917fb6223bceef12b095fbd0f387f7fb72f43908eb4368ce36cdbdc0d2b6d32c33be910160405180910390a36006840154600a85015403612ceb5760088401805460ff191660011790555b50505050611c0b60018055565b612d00613e1c565b612d08613e75565b5f818152600e6020526040902060018101546001600160a01b0316331480612d3957505f546001600160a01b031633145b612d765760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610c99565b5f600882015460ff166003811115612d9057612d9061449d565b14612dce5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073746174757360901b6044820152606401610c99565b600a81015415612e22578060070154421015612e225760405162461bcd60e51b8152602060048201526013602482015272526166666c65207374696c6c2061637469766560681b6044820152606401610c99565b60088101805460ff19166003179055600a81015415612fbc575f82815260106020908152604080832080548251818502810185019093528083529192909190830182828015612e9857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612e7a575b509394505f93505050505b8151811015612fb9575f828281518110612ebf57612ebf614a2d565b6020908102919091018101515f8781526011835260408082206001600160a01b038416835290935291909120549091508015612faf575f856005015482612f069190614932565b60048701549091506001600160a01b0316612f3357612f2e6001600160a01b03841682614099565b612fad565b60048681015460405163a9059cbb60e01b81526001600160a01b03868116938201939093526024810184905291169063a9059cbb906044016020604051808303815f875af1158015612f87573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fab9190614962565b505b505b5050600101612ea3565b50505b5f600182810154600160a01b900460ff1690811115612fdd57612fdd61449d565b0361309e5760028101546001600160a01b03166130185760038101546001820154613013916001600160a01b0390911690614099565b613133565b60028101546001820154600383015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303815f875af1158015613074573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130989190614962565b50613133565b60018082810154600160a01b900460ff16908111156130bf576130bf61449d565b03613133576002810154600182015460038301546040516323b872dd60e01b81526001600160a01b03938416936323b872dd936131059330939290911691600401614990565b5f604051808303815f87803b15801561311c575f5ffd5b505af115801561312e573d5f5f3e3d5ffd5b505050505b60405182907fb65f9c027107c653c9c1b5190af4437a21775684943c70e325624643546b4b19905f90a25061190a60018055565b61316f613df0565b6001600160a01b0383166131b55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610c99565b806131f15760405162461bcd60e51b815260206004820152600c60248201526b5469636b657220656d70747960a01b6044820152606401610c99565b6001600160a01b038381165f908152600760205260409020541661325a57600680546001810182555f919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0385161790555b6040518060400160405280846001600160a01b0316815260200183838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506001600160a01b038681168252600760209081526040909220845181546001600160a01b03191692169190911781559083015190915060018201906132f09082614aa0565b505050505050565b613300613df0565b5f811180156133125750624f1a008111155b6133515760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606401610c99565b600955565b61335e613df0565b6001600160a01b0381166133845760405162461bcd60e51b8152600401610c9990614a04565b600d80546001600160a01b0319166001600160a01b03831690811790915560408051632777b50160e01b81529051632777b501916004808201926020929091908290030181865afa1580156133db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133ff9190614b5b565b600260016101000a8154816001600160a01b0302191690836001600160a01b0316021790555050565b613430613df0565b5f816001600160a01b03163b1161347a5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b6044820152606401610c99565b6001600160a01b03165f908152600360205260409020805460ff19166001179055565b606060145f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b8282101561352b575f848152602090819020604080516080810182526004860290920180546001600160a01b031683526001808201548486015260028201549284019290925260030154606083015290835290920191016134cf565b505050509050919050565b5f61353f613e75565b6001600160a01b038816156135b4576001600160a01b038881165f90815260076020526040902054166135b45760405162461bcd60e51b815260206004820152601860248201527f5469636b657420546f6b656e206e6f7420616c6c6f77656400000000000000006044820152606401610c99565b5f861180156135c557506008548611155b6136085760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081d1a58dad95d0818dbdd5b9d60621b6044820152606401610c99565b60095485111561364e5760405162461bcd60e51b81526020600482015260116024820152704475726174696f6e20746f6f206c6f6e6760781b6044820152606401610c99565b5f87116136955760405162461bcd60e51b8152602060048201526015602482015274151a58dad95d081c1c9a58d9481c995c5d5a5c9959605a1b6044820152606401610c99565b5f841180156136a45750858411155b6136e55760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21036b0bc2832b92ab9b2b960711b6044820152606401610c99565b5f8b60018111156136f8576136f861449d565b036138b3576001600160a01b038a166137a5575f89116137515760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081c1c9a5e9948185b5bdd5b9d60621b6044820152606401610c99565b8834146137a05760405162461bcd60e51b815260206004820152601b60248201527f4578616374206e61746976652076616c756520726571756972656400000000006044820152606401610c99565b6139d5565b6001600160a01b038a81165f90815260076020526040902054166137ff5760405162461bcd60e51b8152602060048201526011602482015270151bdad95b881b9bdd08185b1b1bddd959607a1b6044820152606401610c99565b6040516323b872dd60e01b81526001600160a01b038b16906323b872dd9061382f90339030908e90600401614990565b6020604051808303815f875af115801561384b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061386f9190614962565b6137a05760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610c99565b60018b60018111156138c7576138c761449d565b0361398d576001600160a01b038a81165f908152600560205260409020541661392b5760405162461bcd60e51b815260206004820152601660248201527510dbdb1b1958dd1a5bdb881b9bdd08185b1b1bddd95960521b6044820152606401610c99565b6040516323b872dd60e01b81526001600160a01b038b16906323b872dd9061395b90339030908e90600401614990565b5f604051808303815f87803b158015613972575f5ffd5b505af1158015613984573d5f5f3e3d5ffd5b505050506139d5565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726166666c6520747970652073656e7400000000000000006044820152606401610c99565b5f613a3b338c6139e5438b61497d565b60408051426020808301919091526bffffffffffffffffffffffff19606096871b8116838501529490951b9093166054840152606880840192909252805180840390920182526088909201909152805191012090565b90505f600e5f8381526020019081526020015f20905081815f018190555033816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508c8160010160146101000a81548160ff02191690836001811115613aa757613aa761449d565b02179055506002810180546001600160a01b03808f166001600160a01b031992831617909255600383018d9055600483018054928d16929091169190911790556005810189905560068101889055613aff874261497d565b60078201556008810180546001600160b01b0319166101006001600160a01b0388160260ff60a81b191617600160a81b8615150217905560098101869055335f818152600f60209081526040808320805460018181018355918552838520018790556016805491820190557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428901869055928252601b9052908120805491613ba5836149b4565b9190505550336001600160a01b0316827f307ffadcf63a116158ce0668f08a5386c70bf41e1ac9756dfd08958260eb4f1f8f8f8f8f8f8f8960070154604051613bf49796959493929190614b76565b60405180910390a3509b9a5050505050505050505050565b613c14613df0565b6040516323b872dd60e01b81526001600160a01b038416906323b872dd90613c4490309085908790600401614990565b5f604051808303815f87803b158015613c5b575f5ffd5b505af1158015613c6d573d5f5f3e3d5ffd5b50505050505050565b613c7e613df0565b6001600160a01b038116613ca757604051631e4fbdf760e01b81525f6004820152602401610c99565b61190a8161400d565b613cb8613df0565b6001600160a01b038216613d0e5760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f742062652030000000000000006044820152606401610c99565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015613d52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d7691906148e8565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015613dc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dea9190614962565b50505050565b5f546001600160a01b0316331461191d5760405163118cdaa760e01b8152336004820152602401610c99565b600260015403613e6e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c99565b6002600155565b60025460ff161561191d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c99565b60408051600a8082528183019092526060916f181899199a1a9b1b9c1cb0b131b232b360811b915f91602082018180368337019050509050600360fc1b815f81518110613f0a57613f0a614a2d565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613f3857613f38614a2d565b60200101906001600160f81b03191690815f1a9053505f5b6008811015613fb3578285600f1660108110613f6e57613f6e614a2d565b1a60f81b82613f7e83600961494f565b81518110613f8e57613f8e614a2d565b60200101906001600160f81b03191690815f1a90535060049490941c93600101613f50565b509392505050565b613fc3614125565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b614064613e75565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ff03390565b804710156140c35760405163cf47918160e01b815247600482015260248101829052604401610c99565b5f5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461410d576040519150601f19603f3d011682016040523d82523d5f602084013e614112565b606091505b509150915081613dea57613dea8161416e565b60025460ff1661191d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c99565b80511561417e5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5080546141a3906149cc565b5f825580601f106141b2575050565b601f0160209004905f5260205f209081019061190a91905b808211156141dd575f81556001016141ca565b5090565b5f602082840312156141f1575f5ffd5b5035919050565b6001600160a01b038116811461190a575f5ffd5b5f5f6040838503121561421d575f5ffd5b82359150602083013561422f816141f8565b809150509250929050565b5f6020828403121561424a575f5ffd5b8135614255816141f8565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03851681526080602082018190525f906142ad9083018661425c565b6040830194909452506001600160a01b039190911660609091015292915050565b5f5f604083850312156142df575f5ffd5b82356142ea816141f8565b946020939093013593505050565b6001600160a01b03831681526040602082018190525f9061431b9083018461425c565b949350505050565b5f5f60408385031215614334575f5ffd5b823561433f816141f8565b9150602083013561422f816141f8565b5f5f60408385031215614360575f5ffd5b50508035926020909101359150565b5f5f83601f84011261437f575f5ffd5b50813567ffffffffffffffff811115614396575f5ffd5b6020830191508360208285010111156143ad575f5ffd5b9250929050565b5f5f5f5f5f608086880312156143c8575f5ffd5b85356143d3816141f8565b9450602086013567ffffffffffffffff8111156143ee575f5ffd5b6143fa8882890161436f565b909550935050604086013591506060860135614415816141f8565b809150509295509295909350565b5f5f5f60608486031215614435575f5ffd5b505081359360208301359350604090920135919050565b5f5f5f6040848603121561445e575f5ffd5b8335614469816141f8565b9250602084013567ffffffffffffffff811115614484575f5ffd5b6144908682870161436f565b9497909650939450505050565b634e487b7160e01b5f52602160045260245ffd5b600281106144c1576144c161449d565b9052565b600481106144c1576144c161449d565b8e81526001600160a01b038e16602082015261024081016144f9604083018f6144b1565b6001600160a01b038d81166060840152608083018d90528b1660a08301528960c08301528860e0830152876101008301526145386101208301886144c5565b6001600160a01b038616610140830152841515610160830152610180820184905282516101a083015260208301516101c083015260408301516101e083015260608301516001600160a01b031661020083015260808301516102208301529f9e505050505050505050505050505050565b602080825282518282018190525f918401906040840190835b8181101561460c57835180516001600160a01b03168452602080820151818601526040808301519086015260609182015191850191909152909301926080909201916001016145c2565b509095945050505050565b801515811461190a575f5ffd5b5f5f5f5f5f5f5f5f5f5f6101408b8d03121561463e575f5ffd5b8a356002811061464c575f5ffd5b995060208b013561465c816141f8565b985060408b0135975060608b0135614673816141f8565b965060808b0135955060a08b0135945060c08b0135935060e08b013592506101008b01356146a0816141f8565b91506101208b01356146b181614617565b809150509295989b9194979a5092959850565b5f5f5f606084860312156146d6575f5ffd5b83356146e1816141f8565b92506020840135915060408401356146f8816141f8565b809150509250925092565b60208082526025908201527f57616c6c6574206f722077686974656c697374656420636f6e7472616374206e604082015264195959195960da1b606082015260800190565b5f5f60408385031215614759575f5ffd5b8251614764816141f8565b6020939093015192949293505050565b5f60033d111561478a5760045f5f3e505f5160e01c5b90565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f1916810167ffffffffffffffff811182821017156147c7576147c761478d565b6040525050565b5f60443d10156147db5790565b6040513d600319016004823e80513d602482011167ffffffffffffffff8211171561480557505090565b808201805167ffffffffffffffff811115614821575050505090565b3d840160031901828201602001111561483b575050505090565b613fb3602082850101856147a1565b5f81518060208401855e5f93019283525090919050565b7f5069636b6572204572726f722028726561736f6e293a2000000000000000000081525f614255601783018461484a565b602081525f614255602083018461425c565b5f5f60233d11156148bd57602060045f3e50505f516001905b9091565b7202834b1b5b2b9102830b734b19d1031b7b2329606d1b81525f614255601383018461484a565b5f602082840312156148f8575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f8261492d57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417614949576149496148ff565b92915050565b81810381811115614949576149496148ff565b5f60208284031215614972575f5ffd5b815161425581614617565b80820180821115614949576149496148ff565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f600182016149c5576149c56148ff565b5060010190565b600181811c908216806149e057607f821691505b6020821081036149fe57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b601f821115611c0b57805f5260205f20601f840160051c81016020851015614a7a5750805b601f840160051c820191505b81811015614a99575f8155600101614a86565b5050505050565b815167ffffffffffffffff811115614aba57614aba61478d565b614ace81614ac884546149cc565b84614a55565b6020601f821160018114614b00575f8315614ae95750848201515b5f19600385901b1c1916600184901b178455614a99565b5f84815260208120601f198516915b82811015614b2f5787850151825560209485019460019092019101614b0f565b5084821015614b4c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215614b6b575f5ffd5b8151614255816141f8565b60e08101614b84828a6144b1565b6001600160a01b0397881660208301526040820196909652939095166060840152608083019190915260a082015260c0019190915291905056fea2646970667358221220ead205699e1fb856ca2c3fe331af75feeefc0e1f0331c4242c948b781ea3622564736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000efce3cf5ff0198f9303b4270d7d117ea74f083f8
-----Decoded View---------------
Arg [0] : _feeCollector (address): 0xEfcE3cF5ff0198F9303b4270d7d117Ea74F083f8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000efce3cf5ff0198f9303b4270d7d117ea74f083f8
Deployed Bytecode Sourcemap
26569:23867:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29061:50;;;;;;;;;;-1:-1:-1;29061:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;506:14:1;;499:22;481:41;;469:2;454:18;29061:50:0;;;;;;;;31581:142;;;;;;;;;;-1:-1:-1;31581:142:0;;;;;:::i;:::-;;:::i;:::-;;28986:68;;;;;;;;;;-1:-1:-1;28986:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1418:25:1;;;1406:2;1391:18;28986:68:0;1272:177:1;28585:33:0;;;;;;;;;;-1:-1:-1;28585:33:0;;;;-1:-1:-1;;;;;28585:33:0;;;;;;-1:-1:-1;;;;;1727:32:1;;;1709:51;;1697:2;1682:18;28585:33:0;1563:203:1;28493:32:0;;;;;;;;;;;;;;;;29322:29;;;;;;;;;;-1:-1:-1;29322:29:0;;;;;:::i;:::-;;:::i;30047:31::-;;;;;;;;;;;;;;;;40823:3889;;;;;;;;;;-1:-1:-1;40823:3889:0;;;;;:::i;:::-;;:::i;31158:67::-;;;;;;;;;;;;;:::i;30150:60::-;;;;;;;;;;-1:-1:-1;30150:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;29260:53;;;;;;;;;;-1:-1:-1;29260:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29260:53:0;;;;;;;;;;-1:-1:-1;;;;;2397:32:1;;;2379:51;;2461:2;2446:18;;2439:34;;;;2352:18;29260:53:0;2205:274:1;28242:59:0;;;;;;;;;;-1:-1:-1;28242:59:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;28870:53::-;;;;;;;;;;-1:-1:-1;28870:53:0;;;;;:::i;:::-;;:::i;27924:49::-;;;;;;;;;;-1:-1:-1;27924:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28200:35;;;;;;;;;;-1:-1:-1;28200:35:0;;;;;:::i;:::-;;:::i;26687:30::-;;;;;;;;;;-1:-1:-1;26687:30:0;;;;;;;-1:-1:-1;;;;;26687:30:0;;;33616:585;;;;;;;;;;-1:-1:-1;33616:585:0;;;;;:::i;:::-;;:::i;31233:151::-;;;;;;;;;;-1:-1:-1;31233:151:0;;;;;:::i;:::-;;:::i;9110:86::-;;;;;;;;;;-1:-1:-1;9181:7:0;;;;9110:86;;28310:30;;;;;;;;;;-1:-1:-1;28310:30:0;;;;;:::i;:::-;;:::i;44720:3961::-;;;;;;;;;;-1:-1:-1;44720:3961:0;;;;;:::i;:::-;;:::i;30085:58::-;;;;;;;;;;-1:-1:-1;30085:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;28347:56;;;;;;;;;;-1:-1:-1;28347:56:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;28450:36::-;;;;;;;;;;;;;;;;3361:103;;;;;;;;;;;;;:::i;30502:67::-;;;;;;;;;;-1:-1:-1;30502:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;29196:57;;;;;;;;;;-1:-1:-1;29196:57:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4990:32:1;;;4972:51;;5054:2;5039:18;;5032:34;;;;5082:18;;;5075:34;5140:2;5125:18;;5118:34;4959:3;4944:19;29196:57:0;4741:417:1;28930:49:0;;;;;;;;;;-1:-1:-1;28930:49:0;;;;;:::i;:::-;;:::i;31087:63::-;;;;;;;;;;;;;:::i;32143:197::-;;;;;;;;;;;;;:::i;32798:190::-;;;;;;;;;;-1:-1:-1;32798:190:0;;;;;:::i;:::-;;:::i;2686:87::-;;;;;;;;;;-1:-1:-1;2732:7:0;2759:6;-1:-1:-1;;;;;2759:6:0;2686:87;;34588:549;;;;;;;;;;-1:-1:-1;34588:549:0;;;;;:::i;:::-;;:::i;33164:444::-;;;;;;;;;;-1:-1:-1;33164:444:0;;;;;:::i;:::-;;:::i;35145:114::-;;;;;;;;;;-1:-1:-1;35145:114:0;;;;;:::i;:::-;;:::i;28412:31::-;;;;;;;;;;;;;;;;30005:35;;;;;;;;;;;;;;;;31731:171;;;;;;;;;;-1:-1:-1;31731:171:0;;;;;:::i;:::-;;:::i;38131:2684::-;;;;;;:::i;:::-;;:::i;48689:1607::-;;;;;;;;;;-1:-1:-1;48689:1607:0;;;;;:::i;:::-;;:::i;34209:371::-;;;;;;;;;;-1:-1:-1;34209:371:0;;;;;:::i;:::-;;:::i;30342:51::-;;;;;;;;;;-1:-1:-1;30342:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;28741:72;;;;;;;;;;-1:-1:-1;28741:72:0;;;;-1:-1:-1;;;;;28741:72:0;;;30219:55;;;;;;;;;;-1:-1:-1;30219:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;28551:27;;;;;;;;;;-1:-1:-1;28551:27:0;;;;-1:-1:-1;;;;;28551:27:0;;;29118:69;;;;;;;;;;-1:-1:-1;29118:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;31392:181;;;;;;;;;;-1:-1:-1;31392:181:0;;;;;:::i;:::-;;:::i;30281:54::-;;;;;;;;;;-1:-1:-1;30281:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;30426:69;;;;;;;;;;-1:-1:-1;30426:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;31910:225;;;;;;;;;;-1:-1:-1;31910:225:0;;;;;:::i;:::-;;:::i;28822:41::-;;;;;;;;;;-1:-1:-1;28822:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28822:41:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28822:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28822:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32611:179::-;;;;;;;;;;-1:-1:-1;32611:179:0;;;;;:::i;:::-;;:::i;50304:129::-;;;;;;;;;;-1:-1:-1;50304:129:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35488:2635::-;;;;;;:::i;:::-;;:::i;28625:44::-;;;;;;;;;;;;28667:2;28625:44;;32996:160;;;;;;;;;;-1:-1:-1;32996:160:0;;;;;:::i;:::-;;:::i;3619:220::-;;;;;;;;;;-1:-1:-1;3619:220:0;;;;;:::i;:::-;;:::i;32348:255::-;;;;;;;;;;-1:-1:-1;32348:255:0;;;;;:::i;:::-;;:::i;31581:142::-;2572:13;:11;:13::i;:::-;31665:4:::1;31657;:12;;31649:37;;;::::0;-1:-1:-1;;;31649:37:0;;12678:2:1;31649:37:0::1;::::0;::::1;12660:21:1::0;12717:2;12697:18;;;12690:30;-1:-1:-1;;;12736:18:1;;;12729:42;12788:18;;31649:37:0::1;;;;;;;;;31697:11;:18:::0;31581:142::o;29322:29::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29322:29:0;:::o;40823:3889::-;6542:21;:19;:21::i;:::-;8715:19:::1;:17;:19::i;:::-;28047:10:::2;28061:9;28047:23;::::0;:56:::2;;-1:-1:-1::0;28092:10:0::2;28074:29;::::0;;;:17:::2;:29;::::0;;;;;::::2;;28047:56;28025:143;;;;-1:-1:-1::0;;;28025:143:0::2;;;;;;;:::i;:::-;40931:16:::3;40950:17:::0;;;:7:::3;:17;::::0;;;;40998:19:::3;40986:8;::::0;::::3;::::0;::::3;;:31;::::0;::::3;;;;;;:::i;:::-;;40978:75;;;::::0;-1:-1:-1;;;40978:75:0;;13425:2:1;40978:75:0::3;::::0;::::3;13407:21:1::0;13464:2;13444:18;;;13437:30;13503:33;13483:18;;;13476:61;13554:18;;40978:75:0::3;13223:355:1::0;40978:75:0::3;41072:18;::::0;-1:-1:-1;;;;;41072:18:0::3;41064:80;;;::::0;-1:-1:-1;;;41064:80:0;;13785:2:1;41064:80:0::3;::::0;::::3;13767:21:1::0;13824:2;13804:18;;;13797:30;13863:34;13843:18;;;13836:62;-1:-1:-1;;;13914:18:1;;;13907:33;13957:19;;41064:80:0::3;13583:399:1::0;41064:80:0::3;41163:12;::::0;-1:-1:-1;;;;;41163:12:0::3;41155:68;;;::::0;-1:-1:-1;;;41155:68:0;;14189:2:1;41155:68:0::3;::::0;::::3;14171:21:1::0;14228:2;14208:18;;;14201:30;14267:31;14247:18;;;14240:59;14316:18;;41155:68:0::3;13987:353:1::0;41155:68:0::3;41243:28;::::0;;;:18:::3;:28;::::0;;;;;::::3;;41242:29;41234:79;;;::::0;-1:-1:-1;;;41234:79:0;;14547:2:1;41234:79:0::3;::::0;::::3;14529:21:1::0;14586:2;14566:18;;;14559:30;14625:34;14605:18;;;14598:62;-1:-1:-1;;;14676:18:1;;;14669:35;14721:19;;41234:79:0::3;14345:401:1::0;41234:79:0::3;41430:18;::::0;41410:60:::3;::::0;-1:-1:-1;;;41410:60:0;;::::3;::::0;::::3;1418:25:1::0;;;41326:14:0::3;::::0;;;-1:-1:-1;;;;;41430:18:0;;::::3;::::0;41410:50:::3;::::0;1391:18:1;;41410:60:0::3;::::0;::::3;;;;;;;;;;;;;;;;-1:-1:-1::0;41410:60:0::3;::::0;;::::3;;::::0;;::::3;-1:-1:-1::0;;41410:60:0::3;::::0;::::3;::::0;;;::::3;::::0;;::::3;::::0;::::3;:::i;:::-;;;41406:564;;;;:::i;:::-;;;::::0;::::3;;;;;:::i;:::-;;;;;;;;41743:6;41699:51;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;41699:51:0;;::::3;::::0;;;;;;;-1:-1:-1;;;41685:67:0;;::::3;::::0;::::3;;;:::i;41406:564::-;;::::0;::::3;;;;:::i;:::-;;;;;;;;41865:17;41872:9;41865:6;:17::i;:::-;41825:58;;;;;;;;:::i;41406:564::-;41919:39;::::0;-1:-1:-1;;;41919:39:0;;17899:2:1;41919:39:0::3;::::0;::::3;17881:21:1::0;17938:2;17918:18;;;17911:30;17977:31;17957:18;;;17950:59;18026:18;;41919:39:0::3;17697:353:1::0;41406:564:0::3;-1:-1:-1::0;;;;;41526:15:0;::::3;41518:50;;;::::0;-1:-1:-1;;;41518:50:0;;18257:2:1;41518:50:0::3;::::0;::::3;18239:21:1::0;18296:2;18276:18;;;18269:30;-1:-1:-1;;;18315:18:1;;;18308:52;18377:18;;41518:50:0::3;18055:346:1::0;41518:50:0::3;41982:28;::::0;;;:18:::3;:28;::::0;;;;;;;:35;;-1:-1:-1;;41982:35:0;;::::3;42013:4;41982:35:::0;;::::3;::::0;;;42054:93;;;;::::3;::::0;;-1:-1:-1;;;;;42054:93:0;;::::3;::::0;;;;;::::3;::::0;;;42028:23;;;:13:::3;:23:::0;;;;;;:119;;;;;::::3;-1:-1:-1::0;;;;;;42028:119:0;;::::3;;::::0;;;;;;;::::3;::::0;42160:8:::3;::::0;::::3;:32:::0;;;;::::3;42171:21;42160:32;::::0;;42203:14;;;:23;;;;::::3;::::0;::::3;::::0;;42237:20;;;:33;;;42288:42;1418:25:1;;;42054:93:0;;-1:-1:-1;42054:93:0;;-1:-1:-1;42054:93:0;41982:28;;42288:42:::3;::::0;1391:18:1;42288:42:0::3;;;;;;;42390:12;::::0;;42420:9;::::3;::::0;42377:53:::3;::::0;-1:-1:-1;;;42377:53:0;;-1:-1:-1;;;;;42420:9:0;;::::3;42377:53;::::0;::::3;1709:51:1::0;42360:14:0::3;::::0;42390:12;;;::::3;::::0;42377:42:::3;::::0;1682:18:1;;42377:53:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42360:70:::0;-1:-1:-1;42441:16:0::3;28667:2;42461:11;28667:2:::0;42360:70;42461:11:::3;:::i;:::-;42460:31;;;;:::i;:::-;42441:50;;42502:11;42530:8;42516:11;;:22;:51;;42566:1;42516:51;;;42555:8;42541:11;;:22;;;;:::i;:::-;42502:65;;42578:11;42621:5;42614:3;42593:1;:7;;:18;;;:24;;;;:::i;:::-;42592:34;;;;:::i;:::-;42578:48;;42639:20;42683:3;42662:1;:7;;:18;;;:24;;;;:::i;:::-;42697:17:::0;;;:23;;;42816:17:::3;::::0;::::3;::::0;42639:47;;-1:-1:-1;42790:23:0::3;::::0;-1:-1:-1;;;42816:17:0;::::3;;;:83;;42890:9;::::0;::::3;::::0;-1:-1:-1;;;;;42890:9:0::3;42816:83;;;42844:42;42816:83;42916:13;::::0;::::3;::::0;42790:109;;-1:-1:-1;;;;;;42916:13:0::3;42912:655;;43025:12;::::0;43017:42:::3;::::0;42999:12:::3;::::0;-1:-1:-1;;;;;43025:12:0::3;::::0;43051:3;;42999:12;43017:42;42999:12;43017:42;43051:3;43025:12;43017:42:::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:61;;;43082:7;43074:46;;;::::0;-1:-1:-1;;;43074:46:0;;19713:2:1;43074:46:0::3;::::0;::::3;19695:21:1::0;19752:2;19732:18;;;19725:30;19791:28;19771:18;;;19764:56;19837:18;;43074:46:0::3;19511:350:1::0;43074:46:0::3;43138:16;43168:15;-1:-1:-1::0;;;;;43160:29:0::3;43197:12;43160:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43137:77;;;43237:11;43229:55;;;::::0;-1:-1:-1;;;43229:55:0;;20068:2:1;43229:55:0::3;::::0;::::3;20050:21:1::0;20107:2;20087:18;;;20080:30;20146:33;20126:18;;;20119:61;20197:18;;43229:55:0::3;19866:355:1::0;43229:55:0::3;42945:351;;42912:655;;;43364:13;::::0;;::::3;::::0;43388:12:::3;::::0;43357:49:::3;::::0;-1:-1:-1;;;43357:49:0;;-1:-1:-1;;;;;43388:12:0;;::::3;43357:49:::0;;::::3;2379:51:1::0;;;;2446:18;;;2439:34;;;43364:13:0::3;::::0;43357:30:::3;::::0;2352:18:1;;43357:49:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43349:87;;;::::0;-1:-1:-1;;;43349:87:0;;20678:2:1;43349:87:0::3;::::0;::::3;20660:21:1::0;20717:2;20697:18;;;20690:30;20756:27;20736:18;;;20729:55;20801:18;;43349:87:0::3;20476:349:1::0;43349:87:0::3;43466:13;::::0;;::::3;::::0;43459:61:::3;::::0;-1:-1:-1;;;43459:61:0;;-1:-1:-1;;;;;2397:32:1;;;43459:61:0;;::::3;2379:51:1::0;;;;2446:18;;;2439:34;;;43466:13:0;::::3;::::0;43459:30:::3;::::0;2352:18:1;;43459:61:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43451:104;;;::::0;-1:-1:-1;;;43451:104:0;;21032:2:1;43451:104:0::3;::::0;::::3;21014:21:1::0;21071:2;21051:18;;;21044:30;21110:32;21090:18;;;21083:60;21160:18;;43451:104:0::3;20830:354:1::0;43451:104:0::3;43621:16;43610:7;::::0;;::::3;::::0;-1:-1:-1;;;43610:7:0;::::3;;;::::0;:27;::::3;;;;;;:::i;:::-;::::0;43606:704:::3;;43658:14;::::0;::::3;::::0;-1:-1:-1;;;;;43658:14:0::3;43654:375;;43781:17;::::0;::::3;::::0;43753:50:::3;::::0;43735:12:::3;::::0;-1:-1:-1;;;;;43753:20:0;::::3;::::0;43735:12;43753:50;43735:12;43753:50;43781:17;43753:20;:50:::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43734:69;;;43830:7;43822:52;;;::::0;-1:-1:-1;;;43822:52:0;;21391:2:1;43822:52:0::3;::::0;::::3;21373:21:1::0;;;21410:18;;;21403:30;21469:34;21449:18;;;21442:62;21521:18;;43822:52:0::3;21189:356:1::0;43822:52:0::3;43688:202;43654:375;;;43930:14;::::0;::::3;::::0;43963:17:::3;::::0;::::3;::::0;43923:58:::3;::::0;-1:-1:-1;;;43923:58:0;;-1:-1:-1;;;;;2397:32:1;;;43923:58:0::3;::::0;::::3;2379:51:1::0;2446:18;;;2439:34;;;;43930:14:0;::::3;::::0;43923:31:::3;::::0;2352:18:1;;43923:58:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43915:98;;;::::0;-1:-1:-1;;;43915:98:0;;21752:2:1;43915:98:0::3;::::0;::::3;21734:21:1::0;21791:2;21771:18;;;21764:30;21830:29;21810:18;;;21803:57;21877:18;;43915:98:0::3;21550:351:1::0;43915:98:0::3;44083:17;::::0;::::3;::::0;-1:-1:-1;;;;;44043:20:0;;::::3;;::::0;;;:12:::3;:20;::::0;;;;;;;44064:14:::3;::::0;::::3;::::0;;;::::3;44043:36:::0;;;;;;;;:57;;:36;;:20;:57:::3;::::0;44083:17;;44043:57:::3;:::i;:::-;::::0;;;-1:-1:-1;43606:704:0::3;::::0;-1:-1:-1;43606:704:0::3;;44133:14;44122:7:::0;;;::::3;::::0;-1:-1:-1;;;44122:7:0;::::3;;;::::0;:25;::::3;;;;;;:::i;:::-;::::0;44118:192:::3;;44172:14;::::0;::::3;::::0;44224:17:::3;::::0;::::3;::::0;44164:78:::3;::::0;-1:-1:-1;;;44164:78:0;;-1:-1:-1;;;;;44172:14:0;;::::3;::::0;44164:36:::3;::::0;:78:::3;::::0;44209:4:::3;::::0;44216:6;;44164:78:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;44257:20:0;;::::3;;::::0;;;:12:::3;:20;::::0;;;;;;;44278:14:::3;::::0;::::3;::::0;;;::::3;44257:36:::0;;;;;;;;:41;;44297:1:::3;::::0;44257:20;:41:::3;::::0;44297:1;;44257:41:::3;:::i;:::-;::::0;;;-1:-1:-1;;44118:192:0::3;44340:20;:22:::0;;;:20:::3;:22;::::0;::::3;:::i;:::-;::::0;;;-1:-1:-1;;44393:7:0::3;::::0;::::3;:19:::0;44373:16:::3;:39:::0;;44393:19:::3;::::0;44373:39:::3;::::0;44393:19;;44373:39:::3;:::i;:::-;::::0;;;-1:-1:-1;;44465:7:0::3;::::0;::::3;:19:::0;44447:13:::3;::::0;::::3;::::0;-1:-1:-1;;;;;44447:13:0::3;44465:19;44423:38:::0;;;:23:::3;:38;::::0;;;;:61;;:38;;44465:19;44423:61:::3;::::0;44465:19;;44423:61:::3;:::i;:::-;::::0;;;-1:-1:-1;;44521:13:0::3;::::0;::::3;::::0;-1:-1:-1;;;;;44521:13:0::3;44495:40;::::0;;;:25:::3;:40;::::0;;;;:47;;44539:3;;44495:40;:47:::3;::::0;44539:3;;44495:47:::3;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;44553:24:0;::::3;;::::0;;;:16:::3;:24;::::0;;;;:26;;;::::3;::::0;::::3;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;44592:31:0;;::::3;;::::0;;;:14:::3;:31;::::0;;;;;;;44624:13:::3;::::0;::::3;::::0;;;::::3;44592:46:::0;;;;;;;;:62;;44642:12;;44592:31;:62:::3;::::0;44642:12;;44592:62:::3;:::i;:::-;::::0;;;-1:-1:-1;;44672:32:0::3;::::0;-1:-1:-1;;;;;1727:32:1;;1709:51;;44687:8:0;;44672:32:::3;::::0;1697:2:1;1682:18;44672:32:0::3;;;;;;;40920:3792;;;;;;;;;6586:20:::0;5980:1;7106:22;;6923:213;6586:20;40823:3889;:::o;31158:67::-;2572:13;:11;:13::i;:::-;31207:10:::1;:8;:10::i;:::-;31158:67::o:0;28242:59::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28242:59:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;28242:59:0;;;;;;;;;;;;-1:-1:-1;;;;;28242:59:0;;-1:-1:-1;28242:59:0;:::o;28870:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28200:35::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28200:35:0;;-1:-1:-1;28200:35:0;:::o;33616:585::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;33695:19:0;::::1;33687:47;;;;-1:-1:-1::0;;;33687:47:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33753:28:0;;::::1;33802:1;33753:28:::0;;;:21:::1;:28;::::0;;;;:37;::::1;33745:89;;;::::0;-1:-1:-1;;;33745:89:0;;23483:2:1;33745:89:0::1;::::0;::::1;23465:21:1::0;23522:2;23502:18;;;23495:30;23561:27;23541:18;;;23534:55;23606:18;;33745:89:0::1;23281:349:1::0;33745:89:0::1;-1:-1:-1::0;;;;;33854:28:0;::::1;;::::0;;;:21:::1;:28;::::0;;;;33847:35;;-1:-1:-1;;;;;;33847:35:0::1;::::0;;33854:28;33847:35:::1;::::0;;::::1;33854:28:::0;33847:35:::1;:::i;:::-;-1:-1:-1::0;33847:35:0::1;;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;33847:35:0::1;::::0;;33909:18:::1;:25:::0;;33945:249:::1;33969:3;33965:1;:7;33945:249;;;34023:5;-1:-1:-1::0;;;;;33998:30:0::1;:18;34017:1;33998:21;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33998:21:0::1;:30:::0;33994:189:::1;;34073:18;34092:7;34098:1;34092:3:::0;:7:::1;:::i;:::-;34073:27;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;34049:18:::1;:21:::0;;-1:-1:-1;;;;;34073:27:0;;::::1;::::0;34068:1;;34049:21;::::1;;;;;:::i;:::-;;;;;;;;;:51;;;;;-1:-1:-1::0;;;;;34049:51:0::1;;;;;-1:-1:-1::0;;;;;34049:51:0::1;;;;;;34119:18;:24;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34119:24:0;;;;;-1:-1:-1;;;;;;34119:24:0::1;::::0;;;;;33945:249:::1;33676:525;33616:585:::0;:::o;33994:189::-:1;33974:3;;33945:249;;;;33676:525;33616:585:::0;:::o;31233:151::-;2572:13;:11;:13::i;:::-;31315:1:::1;31308:4;:8;:24;;;;;31328:4;31320;:12;;31308:24;31300:48;;;::::0;-1:-1:-1;;;31300:48:0;;24101:2:1;31300:48:0::1;::::0;::::1;24083:21:1::0;24140:2;24120:18;;;24113:30;-1:-1:-1;;;24159:18:1;;;24152:41;24210:18;;31300:48:0::1;23899:335:1::0;31300:48:0::1;31359:10;:17:::0;31233:151::o;28310:30::-;;;;;;;;;;;;44720:3961;6542:21;:19;:21::i;:::-;8715:19:::1;:17;:19::i;:::-;28047:10:::2;28061:9;28047:23;::::0;:56:::2;;-1:-1:-1::0;28092:10:0::2;28074:29;::::0;;;:17:::2;:29;::::0;;;;;::::2;;28047:56;28025:143;;;;-1:-1:-1::0;;;28025:143:0::2;;;;;;;:::i;:::-;44833:16:::3;44852:17:::0;;;:7:::3;:17;::::0;;;;44902:9:::3;::::0;::::3;::::0;-1:-1:-1;;;;;44902:9:0::3;44888:10;:23;44880:47;;;::::0;-1:-1:-1;;;44880:47:0;;24441:2:1;44880:47:0::3;::::0;::::3;24423:21:1::0;24480:2;24460:18;;;24453:30;-1:-1:-1;;;24499:18:1;;;24492:41;24550:18;;44880:47:0::3;24239:335:1::0;44880:47:0::3;44958:20;44946:8;::::0;::::3;::::0;::::3;;:32;::::0;::::3;;;;;;:::i;:::-;;44938:59;;;::::0;-1:-1:-1;;;44938:59:0;;24781:2:1;44938:59:0::3;::::0;::::3;24763:21:1::0;24820:2;24800:18;;;24793:30;-1:-1:-1;;;24839:18:1;;;24832:44;24893:18;;44938:59:0::3;24579:338:1::0;44938:59:0::3;45016:7;::::0;::::3;:19:::0;45008:51:::3;;;::::0;-1:-1:-1;;;45008:51:0;;25124:2:1;45008:51:0::3;::::0;::::3;25106:21:1::0;25163:2;25143:18;;;25136:30;-1:-1:-1;;;25182:18:1;;;25175:45;25237:18;;45008:51:0::3;24922:339:1::0;45008:51:0::3;45078:18;::::0;-1:-1:-1;;;;;45078:18:0::3;45070:59;;;::::0;-1:-1:-1;;;45070:59:0;;25468:2:1;45070:59:0::3;::::0;::::3;25450:21:1::0;25507:2;25487:18;;;25480:30;-1:-1:-1;;;25526:18:1;;;25519:44;25580:18;;45070:59:0::3;25266:338:1::0;45070:59:0::3;45148:12;::::0;-1:-1:-1;;;;;45148:12:0::3;45140:60;;;::::0;-1:-1:-1;;;45140:60:0;;25811:2:1;45140:60:0::3;::::0;::::3;25793:21:1::0;25850:2;25830:18;;;25823:30;-1:-1:-1;;;25869:18:1;;;25862:51;25930:18;;45140:60:0::3;25609:345:1::0;45140:60:0::3;45220:28;::::0;;;:18:::3;:28;::::0;;;;;::::3;;45219:29;45211:63;;;::::0;-1:-1:-1;;;45211:63:0;;26161:2:1;45211:63:0::3;::::0;::::3;26143:21:1::0;26200:2;26180:18;;;26173:30;-1:-1:-1;;;26219:18:1;;;26212:51;26280:18;;45211:63:0::3;25959:345:1::0;28347:56:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28347:56:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3361:103::-;2572:13;:11;:13::i;:::-;3426:30:::1;3453:1;3426:18;:30::i;29196:57::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29196:57:0;;;;-1:-1:-1;29196:57:0;-1:-1:-1;29196:57:0;:::o;28930:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28930:49:0;;-1:-1:-1;28930:49:0;;-1:-1:-1;28930:49:0:o;31087:63::-;2572:13;:11;:13::i;:::-;31134:8:::1;:6;:8::i;32143:197::-:0;2572:13;:11;:13::i;:::-;32214:21:::1;32254:11:::0;32246:31:::1;;;::::0;-1:-1:-1;;;32246:31:0;;26511:2:1;32246:31:0::1;::::0;::::1;26493:21:1::0;26550:1;26530:18;;;26523:29;-1:-1:-1;;;26568:18:1;;;26561:37;26615:18;;32246:31:0::1;26309:330:1::0;32246:31:0::1;32288:44;32314:7;2732::::0;2759:6;-1:-1:-1;;;;;2759:6:0;;2686:87;32314:7:::1;32324;32288:17;:44::i;32798:190::-:0;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;32884:28:0;::::1;;::::0;;;:17:::1;:28;::::0;;;;;::::1;;32876:57;;;::::0;-1:-1:-1;;;32876:57:0;;26846:2:1;32876:57:0::1;::::0;::::1;26828:21:1::0;26885:2;26865:18;;;26858:30;-1:-1:-1;;;26904:18:1;;;26897:46;26960:18;;32876:57:0::1;26644:340:1::0;32876:57:0::1;-1:-1:-1::0;;;;;32944:28:0::1;32975:5;32944:28:::0;;;:17:::1;:28;::::0;;;;:36;;-1:-1:-1;;32944:36:0::1;::::0;;32798:190::o;34588:549::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;34669:19:0;::::1;34661:45;;;::::0;-1:-1:-1;;;34661:45:0;;27191:2:1;34661:45:0::1;::::0;::::1;27173:21:1::0;27230:2;27210:18;;;27203:30;-1:-1:-1;;;27249:18:1;;;27242:43;27302:18;;34661:45:0::1;26989:337:1::0;34661:45:0::1;-1:-1:-1::0;;;;;34725:23:0;;::::1;34773:1;34725:23:::0;;;:16:::1;:23;::::0;;;;:36;::::1;34717:83;;;::::0;-1:-1:-1;;;34717:83:0;;27533:2:1;34717:83:0::1;::::0;::::1;27515:21:1::0;27572:2;27552:18;;;27545:30;-1:-1:-1;;;27591:18:1;;;27584:50;27651:18;;34717:83:0::1;27331:344:1::0;34717:83:0::1;-1:-1:-1::0;;;;;34820:23:0;::::1;;::::0;;;:16:::1;:23;::::0;;;;34813:30;;-1:-1:-1;;;;;;34813:30:0::1;::::0;;34820:23;34813:30:::1;::::0;;::::1;34820:23:::0;34813:30:::1;:::i;:::-;-1:-1:-1::0;;34870:13:0::1;:20:::0;34856:11:::1;34901:229;34925:3;34921:1;:7;34901:229;;;34974:5;-1:-1:-1::0;;;;;34954:25:0::1;:13;34968:1;34954:16;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34954:16:0::1;:25:::0;34950:169:::1;;35019:13;35033:7;35039:1;35033:3:::0;:7:::1;:::i;:::-;35019:22;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;35000:13:::1;:16:::0;;-1:-1:-1;;;;;35019:22:0;;::::1;::::0;35014:1;;35000:16;::::1;;;;;:::i;:::-;;;;;;;;;:41;;;;;-1:-1:-1::0;;;;;35000:41:0::1;;;;;-1:-1:-1::0;;;;;35000:41:0::1;;;;;;35060:13;:19;;;;;;;:::i;34950:169::-;34930:3;;34901:229;;33164:444:::0;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;33311:19:0;::::1;33303:47;;;;-1:-1:-1::0;;;33303:47:0::1;;;;;;;:::i;:::-;33384:4;33369:11;:19;;33361:48;;;::::0;-1:-1:-1;;;33361:48:0;;27882:2:1;33361:48:0::1;::::0;::::1;27864:21:1::0;27921:2;27901:18;;;27894:30;-1:-1:-1;;;27940:18:1;;;27933:46;27996:18;;33361:48:0::1;27680:340:1::0;33361:48:0::1;-1:-1:-1::0;;;;;33424:28:0;;::::1;33473:1;33424:28:::0;;;:21:::1;:28;::::0;;;;:37;::::1;33420:87;;33477:18;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;33477:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;33477:30:0::1;-1:-1:-1::0;;;;;33477:30:0;::::1;;::::0;;33420:87:::1;33549:51;;;;;;;;33560:5;-1:-1:-1::0;;;;;33549:51:0::1;;;;;33567:5;;33549:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;33549:51:0;;;-1:-1:-1;;;33549:51:0::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;33549:51:0;;::::1;::::0;;;;;33518:28;;::::1;::::0;;:21:::1;:28:::0;;;;;;:82;;;;-1:-1:-1;;;;;;33518:82:0::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;33518:82:0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;33518:82:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;33518:82:0::1;-1:-1:-1::0;;;;;33518:82:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;33164:444:0:o;35145:114::-;2572:13;:11;:13::i;:::-;35223:18:::1;:28:::0;;-1:-1:-1;;;;;;35223:28:0::1;-1:-1:-1::0;;;;;35223:28:0;;;::::1;::::0;;;::::1;::::0;;35145:114::o;31731:171::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;31814:24:0;::::1;31806:52;;;;-1:-1:-1::0;;;31806:52:0::1;;;;;;;:::i;:::-;31869:12;:25:::0;;-1:-1:-1;;;;;;31869:25:0::1;-1:-1:-1::0;;;;;31869:25:0;;;::::1;::::0;;;::::1;::::0;;31731:171::o;38131:2684::-;6542:21;:19;:21::i;:::-;8715:19:::1;:17;:19::i;:::-;28047:10:::2;28061:9;28047:23;::::0;:56:::2;;-1:-1:-1::0;28092:10:0::2;28074:29;::::0;;;:17:::2;:29;::::0;;;;;::::2;;28047:56;28025:143;;;;-1:-1:-1::0;;;28025:143:0::2;;;;;;;:::i;:::-;38298:1:::3;38289:6;:10;38281:37;;;::::0;-1:-1:-1;;;38281:37:0;;30351:2:1;38281:37:0::3;::::0;::::3;30333:21:1::0;30390:2;30370:18;;;30363:30;-1:-1:-1;;;30409:18:1;;;30402:44;30463:18;;38281:37:0::3;30149:338:1::0;38281:37:0::3;38331:16;38350:17:::0;;;:7:::3;:17;::::0;;;;;38386:8:::3;::::0;::::3;::::0;::::3;;:32;::::0;::::3;;;;;;:::i;:::-;;38378:58;;;::::0;-1:-1:-1;;;38378:58:0;;30694:2:1;38378:58:0::3;::::0;::::3;30676:21:1::0;30733:2;30713:18;;;30706:30;-1:-1:-1;;;30752:18:1;;;30745:43;30805:18;;38378:58:0::3;30492:337:1::0;38378:58:0::3;38473:1;:14;;;38455:15;:32;38447:57;;;::::0;-1:-1:-1;;;38447:57:0;;31036:2:1;38447:57:0::3;::::0;::::3;31018:21:1::0;31075:2;31055:18;;;31048:30;-1:-1:-1;;;31094:18:1;;;31087:42;31146:18;;38447:57:0::3;30834:336:1::0;38447:57:0::3;38537:9;::::0;::::3;::::0;-1:-1:-1;;;;;38537:9:0::3;38523:10;:23:::0;38515:67:::3;;;::::0;-1:-1:-1;;;38515:67:0;;31377:2:1;38515:67:0::3;::::0;::::3;31359:21:1::0;31416:2;31396:18;;;31389:30;31455:33;31435:18;;;31428:61;31506:18;;38515:67:0::3;31175:355:1::0;38515:67:0::3;38599:11;::::0;::::3;::::0;::::3;::::0;::::3;-1:-1:-1::0;;;;;38599:11:0::3;:25:::0;38595:776:::3;;38677:15;::::0;38662:11:::3;::::0;::::3;::::0;38677:15:::3;::::0;;;::::3;-1:-1:-1::0;;;;;38677:15:0;;::::3;38662:11:::0;;;::::3;;:30;38641:17;38732:382:::0;::::3;;;38795:11;::::0;::::3;::::0;38787:41:::3;::::0;-1:-1:-1;;;38787:41:0;;38769:15:::3;::::0;38832:10:::3;::::0;38795:11:::3;::::0;;::::3;-1:-1:-1::0;;;;;38795:11:0::3;::::0;38787:28:::3;::::0;:41:::3;::::0;38816:11;;38787:41:::3;;1418:25:1::0;;;1406:2;1391:18;;1272:177;38787:41:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38892:12;::::0;38879:52:::3;::::0;-1:-1:-1;;;38879:52:0;;::::3;::::0;::::3;1418:25:1::0;;;-1:-1:-1;;;;;38787:55:0;;::::3;::::0;;;::::3;::::0;-1:-1:-1;38861:15:0::3;::::0;38935:10:::3;::::0;38892:12;;::::3;::::0;38879:39:::3;::::0;1391:18:1;;38879:52:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38879:66:0::3;;38861:84;;38970:10;:24;;;;38984:10;38970:24;38964:31;;38750:261;;38732:382;;;39050:11;::::0;::::3;::::0;39042:41:::3;::::0;-1:-1:-1;;;39042:41:0;;::::3;::::0;::::3;1418:25:1::0;;;39087:10:0::3;::::0;39050:11:::3;::::0;::::3;-1:-1:-1::0;;;;;39050:11:0::3;::::0;39042:28:::3;::::0;1391:18:1;;39042:41:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39042:55:0::3;;39036:62;;38732:382;39138:2;39130:45;;;::::0;-1:-1:-1;;;39130:45:0;;31993:2:1;39130:45:0::3;::::0;::::3;31975:21:1::0;32032:2;32012:18;;;32005:30;32071:32;32051:18;;;32044:60;32121:18;;39130:45:0::3;31791:354:1::0;39130:45:0::3;39199:27;::::0;;;:17:::3;:27;::::0;;;;;;;:40;;;;;;;;;::::3;;39198:41;39190:83;;;::::0;-1:-1:-1;;;39190:83:0;;32352:2:1;39190:83:0::3;::::0;::::3;32334:21:1::0;32391:2;32371:18;;;32364:30;32430:31;32410:18;;;32403:59;32479:18;;39190:83:0::3;32150:353:1::0;39190:83:0::3;38626:659;;38595:776;;;39314:16:::0;;39306:53:::3;;;::::0;-1:-1:-1;;;39306:53:0;;32710:2:1;39306:53:0::3;::::0;::::3;32692:21:1::0;32749:2;32729:18;;;32722:30;32788:26;32768:18;;;32761:54;32832:18;;39306:53:0::3;32508:348:1::0;39306:53:0::3;39419:7;::::0;::::3;:19:::0;39403:13:::3;::::0;::::3;::::0;39383:17:::3;::::0;39403:35:::3;::::0;::::3;:::i;:::-;39383:55;;39467:9;39457:6;:19;;39449:55;;;::::0;-1:-1:-1;;;39449:55:0;;33063:2:1;39449:55:0::3;::::0;::::3;33045:21:1::0;33102:2;33082:18;;;33075:30;33141:25;33121:18;;;33114:53;33184:18;;39449:55:0::3;32861:347:1::0;39449:55:0::3;39517:21;39541:23:::0;;;:13:::3;:23;::::0;;;;;;;39565:10:::3;39541:35:::0;;;;;;;;39621:12:::3;::::0;::::3;::::0;39595:22:::3;39611:6:::0;39541:35;39595:22:::3;:::i;:::-;:38;;39587:73;;;::::0;-1:-1:-1;;;39587:73:0;;33415:2:1;39587:73:0::3;::::0;::::3;33397:21:1::0;33454:2;33434:18;;;33427:30;-1:-1:-1;;;33473:18:1;;;33466:52;33535:18;;39587:73:0::3;33213:346:1::0;39587:73:0::3;39673:13;39705:6;39689:1;:13;;;:22;;;;:::i;:::-;39728:13;::::0;::::3;::::0;39673:38;;-1:-1:-1;;;;;;39728:13:0::3;39724:240;;39793:5;39780:9;:18;39772:52;;;::::0;-1:-1:-1;;;39772:52:0;;33766:2:1;39772:52:0::3;::::0;::::3;33748:21:1::0;33805:2;33785:18;;;33778:30;-1:-1:-1;;;33824:18:1;;;33817:51;33885:18;;39772:52:0::3;33564:345:1::0;39772:52:0::3;39724:240;;;39872:13;::::0;;::::3;::::0;39865:68:::3;::::0;-1:-1:-1;;;39865:68:0;;-1:-1:-1;;;;;39872:13:0;;::::3;::::0;39865:34:::3;::::0;:68:::3;::::0;39900:10:::3;::::0;39920:4:::3;::::0;39927:5;;39865:68:::3;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39857:95;;;::::0;-1:-1:-1;;;39857:95:0;;34116:2:1;39857:95:0::3;::::0;::::3;34098:21:1::0;34155:2;34135:18;;;34128:30;-1:-1:-1;;;34174:18:1;;;34167:44;34228:18;;39857:95:0::3;33914:338:1::0;39857:95:0::3;39980:13;39997:1;39980:18:::0;39976:90:::3;;40015:22;::::0;;;:12:::3;:22;::::0;;;;;;:39;;::::3;::::0;::::3;::::0;;;;;;;::::3;::::0;;-1:-1:-1;;;;;;40015:39:0::3;40043:10;40015:39;::::0;;39976:90:::3;40078:23;::::0;;;:13:::3;:23;::::0;;;;;;;40102:10:::3;40078:35:::0;;;;;;;:45;;40117:6;;40078:23;:45:::3;::::0;40117:6;;40078:45:::3;:::i;:::-;::::0;;;-1:-1:-1;;40134:7:0::3;::::0;::::3;:29:::0;;40157:6;;40134:7;:19:::3;::::0;:29:::3;::::0;40157:6;;40134:29:::3;:::i;:::-;::::0;;;-1:-1:-1;;40174:18:0;;;:27;;40196:5;;40174:18;::::3;::::0;:27:::3;::::0;40196:5;;40174:27:::3;:::i;:::-;::::0;;;-1:-1:-1;;40214:23:0::3;::::0;;;:13:::3;:23;::::0;;;;;;;40243:168;;::::3;::::0;::::3;::::0;;40280:10:::3;40243:168:::0;;;;;::::3;::::0;;;40345:15:::3;40243:168:::0;;;;;;;;;;;;40214:198;;::::3;::::0;;::::3;::::0;;;;;;;;;;::::3;::::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;;;;;;40214:198:0::3;-1:-1:-1::0;;;;;40214:198:0;;::::3;::::0;;;::::3;::::0;;;;;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;;::::3;::::0;;::::3;::::0;40425:31;;:19:::3;:31:::0;;;;;:41;;40243:168;;40214:23;40425:41:::3;::::0;40243:168;;40425:41:::3;:::i;:::-;;;;;;;;40497:6;40477:16;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;40520:11:0::3;::::0;::::3;::::0;::::3;::::0;::::3;-1:-1:-1::0;;;;;40520:11:0::3;:25:::0;40516:105:::3;;40562:27;::::0;;;:17:::3;:27;::::0;;;;;;;:40;;;;;;;;:47;;-1:-1:-1;;40562:47:0::3;40605:4;40562:47;::::0;;40516:105:::3;40638:58;::::0;;34431:25:1;;;34487:2;34472:18;;34465:34;;;40664:10:0::3;::::0;40654:8;;40638:58:::3;::::0;34404:18:1;40638:58:0::3;;;;;;;40736:13;::::0;::::3;::::0;40713:7:::3;::::0;::::3;:19:::0;:36;40709:99:::3;;40766:8;::::0;::::3;:30:::0;;-1:-1:-1;;40766:30:0::3;40777:19;40766:30;::::0;;40709:99:::3;38270:2545;;;;6586:20:::0;5980:1;7106:22;;6923:213;48689:1607;6542:21;:19;:21::i;:::-;8715:19:::1;:17;:19::i;:::-;48785:16:::2;48804:17:::0;;;:7:::2;:17;::::0;;;;48854:9:::2;::::0;::::2;::::0;-1:-1:-1;;;;;48854:9:0::2;48840:10;:23;::::0;:48:::2;;-1:-1:-1::0;2732:7:0;2759:6;-1:-1:-1;;;;;2759:6:0;48867:10:::2;:21;48840:48;48832:75;;;::::0;-1:-1:-1;;;48832:75:0;;34712:2:1;48832:75:0::2;::::0;::::2;34694:21:1::0;34751:2;34731:18;;;34724:30;-1:-1:-1;;;34770:18:1;;;34763:44;34824:18;;48832:75:0::2;34510:338:1::0;48832:75:0::2;48938:20;48926:8;::::0;::::2;::::0;::::2;;:32;::::0;::::2;;;;;;:::i;:::-;;48918:59;;;::::0;-1:-1:-1;;;48918:59:0;;24781:2:1;48918:59:0::2;::::0;::::2;24763:21:1::0;24820:2;24800:18;;;24793:30;-1:-1:-1;;;24839:18:1;;;24832:44;24893:18;;48918:59:0::2;24579:338:1::0;48918:59:0::2;49002:7;::::0;::::2;:19:::0;:23;48998:121:::2;;49069:1;:14;;;49050:15;:33;;49042:65;;;::::0;-1:-1:-1;;;49042:65:0;;35055:2:1;49042:65:0::2;::::0;::::2;35037:21:1::0;35094:2;35074:18;;;35067:30;-1:-1:-1;;;35113:18:1;;;35106:49;35172:18;;49042:65:0::2;34853:343:1::0;49042:65:0::2;49131:8;::::0;::::2;:33:::0;;-1:-1:-1;;49131:33:0::2;49142:22;49131:33;::::0;;49181:7:::2;::::0;::::2;:19:::0;:23;49177:635:::2;;49221:23;49247:22:::0;;;:12:::2;:22;::::0;;;;;;;49221:48;;;;;;::::2;::::0;;;;;;;;;;;;49247:22;;49221:48;;::::2;49247:22:::0;49221:48;;::::2;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;49221:48:0::2;::::0;;;;;::::2;::::0;::::2;;::::0;;::::2;;;;-1:-1:-1::0;49221:48:0;;-1:-1:-1;49289:9:0::2;::::0;-1:-1:-1;;;;49284:517:0::2;49308:6;:13;49304:1;:17;49284:517;;;49347:13;49363:6;49370:1;49363:9;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;49391:11:::2;49405:23:::0;;;:13:::2;:23:::0;;;;;;-1:-1:-1;;;;;49405:30:0;::::2;::::0;;;;;;;;;;49363:9;;-1:-1:-1;49458:7:0;;49454:332:::2;;49490:14;49513:1;:13;;;49507:3;:19;;;;:::i;:::-;49553:13;::::0;::::2;::::0;49490:36;;-1:-1:-1;;;;;;49553:13:0::2;49549:218;;49609:32;-1:-1:-1::0;;;;;49609:24:0;::::2;49634:6:::0;49609:24:::2;:32::i;:::-;49549:218;;;49705:13;::::0;;::::2;::::0;49698:45:::2;::::0;-1:-1:-1;;;49698:45:0;;-1:-1:-1;;;;;2397:32:1;;;49698:45:0;;::::2;2379:51:1::0;;;;2446:18;;;2439:34;;;49705:13:0;::::2;::::0;49698:30:::2;::::0;2352:18:1;;49698:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49549:218;49467:319;49454:332;-1:-1:-1::0;;49323:3:0::2;;49284:517;;;;49206:606;49177:635;49839:16;49828:7;::::0;;::::2;::::0;-1:-1:-1;;;49828:7:0;::::2;;;::::0;:27;::::2;;;;;;:::i;:::-;::::0;49824:422:::2;;49876:14;::::0;::::2;::::0;-1:-1:-1;;;;;49876:14:0::2;49872:218;;49954:17;::::0;::::2;::::0;49933:9:::2;::::0;::::2;::::0;49925:47:::2;::::0;-1:-1:-1;;;;;49933:9:0;;::::2;::::0;49925:28:::2;:47::i;:::-;49824:422;;49872:218;50020:14;::::0;::::2;::::0;;50045:9;::::2;::::0;50056:17:::2;::::0;::::2;::::0;50013:61:::2;::::0;-1:-1:-1;;;50013:61:0;;-1:-1:-1;;;;;50045:9:0;;::::2;50013:61;::::0;::::2;2379:51:1::0;2446:18;;;2439:34;;;;50020:14:0;::::2;::::0;50013:31:::2;::::0;2352:18:1;;50013:61:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49824:422;;;50122:14;50111:7:::0;;;::::2;::::0;-1:-1:-1;;;50111:7:0;::::2;;;::::0;:25;::::2;;;;;;:::i;:::-;::::0;50107:139:::2;;50161:14;::::0;::::2;::::0;;50205:9;::::2;::::0;50216:17:::2;::::0;::::2;::::0;50153:81:::2;::::0;-1:-1:-1;;;50153:81:0;;-1:-1:-1;;;;;50161:14:0;;::::2;::::0;50153:36:::2;::::0;:81:::2;::::0;50198:4:::2;::::0;50205:9;;;::::2;::::0;50153:81:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50107:139;50263:25;::::0;50279:8;;50263:25:::2;::::0;;;::::2;48774:1522;6586:20:::0;5980:1;7106:22;;6923:213;34209:371;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;34317:19:0;::::1;34309:45;;;::::0;-1:-1:-1;;;34309:45:0;;27191:2:1;34309:45:0::1;::::0;::::1;27173:21:1::0;27230:2;27210:18;;;27203:30;-1:-1:-1;;;27249:18:1;;;27242:43;27302:18;;34309:45:0::1;26989:337:1::0;34309:45:0::1;34373:25:::0;34365:50:::1;;;::::0;-1:-1:-1;;;34365:50:0;;35403:2:1;34365:50:0::1;::::0;::::1;35385:21:1::0;35442:2;35422:18;;;35415:30;-1:-1:-1;;;35461:18:1;;;35454:42;35513:18;;34365:50:0::1;35201:336:1::0;34365:50:0::1;-1:-1:-1::0;;;;;34430:23:0;;::::1;34478:1;34430:23:::0;;;:16:::1;:23;::::0;;;;:36;::::1;34426:81;;34482:13;:25:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;34482:25:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;34482:25:0::1;-1:-1:-1::0;;;;;34482:25:0;::::1;;::::0;;34426:81:::1;34544:28;;;;;;;;34557:5;-1:-1:-1::0;;;;;34544:28:0::1;;;;;34564:7;;34544:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;34544:28:0;;;;-1:-1:-1;;;;;;;34518:23:0;;::::1;::::0;;:16:::1;:23;::::0;;;;;;;:54;;;;-1:-1:-1;;;;;;34518:54:0::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;:23;;-1:-1:-1;;34518:54:0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;;34209:371:0:o;31392:181::-;2572:13;:11;:13::i;:::-;31485:1:::1;31473:9;:13;:37;;;;;31503:7;31490:9;:20;;31473:37;31465:66;;;::::0;-1:-1:-1;;;31465:66:0;;35744:2:1;31465:66:0::1;::::0;::::1;35726:21:1::0;35783:2;35763:18;;;35756:30;-1:-1:-1;;;35802:18:1;;;35795:46;35858:18;;31465:66:0::1;35542:340:1::0;31465:66:0::1;31542:11;:23:::0;31392:181::o;31910:225::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;31989:21:0;::::1;31981:49;;;;-1:-1:-1::0;;;31981:49:0::1;;;;;;;:::i;:::-;32041:12;:22:::0;;-1:-1:-1;;;;;;32041:22:0::1;-1:-1:-1::0;;;;;32041:22:0;::::1;::::0;;::::1;::::0;;;32092:35:::1;::::0;;-1:-1:-1;;;32092:35:0;;;;:33:::1;::::0;:35:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;32041:22;32092:35:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32074:15;;:53;;;;;-1:-1:-1::0;;;;;32074:53:0::1;;;;;-1:-1:-1::0;;;;;32074:53:0::1;;;;;;31910:225:::0;:::o;32611:179::-;2572:13;:11;:13::i;:::-;32716:1:::1;32692:9;-1:-1:-1::0;;;;;32692:21:0::1;;:25;32684:52;;;::::0;-1:-1:-1;;;32684:52:0;;36089:2:1;32684:52:0::1;::::0;::::1;36071:21:1::0;36128:2;36108:18;;;36101:30;-1:-1:-1;;;36147:18:1;;;36140:44;36201:18;;32684:52:0::1;35887:338:1::0;32684:52:0::1;-1:-1:-1::0;;;;;32747:28:0::1;;::::0;;;:17:::1;:28;::::0;;;;:35;;-1:-1:-1;;32747:35:0::1;32778:4;32747:35;::::0;;32611:179::o;50304:129::-;50365:23;50408:13;:17;50422:2;50408:17;;;;;;;;;;;50401:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50401:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50304:129;;;:::o;35488:2635::-;35854:7;8715:19;:17;:19::i;:::-;-1:-1:-1;;;;;35878:25:0;::::1;::::0;35874:124:::1;;-1:-1:-1::0;;;;;35913:29:0;;::::1;35967:1;35913:29:::0;;;:16:::1;:29;::::0;;;;:42;::::1;35905:93;;;::::0;-1:-1:-1;;;35905:93:0;;36432:2:1;35905:93:0::1;::::0;::::1;36414:21:1::0;36471:2;36451:18;;;36444:30;36510:26;36490:18;;;36483:54;36554:18;;35905:93:0::1;36230:348:1::0;35905:93:0::1;36031:1;36017:11;:15;:44;;;;;36051:10;;36036:11;:25;;36017:44;36009:77;;;::::0;-1:-1:-1;;;36009:77:0;;36785:2:1;36009:77:0::1;::::0;::::1;36767:21:1::0;36824:2;36804:18;;;36797:30;-1:-1:-1;;;36843:18:1;;;36836:50;36903:18;;36009:77:0::1;36583:344:1::0;36009:77:0::1;36117:11;;36105:8;:23;;36097:53;;;::::0;-1:-1:-1;;;36097:53:0;;37134:2:1;36097:53:0::1;::::0;::::1;37116:21:1::0;37173:2;37153:18;;;37146:30;-1:-1:-1;;;37192:18:1;;;37185:47;37249:18;;36097:53:0::1;36932:341:1::0;36097:53:0::1;36183:1;36169:11;:15;36161:49;;;::::0;-1:-1:-1;;;36161:49:0;;37480:2:1;36161:49:0::1;::::0;::::1;37462:21:1::0;37519:2;37499:18;;;37492:30;-1:-1:-1;;;37538:18:1;;;37531:51;37599:18;;36161:49:0::1;37278:345:1::0;36161:49:0::1;36242:1;36229:10;:14;:43;;;;;36261:11;36247:10;:25;;36229:43;36221:74;;;::::0;-1:-1:-1;;;36221:74:0;;37830:2:1;36221:74:0::1;::::0;::::1;37812:21:1::0;37869:2;37849:18;;;37842:30;-1:-1:-1;;;37888:18:1;;;37881:48;37946:18;;36221:74:0::1;37628:342:1::0;36221:74:0::1;36321:16;36312:5;:25;;;;;;;;:::i;:::-;::::0;36308:836:::1;;-1:-1:-1::0;;;;;36358:26:0;::::1;36354:464;;36431:1;36413:15;:19;36405:52;;;::::0;-1:-1:-1;;;36405:52:0;;38177:2:1;36405:52:0::1;::::0;::::1;38159:21:1::0;38216:2;38196:18;;;38189:30;-1:-1:-1;;;38235:18:1;;;38228:50;38295:18;;36405:52:0::1;37975:344:1::0;36405:52:0::1;36497:15;36484:9;:28;36476:68;;;::::0;-1:-1:-1;;;36476:68:0;;38526:2:1;36476:68:0::1;::::0;::::1;38508:21:1::0;38565:2;38545:18;;;38538:30;38604:29;38584:18;;;38577:57;38651:18;;36476:68:0::1;38324:351:1::0;36476:68:0::1;36308:836;;36354:464;-1:-1:-1::0;;;;;36593:30:0;;::::1;36648:1;36593:30:::0;;;:16:::1;:30;::::0;;;;:43;::::1;36585:87;;;::::0;-1:-1:-1;;;36585:87:0;;38882:2:1;36585:87:0::1;::::0;::::1;38864:21:1::0;38921:2;38901:18;;;38894:30;-1:-1:-1;;;38940:18:1;;;38933:47;38997:18;;36585:87:0::1;38680:341:1::0;36585:87:0::1;36699:77;::::0;-1:-1:-1;;;36699:77:0;;-1:-1:-1;;;;;36699:33:0;::::1;::::0;::::1;::::0;:77:::1;::::0;36733:10:::1;::::0;36753:4:::1;::::0;36760:15;;36699:77:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36691:111;;;::::0;-1:-1:-1;;;36691:111:0;;39228:2:1;36691:111:0::1;::::0;::::1;39210:21:1::0;39267:2;39247:18;;;39240:30;-1:-1:-1;;;39286:18:1;;;39279:51;39347:18;;36691:111:0::1;39026:345:1::0;36308:836:0::1;36848:14;36839:5;:23;;;;;;;;:::i;:::-;::::0;36835:309:::1;;-1:-1:-1::0;;;;;36887:35:0;;::::1;36943:1;36887:35:::0;;;:21:::1;:35;::::0;;;;:44;::::1;36879:93;;;::::0;-1:-1:-1;;;36879:93:0;;39578:2:1;36879:93:0::1;::::0;::::1;39560:21:1::0;39617:2;39597:18;;;39590:30;-1:-1:-1;;;39636:18:1;;;39629:52;39698:18;;36879:93:0::1;39376:346:1::0;36879:93:0::1;36987:78;::::0;-1:-1:-1;;;36987:78:0;;-1:-1:-1;;;;;36987:34:0;::::1;::::0;::::1;::::0;:78:::1;::::0;37022:10:::1;::::0;37042:4:::1;::::0;37049:15;;36987:78:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36835:309;;;37098:34;::::0;-1:-1:-1;;;37098:34:0;;39929:2:1;37098:34:0::1;::::0;::::1;39911:21:1::0;39968:2;39948:18;;;39941:30;40007:26;39987:18;;;39980:54;40051:18;;37098:34:0::1;39727:348:1::0;36835:309:0::1;37156:10;37169:71;37187:10;37199:12:::0;37213:26:::1;37227:12;37213:11:::0;:26:::1;:::i;:::-;35408:63:::0;;;35425:15;35408:63;;;;42048:19:1;;;;-1:-1:-1;;42105:2:1;42101:15;;;42097:53;;42083:12;;;42076:75;42185:15;;;;42181:53;;;42167:12;;;42160:75;42251:12;;;;42244:28;;;;35408:63:0;;;;;;;;;;42288:13:1;;;;35408:63:0;;;35398:74;;;;;;35267:213;37169:71:::1;37156:84;;37251:16;37270:7;:11;37278:2;37270:11;;;;;;;;;;;37251:30;;37301:2;37294:1;:4;;:9;;;;37326:10;37314:1;:9;;;:22;;;;;-1:-1:-1::0;;;;;37314:22:0::1;;;;;-1:-1:-1::0;;;;;37314:22:0::1;;;;;;37357:5;37347:1;:7;;;:15;;;;;;;;;;;;;;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;37373:14:0::1;::::0;::::1;:29:::0;;-1:-1:-1;;;;;37373:29:0;;::::1;-1:-1:-1::0;;;;;;37373:29:0;;::::1;;::::0;;;37413:17:::1;::::0;::::1;:35:::0;;;37459:13:::1;::::0;::::1;:27:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;37497:13:::1;::::0;::::1;:27:::0;;;37535:13:::1;::::0;::::1;:27:::0;;;37590:26:::1;37608:8:::0;37590:15:::1;:26;:::i;:::-;37573:14;::::0;::::1;:43:::0;37627:8:::1;::::0;::::1;:31:::0;;-1:-1:-1;;;;;;37703:35:0;37669:23:::1;-1:-1:-1::0;;;;;37669:23:0;::::1;;-1:-1:-1::0;;;;37703:35:0;;-1:-1:-1;;;37703:35:0;::::1;;;;::::0;;37749:12:::1;::::0;::::1;:25:::0;;;37804:10:::1;-1:-1:-1::0;37787:28:0;;;:16:::1;:28;::::0;;;;;;;:37;;-1:-1:-1;37787:37:0;;::::1;::::0;;;;;;;;::::1;::::0;;;37835:12:::1;:21:::0;;;;::::1;::::0;;;::::1;::::0;;;37869:32;;;:20:::1;:32:::0;;;;;:34;;;::::1;::::0;::::1;:::i;:::-;;;;;;37953:10;-1:-1:-1::0;;;;;37921:172:0::1;37949:2;37921:172;37965:5;37972:12;37999:15;38016:11;38029;38055;38068:1;:14;;;37921:172;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;38113:2:0;35488:2635;-1:-1:-1;;;;;;;;;;;35488:2635:0:o;32996:160::-;2572:13;:11;:13::i;:::-;33093:55:::1;::::0;-1:-1:-1;;;33093:55:0;;-1:-1:-1;;;;;33093:27:0;::::1;::::0;::::1;::::0;:55:::1;::::0;33129:4:::1;::::0;33136:2;;33140:7;;33093:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32996:160:::0;;;:::o;3619:220::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;3704:22:0;::::1;3700:93;;3750:31;::::0;-1:-1:-1;;;3750:31:0;;3778:1:::1;3750:31;::::0;::::1;1709:51:1::0;1682:18;;3750:31:0::1;1563:203:1::0;3700:93:0::1;3803:28;3822:8;3803:18;:28::i;32348:255::-:0;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;32437:20:0;::::1;32429:58;;;::::0;-1:-1:-1;;;32429:58:0;;40978:2:1;32429:58:0::1;::::0;::::1;40960:21:1::0;41017:2;40997:18;;;40990:30;41056:27;41036:18;;;41029:55;41101:18;;32429:58:0::1;40776:349:1::0;32429:58:0::1;32512:39;::::0;-1:-1:-1;;;32512:39:0;;32545:4:::1;32512:39;::::0;::::1;1709:51:1::0;32498:11:0::1;::::0;-1:-1:-1;;;;;32512:24:0;::::1;::::0;::::1;::::0;1682:18:1;;32512:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32562:33;::::0;-1:-1:-1;;;32562:33:0;;-1:-1:-1;;;;;2397:32:1;;;32562:33:0::1;::::0;::::1;2379:51:1::0;2446:18;;;2439:34;;;32498:53:0;;-1:-1:-1;32562:23:0;;::::1;::::0;::::1;::::0;2352:18:1;;32562:33:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32418:185;32348:255:::0;;:::o;2851:166::-;2732:7;2759:6;-1:-1:-1;;;;;2759:6:0;775:10;2911:23;2907:103;;2958:40;;-1:-1:-1;;;2958:40:0;;775:10;2958:40;;;1709:51:1;1682:18;;2958:40:0;1563:203:1;6622:293:0;6024:1;6756:7;;:19;6748:63;;;;-1:-1:-1;;;6748:63:0;;41332:2:1;6748:63:0;;;41314:21:1;41371:2;41351:18;;;41344:30;41410:33;41390:18;;;41383:61;41461:18;;6748:63:0;41130:355:1;6748:63:0;6024:1;6889:7;:18;6622:293::o;9269:108::-;9181:7;;;;9339:9;9331:38;;;;-1:-1:-1;;;9331:38:0;;41692:2:1;9331:38:0;;;41674:21:1;41731:2;41711:18;;;41704:30;-1:-1:-1;;;41750:18:1;;;41743:46;41806:18;;9331:38:0;41490:340:1;30688:391:0;30840:13;;;30850:2;30840:13;;;;;;;;;30742;;-1:-1:-1;;;30768:39:0;:18;;30840:13;;;;;;;;;;-1:-1:-1;30840:13:0;30818:35;;-1:-1:-1;;;30864:6:0;30871:1;30864:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;30864:15:0;;;;;;;;;-1:-1:-1;;;30890:6:0;30897:1;30890:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;30890:15:0;;;;;;;;-1:-1:-1;30921:9:0;30916:124;30940:1;30936;:5;30916:124;;;30979:10;30990:5;30998:3;30990:11;30979:23;;;;;;;:::i;:::-;;;;30963:6;30970:5;30974:1;30970;:5;:::i;:::-;30963:13;;;;;;;;:::i;:::-;;;;:39;-1:-1:-1;;;;;30963:39:0;;;;;;;;-1:-1:-1;31027:1:0;31017:11;;;;;30943:3;;30916:124;;;-1:-1:-1;31064:6:0;30688:391;-1:-1:-1;;;30688:391:0:o;9965:120::-;8974:16;:14;:16::i;:::-;10024:7:::1;:15:::0;;-1:-1:-1;;10024:15:0::1;::::0;;10055:22:::1;775:10:::0;10064:12:::1;10055:22;::::0;-1:-1:-1;;;;;1727:32:1;;;1709:51;;1697:2;1682:18;10055:22:0::1;;;;;;;9965:120::o:0;3999:191::-;4073:16;4092:6;;-1:-1:-1;;;;;4109:17:0;;;-1:-1:-1;;;;;;4109:17:0;;;;;;4142:40;;4092:6;;;;;;;4142:40;;4073:16;4142:40;4062:128;3999:191;:::o;9706:118::-;8715:19;:17;:19::i;:::-;9766:7:::1;:14:::0;;-1:-1:-1;;9766:14:0::1;9776:4;9766:14;::::0;;9796:20:::1;9803:12;775:10:::0;;695:98;12353:374;12463:6;12439:21;:30;12435:127;;;12493:57;;-1:-1:-1;;;12493:57:0;;12520:21;12493:57;;;34431:25:1;34472:18;;;34465:34;;;34404:18;;12493:57:0;34257:248:1;12435:127:0;12575:12;12589:23;12616:9;-1:-1:-1;;;;;12616:14:0;12638:6;12616:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12574:75;;;;12665:7;12660:60;;12689:19;12697:10;12689:7;:19::i;9454:108::-;9181:7;;;;9513:41;;;;-1:-1:-1;;;9513:41:0;;42514:2:1;9513:41:0;;;42496:21:1;42553:2;42533:18;;;42526:30;-1:-1:-1;;;42572:18:1;;;42565:50;42632:18;;9513:41:0;42312:344:1;16727:498:0;16860:17;;:21;16856:362;;17060:10;17054:17;17117:15;17104:10;17100:2;17096:19;17089:44;16856:362;17187:19;;-1:-1:-1;;;17187:19:0;;;;;;;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:226:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:1;;14:226;-1:-1:-1;14:226:1:o;764:131::-;-1:-1:-1;;;;;839:31:1;;829:42;;819:70;;885:1;882;875:12;900:367;968:6;976;1029:2;1017:9;1008:7;1004:23;1000:32;997:52;;;1045:1;1042;1035:12;997:52;1090:23;;;-1:-1:-1;1189:2:1;1174:18;;1161:32;1202:33;1161:32;1202:33;:::i;:::-;1254:7;1244:17;;;900:367;;;;;:::o;1953:247::-;2012:6;2065:2;2053:9;2044:7;2040:23;2036:32;2033:52;;;2081:1;2078;2071:12;2033:52;2120:9;2107:23;2139:31;2164:5;2139:31;:::i;:::-;2189:5;1953:247;-1:-1:-1;;;1953:247:1:o;2484:300::-;2537:3;2575:5;2569:12;2602:6;2597:3;2590:19;2658:6;2651:4;2644:5;2640:16;2633:4;2628:3;2624:14;2618:47;2710:1;2703:4;2694:6;2689:3;2685:16;2681:27;2674:38;2773:4;2766:2;2762:7;2757:2;2749:6;2745:15;2741:29;2736:3;2732:39;2728:50;2721:57;;;2484:300;;;;:::o;2789:498::-;-1:-1:-1;;;;;3022:32:1;;3004:51;;3091:3;3086:2;3071:18;;3064:31;;;-1:-1:-1;;3112:57:1;;3149:19;;3141:6;3112:57;:::i;:::-;3200:2;3185:18;;3178:34;;;;-1:-1:-1;;;;;;3248:32:1;;;;3243:2;3228:18;;;3221:60;3104:65;2789:498;-1:-1:-1;;2789:498:1:o;3292:367::-;3360:6;3368;3421:2;3409:9;3400:7;3396:23;3392:32;3389:52;;;3437:1;3434;3427:12;3389:52;3476:9;3463:23;3495:31;3520:5;3495:31;:::i;:::-;3545:5;3623:2;3608:18;;;;3595:32;;-1:-1:-1;;;3292:367:1:o;3664:328::-;-1:-1:-1;;;;;3841:32:1;;3823:51;;3910:2;3905;3890:18;;3883:30;;;-1:-1:-1;;3930:56:1;;3967:18;;3959:6;3930:56;:::i;:::-;3922:64;3664:328;-1:-1:-1;;;;3664:328:1:o;3997:388::-;4065:6;4073;4126:2;4114:9;4105:7;4101:23;4097:32;4094:52;;;4142:1;4139;4132:12;4094:52;4181:9;4168:23;4200:31;4225:5;4200:31;:::i;:::-;4250:5;-1:-1:-1;4307:2:1;4292:18;;4279:32;4320:33;4279:32;4320:33;:::i;4390:346::-;4458:6;4466;4519:2;4507:9;4498:7;4494:23;4490:32;4487:52;;;4535:1;4532;4525:12;4487:52;-1:-1:-1;;4580:23:1;;;4700:2;4685:18;;;4672:32;;-1:-1:-1;4390:346:1:o;5163:348::-;5215:8;5225:6;5279:3;5272:4;5264:6;5260:17;5256:27;5246:55;;5297:1;5294;5287:12;5246:55;-1:-1:-1;5320:20:1;;5363:18;5352:30;;5349:50;;;5395:1;5392;5385:12;5349:50;5432:4;5424:6;5420:17;5408:29;;5484:3;5477:4;5468:6;5460;5456:19;5452:30;5449:39;5446:59;;;5501:1;5498;5491:12;5446:59;5163:348;;;;;:::o;5516:808::-;5614:6;5622;5630;5638;5646;5699:3;5687:9;5678:7;5674:23;5670:33;5667:53;;;5716:1;5713;5706:12;5667:53;5755:9;5742:23;5774:31;5799:5;5774:31;:::i;:::-;5824:5;-1:-1:-1;5880:2:1;5865:18;;5852:32;5907:18;5896:30;;5893:50;;;5939:1;5936;5929:12;5893:50;5978:59;6029:7;6020:6;6009:9;6005:22;5978:59;:::i;:::-;6056:8;;-1:-1:-1;5952:85:1;-1:-1:-1;;6164:2:1;6149:18;;6136:32;;-1:-1:-1;6246:2:1;6231:18;;6218:32;6259:33;6218:32;6259:33;:::i;:::-;6311:7;6301:17;;;5516:808;;;;;;;;:::o;6329:466::-;6406:6;6414;6422;6475:2;6463:9;6454:7;6450:23;6446:32;6443:52;;;6491:1;6488;6481:12;6443:52;-1:-1:-1;;6536:23:1;;;6656:2;6641:18;;6628:32;;-1:-1:-1;6759:2:1;6744:18;;;6731:32;;6329:466;-1:-1:-1;6329:466:1:o;6800:546::-;6880:6;6888;6896;6949:2;6937:9;6928:7;6924:23;6920:32;6917:52;;;6965:1;6962;6955:12;6917:52;7004:9;6991:23;7023:31;7048:5;7023:31;:::i;:::-;7073:5;-1:-1:-1;7129:2:1;7114:18;;7101:32;7156:18;7145:30;;7142:50;;;7188:1;7185;7178:12;7142:50;7227:59;7278:7;7269:6;7258:9;7254:22;7227:59;:::i;:::-;6800:546;;7305:8;;-1:-1:-1;7201:85:1;;-1:-1:-1;;;;6800:546:1:o;7351:127::-;7412:10;7407:3;7403:20;7400:1;7393:31;7443:4;7440:1;7433:15;7467:4;7464:1;7457:15;7483:141;7565:1;7558:5;7555:12;7545:46;;7571:18;;:::i;:::-;7600;;7483:141::o;7629:143::-;7713:1;7706:5;7703:12;7693:46;;7719:18;;:::i;8128:1345::-;8719:25;;;-1:-1:-1;;;;;8780:32:1;;8775:2;8760:18;;8753:60;8706:3;8691:19;;8822:54;8872:2;8857:18;;8849:6;8822:54;:::i;:::-;-1:-1:-1;;;;;8912:32:1;;;8907:2;8892:18;;8885:60;8976:3;8961:19;;8954:35;;;1520:31;;8932:3;9025:19;;1508:44;9082:6;9076:3;9065:9;9061:19;9054:35;9126:6;9120:3;9109:9;9105:19;9098:35;9170:6;9164:3;9153:9;9149:19;9142:35;9186:57;9238:3;9227:9;9223:19;9215:6;9186:57;:::i;:::-;-1:-1:-1;;;;;1520:31:1;;9295:3;9280:19;;1508:44;315:13;;308:21;9349:3;9334:19;;296:34;9385:3;9370:19;;9363:36;;;7854:12;;9462:3;9447:19;;7842:25;7916:4;7905:16;;7899:23;7883:14;;;7876:47;7972:4;7961:16;;7955:23;7939:14;;;7932:47;8032:4;8021:16;;8015:23;-1:-1:-1;;;;;8011:49:1;7995:14;;;7988:73;8110:4;8099:16;;8093:23;8077:14;;;8070:47;8128:1345;;;;;;;;;;;;;;;;;:::o;9478:896::-;9730:2;9742:21;;;9812:13;;9715:18;;;9834:22;;;9682:4;;9913:15;;;9887:2;9872:18;;;9682:4;9956:392;9970:6;9967:1;9964:13;9956:392;;;10029:13;;10071:9;;-1:-1:-1;;;;;10067:35:1;10055:48;;10151:2;10143:11;;;10137:18;10123:12;;;10116:40;10204:2;10196:11;;;10190:18;10176:12;;;10169:40;10259:4;10251:13;;;10245:20;10229:14;;;10222:44;;;;10323:15;;;;10295:4;10286:14;;;;10099:1;9985:9;9956:392;;;-1:-1:-1;10365:3:1;;9478:896;-1:-1:-1;;;;;9478:896:1:o;10379:118::-;10465:5;10458:13;10451:21;10444:5;10441:32;10431:60;;10487:1;10484;10477:12;10502:1456;10653:6;10661;10669;10677;10685;10693;10701;10709;10717;10725;10778:3;10766:9;10757:7;10753:23;10749:33;10746:53;;;10795:1;10792;10785:12;10746:53;10834:9;10821:23;10873:1;10866:5;10863:12;10853:40;;10889:1;10886;10879:12;10853:40;10912:5;-1:-1:-1;10969:2:1;10954:18;;10941:32;10982:33;10941:32;10982:33;:::i;:::-;11034:7;-1:-1:-1;11114:2:1;11099:18;;11086:32;;-1:-1:-1;11196:2:1;11181:18;;11168:32;11209:33;11168:32;11209:33;:::i;:::-;11261:7;-1:-1:-1;11341:3:1;11326:19;;11313:33;;-1:-1:-1;11445:3:1;11430:19;;11417:33;;-1:-1:-1;11549:3:1;11534:19;;11521:33;;-1:-1:-1;11653:3:1;11638:19;;11625:33;;-1:-1:-1;11736:3:1;11721:19;;11708:33;11750;11708;11750;:::i;:::-;11802:7;-1:-1:-1;11882:3:1;11867:19;;11854:33;11896:30;11854:33;11896:30;:::i;:::-;11945:7;11935:17;;;10502:1456;;;;;;;;;;;;;:::o;11963:508::-;12040:6;12048;12056;12109:2;12097:9;12088:7;12084:23;12080:32;12077:52;;;12125:1;12122;12115:12;12077:52;12164:9;12151:23;12183:31;12208:5;12183:31;:::i;:::-;12233:5;-1:-1:-1;12311:2:1;12296:18;;12283:32;;-1:-1:-1;12393:2:1;12378:18;;12365:32;12406:33;12365:32;12406:33;:::i;:::-;12458:7;12448:17;;;11963:508;;;;;:::o;12817:401::-;13019:2;13001:21;;;13058:2;13038:18;;;13031:30;13097:34;13092:2;13077:18;;13070:62;-1:-1:-1;;;13163:2:1;13148:18;;13141:35;13208:3;13193:19;;12817:401::o;14751:364::-;14830:6;14838;14891:2;14879:9;14870:7;14866:23;14862:32;14859:52;;;14907:1;14904;14897:12;14859:52;14939:9;14933:16;14958:31;14983:5;14958:31;:::i;:::-;15079:2;15064:18;;;;15058:25;15008:5;;15058:25;;-1:-1:-1;;;14751:364:1:o;15120:179::-;15155:3;15197:1;15179:16;15176:23;15173:120;;;15243:1;15240;15237;15222:23;-1:-1:-1;15280:1:1;15274:8;15269:3;15265:18;15173:120;15120:179;:::o;15304:127::-;15365:10;15360:3;15356:20;15353:1;15346:31;15396:4;15393:1;15386:15;15420:4;15417:1;15410:15;15436:249;15546:2;15527:13;;-1:-1:-1;;15523:27:1;15511:40;;15581:18;15566:34;;15602:22;;;15563:62;15560:88;;;15628:18;;:::i;:::-;15664:2;15657:22;-1:-1:-1;;15436:249:1:o;15690:628::-;15729:3;15771:4;15753:16;15750:26;15747:39;;;15690:628;:::o;15747:39::-;15813:2;15807:9;15853:16;-1:-1:-1;;15849:29:1;15846:1;15807:9;15825:54;15908:4;15902:11;15982:16;15975:4;15967:6;15963:17;15960:39;15939:18;15931:6;15928:30;15925:75;15922:88;;;16003:5;;15690:628;:::o;15922:88::-;16040:6;16034:4;16030:17;16076:3;16070:10;16103:18;16095:6;16092:30;16089:43;;;16125:5;;;;15690:628;:::o;16089:43::-;16190:16;16180:27;;-1:-1:-1;;16176:40:1;16151:16;;;16169:4;16147:27;16144:73;16141:86;;;16220:5;;;;15690:628;:::o;16141:86::-;16236:57;16287:4;16278:6;16270;16266:19;16262:30;16256:4;16236:57;:::i;16323:212::-;16365:3;16403:5;16397:12;16447:6;16440:4;16433:5;16429:16;16424:3;16418:36;16509:1;16473:16;;16498:13;;;-1:-1:-1;16473:16:1;;16323:212;-1:-1:-1;16323:212:1:o;16540:349::-;16802:25;16797:3;16790:38;16772:3;16844:39;16879:2;16874:3;16870:12;16862:6;16844:39;:::i;16894:231::-;17043:2;17032:9;17025:21;17006:4;17063:56;17115:2;17104:9;17100:18;17092:6;17063:56;:::i;17130:212::-;17166:7;17175:4;17218;17200:16;17197:26;17194:142;;;17267:4;17264:1;17261;17246:26;-1:-1:-1;;17324:1:1;17318:8;17296:1;;17194:142;17130:212;;:::o;17347:345::-;-1:-1:-1;;;17604:3:1;17597:34;17579:3;17647:39;17682:2;17677:3;17673:12;17665:6;17647:39;:::i;18406:230::-;18476:6;18529:2;18517:9;18508:7;18504:23;18500:32;18497:52;;;18545:1;18542;18535:12;18497:52;-1:-1:-1;18590:16:1;;18406:230;-1:-1:-1;18406:230:1:o;18641:127::-;18702:10;18697:3;18693:20;18690:1;18683:31;18733:4;18730:1;18723:15;18757:4;18754:1;18747:15;18773:217;18813:1;18839;18829:132;;18883:10;18878:3;18874:20;18871:1;18864:31;18918:4;18915:1;18908:15;18946:4;18943:1;18936:15;18829:132;-1:-1:-1;18975:9:1;;18773:217::o;18995:168::-;19068:9;;;19099;;19116:15;;;19110:22;;19096:37;19086:71;;19137:18;;:::i;:::-;18995:168;;;;:::o;19168:128::-;19235:9;;;19256:11;;;19253:37;;;19270:18;;:::i;20226:245::-;20293:6;20346:2;20334:9;20325:7;20321:23;20317:32;20314:52;;;20362:1;20359;20352:12;20314:52;20394:9;20388:16;20413:28;20435:5;20413:28;:::i;21906:125::-;21971:9;;;21992:10;;;21989:36;;;22005:18;;:::i;22036:371::-;-1:-1:-1;;;;;22256:32:1;;;22238:51;;22325:32;;;;22320:2;22305:18;;22298:60;22389:2;22374:18;;22367:34;;;;22226:2;22211:18;;22036:371::o;22412:135::-;22451:3;22472:17;;;22469:43;;22492:18;;:::i;:::-;-1:-1:-1;22539:1:1;22528:13;;22412:135::o;22552:380::-;22631:1;22627:12;;;;22674;;;22695:61;;22749:4;22741:6;22737:17;22727:27;;22695:61;22802:2;22794:6;22791:14;22771:18;22768:38;22765:161;;22848:10;22843:3;22839:20;22836:1;22829:31;22883:4;22880:1;22873:15;22911:4;22908:1;22901:15;22765:161;;22552:380;;;:::o;22937:339::-;23139:2;23121:21;;;23178:2;23158:18;;;23151:30;-1:-1:-1;;;23212:2:1;23197:18;;23190:45;23267:2;23252:18;;22937:339::o;23635:127::-;23696:10;23691:3;23687:20;23684:1;23677:31;23727:4;23724:1;23717:15;23751:4;23748:1;23741:15;23767:127;23828:10;23823:3;23819:20;23816:1;23809:31;23859:4;23856:1;23849:15;23883:4;23880:1;23873:15;28151:518;28253:2;28248:3;28245:11;28242:421;;;28289:5;28286:1;28279:16;28333:4;28330:1;28320:18;28403:2;28391:10;28387:19;28384:1;28380:27;28374:4;28370:38;28439:4;28427:10;28424:20;28421:47;;;-1:-1:-1;28462:4:1;28421:47;28517:2;28512:3;28508:12;28505:1;28501:20;28495:4;28491:31;28481:41;;28572:81;28590:2;28583:5;28580:13;28572:81;;;28649:1;28635:16;;28616:1;28605:13;28572:81;;;28576:3;;28151:518;;;:::o;28845:1299::-;28971:3;28965:10;28998:18;28990:6;28987:30;28984:56;;;29020:18;;:::i;:::-;29049:97;29139:6;29099:38;29131:4;29125:11;29099:38;:::i;:::-;29093:4;29049:97;:::i;:::-;29195:4;29226:2;29215:14;;29243:1;29238:649;;;;29931:1;29948:6;29945:89;;;-1:-1:-1;30000:19:1;;;29994:26;29945:89;-1:-1:-1;;28802:1:1;28798:11;;;28794:24;28790:29;28780:40;28826:1;28822:11;;;28777:57;30047:81;;29208:930;;29238:649;28098:1;28091:14;;;28135:4;28122:18;;-1:-1:-1;;29274:20:1;;;29392:222;29406:7;29403:1;29400:14;29392:222;;;29488:19;;;29482:26;29467:42;;29595:4;29580:20;;;;29548:1;29536:14;;;;29422:12;29392:222;;;29396:3;29642:6;29633:7;29630:19;29627:201;;;29703:19;;;29697:26;-1:-1:-1;;29786:1:1;29782:14;;;29798:3;29778:24;29774:37;29770:42;29755:58;29740:74;;29627:201;-1:-1:-1;;;;29874:1:1;29858:14;;;29854:22;29841:36;;-1:-1:-1;28845:1299:1:o;31535:251::-;31605:6;31658:2;31646:9;31637:7;31633:23;31629:32;31626:52;;;31674:1;31671;31664:12;31626:52;31706:9;31700:16;31725:31;31750:5;31725:31;:::i;40080:691::-;40394:3;40379:19;;40407:45;40383:9;40434:6;40407:45;:::i;:::-;-1:-1:-1;;;;;40488:32:1;;;40483:2;40468:18;;40461:60;40552:2;40537:18;;40530:34;;;;40600:32;;;;40595:2;40580:18;;40573:60;40664:3;40649:19;;40642:35;;;;40508:3;40693:19;;40686:35;40752:3;40737:19;40730:35;;;;40080:691;;-1:-1:-1;40080:691:1:o
Swarm Source
ipfs://ead205699e1fb856ca2c3fe331af75feeefc0e1f0331c4242c948b781ea36225
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in HYPE
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.