Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 29 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Balance... | 18029846 | 310 days ago | IN | 0 ETH | 0.00080881 | ||||
Withdraw Balance... | 18029826 | 310 days ago | IN | 0 ETH | 0.00321809 | ||||
Buy Token In ETH | 18007927 | 313 days ago | IN | 0.09625 ETH | 0.00547794 | ||||
Set Lower And Up... | 18007406 | 313 days ago | IN | 0 ETH | 0.00034894 | ||||
Buy Token In ETH | 18001431 | 314 days ago | IN | 0.030558 ETH | 0.00389076 | ||||
Buy Token In ETH | 18000093 | 314 days ago | IN | 0.04 ETH | 0.00579806 | ||||
Buy Token In ETH | 18000027 | 314 days ago | IN | 0.05 ETH | 0.00848929 | ||||
Buy Token In ETH | 17999996 | 314 days ago | IN | 0.11 ETH | 0.00731476 | ||||
Buy Token In ETH | 17999945 | 314 days ago | IN | 0.25 ETH | 0.00755714 | ||||
Buy Token In ETH | 17999919 | 314 days ago | IN | 0.0576 ETH | 0.00807789 | ||||
Buy Token In ETH | 17999900 | 314 days ago | IN | 0.14 ETH | 0.01104774 | ||||
Whitelisting Swi... | 17999885 | 314 days ago | IN | 0 ETH | 0.00056737 | ||||
Change Token Pri... | 17999845 | 314 days ago | IN | 0 ETH | 0.00042167 | ||||
Change Token Pri... | 17996092 | 315 days ago | IN | 0 ETH | 0.00039403 | ||||
Set Lower And Up... | 17993042 | 315 days ago | IN | 0 ETH | 0.00076121 | ||||
Set Lower And Up... | 17993035 | 315 days ago | IN | 0 ETH | 0.00080396 | ||||
Whitelisting Swi... | 17980617 | 317 days ago | IN | 0 ETH | 0.00103259 | ||||
Change Claim Sta... | 17978978 | 317 days ago | IN | 0 ETH | 0.00071615 | ||||
Change Token Pri... | 17964362 | 319 days ago | IN | 0 ETH | 0.00123756 | ||||
Set Total Purcha... | 17944628 | 322 days ago | IN | 0 ETH | 0.00053111 | ||||
Set Lower And Up... | 17944619 | 322 days ago | IN | 0 ETH | 0.00051954 | ||||
Set Lower And Up... | 17944614 | 322 days ago | IN | 0 ETH | 0.00070371 | ||||
Set Lower And Up... | 17929453 | 324 days ago | IN | 0 ETH | 0.00165976 | ||||
Set Lower And Up... | 17928790 | 324 days ago | IN | 0 ETH | 0.0014211 | ||||
Set Lower And Up... | 17922077 | 325 days ago | IN | 0 ETH | 0.00213399 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
18029846 | 310 days ago | 0.774408 ETH |
Loading...
Loading
Contract Name:
TokenCrowdsaleFLYY
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-27 */ // SPDX-License-Identifier: MIT 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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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 amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } interface ITokenVestingFLYY { function createVestingSchedule( address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, uint256 _slicePeriodSeconds, uint256 _amount ) external; } contract TokenCrowdsaleFLYY is Ownable, ReentrancyGuard { IERC20 public tokenContractAddressFLYY; IERC20 public tokenContractAddressUSDT; uint256 public tokenPriceInWEI; uint256 public tokenPriceInUSDT; uint8 private _tokenDecimals; uint256 private _lowerPurchasingLimitInWEI; uint256 private _upperPurchasingLimitInWEI; uint256 private _lowerPurchasingLimitInUSDT; uint256 private _upperPurchasingLimitInUSDT; ITokenVestingFLYY public vestingContractAddress; uint8 private _unlockedPercentageTGE; uint256 private _vestingStart; uint256 private _vestingCliff; uint256 private _vestingDuration; uint256 private _vestingSlicePeriodSeconds; uint256 public claimStartTimeTGE; mapping(address => uint256) public userBalanceOfTGE; mapping(address => uint256) public userClaimStartTimeTGE; bool public whitelistingSwitch; mapping(address => bool) private _isIncludedInWhitelist; uint256 public totalPurchasingLimitTokenCount; mapping(address => uint256) private _tokensPurchased; uint256 public totalTokenSold; event TokenSold(address, uint256); event PriceChangedInETH(uint256, uint256); event PriceChangedInUSDT(uint256, uint256); event VestingScheduleChanged(uint8, uint256, uint256, uint256, uint256); event WhitelistingSwitchTriggered(bool flag); modifier checkWhitelisting(address caller) { require( (!whitelistingSwitch || _isIncludedInWhitelist[caller]), "TokenCrowdsaleFLYY: calling account address must be whitelisted first OR switch off whitelisting feature" ); _; } constructor() { tokenContractAddressUSDT = IERC20( 0xdAC17F958D2ee523a2206206994597C13D831ec7 ); tokenPriceInUSDT = 10000; tokenContractAddressFLYY = IERC20( 0xdEF36a0653D4992c3614362553C446ce41488a46 ); tokenPriceInWEI = 6000000000000; _tokenDecimals = 18; vestingContractAddress = ITokenVestingFLYY( 0xDbD185b1dF18c4a69795041B4De4B5154957E6fF ); _unlockedPercentageTGE = 5; claimStartTimeTGE = 1695236400000; _vestingStart = 1695236400000; _vestingCliff = 18408201; // 7 months _vestingDuration = 31556916; // 12 months _vestingSlicePeriodSeconds = 2629743; // monthly whitelistingSwitch = false; _lowerPurchasingLimitInWEI = 0; _upperPurchasingLimitInWEI = ~uint256(0); _lowerPurchasingLimitInUSDT = 0; _upperPurchasingLimitInUSDT = ~uint256(0); totalPurchasingLimitTokenCount = ~uint256(0); } function changeClaimStartTimeTGE( uint256 _claimStartTimeTGE ) external onlyOwner returns (bool) { claimStartTimeTGE = _claimStartTimeTGE; return true; } function changeVestingContractAddress( address newContractAddress ) external onlyOwner returns (bool) { vestingContractAddress = ITokenVestingFLYY(newContractAddress); return true; } function changetokenContractAddressFLYY( address newContractAddress ) external onlyOwner returns (bool) { tokenContractAddressFLYY = IERC20(newContractAddress); return true; } function changeTokenPriceInETH( uint256 newPrice ) external onlyOwner returns (bool) { require( newPrice > 0, "TokenCrowdsaleFLYY: token price must be greater than 0 WEI" ); uint256 oldPrice = tokenPriceInWEI; tokenPriceInWEI = newPrice; emit PriceChangedInETH(oldPrice, newPrice); return true; } function changeTokenPriceInUSDT( uint256 newPrice ) external onlyOwner returns (bool) { require( newPrice > 0, "TokenCrowdsaleFLYY: token price must be greater than 0 USDT" ); uint256 oldPrice = tokenPriceInUSDT; tokenPriceInUSDT = newPrice; emit PriceChangedInUSDT(oldPrice, newPrice); return true; } function getLowerAndUpperPurchasingLimitInETH() external view returns (uint256, uint256) { return (_lowerPurchasingLimitInWEI, _upperPurchasingLimitInWEI); } function getLowerAndUpperPurchasingLimitInUSDT() external view returns (uint256, uint256) { return (_lowerPurchasingLimitInUSDT, _upperPurchasingLimitInUSDT); } function setLowerAndUpperPurchasingLimitInETH( uint256 newLowerLimitInWEI, uint256 newUpperLimitInWEI ) external onlyOwner returns (bool) { _lowerPurchasingLimitInWEI = newLowerLimitInWEI; _upperPurchasingLimitInWEI = newUpperLimitInWEI; return true; } function setLowerAndUpperPurchasingLimitInUSDT( uint256 newLowerLimitInUSDT, uint256 newUpperLimitInUSDT ) external onlyOwner returns (bool) { _lowerPurchasingLimitInUSDT = newLowerLimitInUSDT; _upperPurchasingLimitInUSDT = newUpperLimitInUSDT; return true; } function tokensPurchased( address accountAddress ) external view returns (uint256) { return _tokensPurchased[accountAddress]; } function setTotalPurchasingLimitTokenCount( uint256 newLimit ) external onlyOwner returns (bool) { totalPurchasingLimitTokenCount = newLimit; return true; } function resetTokensPurchasedForAccount( address accountAddress ) external onlyOwner returns (bool) { _tokensPurchased[accountAddress] = 0; return true; } function resetTotalTokensSold() external onlyOwner returns (bool) { totalTokenSold = 0; return true; } function changeVestingSchedule( uint8 unlockedPercentageTGE_, uint256 vestingStart_, uint256 vestingCliff_, uint256 vestingDuration_, uint256 vestingSlicePeriodSeconds_ ) external onlyOwner returns (bool) { require( unlockedPercentageTGE_ <= 100, "TokenCrowdsaleFLYY: unlocked TGE percentage must not be greater than 100" ); _unlockedPercentageTGE = unlockedPercentageTGE_; _vestingStart = vestingStart_; _vestingCliff = vestingCliff_; _vestingDuration = vestingDuration_; _vestingSlicePeriodSeconds = vestingSlicePeriodSeconds_; emit VestingScheduleChanged( unlockedPercentageTGE_, vestingStart_, vestingCliff_, vestingDuration_, vestingSlicePeriodSeconds_ ); return true; } function getVestingSchedule() external view returns (uint8, uint256, uint256, uint256, uint256) { return ( _unlockedPercentageTGE, _vestingStart, _vestingCliff, _vestingDuration, _vestingSlicePeriodSeconds ); } function buyTokenInETH() external payable nonReentrant checkWhitelisting(msg.sender) returns (bool) { _buyTokenInETH(); return true; } function buyTokenInUSDT() external nonReentrant checkWhitelisting(msg.sender) returns (bool) { _buyTokenInUSDT(); return true; } function _buyTokenInETH() private { uint256 sentValue = msg.value; require( sentValue > 0, "TokenCrowdsaleFLYY: sent ETH amount must be greater than 0" ); require( (sentValue >= _lowerPurchasingLimitInWEI && sentValue <= _upperPurchasingLimitInWEI), "TokenCrowdsaleFLYY: sent ETH amount must be between purchasing limit" ); address buyer = _msgSender(); uint256 contractTokenBalance = getContractBalanceFLYY(); uint256 buyableTokens = _buyableTokensInETH(); require( (_tokensPurchased[buyer] + buyableTokens) <= totalPurchasingLimitTokenCount, "TokenCrowdsaleFLYY: buyable token amount exceeds total purchasing limit for single wallet" ); require( contractTokenBalance >= buyableTokens, "TokenCrowdsaleFLYY: buyable token amount exceeds crowdsale contract balance" ); uint256 unlockedShareTGE = (buyableTokens * _unlockedPercentageTGE) / 100; uint256 vestingShare = buyableTokens - unlockedShareTGE; if (unlockedShareTGE > 0) { userBalanceOfTGE[buyer] += unlockedShareTGE; userClaimStartTimeTGE[buyer] = claimStartTimeTGE; } if (vestingShare > 0) { _sendToVesting(buyer, vestingShare); } _tokensPurchased[buyer] += buyableTokens; totalTokenSold += buyableTokens; emit TokenSold(buyer, buyableTokens); } function _buyTokenInUSDT() private { uint256 sentValue = tokenContractAddressUSDT.allowance( _msgSender(), address(this) ); require( sentValue > 0, "TokenCrowdsaleFLYY: approve token USDT to crowdsale contract" ); require( (sentValue >= _lowerPurchasingLimitInUSDT && sentValue <= _upperPurchasingLimitInUSDT), "TokenCrowdsaleFLYY: sent ETH amount must be between purchasing limit" ); address buyer = _msgSender(); uint256 contractTokenBalance = getContractBalanceFLYY(); uint256 buyableTokens = _buyableTokensInUSDT(); require( (_tokensPurchased[buyer] + buyableTokens) <= totalPurchasingLimitTokenCount, "TokenCrowdsaleFLYY: buyable token amount exceeds total purchasing limit for single wallet" ); require( contractTokenBalance >= buyableTokens, "TokenCrowdsaleFLYY: buyable token amount exceeds crowdsale contract balance" ); require( tokenContractAddressUSDT.transferFrom( _msgSender(), address(this), sentValue ), "TokenCrowdsaleFLYY: USDT transferFrom not succeeded" ); uint256 unlockedShareTGE = (buyableTokens * _unlockedPercentageTGE) / 100; uint256 vestingShare = buyableTokens - unlockedShareTGE; if (unlockedShareTGE > 0) { userBalanceOfTGE[buyer] += unlockedShareTGE; userClaimStartTimeTGE[buyer] = claimStartTimeTGE; } if (vestingShare > 0) { _sendToVesting(buyer, vestingShare); } _tokensPurchased[buyer] += buyableTokens; totalTokenSold += buyableTokens; emit TokenSold(buyer, buyableTokens); } function claimTGE() external returns (bool) { address beneficiary = _msgSender(); uint256 userAmountTGE = userBalanceOfTGE[beneficiary]; uint256 userClaimStartTimeTGE_ = userClaimStartTimeTGE[beneficiary]; require( userAmountTGE > 0, "TokenCrowdsaleFLYY: no TGE balance exists for the caller" ); require( block.timestamp > userClaimStartTimeTGE_, "TokenCrowdsaleFLYY: TGE claim start time for user has not started yet" ); userBalanceOfTGE[beneficiary] -= userAmountTGE; tokenContractAddressFLYY.transfer(beneficiary, userAmountTGE); return true; } function _buyableTokensInETH() private view returns (uint256) { uint256 buyableTokens = (msg.value * 10 ** _tokenDecimals) / tokenPriceInWEI; return buyableTokens; } function _buyableTokensInUSDT() private view returns (uint256) { uint256 sentValue = tokenContractAddressUSDT.allowance( _msgSender(), address(this) ); uint256 buyableTokens = (sentValue * 10 ** _tokenDecimals) / tokenPriceInUSDT; return buyableTokens; } function _sendToVesting(address beneficiary, uint256 amount) private { if (_vestingCliff == 1 && _vestingDuration == 1) { require( tokenContractAddressFLYY.transfer(beneficiary, amount), "TokenCrowdsaleFLYY: token FLYY transfer to buyer not succeeded" ); } else { require( tokenContractAddressFLYY.approve( address(vestingContractAddress), amount ), "TokenCrowdsaleFLYY: token FLYY approve to vesting contract not succeeded" ); vestingContractAddress.createVestingSchedule( beneficiary, _vestingStart, _vestingCliff, _vestingDuration, _vestingSlicePeriodSeconds, amount ); } } function getContractBalanceETH() external view returns (uint256) { return address(this).balance; } function getContractBalanceUSDT() external view returns (uint256) { return tokenContractAddressUSDT.balanceOf(address(this)); } function withdrawBalanceETH() external onlyOwner returns (bool) { payable(owner()).transfer(address(this).balance); return true; } function withdrawBalanceUSDT() external onlyOwner returns (bool) { uint256 balanceUSDT = tokenContractAddressUSDT.balanceOf(address(this)); tokenContractAddressUSDT.transfer(owner(), balanceUSDT); return true; } function getContractBalanceFLYY() public view returns (uint256) { return tokenContractAddressFLYY.balanceOf(address(this)); } function withdrawBalanceFLYY(uint256 amount) external onlyOwner { require( getContractBalanceFLYY() >= amount, "TokenVestingFLYY: not enough withdrawable funds" ); tokenContractAddressFLYY.transfer(owner(), amount); } function getCurrentTime() external view virtual returns (uint256) { return block.timestamp; } function whitelistingSwitchControl( bool flag ) external onlyOwner returns (bool) { whitelistingSwitch = flag; emit WhitelistingSwitchTriggered(flag); return true; } function excludeFromWhitelist( address account ) external onlyOwner returns (bool) { _isIncludedInWhitelist[account] = false; return true; } function includeInWhitelist( address account ) external onlyOwner returns (bool) { _isIncludedInWhitelist[account] = true; return true; } function isWhitelisted(address account) external view returns (bool) { return _isIncludedInWhitelist[account]; } receive() external payable { _buyTokenInETH(); } fallback() external payable { _buyTokenInETH(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PriceChangedInETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PriceChangedInUSDT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"TokenSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"VestingScheduleChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"WhitelistingSwitchTriggered","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"buyTokenInETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyTokenInUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStartTimeTGE","type":"uint256"}],"name":"changeClaimStartTimeTGE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeTokenPriceInETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeTokenPriceInUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newContractAddress","type":"address"}],"name":"changeVestingContractAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"unlockedPercentageTGE_","type":"uint8"},{"internalType":"uint256","name":"vestingStart_","type":"uint256"},{"internalType":"uint256","name":"vestingCliff_","type":"uint256"},{"internalType":"uint256","name":"vestingDuration_","type":"uint256"},{"internalType":"uint256","name":"vestingSlicePeriodSeconds_","type":"uint256"}],"name":"changeVestingSchedule","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newContractAddress","type":"address"}],"name":"changetokenContractAddressFLYY","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStartTimeTGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTGE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractBalanceETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalanceFLYY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalanceUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLowerAndUpperPurchasingLimitInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLowerAndUpperPurchasingLimitInUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVestingSchedule","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accountAddress","type":"address"}],"name":"resetTokensPurchasedForAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTotalTokensSold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLowerLimitInWEI","type":"uint256"},{"internalType":"uint256","name":"newUpperLimitInWEI","type":"uint256"}],"name":"setLowerAndUpperPurchasingLimitInETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLowerLimitInUSDT","type":"uint256"},{"internalType":"uint256","name":"newUpperLimitInUSDT","type":"uint256"}],"name":"setLowerAndUpperPurchasingLimitInUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTotalPurchasingLimitTokenCount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenContractAddressFLYY","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenContractAddressUSDT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceInUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceInWEI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accountAddress","type":"address"}],"name":"tokensPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPurchasingLimitTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBalanceOfTGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userClaimStartTimeTGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingContractAddress","outputs":[{"internalType":"contract ITokenVestingFLYY","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistingSwitch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"whitelistingSwitchControl","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBalanceETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBalanceFLYY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBalanceUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561000f575f80fd5b50610019336100fd565b60018055600380546001600160a01b031990811673dac17f958d2ee523a2206206994597c13d831ec7179091556127106005556002805490911673def36a0653d4992c3614362553c446ce41488a46179055650574fbde60006004556006805460ff19908116601217909155600b80547405dbd185b1df18c4a69795041b4de4b5154957e6ff6001600160a81b031990911617905565018ab3f6a3806010819055600c55630118e309600d556301e18534600e556228206f600f556013805490911690555f60078190555f196008819055600991909155600a81905560155561014c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611fa1806101595f395ff3fe60806040526004361061025f575f3560e01c80637e10883a11610143578063b5f7f636116100b5578063d06770ef11610079578063d06770ef14610712578063d78c41e314610726578063f1c608c41461073b578063f2fde38b14610752578063f772a6c514610771578063fd5bf4a7146107795761026e565b8063b5f7f6361461068e578063b9afa8ba146106a3578063c5b2b74f146106cb578063c67557e1146106ea578063ca8484e7146106fe5761026e565b80638e79115a116101075780638e79115a146105c75780639b2df064146105e65780639b8c1fed146106115780639e7bf05f14610625578063a48e02f314610644578063adf1f25a1461066f5761026e565b80637e10883a1461053957806381cea8d91461054e57806383d4dcd91461056d5780638a094bf71461058c5780638da5cb5b146105ab5761026e565b8063351363e4116101dc578063477cde1c116101a0578063477cde1c1461048a5780635a10dbcf146104a95780635dac3006146104c8578063715018a6146104e7578063725588cd146104fb5780637ac10ec71461051a5761026e565b8063351363e41461039c57806339e77eeb146103d35780633a05f0d8146103f25780633af32abf1461043f578063464e77e4146104765761026e565b80632b65c824116102235780632b65c824146103385780632ceb52e51461034a5780632ea4b8591461035e578063326302961461037257806333898082146103875761026e565b806314f19ee81461027657806321760f70146102aa5780632585c893146102c957806329cb924d146102e85780632ad92740146103045761026e565b3661026e5761026c610792565b005b61026c610792565b348015610281575f80fd5b50610295610290366004611b1f565b6109d9565b60405190151581526020015b60405180910390f35b3480156102b5575f80fd5b506102956102c4366004611b4c565b6109f6565b3480156102d4575f80fd5b506102956102e3366004611b67565b610a4b565b3480156102f3575f80fd5b50425b6040519081526020016102a1565b34801561030f575f80fd5b506102f661031e366004611b7e565b6001600160a01b03165f9081526016602052604090205490565b348015610343575f80fd5b50476102f6565b348015610355575f80fd5b506102f6610b14565b348015610369575f80fd5b50610295610b84565b34801561037d575f80fd5b506102f660155481565b348015610392575f80fd5b506102f660055481565b3480156103a7575f80fd5b506002546103bb906001600160a01b031681565b6040516001600160a01b0390911681526020016102a1565b3480156103de575f80fd5b506102956103ed366004611b7e565b610bcc565b3480156103fd575f80fd5b50600b54600c54600d54600e54600f5460408051600160a01b90960460ff1686526020860194909452928401919091526060830152608082015260a0016102a1565b34801561044a575f80fd5b50610295610459366004611b7e565b6001600160a01b03165f9081526014602052604090205460ff1690565b348015610481575f80fd5b50610295610bfd565b348015610495575f80fd5b506102956104a4366004611b7e565b610d0c565b3480156104b4575f80fd5b506102956104c3366004611b1f565b610d3a565b3480156104d3575f80fd5b506102956104e2366004611b67565b610d52565b3480156104f2575f80fd5b5061026c610e0e565b348015610506575f80fd5b506003546103bb906001600160a01b031681565b348015610525575f80fd5b50610295610534366004611b7e565b610e21565b348015610544575f80fd5b506102f660045481565b348015610559575f80fd5b50610295610568366004611b67565b610e47565b348015610578575f80fd5b50610295610587366004611b7e565b610e59565b348015610597575f80fd5b506102956105a6366004611b67565b610e87565b3480156105b6575f80fd5b505f546001600160a01b03166103bb565b3480156105d2575f80fd5b5061026c6105e1366004611b67565b610e99565b3480156105f1575f80fd5b506102f6610600366004611b7e565b60126020525f908152604090205481565b34801561061c575f80fd5b50610295610fa4565b348015610630575f80fd5b50600b546103bb906001600160a01b031681565b34801561064f575f80fd5b506102f661065e366004611b7e565b60116020525f908152604090205481565b34801561067a575f80fd5b50610295610689366004611b7e565b611162565b348015610699575f80fd5b506102f660175481565b3480156106ae575f80fd5b50600954600a545b604080519283526020830191909152016102a1565b3480156106d6575f80fd5b506102956106e5366004611ba4565b61118f565b3480156106f5575f80fd5b506102956112af565b348015610709575f80fd5b506102956112c2565b34801561071d575f80fd5b506102f6611324565b348015610731575f80fd5b506102f660105481565b348015610746575f80fd5b506007546008546106b6565b34801561075d575f80fd5b5061026c61076c366004611b7e565b611354565b6102956113cd565b348015610784575f80fd5b506013546102959060ff1681565b348061080b5760405162461bcd60e51b815260206004820152603a60248201527f546f6b656e43726f776473616c65464c59593a2073656e742045544820616d6f60448201527f756e74206d7573742062652067726561746572207468616e203000000000000060648201526084015b60405180910390fd5b600754811015801561081f57506008548111155b61083b5760405162461bcd60e51b815260040161080290611be9565b335f610845610b14565b90505f610850611425565b6015546001600160a01b0385165f908152601660205260409020549192509061087a908390611c67565b11156108985760405162461bcd60e51b815260040161080290611c7a565b808210156108b85760405162461bcd60e51b815260040161080290611cfd565b600b545f906064906108d490600160a01b900460ff1684611d6e565b6108de9190611d85565b90505f6108eb8284611da4565b9050811561093b576001600160a01b0385165f908152601160205260408120805484929061091a908490611c67565b90915550506010546001600160a01b0386165f908152601260205260409020555b801561094b5761094b8582611451565b6001600160a01b0385165f9081526016602052604081208054859290610972908490611c67565b925050819055508260175f82825461098a9190611c67565b9091555050604080516001600160a01b0387168152602081018590527ffe2ff4cf36ff7d2c2b06eb960897ee0d76d9c3e58da12feb7b93e86b226dd344910160405180910390a1505050505050565b5f6109e26116d6565b506009829055600a81905560015b92915050565b5f6109ff6116d6565b6013805460ff19168315159081179091556040519081527f02b1b90a98b3d59e3de9c7e21642d2700735e14e0c5997f975fffb99b6aebc189060200160405180910390a1506001919050565b5f610a546116d6565b5f8211610ac95760405162461bcd60e51b815260206004820152603b60248201527f546f6b656e43726f776473616c65464c59593a20746f6b656e2070726963652060448201527f6d7573742062652067726561746572207468616e2030205553445400000000006064820152608401610802565b600580549083905560408051828152602081018590527f768045aa99369bbad3737d4d173bbbc99c4390a5f0ca6c8fadb40432540b4c7c91015b60405180910390a150600192915050565b6002546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a08231906024015b602060405180830381865afa158015610b5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7f9190611db7565b905090565b5f610b8d6116d6565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610bc4573d5f803e3d5ffd5b506001905090565b5f610bd56116d6565b506001600160a01b03165f908152601460205260409020805460ff1916600190811790915590565b5f610c066116d6565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c709190611db7565b6003549091506001600160a01b031663a9059cbb610c955f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610cdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d039190611dce565b50600191505090565b5f610d156116d6565b50600b80546001600160a01b0383166001600160a01b03199091161790556001919050565b5f610d436116d6565b50600791909155600855600190565b5f610d5b6116d6565b5f8211610dd05760405162461bcd60e51b815260206004820152603a60248201527f546f6b656e43726f776473616c65464c59593a20746f6b656e2070726963652060448201527f6d7573742062652067726561746572207468616e2030205745490000000000006064820152608401610802565b600480549083905560408051828152602081018590527fdfa7fea87e6f0fc7b10e25657a3bf24a962ecde36d58901b55934a8f902e99e29101610b03565b610e166116d6565b610e1f5f61172f565b565b5f610e2a6116d6565b506001600160a01b03165f90815260166020526040812055600190565b5f610e506116d6565b50601555600190565b5f610e626116d6565b50600280546001600160a01b0383166001600160a01b03199091161790556001919050565b5f610e906116d6565b50601055600190565b610ea16116d6565b80610eaa610b14565b1015610f105760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e56657374696e67464c59593a206e6f7420656e6f7567682077697460448201526e686472617761626c652066756e647360881b6064820152608401610802565b6002546001600160a01b031663a9059cbb610f325f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610f7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa09190611dce565b5050565b335f818152601160209081526040808320546012909252822054919291816110345760405162461bcd60e51b815260206004820152603860248201527f546f6b656e43726f776473616c65464c59593a206e6f205447452062616c616e60448201527f63652065786973747320666f72207468652063616c6c657200000000000000006064820152608401610802565b8042116110b75760405162461bcd60e51b815260206004820152604560248201527f546f6b656e43726f776473616c65464c59593a2054474520636c61696d20737460448201527f6172742074696d6520666f72207573657220686173206e6f742073746172746560648201526419081e595d60da1b608482015260a401610802565b6001600160a01b0383165f90815260116020526040812080548492906110de908490611da4565b909155505060025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303815f875af1158015611133573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111579190611dce565b506001935050505090565b5f61116b6116d6565b506001600160a01b03165f908152601460205260409020805460ff19169055600190565b5f6111986116d6565b60648660ff1611156112235760405162461bcd60e51b815260206004820152604860248201527f546f6b656e43726f776473616c65464c59593a20756e6c6f636b65642054474560448201527f2070657263656e74616765206d757374206e6f7420626520677265617465722060648201526707468616e203130360c41b608482015260a401610802565b600b805460ff60a01b1916600160a01b60ff891690810291909117909155600c869055600d859055600e849055600f8390556040805191825260208201879052810185905260608101849052608081018390527f27a2cb92f2c99af2fb6e159699d6c4654b6f0322aa02193415ff722ad9b27bea9060a00160405180910390a150600195945050505050565b5f6112b86116d6565b505f601755600190565b5f6112cb61177e565b601354339060ff1615806112f657506001600160a01b0381165f9081526014602052604090205460ff165b6113125760405162461bcd60e51b815260040161080290611de9565b61131a6117d7565b5050600180805590565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401610b40565b61135c6116d6565b6001600160a01b0381166113c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610802565b6113ca8161172f565b50565b5f6113d661177e565b601354339060ff16158061140157506001600160a01b0381165f9081526014602052604090205460ff165b61141d5760405162461bcd60e51b815260040161080290611de9565b61131a610792565b6004546006545f91829161143d9060ff16600a611f5d565b6114479034611d6e565b6109f09190611d85565b600d5460011480156114655750600e546001145b156115505760025460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156114ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114de9190611dce565b610fa05760405162461bcd60e51b815260206004820152603e60248201527f546f6b656e43726f776473616c65464c59593a20746f6b656e20464c5959207460448201527f72616e7366657220746f206275796572206e6f742073756363656564656400006064820152608401610802565b600254600b5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303815f875af11580156115a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c69190611dce565b6116495760405162461bcd60e51b815260206004820152604860248201527f546f6b656e43726f776473616c65464c59593a20746f6b656e20464c5959206160448201527f7070726f766520746f2076657374696e6720636f6e7472616374206e6f7420736064820152671d58d8d95959195960c21b608482015260a401610802565b600b54600c54600d54600e54600f546040516318bac18160e21b81526001600160a01b038881166004830152602482019590955260448101939093526064830191909152608482015260a481018490529116906362eb06049060c4015f604051808303815f87803b1580156116bc575f80fd5b505af11580156116ce573d5f803e3d5ffd5b505050505050565b5f546001600160a01b03163314610e1f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610802565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600154036117d05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610802565b6002600155565b6003545f906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611833573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118579190611db7565b90505f81116118ce5760405162461bcd60e51b815260206004820152603c60248201527f546f6b656e43726f776473616c65464c59593a20617070726f766520746f6b6560448201527f6e205553445420746f2063726f776473616c6520636f6e7472616374000000006064820152608401610802565b60095481101580156118e25750600a548111155b6118fe5760405162461bcd60e51b815260040161080290611be9565b335f611908610b14565b90505f611913611a69565b6015546001600160a01b0385165f908152601660205260409020549192509061193d908390611c67565b111561195b5760405162461bcd60e51b815260040161080290611c7a565b8082101561197b5760405162461bcd60e51b815260040161080290611cfd565b6003546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018790526064016020604051808303815f875af11580156119dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a019190611dce565b6108b85760405162461bcd60e51b815260206004820152603360248201527f546f6b656e43726f776473616c65464c59593a2055534454207472616e7366656044820152721c919c9bdb481b9bdd081cdd58d8d959591959606a1b6064820152608401610802565b6003545f9081906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611ac7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aeb9190611db7565b6005546006549192505f91611b049060ff16600a611f5d565b611b0e9084611d6e565b611b189190611d85565b9392505050565b5f8060408385031215611b30575f80fd5b50508035926020909101359150565b80151581146113ca575f80fd5b5f60208284031215611b5c575f80fd5b8135611b1881611b3f565b5f60208284031215611b77575f80fd5b5035919050565b5f60208284031215611b8e575f80fd5b81356001600160a01b0381168114611b18575f80fd5b5f805f805f60a08688031215611bb8575f80fd5b853560ff81168114611bc8575f80fd5b97602087013597506040870135966060810135965060800135945092505050565b60208082526044908201527f546f6b656e43726f776473616c65464c59593a2073656e742045544820616d6f60408201527f756e74206d757374206265206265747765656e2070757263686173696e67206c6060820152631a5b5a5d60e21b608082015260a00190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f0576109f0611c53565b60208082526059908201527f546f6b656e43726f776473616c65464c59593a2062757961626c6520746f6b6560408201527f6e20616d6f756e74206578636565647320746f74616c2070757263686173696e60608201527f67206c696d697420666f722073696e676c652077616c6c657400000000000000608082015260a00190565b6020808252604b908201527f546f6b656e43726f776473616c65464c59593a2062757961626c6520746f6b6560408201527f6e20616d6f756e7420657863656564732063726f776473616c6520636f6e747260608201526a6163742062616c616e636560a81b608082015260a00190565b80820281158282048414176109f0576109f0611c53565b5f82611d9f57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109f0576109f0611c53565b5f60208284031215611dc7575f80fd5b5051919050565b5f60208284031215611dde575f80fd5b8151611b1881611b3f565b60208082526068908201527f546f6b656e43726f776473616c65464c59593a2063616c6c696e67206163636f60408201527f756e742061646472657373206d7573742062652077686974656c69737465642060608201527f6669727374204f5220737769746368206f66662077686974656c697374696e67608082015267206665617475726560c01b60a082015260c00190565b600181815b80851115611eb757815f1904821115611e9d57611e9d611c53565b80851615611eaa57918102915b93841c9390800290611e82565b509250929050565b5f82611ecd575060016109f0565b81611ed957505f6109f0565b8160018114611eef5760028114611ef957611f15565b60019150506109f0565b60ff841115611f0a57611f0a611c53565b50506001821b6109f0565b5060208310610133831016604e8410600b8410161715611f38575081810a6109f0565b611f428383611e7d565b805f1904821115611f5557611f55611c53565b029392505050565b5f611b1860ff841683611ebf56fea26469706673582212209daf6b7e2c7c387a8f9174890da4e8a770fc012eabfc3acd6f6ce693a62f819c64736f6c63430008140033
Deployed Bytecode
0x60806040526004361061025f575f3560e01c80637e10883a11610143578063b5f7f636116100b5578063d06770ef11610079578063d06770ef14610712578063d78c41e314610726578063f1c608c41461073b578063f2fde38b14610752578063f772a6c514610771578063fd5bf4a7146107795761026e565b8063b5f7f6361461068e578063b9afa8ba146106a3578063c5b2b74f146106cb578063c67557e1146106ea578063ca8484e7146106fe5761026e565b80638e79115a116101075780638e79115a146105c75780639b2df064146105e65780639b8c1fed146106115780639e7bf05f14610625578063a48e02f314610644578063adf1f25a1461066f5761026e565b80637e10883a1461053957806381cea8d91461054e57806383d4dcd91461056d5780638a094bf71461058c5780638da5cb5b146105ab5761026e565b8063351363e4116101dc578063477cde1c116101a0578063477cde1c1461048a5780635a10dbcf146104a95780635dac3006146104c8578063715018a6146104e7578063725588cd146104fb5780637ac10ec71461051a5761026e565b8063351363e41461039c57806339e77eeb146103d35780633a05f0d8146103f25780633af32abf1461043f578063464e77e4146104765761026e565b80632b65c824116102235780632b65c824146103385780632ceb52e51461034a5780632ea4b8591461035e578063326302961461037257806333898082146103875761026e565b806314f19ee81461027657806321760f70146102aa5780632585c893146102c957806329cb924d146102e85780632ad92740146103045761026e565b3661026e5761026c610792565b005b61026c610792565b348015610281575f80fd5b50610295610290366004611b1f565b6109d9565b60405190151581526020015b60405180910390f35b3480156102b5575f80fd5b506102956102c4366004611b4c565b6109f6565b3480156102d4575f80fd5b506102956102e3366004611b67565b610a4b565b3480156102f3575f80fd5b50425b6040519081526020016102a1565b34801561030f575f80fd5b506102f661031e366004611b7e565b6001600160a01b03165f9081526016602052604090205490565b348015610343575f80fd5b50476102f6565b348015610355575f80fd5b506102f6610b14565b348015610369575f80fd5b50610295610b84565b34801561037d575f80fd5b506102f660155481565b348015610392575f80fd5b506102f660055481565b3480156103a7575f80fd5b506002546103bb906001600160a01b031681565b6040516001600160a01b0390911681526020016102a1565b3480156103de575f80fd5b506102956103ed366004611b7e565b610bcc565b3480156103fd575f80fd5b50600b54600c54600d54600e54600f5460408051600160a01b90960460ff1686526020860194909452928401919091526060830152608082015260a0016102a1565b34801561044a575f80fd5b50610295610459366004611b7e565b6001600160a01b03165f9081526014602052604090205460ff1690565b348015610481575f80fd5b50610295610bfd565b348015610495575f80fd5b506102956104a4366004611b7e565b610d0c565b3480156104b4575f80fd5b506102956104c3366004611b1f565b610d3a565b3480156104d3575f80fd5b506102956104e2366004611b67565b610d52565b3480156104f2575f80fd5b5061026c610e0e565b348015610506575f80fd5b506003546103bb906001600160a01b031681565b348015610525575f80fd5b50610295610534366004611b7e565b610e21565b348015610544575f80fd5b506102f660045481565b348015610559575f80fd5b50610295610568366004611b67565b610e47565b348015610578575f80fd5b50610295610587366004611b7e565b610e59565b348015610597575f80fd5b506102956105a6366004611b67565b610e87565b3480156105b6575f80fd5b505f546001600160a01b03166103bb565b3480156105d2575f80fd5b5061026c6105e1366004611b67565b610e99565b3480156105f1575f80fd5b506102f6610600366004611b7e565b60126020525f908152604090205481565b34801561061c575f80fd5b50610295610fa4565b348015610630575f80fd5b50600b546103bb906001600160a01b031681565b34801561064f575f80fd5b506102f661065e366004611b7e565b60116020525f908152604090205481565b34801561067a575f80fd5b50610295610689366004611b7e565b611162565b348015610699575f80fd5b506102f660175481565b3480156106ae575f80fd5b50600954600a545b604080519283526020830191909152016102a1565b3480156106d6575f80fd5b506102956106e5366004611ba4565b61118f565b3480156106f5575f80fd5b506102956112af565b348015610709575f80fd5b506102956112c2565b34801561071d575f80fd5b506102f6611324565b348015610731575f80fd5b506102f660105481565b348015610746575f80fd5b506007546008546106b6565b34801561075d575f80fd5b5061026c61076c366004611b7e565b611354565b6102956113cd565b348015610784575f80fd5b506013546102959060ff1681565b348061080b5760405162461bcd60e51b815260206004820152603a60248201527f546f6b656e43726f776473616c65464c59593a2073656e742045544820616d6f60448201527f756e74206d7573742062652067726561746572207468616e203000000000000060648201526084015b60405180910390fd5b600754811015801561081f57506008548111155b61083b5760405162461bcd60e51b815260040161080290611be9565b335f610845610b14565b90505f610850611425565b6015546001600160a01b0385165f908152601660205260409020549192509061087a908390611c67565b11156108985760405162461bcd60e51b815260040161080290611c7a565b808210156108b85760405162461bcd60e51b815260040161080290611cfd565b600b545f906064906108d490600160a01b900460ff1684611d6e565b6108de9190611d85565b90505f6108eb8284611da4565b9050811561093b576001600160a01b0385165f908152601160205260408120805484929061091a908490611c67565b90915550506010546001600160a01b0386165f908152601260205260409020555b801561094b5761094b8582611451565b6001600160a01b0385165f9081526016602052604081208054859290610972908490611c67565b925050819055508260175f82825461098a9190611c67565b9091555050604080516001600160a01b0387168152602081018590527ffe2ff4cf36ff7d2c2b06eb960897ee0d76d9c3e58da12feb7b93e86b226dd344910160405180910390a1505050505050565b5f6109e26116d6565b506009829055600a81905560015b92915050565b5f6109ff6116d6565b6013805460ff19168315159081179091556040519081527f02b1b90a98b3d59e3de9c7e21642d2700735e14e0c5997f975fffb99b6aebc189060200160405180910390a1506001919050565b5f610a546116d6565b5f8211610ac95760405162461bcd60e51b815260206004820152603b60248201527f546f6b656e43726f776473616c65464c59593a20746f6b656e2070726963652060448201527f6d7573742062652067726561746572207468616e2030205553445400000000006064820152608401610802565b600580549083905560408051828152602081018590527f768045aa99369bbad3737d4d173bbbc99c4390a5f0ca6c8fadb40432540b4c7c91015b60405180910390a150600192915050565b6002546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a08231906024015b602060405180830381865afa158015610b5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7f9190611db7565b905090565b5f610b8d6116d6565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610bc4573d5f803e3d5ffd5b506001905090565b5f610bd56116d6565b506001600160a01b03165f908152601460205260409020805460ff1916600190811790915590565b5f610c066116d6565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c709190611db7565b6003549091506001600160a01b031663a9059cbb610c955f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610cdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d039190611dce565b50600191505090565b5f610d156116d6565b50600b80546001600160a01b0383166001600160a01b03199091161790556001919050565b5f610d436116d6565b50600791909155600855600190565b5f610d5b6116d6565b5f8211610dd05760405162461bcd60e51b815260206004820152603a60248201527f546f6b656e43726f776473616c65464c59593a20746f6b656e2070726963652060448201527f6d7573742062652067726561746572207468616e2030205745490000000000006064820152608401610802565b600480549083905560408051828152602081018590527fdfa7fea87e6f0fc7b10e25657a3bf24a962ecde36d58901b55934a8f902e99e29101610b03565b610e166116d6565b610e1f5f61172f565b565b5f610e2a6116d6565b506001600160a01b03165f90815260166020526040812055600190565b5f610e506116d6565b50601555600190565b5f610e626116d6565b50600280546001600160a01b0383166001600160a01b03199091161790556001919050565b5f610e906116d6565b50601055600190565b610ea16116d6565b80610eaa610b14565b1015610f105760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e56657374696e67464c59593a206e6f7420656e6f7567682077697460448201526e686472617761626c652066756e647360881b6064820152608401610802565b6002546001600160a01b031663a9059cbb610f325f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610f7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa09190611dce565b5050565b335f818152601160209081526040808320546012909252822054919291816110345760405162461bcd60e51b815260206004820152603860248201527f546f6b656e43726f776473616c65464c59593a206e6f205447452062616c616e60448201527f63652065786973747320666f72207468652063616c6c657200000000000000006064820152608401610802565b8042116110b75760405162461bcd60e51b815260206004820152604560248201527f546f6b656e43726f776473616c65464c59593a2054474520636c61696d20737460448201527f6172742074696d6520666f72207573657220686173206e6f742073746172746560648201526419081e595d60da1b608482015260a401610802565b6001600160a01b0383165f90815260116020526040812080548492906110de908490611da4565b909155505060025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303815f875af1158015611133573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111579190611dce565b506001935050505090565b5f61116b6116d6565b506001600160a01b03165f908152601460205260409020805460ff19169055600190565b5f6111986116d6565b60648660ff1611156112235760405162461bcd60e51b815260206004820152604860248201527f546f6b656e43726f776473616c65464c59593a20756e6c6f636b65642054474560448201527f2070657263656e74616765206d757374206e6f7420626520677265617465722060648201526707468616e203130360c41b608482015260a401610802565b600b805460ff60a01b1916600160a01b60ff891690810291909117909155600c869055600d859055600e849055600f8390556040805191825260208201879052810185905260608101849052608081018390527f27a2cb92f2c99af2fb6e159699d6c4654b6f0322aa02193415ff722ad9b27bea9060a00160405180910390a150600195945050505050565b5f6112b86116d6565b505f601755600190565b5f6112cb61177e565b601354339060ff1615806112f657506001600160a01b0381165f9081526014602052604090205460ff165b6113125760405162461bcd60e51b815260040161080290611de9565b61131a6117d7565b5050600180805590565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401610b40565b61135c6116d6565b6001600160a01b0381166113c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610802565b6113ca8161172f565b50565b5f6113d661177e565b601354339060ff16158061140157506001600160a01b0381165f9081526014602052604090205460ff165b61141d5760405162461bcd60e51b815260040161080290611de9565b61131a610792565b6004546006545f91829161143d9060ff16600a611f5d565b6114479034611d6e565b6109f09190611d85565b600d5460011480156114655750600e546001145b156115505760025460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156114ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114de9190611dce565b610fa05760405162461bcd60e51b815260206004820152603e60248201527f546f6b656e43726f776473616c65464c59593a20746f6b656e20464c5959207460448201527f72616e7366657220746f206275796572206e6f742073756363656564656400006064820152608401610802565b600254600b5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303815f875af11580156115a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c69190611dce565b6116495760405162461bcd60e51b815260206004820152604860248201527f546f6b656e43726f776473616c65464c59593a20746f6b656e20464c5959206160448201527f7070726f766520746f2076657374696e6720636f6e7472616374206e6f7420736064820152671d58d8d95959195960c21b608482015260a401610802565b600b54600c54600d54600e54600f546040516318bac18160e21b81526001600160a01b038881166004830152602482019590955260448101939093526064830191909152608482015260a481018490529116906362eb06049060c4015f604051808303815f87803b1580156116bc575f80fd5b505af11580156116ce573d5f803e3d5ffd5b505050505050565b5f546001600160a01b03163314610e1f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610802565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600154036117d05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610802565b6002600155565b6003545f906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611833573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118579190611db7565b90505f81116118ce5760405162461bcd60e51b815260206004820152603c60248201527f546f6b656e43726f776473616c65464c59593a20617070726f766520746f6b6560448201527f6e205553445420746f2063726f776473616c6520636f6e7472616374000000006064820152608401610802565b60095481101580156118e25750600a548111155b6118fe5760405162461bcd60e51b815260040161080290611be9565b335f611908610b14565b90505f611913611a69565b6015546001600160a01b0385165f908152601660205260409020549192509061193d908390611c67565b111561195b5760405162461bcd60e51b815260040161080290611c7a565b8082101561197b5760405162461bcd60e51b815260040161080290611cfd565b6003546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018790526064016020604051808303815f875af11580156119dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a019190611dce565b6108b85760405162461bcd60e51b815260206004820152603360248201527f546f6b656e43726f776473616c65464c59593a2055534454207472616e7366656044820152721c919c9bdb481b9bdd081cdd58d8d959591959606a1b6064820152608401610802565b6003545f9081906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611ac7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aeb9190611db7565b6005546006549192505f91611b049060ff16600a611f5d565b611b0e9084611d6e565b611b189190611d85565b9392505050565b5f8060408385031215611b30575f80fd5b50508035926020909101359150565b80151581146113ca575f80fd5b5f60208284031215611b5c575f80fd5b8135611b1881611b3f565b5f60208284031215611b77575f80fd5b5035919050565b5f60208284031215611b8e575f80fd5b81356001600160a01b0381168114611b18575f80fd5b5f805f805f60a08688031215611bb8575f80fd5b853560ff81168114611bc8575f80fd5b97602087013597506040870135966060810135965060800135945092505050565b60208082526044908201527f546f6b656e43726f776473616c65464c59593a2073656e742045544820616d6f60408201527f756e74206d757374206265206265747765656e2070757263686173696e67206c6060820152631a5b5a5d60e21b608082015260a00190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f0576109f0611c53565b60208082526059908201527f546f6b656e43726f776473616c65464c59593a2062757961626c6520746f6b6560408201527f6e20616d6f756e74206578636565647320746f74616c2070757263686173696e60608201527f67206c696d697420666f722073696e676c652077616c6c657400000000000000608082015260a00190565b6020808252604b908201527f546f6b656e43726f776473616c65464c59593a2062757961626c6520746f6b6560408201527f6e20616d6f756e7420657863656564732063726f776473616c6520636f6e747260608201526a6163742062616c616e636560a81b608082015260a00190565b80820281158282048414176109f0576109f0611c53565b5f82611d9f57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109f0576109f0611c53565b5f60208284031215611dc7575f80fd5b5051919050565b5f60208284031215611dde575f80fd5b8151611b1881611b3f565b60208082526068908201527f546f6b656e43726f776473616c65464c59593a2063616c6c696e67206163636f60408201527f756e742061646472657373206d7573742062652077686974656c69737465642060608201527f6669727374204f5220737769746368206f66662077686974656c697374696e67608082015267206665617475726560c01b60a082015260c00190565b600181815b80851115611eb757815f1904821115611e9d57611e9d611c53565b80851615611eaa57918102915b93841c9390800290611e82565b509250929050565b5f82611ecd575060016109f0565b81611ed957505f6109f0565b8160018114611eef5760028114611ef957611f15565b60019150506109f0565b60ff841115611f0a57611f0a611c53565b50506001821b6109f0565b5060208310610133831016604e8410600b8410161715611f38575081810a6109f0565b611f428383611e7d565b805f1904821115611f5557611f55611c53565b029392505050565b5f611b1860ff841683611ebf56fea26469706673582212209daf6b7e2c7c387a8f9174890da4e8a770fc012eabfc3acd6f6ce693a62f819c64736f6c63430008140033
Deployed Bytecode Sourcemap
9402:15502:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24806:16;:14;:16::i;:::-;9402:15502;;24877:16;:14;:16::i;14356:316::-;;;;;;;;;;-1:-1:-1;14356:316:0;;;;;:::i;:::-;;:::i;:::-;;;432:14:1;;425:22;407:41;;395:2;380:18;14356:316:0;;;;;;;;24042:213;;;;;;;;;;-1:-1:-1;24042:213:0;;;;;:::i;:::-;;:::i;13202:404::-;;;;;;;;;;-1:-1:-1;13202:404:0;;;;;:::i;:::-;;:::i;23927:107::-;;;;;;;;;;-1:-1:-1;24011:15:0;23927:107;;;1159:25:1;;;1147:2;1132:18;23927:107:0;1013:177:1;14680:155:0;;;;;;;;;;-1:-1:-1;14680:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;14795:32:0;14768:7;14795:32;;;:16;:32;;;;;;;14680:155;22812:112;;;;;;;;;;-1:-1:-1;22895:21:0;22812:112;;23497:139;;;;;;;;;;;;;:::i;23081:155::-;;;;;;;;;;;;;:::i;10389:45::-;;;;;;;;;;;;;;;;9592:31;;;;;;;;;;;;;;;;9465:38;;;;;;;;;;-1:-1:-1;9465:38:0;;;;-1:-1:-1;;;;;9465:38:0;;;;;;-1:-1:-1;;;;;1664:32:1;;;1646:51;;1634:2;1619:18;9465:38:0;1486:217:1;24450:176:0;;;;;;;;;;-1:-1:-1;24450:176:0;;;;;:::i;:::-;;:::i;16305:330::-;;;;;;;;;;-1:-1:-1;16466:22:0;;16503:13;;16531;;16559:16;;16590:26;;16305:330;;;-1:-1:-1;;;16466:22:0;;;;;1963:36:1;;2030:2;2015:18;;2008:34;;;;2058:18;;;2051:34;;;;2116:2;2101:18;;2094:34;2159:3;2144:19;;2137:35;1950:3;1935:19;16305:330:0;1708:470:1;24634:126:0;;;;;;;;;;-1:-1:-1;24634:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24721:31:0;24697:4;24721:31;;;:22;:31;;;;;;;;;24634:126;23244:245;;;;;;;;;;;;;:::i;12344:221::-;;;;;;;;;;-1:-1:-1;12344:221:0;;;;;:::i;:::-;;:::i;14039:309::-;;;;;;;;;;-1:-1:-1;14039:309:0;;;;;:::i;:::-;;:::i;12795:399::-;;;;;;;;;;-1:-1:-1;12795:399:0;;;;;:::i;:::-;;:::i;2448:103::-;;;;;;;;;;;;;:::i;9510:38::-;;;;;;;;;;-1:-1:-1;9510:38:0;;;;-1:-1:-1;;;;;9510:38:0;;;15046:193;;;;;;;;;;-1:-1:-1;15046:193:0;;;;;:::i;:::-;;:::i;9555:30::-;;;;;;;;;;;;;;;;14843:195;;;;;;;;;;-1:-1:-1;14843:195:0;;;;;:::i;:::-;;:::i;12573:214::-;;;;;;;;;;-1:-1:-1;12573:214:0;;;;;:::i;:::-;;:::i;12144:192::-;;;;;;;;;;-1:-1:-1;12144:192:0;;;;;:::i;:::-;;:::i;1807:87::-;;;;;;;;;;-1:-1:-1;1853:7:0;1880:6;-1:-1:-1;;;;;1880:6:0;1807:87;;23644:275;;;;;;;;;;-1:-1:-1;23644:275:0;;;;;:::i;:::-;;:::i;10223:56::-;;;;;;;;;;-1:-1:-1;10223:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;20626:700;;;;;;;;;;;;;:::i;9867:47::-;;;;;;;;;;-1:-1:-1;9867:47:0;;;;-1:-1:-1;;;;;9867:47:0;;;10165:51;;;;;;;;;;-1:-1:-1;10165:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;24263:179;;;;;;;;;;-1:-1:-1;24263:179:0;;;;;:::i;:::-;;:::i;10500:29::-;;;;;;;;;;;;;;;;13825:206;;;;;;;;;;-1:-1:-1;13966:27:0;;13995;;13825:206;;;;2798:25:1;;;2854:2;2839:18;;2832:34;;;;2771:18;13825:206:0;2624:248:1;15382:915:0;;;;;;;;;;-1:-1:-1;15382:915:0;;;;;:::i;:::-;;:::i;15247:127::-;;;;;;;;;;;;;:::i;16860:194::-;;;;;;;;;;;;;:::i;22932:141::-;;;;;;;;;;;;;:::i;10126:32::-;;;;;;;;;;;;;;;;13614:203;;;;;;;;;;-1:-1:-1;13754:26:0;;13782;;13614:203;;2706:238;;;;;;;;;;-1:-1:-1;2706:238:0;;;;;:::i;:::-;;:::i;16643:209::-;;;:::i;10288:30::-;;;;;;;;;;-1:-1:-1;10288:30:0;;;;;;;;17062:1598;17127:9;17169:13;17147:121;;;;-1:-1:-1;;;17147:121:0;;3627:2:1;17147:121:0;;;3609:21:1;3666:2;3646:18;;;3639:30;3705:34;3685:18;;;3678:62;3776:28;3756:18;;;3749:56;3822:19;;17147:121:0;;;;;;;;;17315:26;;17302:9;:39;;:99;;;;;17375:26;;17362:9;:39;;17302:99;17279:219;;;;-1:-1:-1;;;17279:219:0;;;;;;;:::i;:::-;680:10;17511:13;17581:24;:22;:24::i;:::-;17550:55;;17616:21;17640;:19;:21::i;:::-;17758:30;;-1:-1:-1;;;;;17697:23:0;;;;;;:16;:23;;;;;;17616:45;;-1:-1:-1;17758:30:0;17697:39;;17616:45;;17697:39;:::i;:::-;17696:92;;17674:231;;;;-1:-1:-1;;;17674:231:0;;;;;;;:::i;:::-;17962:13;17938:20;:37;;17916:162;;;;-1:-1:-1;;;17916:162:0;;;;;;;:::i;:::-;18135:22;;18091:24;;18174:3;;18119:38;;-1:-1:-1;;;18135:22:0;;;;18119:13;:38;:::i;:::-;18118:59;;;;:::i;:::-;18091:86;-1:-1:-1;18188:20:0;18211:32;18091:86;18211:13;:32;:::i;:::-;18188:55;-1:-1:-1;18260:20:0;;18256:159;;-1:-1:-1;;;;;18297:23:0;;;;;;:16;:23;;;;;:43;;18324:16;;18297:23;:43;;18324:16;;18297:43;:::i;:::-;;;;-1:-1:-1;;18386:17:0;;-1:-1:-1;;;;;18355:28:0;;;;;;:21;:28;;;;;:48;18256:159;18431:16;;18427:84;;18464:35;18479:5;18486:12;18464:14;:35::i;:::-;-1:-1:-1;;;;;18521:23:0;;;;;;:16;:23;;;;;:40;;18548:13;;18521:23;:40;;18548:13;;18521:40;:::i;:::-;;;;;;;;18590:13;18572:14;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;18621:31:0;;;-1:-1:-1;;;;;6293:32:1;;6275:51;;6357:2;6342:18;;6335:34;;;18621:31:0;;6248:18:1;18621:31:0;;;;;;;17096:1564;;;;;;17062:1598::o;14356:316::-;14514:4;1693:13;:11;:13::i;:::-;-1:-1:-1;14531:27:0::1;:49:::0;;;14591:27:::1;:49:::0;;;14660:4:::1;1717:1;14356:316:::0;;;;:::o;24042:213::-;24132:4;1693:13;:11;:13::i;:::-;24149:18:::1;:25:::0;;-1:-1:-1;;24149:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24190:33:::1;::::0;407:41:1;;;24190:33:0::1;::::0;395:2:1;380:18;24190:33:0::1;;;;;;;-1:-1:-1::0;24243:4:0::1;24042:213:::0;;;:::o;13202:404::-;13296:4;1693:13;:11;:13::i;:::-;13346:1:::1;13335:8;:12;13313:121;;;::::0;-1:-1:-1;;;13313:121:0;;6582:2:1;13313:121:0::1;::::0;::::1;6564:21:1::0;6621:2;6601:18;;;6594:30;6660:34;6640:18;;;6633:62;6731:29;6711:18;;;6704:57;6778:19;;13313:121:0::1;6380:423:1::0;13313:121:0::1;13466:16;::::0;;13493:27;;;;13538:38:::1;::::0;;2798:25:1;;;2854:2;2839:18;;2832:34;;;13538:38:0::1;::::0;2771:18:1;13538:38:0::1;;;;;;;;-1:-1:-1::0;13594:4:0::1;::::0;13202:404;-1:-1:-1;;13202:404:0:o;23497:139::-;23579:24;;:49;;-1:-1:-1;;;23579:49:0;;23622:4;23579:49;;;1646:51:1;23552:7:0;;-1:-1:-1;;;;;23579:24:0;;:34;;1619:18:1;;23579:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23572:56;;23497:139;:::o;23081:155::-;23139:4;1693:13;:11;:13::i;:::-;1853:7;1880:6;;23156:48:::1;::::0;-1:-1:-1;;;;;1880:6:0;;;;23182:21:::1;23156:48:::0;::::1;;;::::0;23182:21;;23156:48;1853:7;23156:48;23182:21;1880:6;23156:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23224:4;23217:11;;23081:155:::0;:::o;24450:176::-;24539:4;1693:13;:11;:13::i;:::-;-1:-1:-1;;;;;;24556:31:0::1;;::::0;;;:22:::1;:31;::::0;;;;:38;;-1:-1:-1;;24556:38:0::1;24590:4;24556:38:::0;;::::1;::::0;;;24590:4;24450:176::o;23244:245::-;23303:4;1693:13;:11;:13::i;:::-;23342:24:::1;::::0;:49:::1;::::0;-1:-1:-1;;;23342:49:0;;23385:4:::1;23342:49;::::0;::::1;1646:51:1::0;23320:19:0::1;::::0;-1:-1:-1;;;;;23342:24:0::1;::::0;:34:::1;::::0;1619:18:1;;23342:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23402:24;::::0;23320:71;;-1:-1:-1;;;;;;23402:24:0::1;:33;23436:7;1853::::0;1880:6;-1:-1:-1;;;;;1880:6:0;;1807:87;23436:7:::1;23402:55;::::0;-1:-1:-1;;;;;;23402:55:0::1;::::0;;;;;;-1:-1:-1;;;;;6293:32:1;;;23402:55:0::1;::::0;::::1;6275:51:1::0;6342:18;;;6335:34;;;6248:18;;23402:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23477:4;23470:11;;;23244:245:::0;:::o;12344:221::-;12454:4;1693:13;:11;:13::i;:::-;-1:-1:-1;12471:22:0::1;:62:::0;;-1:-1:-1;;;;;12471:62:0;::::1;-1:-1:-1::0;;;;;;12471:62:0;;::::1;;::::0;;;12344:221;;;:::o;14039:309::-;14194:4;1693:13;:11;:13::i;:::-;-1:-1:-1;14211:26:0::1;:47:::0;;;;14269:26:::1;:47:::0;14336:4:::1;::::0;14039:309::o;12795:399::-;12888:4;1693:13;:11;:13::i;:::-;12938:1:::1;12927:8;:12;12905:120;;;::::0;-1:-1:-1;;;12905:120:0;;7449:2:1;12905:120:0::1;::::0;::::1;7431:21:1::0;7488:2;7468:18;;;7461:30;7527:34;7507:18;;;7500:62;7598:28;7578:18;;;7571:56;7644:19;;12905:120:0::1;7247:422:1::0;12905:120:0::1;13057:15;::::0;;13083:26;;;;13127:37:::1;::::0;;2798:25:1;;;2854:2;2839:18;;2832:34;;;13127:37:0::1;::::0;2771:18:1;13127:37:0::1;2624:248:1::0;2448:103:0;1693:13;:11;:13::i;:::-;2513:30:::1;2540:1;2513:18;:30::i;:::-;2448:103::o:0;15046:193::-;15154:4;1693:13;:11;:13::i;:::-;-1:-1:-1;;;;;;15171:32:0::1;15206:1;15171:32:::0;;;:16:::1;:32;::::0;;;;:36;15227:4:::1;::::0;15046:193::o;14843:195::-;14948:4;1693:13;:11;:13::i;:::-;-1:-1:-1;14965:30:0::1;:41:::0;15026:4:::1;::::0;14843:195::o;12573:214::-;12685:4;1693:13;:11;:13::i;:::-;-1:-1:-1;12702:24:0::1;:53:::0;;-1:-1:-1;;;;;12702:53:0;::::1;-1:-1:-1::0;;;;;;12702:53:0;;::::1;;::::0;;;12573:214;;;:::o;12144:192::-;12249:4;1693:13;:11;:13::i;:::-;-1:-1:-1;12266:17:0::1;:38:::0;12324:4:::1;::::0;12144:192::o;23644:275::-;1693:13;:11;:13::i;:::-;23769:6:::1;23741:24;:22;:24::i;:::-;:34;;23719:131;;;::::0;-1:-1:-1;;;23719:131:0;;7876:2:1;23719:131:0::1;::::0;::::1;7858:21:1::0;7915:2;7895:18;;;7888:30;7954:34;7934:18;;;7927:62;-1:-1:-1;;;8005:18:1;;;7998:45;8060:19;;23719:131:0::1;7674:411:1::0;23719:131:0::1;23861:24;::::0;-1:-1:-1;;;;;23861:24:0::1;:33;23895:7;1853::::0;1880:6;-1:-1:-1;;;;;1880:6:0;;1807:87;23895:7:::1;23861:50;::::0;-1:-1:-1;;;;;;23861:50:0::1;::::0;;;;;;-1:-1:-1;;;;;6293:32:1;;;23861:50:0::1;::::0;::::1;6275:51:1::0;6342:18;;;6335:34;;;6248:18;;23861:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23644:275:::0;:::o;20626:700::-;680:10;20664:4;20750:29;;;:16;:29;;;;;;;;;20823:21;:34;;;;;;20664:4;;680:10;20750:29;20870:123;;;;-1:-1:-1;;;20870:123:0;;8292:2:1;20870:123:0;;;8274:21:1;8331:2;8311:18;;;8304:30;8370:34;8350:18;;;8343:62;8441:26;8421:18;;;8414:54;8485:19;;20870:123:0;8090:420:1;20870:123:0;21044:22;21026:15;:40;21004:159;;;;-1:-1:-1;;;21004:159:0;;8717:2:1;21004:159:0;;;8699:21:1;8756:2;8736:18;;;8729:30;8795:34;8775:18;;;8768:62;8866:34;8846:18;;;8839:62;-1:-1:-1;;;8917:19:1;;;8910:36;8963:19;;21004:159:0;8515:473:1;21004:159:0;-1:-1:-1;;;;;21176:29:0;;;;;;:16;:29;;;;;:46;;21209:13;;21176:29;:46;;21209:13;;21176:46;:::i;:::-;;;;-1:-1:-1;;21233:24:0;;:61;;-1:-1:-1;;;21233:61:0;;-1:-1:-1;;;;;6293:32:1;;;21233:61:0;;;6275:51:1;6342:18;;;6335:34;;;21233:24:0;;;;:33;;6248:18:1;;21233:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21314:4;21307:11;;;;;20626:700;:::o;24263:179::-;24354:4;1693:13;:11;:13::i;:::-;-1:-1:-1;;;;;;24371:31:0::1;24405:5;24371:31:::0;;;:22:::1;:31;::::0;;;;:39;;-1:-1:-1;;24371:39:0::1;::::0;;-1:-1:-1;;24263:179:0:o;15382:915::-;15631:4;1693:13;:11;:13::i;:::-;15696:3:::1;15670:22;:29;;;;15648:151;;;::::0;-1:-1:-1;;;15648:151:0;;9195:2:1;15648:151:0::1;::::0;::::1;9177:21:1::0;9234:2;9214:18;;;9207:30;9273:34;9253:18;;;9246:62;9344:34;9324:18;;;9317:62;-1:-1:-1;;;9395:19:1;;;9388:39;9444:19;;15648:151:0::1;8993:476:1::0;15648:151:0::1;15812:22;:47:::0;;-1:-1:-1;;;;15812:47:0::1;-1:-1:-1::0;;;15812:47:0::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;15870:13:::1;:29:::0;;;15910:13:::1;:29:::0;;;15950:16:::1;:35:::0;;;15996:26:::1;:55:::0;;;16069:198:::1;::::0;;1963:36:1;;;2030:2;2015:18;;2008:34;;;2058:18;;2051:34;;;2116:2;2101:18;;2094:34;;;2159:3;2144:19;;2137:35;;;16069:198:0::1;::::0;1950:3:1;1935:19;16069:198:0::1;;;;;;;-1:-1:-1::0;16285:4:0::1;15382:915:::0;;;;;;;:::o;15247:127::-;15307:4;1693:13;:11;:13::i;:::-;-1:-1:-1;15341:1:0::1;15324:14;:18:::0;15362:4:::1;15247:127:::0;:::o;16860:194::-;16983:4;5471:21;:19;:21::i;:::-;10884:18:::1;::::0;16953:10:::1;::::0;10884:18:::1;;10883:19;::::0;:53:::1;;-1:-1:-1::0;;;;;;10906:30:0;::::1;;::::0;;;:22:::1;:30;::::0;;;;;::::1;;10883:53;10860:209;;;;-1:-1:-1::0;;;10860:209:0::1;;;;;;;:::i;:::-;17005:17:::2;:15;:17::i;:::-;-1:-1:-1::0;;17042:4:0::2;6035:22:::0;;;23081:155;:::o;22932:141::-;23016:24;;:49;;-1:-1:-1;;;23016:49:0;;23059:4;23016:49;;;1646:51:1;22989:7:0;;-1:-1:-1;;;;;23016:24:0;;:34;;1619:18:1;;23016:49:0;1486:217:1;2706:238:0;1693:13;:11;:13::i;:::-;-1:-1:-1;;;;;2809:22:0;::::1;2787:110;;;::::0;-1:-1:-1;;;2787:110:0;;10230:2:1;2787:110:0::1;::::0;::::1;10212:21:1::0;10269:2;10249:18;;;10242:30;10308:34;10288:18;;;10281:62;-1:-1:-1;;;10359:18:1;;;10352:36;10405:19;;2787:110:0::1;10028:402:1::0;2787:110:0::1;2908:28;2927:8;2908:18;:28::i;:::-;2706:238:::0;:::o;16643:209::-;16782:4;5471:21;:19;:21::i;:::-;10884:18:::1;::::0;16752:10:::1;::::0;10884:18:::1;;10883:19;::::0;:53:::1;;-1:-1:-1::0;;;;;;10906:30:0;::::1;;::::0;;;:22:::1;:30;::::0;;;;;::::1;;10883:53;10860:209;;;;-1:-1:-1::0;;;10860:209:0::1;;;;;;;:::i;:::-;16804:16:::2;:14;:16::i;21334:203::-:0;21481:15;;21450:14;;21387:7;;;;21444:20;;21450:14;;21444:2;:20;:::i;:::-;21432:32;;:9;:32;:::i;:::-;21431:65;;;;:::i;21889:915::-;21973:13;;21990:1;21973:18;:43;;;;;21995:16;;22015:1;21995:21;21973:43;21969:828;;;22059:24;;:54;;-1:-1:-1;;;22059:54:0;;-1:-1:-1;;;;;6293:32:1;;;22059:54:0;;;6275:51:1;6342:18;;;6335:34;;;22059:24:0;;;;:33;;6248:18:1;;22059:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22033:178;;;;-1:-1:-1;;;22033:178:0;;12020:2:1;22033:178:0;;;12002:21:1;12059:2;12039:18;;;12032:30;12098:34;12078:18;;;12071:62;12169:32;12149:18;;;12142:60;12219:19;;22033:178:0;11818:426:1;21969:828:0;22270:24;;22333:22;;22270:134;;-1:-1:-1;;;22270:134:0;;-1:-1:-1;;;;;22333:22:0;;;22270:134;;;6275:51:1;6342:18;;;6335:34;;;22270:24:0;;;:32;;6248:18:1;;22270:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22244:268;;;;-1:-1:-1;;;22244:268:0;;12451:2:1;22244:268:0;;;12433:21:1;12490:2;12470:18;;;12463:30;12529:34;12509:18;;;12502:62;12600:34;12580:18;;;12573:62;-1:-1:-1;;;12651:19:1;;;12644:39;12700:19;;22244:268:0;12249:476:1;22244:268:0;22527:22;;22620:13;;22652;;22684:16;;22719:26;;22527:258;;-1:-1:-1;;;22527:258:0;;-1:-1:-1;;;;;13035:32:1;;;22527:258:0;;;13017:51:1;13084:18;;;13077:34;;;;13127:18;;;13120:34;;;;13170:18;;;13163:34;;;;13213:19;;;13206:35;13257:19;;;13250:35;;;22527:22:0;;;:44;;12989:19:1;;22527:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21889:915;;:::o;1972:132::-;1853:7;1880:6;-1:-1:-1;;;;;1880:6:0;680:10;2036:23;2028:68;;;;-1:-1:-1;;;2028:68:0;;13498:2:1;2028:68:0;;;13480:21:1;;;13517:18;;;13510:30;13576:34;13556:18;;;13549:62;13628:18;;2028:68:0;13296:356:1;3104:191:0;3178:16;3197:6;;-1:-1:-1;;;;;3214:17:0;;;-1:-1:-1;;;;;;3214:17:0;;;;;;3247:40;;3197:6;;;;;;;3247:40;;3178:16;3247:40;3167:128;3104:191;:::o;5551:293::-;4953:1;5685:7;;:19;5677:63;;;;-1:-1:-1;;;5677:63:0;;13859:2:1;5677:63:0;;;13841:21:1;13898:2;13878:18;;;13871:30;13937:33;13917:18;;;13910:61;13988:18;;5677:63:0;13657:355:1;5677:63:0;4953:1;5818:7;:18;5551:293::o;18668:1950::-;18734:24;;18714:17;;-1:-1:-1;;;;;18734:24:0;:34;680:10;18734:100;;-1:-1:-1;;;;;;18734:100:0;;;;;;;-1:-1:-1;;;;;14247:15:1;;;18734:100:0;;;14229:34:1;18818:4:0;14279:18:1;;;14272:43;14164:18;;18734:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18714:120;;18879:1;18867:9;:13;18845:123;;;;-1:-1:-1;;;18845:123:0;;14528:2:1;18845:123:0;;;14510:21:1;14567:2;14547:18;;;14540:30;14606:34;14586:18;;;14579:62;14677:30;14657:18;;;14650:58;14725:19;;18845:123:0;14326:424:1;18845:123:0;19015:27;;19002:9;:40;;:101;;;;;19076:27;;19063:9;:40;;19002:101;18979:221;;;;-1:-1:-1;;;18979:221:0;;;;;;;:::i;:::-;680:10;19213:13;19283:24;:22;:24::i;:::-;19252:55;;19318:21;19342:22;:20;:22::i;:::-;19461:30;;-1:-1:-1;;;;;19400:23:0;;;;;;:16;:23;;;;;;19318:46;;-1:-1:-1;19461:30:0;19400:39;;19318:46;;19400:39;:::i;:::-;19399:92;;19377:231;;;;-1:-1:-1;;;19377:231:0;;;;;;;:::i;:::-;19665:13;19641:20;:37;;19619:162;;;;-1:-1:-1;;;19619:162:0;;;;;;;:::i;:::-;19814:24;;-1:-1:-1;;;;;19814:24:0;:37;680:10;19814:143;;-1:-1:-1;;;;;;19814:143:0;;;;;;;-1:-1:-1;;;;;15013:15:1;;;19814:143:0;;;14995:34:1;19909:4:0;15045:18:1;;;15038:43;15097:18;;;15090:34;;;14930:18;;19814:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19792:244;;;;-1:-1:-1;;;19792:244:0;;15337:2:1;19792:244:0;;;15319:21:1;15376:2;15356:18;;;15349:30;15415:34;15395:18;;;15388:62;-1:-1:-1;;;15466:18:1;;;15459:49;15525:19;;19792:244:0;15135:415:1;21545:336:0;21639:24;;21599:7;;;;-1:-1:-1;;;;;21639:24:0;:34;680:10;21639:100;;-1:-1:-1;;;;;;21639:100:0;;;;;;;-1:-1:-1;;;;;14247:15:1;;;21639:100:0;;;14229:34:1;21723:4:0;14279:18:1;;;14272:43;14164:18;;21639:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21824:16;;21793:14;;21619:120;;-1:-1:-1;21750:21:0;;21787:20;;21793:14;;21787:2;:20;:::i;:::-;21775:32;;:9;:32;:::i;:::-;21774:66;;;;:::i;:::-;21750:90;21545:336;-1:-1:-1;;;21545:336:0:o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;459:118::-;545:5;538:13;531:21;524:5;521:32;511:60;;567:1;564;557:12;582:241;638:6;691:2;679:9;670:7;666:23;662:32;659:52;;;707:1;704;697:12;659:52;746:9;733:23;765:28;787:5;765:28;:::i;828:180::-;887:6;940:2;928:9;919:7;915:23;911:32;908:52;;;956:1;953;946:12;908:52;-1:-1:-1;979:23:1;;828:180;-1:-1:-1;828:180:1:o;1195:286::-;1254:6;1307:2;1295:9;1286:7;1282:23;1278:32;1275:52;;;1323:1;1320;1313:12;1275:52;1349:23;;-1:-1:-1;;;;;1401:31:1;;1391:42;;1381:70;;1447:1;1444;1437:12;2877:543;2970:6;2978;2986;2994;3002;3055:3;3043:9;3034:7;3030:23;3026:33;3023:53;;;3072:1;3069;3062:12;3023:53;3111:9;3098:23;3161:4;3154:5;3150:16;3143:5;3140:27;3130:55;;3181:1;3178;3171:12;3130:55;3204:5;3256:2;3241:18;;3228:32;;-1:-1:-1;3307:2:1;3292:18;;3279:32;;3358:2;3343:18;;3330:32;;-1:-1:-1;3409:3:1;3394:19;3381:33;;-1:-1:-1;2877:543:1;-1:-1:-1;;;2877:543:1:o;3852:472::-;4054:2;4036:21;;;4093:2;4073:18;;;4066:30;4132:34;4127:2;4112:18;;4105:62;4203:34;4198:2;4183:18;;4176:62;-1:-1:-1;;;4269:3:1;4254:19;;4247:35;4314:3;4299:19;;3852:472::o;4329:127::-;4390:10;4385:3;4381:20;4378:1;4371:31;4421:4;4418:1;4411:15;4445:4;4442:1;4435:15;4461:125;4526:9;;;4547:10;;;4544:36;;;4560:18;;:::i;4591:493::-;4793:2;4775:21;;;4832:2;4812:18;;;4805:30;4871:34;4866:2;4851:18;;4844:62;4942:34;4937:2;4922:18;;4915:62;5014:27;5008:3;4993:19;;4986:56;5074:3;5059:19;;4591:493::o;5089:479::-;5291:2;5273:21;;;5330:2;5310:18;;;5303:30;5369:34;5364:2;5349:18;;5342:62;5440:34;5435:2;5420:18;;5413:62;-1:-1:-1;;;5506:3:1;5491:19;;5484:42;5558:3;5543:19;;5089:479::o;5573:168::-;5646:9;;;5677;;5694:15;;;5688:22;;5674:37;5664:71;;5715:18;;:::i;5746:217::-;5786:1;5812;5802:132;;5856:10;5851:3;5847:20;5844:1;5837:31;5891:4;5888:1;5881:15;5919:4;5916:1;5909:15;5802:132;-1:-1:-1;5948:9:1;;5746:217::o;5968:128::-;6035:9;;;6056:11;;;6053:37;;;6070:18;;:::i;6808:184::-;6878:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:52;;;6947:1;6944;6937:12;6899:52;-1:-1:-1;6970:16:1;;6808:184;-1:-1:-1;6808:184:1:o;6997:245::-;7064:6;7117:2;7105:9;7096:7;7092:23;7088:32;7085:52;;;7133:1;7130;7123:12;7085:52;7165:9;7159:16;7184:28;7206:5;7184:28;:::i;9474:549::-;9676:2;9658:21;;;9715:3;9695:18;;;9688:31;9755:34;9750:2;9735:18;;9728:62;9826:34;9821:2;9806:18;;9799:62;9898:34;9892:3;9877:19;;9870:63;-1:-1:-1;;;9964:3:1;9949:19;;9942:39;10013:3;9998:19;;9474:549::o;10435:422::-;10524:1;10567:5;10524:1;10581:270;10602:7;10592:8;10589:21;10581:270;;;10661:4;10657:1;10653:6;10649:17;10643:4;10640:27;10637:53;;;10670:18;;:::i;:::-;10720:7;10710:8;10706:22;10703:55;;;10740:16;;;;10703:55;10819:22;;;;10779:15;;;;10581:270;;;10585:3;10435:422;;;;;:::o;10862:806::-;10911:5;10941:8;10931:80;;-1:-1:-1;10982:1:1;10996:5;;10931:80;11030:4;11020:76;;-1:-1:-1;11067:1:1;11081:5;;11020:76;11112:4;11130:1;11125:59;;;;11198:1;11193:130;;;;11105:218;;11125:59;11155:1;11146:10;;11169:5;;;11193:130;11230:3;11220:8;11217:17;11214:43;;;11237:18;;:::i;:::-;-1:-1:-1;;11293:1:1;11279:16;;11308:5;;11105:218;;11407:2;11397:8;11394:16;11388:3;11382:4;11379:13;11375:36;11369:2;11359:8;11356:16;11351:2;11345:4;11342:12;11338:35;11335:77;11332:159;;;-1:-1:-1;11444:19:1;;;11476:5;;11332:159;11523:34;11548:8;11542:4;11523:34;:::i;:::-;11593:6;11589:1;11585:6;11581:19;11572:7;11569:32;11566:58;;;11604:18;;:::i;:::-;11642:20;;10862:806;-1:-1:-1;;;10862:806:1:o;11673:140::-;11731:5;11760:47;11801:4;11791:8;11787:19;11781:4;11760:47;:::i
Swarm Source
ipfs://9daf6b7e2c7c387a8f9174890da4e8a770fc012eabfc3acd6f6ce693a62f819c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.