More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 172 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 42021601 | 27 days ago | IN | 0 ETH | 0.00000062 | ||||
| Approve | 41194559 | 46 days ago | IN | 0 ETH | 0.00000062 | ||||
| Approve | 40514558 | 62 days ago | IN | 0 ETH | 0.00000014 | ||||
| Approve | 40253326 | 68 days ago | IN | 0 ETH | 0.00000009 | ||||
| Approve | 40022742 | 73 days ago | IN | 0 ETH | 0.00000002 | ||||
| Approve | 40022616 | 73 days ago | IN | 0 ETH | 0.00000002 | ||||
| Approve | 39926998 | 75 days ago | IN | 0 ETH | 0.00000015 | ||||
| Approve | 39921720 | 75 days ago | IN | 0 ETH | 0.00000007 | ||||
| Approve | 39719723 | 80 days ago | IN | 0 ETH | 0.00000007 | ||||
| Approve | 39389085 | 88 days ago | IN | 0 ETH | 0.00000008 | ||||
| Approve | 39353704 | 88 days ago | IN | 0 ETH | 0.00000006 | ||||
| Approve | 39353681 | 88 days ago | IN | 0 ETH | 0.00000006 | ||||
| Approve | 39353661 | 88 days ago | IN | 0 ETH | 0.00000006 | ||||
| Approve | 39310792 | 89 days ago | IN | 0 ETH | 0.00000001 | ||||
| Approve | 39310690 | 89 days ago | IN | 0 ETH | 0.00000001 | ||||
| Approve | 39310482 | 89 days ago | IN | 0 ETH | 0.00000001 | ||||
| Approve | 39308062 | 89 days ago | IN | 0 ETH | 0.00000015 | ||||
| Approve | 39307972 | 89 days ago | IN | 0 ETH | 0.00000018 | ||||
| Approve | 39305795 | 90 days ago | IN | 0 ETH | 0.00000019 | ||||
| Approve | 39305786 | 90 days ago | IN | 0 ETH | 0.00000018 | ||||
| Approve | 39305731 | 90 days ago | IN | 0 ETH | 0.00000017 | ||||
| Approve | 39302104 | 90 days ago | IN | 0 ETH | 0.00000165 | ||||
| Approve | 39277599 | 90 days ago | IN | 0 ETH | 0.00006231 | ||||
| Approve | 39277599 | 90 days ago | IN | 0 ETH | 0.00006231 | ||||
| Approve | 39276572 | 90 days ago | IN | 0 ETH | 0.00006231 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CHOOCH
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2025-08-01
*/
// File: @openzeppelin/contracts/access/IAccessControl.sol
// OpenZeppelin Contracts (last updated v5.3.0) (access/IAccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev External interface of AccessControl declared to support ERC-165 detection.
*/
interface IAccessControl {
/**
* @dev The `account` is missing a role.
*/
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
/**
* @dev The caller of a function is not the expected one.
*
* NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
*/
error AccessControlBadConfirmation();
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted to signal this.
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).
* Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*/
function renounceRole(bytes32 role, address callerConfirmation) external;
}
// 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/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/utils/introspection/ERC165.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/access/AccessControl.sol
// OpenZeppelin Contracts (last updated v5.3.0) (access/AccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```solidity
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```solidity
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
* to enforce additional security measures for this role.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address account => bool) hasRole;
bytes32 adminRole;
}
mapping(bytes32 role => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with an {AccessControlUnauthorizedAccount} error including the required role.
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual returns (bool) {
return _roles[role].hasRole[account];
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
* is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
* is missing `role`.
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert AccessControlUnauthorizedAccount(account, role);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address callerConfirmation) public virtual {
if (callerConfirmation != _msgSender()) {
revert AccessControlBadConfirmation();
}
_revokeRole(role, callerConfirmation);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
if (!hasRole(role, account)) {
_roles[role].hasRole[account] = true;
emit RoleGranted(role, account, _msgSender());
return true;
} else {
return false;
}
}
/**
* @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
if (hasRole(role, account)) {
_roles[role].hasRole[account] = false;
emit RoleRevoked(role, account, _msgSender());
return true;
} else {
return false;
}
}
}
// 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/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: CHOOCH.sol
pragma solidity 0.8.20;
/**
* @title CHOOCH - The Token That Actually Goes Hard (Trust Edition)
* @dev Built different with minimal admin powers because we're not trying to rug you
*
* 🔥 CHOOCH PHILOSOPHY: Maximum sesh energy, minimal admin control, zero bullshit
*
* 🚀 WHY CHOOCH HITS DIFFERENT:
* ✅ 0% Taxes Forever (No greedy admin fee extractions - we're not parasites)
* ✅ Minimal Admin Powers (Can't drain your bag even if we wanted to)
* ✅ Lossless Protection (Actual hack prevention that works)
* ✅ Built-in Decentralization (Admin powers get renounced like your ex)
* ✅ Burn Features (Community can torch supply when feeling destructive)
* ✅ Anti-Bot Launch Protection (Fuck the snipers, real gators only)
* ✅ Emergency Pause Only (For hack protection, not power trips)
* ✅ Community Governance Ready (Multisig transition built-in)
*
* 🛡️ TRUST-FIRST ARCHITECTURE:
* We could have given ourselves god mode powers, but that's sus as fuck.
* Instead we built this with minimal admin control because:
* - Can't print tokens (supply is immutable like your bad decisions)
* - Can't drain wallets (your bag stays your bag)
* - Can't change taxes (0% forever, we're not the IRS)
* - Can't blacklist arbitrarily (decentralized means decentralized)
* - Launch controls expire after 24h (then it's full degen mode)
* - Admin powers can be renounced (full decentralization when ready)
*
* 📊 THE NUMBERS:
* - Total Supply: 1,690,420,069,000 CHOOCH (1.69T - nice)
* - 18 decimals for maximum compatibility
* - Zero taxes, zero admin extraction, zero rugpull capability
* - Deflationary burns available for when we're feeling destructive
*
* 🎯 BUILT FOR THE LONG SESH:
* This isn't another admin-controlled shitcoin. We built CHOOCH with minimal
* admin powers because trust is earned, not demanded. Launch controls help
* prevent bot snipers, then we step back and let the community take over.
* That's how you build something that actually lasts longer than your
* attention span after a 3-day bender.
*/
// ============ LOSSLESS PROTOCOL INTERFACES ============
interface ILosslessController {
function beforeTransfer(address sender, address recipient, uint256 amount) external;
function afterTransfer(address sender, address recipient, uint256 amount) external;
function beforeTransferFrom(address msgSender, address sender, address recipient, uint256 amount) external;
function afterTransferFrom(address msgSender, address sender, address recipient, uint256 amount) external;
function beforeApprove(address sender, address spender, uint256 amount) external;
function afterApprove(address sender, address spender, uint256 amount) external;
function beforeIncreaseAllowance(address msgSender, address spender, uint256 addedValue) external;
function afterIncreaseAllowance(address msgSender, address spender, uint256 addedValue) external;
function beforeDecreaseAllowance(address msgSender, address spender, uint256 subtractedValue) external;
function afterDecreaseAllowance(address msgSender, address spender, uint256 subtractedValue) external;
function beforeMint(address to, uint256 amount) external;
function afterMint(address to, uint256 amount) external;
function beforeBurn(address account, uint256 amount) external;
function afterBurn(address account, uint256 amount) external;
}
interface ILERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);
function transferOutBlacklistedFunds(address[] calldata from) external;
function setLosslessAdmin(address newAdmin) external;
function transferRecoveryAdminOwnership(address candidate, bytes32 keyHash) external;
function acceptRecoveryAdminOwnership(bytes memory key) external;
function proposeLosslessTurnOff() external;
function executeLosslessTurnOff() external;
function executeLosslessTurnOn() external;
function getAdmin() external view returns (address);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
event NewAdmin(address indexed newAdmin);
event NewRecoveryAdminProposal(address indexed candidate);
event NewRecoveryAdmin(address indexed newRecoveryAdmin);
event LosslessTurnOffProposal(uint256 turnOffDate);
event LosslessOff();
event LosslessOn();
}
contract CHOOCH is Context, ILERC20, AccessControl, ReentrancyGuard, Pausable {
// ============ ERC20 BASIC INFO ============
string private constant _name = "CHOOCH";
string private constant _symbol = "CHOOCH";
uint8 private constant _decimals = 18;
uint256 private constant _totalSupply = 1690420069000 * 10**18; // 1.69T tokens - IMMUTABLE
// ============ ERC20 STATE ============
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _currentSupply; // Can only decrease via burns, never increase
// ============ MINIMAL ROLES - TRUST FOCUSED ============
bytes32 public constant LAUNCH_ADMIN_ROLE = keccak256("LAUNCH_ADMIN_ROLE"); // Can enable trading & set initial limits
bytes32 public constant EMERGENCY_ROLE = keccak256("EMERGENCY_ROLE"); // Can pause in emergencies
bytes32 public constant LOSSLESS_ADMIN_ROLE = keccak256("LOSSLESS_ADMIN_ROLE"); // Manages Lossless integration
// ============ ADMIN RENUNCIATION TRACKING ============
bool public launchAdminRenounced = false; // Track if launch admin powers were renounced
bool public emergencyAdminRenounced = false; // Track if emergency admin powers were renounced
uint256 public adminRenunciationTime; // When admin powers were renounced
// ============ LOSSLESS INTEGRATION ============
ILosslessController public lossless;
address public admin;
address public recoveryAdmin;
address private recoveryAdminCandidate;
bytes32 private recoveryAdminKeyHash;
uint256 public timelockPeriod;
uint256 public losslessTurnOffTimestamp;
bool public isLosslessOn = true;
// ============ IMMUTABLE TOKEN FEATURES ============
bool public constant IS_TAX_FREE = true; // IMMUTABLE - Cannot be changed
uint256 public constant BUY_TAX = 0; // IMMUTABLE - Cannot be changed
uint256 public constant SELL_TAX = 0; // IMMUTABLE - Cannot be changed
uint256 public constant TRANSFER_TAX = 0; // IMMUTABLE - Cannot be changed
// ============ BURN FEATURES (DEFLATIONARY) ============
uint256 public totalBurned;
mapping(address => uint256) public burnedByAddress;
bool public constant BURN_ENABLED = true; // IMMUTABLE - Always enabled
// ============ LAUNCH PERIOD CONTROLS (TEMPORARY) ============
bool public tradingEnabled = false;
uint256 public tradingEnabledTimestamp;
uint256 public maxTransactionAmount;
uint256 public maxWalletAmount;
mapping(address => bool) public isExcludedFromLimits;
// Launch period protection (disabled after renunciation)
uint256 public launchTimestamp;
uint256 public constant LAUNCH_PROTECTION_PERIOD = 24 hours; // 24h protection max
mapping(address => uint256) public lastTransactionBlock;
// ============ EVENTS ============
event Burn(address indexed from, uint256 value);
event TradingEnabled(uint256 timestamp);
event LimitsUpdated(uint256 maxTransaction, uint256 maxWallet);
event EmergencyAction(string action, address indexed actor, uint256 value);
event SupplyReduction(uint256 newSupply, uint256 burnedAmount);
// ============ TRUST & DECENTRALIZATION EVENTS ============
event AdminRoleRenounced(bytes32 indexed role, address indexed admin, uint256 timestamp);
event DecentralizationCompleted(uint256 timestamp);
event CommunityGovernanceActivated(address indexed multisig, uint256 timestamp);
// ============ MODIFIERS ============
modifier lssTransfer(address sender, address recipient, uint256 amount) {
if (isLosslessOn) {
lossless.beforeTransfer(sender, recipient, amount);
}
_;
if (isLosslessOn) {
lossless.afterTransfer(sender, recipient, amount);
}
}
modifier lssTransferFrom(address sender, address recipient, uint256 amount) {
if (isLosslessOn) {
lossless.beforeTransferFrom(_msgSender(), sender, recipient, amount);
}
_;
if (isLosslessOn) {
lossless.afterTransferFrom(_msgSender(), sender, recipient, amount);
}
}
modifier lssApprove(address spender, uint256 amount) {
if (isLosslessOn) {
lossless.beforeApprove(_msgSender(), spender, amount);
}
_;
if (isLosslessOn) {
lossless.afterApprove(_msgSender(), spender, amount);
}
}
modifier lssBurn(address account, uint256 amount) {
if (isLosslessOn) {
lossless.beforeBurn(account, amount);
}
_;
if (isLosslessOn) {
lossless.afterBurn(account, amount);
}
}
modifier onlyDuringLaunchPeriod() {
require(!launchAdminRenounced, "CHOOCH: Launch admin powers renounced");
require(block.timestamp < launchTimestamp + LAUNCH_PROTECTION_PERIOD, "CHOOCH: Launch period ended");
_;
}
modifier tradingActive() {
require(tradingEnabled || isExcludedFromLimits[_msgSender()], "CHOOCH: Trading not enabled");
_;
}
modifier validAddress(address account) {
require(account != address(0), "CHOOCH: Zero address");
_;
}
// ============ CONSTRUCTOR ============
constructor(
address _losslessController,
address _losslessAdmin,
address _emergencyAdmin,
address _recoveryAdmin,
uint256 _timelockPeriod
) {
require(_losslessController != address(0), "CHOOCH: Invalid controller");
require(_losslessAdmin != address(0), "CHOOCH: Invalid lossless admin");
require(_emergencyAdmin != address(0), "CHOOCH: Invalid emergency admin");
require(_recoveryAdmin != address(0), "CHOOCH: Invalid recovery admin");
require(_timelockPeriod >= 1 hours, "CHOOCH: Timelock too short");
require(_timelockPeriod <= 30 days, "CHOOCH: Timelock too long");
// Initialize Lossless integration
lossless = ILosslessController(_losslessController);
admin = _losslessAdmin;
recoveryAdmin = _recoveryAdmin;
timelockPeriod = _timelockPeriod;
// Set up MINIMAL role hierarchy
_grantRole(DEFAULT_ADMIN_ROLE, _msgSender()); // For setup only
_grantRole(LAUNCH_ADMIN_ROLE, _msgSender()); // Can enable trading & set limits
_grantRole(EMERGENCY_ROLE, _emergencyAdmin); // Can pause in emergencies
_grantRole(LOSSLESS_ADMIN_ROLE, _losslessAdmin); // Manages Lossless
// Initialize IMMUTABLE token supply
_currentSupply = _totalSupply;
_balances[_msgSender()] = _totalSupply;
// Set initial reasonable limits (can be adjusted during launch period only)
maxTransactionAmount = _totalSupply / 200; // 0.5%
maxWalletAmount = _totalSupply / 100; // 1%
// Exclude important addresses from limits
isExcludedFromLimits[_msgSender()] = true;
isExcludedFromLimits[_losslessAdmin] = true;
isExcludedFromLimits[_emergencyAdmin] = true;
isExcludedFromLimits[_recoveryAdmin] = true;
launchTimestamp = block.timestamp;
emit Transfer(address(0), _msgSender(), _totalSupply);
}
// ============ ERC20 VIEW FUNCTIONS ============
function name() public pure override returns (string memory) {
return _name;
}
function symbol() public pure override returns (string memory) {
return _symbol;
}
function decimals() public pure override returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _currentSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
// ============ ERC20 TRANSFER FUNCTIONS (IMMUTABLE 0% TAX) ============
function transfer(address to, uint256 amount)
public
override
whenNotPaused
tradingActive
validAddress(to)
lssTransfer(_msgSender(), to, amount)
returns (bool)
{
_transfer(_msgSender(), to, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount)
public
override
whenNotPaused
tradingActive
validAddress(to)
lssTransferFrom(from, to, amount)
returns (bool)
{
uint256 currentAllowance = _allowances[from][_msgSender()];
require(currentAllowance >= amount, "CHOOCH: Transfer exceeds allowance");
_transfer(from, to, amount);
_approve(from, _msgSender(), currentAllowance - amount);
return true;
}
function approve(address spender, uint256 amount)
public
override
whenNotPaused
validAddress(spender)
lssApprove(spender, amount)
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
public
override
whenNotPaused
validAddress(spender)
returns (bool)
{
if (isLosslessOn) {
lossless.beforeIncreaseAllowance(_msgSender(), spender, addedValue);
}
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
if (isLosslessOn) {
lossless.afterIncreaseAllowance(_msgSender(), spender, addedValue);
}
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue)
public
override
whenNotPaused
validAddress(spender)
returns (bool)
{
if (isLosslessOn) {
lossless.beforeDecreaseAllowance(_msgSender(), spender, subtractedValue);
}
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "CHOOCH: Decreased allowance below zero");
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
if (isLosslessOn) {
lossless.afterDecreaseAllowance(_msgSender(), spender, subtractedValue);
}
return true;
}
// ============ INTERNAL TRANSFER LOGIC (CLEAN, NO TAX) ============
function _transfer(address from, address to, uint256 amount) internal {
require(from != address(0), "CHOOCH: Transfer from zero address");
require(to != address(0), "CHOOCH: Transfer to zero address");
require(_balances[from] >= amount, "CHOOCH: Transfer exceeds balance");
// Launch period protection (only if admin hasn't been renounced)
if (!launchAdminRenounced &&
block.timestamp < launchTimestamp + LAUNCH_PROTECTION_PERIOD &&
!isExcludedFromLimits[from] && !isExcludedFromLimits[to]) {
require(lastTransactionBlock[from] != block.number, "CHOOCH: One transaction per block");
lastTransactionBlock[from] = block.number;
}
// Transaction and wallet limits (only during launch period)
if (!launchAdminRenounced && !isExcludedFromLimits[from] && !isExcludedFromLimits[to]) {
require(amount <= maxTransactionAmount, "CHOOCH: Exceeds max transaction");
require(_balances[to] + amount <= maxWalletAmount, "CHOOCH: Exceeds max wallet");
}
// Clean, tax-free transfer
_balances[from] -= amount;
_balances[to] += amount;
emit Transfer(from, to, amount);
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "CHOOCH: Approve from zero address");
require(spender != address(0), "CHOOCH: Approve to zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
// ============ BURNING FUNCTIONS (ALWAYS ENABLED) ============
function burn(uint256 amount) external whenNotPaused {
_burn(_msgSender(), amount);
}
function burnFrom(address account, uint256 amount) external whenNotPaused {
uint256 currentAllowance = _allowances[account][_msgSender()];
require(currentAllowance >= amount, "CHOOCH: Burn exceeds allowance");
_burn(account, amount);
_approve(account, _msgSender(), currentAllowance - amount);
}
function _burn(address account, uint256 amount) internal lssBurn(account, amount) {
require(account != address(0), "CHOOCH: Burn from zero address");
require(_balances[account] >= amount, "CHOOCH: Burn exceeds balance");
require(amount > 0, "CHOOCH: Cannot burn zero amount");
require(_currentSupply >= amount, "CHOOCH: Burn exceeds supply");
_balances[account] -= amount;
_currentSupply -= amount;
totalBurned += amount;
burnedByAddress[account] += amount;
emit Transfer(account, address(0), amount);
emit Burn(account, amount);
emit SupplyReduction(_currentSupply, totalBurned);
}
// ============ MINIMAL ADMIN FUNCTIONS (LAUNCH PERIOD ONLY) ============
function enableTrading() external onlyRole(LAUNCH_ADMIN_ROLE) {
require(!tradingEnabled, "CHOOCH: Trading already enabled");
tradingEnabled = true;
tradingEnabledTimestamp = block.timestamp;
emit TradingEnabled(block.timestamp);
}
function updateLimits(uint256 _maxTransaction, uint256 _maxWallet)
external
onlyRole(LAUNCH_ADMIN_ROLE)
onlyDuringLaunchPeriod
{
require(_maxTransaction > 0, "CHOOCH: Max transaction cannot be zero");
require(_maxWallet > 0, "CHOOCH: Max wallet cannot be zero");
require(_maxTransaction <= _totalSupply, "CHOOCH: Max transaction exceeds supply");
require(_maxWallet <= _totalSupply, "CHOOCH: Max wallet exceeds supply");
require(_maxTransaction >= _totalSupply / 1000, "CHOOCH: Max transaction too low"); // 0.1% min
require(_maxWallet >= _totalSupply / 500, "CHOOCH: Max wallet too low"); // 0.2% min
maxTransactionAmount = _maxTransaction;
maxWalletAmount = _maxWallet;
emit LimitsUpdated(_maxTransaction, _maxWallet);
}
function excludeFromLimits(address account, bool excluded)
external
onlyRole(LAUNCH_ADMIN_ROLE)
onlyDuringLaunchPeriod
validAddress(account)
{
isExcludedFromLimits[account] = excluded;
}
// ============ EMERGENCY FUNCTIONS (MINIMAL & TRANSPARENT) ============
function pause() external onlyRole(EMERGENCY_ROLE) {
_pause();
emit EmergencyAction("Contract Paused", _msgSender(), block.timestamp);
}
function unpause() external onlyRole(EMERGENCY_ROLE) {
_unpause();
emit EmergencyAction("Contract Unpaused", _msgSender(), block.timestamp);
}
// IMPORTANT: Can only recover tokens that are NOT CHOOCH tokens
function emergencyRecoverAccidentalTokens(address token, address to, uint256 amount)
external
onlyRole(EMERGENCY_ROLE)
nonReentrant
validAddress(to)
{
require(token != address(this), "CHOOCH: Cannot recover CHOOCH tokens");
require(amount > 0, "CHOOCH: Amount must be greater than zero");
if (token == address(0)) {
// Recover accidentally sent ETH
require(address(this).balance >= amount, "CHOOCH: Insufficient ETH balance");
payable(to).transfer(amount);
} else {
// Recover accidentally sent other tokens
require(IERC20(token).balanceOf(address(this)) >= amount, "CHOOCH: Insufficient token balance");
IERC20(token).transfer(to, amount);
}
emit EmergencyAction("Accidental Token Recovery", to, amount);
}
// ============ ADMIN RENUNCIATION FUNCTIONS (DECENTRALIZATION) ============
function renounceLaunchAdmin() external onlyRole(LAUNCH_ADMIN_ROLE) {
require(!launchAdminRenounced, "CHOOCH: Already renounced");
launchAdminRenounced = true;
adminRenunciationTime = block.timestamp;
_revokeRole(LAUNCH_ADMIN_ROLE, _msgSender());
emit AdminRoleRenounced(LAUNCH_ADMIN_ROLE, _msgSender(), block.timestamp);
// Check if all admin roles are renounced
if (launchAdminRenounced && emergencyAdminRenounced) {
emit DecentralizationCompleted(block.timestamp);
}
}
function renounceEmergencyAdmin() external onlyRole(EMERGENCY_ROLE) {
require(!emergencyAdminRenounced, "CHOOCH: Already renounced");
emergencyAdminRenounced = true;
if (adminRenunciationTime == 0) {
adminRenunciationTime = block.timestamp;
}
_revokeRole(EMERGENCY_ROLE, _msgSender());
emit AdminRoleRenounced(EMERGENCY_ROLE, _msgSender(), block.timestamp);
// Check if all admin roles are renounced
if (launchAdminRenounced && emergencyAdminRenounced) {
emit DecentralizationCompleted(block.timestamp);
}
}
function transferEmergencyRoleToMultisig(address multisig)
external
onlyRole(EMERGENCY_ROLE)
validAddress(multisig)
{
require(!emergencyAdminRenounced, "CHOOCH: Emergency role already renounced");
require(multisig != _msgSender(), "CHOOCH: Cannot transfer to self");
_grantRole(EMERGENCY_ROLE, multisig);
_revokeRole(EMERGENCY_ROLE, _msgSender());
emit CommunityGovernanceActivated(multisig, block.timestamp);
}
// ============ LOSSLESS FUNCTIONS (HACK PROTECTION) ============
function getAdmin() public view override returns (address) {
return admin;
}
function setLosslessAdmin(address newAdmin) external override onlyRole(LOSSLESS_ADMIN_ROLE) {
require(newAdmin != address(0), "CHOOCH: Invalid admin");
require(newAdmin != admin, "CHOOCH: Same admin");
emit NewAdmin(newAdmin);
admin = newAdmin;
}
function transferRecoveryAdminOwnership(address candidate, bytes32 keyHash)
external
override
onlyRole(LOSSLESS_ADMIN_ROLE)
{
require(candidate != address(0), "CHOOCH: Invalid candidate");
recoveryAdminCandidate = candidate;
recoveryAdminKeyHash = keyHash;
emit NewRecoveryAdminProposal(candidate);
}
function acceptRecoveryAdminOwnership(bytes memory key) external override {
require(_msgSender() == recoveryAdminCandidate, "CHOOCH: Not candidate");
require(keccak256(key) == recoveryAdminKeyHash, "CHOOCH: Invalid key");
emit NewRecoveryAdmin(recoveryAdminCandidate);
recoveryAdmin = recoveryAdminCandidate;
recoveryAdminCandidate = address(0);
recoveryAdminKeyHash = bytes32(0);
}
function proposeLosslessTurnOff() external override onlyRole(LOSSLESS_ADMIN_ROLE) {
require(losslessTurnOffTimestamp == 0, "CHOOCH: Already proposed");
require(isLosslessOn, "CHOOCH: Already off");
losslessTurnOffTimestamp = block.timestamp + timelockPeriod;
emit LosslessTurnOffProposal(losslessTurnOffTimestamp);
}
function executeLosslessTurnOff() external override onlyRole(LOSSLESS_ADMIN_ROLE) {
require(losslessTurnOffTimestamp != 0, "CHOOCH: Not proposed");
require(block.timestamp >= losslessTurnOffTimestamp, "CHOOCH: Timelock active");
isLosslessOn = false;
losslessTurnOffTimestamp = 0;
emit LosslessOff();
}
function executeLosslessTurnOn() external override onlyRole(LOSSLESS_ADMIN_ROLE) {
require(!isLosslessOn, "CHOOCH: Already on");
isLosslessOn = true;
losslessTurnOffTimestamp = 0;
emit LosslessOn();
}
function transferOutBlacklistedFunds(address[] calldata from)
external
override
{
require(_msgSender() == address(lossless), "CHOOCH: Only lossless");
require(isLosslessOn, "CHOOCH: Lossless off");
require(from.length > 0, "CHOOCH: Empty array");
uint256 totalAmount = 0;
for (uint256 i = 0; i < from.length; i++) {
address fromAddress = from[i];
require(fromAddress != address(0), "CHOOCH: Invalid address");
uint256 balance = _balances[fromAddress];
if (balance > 0) {
_balances[fromAddress] = 0;
totalAmount += balance;
emit Transfer(fromAddress, address(lossless), balance);
}
}
if (totalAmount > 0) {
_balances[address(lossless)] += totalAmount;
}
}
// ============ VIEW FUNCTIONS ============
function currentSupply() external view returns (uint256) {
return _currentSupply;
}
function burnRate() external view returns (uint256) {
if (_totalSupply == 0) return 0;
return (totalBurned * 10000) / _totalSupply; // Basis points
}
function getTokenomicsInfo() external pure returns (
uint256 buyTax,
uint256 sellTax,
uint256 transferTax,
bool isTaxFree,
string memory description
) {
return (
BUY_TAX,
SELL_TAX,
TRANSFER_TAX,
IS_TAX_FREE,
"CHOOCH: 100% tax-free forever, minimal admin powers, maximum trust"
);
}
function isLaunched() external view returns (bool) {
return block.timestamp >= launchTimestamp;
}
function getLaunchInfo() external view returns (
uint256 timestamp,
bool trading,
uint256 tradingTimestamp,
bool protectionActive,
bool launchPeriodEnded
) {
return (
launchTimestamp,
tradingEnabled,
tradingEnabledTimestamp,
block.timestamp < launchTimestamp + LAUNCH_PROTECTION_PERIOD,
block.timestamp >= launchTimestamp + LAUNCH_PROTECTION_PERIOD
);
}
function getDecentralizationInfo() external view returns (
bool launchAdminActive,
bool emergencyAdminActive,
bool fullyDecentralized,
uint256 renunciationTimestamp,
bool limitsActive
) {
bool fullyDecentral = launchAdminRenounced && emergencyAdminRenounced;
bool limitsStillActive = !launchAdminRenounced &&
block.timestamp < launchTimestamp + LAUNCH_PROTECTION_PERIOD;
return (
!launchAdminRenounced,
!emergencyAdminRenounced,
fullyDecentral,
adminRenunciationTime,
limitsStillActive
);
}
function getSecurityInfo() external view returns (
bool losslessActive,
address losslessController,
address currentAdmin,
address currentRecoveryAdmin,
uint256 timelock
) {
return (
isLosslessOn,
address(lossless),
admin,
recoveryAdmin,
timelockPeriod
);
}
// ============ RECEIVE/FALLBACK ============
receive() external payable {
revert("CHOOCH: Direct ETH not accepted");
}
fallback() external payable {
revert("CHOOCH: Function does not exist");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_losslessController","type":"address"},{"internalType":"address","name":"_losslessAdmin","type":"address"},{"internalType":"address","name":"_emergencyAdmin","type":"address"},{"internalType":"address","name":"_recoveryAdmin","type":"address"},{"internalType":"uint256","name":"_timelockPeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AdminRoleRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"multisig","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"CommunityGovernanceActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DecentralizationCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"action","type":"string"},{"indexed":true,"internalType":"address","name":"actor","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"EmergencyAction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransaction","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitsUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LosslessOff","type":"event"},{"anonymous":false,"inputs":[],"name":"LosslessOn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"turnOffDate","type":"uint256"}],"name":"LosslessTurnOffProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newRecoveryAdmin","type":"address"}],"name":"NewRecoveryAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"candidate","type":"address"}],"name":"NewRecoveryAdminProposal","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":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnedAmount","type":"uint256"}],"name":"SupplyReduction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BURN_ENABLED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUY_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_TAX_FREE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAUNCH_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAUNCH_PROTECTION_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOSSLESS_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELL_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRANSFER_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"key","type":"bytes"}],"name":"acceptRecoveryAdminOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminRenunciationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"burnedByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyAdminRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyRecoverAccidentalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeLosslessTurnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeLosslessTurnOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecentralizationInfo","outputs":[{"internalType":"bool","name":"launchAdminActive","type":"bool"},{"internalType":"bool","name":"emergencyAdminActive","type":"bool"},{"internalType":"bool","name":"fullyDecentralized","type":"bool"},{"internalType":"uint256","name":"renunciationTimestamp","type":"uint256"},{"internalType":"bool","name":"limitsActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLaunchInfo","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"trading","type":"bool"},{"internalType":"uint256","name":"tradingTimestamp","type":"uint256"},{"internalType":"bool","name":"protectionActive","type":"bool"},{"internalType":"bool","name":"launchPeriodEnded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSecurityInfo","outputs":[{"internalType":"bool","name":"losslessActive","type":"bool"},{"internalType":"address","name":"losslessController","type":"address"},{"internalType":"address","name":"currentAdmin","type":"address"},{"internalType":"address","name":"currentRecoveryAdmin","type":"address"},{"internalType":"uint256","name":"timelock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenomicsInfo","outputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"},{"internalType":"bool","name":"isTaxFree","type":"bool"},{"internalType":"string","name":"description","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLosslessOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTransactionBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchAdminRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lossless","outputs":[{"internalType":"contract ILosslessController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"losslessTurnOffTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"proposeLosslessTurnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoveryAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceLaunchAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setLosslessAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"timelockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"transferEmergencyRoleToMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"from","type":"address[]"}],"name":"transferOutBlacklistedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"bytes32","name":"keyHash","type":"bytes32"}],"name":"transferRecoveryAdminOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransaction","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526006805461ffff19169055600f805460ff1990811660011790915560128054909116905534801562000034575f80fd5b506040516200424b3803806200424b83398101604081905262000057916200050d565b600180556002805460ff191690556001600160a01b038516620000c15760405162461bcd60e51b815260206004820152601a60248201527f43484f4f43483a20496e76616c696420636f6e74726f6c6c657200000000000060448201526064015b60405180910390fd5b6001600160a01b038416620001195760405162461bcd60e51b815260206004820152601e60248201527f43484f4f43483a20496e76616c6964206c6f73736c6573732061646d696e00006044820152606401620000b8565b6001600160a01b038316620001715760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a20496e76616c696420656d657267656e63792061646d696e006044820152606401620000b8565b6001600160a01b038216620001c95760405162461bcd60e51b815260206004820152601e60248201527f43484f4f43483a20496e76616c6964207265636f766572792061646d696e00006044820152606401620000b8565b610e108110156200021d5760405162461bcd60e51b815260206004820152601a60248201527f43484f4f43483a2054696d656c6f636b20746f6f2073686f72740000000000006044820152606401620000b8565b62278d00811115620002725760405162461bcd60e51b815260206004820152601960248201527f43484f4f43483a2054696d656c6f636b20746f6f206c6f6e67000000000000006044820152606401620000b8565b600880546001600160a01b038088166001600160a01b03199283161790925560098054878416908316179055600a805492851692909116919091179055600d819055620002c75f620002c13390565b62000445565b50620002f47f7c40d5c3a0ded30ce1f4aefc0ffa0ae4e05a6b698b759a90fbdd0ef31cfe9cd13362000445565b50620003217fbf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b268462000445565b506200034e7f261ff18f0ac1ec491087976045becb30b450301d7ca8a65eefee86a7c82e62998562000445565b506c15560ab54925129e44b52000006005819055335f908152600360205260409020819055620003819060c89062000570565b6014556200039e60646c15560ab54925129e44b520000062000570565b601555335f8181526016602090815260408083208054600160ff1991821681179092556001600160a01b038a81168652838620805483168417905589811686528386208054831684179055881685528285208054909116909117905542601755516c15560ab54925129e44b520000081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050505062000590565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620004e8575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200049f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620004eb565b505f5b92915050565b80516001600160a01b038116811462000508575f80fd5b919050565b5f805f805f60a0868803121562000522575f80fd5b6200052d86620004f1565b94506200053d60208701620004f1565b93506200054d60408701620004f1565b92506200055d60608701620004f1565b9150608086015190509295509295909350565b5f826200058b57634e487b7160e01b5f52601260045260245ffd5b500490565b613cad806200059e5f395ff3fe60806040526004361061041e575f3560e01c806379cc67901161021d578063c0a904a211610122578063dd62ed3e116100aa578063e55c07c511610079578063e55c07c514610c0d578063f470d47014610c38578063f851a44014610c7f578063fae3720114610c9e578063ff42420a14610cbc57610470565b8063dd62ed3e14610b75578063ddb69c9314610bb9578063de4cab0714610bd8578063e3edc3cb14610bf857610470565b8063ccfb7633116100f1578063ccfb76331461063c578063d173dffb146104ec578063d547741f14610b2d578063d6e242b814610b4c578063d89135cd14610b6057610470565b8063c0a904a214610ac0578063c6d8b6d714610adf578063c8c8ebe414610aff578063ccfa214f14610b1457610470565b8063a217fddf116101a5578063a9059cbb11610174578063a9059cbb14610a45578063aa4bde2814610a64578063b38fe95714610a79578063b5c2287714610a8d578063bed9985014610aac57610470565b8063a217fddf146104ec578063a2240e19146109dc578063a457c2d7146109fb578063a707603814610a1a57610470565b80638a8c523c116101ec5780638a8c523c1461096b57806391d148541461097f57806393310ffe1461099e578063936af911146109bd57806395d89b411461050d57610470565b806379cc6790146108cc5780638456cb59146108eb5780638701b75c146108ff5780638711a7191461091357610470565b806336568abe116103235780635cce86cd116102ab5780636e5b326f1161027a5780636e5b326f1461084e5780636e9960c31461086757806370a082311461088457806372e2bff8146108b8578063771282f61461058157610470565b80635cce86cd146107d75780635f6529a31461080557806361086b001461082457806365cf7c9b1461083957610470565b80634ada218b116102f25780634ada218b1461077d57806354ad8aee146104ec57806359c89d39146107965780635b8a194a146107ac5780635c975abb146107c057610470565b806336568abe1461070c578063395093511461072b5780633f4ba83a1461074a57806342966c681461075e57610470565b8063248a9ca3116103a65780632ecaf675116103755780632ecaf6751461066f5780632f2ff15d14610684578063307aebc9146106a3578063313ce567146106ba57806334f6ebf5146106d557610470565b8063248a9ca3146105f957806325b617031461062757806328de61281461063c5780632baa3c9e1461065057610470565b8063095ea7b3116103ed578063095ea7b31461056257806318160ddd146105815780631dfa8e7a1461059557806320df4359146105ba57806323b872dd146105da57610470565b806301ffc9a7146104b857806302af37bb146104ec57806306fdde031461050d5780630783dafe1461054157610470565b366104705760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2044697265637420455448206e6f742061636365707465640060448201526064015b60405180910390fd5b60405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2046756e6374696f6e20646f6573206e6f74206578697374006044820152606401610467565b3480156104c3575f80fd5b506104d76104d2366004613728565b610cfc565b60405190151581526020015b60405180910390f35b3480156104f7575f80fd5b506104ff5f81565b6040519081526020016104e3565b348015610518575f80fd5b506040805180820182526006815265086909e9e86960d31b602082015290516104e39190613799565b34801561054c575f80fd5b5061056061055b3660046137c6565b610d32565b005b34801561056d575f80fd5b506104d761057c3660046137df565b610eae565b34801561058c575f80fd5b506005546104ff565b3480156105a0575f80fd5b506105a9610fd0565b6040516104e3959493929190613807565b3480156105c5575f80fd5b506104ff5f80516020613bd683398151915281565b3480156105e5575f80fd5b506104d76105f436600461383e565b611005565b348015610604575f80fd5b506104ff610613366004613877565b5f9081526020819052604090206001015490565b348015610632575f80fd5b506104ff60135481565b348015610647575f80fd5b506104d7600181565b34801561065b575f80fd5b5061056061066a3660046137c6565b611265565b34801561067a575f80fd5b506104ff600d5481565b34801561068f575f80fd5b5061056061069e36600461388e565b611373565b3480156106ae575f80fd5b506017544210156104d7565b3480156106c5575f80fd5b50604051601281526020016104e3565b3480156106e0575f80fd5b506008546106f4906001600160a01b031681565b6040516001600160a01b0390911681526020016104e3565b348015610717575f80fd5b5061056061072636600461388e565b61139d565b348015610736575f80fd5b506104d76107453660046137df565b6113d5565b348015610755575f80fd5b5061056061151a565b348015610769575f80fd5b50610560610778366004613877565b61159c565b348015610788575f80fd5b506012546104d79060ff1681565b3480156107a1575f80fd5b506104ff6201518081565b3480156107b7575f80fd5b506105606115b1565b3480156107cb575f80fd5b5060025460ff166104d7565b3480156107e2575f80fd5b506104d76107f13660046137c6565b60166020525f908152604090205460ff1681565b348015610810575f80fd5b50600a546106f4906001600160a01b031681565b34801561082f575f80fd5b506104ff600e5481565b348015610844575f80fd5b506104ff60175481565b348015610859575f80fd5b506006546104d79060ff1681565b348015610872575f80fd5b506009546001600160a01b03166106f4565b34801561088f575f80fd5b506104ff61089e3660046137c6565b6001600160a01b03165f9081526003602052604090205490565b3480156108c3575f80fd5b5061056061164d565b3480156108d7575f80fd5b506105606108e63660046137df565b611777565b3480156108f6575f80fd5b5061056061180b565b34801561090a575f80fd5b50610560611884565b34801561091e575f80fd5b50600f54600854600954600a54600d546040805160ff909616151586526001600160a01b03948516602087015292841692850192909252919091166060830152608082015260a0016104e3565b348015610976575f80fd5b50610560611965565b34801561098a575f80fd5b506104d761099936600461388e565b611a14565b3480156109a9575f80fd5b506105606109b83660046137df565b611a3c565b3480156109c8575f80fd5b506105606109d73660046138b8565b611af9565b3480156109e7575f80fd5b506105606109f6366004613927565b611d44565b348015610a06575f80fd5b506104d7610a153660046137df565b61207f565b348015610a25575f80fd5b506104ff610a343660046137c6565b60186020525f908152604090205481565b348015610a50575f80fd5b506104d7610a5f3660046137df565b612221565b348015610a6f575f80fd5b506104ff60155481565b348015610a84575f80fd5b506105606123b4565b348015610a98575f80fd5b50610560610aa736600461395b565b61249f565b348015610ab7575f80fd5b506104ff6125aa565b348015610acb575f80fd5b50610560610ada366004613a13565b6125d8565b348015610aea575f80fd5b506104ff5f80516020613bf683398151915281565b348015610b0a575f80fd5b506104ff60145481565b348015610b1f575f80fd5b50600f546104d79060ff1681565b348015610b38575f80fd5b50610560610b4736600461388e565b6126c4565b348015610b57575f80fd5b506105606126e8565b348015610b6b575f80fd5b506104ff60105481565b348015610b80575f80fd5b506104ff610b8f366004613a48565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610bc4575f80fd5b50610560610bd336600461383e565b6127d9565b348015610be3575f80fd5b506104ff5f80516020613c1683398151915281565b348015610c03575f80fd5b506104ff60075481565b348015610c18575f80fd5b506104ff610c273660046137c6565b60116020525f908152604090205481565b348015610c43575f80fd5b50610c4c612b32565b6040516104e395949392919094151585529215156020850152901515604084015260608301521515608082015260a00190565b348015610c8a575f80fd5b506009546106f4906001600160a01b031681565b348015610ca9575f80fd5b506006546104d790610100900460ff1681565b348015610cc7575f80fd5b50610cd0612ba3565b60408051958652931515602086015292840191909152151560608301521515608082015260a0016104e3565b5f6001600160e01b03198216637965db0b60e01b1480610d2c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f80516020613bd6833981519152610d4981612bf5565b816001600160a01b038116610d705760405162461bcd60e51b815260040161046790613a70565b600654610100900460ff1615610dd95760405162461bcd60e51b815260206004820152602860248201527f43484f4f43483a20456d657267656e637920726f6c6520616c72656164792072604482015267195b9bdd5b98d95960c21b6064820152608401610467565b336001600160a01b03841603610e315760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2043616e6e6f74207472616e7366657220746f2073656c66006044820152606401610467565b610e485f80516020613bd683398151915284612bff565b50610e655f80516020613bd683398151915233612c8e565b612c8e565b50826001600160a01b03167fbd68b82c6da210de6b11033390a9a8d9119a3116ff5c4a29259e8a2771ddf73942604051610ea191815260200190565b60405180910390a2505050565b5f610eb7612cf7565b826001600160a01b038116610ede5760405162461bcd60e51b815260040161046790613a70565b600f548490849060ff1615610f4d576008546001600160a01b03166347abf3be3384846040518463ffffffff1660e01b8152600401610f1f93929190613a9e565b5f604051808303815f87803b158015610f36575f80fd5b505af1158015610f48573d5f803e3d5ffd5b505050505b610f58338787612d3f565b60019350600f5460ff1615610fc7576008546001600160a01b031663900f66ef3384846040518463ffffffff1660e01b8152600401610f9993929190613a9e565b5f604051808303815f87803b158015610fb0575f80fd5b505af1158015610fc2573d5f803e3d5ffd5b505050505b50505092915050565b5f805f8060605f805f6001604051806080016040528060428152602001613c3660429139945094509450945094509091929394565b5f61100e612cf7565b60125460ff168061102d5750335f9081526016602052604090205460ff165b6110795760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a2054726164696e67206e6f7420656e61626c656400000000006044820152606401610467565b826001600160a01b0381166110a05760405162461bcd60e51b815260040161046790613a70565b600f5485908590859060ff161561112f576008546001600160a01b031663379f5c69336040516001600160e01b031960e084901b1681526001600160a01b03918216600482015281871660248201529085166044820152606481018490526084015f604051808303815f87803b158015611118575f80fd5b505af115801561112a573d5f803e3d5ffd5b505050505b6001600160a01b0388165f908152600460209081526040808320338452909152902054868110156111ad5760405162461bcd60e51b815260206004820152602260248201527f43484f4f43483a205472616e73666572206578636565647320616c6c6f77616e604482015261636560f01b6064820152608401610467565b6111b8898989612e56565b6111cc89336111c78a85613ad6565b612d3f565b6001955050600f5460ff161561125a576008546001600160a01b031663a56e8adf336040516001600160e01b031960e084901b1681526001600160a01b03918216600482015281871660248201529085166044820152606481018490526084015f604051808303815f87803b158015611243575f80fd5b505af1158015611255573d5f803e3d5ffd5b505050505b505050509392505050565b5f80516020613c1683398151915261127c81612bf5565b6001600160a01b0382166112ca5760405162461bcd60e51b815260206004820152601560248201527421a427a7a1a41d1024b73b30b634b21030b236b4b760591b6044820152606401610467565b6009546001600160a01b039081169083160361131d5760405162461bcd60e51b815260206004820152601260248201527121a427a7a1a41d1029b0b6b29030b236b4b760711b6044820152606401610467565b6040516001600160a01b038316907f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c905f90a250600980546001600160a01b0319166001600160a01b0392909216919091179055565b5f8281526020819052604090206001015461138d81612bf5565b6113978383612bff565b50505050565b6001600160a01b03811633146113c65760405163334bd91960e11b815260040160405180910390fd5b6113d08282612c8e565b505050565b5f6113de612cf7565b826001600160a01b0381166114055760405162461bcd60e51b815260040161046790613a70565b600f5460ff1615611470576008546001600160a01b031663cf5961bb3386866040518463ffffffff1660e01b815260040161144293929190613a9e565b5f604051808303815f87803b158015611459575f80fd5b505af115801561146b573d5f803e3d5ffd5b505050505b335f8181526004602090815260408083206001600160a01b03891684529091529020546114a5919086906111c7908790613ae9565b600f5460ff1615611510576008546001600160a01b03166334d01aa83386866040518463ffffffff1660e01b81526004016114e293929190613a9e565b5f604051808303815f87803b1580156114f9575f80fd5b505af115801561150b573d5f803e3d5ffd5b505050505b5060019392505050565b5f80516020613bd683398151915261153181612bf5565b611539613228565b604080518181526011918101919091527010dbdb9d1c9858dd08155b9c185d5cd959607a1b606082015242602082015233907f6758593a60801a617f0db7ba7baa12f6c9e46bafd2d55b3dad6b807d1c215a9c906080015b60405180910390a250565b6115a4612cf7565b6115ae338261327a565b50565b5f80516020613c168339815191526115c881612bf5565b600f5460ff16156116105760405162461bcd60e51b815260206004820152601260248201527121a427a7a1a41d1020b63932b0b23c9037b760711b6044820152606401610467565b600f805460ff191660011790555f600e8190556040517f1ba3b66404043da8297d0b876fa6464f2cb127edfc6626308046d4503028322b9190a150565b5f80516020613bf683398151915261166481612bf5565b60065460ff16156116b35760405162461bcd60e51b815260206004820152601960248201527810d213d3d0d20e88105b1c9958591e481c995b9bdd5b98d959603a1b6044820152606401610467565b6006805460ff19166001179055426007556116dc5f80516020613bf6833981519152610e603390565b5060405142815233905f80516020613bf6833981519152907f6f14834714f36016612ec4a4b3c78404cc1dccc78980d9d9137ae20a79b3497b906020015b60405180910390a360065460ff16801561173b5750600654610100900460ff165b156115ae576040514281527f901e130572be1ff621f91c146de69136a06a3162f2a1c3d09a008b28600a7d68906020015b60405180910390a150565b61177f612cf7565b6001600160a01b0382165f908152600460209081526040808320338452909152902054818110156117f25760405162461bcd60e51b815260206004820152601e60248201527f43484f4f43483a204275726e206578636565647320616c6c6f77616e636500006044820152606401610467565b6117fc838361327a565b6113d083336111c78585613ad6565b5f80516020613bd683398151915261182281612bf5565b61182a61360c565b60408051818152600f918101919091526e10dbdb9d1c9858dd0814185d5cd959608a1b606082015242602082015233907f6758593a60801a617f0db7ba7baa12f6c9e46bafd2d55b3dad6b807d1c215a9c90608001611591565b5f80516020613bd683398151915261189b81612bf5565b600654610100900460ff16156118ef5760405162461bcd60e51b815260206004820152601960248201527810d213d3d0d20e88105b1c9958591e481c995b9bdd5b98d959603a1b6044820152606401610467565b6006805461ff0019166101001790556007545f0361190c57426007555b6119235f80516020613bd683398151915233612c8e565b5060405142815233905f80516020613bd6833981519152907f6f14834714f36016612ec4a4b3c78404cc1dccc78980d9d9137ae20a79b3497b9060200161171a565b5f80516020613bf683398151915261197c81612bf5565b60125460ff16156119cf5760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2054726164696e6720616c726561647920656e61626c6564006044820152606401610467565b6012805460ff191660011790554260138190556040517fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239161176c9190815260200190565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f80516020613c16833981519152611a5381612bf5565b6001600160a01b038316611aa95760405162461bcd60e51b815260206004820152601960248201527f43484f4f43483a20496e76616c69642063616e646964617465000000000000006044820152606401610467565b600b80546001600160a01b0319166001600160a01b038516908117909155600c8390556040517f6c591da8da2f6e69746d7d9ae61c27ee29fbe303798141b4942ae2aef54274b1905f90a2505050565b6008546001600160a01b0316336001600160a01b031614611b545760405162461bcd60e51b815260206004820152601560248201527443484f4f43483a204f6e6c79206c6f73736c65737360581b6044820152606401610467565b600f5460ff16611b9d5760405162461bcd60e51b815260206004820152601460248201527321a427a7a1a41d102637b9b9b632b9b99037b33360611b6044820152606401610467565b80611be05760405162461bcd60e51b815260206004820152601360248201527243484f4f43483a20456d70747920617272617960681b6044820152606401610467565b5f805b82811015611d0a575f848483818110611bfe57611bfe613afc565b9050602002016020810190611c1391906137c6565b90506001600160a01b038116611c6b5760405162461bcd60e51b815260206004820152601760248201527f43484f4f43483a20496e76616c696420616464726573730000000000000000006044820152606401610467565b6001600160a01b0381165f908152600360205260409020548015611cf5576001600160a01b0382165f90815260036020526040812055611cab8185613ae9565b6008546040518381529195506001600160a01b0390811691908416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50508080611d0290613b10565b915050611be3565b5080156113d0576008546001600160a01b03165f9081526003602052604081208054839290611d3a908490613ae9565b9091555050505050565b5f80516020613bf6833981519152611d5b81612bf5565b60065460ff1615611d7e5760405162461bcd60e51b815260040161046790613b28565b62015180601754611d8f9190613ae9565b4210611ddd5760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a204c61756e636820706572696f6420656e64656400000000006044820152606401610467565b5f8311611e3b5760405162461bcd60e51b815260206004820152602660248201527f43484f4f43483a204d6178207472616e73616374696f6e2063616e6e6f74206260448201526565207a65726f60d01b6064820152608401610467565b5f8211611e945760405162461bcd60e51b815260206004820152602160248201527f43484f4f43483a204d61782077616c6c65742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610467565b6c15560ab54925129e44b5200000831115611f005760405162461bcd60e51b815260206004820152602660248201527f43484f4f43483a204d6178207472616e73616374696f6e206578636565647320604482015265737570706c7960d01b6064820152608401610467565b6c15560ab54925129e44b5200000821115611f675760405162461bcd60e51b815260206004820152602160248201527f43484f4f43483a204d61782077616c6c6574206578636565647320737570706c6044820152607960f81b6064820152608401610467565b611f806103e86c15560ab54925129e44b5200000613b6d565b831015611fcf5760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a204d6178207472616e73616374696f6e20746f6f206c6f77006044820152606401610467565b611fe86101f46c15560ab54925129e44b5200000613b6d565b8210156120375760405162461bcd60e51b815260206004820152601a60248201527f43484f4f43483a204d61782077616c6c657420746f6f206c6f770000000000006044820152606401610467565b6014839055601582905560408051848152602081018490527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb910160405180910390a1505050565b5f612088612cf7565b826001600160a01b0381166120af5760405162461bcd60e51b815260040161046790613a70565b600f5460ff161561211a576008546001600160a01b031663568c75a93386866040518463ffffffff1660e01b81526004016120ec93929190613a9e565b5f604051808303815f87803b158015612103575f80fd5b505af1158015612115573d5f803e3d5ffd5b505050505b335f9081526004602090815260408083206001600160a01b03881684529091529020548381101561219c5760405162461bcd60e51b815260206004820152602660248201527f43484f4f43483a2044656372656173656420616c6c6f77616e63652062656c6f60448201526577207a65726f60d01b6064820152608401610467565b6121ab33866111c78785613ad6565b600f5460ff1615612216576008546001600160a01b031663ded1f4d03387876040518463ffffffff1660e01b81526004016121e893929190613a9e565b5f604051808303815f87803b1580156121ff575f80fd5b505af1158015612211573d5f803e3d5ffd5b505050505b506001949350505050565b5f61222a612cf7565b60125460ff16806122495750335f9081526016602052604090205460ff165b6122955760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a2054726164696e67206e6f7420656e61626c656400000000006044820152606401610467565b826001600160a01b0381166122bc5760405162461bcd60e51b815260040161046790613a70565b33600f548590859060ff161561232e57600854604051631ffb811f60e01b81526001600160a01b0390911690631ffb811f9061230090869086908690600401613a9e565b5f604051808303815f87803b158015612317575f80fd5b505af1158015612329573d5f803e3d5ffd5b505050505b612339338888612e56565b60019450600f5460ff16156123aa57600854604051637a48316560e11b81526001600160a01b039091169063f49062ca9061237c90869086908690600401613a9e565b5f604051808303815f87803b158015612393575f80fd5b505af11580156123a5573d5f803e3d5ffd5b505050505b5050505092915050565b5f80516020613c168339815191526123cb81612bf5565b600e545f036124135760405162461bcd60e51b815260206004820152601460248201527310d213d3d0d20e88139bdd081c1c9bdc1bdcd95960621b6044820152606401610467565b600e544210156124655760405162461bcd60e51b815260206004820152601760248201527f43484f4f43483a2054696d656c6f636b206163746976650000000000000000006044820152606401610467565b600f805460ff191690555f600e8190556040517f3eb72350c9c7928d31e9ab450bfff2c159434aa4b82658a7d8eae7f109cb4e7b9190a150565b600b546001600160a01b0316336001600160a01b0316146124fa5760405162461bcd60e51b815260206004820152601560248201527443484f4f43483a204e6f742063616e64696461746560581b6044820152606401610467565b600c5481516020830120146125475760405162461bcd60e51b815260206004820152601360248201527243484f4f43483a20496e76616c6964206b657960681b6044820152606401610467565b600b546040516001600160a01b03909116907fb94bba6936ec7f75ee931dadf6e1a4d66b43d09b6fa0178fb13df9b77fb5841f905f90a250600b8054600a80546001600160a01b03199081166001600160a01b038416179091551690555f600c55565b5f6c15560ab54925129e44b52000006010546127106125c99190613b8c565b6125d39190613b6d565b905090565b5f80516020613bf68339815191526125ef81612bf5565b60065460ff16156126125760405162461bcd60e51b815260040161046790613b28565b620151806017546126239190613ae9565b42106126715760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a204c61756e636820706572696f6420656e64656400000000006044820152606401610467565b826001600160a01b0381166126985760405162461bcd60e51b815260040161046790613a70565b50506001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b5f828152602081905260409020600101546126de81612bf5565b6113978383612c8e565b5f80516020613c168339815191526126ff81612bf5565b600e541561274f5760405162461bcd60e51b815260206004820152601860248201527f43484f4f43483a20416c72656164792070726f706f73656400000000000000006044820152606401610467565b600f5460ff166127975760405162461bcd60e51b815260206004820152601360248201527221a427a7a1a41d1020b63932b0b23c9037b33360691b6044820152606401610467565b600d546127a49042613ae9565b600e8190556040519081527f6ca688e6e3ddd707280140b2bf0106afe883689b6c74e68cbd517576dd9c245a9060200161176c565b5f80516020613bd68339815191526127f081612bf5565b6127f8613649565b826001600160a01b03811661281f5760405162461bcd60e51b815260040161046790613a70565b306001600160a01b038616036128835760405162461bcd60e51b8152602060048201526024808201527f43484f4f43483a2043616e6e6f74207265636f7665722043484f4f434820746f6044820152636b656e7360e01b6064820152608401610467565b5f83116128e35760405162461bcd60e51b815260206004820152602860248201527f43484f4f43483a20416d6f756e74206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608401610467565b6001600160a01b03851661297a57824710156129415760405162461bcd60e51b815260206004820181905260248201527f43484f4f43483a20496e73756666696369656e74204554482062616c616e63656044820152606401610467565b6040516001600160a01b0385169084156108fc029085905f818181858888f19350505050158015612974573d5f803e3d5ffd5b50612aad565b6040516370a0823160e01b815230600482015283906001600160a01b038716906370a0823190602401602060405180830381865afa1580156129be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e29190613ba3565b1015612a3b5760405162461bcd60e51b815260206004820152602260248201527f43484f4f43483a20496e73756666696369656e7420746f6b656e2062616c616e604482015261636560f01b6064820152608401610467565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303815f875af1158015612a87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aab9190613bba565b505b836001600160a01b03167f6758593a60801a617f0db7ba7baa12f6c9e46bafd2d55b3dad6b807d1c215a9c84604051612b20919060408082526019908201527f4163636964656e74616c20546f6b656e205265636f76657279000000000000006060820152602081019190915260800190565b60405180910390a25061139760018055565b6006545f908190819081908190819060ff168015612b575750600654610100900460ff165b6006549091505f9060ff16158015612b7e575062015180601754612b7b9190613ae9565b42105b60065460075460ff808316159b61010090930416159950939750929550935090915050565b5f805f805f60175460125f9054906101000a900460ff1660135462015180601754612bce9190613ae9565b421062015180601754612be19190613ae9565b421015945094509450945094509091929394565b6115ae81336136a2565b5f612c0a8383611a14565b612c87575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055612c3f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610d2c565b505f610d2c565b5f612c998383611a14565b15612c87575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610d2c565b60025460ff1615612d3d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610467565b565b6001600160a01b038316612d9f5760405162461bcd60e51b815260206004820152602160248201527f43484f4f43483a20417070726f76652066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610467565b6001600160a01b038216612df55760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a20417070726f766520746f207a65726f2061646472657373006044820152606401610467565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316612eb75760405162461bcd60e51b815260206004820152602260248201527f43484f4f43483a205472616e736665722066726f6d207a65726f206164647265604482015261737360f01b6064820152608401610467565b6001600160a01b038216612f0d5760405162461bcd60e51b815260206004820181905260248201527f43484f4f43483a205472616e7366657220746f207a65726f20616464726573736044820152606401610467565b6001600160a01b0383165f90815260036020526040902054811115612f745760405162461bcd60e51b815260206004820181905260248201527f43484f4f43483a205472616e7366657220657863656564732062616c616e63656044820152606401610467565b60065460ff16158015612f96575062015180601754612f939190613ae9565b42105b8015612fba57506001600160a01b0383165f9081526016602052604090205460ff16155b8015612fde57506001600160a01b0382165f9081526016602052604090205460ff16155b1561306f576001600160a01b0383165f908152601860205260409020544390036130545760405162461bcd60e51b815260206004820152602160248201527f43484f4f43483a204f6e65207472616e73616374696f6e2070657220626c6f636044820152606b60f81b6064820152608401610467565b6001600160a01b0383165f9081526018602052604090204390555b60065460ff1615801561309a57506001600160a01b0383165f9081526016602052604090205460ff16155b80156130be57506001600160a01b0382165f9081526016602052604090205460ff16155b15613189576014548111156131155760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2045786365656473206d6178207472616e73616374696f6e006044820152606401610467565b6015546001600160a01b0383165f9081526003602052604090205461313b908390613ae9565b11156131895760405162461bcd60e51b815260206004820152601a60248201527f43484f4f43483a2045786365656473206d61782077616c6c65740000000000006044820152606401610467565b6001600160a01b0383165f90815260036020526040812080548392906131b0908490613ad6565b90915550506001600160a01b0382165f90815260036020526040812080548392906131dc908490613ae9565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e4991815260200190565b6132306136df565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600f548290829060ff16156132eb57600854604051634a1fefbd60e01b81526001600160a01b0384811660048301526024820184905290911690634a1fefbd906044015f604051808303815f87803b1580156132d4575f80fd5b505af11580156132e6573d5f803e3d5ffd5b505050505b6001600160a01b0384166133415760405162461bcd60e51b815260206004820152601e60248201527f43484f4f43483a204275726e2066726f6d207a65726f206164647265737300006044820152606401610467565b6001600160a01b0384165f908152600360205260409020548311156133a85760405162461bcd60e51b815260206004820152601c60248201527f43484f4f43483a204275726e20657863656564732062616c616e6365000000006044820152606401610467565b5f83116133f75760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2043616e6e6f74206275726e207a65726f20616d6f756e74006044820152606401610467565b8260055410156134495760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a204275726e206578636565647320737570706c7900000000006044820152606401610467565b6001600160a01b0384165f9081526003602052604081208054859290613470908490613ad6565b925050819055508260055f8282546134889190613ad6565b925050819055508260105f8282546134a09190613ae9565b90915550506001600160a01b0384165f90815260116020526040812080548592906134cc908490613ae9565b90915550506040518381525f906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3836001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58460405161354c91815260200190565b60405180910390a27f32c3bb07da1fa54acaf9cd038b7d0b7e94a0ef767e1a7885771f73c0ae7e6ebb600554601054604051613592929190918252602082015260400190565b60405180910390a1600f5460ff1615611397576008546040516325c70d2d60e21b81526001600160a01b038481166004830152602482018490529091169063971c34b4906044015f604051808303815f87803b1580156135f0575f80fd5b505af1158015613602573d5f803e3d5ffd5b5050505050505050565b613614612cf7565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861325d3390565b60026001540361369b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610467565b6002600155565b6136ac8282611a14565b6136db5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610467565b5050565b60025460ff16612d3d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610467565b5f60208284031215613738575f80fd5b81356001600160e01b03198116811461374f575f80fd5b9392505050565b5f81518084525f5b8181101561377a5760208185018101518683018201520161375e565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f61374f6020830184613756565b80356001600160a01b03811681146137c1575f80fd5b919050565b5f602082840312156137d6575f80fd5b61374f826137ab565b5f80604083850312156137f0575f80fd5b6137f9836137ab565b946020939093013593505050565b858152846020820152836040820152821515606082015260a060808201525f61383360a0830184613756565b979650505050505050565b5f805f60608486031215613850575f80fd5b613859846137ab565b9250613867602085016137ab565b9150604084013590509250925092565b5f60208284031215613887575f80fd5b5035919050565b5f806040838503121561389f575f80fd5b823591506138af602084016137ab565b90509250929050565b5f80602083850312156138c9575f80fd5b823567ffffffffffffffff808211156138e0575f80fd5b818501915085601f8301126138f3575f80fd5b813581811115613901575f80fd5b8660208260051b8501011115613915575f80fd5b60209290920196919550909350505050565b5f8060408385031215613938575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561396b575f80fd5b813567ffffffffffffffff80821115613982575f80fd5b818401915084601f830112613995575f80fd5b8135818111156139a7576139a7613947565b604051601f8201601f19908116603f011681019083821181831017156139cf576139cf613947565b816040528281528760208487010111156139e7575f80fd5b826020860160208301375f928101602001929092525095945050505050565b80151581146115ae575f80fd5b5f8060408385031215613a24575f80fd5b613a2d836137ab565b91506020830135613a3d81613a06565b809150509250929050565b5f8060408385031215613a59575f80fd5b613a62836137ab565b91506138af602084016137ab565b60208082526014908201527343484f4f43483a205a65726f206164647265737360601b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d2c57610d2c613ac2565b80820180821115610d2c57610d2c613ac2565b634e487b7160e01b5f52603260045260245ffd5b5f60018201613b2157613b21613ac2565b5060010190565b60208082526025908201527f43484f4f43483a204c61756e63682061646d696e20706f776572732072656e6f6040820152641d5b98d95960da1b606082015260800190565b5f82613b8757634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610d2c57610d2c613ac2565b5f60208284031215613bb3575f80fd5b5051919050565b5f60208284031215613bca575f80fd5b815161374f81613a0656febf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b267c40d5c3a0ded30ce1f4aefc0ffa0ae4e05a6b698b759a90fbdd0ef31cfe9cd1261ff18f0ac1ec491087976045becb30b450301d7ca8a65eefee86a7c82e629943484f4f43483a2031303025207461782d6672656520666f72657665722c206d696e696d616c2061646d696e20706f776572732c206d6178696d756d207472757374a26469706673582212204d0ccfb85d18e30f0a56afc023ba9e1108d1b8fbcfc59331bfef47e070f1b70164736f6c6343000814003300000000000000000000000038d40f5c8375f84c5b90bc460a94a436d09133fb0000000000000000000000008540cf5afac19619a349fdaa7a9fa85ef2f097330000000000000000000000008513f04fdc62bfd78177f72a189a2d589a35e8550000000000000000000000008513f04fdc62bfd78177f72a189a2d589a35e8550000000000000000000000000000000000000000000000000000000000015180
Deployed Bytecode
0x60806040526004361061041e575f3560e01c806379cc67901161021d578063c0a904a211610122578063dd62ed3e116100aa578063e55c07c511610079578063e55c07c514610c0d578063f470d47014610c38578063f851a44014610c7f578063fae3720114610c9e578063ff42420a14610cbc57610470565b8063dd62ed3e14610b75578063ddb69c9314610bb9578063de4cab0714610bd8578063e3edc3cb14610bf857610470565b8063ccfb7633116100f1578063ccfb76331461063c578063d173dffb146104ec578063d547741f14610b2d578063d6e242b814610b4c578063d89135cd14610b6057610470565b8063c0a904a214610ac0578063c6d8b6d714610adf578063c8c8ebe414610aff578063ccfa214f14610b1457610470565b8063a217fddf116101a5578063a9059cbb11610174578063a9059cbb14610a45578063aa4bde2814610a64578063b38fe95714610a79578063b5c2287714610a8d578063bed9985014610aac57610470565b8063a217fddf146104ec578063a2240e19146109dc578063a457c2d7146109fb578063a707603814610a1a57610470565b80638a8c523c116101ec5780638a8c523c1461096b57806391d148541461097f57806393310ffe1461099e578063936af911146109bd57806395d89b411461050d57610470565b806379cc6790146108cc5780638456cb59146108eb5780638701b75c146108ff5780638711a7191461091357610470565b806336568abe116103235780635cce86cd116102ab5780636e5b326f1161027a5780636e5b326f1461084e5780636e9960c31461086757806370a082311461088457806372e2bff8146108b8578063771282f61461058157610470565b80635cce86cd146107d75780635f6529a31461080557806361086b001461082457806365cf7c9b1461083957610470565b80634ada218b116102f25780634ada218b1461077d57806354ad8aee146104ec57806359c89d39146107965780635b8a194a146107ac5780635c975abb146107c057610470565b806336568abe1461070c578063395093511461072b5780633f4ba83a1461074a57806342966c681461075e57610470565b8063248a9ca3116103a65780632ecaf675116103755780632ecaf6751461066f5780632f2ff15d14610684578063307aebc9146106a3578063313ce567146106ba57806334f6ebf5146106d557610470565b8063248a9ca3146105f957806325b617031461062757806328de61281461063c5780632baa3c9e1461065057610470565b8063095ea7b3116103ed578063095ea7b31461056257806318160ddd146105815780631dfa8e7a1461059557806320df4359146105ba57806323b872dd146105da57610470565b806301ffc9a7146104b857806302af37bb146104ec57806306fdde031461050d5780630783dafe1461054157610470565b366104705760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2044697265637420455448206e6f742061636365707465640060448201526064015b60405180910390fd5b60405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2046756e6374696f6e20646f6573206e6f74206578697374006044820152606401610467565b3480156104c3575f80fd5b506104d76104d2366004613728565b610cfc565b60405190151581526020015b60405180910390f35b3480156104f7575f80fd5b506104ff5f81565b6040519081526020016104e3565b348015610518575f80fd5b506040805180820182526006815265086909e9e86960d31b602082015290516104e39190613799565b34801561054c575f80fd5b5061056061055b3660046137c6565b610d32565b005b34801561056d575f80fd5b506104d761057c3660046137df565b610eae565b34801561058c575f80fd5b506005546104ff565b3480156105a0575f80fd5b506105a9610fd0565b6040516104e3959493929190613807565b3480156105c5575f80fd5b506104ff5f80516020613bd683398151915281565b3480156105e5575f80fd5b506104d76105f436600461383e565b611005565b348015610604575f80fd5b506104ff610613366004613877565b5f9081526020819052604090206001015490565b348015610632575f80fd5b506104ff60135481565b348015610647575f80fd5b506104d7600181565b34801561065b575f80fd5b5061056061066a3660046137c6565b611265565b34801561067a575f80fd5b506104ff600d5481565b34801561068f575f80fd5b5061056061069e36600461388e565b611373565b3480156106ae575f80fd5b506017544210156104d7565b3480156106c5575f80fd5b50604051601281526020016104e3565b3480156106e0575f80fd5b506008546106f4906001600160a01b031681565b6040516001600160a01b0390911681526020016104e3565b348015610717575f80fd5b5061056061072636600461388e565b61139d565b348015610736575f80fd5b506104d76107453660046137df565b6113d5565b348015610755575f80fd5b5061056061151a565b348015610769575f80fd5b50610560610778366004613877565b61159c565b348015610788575f80fd5b506012546104d79060ff1681565b3480156107a1575f80fd5b506104ff6201518081565b3480156107b7575f80fd5b506105606115b1565b3480156107cb575f80fd5b5060025460ff166104d7565b3480156107e2575f80fd5b506104d76107f13660046137c6565b60166020525f908152604090205460ff1681565b348015610810575f80fd5b50600a546106f4906001600160a01b031681565b34801561082f575f80fd5b506104ff600e5481565b348015610844575f80fd5b506104ff60175481565b348015610859575f80fd5b506006546104d79060ff1681565b348015610872575f80fd5b506009546001600160a01b03166106f4565b34801561088f575f80fd5b506104ff61089e3660046137c6565b6001600160a01b03165f9081526003602052604090205490565b3480156108c3575f80fd5b5061056061164d565b3480156108d7575f80fd5b506105606108e63660046137df565b611777565b3480156108f6575f80fd5b5061056061180b565b34801561090a575f80fd5b50610560611884565b34801561091e575f80fd5b50600f54600854600954600a54600d546040805160ff909616151586526001600160a01b03948516602087015292841692850192909252919091166060830152608082015260a0016104e3565b348015610976575f80fd5b50610560611965565b34801561098a575f80fd5b506104d761099936600461388e565b611a14565b3480156109a9575f80fd5b506105606109b83660046137df565b611a3c565b3480156109c8575f80fd5b506105606109d73660046138b8565b611af9565b3480156109e7575f80fd5b506105606109f6366004613927565b611d44565b348015610a06575f80fd5b506104d7610a153660046137df565b61207f565b348015610a25575f80fd5b506104ff610a343660046137c6565b60186020525f908152604090205481565b348015610a50575f80fd5b506104d7610a5f3660046137df565b612221565b348015610a6f575f80fd5b506104ff60155481565b348015610a84575f80fd5b506105606123b4565b348015610a98575f80fd5b50610560610aa736600461395b565b61249f565b348015610ab7575f80fd5b506104ff6125aa565b348015610acb575f80fd5b50610560610ada366004613a13565b6125d8565b348015610aea575f80fd5b506104ff5f80516020613bf683398151915281565b348015610b0a575f80fd5b506104ff60145481565b348015610b1f575f80fd5b50600f546104d79060ff1681565b348015610b38575f80fd5b50610560610b4736600461388e565b6126c4565b348015610b57575f80fd5b506105606126e8565b348015610b6b575f80fd5b506104ff60105481565b348015610b80575f80fd5b506104ff610b8f366004613a48565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610bc4575f80fd5b50610560610bd336600461383e565b6127d9565b348015610be3575f80fd5b506104ff5f80516020613c1683398151915281565b348015610c03575f80fd5b506104ff60075481565b348015610c18575f80fd5b506104ff610c273660046137c6565b60116020525f908152604090205481565b348015610c43575f80fd5b50610c4c612b32565b6040516104e395949392919094151585529215156020850152901515604084015260608301521515608082015260a00190565b348015610c8a575f80fd5b506009546106f4906001600160a01b031681565b348015610ca9575f80fd5b506006546104d790610100900460ff1681565b348015610cc7575f80fd5b50610cd0612ba3565b60408051958652931515602086015292840191909152151560608301521515608082015260a0016104e3565b5f6001600160e01b03198216637965db0b60e01b1480610d2c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f80516020613bd6833981519152610d4981612bf5565b816001600160a01b038116610d705760405162461bcd60e51b815260040161046790613a70565b600654610100900460ff1615610dd95760405162461bcd60e51b815260206004820152602860248201527f43484f4f43483a20456d657267656e637920726f6c6520616c72656164792072604482015267195b9bdd5b98d95960c21b6064820152608401610467565b336001600160a01b03841603610e315760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2043616e6e6f74207472616e7366657220746f2073656c66006044820152606401610467565b610e485f80516020613bd683398151915284612bff565b50610e655f80516020613bd683398151915233612c8e565b612c8e565b50826001600160a01b03167fbd68b82c6da210de6b11033390a9a8d9119a3116ff5c4a29259e8a2771ddf73942604051610ea191815260200190565b60405180910390a2505050565b5f610eb7612cf7565b826001600160a01b038116610ede5760405162461bcd60e51b815260040161046790613a70565b600f548490849060ff1615610f4d576008546001600160a01b03166347abf3be3384846040518463ffffffff1660e01b8152600401610f1f93929190613a9e565b5f604051808303815f87803b158015610f36575f80fd5b505af1158015610f48573d5f803e3d5ffd5b505050505b610f58338787612d3f565b60019350600f5460ff1615610fc7576008546001600160a01b031663900f66ef3384846040518463ffffffff1660e01b8152600401610f9993929190613a9e565b5f604051808303815f87803b158015610fb0575f80fd5b505af1158015610fc2573d5f803e3d5ffd5b505050505b50505092915050565b5f805f8060605f805f6001604051806080016040528060428152602001613c3660429139945094509450945094509091929394565b5f61100e612cf7565b60125460ff168061102d5750335f9081526016602052604090205460ff165b6110795760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a2054726164696e67206e6f7420656e61626c656400000000006044820152606401610467565b826001600160a01b0381166110a05760405162461bcd60e51b815260040161046790613a70565b600f5485908590859060ff161561112f576008546001600160a01b031663379f5c69336040516001600160e01b031960e084901b1681526001600160a01b03918216600482015281871660248201529085166044820152606481018490526084015f604051808303815f87803b158015611118575f80fd5b505af115801561112a573d5f803e3d5ffd5b505050505b6001600160a01b0388165f908152600460209081526040808320338452909152902054868110156111ad5760405162461bcd60e51b815260206004820152602260248201527f43484f4f43483a205472616e73666572206578636565647320616c6c6f77616e604482015261636560f01b6064820152608401610467565b6111b8898989612e56565b6111cc89336111c78a85613ad6565b612d3f565b6001955050600f5460ff161561125a576008546001600160a01b031663a56e8adf336040516001600160e01b031960e084901b1681526001600160a01b03918216600482015281871660248201529085166044820152606481018490526084015f604051808303815f87803b158015611243575f80fd5b505af1158015611255573d5f803e3d5ffd5b505050505b505050509392505050565b5f80516020613c1683398151915261127c81612bf5565b6001600160a01b0382166112ca5760405162461bcd60e51b815260206004820152601560248201527421a427a7a1a41d1024b73b30b634b21030b236b4b760591b6044820152606401610467565b6009546001600160a01b039081169083160361131d5760405162461bcd60e51b815260206004820152601260248201527121a427a7a1a41d1029b0b6b29030b236b4b760711b6044820152606401610467565b6040516001600160a01b038316907f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c905f90a250600980546001600160a01b0319166001600160a01b0392909216919091179055565b5f8281526020819052604090206001015461138d81612bf5565b6113978383612bff565b50505050565b6001600160a01b03811633146113c65760405163334bd91960e11b815260040160405180910390fd5b6113d08282612c8e565b505050565b5f6113de612cf7565b826001600160a01b0381166114055760405162461bcd60e51b815260040161046790613a70565b600f5460ff1615611470576008546001600160a01b031663cf5961bb3386866040518463ffffffff1660e01b815260040161144293929190613a9e565b5f604051808303815f87803b158015611459575f80fd5b505af115801561146b573d5f803e3d5ffd5b505050505b335f8181526004602090815260408083206001600160a01b03891684529091529020546114a5919086906111c7908790613ae9565b600f5460ff1615611510576008546001600160a01b03166334d01aa83386866040518463ffffffff1660e01b81526004016114e293929190613a9e565b5f604051808303815f87803b1580156114f9575f80fd5b505af115801561150b573d5f803e3d5ffd5b505050505b5060019392505050565b5f80516020613bd683398151915261153181612bf5565b611539613228565b604080518181526011918101919091527010dbdb9d1c9858dd08155b9c185d5cd959607a1b606082015242602082015233907f6758593a60801a617f0db7ba7baa12f6c9e46bafd2d55b3dad6b807d1c215a9c906080015b60405180910390a250565b6115a4612cf7565b6115ae338261327a565b50565b5f80516020613c168339815191526115c881612bf5565b600f5460ff16156116105760405162461bcd60e51b815260206004820152601260248201527121a427a7a1a41d1020b63932b0b23c9037b760711b6044820152606401610467565b600f805460ff191660011790555f600e8190556040517f1ba3b66404043da8297d0b876fa6464f2cb127edfc6626308046d4503028322b9190a150565b5f80516020613bf683398151915261166481612bf5565b60065460ff16156116b35760405162461bcd60e51b815260206004820152601960248201527810d213d3d0d20e88105b1c9958591e481c995b9bdd5b98d959603a1b6044820152606401610467565b6006805460ff19166001179055426007556116dc5f80516020613bf6833981519152610e603390565b5060405142815233905f80516020613bf6833981519152907f6f14834714f36016612ec4a4b3c78404cc1dccc78980d9d9137ae20a79b3497b906020015b60405180910390a360065460ff16801561173b5750600654610100900460ff165b156115ae576040514281527f901e130572be1ff621f91c146de69136a06a3162f2a1c3d09a008b28600a7d68906020015b60405180910390a150565b61177f612cf7565b6001600160a01b0382165f908152600460209081526040808320338452909152902054818110156117f25760405162461bcd60e51b815260206004820152601e60248201527f43484f4f43483a204275726e206578636565647320616c6c6f77616e636500006044820152606401610467565b6117fc838361327a565b6113d083336111c78585613ad6565b5f80516020613bd683398151915261182281612bf5565b61182a61360c565b60408051818152600f918101919091526e10dbdb9d1c9858dd0814185d5cd959608a1b606082015242602082015233907f6758593a60801a617f0db7ba7baa12f6c9e46bafd2d55b3dad6b807d1c215a9c90608001611591565b5f80516020613bd683398151915261189b81612bf5565b600654610100900460ff16156118ef5760405162461bcd60e51b815260206004820152601960248201527810d213d3d0d20e88105b1c9958591e481c995b9bdd5b98d959603a1b6044820152606401610467565b6006805461ff0019166101001790556007545f0361190c57426007555b6119235f80516020613bd683398151915233612c8e565b5060405142815233905f80516020613bd6833981519152907f6f14834714f36016612ec4a4b3c78404cc1dccc78980d9d9137ae20a79b3497b9060200161171a565b5f80516020613bf683398151915261197c81612bf5565b60125460ff16156119cf5760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2054726164696e6720616c726561647920656e61626c6564006044820152606401610467565b6012805460ff191660011790554260138190556040517fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239161176c9190815260200190565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f80516020613c16833981519152611a5381612bf5565b6001600160a01b038316611aa95760405162461bcd60e51b815260206004820152601960248201527f43484f4f43483a20496e76616c69642063616e646964617465000000000000006044820152606401610467565b600b80546001600160a01b0319166001600160a01b038516908117909155600c8390556040517f6c591da8da2f6e69746d7d9ae61c27ee29fbe303798141b4942ae2aef54274b1905f90a2505050565b6008546001600160a01b0316336001600160a01b031614611b545760405162461bcd60e51b815260206004820152601560248201527443484f4f43483a204f6e6c79206c6f73736c65737360581b6044820152606401610467565b600f5460ff16611b9d5760405162461bcd60e51b815260206004820152601460248201527321a427a7a1a41d102637b9b9b632b9b99037b33360611b6044820152606401610467565b80611be05760405162461bcd60e51b815260206004820152601360248201527243484f4f43483a20456d70747920617272617960681b6044820152606401610467565b5f805b82811015611d0a575f848483818110611bfe57611bfe613afc565b9050602002016020810190611c1391906137c6565b90506001600160a01b038116611c6b5760405162461bcd60e51b815260206004820152601760248201527f43484f4f43483a20496e76616c696420616464726573730000000000000000006044820152606401610467565b6001600160a01b0381165f908152600360205260409020548015611cf5576001600160a01b0382165f90815260036020526040812055611cab8185613ae9565b6008546040518381529195506001600160a01b0390811691908416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50508080611d0290613b10565b915050611be3565b5080156113d0576008546001600160a01b03165f9081526003602052604081208054839290611d3a908490613ae9565b9091555050505050565b5f80516020613bf6833981519152611d5b81612bf5565b60065460ff1615611d7e5760405162461bcd60e51b815260040161046790613b28565b62015180601754611d8f9190613ae9565b4210611ddd5760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a204c61756e636820706572696f6420656e64656400000000006044820152606401610467565b5f8311611e3b5760405162461bcd60e51b815260206004820152602660248201527f43484f4f43483a204d6178207472616e73616374696f6e2063616e6e6f74206260448201526565207a65726f60d01b6064820152608401610467565b5f8211611e945760405162461bcd60e51b815260206004820152602160248201527f43484f4f43483a204d61782077616c6c65742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610467565b6c15560ab54925129e44b5200000831115611f005760405162461bcd60e51b815260206004820152602660248201527f43484f4f43483a204d6178207472616e73616374696f6e206578636565647320604482015265737570706c7960d01b6064820152608401610467565b6c15560ab54925129e44b5200000821115611f675760405162461bcd60e51b815260206004820152602160248201527f43484f4f43483a204d61782077616c6c6574206578636565647320737570706c6044820152607960f81b6064820152608401610467565b611f806103e86c15560ab54925129e44b5200000613b6d565b831015611fcf5760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a204d6178207472616e73616374696f6e20746f6f206c6f77006044820152606401610467565b611fe86101f46c15560ab54925129e44b5200000613b6d565b8210156120375760405162461bcd60e51b815260206004820152601a60248201527f43484f4f43483a204d61782077616c6c657420746f6f206c6f770000000000006044820152606401610467565b6014839055601582905560408051848152602081018490527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb910160405180910390a1505050565b5f612088612cf7565b826001600160a01b0381166120af5760405162461bcd60e51b815260040161046790613a70565b600f5460ff161561211a576008546001600160a01b031663568c75a93386866040518463ffffffff1660e01b81526004016120ec93929190613a9e565b5f604051808303815f87803b158015612103575f80fd5b505af1158015612115573d5f803e3d5ffd5b505050505b335f9081526004602090815260408083206001600160a01b03881684529091529020548381101561219c5760405162461bcd60e51b815260206004820152602660248201527f43484f4f43483a2044656372656173656420616c6c6f77616e63652062656c6f60448201526577207a65726f60d01b6064820152608401610467565b6121ab33866111c78785613ad6565b600f5460ff1615612216576008546001600160a01b031663ded1f4d03387876040518463ffffffff1660e01b81526004016121e893929190613a9e565b5f604051808303815f87803b1580156121ff575f80fd5b505af1158015612211573d5f803e3d5ffd5b505050505b506001949350505050565b5f61222a612cf7565b60125460ff16806122495750335f9081526016602052604090205460ff165b6122955760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a2054726164696e67206e6f7420656e61626c656400000000006044820152606401610467565b826001600160a01b0381166122bc5760405162461bcd60e51b815260040161046790613a70565b33600f548590859060ff161561232e57600854604051631ffb811f60e01b81526001600160a01b0390911690631ffb811f9061230090869086908690600401613a9e565b5f604051808303815f87803b158015612317575f80fd5b505af1158015612329573d5f803e3d5ffd5b505050505b612339338888612e56565b60019450600f5460ff16156123aa57600854604051637a48316560e11b81526001600160a01b039091169063f49062ca9061237c90869086908690600401613a9e565b5f604051808303815f87803b158015612393575f80fd5b505af11580156123a5573d5f803e3d5ffd5b505050505b5050505092915050565b5f80516020613c168339815191526123cb81612bf5565b600e545f036124135760405162461bcd60e51b815260206004820152601460248201527310d213d3d0d20e88139bdd081c1c9bdc1bdcd95960621b6044820152606401610467565b600e544210156124655760405162461bcd60e51b815260206004820152601760248201527f43484f4f43483a2054696d656c6f636b206163746976650000000000000000006044820152606401610467565b600f805460ff191690555f600e8190556040517f3eb72350c9c7928d31e9ab450bfff2c159434aa4b82658a7d8eae7f109cb4e7b9190a150565b600b546001600160a01b0316336001600160a01b0316146124fa5760405162461bcd60e51b815260206004820152601560248201527443484f4f43483a204e6f742063616e64696461746560581b6044820152606401610467565b600c5481516020830120146125475760405162461bcd60e51b815260206004820152601360248201527243484f4f43483a20496e76616c6964206b657960681b6044820152606401610467565b600b546040516001600160a01b03909116907fb94bba6936ec7f75ee931dadf6e1a4d66b43d09b6fa0178fb13df9b77fb5841f905f90a250600b8054600a80546001600160a01b03199081166001600160a01b038416179091551690555f600c55565b5f6c15560ab54925129e44b52000006010546127106125c99190613b8c565b6125d39190613b6d565b905090565b5f80516020613bf68339815191526125ef81612bf5565b60065460ff16156126125760405162461bcd60e51b815260040161046790613b28565b620151806017546126239190613ae9565b42106126715760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a204c61756e636820706572696f6420656e64656400000000006044820152606401610467565b826001600160a01b0381166126985760405162461bcd60e51b815260040161046790613a70565b50506001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b5f828152602081905260409020600101546126de81612bf5565b6113978383612c8e565b5f80516020613c168339815191526126ff81612bf5565b600e541561274f5760405162461bcd60e51b815260206004820152601860248201527f43484f4f43483a20416c72656164792070726f706f73656400000000000000006044820152606401610467565b600f5460ff166127975760405162461bcd60e51b815260206004820152601360248201527221a427a7a1a41d1020b63932b0b23c9037b33360691b6044820152606401610467565b600d546127a49042613ae9565b600e8190556040519081527f6ca688e6e3ddd707280140b2bf0106afe883689b6c74e68cbd517576dd9c245a9060200161176c565b5f80516020613bd68339815191526127f081612bf5565b6127f8613649565b826001600160a01b03811661281f5760405162461bcd60e51b815260040161046790613a70565b306001600160a01b038616036128835760405162461bcd60e51b8152602060048201526024808201527f43484f4f43483a2043616e6e6f74207265636f7665722043484f4f434820746f6044820152636b656e7360e01b6064820152608401610467565b5f83116128e35760405162461bcd60e51b815260206004820152602860248201527f43484f4f43483a20416d6f756e74206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608401610467565b6001600160a01b03851661297a57824710156129415760405162461bcd60e51b815260206004820181905260248201527f43484f4f43483a20496e73756666696369656e74204554482062616c616e63656044820152606401610467565b6040516001600160a01b0385169084156108fc029085905f818181858888f19350505050158015612974573d5f803e3d5ffd5b50612aad565b6040516370a0823160e01b815230600482015283906001600160a01b038716906370a0823190602401602060405180830381865afa1580156129be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e29190613ba3565b1015612a3b5760405162461bcd60e51b815260206004820152602260248201527f43484f4f43483a20496e73756666696369656e7420746f6b656e2062616c616e604482015261636560f01b6064820152608401610467565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303815f875af1158015612a87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aab9190613bba565b505b836001600160a01b03167f6758593a60801a617f0db7ba7baa12f6c9e46bafd2d55b3dad6b807d1c215a9c84604051612b20919060408082526019908201527f4163636964656e74616c20546f6b656e205265636f76657279000000000000006060820152602081019190915260800190565b60405180910390a25061139760018055565b6006545f908190819081908190819060ff168015612b575750600654610100900460ff165b6006549091505f9060ff16158015612b7e575062015180601754612b7b9190613ae9565b42105b60065460075460ff808316159b61010090930416159950939750929550935090915050565b5f805f805f60175460125f9054906101000a900460ff1660135462015180601754612bce9190613ae9565b421062015180601754612be19190613ae9565b421015945094509450945094509091929394565b6115ae81336136a2565b5f612c0a8383611a14565b612c87575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055612c3f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610d2c565b505f610d2c565b5f612c998383611a14565b15612c87575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610d2c565b60025460ff1615612d3d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610467565b565b6001600160a01b038316612d9f5760405162461bcd60e51b815260206004820152602160248201527f43484f4f43483a20417070726f76652066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610467565b6001600160a01b038216612df55760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a20417070726f766520746f207a65726f2061646472657373006044820152606401610467565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316612eb75760405162461bcd60e51b815260206004820152602260248201527f43484f4f43483a205472616e736665722066726f6d207a65726f206164647265604482015261737360f01b6064820152608401610467565b6001600160a01b038216612f0d5760405162461bcd60e51b815260206004820181905260248201527f43484f4f43483a205472616e7366657220746f207a65726f20616464726573736044820152606401610467565b6001600160a01b0383165f90815260036020526040902054811115612f745760405162461bcd60e51b815260206004820181905260248201527f43484f4f43483a205472616e7366657220657863656564732062616c616e63656044820152606401610467565b60065460ff16158015612f96575062015180601754612f939190613ae9565b42105b8015612fba57506001600160a01b0383165f9081526016602052604090205460ff16155b8015612fde57506001600160a01b0382165f9081526016602052604090205460ff16155b1561306f576001600160a01b0383165f908152601860205260409020544390036130545760405162461bcd60e51b815260206004820152602160248201527f43484f4f43483a204f6e65207472616e73616374696f6e2070657220626c6f636044820152606b60f81b6064820152608401610467565b6001600160a01b0383165f9081526018602052604090204390555b60065460ff1615801561309a57506001600160a01b0383165f9081526016602052604090205460ff16155b80156130be57506001600160a01b0382165f9081526016602052604090205460ff16155b15613189576014548111156131155760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2045786365656473206d6178207472616e73616374696f6e006044820152606401610467565b6015546001600160a01b0383165f9081526003602052604090205461313b908390613ae9565b11156131895760405162461bcd60e51b815260206004820152601a60248201527f43484f4f43483a2045786365656473206d61782077616c6c65740000000000006044820152606401610467565b6001600160a01b0383165f90815260036020526040812080548392906131b0908490613ad6565b90915550506001600160a01b0382165f90815260036020526040812080548392906131dc908490613ae9565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e4991815260200190565b6132306136df565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600f548290829060ff16156132eb57600854604051634a1fefbd60e01b81526001600160a01b0384811660048301526024820184905290911690634a1fefbd906044015f604051808303815f87803b1580156132d4575f80fd5b505af11580156132e6573d5f803e3d5ffd5b505050505b6001600160a01b0384166133415760405162461bcd60e51b815260206004820152601e60248201527f43484f4f43483a204275726e2066726f6d207a65726f206164647265737300006044820152606401610467565b6001600160a01b0384165f908152600360205260409020548311156133a85760405162461bcd60e51b815260206004820152601c60248201527f43484f4f43483a204275726e20657863656564732062616c616e6365000000006044820152606401610467565b5f83116133f75760405162461bcd60e51b815260206004820152601f60248201527f43484f4f43483a2043616e6e6f74206275726e207a65726f20616d6f756e74006044820152606401610467565b8260055410156134495760405162461bcd60e51b815260206004820152601b60248201527f43484f4f43483a204275726e206578636565647320737570706c7900000000006044820152606401610467565b6001600160a01b0384165f9081526003602052604081208054859290613470908490613ad6565b925050819055508260055f8282546134889190613ad6565b925050819055508260105f8282546134a09190613ae9565b90915550506001600160a01b0384165f90815260116020526040812080548592906134cc908490613ae9565b90915550506040518381525f906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3836001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58460405161354c91815260200190565b60405180910390a27f32c3bb07da1fa54acaf9cd038b7d0b7e94a0ef767e1a7885771f73c0ae7e6ebb600554601054604051613592929190918252602082015260400190565b60405180910390a1600f5460ff1615611397576008546040516325c70d2d60e21b81526001600160a01b038481166004830152602482018490529091169063971c34b4906044015f604051808303815f87803b1580156135f0575f80fd5b505af1158015613602573d5f803e3d5ffd5b5050505050505050565b613614612cf7565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861325d3390565b60026001540361369b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610467565b6002600155565b6136ac8282611a14565b6136db5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610467565b5050565b60025460ff16612d3d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610467565b5f60208284031215613738575f80fd5b81356001600160e01b03198116811461374f575f80fd5b9392505050565b5f81518084525f5b8181101561377a5760208185018101518683018201520161375e565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f61374f6020830184613756565b80356001600160a01b03811681146137c1575f80fd5b919050565b5f602082840312156137d6575f80fd5b61374f826137ab565b5f80604083850312156137f0575f80fd5b6137f9836137ab565b946020939093013593505050565b858152846020820152836040820152821515606082015260a060808201525f61383360a0830184613756565b979650505050505050565b5f805f60608486031215613850575f80fd5b613859846137ab565b9250613867602085016137ab565b9150604084013590509250925092565b5f60208284031215613887575f80fd5b5035919050565b5f806040838503121561389f575f80fd5b823591506138af602084016137ab565b90509250929050565b5f80602083850312156138c9575f80fd5b823567ffffffffffffffff808211156138e0575f80fd5b818501915085601f8301126138f3575f80fd5b813581811115613901575f80fd5b8660208260051b8501011115613915575f80fd5b60209290920196919550909350505050565b5f8060408385031215613938575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561396b575f80fd5b813567ffffffffffffffff80821115613982575f80fd5b818401915084601f830112613995575f80fd5b8135818111156139a7576139a7613947565b604051601f8201601f19908116603f011681019083821181831017156139cf576139cf613947565b816040528281528760208487010111156139e7575f80fd5b826020860160208301375f928101602001929092525095945050505050565b80151581146115ae575f80fd5b5f8060408385031215613a24575f80fd5b613a2d836137ab565b91506020830135613a3d81613a06565b809150509250929050565b5f8060408385031215613a59575f80fd5b613a62836137ab565b91506138af602084016137ab565b60208082526014908201527343484f4f43483a205a65726f206164647265737360601b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d2c57610d2c613ac2565b80820180821115610d2c57610d2c613ac2565b634e487b7160e01b5f52603260045260245ffd5b5f60018201613b2157613b21613ac2565b5060010190565b60208082526025908201527f43484f4f43483a204c61756e63682061646d696e20706f776572732072656e6f6040820152641d5b98d95960da1b606082015260800190565b5f82613b8757634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610d2c57610d2c613ac2565b5f60208284031215613bb3575f80fd5b5051919050565b5f60208284031215613bca575f80fd5b815161374f81613a0656febf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b267c40d5c3a0ded30ce1f4aefc0ffa0ae4e05a6b698b759a90fbdd0ef31cfe9cd1261ff18f0ac1ec491087976045becb30b450301d7ca8a65eefee86a7c82e629943484f4f43483a2031303025207461782d6672656520666f72657665722c206d696e696d616c2061646d696e20706f776572732c206d6178696d756d207472757374a26469706673582212204d0ccfb85d18e30f0a56afc023ba9e1108d1b8fbcfc59331bfef47e070f1b70164736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000038d40f5c8375f84c5b90bc460a94a436d09133fb0000000000000000000000008540cf5afac19619a349fdaa7a9fa85ef2f097330000000000000000000000008513f04fdc62bfd78177f72a189a2d589a35e8550000000000000000000000008513f04fdc62bfd78177f72a189a2d589a35e8550000000000000000000000000000000000000000000000000000000000015180
-----Decoded View---------------
Arg [0] : _losslessController (address): 0x38D40f5c8375F84C5B90bc460A94a436D09133fB
Arg [1] : _losslessAdmin (address): 0x8540cf5Afac19619a349fdAa7A9fa85Ef2F09733
Arg [2] : _emergencyAdmin (address): 0x8513F04fDC62Bfd78177F72A189a2D589A35E855
Arg [3] : _recoveryAdmin (address): 0x8513F04fDC62Bfd78177F72A189a2D589A35E855
Arg [4] : _timelockPeriod (uint256): 86400
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000038d40f5c8375f84c5b90bc460a94a436d09133fb
Arg [1] : 0000000000000000000000008540cf5afac19619a349fdaa7a9fa85ef2f09733
Arg [2] : 0000000000000000000000008513f04fdc62bfd78177f72a189a2d589a35e855
Arg [3] : 0000000000000000000000008513f04fdc62bfd78177f72a189a2d589a35e855
Arg [4] : 0000000000000000000000000000000000000000000000000000000000015180
Deployed Bytecode Sourcemap
27639:24962:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52449:41;;-1:-1:-1;;;52449:41:0;;216:2:1;52449:41:0;;;198:21:1;255:2;235:18;;;228:30;294:33;274:18;;;267:61;345:18;;52449:41:0;;;;;;;;27639:24962;52549:41;;-1:-1:-1;;;52549:41:0;;576:2:1;52549:41:0;;;558:21:1;615:2;595:18;;;588:30;654:33;634:18;;;627:61;705:18;;52549:41:0;374:355:1;8870:204:0;;;;;;;;;;-1:-1:-1;8870:204:0;;;;;:::i;:::-;;:::i;:::-;;;1190:14:1;;1183:22;1165:41;;1153:2;1138:18;8870:204:0;;;;;;;;29592:35;;;;;;;;;;;;29626:1;29592:35;;;;;1363:25:1;;;1351:2;1336:18;29592:35:0;1217:177:1;35389:92:0;;;;;;;;;;-1:-1:-1;35468:5:0;;;;;;;;;;;-1:-1:-1;;;35468:5:0;;;;35389:92;;;;35468:5;35389:92;:::i;46032:516::-;;;;;;;;;;-1:-1:-1;46032:516:0;;;;;:::i;:::-;;:::i;:::-;;37080:290;;;;;;;;;;-1:-1:-1;37080:290:0;;;;;:::i;:::-;;:::i;35705:102::-;;;;;;;;;;-1:-1:-1;35785:14:0;;35705:102;;50195:419;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;28478:68::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28478:68:0;;36512:556;;;;;;;;;;-1:-1:-1;36512:556:0;;;;;:::i;:::-;;:::i;10150:122::-;;;;;;;;;;-1:-1:-1;10150:122:0;;;;;:::i;:::-;10215:7;10242:12;;;;;;;;;;:22;;;;10150:122;30222:38;;;;;;;;;;;;;;;;29503:39;;;;;;;;;;;;29538:4;29503:39;;46739:287;;;;;;;;;;-1:-1:-1;46739:287:0;;;;;:::i;:::-;;:::i;29318:29::-;;;;;;;;;;;;;;;;10582:138;;;;;;;;;;-1:-1:-1;10582:138:0;;;;;:::i;:::-;;:::i;50626:111::-;;;;;;;;;;-1:-1:-1;50714:15:0;;50695;:34;;50626:111;;35601:92;;;;;;;;;;-1:-1:-1;35601:92:0;;27912:2;4303:36:1;;4291:2;4276:18;35601:92:0;4161:184:1;29126:35:0;;;;;;;;;;-1:-1:-1;29126:35:0;;;;-1:-1:-1;;;;;29126:35:0;;;;;;-1:-1:-1;;;;;4541:32:1;;;4523:51;;4511:2;4496:18;29126:35:0;4350:230:1;11719:251:0;;;;;;;;;;-1:-1:-1;11719:251:0;;;;;:::i;:::-;;:::i;37382:580::-;;;;;;;;;;-1:-1:-1;37382:580:0;;;;;:::i;:::-;;:::i;43492:165::-;;;;;;;;;;;;;:::i;40560:99::-;;;;;;;;;;-1:-1:-1;40560:99:0;;;;;:::i;:::-;;:::i;30181:34::-;;;;;;;;;;-1:-1:-1;30181:34:0;;;;;;;;30511:59;;;;;;;;;;;;30562:8;30511:59;;48642:251;;;;;;;;;;;;;:::i;18411:86::-;;;;;;;;;;-1:-1:-1;18482:7:0;;;;18411:86;;30346:52;;;;;;;;;;-1:-1:-1;30346:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29195:28;;;;;;;;;;-1:-1:-1;29195:28:0;;;;-1:-1:-1;;;;;29195:28:0;;;29354:39;;;;;;;;;;;;;;;;30474:30;;;;;;;;;;;;;;;;28776:40;;;;;;;;;;-1:-1:-1;28776:40:0;;;;;;;;46637:90;;;;;;;;;;-1:-1:-1;46714:5:0;;-1:-1:-1;;;;;46714:5:0;46637:90;;35819:119;;;;;;;;;;-1:-1:-1;35819:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;35912:18:0;35885:7;35912:18;;;:9;:18;;;;;;;35819:119;44748:601;;;;;;;;;;;;;:::i;40671:346::-;;;;;;;;;;-1:-1:-1;40671:346:0;;;;;:::i;:::-;;:::i;43321:159::-;;;;;;;;;;;;;:::i;45361:659::-;;;;;;;;;;;;;:::i;51954:394::-;;;;;;;;;;-1:-1:-1;52208:12:0;;52243:8;;52267:5;;52287:13;;52315:14;;51954:394;;;52208:12;;;;5256:14:1;5249:22;5231:41;;-1:-1:-1;;;;;52243:8:0;;;5341:2:1;5326:18;;5319:43;52267:5:0;;;5378:18:1;;;5371:43;;;;52287:13:0;;;;5445:2:1;5430:18;;5423:43;5497:3;5482:19;;5475:35;5218:3;5203:19;51954:394:0;4978:538:1;41832:271:0;;;;;;;;;;;;;:::i;9166:138::-;;;;;;;;;;-1:-1:-1;9166:138:0;;;;;:::i;:::-;;:::i;47038:376::-;;;;;;;;;;-1:-1:-1;47038:376:0;;;;;:::i;:::-;;:::i;48905:930::-;;;;;;;;;;-1:-1:-1;48905:930:0;;;;;:::i;:::-;;:::i;42115:853::-;;;;;;;;;;-1:-1:-1;42115:853:0;;;;;:::i;:::-;;:::i;37974:761::-;;;;;;;;;;-1:-1:-1;37974:761:0;;;;;:::i;:::-;;:::i;30599:55::-;;;;;;;;;;-1:-1:-1;30599:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;36189:311;;;;;;;;;;-1:-1:-1;36189:311:0;;;;;:::i;:::-;;:::i;30309:30::-;;;;;;;;;;;;;;;;48268:362;;;;;;;;;;;;;:::i;47426:451::-;;;;;;;;;;-1:-1:-1;47426:451:0;;;;;:::i;:::-;;:::i;50011:172::-;;;;;;;;;;;;;:::i;42980:245::-;;;;;;;;;;-1:-1:-1;42980:245:0;;;;;:::i;:::-;;:::i;28350:74::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28350:74:0;;30267:35;;;;;;;;;;;;;;;;29400:31;;;;;;;;;;-1:-1:-1;29400:31:0;;;;;;;;11013:140;;;;;;;;;;-1:-1:-1;11013:140:0;;;;;:::i;:::-;;:::i;47889:367::-;;;;;;;;;;;;;:::i;29930:26::-;;;;;;;;;;;;;;;;35950:143;;;;;;;;;;-1:-1:-1;35950:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;36058:18:0;;;36031:7;36058:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;35950:143;43739:909;;;;;;;;;;-1:-1:-1;43739:909:0;;;;;:::i;:::-;;:::i;28591:78::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28591:78:0;;28977:36;;;;;;;;;;;;;;;;29963:50;;;;;;;;;;-1:-1:-1;29963:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;51252:690;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8679:14:1;;8672:22;8654:41;;8738:14;;8731:22;8726:2;8711:18;;8704:50;8797:14;;8790:22;8785:2;8770:18;;8763:50;8844:2;8829:18;;8822:34;8900:14;8893:22;8887:3;8872:19;;8865:51;8641:3;8626:19;;8419:503;29168:20:0;;;;;;;;;;-1:-1:-1;29168:20:0;;;;-1:-1:-1;;;;;29168:20:0;;;28875:43;;;;;;;;;;-1:-1:-1;28875:43:0;;;;;;;;;;;50749:491;;;;;;;;;;;;;:::i;:::-;;;;9168:25:1;;;9236:14;;9229:22;9224:2;9209:18;;9202:50;9268:18;;;9261:34;;;;9338:14;9331:22;9326:2;9311:18;;9304:50;9398:14;9391:22;9385:3;9370:19;;9363:51;9155:3;9140:19;50749:491:0;8927:493:1;8870:204:0;8955:4;-1:-1:-1;;;;;;8979:47:0;;-1:-1:-1;;;8979:47:0;;:87;;-1:-1:-1;;;;;;;;;;6306:40:0;;;9030:36;8972:94;8870:204;-1:-1:-1;;8870:204:0:o;46032:516::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;46168:8;-1:-1:-1;;;;;33099:21:0;::::1;33091:54;;;;-1:-1:-1::0;;;33091:54:0::1;;;;;;;:::i;:::-;46203:23:::2;::::0;::::2;::::0;::::2;;;46202:24;46194:77;;;::::0;-1:-1:-1;;;46194:77:0;;9976:2:1;46194:77:0::2;::::0;::::2;9958:21:1::0;10015:2;9995:18;;;9988:30;10054:34;10034:18;;;10027:62;-1:-1:-1;;;10105:18:1;;;10098:38;10153:19;;46194:77:0::2;9774:404:1::0;46194:77:0::2;4249:10:::0;-1:-1:-1;;;;;46290:24:0;::::2;::::0;46282:68:::2;;;::::0;-1:-1:-1;;;46282:68:0;;10385:2:1;46282:68:0::2;::::0;::::2;10367:21:1::0;10424:2;10404:18;;;10397:30;10463:33;10443:18;;;10436:61;10514:18;;46282:68:0::2;10183:355:1::0;46282:68:0::2;46371:36;-1:-1:-1::0;;;;;;;;;;;46398:8:0::2;46371:10;:36::i;:::-;-1:-1:-1::0;46418:41:0::2;-1:-1:-1::0;;;;;;;;;;;4249:10:0;46418:11:::2;:41::i;46446:12::-;46418:11;:41::i;:::-;;46514:8;-1:-1:-1::0;;;;;46485:55:0::2;;46524:15;46485:55;;;;1363:25:1::0;;1351:2;1336:18;;1217:177;46485:55:0::2;;;;;;;;8789:1:::1;46032:516:::0;;:::o;37080:290::-;37278:4;18016:19;:17;:19::i;:::-;37212:7;-1:-1:-1;;;;;33099:21:0;::::1;33091:54;;;;-1:-1:-1::0;;;33091:54:0::1;;;;;;;:::i;:::-;32127:12:::2;::::0;37242:7;;37251:6;;32127:12:::2;;32123:98;;;32156:8;::::0;-1:-1:-1;;;;;32156:8:0::2;:22;4249:10:::0;32193:7:::2;32202:6;32156:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;32123:98;37301:39:::3;4249:10:::0;37324:7:::3;37333:6;37301:8;:39::i;:::-;37358:4;37351:11;;32247:12:::2;::::0;::::2;;32243:97;;;32276:8;::::0;-1:-1:-1;;;;;32276:8:0::2;:21;4249:10:::0;32312:7:::2;32321:6;32276:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;32243:97;33156:1;;18046::::1;37080:290:::0;;;;:::o;50195:419::-;50257:14;50282:15;50308:19;50338:14;50363:25;29626:1;29716;29811;29538:4;50407:199;;;;;;;;;;;;;;;;;;;;;;;;;;;50195:419;;;;;:::o;36512:556::-;36749:4;18016:19;:17;:19::i;:::-;32925:14:::1;::::0;::::1;;::::0;:52:::1;;-1:-1:-1::0;4249:10:0;32943:34:::1;::::0;;;:20:::1;:34;::::0;;;;;::::1;;32925:52;32917:92;;;::::0;-1:-1:-1;;;32917:92:0;;11125:2:1;32917:92:0::1;::::0;::::1;11107:21:1::0;11164:2;11144:18;;;11137:30;11203:29;11183:18;;;11176:57;11250:18;;32917:92:0::1;10923:351:1::0;32917:92:0::1;36682:2:::0;-1:-1:-1;;;;;33099:21:0;::::2;33091:54;;;;-1:-1:-1::0;;;33091:54:0::2;;;;;;;:::i;:::-;31797:12:::3;::::0;36712:4;;36718:2;;36722:6;;31797:12:::3;;31793:113;;;31826:8;::::0;-1:-1:-1;;;;;31826:8:0::3;:27;4249:10:::0;31826:68:::3;::::0;-1:-1:-1;;;;;;31826:68:0::3;::::0;;;;;;-1:-1:-1;;;;;11566:15:1;;;31826:68:0::3;::::0;::::3;11548:34:1::0;11618:15;;;11598:18;;;11591:43;11670:15;;;11650:18;;;11643:43;11702:18;;;11695:34;;;11482:19;;31826:68:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;31793:113;-1:-1:-1::0;;;;;36799:17:0;::::4;36772:24;36799:17:::0;;;:11:::4;:17;::::0;;;;;;;4249:10;36799:31;;;;;;;;36849:26;;::::4;;36841:73;;;::::0;-1:-1:-1;;;36841:73:0;;11942:2:1;36841:73:0::4;::::0;::::4;11924:21:1::0;11981:2;11961:18;;;11954:30;12020:34;12000:18;;;11993:62;-1:-1:-1;;;12071:18:1;;;12064:32;12113:19;;36841:73:0::4;11740:398:1::0;36841:73:0::4;36935:27;36945:4;36951:2;36955:6;36935:9;:27::i;:::-;36973:55;36982:4:::0;4249:10;37002:25:::4;37021:6:::0;37002:16;:25:::4;:::i;:::-;36973:8;:55::i;:::-;37056:4;37049:11;;;31932:12:::3;::::0;::::3;;31928:112;;;31961:8;::::0;-1:-1:-1;;;;;31961:8:0::3;:26;4249:10:::0;31961:67:::3;::::0;-1:-1:-1;;;;;;31961:67:0::3;::::0;;;;;;-1:-1:-1;;;;;11566:15:1;;;31961:67:0::3;::::0;::::3;11548:34:1::0;11618:15;;;11598:18;;;11591:43;11670:15;;;11650:18;;;11643:43;11702:18;;;11695:34;;;11482:19;;31961:67:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;31928:112;33156:1;;;33020::::2;36512:556:::0;;;;;:::o;46739:287::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;-1:-1:-1;;;;;46850:22:0;::::1;46842:56;;;::::0;-1:-1:-1;;;46842:56:0;;12610:2:1;46842:56:0::1;::::0;::::1;12592:21:1::0;12649:2;12629:18;;;12622:30;-1:-1:-1;;;12668:18:1;;;12661:51;12729:18;;46842:56:0::1;12408:345:1::0;46842:56:0::1;46929:5;::::0;-1:-1:-1;;;;;46929:5:0;;::::1;46917:17:::0;;::::1;::::0;46909:48:::1;;;::::0;-1:-1:-1;;;46909:48:0;;12960:2:1;46909:48:0::1;::::0;::::1;12942:21:1::0;12999:2;12979:18;;;12972:30;-1:-1:-1;;;13018:18:1;;;13011:48;13076:18;;46909:48:0::1;12758:342:1::0;46909:48:0::1;46973:18;::::0;-1:-1:-1;;;;;46973:18:0;::::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;47002:5:0::1;:16:::0;;-1:-1:-1;;;;;;47002:16:0::1;-1:-1:-1::0;;;;;47002:16:0;;;::::1;::::0;;;::::1;::::0;;46739:287::o;10582:138::-;10215:7;10242:12;;;;;;;;;;:22;;;8762:16;8773:4;8762:10;:16::i;:::-;10687:25:::1;10698:4;10704:7;10687:10;:25::i;:::-;;10582:138:::0;;;:::o;11719:251::-;-1:-1:-1;;;;;11813:34:0;;4249:10;11813:34;11809:104;;11871:30;;-1:-1:-1;;;11871:30:0;;;;;;;;;;;11809:104;11925:37;11937:4;11943:18;11925:11;:37::i;:::-;;11719:251;;:::o;37382:580::-;37556:4;18016:19;:17;:19::i;:::-;37528:7;-1:-1:-1;;;;;33099:21:0;::::1;33091:54;;;;-1:-1:-1::0;;;33091:54:0::1;;;;;;;:::i;:::-;37583:12:::2;::::0;::::2;;37579:112;;;37612:8;::::0;-1:-1:-1;;;;;37612:8:0::2;:32;4249:10:::0;37659:7:::2;37668:10;37612:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;37579:112;4249:10:::0;37743:25:::2;::::0;;;:11:::2;:25;::::0;;;;;;;-1:-1:-1;;;;;37743:34:0;::::2;::::0;;;;;;;;37711:80:::2;::::0;4249:10;37734:7;;37743:47:::2;::::0;37780:10;;37743:47:::2;:::i;37711:80::-;37816:12;::::0;::::2;;37812:111;;;37845:8;::::0;-1:-1:-1;;;;;37845:8:0::2;:31;4249:10:::0;37891:7:::2;37900:10;37845:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;37812:111;-1:-1:-1::0;37950:4:0::2;::::0;37382:580;-1:-1:-1;;;37382:580:0:o;43492:165::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;43556:10:::1;:8;:10::i;:::-;43582:67;::::0;;13447:21:1;;;13504:2;13484:18;;;13477:30;;;;-1:-1:-1;;;13538:2:1;13523:18;;13516:47;43633:15:0::1;13630:4:1::0;13615:20;;13608:36;4249:10:0;;43582:67:::1;::::0;13595:3:1;13580:19;43582:67:0::1;;;;;;;;43492:165:::0;:::o;40560:99::-;18016:19;:17;:19::i;:::-;40624:27:::1;4249:10:::0;40644:6:::1;40624:5;:27::i;:::-;40560:99:::0;:::o;48642:251::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;48743:12:::1;::::0;::::1;;48742:13;48734:44;;;::::0;-1:-1:-1;;;48734:44:0;;13857:2:1;48734:44:0::1;::::0;::::1;13839:21:1::0;13896:2;13876:18;;;13869:30;-1:-1:-1;;;13915:18:1;;;13908:48;13973:18;;48734:44:0::1;13655:342:1::0;48734:44:0::1;48799:12;:19:::0;;-1:-1:-1;;48799:19:0::1;48814:4;48799:19;::::0;;:12:::1;48829:24;:28:::0;;;48873:12:::1;::::0;::::1;::::0;48799;48873::::1;48642:251:::0;:::o;44748:601::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;44836:20:::1;::::0;::::1;;44835:21;44827:59;;;::::0;-1:-1:-1;;;44827:59:0;;14204:2:1;44827:59:0::1;::::0;::::1;14186:21:1::0;14243:2;14223:18;;;14216:30;-1:-1:-1;;;14262:18:1;;;14255:55;14327:18;;44827:59:0::1;14002:349:1::0;44827:59:0::1;44907:20;:27:::0;;-1:-1:-1;;44907:27:0::1;44930:4;44907:27;::::0;;44969:15:::1;44945:21;:39:::0;45005:44:::1;-1:-1:-1::0;;;;;;;;;;;45036:12:0::1;4249:10:::0;;4169:98;45005:44:::1;-1:-1:-1::0;45075:68:0::1;::::0;45127:15:::1;1363:25:1::0;;4249:10:0;;-1:-1:-1;;;;;;;;;;;28394:30:0;45075:68:::1;::::0;1351:2:1;1336:18;45075:68:0::1;;;;;;;;45219:20;::::0;::::1;;:47:::0;::::1;;;-1:-1:-1::0;45243:23:0::1;::::0;::::1;::::0;::::1;;;45219:47;45215:127;;;45288:42;::::0;45314:15:::1;1363:25:1::0;;45288:42:0::1;::::0;1351:2:1;1336:18;45288:42:0::1;;;;;;;;44748:601:::0;:::o;40671:346::-;18016:19;:17;:19::i;:::-;-1:-1:-1;;;;;40783:20:0;::::1;40756:24;40783:20:::0;;;:11:::1;:20;::::0;;;;;;;4249:10;40783:34;;;;;;;;40836:26;;::::1;;40828:69;;;::::0;-1:-1:-1;;;40828:69:0;;14558:2:1;40828:69:0::1;::::0;::::1;14540:21:1::0;14597:2;14577:18;;;14570:30;14636:32;14616:18;;;14609:60;14686:18;;40828:69:0::1;14356:354:1::0;40828:69:0::1;40918:22;40924:7;40933:6;40918:5;:22::i;:::-;40951:58;40960:7:::0;4249:10;40983:25:::1;41002:6:::0;40983:16;:25:::1;:::i;43321:159::-:0;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;43383:8:::1;:6;:8::i;:::-;43407:65;::::0;;14927:21:1;;;14984:2;14964:18;;;14957:30;;;;-1:-1:-1;;;15018:2:1;15003:18;;14996:45;43456:15:0::1;15108:4:1::0;15093:20;;15086:36;4249:10:0;;43407:65:::1;::::0;15073:3:1;15058:19;43407:65:0::1;14715:413:1::0;45361:659:0;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;45449:23:::1;::::0;::::1;::::0;::::1;;;45448:24;45440:62;;;::::0;-1:-1:-1;;;45440:62:0;;14204:2:1;45440:62:0::1;::::0;::::1;14186:21:1::0;14243:2;14223:18;;;14216:30;-1:-1:-1;;;14262:18:1;;;14255:55;14327:18;;45440:62:0::1;14002:349:1::0;45440:62:0::1;45523:23;:30:::0;;-1:-1:-1;;45523:30:0::1;;;::::0;;45568:21:::1;::::0;45523:30;45568:26;45564:98:::1;;45635:15;45611:21;:39:::0;45564:98:::1;45682:41;-1:-1:-1::0;;;;;;;;;;;4249:10:0;46418:11:::2;:41::i;45682:::-:1;-1:-1:-1::0;45749:65:0::1;::::0;45798:15:::1;1363:25:1::0;;4249:10:0;;-1:-1:-1;;;;;;;;;;;28519:27:0;45749:65:::1;::::0;1351:2:1;1336:18;45749:65:0::1;1217:177:1::0;41832:271:0;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;41914:14:::1;::::0;::::1;;41913:15;41905:59;;;::::0;-1:-1:-1;;;41905:59:0;;15335:2:1;41905:59:0::1;::::0;::::1;15317:21:1::0;15374:2;15354:18;;;15347:30;15413:33;15393:18;;;15386:61;15464:18;;41905:59:0::1;15133:355:1::0;41905:59:0::1;41975:14;:21:::0;;-1:-1:-1;;41975:21:0::1;41992:4;41975:21;::::0;;42033:15:::1;42007:23;:41:::0;;;42064:31:::1;::::0;::::1;::::0;::::1;::::0;1363:25:1;;;1351:2;1336:18;;1217:177;9166:138:0;9243:4;9267:12;;;;;;;;;;;-1:-1:-1;;;;;9267:29:0;;;;;;;;;;;;;;;9166:138::o;47038:376::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;-1:-1:-1;;;;;47216:23:0;::::1;47208:61;;;::::0;-1:-1:-1;;;47208:61:0;;15695:2:1;47208:61:0::1;::::0;::::1;15677:21:1::0;15734:2;15714:18;;;15707:30;15773:27;15753:18;;;15746:55;15818:18;;47208:61:0::1;15493:349:1::0;47208:61:0::1;47280:22;:34:::0;;-1:-1:-1;;;;;;47280:34:0::1;-1:-1:-1::0;;;;;47280:34:0;::::1;::::0;;::::1;::::0;;;47325:20:::1;:30:::0;;;47371:35:::1;::::0;::::1;::::0;-1:-1:-1;;47371:35:0::1;47038:376:::0;;;:::o;48905:930::-;49054:8;;-1:-1:-1;;;;;49054:8:0;4249:10;-1:-1:-1;;;;;49030:33:0;;49022:67;;;;-1:-1:-1;;;49022:67:0;;16049:2:1;49022:67:0;;;16031:21:1;16088:2;16068:18;;;16061:30;-1:-1:-1;;;16107:18:1;;;16100:51;16168:18;;49022:67:0;15847:345:1;49022:67:0;49108:12;;;;49100:45;;;;-1:-1:-1;;;49100:45:0;;16399:2:1;49100:45:0;;;16381:21:1;16438:2;16418:18;;;16411:30;-1:-1:-1;;;16457:18:1;;;16450:50;16517:18;;49100:45:0;16197:344:1;49100:45:0;49164:15;49156:47;;;;-1:-1:-1;;;49156:47:0;;16748:2:1;49156:47:0;;;16730:21:1;16787:2;16767:18;;;16760:30;-1:-1:-1;;;16806:18:1;;;16799:49;16865:18;;49156:47:0;16546:343:1;49156:47:0;49224:19;49273:9;49268:449;49288:15;;;49268:449;;;49325:19;49347:4;;49352:1;49347:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;49325:29;-1:-1:-1;;;;;;49377:25:0;;49369:61;;;;-1:-1:-1;;;49369:61:0;;17228:2:1;49369:61:0;;;17210:21:1;17267:2;17247:18;;;17240:30;17306:25;17286:18;;;17279:53;17349:18;;49369:61:0;17026:347:1;49369:61:0;-1:-1:-1;;;;;49463:22:0;;49445:15;49463:22;;;:9;:22;;;;;;49518:11;;49514:192;;-1:-1:-1;;;;;49550:22:0;;49575:1;49550:22;;;:9;:22;;;;;:26;49595:22;49610:7;49595:22;;:::i;:::-;49671:8;;49641:49;;1363:25:1;;;49595:22:0;;-1:-1:-1;;;;;;49671:8:0;;;;49641:49;;;;;;1351:2:1;1336:18;49641:49:0;;;;;;;49514:192;49310:407;;49305:3;;;;;:::i;:::-;;;;49268:449;;;-1:-1:-1;49741:15:0;;49737:91;;49791:8;;-1:-1:-1;;;;;49791:8:0;49773:28;;;;:9;:28;;;;;:43;;49805:11;;49773:28;:43;;49805:11;;49773:43;:::i;:::-;;;;-1:-1:-1;;49011:824:0;48905:930;;:::o;42115:853::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;32676:20:::1;::::0;::::1;;32675:21;32667:71;;;;-1:-1:-1::0;;;32667:71:0::1;;;;;;;:::i;:::-;30562:8;32775:15;;:42;;;;:::i;:::-;32757:15;:60;32749:100;;;::::0;-1:-1:-1;;;32749:100:0;;18126:2:1;32749:100:0::1;::::0;::::1;18108:21:1::0;18165:2;18145:18;;;18138:30;18204:29;18184:18;;;18177:57;18251:18;;32749:100:0::1;17924:351:1::0;32749:100:0::1;42314:1:::2;42296:15;:19;42288:70;;;::::0;-1:-1:-1;;;42288:70:0;;18482:2:1;42288:70:0::2;::::0;::::2;18464:21:1::0;18521:2;18501:18;;;18494:30;18560:34;18540:18;;;18533:62;-1:-1:-1;;;18611:18:1;;;18604:36;18657:19;;42288:70:0::2;18280:402:1::0;42288:70:0::2;42390:1;42377:10;:14;42369:60;;;::::0;-1:-1:-1;;;42369:60:0;;18889:2:1;42369:60:0::2;::::0;::::2;18871:21:1::0;18928:2;18908:18;;;18901:30;18967:34;18947:18;;;18940:62;-1:-1:-1;;;19018:18:1;;;19011:31;19059:19;;42369:60:0::2;18687:397:1::0;42369:60:0::2;27961:22;42448:15;:31;;42440:82;;;::::0;-1:-1:-1;;;42440:82:0;;19291:2:1;42440:82:0::2;::::0;::::2;19273:21:1::0;19330:2;19310:18;;;19303:30;19369:34;19349:18;;;19342:62;-1:-1:-1;;;19420:18:1;;;19413:36;19466:19;;42440:82:0::2;19089:402:1::0;42440:82:0::2;27961:22;42541:10;:26;;42533:72;;;::::0;-1:-1:-1;;;42533:72:0;;19698:2:1;42533:72:0::2;::::0;::::2;19680:21:1::0;19737:2;19717:18;;;19710:30;19776:34;19756:18;;;19749:62;-1:-1:-1;;;19827:18:1;;;19820:31;19868:19;;42533:72:0::2;19496:397:1::0;42533:72:0::2;42643:19;42658:4;27961:22;42643:19;:::i;:::-;42624:15;:38;;42616:82;;;::::0;-1:-1:-1;;;42616:82:0;;20322:2:1;42616:82:0::2;::::0;::::2;20304:21:1::0;20361:2;20341:18;;;20334:30;20400:33;20380:18;;;20373:61;20451:18;;42616:82:0::2;20120:355:1::0;42616:82:0::2;42743:18;42758:3;27961:22;42743:18;:::i;:::-;42729:10;:32;;42721:71;;;::::0;-1:-1:-1;;;42721:71:0;;20682:2:1;42721:71:0::2;::::0;::::2;20664:21:1::0;20721:2;20701:18;;;20694:30;20760:28;20740:18;;;20733:56;20806:18;;42721:71:0::2;20480:350:1::0;42721:71:0::2;42825:20;:38:::0;;;42874:15:::2;:28:::0;;;42918:42:::2;::::0;;21009:25:1;;;21065:2;21050:18;;21043:34;;;42918:42:0::2;::::0;20982:18:1;42918:42:0::2;;;;;;;42115:853:::0;;;:::o;37974:761::-;38153:4;18016:19;:17;:19::i;:::-;38125:7;-1:-1:-1;;;;;33099:21:0;::::1;33091:54;;;;-1:-1:-1::0;;;33091:54:0::1;;;;;;;:::i;:::-;38180:12:::2;::::0;::::2;;38176:117;;;38209:8;::::0;-1:-1:-1;;;;;38209:8:0::2;:32;4249:10:::0;38256:7:::2;38265:15;38209:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;38176:117;4249:10:::0;38313:24:::2;38340:25:::0;;;:11:::2;:25;::::0;;;;;;;-1:-1:-1;;;;;38340:34:0;::::2;::::0;;;;;;;;38393:35;;::::2;;38385:86;;;::::0;-1:-1:-1;;;38385:86:0;;21290:2:1;38385:86:0::2;::::0;::::2;21272:21:1::0;21329:2;21309:18;;;21302:30;21368:34;21348:18;;;21341:62;-1:-1:-1;;;21419:18:1;;;21412:36;21465:19;;38385:86:0::2;21088:402:1::0;38385:86:0::2;38492:67;4249:10:::0;38515:7;38524:34:::2;38543:15:::0;38524:16;:34:::2;:::i;38492:67::-;38584:12;::::0;::::2;;38580:116;;;38613:8;::::0;-1:-1:-1;;;;;38613:8:0::2;:31;4249:10:::0;38659:7:::2;38668:15;38613:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;38580:116;-1:-1:-1::0;38723:4:0::2;::::0;37974:761;-1:-1:-1;;;;37974:761:0:o;36189:311::-;36412:4;18016:19;:17;:19::i;:::-;32925:14:::1;::::0;::::1;;::::0;:52:::1;;-1:-1:-1::0;4249:10:0;32943:34:::1;::::0;;;:20:::1;:34;::::0;;;;;::::1;;32925:52;32917:92;;;::::0;-1:-1:-1;;;32917:92:0;;11125:2:1;32917:92:0::1;::::0;::::1;11107:21:1::0;11164:2;11144:18;;;11137:30;11203:29;11183:18;;;11176:57;11250:18;;32917:92:0::1;10923:351:1::0;32917:92:0::1;36341:2:::0;-1:-1:-1;;;;;33099:21:0;::::2;33091:54;;;;-1:-1:-1::0;;;33091:54:0::2;;;;;;;:::i;:::-;4249:10:::0;31480:12:::3;::::0;36381:2;;36385:6;;31480:12:::3;;31476:95;;;31509:8;::::0;:50:::3;::::0;-1:-1:-1;;;31509:50:0;;-1:-1:-1;;;;;31509:8:0;;::::3;::::0;:23:::3;::::0;:50:::3;::::0;31533:6;;31541:9;;31552:6;;31509:50:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;31476:95;36435:35:::4;4249:10:::0;36459:2:::4;36463:6;36435:9;:35::i;:::-;36488:4;36481:11;;31597:12:::3;::::0;::::3;;31593:94;;;31626:8;::::0;:49:::3;::::0;-1:-1:-1;;;31626:49:0;;-1:-1:-1;;;;;31626:8:0;;::::3;::::0;:22:::3;::::0;:49:::3;::::0;31649:6;;31657:9;;31668:6;;31626:49:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;31593:94;33156:1;;;33020::::2;36189:311:::0;;;;:::o;48268:362::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;48369:24:::1;;48397:1;48369:29:::0;48361:62:::1;;;::::0;-1:-1:-1;;;48361:62:0;;21697:2:1;48361:62:0::1;::::0;::::1;21679:21:1::0;21736:2;21716:18;;;21709:30;-1:-1:-1;;;21755:18:1;;;21748:50;21815:18;;48361:62:0::1;21495:344:1::0;48361:62:0::1;48461:24;;48442:15;:43;;48434:79;;;::::0;-1:-1:-1;;;48434:79:0;;22046:2:1;48434:79:0::1;::::0;::::1;22028:21:1::0;22085:2;22065:18;;;22058:30;22124:25;22104:18;;;22097:53;22167:18;;48434:79:0::1;21844:347:1::0;48434:79:0::1;48534:12;:20:::0;;-1:-1:-1;;48534:20:0::1;::::0;;48549:5:::1;48565:24;:28:::0;;;48609:13:::1;::::0;::::1;::::0;48549:5;48609:13:::1;48268:362:::0;:::o;47426:451::-;47535:22;;-1:-1:-1;;;;;47535:22:0;4249:10;-1:-1:-1;;;;;47519:38:0;;47511:72;;;;-1:-1:-1;;;47511:72:0;;22398:2:1;47511:72:0;;;22380:21:1;22437:2;22417:18;;;22410:30;-1:-1:-1;;;22456:18:1;;;22449:51;22517:18;;47511:72:0;22196:345:1;47511:72:0;47620:20;;47602:14;;;;;;:38;47594:70;;;;-1:-1:-1;;;47594:70:0;;22748:2:1;47594:70:0;;;22730:21:1;22787:2;22767:18;;;22760:30;-1:-1:-1;;;22806:18:1;;;22799:49;22865:18;;47594:70:0;22546:343:1;47594:70:0;47707:22;;47690:40;;-1:-1:-1;;;;;47707:22:0;;;;47690:40;;47707:22;;47690:40;-1:-1:-1;47757:22:0;;;47741:13;:38;;-1:-1:-1;;;;;;47741:38:0;;;-1:-1:-1;;;;;47757:22:0;;47741:38;;;;47790:35;;;47757:22;47836:20;:33;47426:451::o;50011:172::-;50054:7;27961:22;50124:11;;50138:5;50124:19;;;;:::i;:::-;50123:36;;;;:::i;:::-;50116:43;;50011:172;:::o;42980:245::-;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;32676:20:::1;::::0;::::1;;32675:21;32667:71;;;;-1:-1:-1::0;;;32667:71:0::1;;;;;;;:::i;:::-;30562:8;32775:15;;:42;;;;:::i;:::-;32757:15;:60;32749:100;;;::::0;-1:-1:-1;;;32749:100:0;;18126:2:1;32749:100:0::1;::::0;::::1;18108:21:1::0;18165:2;18145:18;;;18138:30;18204:29;18184:18;;;18177:57;18251:18;;32749:100:0::1;17924:351:1::0;32749:100:0::1;43151:7:::0;-1:-1:-1;;;;;33099:21:0;::::2;33091:54;;;;-1:-1:-1::0;;;33091:54:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;43177:29:0;;;::::3;;::::0;;;:20:::3;:29;::::0;;;;:40;;-1:-1:-1;;43177:40:0::3;::::0;::::3;;::::0;;;::::3;::::0;;42980:245::o;11013:140::-;10215:7;10242:12;;;;;;;;;;:22;;;8762:16;8773:4;8762:10;:16::i;:::-;11119:26:::1;11131:4;11137:7;11119:11;:26::i;47889:367::-:0;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;47990:24:::1;::::0;:29;47982:66:::1;;;::::0;-1:-1:-1;;;47982:66:0;;23269:2:1;47982:66:0::1;::::0;::::1;23251:21:1::0;23308:2;23288:18;;;23281:30;23347:26;23327:18;;;23320:54;23391:18;;47982:66:0::1;23067:348:1::0;47982:66:0::1;48067:12;::::0;::::1;;48059:44;;;::::0;-1:-1:-1;;;48059:44:0;;23622:2:1;48059:44:0::1;::::0;::::1;23604:21:1::0;23661:2;23641:18;;;23634:30;-1:-1:-1;;;23680:18:1;;;23673:49;23739:18;;48059:44:0::1;23420:343:1::0;48059:44:0::1;48169:14;::::0;48151:32:::1;::::0;:15:::1;:32;:::i;:::-;48124:24;:59:::0;;;48199:49:::1;::::0;1363:25:1;;;48199:49:0::1;::::0;1351:2:1;1336:18;48199:49:0::1;1217:177:1::0;43739:909:0;-1:-1:-1;;;;;;;;;;;8762:16:0;8773:4;8762:10;:16::i;:::-;15843:21:::1;:19;:21::i;:::-;43924:2:::0;-1:-1:-1;;;;;33099:21:0;::::2;33091:54;;;;-1:-1:-1::0;;;33091:54:0::2;;;;;;;:::i;:::-;43969:4:::3;-1:-1:-1::0;;;;;43952:22:0;::::3;::::0;43944:71:::3;;;::::0;-1:-1:-1;;;43944:71:0;;23970:2:1;43944:71:0::3;::::0;::::3;23952:21:1::0;24009:2;23989:18;;;23982:30;24048:34;24028:18;;;24021:62;-1:-1:-1;;;24099:18:1;;;24092:34;24143:19;;43944:71:0::3;23768:400:1::0;43944:71:0::3;44043:1;44034:6;:10;44026:63;;;::::0;-1:-1:-1;;;44026:63:0;;24375:2:1;44026:63:0::3;::::0;::::3;24357:21:1::0;24414:2;24394:18;;;24387:30;24453:34;24433:18;;;24426:62;-1:-1:-1;;;24504:18:1;;;24497:38;24552:19;;44026:63:0::3;24173:404:1::0;44026:63:0::3;-1:-1:-1::0;;;;;44114:19:0;::::3;44110:449;;44229:6;44204:21;:31;;44196:76;;;::::0;-1:-1:-1;;;44196:76:0;;24784:2:1;44196:76:0::3;::::0;::::3;24766:21:1::0;;;24803:18;;;24796:30;24862:34;24842:18;;;24835:62;24914:18;;44196:76:0::3;24582:356:1::0;44196:76:0::3;44287:28;::::0;-1:-1:-1;;;;;44287:20:0;::::3;::::0;:28;::::3;;;::::0;44308:6;;44287:28:::3;::::0;;;44308:6;44287:20;:28;::::3;;;;;;;;;;;;;::::0;::::3;;;;;;44110:449;;;44411:38;::::0;-1:-1:-1;;;44411:38:0;;44443:4:::3;44411:38;::::0;::::3;4523:51:1::0;44453:6:0;;-1:-1:-1;;;;;44411:23:0;::::3;::::0;::::3;::::0;4496:18:1;;44411:38:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;44403:95;;;::::0;-1:-1:-1;;;44403:95:0;;25334:2:1;44403:95:0::3;::::0;::::3;25316:21:1::0;25373:2;25353:18;;;25346:30;25412:34;25392:18;;;25385:62;-1:-1:-1;;;25463:18:1;;;25456:32;25505:19;;44403:95:0::3;25132:398:1::0;44403:95:0::3;44513:34;::::0;-1:-1:-1;;;44513:34:0;;-1:-1:-1;;;;;25727:32:1;;;44513:34:0::3;::::0;::::3;25709:51:1::0;25776:18;;;25769:34;;;44513:22:0;::::3;::::0;::::3;::::0;25682:18:1;;44513:34:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44110:449;44629:2;-1:-1:-1::0;;;;;44584:56:0::3;;44633:6;44584:56;;;;;26294:2:1::0;26276:21;;;26333:2;26313:18;;;26306:30;26372:27;26367:2;26352:18;;26345:55;26467:4;26452:20;;26445:36;;;;26432:3;26417:19;;26064:423;44584:56:0::3;;;;;;;;15875:1:::2;15887:20:::1;15281:1:::0;16407:22;;16224:213;51252:690;51521:20;;51320:22;;;;;;;;;;;;51521:20;;:47;;;;-1:-1:-1;51545:23:0;;;;;;;51521:47;51605:20;;51499:69;;-1:-1:-1;51579:22:0;;51605:20;;51604:21;:119;;;;;30562:8;51681:15;;:42;;;;:::i;:::-;51663:15;:60;51604:119;51767:20;;51870:21;;51767:20;;;;51766:21;;51767:20;51803:23;;;;51802:24;;-1:-1:-1;51841:14:0;;-1:-1:-1;51870:21:0;;-1:-1:-1;51870:21:0;-1:-1:-1;51252:690:0;;-1:-1:-1;;51252:690:0:o;50749:491::-;50807:17;50835:12;50858:24;50893:21;50925:22;50988:15;;51018:14;;;;;;;;;;;51047:23;;30562:8;51103:15;;:42;;;;:::i;:::-;51085:15;:60;30562:8;51179:15;;:42;;;;:::i;:::-;51160:15;:61;;50966:266;;;;;;;;;;50749:491;;;;;:::o;9519:105::-;9586:30;9597:4;4249:10;9586;:30::i;12596:324::-;12673:4;12695:22;12703:4;12709:7;12695;:22::i;:::-;12690:223;;12734:6;:12;;;;;;;;;;;-1:-1:-1;;;;;12734:29:0;;;;;;;;;:36;;-1:-1:-1;;12734:36:0;12766:4;12734:36;;;12817:12;4249:10;;4169:98;12817:12;-1:-1:-1;;;;;12790:40:0;12808:7;-1:-1:-1;;;;;12790:40:0;12802:4;12790:40;;;;;;;;;;-1:-1:-1;12852:4:0;12845:11;;12690:223;-1:-1:-1;12896:5:0;12889:12;;13166:325;13244:4;13265:22;13273:4;13279:7;13265;:22::i;:::-;13261:223;;;13336:5;13304:12;;;;;;;;;;;-1:-1:-1;;;;;13304:29:0;;;;;;;;;;:37;;-1:-1:-1;;13304:37:0;;;13361:40;4249:10;;13304:12;;13361:40;;13336:5;13361:40;-1:-1:-1;13423:4:0;13416:11;;18570:108;18482:7;;;;18640:9;18632:38;;;;-1:-1:-1;;;18632:38:0;;26694:2:1;18632:38:0;;;26676:21:1;26733:2;26713:18;;;26706:30;-1:-1:-1;;;26752:18:1;;;26745:46;26808:18;;18632:38:0;26492:340:1;18632:38:0;18570:108::o;40133:340::-;-1:-1:-1;;;;;40227:19:0;;40219:65;;;;-1:-1:-1;;;40219:65:0;;27039:2:1;40219:65:0;;;27021:21:1;27078:2;27058:18;;;27051:30;27117:34;27097:18;;;27090:62;-1:-1:-1;;;27168:18:1;;;27161:31;27209:19;;40219:65:0;26837:397:1;40219:65:0;-1:-1:-1;;;;;40303:21:0;;40295:65;;;;-1:-1:-1;;;40295:65:0;;27441:2:1;40295:65:0;;;27423:21:1;27480:2;27460:18;;;27453:30;27519:33;27499:18;;;27492:61;27570:18;;40295:65:0;27239:355:1;40295:65:0;-1:-1:-1;;;;;40381:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40433:32;;1363:25:1;;;40433:32:0;;1336:18:1;40433:32:0;;;;;;;;40133:340;;;:::o;38827:1294::-;-1:-1:-1;;;;;38916:18:0;;38908:65;;;;-1:-1:-1;;;38908:65:0;;27801:2:1;38908:65:0;;;27783:21:1;27840:2;27820:18;;;27813:30;27879:34;27859:18;;;27852:62;-1:-1:-1;;;27930:18:1;;;27923:32;27972:19;;38908:65:0;27599:398:1;38908:65:0;-1:-1:-1;;;;;38992:16:0;;38984:61;;;;-1:-1:-1;;;38984:61:0;;28204:2:1;38984:61:0;;;28186:21:1;;;28223:18;;;28216:30;28282:34;28262:18;;;28255:62;28334:18;;38984:61:0;28002:356:1;38984:61:0;-1:-1:-1;;;;;39064:15:0;;;;;;:9;:15;;;;;;:25;-1:-1:-1;39064:25:0;39056:70;;;;-1:-1:-1;;;39056:70:0;;28565:2:1;39056:70:0;;;28547:21:1;;;28584:18;;;28577:30;28643:34;28623:18;;;28616:62;28695:18;;39056:70:0;28363:356:1;39056:70:0;39227:20;;;;39226:21;:99;;;;;30562:8;39283:15;;:42;;;;:::i;:::-;39265:15;:60;39226:99;:144;;;;-1:-1:-1;;;;;;39344:26:0;;;;;;:20;:26;;;;;;;;39343:27;39226:144;:173;;;;-1:-1:-1;;;;;;39375:24:0;;;;;;:20;:24;;;;;;;;39374:25;39226:173;39222:350;;;-1:-1:-1;;;;;39424:26:0;;;;;;:20;:26;;;;;;39454:12;39424:42;;39416:88;;;;-1:-1:-1;;;39416:88:0;;28926:2:1;39416:88:0;;;28908:21:1;28965:2;28945:18;;;28938:30;29004:34;28984:18;;;28977:62;-1:-1:-1;;;29055:18:1;;;29048:31;29096:19;;39416:88:0;28724:397:1;39416:88:0;-1:-1:-1;;;;;39519:26:0;;;;;;:20;:26;;;;;39548:12;39519:41;;39222:350;39667:20;;;;39666:21;:52;;;;-1:-1:-1;;;;;;39692:26:0;;;;;;:20;:26;;;;;;;;39691:27;39666:52;:81;;;;-1:-1:-1;;;;;;39723:24:0;;;;;;:20;:24;;;;;;;;39722:25;39666:81;39662:283;;;39782:20;;39772:6;:30;;39764:74;;;;-1:-1:-1;;;39764:74:0;;29328:2:1;39764:74:0;;;29310:21:1;29367:2;29347:18;;;29340:30;29406:33;29386:18;;;29379:61;29457:18;;39764:74:0;29126:355:1;39764:74:0;39887:15;;-1:-1:-1;;;;;39861:13:0;;;;;;:9;:13;;;;;;:22;;39877:6;;39861:22;:::i;:::-;:41;;39853:80;;;;-1:-1:-1;;;39853:80:0;;29688:2:1;39853:80:0;;;29670:21:1;29727:2;29707:18;;;29700:30;29766:28;29746:18;;;29739:56;29812:18;;39853:80:0;29486:350:1;39853:80:0;-1:-1:-1;;;;;40002:15:0;;;;;;:9;:15;;;;;:25;;40021:6;;40002:15;:25;;40021:6;;40002:25;:::i;:::-;;;;-1:-1:-1;;;;;;;40038:13:0;;;;;;:9;:13;;;;;:23;;40055:6;;40038:13;:23;;40055:6;;40038:23;:::i;:::-;;;;;;;;40102:2;-1:-1:-1;;;;;40087:26:0;40096:4;-1:-1:-1;;;;;40087:26:0;;40106:6;40087:26;;;;1363:25:1;;1351:2;1336:18;;1217:177;19266:120:0;18275:16;:14;:16::i;:::-;19325:7:::1;:15:::0;;-1:-1:-1;;19325:15:0::1;::::0;;19356:22:::1;4249:10:::0;19365:12:::1;19356:22;::::0;-1:-1:-1;;;;;4541:32:1;;;4523:51;;4511:2;4496:18;19356:22:0::1;;;;;;;19266:120::o:0;41029:706::-;32424:12;;41094:7;;41103:6;;32424:12;;32420:81;;;32453:8;;:36;;-1:-1:-1;;;32453:36:0;;-1:-1:-1;;;;;25727:32:1;;;32453:36:0;;;25709:51:1;25776:18;;;25769:34;;;32453:8:0;;;;:19;;25682:18:1;;32453:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32420:81;-1:-1:-1;;;;;41130:21:0;::::1;41122:64;;;::::0;-1:-1:-1;;;41122:64:0;;30043:2:1;41122:64:0::1;::::0;::::1;30025:21:1::0;30082:2;30062:18;;;30055:30;30121:32;30101:18;;;30094:60;30171:18;;41122:64:0::1;29841:354:1::0;41122:64:0::1;-1:-1:-1::0;;;;;41205:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:28;-1:-1:-1;41205:28:0::1;41197:69;;;::::0;-1:-1:-1;;;41197:69:0;;30402:2:1;41197:69:0::1;::::0;::::1;30384:21:1::0;30441:2;30421:18;;;30414:30;30480;30460:18;;;30453:58;30528:18;;41197:69:0::1;30200:352:1::0;41197:69:0::1;41294:1;41285:6;:10;41277:54;;;::::0;-1:-1:-1;;;41277:54:0;;30759:2:1;41277:54:0::1;::::0;::::1;30741:21:1::0;30798:2;30778:18;;;30771:30;30837:33;30817:18;;;30810:61;30888:18;;41277:54:0::1;30557:355:1::0;41277:54:0::1;41368:6;41350:14;;:24;;41342:64;;;::::0;-1:-1:-1;;;41342:64:0;;31119:2:1;41342:64:0::1;::::0;::::1;31101:21:1::0;31158:2;31138:18;;;31131:30;31197:29;31177:18;;;31170:57;31244:18;;41342:64:0::1;30917:351:1::0;41342:64:0::1;-1:-1:-1::0;;;;;41427:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;:28;;41449:6;;41427:18;:28:::1;::::0;41449:6;;41427:28:::1;:::i;:::-;;;;;;;;41484:6;41466:14;;:24;;;;;;;:::i;:::-;;;;;;;;41516:6;41501:11;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;41533:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:34;;41561:6;;41533:24;:34:::1;::::0;41561:6;;41533:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;41593:37:0::1;::::0;1363:25:1;;;41619:1:0::1;::::0;-1:-1:-1;;;;;41593:37:0;::::1;::::0;::::1;::::0;1351:2:1;1336:18;41593:37:0::1;;;;;;;41651:7;-1:-1:-1::0;;;;;41646:21:0::1;;41660:6;41646:21;;;;1363:25:1::0;;1351:2;1336:18;;1217:177;41646:21:0::1;;;;;;;;41683:44;41699:14;;41715:11;;41683:44;;;;;;21009:25:1::0;;;21065:2;21050:18;;21043:34;20997:2;20982:18;;20835:248;41683:44:0::1;;;;;;;;32527:12:::0;;;;32523:80;;;32556:8;;:35;;-1:-1:-1;;;32556:35:0;;-1:-1:-1;;;;;25727:32:1;;;32556:35:0;;;25709:51:1;25776:18;;;25769:34;;;32556:8:0;;;;:18;;25682::1;;32556:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41029:706;;;;:::o;19007:118::-;18016:19;:17;:19::i;:::-;19067:7:::1;:14:::0;;-1:-1:-1;;19067:14:0::1;19077:4;19067:14;::::0;;19097:20:::1;19104:12;4249:10:::0;;4169:98;15923:293;15325:1;16057:7;;:19;16049:63;;;;-1:-1:-1;;;16049:63:0;;31475:2:1;16049:63:0;;;31457:21:1;31514:2;31494:18;;;31487:30;31553:33;31533:18;;;31526:61;31604:18;;16049:63:0;31273:355:1;16049:63:0;15325:1;16190:7;:18;15923:293::o;9760:201::-;9849:22;9857:4;9863:7;9849;:22::i;:::-;9844:110;;9895:47;;-1:-1:-1;;;9895:47:0;;-1:-1:-1;;;;;25727:32:1;;9895:47:0;;;25709:51:1;25776:18;;;25769:34;;;25682:18;;9895:47:0;25535:274:1;9844:110:0;9760:201;;:::o;18755:108::-;18482:7;;;;18814:41;;;;-1:-1:-1;;;18814:41:0;;32114:2:1;18814:41:0;;;32096:21:1;32153:2;32133:18;;;32126:30;-1:-1:-1;;;32172:18:1;;;32165:50;32232:18;;18814:41:0;31912:344:1;734:286;792:6;845:2;833:9;824:7;820:23;816:32;813:52;;;861:1;858;851:12;813:52;887:23;;-1:-1:-1;;;;;;939:32:1;;929:43;;919:71;;986:1;983;976:12;919:71;1009:5;734:286;-1:-1:-1;;;734:286:1:o;1399:423::-;1441:3;1479:5;1473:12;1506:6;1501:3;1494:19;1531:1;1541:162;1555:6;1552:1;1549:13;1541:162;;;1617:4;1673:13;;;1669:22;;1663:29;1645:11;;;1641:20;;1634:59;1570:12;1541:162;;;1545:3;1748:1;1741:4;1732:6;1727:3;1723:16;1719:27;1712:38;1811:4;1804:2;1800:7;1795:2;1787:6;1783:15;1779:29;1774:3;1770:39;1766:50;1759:57;;;1399:423;;;;:::o;1827:220::-;1976:2;1965:9;1958:21;1939:4;1996:45;2037:2;2026:9;2022:18;2014:6;1996:45;:::i;2052:173::-;2120:20;;-1:-1:-1;;;;;2169:31:1;;2159:42;;2149:70;;2215:1;2212;2205:12;2149:70;2052:173;;;:::o;2230:186::-;2289:6;2342:2;2330:9;2321:7;2317:23;2313:32;2310:52;;;2358:1;2355;2348:12;2310:52;2381:29;2400:9;2381:29;:::i;2421:254::-;2489:6;2497;2550:2;2538:9;2529:7;2525:23;2521:32;2518:52;;;2566:1;2563;2556:12;2518:52;2589:29;2608:9;2589:29;:::i;:::-;2579:39;2665:2;2650:18;;;;2637:32;;-1:-1:-1;;;2421:254:1:o;2680:517::-;2935:6;2924:9;2917:25;2978:6;2973:2;2962:9;2958:18;2951:34;3021:6;3016:2;3005:9;3001:18;2994:34;3078:6;3071:14;3064:22;3059:2;3048:9;3044:18;3037:50;3124:3;3118;3107:9;3103:19;3096:32;2898:4;3145:46;3186:3;3175:9;3171:19;3163:6;3145:46;:::i;:::-;3137:54;2680:517;-1:-1:-1;;;;;;;2680:517:1:o;3384:328::-;3461:6;3469;3477;3530:2;3518:9;3509:7;3505:23;3501:32;3498:52;;;3546:1;3543;3536:12;3498:52;3569:29;3588:9;3569:29;:::i;:::-;3559:39;;3617:38;3651:2;3640:9;3636:18;3617:38;:::i;:::-;3607:48;;3702:2;3691:9;3687:18;3674:32;3664:42;;3384:328;;;;;:::o;3717:180::-;3776:6;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;-1:-1:-1;3868:23:1;;3717:180;-1:-1:-1;3717:180:1:o;3902:254::-;3970:6;3978;4031:2;4019:9;4010:7;4006:23;4002:32;3999:52;;;4047:1;4044;4037:12;3999:52;4083:9;4070:23;4060:33;;4112:38;4146:2;4135:9;4131:18;4112:38;:::i;:::-;4102:48;;3902:254;;;;;:::o;5780:615::-;5866:6;5874;5927:2;5915:9;5906:7;5902:23;5898:32;5895:52;;;5943:1;5940;5933:12;5895:52;5983:9;5970:23;6012:18;6053:2;6045:6;6042:14;6039:34;;;6069:1;6066;6059:12;6039:34;6107:6;6096:9;6092:22;6082:32;;6152:7;6145:4;6141:2;6137:13;6133:27;6123:55;;6174:1;6171;6164:12;6123:55;6214:2;6201:16;6240:2;6232:6;6229:14;6226:34;;;6256:1;6253;6246:12;6226:34;6309:7;6304:2;6294:6;6291:1;6287:14;6283:2;6279:23;6275:32;6272:45;6269:65;;;6330:1;6327;6320:12;6269:65;6361:2;6353:11;;;;;6383:6;;-1:-1:-1;5780:615:1;;-1:-1:-1;;;;5780:615:1:o;6400:248::-;6468:6;6476;6529:2;6517:9;6508:7;6504:23;6500:32;6497:52;;;6545:1;6542;6535:12;6497:52;-1:-1:-1;;6568:23:1;;;6638:2;6623:18;;;6610:32;;-1:-1:-1;6400:248:1:o;6653:127::-;6714:10;6709:3;6705:20;6702:1;6695:31;6745:4;6742:1;6735:15;6769:4;6766:1;6759:15;6785:921;6853:6;6906:2;6894:9;6885:7;6881:23;6877:32;6874:52;;;6922:1;6919;6912:12;6874:52;6962:9;6949:23;6991:18;7032:2;7024:6;7021:14;7018:34;;;7048:1;7045;7038:12;7018:34;7086:6;7075:9;7071:22;7061:32;;7131:7;7124:4;7120:2;7116:13;7112:27;7102:55;;7153:1;7150;7143:12;7102:55;7189:2;7176:16;7211:2;7207;7204:10;7201:36;;;7217:18;;:::i;:::-;7292:2;7286:9;7260:2;7346:13;;-1:-1:-1;;7342:22:1;;;7366:2;7338:31;7334:40;7322:53;;;7390:18;;;7410:22;;;7387:46;7384:72;;;7436:18;;:::i;:::-;7476:10;7472:2;7465:22;7511:2;7503:6;7496:18;7551:7;7546:2;7541;7537;7533:11;7529:20;7526:33;7523:53;;;7572:1;7569;7562:12;7523:53;7628:2;7623;7619;7615:11;7610:2;7602:6;7598:15;7585:46;7673:1;7651:15;;;7668:2;7647:24;7640:35;;;;-1:-1:-1;7655:6:1;6785:921;-1:-1:-1;;;;;6785:921:1:o;7711:118::-;7797:5;7790:13;7783:21;7776:5;7773:32;7763:60;;7819:1;7816;7809:12;7834:315;7899:6;7907;7960:2;7948:9;7939:7;7935:23;7931:32;7928:52;;;7976:1;7973;7966:12;7928:52;7999:29;8018:9;7999:29;:::i;:::-;7989:39;;8078:2;8067:9;8063:18;8050:32;8091:28;8113:5;8091:28;:::i;:::-;8138:5;8128:15;;;7834:315;;;;;:::o;8154:260::-;8222:6;8230;8283:2;8271:9;8262:7;8258:23;8254:32;8251:52;;;8299:1;8296;8289:12;8251:52;8322:29;8341:9;8322:29;:::i;:::-;8312:39;;8370:38;8404:2;8393:9;8389:18;8370:38;:::i;9425:344::-;9627:2;9609:21;;;9666:2;9646:18;;;9639:30;-1:-1:-1;;;9700:2:1;9685:18;;9678:50;9760:2;9745:18;;9425:344::o;10543:375::-;-1:-1:-1;;;;;10801:15:1;;;10783:34;;10853:15;;;;10848:2;10833:18;;10826:43;10900:2;10885:18;;10878:34;;;;10733:2;10718:18;;10543:375::o;12143:127::-;12204:10;12199:3;12195:20;12192:1;12185:31;12235:4;12232:1;12225:15;12259:4;12256:1;12249:15;12275:128;12342:9;;;12363:11;;;12360:37;;;12377:18;;:::i;13105:125::-;13170:9;;;13191:10;;;13188:36;;;13204:18;;:::i;16894:127::-;16955:10;16950:3;16946:20;16943:1;16936:31;16986:4;16983:1;16976:15;17010:4;17007:1;17000:15;17378:135;17417:3;17438:17;;;17435:43;;17458:18;;:::i;:::-;-1:-1:-1;17505:1:1;17494:13;;17378:135::o;17518:401::-;17720:2;17702:21;;;17759:2;17739:18;;;17732:30;17798:34;17793:2;17778:18;;17771:62;-1:-1:-1;;;17864:2:1;17849:18;;17842:35;17909:3;17894:19;;17518:401::o;19898:217::-;19938:1;19964;19954:132;;20008:10;20003:3;19999:20;19996:1;19989:31;20043:4;20040:1;20033:15;20071:4;20068:1;20061:15;19954:132;-1:-1:-1;20100:9:1;;19898:217::o;22894:168::-;22967:9;;;22998;;23015:15;;;23009:22;;22995:37;22985:71;;23036:18;;:::i;24943:184::-;25013:6;25066:2;25054:9;25045:7;25041:23;25037:32;25034:52;;;25082:1;25079;25072:12;25034:52;-1:-1:-1;25105:16:1;;24943:184;-1:-1:-1;24943:184:1:o;25814:245::-;25881:6;25934:2;25922:9;25913:7;25909:23;25905:32;25902:52;;;25950:1;25947;25940:12;25902:52;25982:9;25976:16;26001:28;26023:5;26001:28;:::i
Swarm Source
ipfs://4d0ccfb85d18e30f0a56afc023ba9e1108d1b8fbcfc59331bfef47e070f1b701
Loading...
Loading
Loading...
Loading
OVERVIEW
CHOOCH is a Base-powered meme token built for the culture a community-led experiment focused on fun, fairness, and fully decentralized ownership. With transparent tokenomics and renounced controls, CHOOCH keeps the community in charge of the sesh.Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 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.