ETH Price: $3,610.95 (+5.33%)

Contract

0xd8Fa690304D2B2824D918C0c7376e2823704557A
 

Overview

ETH Balance

0.054889847593799199 ETH

Eth Value

$198.20 (@ $3,610.95/ETH)

More Info

Private Name Tags

TokenTracker

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Transfer237659162025-11-10 2:35:598 hrs ago1762742159IN
SquidGrow: Old SquidGrow Token
0 ETH0.000026291.07400874
Transfer237659132025-11-10 2:35:238 hrs ago1762742123IN
SquidGrow: Old SquidGrow Token
0 ETH0.000026331.07580056
Approve237626452025-11-09 15:38:2319 hrs ago1762702703IN
SquidGrow: Old SquidGrow Token
0 ETH0.000006840.25882846
Approve237437132025-11-07 0:06:593 days ago1762474019IN
SquidGrow: Old SquidGrow Token
0 ETH0.000008980.3074778
Approve237437032025-11-07 0:04:593 days ago1762473899IN
SquidGrow: Old SquidGrow Token
0 ETH0.00001540.33258747
Approve236897682025-10-30 11:00:4711 days ago1761822047IN
SquidGrow: Old SquidGrow Token
0 ETH0.000109262.3584216
Transfer236871092025-10-30 2:04:4711 days ago1761789887IN
SquidGrow: Old SquidGrow Token
0 ETH0.000034711.10207304
Approve236675442025-10-27 8:18:3514 days ago1761553115IN
SquidGrow: Old SquidGrow Token
0 ETH0.000010560.22794864
Transfer236152182025-10-20 0:20:2321 days ago1760919623IN
SquidGrow: Old SquidGrow Token
0 ETH0.000035841.13694932
Approve235476372025-10-10 13:29:2330 days ago1760102963IN
SquidGrow: Old SquidGrow Token
0 ETH0.000010950.45039745
Approve235458372025-10-10 7:27:1131 days ago1760081231IN
SquidGrow: Old SquidGrow Token
0 ETH0.000006510.2465421
Approve235438742025-10-10 0:52:4731 days ago1760057567IN
SquidGrow: Old SquidGrow Token
0 ETH0.000009120.19686622
Approve235437452025-10-10 0:25:5931 days ago1760055959IN
SquidGrow: Old SquidGrow Token
0 ETH0.000009730.20890424
Approve235427742025-10-09 21:09:5931 days ago1760044199IN
SquidGrow: Old SquidGrow Token
0 ETH0.000028421.07950107
Approve235427732025-10-09 21:09:4731 days ago1760044187IN
SquidGrow: Old SquidGrow Token
0 ETH0.000026721.09833105
Approve235427592025-10-09 21:06:5931 days ago1760044019IN
SquidGrow: Old SquidGrow Token
0 ETH0.000029960.6427178
Approve235427192025-10-09 20:58:5931 days ago1760043539IN
SquidGrow: Old SquidGrow Token
0 ETH0.000038340.82250595
Approve235426912025-10-09 20:53:2331 days ago1760043203IN
SquidGrow: Old SquidGrow Token
0 ETH0.000028620.61403701
Transfer235426832025-10-09 20:51:4731 days ago1760043107IN
SquidGrow: Old SquidGrow Token
0 ETH0.000023460.66079445
Transfer235426802025-10-09 20:51:1131 days ago1760043071IN
SquidGrow: Old SquidGrow Token
0 ETH0.000022720.63961995
Approve235304422025-10-08 3:45:3533 days ago1759895135IN
SquidGrow: Old SquidGrow Token
0 ETH0.000006530.24705082
Approve235304122025-10-08 3:39:3533 days ago1759894775IN
SquidGrow: Old SquidGrow Token
0 ETH0.000015890.34298866
Approve235063012025-10-04 18:48:1136 days ago1759603691IN
SquidGrow: Old SquidGrow Token
0 ETH0.000005710.21608445
Approve234436212025-09-26 0:28:1145 days ago1758846491IN
SquidGrow: Old SquidGrow Token
0 ETH0.000015940.34417222
Approve234153152025-09-22 1:33:1149 days ago1758504791IN
SquidGrow: Old SquidGrow Token
0 ETH0.000009680.20770459
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer207670022024-09-17 1:17:35419 days ago1726535855
SquidGrow: Old SquidGrow Token
0.01071564 ETH
Add Liquidity ET...207670022024-09-17 1:17:35419 days ago1726535855
SquidGrow: Old SquidGrow Token
0.1333979 ETH
Transfer207670022024-09-17 1:17:35419 days ago1726535855
SquidGrow: Old SquidGrow Token
0.1333979 ETH
Transfer207662262024-09-16 22:41:35419 days ago1726526495
SquidGrow: Old SquidGrow Token
0.01565988 ETH
Add Liquidity ET...207662262024-09-16 22:41:35419 days ago1726526495
SquidGrow: Old SquidGrow Token
0.16154723 ETH
Transfer207662262024-09-16 22:41:35419 days ago1726526495
SquidGrow: Old SquidGrow Token
0.16154723 ETH
Add Liquidity ET...207241082024-09-11 1:32:11425 days ago1726018331
SquidGrow: Old SquidGrow Token
0.16820058 ETH
Transfer207241082024-09-11 1:32:11425 days ago1726018331
SquidGrow: Old SquidGrow Token
0.16820058 ETH
Add Liquidity ET...207182972024-09-10 6:02:23426 days ago1725948143
SquidGrow: Old SquidGrow Token
0.15833953 ETH
Transfer207182972024-09-10 6:02:23426 days ago1725948143
SquidGrow: Old SquidGrow Token
0.15833953 ETH
Add Liquidity ET...207140632024-09-09 15:50:47426 days ago1725897047
SquidGrow: Old SquidGrow Token
0.14997916 ETH
Transfer207140632024-09-09 15:50:47426 days ago1725897047
SquidGrow: Old SquidGrow Token
0.14997916 ETH
Add Liquidity ET...207045702024-09-08 8:02:35428 days ago1725782555
SquidGrow: Old SquidGrow Token
0.16058597 ETH
Transfer207045702024-09-08 8:02:35428 days ago1725782555
SquidGrow: Old SquidGrow Token
0.16058597 ETH
Add Liquidity ET...206929142024-09-06 17:02:23429 days ago1725642143
SquidGrow: Old SquidGrow Token
0.16132829 ETH
Transfer206929142024-09-06 17:02:23429 days ago1725642143
SquidGrow: Old SquidGrow Token
0.16132829 ETH
Add Liquidity ET...206898352024-09-06 6:43:11430 days ago1725604991
SquidGrow: Old SquidGrow Token
0.16170142 ETH
Transfer206898352024-09-06 6:43:11430 days ago1725604991
SquidGrow: Old SquidGrow Token
0.16170142 ETH
Add Liquidity ET...206886232024-09-06 2:39:47430 days ago1725590387
SquidGrow: Old SquidGrow Token
0.15594279 ETH
Transfer206886232024-09-06 2:39:47430 days ago1725590387
SquidGrow: Old SquidGrow Token
0.15594279 ETH
Add Liquidity ET...206868442024-09-05 20:41:47430 days ago1725568907
SquidGrow: Old SquidGrow Token
0.14927406 ETH
Transfer206868442024-09-05 20:41:47430 days ago1725568907
SquidGrow: Old SquidGrow Token
0.14927406 ETH
Add Liquidity ET...206865382024-09-05 19:40:23430 days ago1725565223
SquidGrow: Old SquidGrow Token
0.14812809 ETH
Transfer206865382024-09-05 19:40:23430 days ago1725565223
SquidGrow: Old SquidGrow Token
0.14812809 ETH
Add Liquidity ET...206865322024-09-05 19:39:11430 days ago1725565151
SquidGrow: Old SquidGrow Token
0.15133798 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SquidGrow

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license, Audited
/**
 *Submitted for verification at Etherscan.io on 2023-04-30
*/

/**

https://t.me/SquidGrowOfficial

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.14;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
 
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library Address {

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}
abstract contract Auth {
    address public owner;
    mapping (address => bool) internal authorizations;
    
    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true; 
    }
    
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER");
        _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED");
        _;
    }
    
    function authorize(address adr) public authorized {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public authorized {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }
    
    function transferOwnership(address payable adr) public authorized {
        require(adr != address(0), "Zero Address");
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);}
    
    function renounceOwnership() external authorized {
        emit OwnershipTransferred(address(0));
        owner = address(0);}
    
    event OwnershipTransferred(address owner);
}


interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}

interface IPair {
    function sync() external;
}

interface IWeth {
    function deposit() external payable;
}

contract SquidGrow  is IERC20, Auth {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    string private constant _name = 'SquidGrow';
    string private constant _symbol = 'SquidGrow';
    uint8 private constant _decimals = 9;
    uint256 private constant _totalSupply = 10 * 10**14 * (10 ** _decimals);

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _maxTxAmount = ( _totalSupply * 30 ) / 10000;
    uint256 public _maxWalletAmount = ( _totalSupply * 500 ) / 10000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) _isBot;
    mapping (address => bool) isWhitelisted;
    mapping (address => bool) isBlacklisted;

    IRouter public immutable router;
    address public immutable pair;
    bool tradingEnabled = false;
    uint256 startedTime;

    uint256 constant feeDenominator = 10000;

    struct Fee {
        uint256 stakingFee;
        uint256 burnFee;
        uint256 liquidFee; // marketingFee + autoLPFee + teamFee
        uint256 totalFee;
    }

    enum TransactionType {BUY, SELL, TRANSFER}

    mapping (TransactionType => Fee) public fees;

    bool swapAndLiquifyEnabled = false;
    uint256 swapTimes; 
    uint256 minTransactionsBeforeSwap = 7;
    bool swapping; 
    bool antiBotEnabled = true;

    uint256 swapThreshold = ( _totalSupply * 300 ) / 100000;
    uint256 _minTokenAmount = ( _totalSupply * 15 ) / 100000;

    uint256 marketing_divisor = 0;
    uint256 liquidity_divisor = 100;
    uint256 team_divisor = 0;
    uint256 total_divisor = 100;

    address liquidity_receiver; 
    address staking_receiver;
    address marketing_receiver;

    address team1_receiver;
    address team2_receiver;
    address team3_receiver;
    address team4_receiver;

    address public multisig = address(0x4B1AbbdEaC18EaA719C608BcCF9005711f296E87); // it will be updated to mutlisig address before deployemnt.

    event WhitelistUpdated(address indexed account, bool indexed whitelisted);
    event BotUpdated(address indexed account, bool indexed isBot);
    event BlacklistedUpdated(address indexed account, bool indexed blacklisted);
    event AntiBotStateUpdated(bool indexed enabled);
    event TradingEnabled();
    event TradingDisabled();
    event SwapBackSettingsUpdated(bool indexed enabled, uint256 threshold, uint256 minLimit, uint256 _minTransactions);
    event MaxLimitsUpdated(uint256 maxTxAmount, uint256 maxWalletAmount);
    event UnsupportedTokensRecoverd(address indexed token, address receiver, uint256 amount);
    event DivisorsUpdated(uint256 team, uint256 liquidity, uint256 marketing);
    event TeamFundsDistributed(address team1, address team2, address team3, address team4, uint256 amount);
    event FeesUpdated(TransactionType indexed transactionType, uint256 burnFee, uint256 stakingFee, uint256 swapAndLiquifyFee);
    event FeesAddressesUpdated(address marketing, address liquidity, address staking);
    event TeamAddressesUpdated(address team1, address team2, address team3, address team4);
    event ForceAdjustedLP(bool indexed squid, uint256 amount, bool indexed add);
    event TokensAirdroped(address indexed sender, uint256 length, uint256 airdropedAmount);
    event MultisigUpdated(address indexed multisig);

    modifier lockTheSwap {
        swapping = true; 
        _;
        swapping = false;
    }

    modifier onlyMultisig {
        require(msg.sender == multisig, "Not multisig");
        _;
    }

    constructor() Auth(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // eth - 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;

        // initilasing Fees
        fees[TransactionType.SELL] = Fee (0, 0, 1200, 1200);
        fees[TransactionType.BUY] = Fee (0, 0, 400, 400);
        fees[TransactionType.TRANSFER] = Fee (0, 0, 0, 0);
        
        isBlacklisted[address(0)] = true;
       
        isWhitelisted[msg.sender] = true;
        isWhitelisted[address(this)] = true;

        liquidity_receiver = address(this);
        team1_receiver = msg.sender;
        team2_receiver = msg.sender;
        team3_receiver = msg.sender;
        team4_receiver = msg.sender;
        staking_receiver = msg.sender;
        marketing_receiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function totalSupply() public pure override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}

    function isBot(address _address) public view returns (bool) {
        return _isBot[_address];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD));
    }

    function whitelistAddress(address _address, bool _whitelist) external authorized { 
        require(isWhitelisted[_address] != _whitelist, "Already set");
        isWhitelisted[_address] = _whitelist;

        emit WhitelistUpdated(_address, _whitelist);
    }

    function blacklistAddress(address _address, bool _blacklist) external authorized { 
        require(isBlacklisted[_address] != _blacklist, "Already set");
        isBlacklisted[_address] = _blacklist;

        emit BlacklistedUpdated(_address, _blacklist);
    }

    function updateBot(address _address, bool isBot_) external authorized {
        require(_isBot[_address] != isBot_, "Already set");
        _isBot[_address] = isBot_;

        emit BotUpdated(_address, isBot_);
    }

    function enableAntiBot(bool _enable) external authorized {
        require(antiBotEnabled != _enable, "Already set");
        antiBotEnabled = _enable;

        emit AntiBotStateUpdated(_enable);
    }

    function enableTrading(uint256 _input) external authorized {
        require(!tradingEnabled, "Already Enabled!");
        tradingEnabled = true;
        if(startedTime == 0) // initialise only once
            startedTime = block.timestamp.add(_input);
        
        emit TradingEnabled();
    }

    function disableTrading() external onlyMultisig {
        require(tradingEnabled, "Already disabled!");
        tradingEnabled = false;

        emit TradingDisabled();
    }

    function updateSwapBackSettings(bool _enabled, uint256 _threshold, uint256 _minLimit, uint256 _minTransactionsBeforeSwap) external authorized {
        swapAndLiquifyEnabled = _enabled; 
        swapThreshold = _threshold;
        _minTokenAmount = _minLimit;
        minTransactionsBeforeSwap = _minTransactionsBeforeSwap;

        emit SwapBackSettingsUpdated( _enabled, _threshold, _minLimit, _minTransactionsBeforeSwap);
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override returns (bool) {
        _spendAllowance(from, msg.sender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, allowance(msg.sender, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = allowance(msg.sender, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);

        bool takeFee = true;
        if (isWhitelisted[sender] || isWhitelisted[recipient]) {
            takeFee = false;

        } else {
            require(tradingEnabled, "Trading is Paused");
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if (recipient != pair) {
                require(_balances[recipient] + amount <= _maxWalletAmount, "Wallet amount exceeds limit");
            }

        }

        TransactionType transactionType;

        if(sender == pair) {
            transactionType = TransactionType.BUY;
            if(recipient != address(router) && block.timestamp <= startedTime) {
                _isBot[recipient] = true;
            }
        } else if (recipient == pair) {
            transactionType = TransactionType.SELL;
        } else {
            transactionType = TransactionType.TRANSFER;
        }

        swapTimes = swapTimes.add(1);
        if(shouldSwapBack(sender, amount)){
            swapAndLiquify(swapThreshold);
            swapTimes = 0;
        }

        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = takeFee ? takeTotalFee(sender, amount, transactionType) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(!isBlacklisted[sender], "Blackisted");
        require(!isBlacklisted[recipient], "Blackisted");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function takeTotalFee(address sender, uint256 amount, TransactionType transactionType) internal returns (uint256) {
        Fee memory fee = fees[transactionType];
        uint256 totalFees = _isBot[sender] && antiBotEnabled? (feeDenominator - 100) : fee.totalFee; // 99% fees if bot
        if (totalFees == 0) {
            return amount;
        }
        uint256 feeAmount = (amount.mul(totalFees)).div(feeDenominator);
        uint256 burnAmount = (feeAmount.mul(fee.burnFee)).div(totalFees);
        uint256 stakingAmount = (feeAmount.mul(fee.stakingFee)).div(totalFees);

        uint256 liquidAmount = feeAmount.sub(burnAmount).sub(stakingAmount);

        if(burnAmount > 0) {
            _balances[address(DEAD)] = _balances[address(DEAD)].add(burnAmount);
            emit Transfer(sender, address(DEAD), burnAmount);
        }
        if(stakingAmount > 0) {
            _balances[address(staking_receiver)] = _balances[address(staking_receiver)].add(stakingAmount);
            emit Transfer(sender, address(staking_receiver), stakingAmount);
        }
        if(liquidAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(liquidAmount);
            emit Transfer(sender, address(this), liquidAmount);
        } 
        return amount.sub(feeAmount);

    }

    function updateMaxLimits(uint256 _transaction, uint256 _wallet) external authorized {
        require(_transaction >= 1, "Max txn limit cannot be less than 0.00001%");
        require(_wallet >= 500000, "Max Wallet limit cannot be less than 5%");
        uint256 newTxLimit = ( _totalSupply * _transaction ) / 10000000;
        uint256 newWalletLimit = ( _totalSupply * _wallet ) / 10000000;
        _maxTxAmount = newTxLimit;
        _maxWalletAmount = newWalletLimit;

        emit MaxLimitsUpdated(_maxTxAmount, _maxWalletAmount);
    }

    function recoverUnsupportedTokens(address _token, address _receiver, uint256 _percentage) external authorized {
        uint256 amount = IERC20(_token).balanceOf(address(this));
        uint256 amountToWithdraw = amount.mul(_percentage).div(10000);
        IERC20(_token).safeTransfer(_receiver, amountToWithdraw);

        emit UnsupportedTokensRecoverd(_token, _receiver, amountToWithdraw);
    }

    function updateDivisors(uint256 _team, uint256 _liquidity, uint256 _marketing) external authorized {
        team_divisor = _team;
        liquidity_divisor = _liquidity;
        marketing_divisor = _marketing;
        total_divisor = _team.add(_liquidity).add(_marketing);

        emit DivisorsUpdated(_team, _liquidity, _marketing);
    }

    function distributeTeamFunds(uint256 _numerator, uint256 _denominator) external authorized {
        uint256 ethAmount = address(this).balance;
        uint256 distributeAmount = ethAmount.mul(_numerator).div(_denominator);
        uint256 amountToSend = distributeAmount.div(4);
        transferETH(team1_receiver, amountToSend);
        transferETH(team2_receiver, amountToSend);
        transferETH(team3_receiver, amountToSend);
        transferETH(team4_receiver, amountToSend);

        emit TeamFundsDistributed(team1_receiver, team2_receiver, team3_receiver, team4_receiver, distributeAmount);
    }

    function updateFee(TransactionType transactionType, uint256 _burnFee, uint256 _stakingFee, uint256 _swapAndLiquifyFee) external onlyMultisig {
        require(_burnFee.add(_stakingFee).add(_swapAndLiquifyFee) <= feeDenominator.mul(3).div(20), "Tax cannot be more than 15%");
        Fee storage fee = fees[transactionType];
        fee.burnFee = _burnFee;
        fee.stakingFee = _stakingFee;
        fee.liquidFee = _swapAndLiquifyFee;
        fee.totalFee = _burnFee.add(_stakingFee).add(_swapAndLiquifyFee);    

        emit FeesUpdated(transactionType, _burnFee, _stakingFee, _swapAndLiquifyFee);
    }

    function updateFeesAddresses(address _marketing, address _liquidity, address _staking) external authorized {
        require(_marketing != address(0), "Zero Address");
        require(_liquidity != address(0), "Zero Address");
        require(_staking != address(0), "Zero Address");
        marketing_receiver = _marketing;
        liquidity_receiver = _liquidity;
        staking_receiver = _staking;

        emit FeesAddressesUpdated( _marketing, _liquidity, _staking);
    }

    function updateTeamAddresses(address _team1, address _team2, address _team3, address _team4) external authorized {
        require(_team1 != address(0), "Zero Address");
        require(_team2 != address(0), "Zero Address");
        require(_team3 != address(0), "Zero Address");
        require(_team4 != address(0), "Zero Address");
        team1_receiver = _team1;
        team2_receiver = _team2;
        team3_receiver = _team3;
        team4_receiver = _team4;

        emit TeamAddressesUpdated( _team1, _team2, _team3, _team4);
    }

    function shouldSwapBack(address sender, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapAndLiquifyEnabled && aboveMin && 
             swapTimes >= minTransactionsBeforeSwap && aboveThreshold && sender != pair;
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 amountToLiquify = tokens.mul(liquidity_divisor).div(total_divisor).div(2);
        uint256 amountToSwap = tokens.sub(amountToLiquify);

        uint256 initialBalance = address(this).balance;
        swapTokensForETH(amountToSwap);

        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 totalETHFee = total_divisor.sub(liquidity_divisor.div(2));

        if(amountToLiquify > 0){
            addLiquidity(amountToLiquify, deltaBalance.mul(liquidity_divisor).div(totalETHFee).div(2)); 
        }
        // transfer ETH to marketing, teamFunds stay in contract for future distribution.
        transferETH(marketing_receiver, deltaBalance.mul(marketing_divisor).div(totalETHFee));
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function transferETH(address recipient, uint256 amount) private {
        if(amount == 0) return;
        (bool success, ) = payable(recipient).call{value: amount}("");
        require(success, "Unable to send ETH");
    }

    function airdropTokens(address[] calldata accounts, uint256[] calldata amounts) external authorized {
        uint256 length = accounts.length;
        require (length == amounts.length, "array length mismatched");
        uint256 airdropAmount = 0;
        
        for (uint256 i = 0; i < length; i++) {
            // updating balance directly instead of calling transfer to save gas
            _balances[accounts[i]] += amounts[i];
            airdropAmount += amounts[i];
            emit Transfer(msg.sender, accounts[i], amounts[i]);
        }
        _balances[msg.sender] -= airdropAmount;

        emit TokensAirdroped(msg.sender, length, airdropAmount);
    }

    function forceAdjustLP(bool squid, uint256 amount, bool add) external payable onlyMultisig{
        if(!squid) {
            require(add, "Cant withdraw bnb from pool");
            amount = msg.value;
            IWeth(router.WETH()).deposit{value: amount}();
            IERC20(router.WETH()).safeTransfer(pair, amount);
        }else {
            if(add) {
                _balances[msg.sender] -= amount;
                _balances[pair] += amount;
                emit Transfer(msg.sender, pair, amount);

            } else {
                _balances[pair] -= amount;
                _balances[msg.sender] += amount;
                emit Transfer(pair, msg.sender, amount);
            }
        }
        IPair(pair).sync();
        emit ForceAdjustedLP(squid, amount, add);
    }

    function setMultisig(address _newMultisig) external onlyMultisig {
        require(_newMultisig != address(0), "Zero Address");
        multisig = _newMultisig;
        emit MultisigUpdated(_newMultisig);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AntiBotStateUpdated","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":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"BlacklistedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isBot","type":"bool"}],"name":"BotUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"team","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"DivisorsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"},{"indexed":false,"internalType":"address","name":"liquidity","type":"address"},{"indexed":false,"internalType":"address","name":"staking","type":"address"}],"name":"FeesAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum SquidGrow.TransactionType","name":"transactionType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapAndLiquifyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"squid","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"add","type":"bool"}],"name":"ForceAdjustedLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"multisig","type":"address"}],"name":"MultisigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_minTransactions","type":"uint256"}],"name":"SwapBackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team1","type":"address"},{"indexed":false,"internalType":"address","name":"team2","type":"address"},{"indexed":false,"internalType":"address","name":"team3","type":"address"},{"indexed":false,"internalType":"address","name":"team4","type":"address"}],"name":"TeamAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team1","type":"address"},{"indexed":false,"internalType":"address","name":"team2","type":"address"},{"indexed":false,"internalType":"address","name":"team3","type":"address"},{"indexed":false,"internalType":"address","name":"team4","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TeamFundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"airdropedAmount","type":"uint256"}],"name":"TokensAirdroped","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingDisabled","type":"event"},{"anonymous":false,"inputs":[],"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":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnsupportedTokensRecoverd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"WhitelistUpdated","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","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":"adr","type":"address"}],"name":"authorize","outputs":[],"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":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_blacklist","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","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":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"distributeTeamFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_input","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SquidGrow.TransactionType","name":"","type":"uint8"}],"name":"fees","outputs":[{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"liquidFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"squid","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"add","type":"bool"}],"name":"forceAdjustLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"recoverUnsupportedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newMultisig","type":"address"}],"name":"setMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"isBot_","type":"bool"}],"name":"updateBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"updateDivisors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SquidGrow.TransactionType","name":"transactionType","type":"uint8"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_swapAndLiquifyFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"updateFeesAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transaction","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"updateMaxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_minLimit","type":"uint256"},{"internalType":"uint256","name":"_minTransactionsBeforeSwap","type":"uint256"}],"name":"updateSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team1","type":"address"},{"internalType":"address","name":"_team2","type":"address"},{"internalType":"address","name":"_team3","type":"address"},{"internalType":"address","name":"_team4","type":"address"}],"name":"updateTeamAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_whitelist","type":"bool"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052612710620000156009600a62000792565b620000289066038d7ea4c68000620007aa565b6200003590601e620007aa565b620000419190620007cc565b600255612710620000556009600a62000792565b620000689066038d7ea4c68000620007aa565b62000076906101f4620007aa565b620000829190620007cc565b6003556009805460ff199081168255600c805490911690556007600e55600f805461ff001916610100179055620186a090620000c090600a62000792565b620000d39066038d7ea4c68000620007aa565b620000e19061012c620007aa565b620000ed9190620007cc565b601055620186a0620001026009600a62000792565b620001159066038d7ea4c68000620007aa565b6200012290600f620007aa565b6200012e9190620007cc565b6011556000601281905560646013819055601491909155601555601d80546001600160a01b031916734b1abbdeac18eaa719c608bccf9005711f296e871790553480156200017b57600080fd5b50600080546001600160a01b0319163390811782558152600160208181526040808420805460ff1916909317909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a0155926004808401938290030181865afa158015620001f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021d9190620007ef565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002919190620007ef565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003059190620007ef565b6001600160a01b03838116608090815290821660a052604080518083018252600080825260208083018281526104b084860181815260608087019283526001808752600b80875297517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf5593517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05590517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d15590517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d2558551808801875284815280840185815261019082890181815283850191825287805288875292517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f765590517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f775590517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7855517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7955855196870186528387528683018481528787018581529188018581526002865295845296517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916345595517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916355594517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916365591517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91637557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805460ff199081168617909155338083526007909352838220805482168617905530808352939091208054909116909317909255601680546001600160a01b0319908116909217905560198054821683179055601a8054821683179055601b8054821683179055601c8054821683179055601780548216831790556018805490911690911790559050620005fb6009600a62000792565b6200060e9066038d7ea4c68000620007aa565b33600081815260046020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620006516009600a62000792565b620006649066038d7ea4c68000620007aa565b60405190815260200160405180910390a350506200081a565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006d4578160001904821115620006b857620006b86200067d565b80851615620006c657918102915b93841c939080029062000698565b509250929050565b600082620006ed575060016200078c565b81620006fc575060006200078c565b8160018114620007155760028114620007205762000740565b60019150506200078c565b60ff8411156200073457620007346200067d565b50506001821b6200078c565b5060208310610133831016604e8410600b841016171562000765575081810a6200078c565b62000771838362000693565b80600019048211156200078857620007886200067d565b0290505b92915050565b6000620007a360ff841683620006dc565b9392505050565b6000816000190483118215151615620007c757620007c76200067d565b500290565b600082620007ea57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200080257600080fd5b81516001600160a01b0381168114620007a357600080fd5b60805160a05161387d620008be600039600081816106a6015281816111440152818161122f0152818161127a015281816112cf015281816113480152818161138701528181612229015281816122d90152818161238801526127bf0152600081816107da0152818161106c015281816111660152818161231601528181612ccd01528181612d8601528181612dc201528181612e3c0152612ea4015261387d6000f3fe6080604052600436106102605760003560e01c8063706f693711610144578063b6a5d7de116100b6578063f319ae771161007a578063f319ae7714610788578063f3283fba146107a8578063f887ea40146107c8578063fac1b9bc146107fc578063fc5ea5e61461081c578063fe9fbb801461083c57600080fd5b8063b6a5d7de146106e8578063b9a45aac14610708578063dd62ed3e14610728578063f0b37c0414610748578063f2fde38b1461076857600080fd5b80638da5cb5b116101085780638da5cb5b146106345780638e5c3ad31461065457806395d89b411461026c578063a457c2d714610674578063a8aa1b3114610694578063a9059cbb146106c857600080fd5b8063706f69371461059357806370a08231146105b3578063715018a6146105e95780637d1db4a5146105fe57806382aa7c681461061457600080fd5b8063357c1354116101dd578063455a4396116101a1578063455a4396146104d25780634783c35b146104f25780634a5a863a1461052a578063569c9b331461054a5780636b7f8b901461055d5780636c0a24eb1461057d57600080fd5b8063357c1354146103d757806339264b661461043957806339509351146104595780633bbac5791461047957806340005fbe146104b257600080fd5b806323b872dd1161022457806323b872dd146103375780632b112e49146103575780632f54bf6e1461036c578063313ce5671461039b5780633385f9aa146103b757600080fd5b806306fdde031461026c578063095ea7b3146102ad5780630eefe44b146102dd57806317700f01146102ff57806318160ddd1461031457600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506040805180820182526009815268537175696447726f7760b81b602082015290516102a491906130d8565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004613123565b61085c565b60405190151581526020016102a4565b3480156102e957600080fd5b506102fd6102f8366004613163565b610873565b005b34801561030b57600080fd5b506102fd6109da565b34801561032057600080fd5b50610329610a7f565b6040519081526020016102a4565b34801561034357600080fd5b506102cd61035236600461319c565b610aa3565b34801561036357600080fd5b50610329610ac6565b34801561037857600080fd5b506102cd6103873660046131dd565b6000546001600160a01b0391821691161490565b3480156103a757600080fd5b50604051600981526020016102a4565b3480156103c357600080fd5b506102fd6103d23660046131fa565b610b1c565b3480156103e357600080fd5b506104196103f2366004613256565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016102a4565b34801561044557600080fd5b506102fd61045436600461319c565b610c75565b34801561046557600080fd5b506102cd610474366004613123565b610d72565b34801561048557600080fd5b506102cd6104943660046131dd565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104be57600080fd5b506102fd6104cd366004613271565b610d93565b3480156104de57600080fd5b506102fd6104ed3660046132ca565b610eaf565b3480156104fe57600080fd5b50601d54610512906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561053657600080fd5b506102fd610545366004613303565b610f68565b6102fd61055836600461332f565b610feb565b34801561056957600080fd5b506102fd610578366004613366565b61143c565b34801561058957600080fd5b5061032960035481565b34801561059f57600080fd5b506102fd6105ae3660046133cf565b6114d8565b3480156105bf57600080fd5b506103296105ce3660046131dd565b6001600160a01b031660009081526004602052604090205490565b3480156105f557600080fd5b506102fd6116e2565b34801561060a57600080fd5b5061032960025481565b34801561062057600080fd5b506102fd61062f36600461343b565b61174d565b34801561064057600080fd5b50600054610512906001600160a01b031681565b34801561066057600080fd5b506102fd61066f366004613454565b611809565b34801561068057600080fd5b506102cd61068f366004613123565b611895565b3480156106a057600080fd5b506105127f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d457600080fd5b506102cd6106e3366004613123565b61190f565b3480156106f457600080fd5b506102fd6107033660046131dd565b61191c565b34801561071457600080fd5b506102fd6107233660046132ca565b611968565b34801561073457600080fd5b50610329610743366004613475565b611a21565b34801561075457600080fd5b506102fd6107633660046131dd565b611a4c565b34801561077457600080fd5b506102fd6107833660046131dd565b611a92565b34801561079457600080fd5b506102fd6107a33660046134a3565b611b49565b3480156107b457600080fd5b506102fd6107c33660046131dd565b611cea565b3480156107d457600080fd5b506105127f000000000000000000000000000000000000000000000000000000000000000081565b34801561080857600080fd5b506102fd6108173660046132ca565b611d84565b34801561082857600080fd5b506102fd6108373660046134a3565b611e3d565b34801561084857600080fd5b506102cd6108573660046131dd565b611f4c565b6000610869338484611f6a565b5060015b92915050565b601d546001600160a01b031633146108a65760405162461bcd60e51b815260040161089d906134c5565b60405180910390fd5b6108be60146108b86127106003612086565b90612092565b6108d2826108cc868661209e565b9061209e565b11156109205760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e203135250000000000604482015260640161089d565b6000600b6000866002811115610938576109386134eb565b6002811115610949576109496134eb565b815260208101919091526040016000206001810185905583815560028101839055905061097a826108cc868661209e565b6003820155846002811115610991576109916134eb565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b601d546001600160a01b03163314610a045760405162461bcd60e51b815260040161089d906134c5565b60095460ff16610a4a5760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b604482015260640161089d565b6009805460ff191690556040517fbcb8b8fbdea8aa6dc4ae41213e4da81e605a3d1a56ed851b9355182321c0919090600090a1565b6000610a8d6009600a6135fb565b610a9e9066038d7ea4c6800061360a565b905090565b6000610ab08433846120aa565b610abb848484612124565b5060015b9392505050565b61dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54610a9e90610b056009600a6135fb565b610b169066038d7ea4c6800061360a565b906124c9565b610b2533611f4c565b610b415760405162461bcd60e51b815260040161089d90613629565b6001600160a01b038416610b675760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038316610b8d5760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038216610bb35760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038116610bd95760405162461bcd60e51b815260040161089d9061364e565b601980546001600160a01b038681166001600160a01b03199283168117909355601a80548783169084168117909155601b80548784169085168117909155601c805493871693909416831790935560408051948552602085019190915283019190915260608201527f5e236cea420126c8c121f351414cc8f3a268d3e366008a30deb36003636cb5f6906080015b60405180910390a150505050565b610c7e33611f4c565b610c9a5760405162461bcd60e51b815260040161089d90613629565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d059190613674565b90506000610d196127106108b88486612086565b9050610d2f6001600160a01b03861685836124d5565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b891016109cb565b6000610869338484610d843388611a21565b610d8e919061368d565b611f6a565b610d9c33611f4c565b610db85760405162461bcd60e51b815260040161089d90613629565b6001600160a01b038316610dde5760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038216610e045760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038116610e2a5760405162461bcd60e51b815260040161089d9061364e565b601880546001600160a01b038581166001600160a01b0319928316811790935560168054868316908416811790915560178054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c906060015b60405180910390a1505050565b610eb833611f4c565b610ed45760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610f145760405162461bcd60e51b815260040161089d906136a5565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610f7133611f4c565b610f8d5760405162461bcd60e51b815260040161089d90613629565b601483905560138290556012819055610faa816108cc858561209e565b60155560408051848152602081018490529081018290527fdb99cc69484cb3ee77f3036657c45f45b65191334cd61d9276977d3c9595ae3990606001610ea2565b601d546001600160a01b031633146110155760405162461bcd60e51b815260040161089d906134c5565b826111fb57806110675760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c0000000000604482015260640161089d565b3491507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec91906136ca565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561112657600080fd5b505af115801561113a573d6000803e3d6000fd5b50505050506111f67f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e691906136ca565b6001600160a01b031691906124d5565b611385565b80156112c55733600090815260046020526040812080548492906112209084906136e7565b90915550506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600460205260408120805484929061126d90849061368d565b90915550506040518281527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169033906000805160206138288339815191529060200160405180910390a3611385565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600460205260408120805484929061130d9084906136e7565b9091555050336000908152600460205260408120805484929061133190849061368d565b909155505060405182815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906000805160206138288339815191529060200160405180910390a35b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113e057600080fd5b505af11580156113f4573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161142f91815260200190565b60405180910390a3505050565b61144533611f4c565b6114615760405162461bcd60e51b815260040161089d90613629565b801515600f60019054906101000a900460ff161515036114935760405162461bcd60e51b815260040161089d906136a5565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b6114e133611f4c565b6114fd5760405162461bcd60e51b815260040161089d90613629565b8281811461154d5760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d617463686564000000000000000000604482015260640161089d565b6000805b8281101561167a5784848281811061156b5761156b6136fe565b9050602002013560046000898985818110611588576115886136fe565b905060200201602081019061159d91906131dd565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546115cc919061368d565b9091555085905084828181106115e4576115e46136fe565b90506020020135826115f6919061368d565b915086868281811061160a5761160a6136fe565b905060200201602081019061161f91906131dd565b6001600160a01b03163360008051602061382883398151915287878581811061164a5761164a6136fe565b9050602002013560405161166091815260200190565b60405180910390a38061167281613714565b915050611551565b50336000908152600460205260408120805483929061169a9084906136e7565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b6116eb33611f4c565b6117075760405162461bcd60e51b815260040161089d90613629565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b61175633611f4c565b6117725760405162461bcd60e51b815260040161089d90613629565b60095460ff16156117b85760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b604482015260640161089d565b6009805460ff19166001179055600a546000036117dd576117d9428261209e565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b61181233611f4c565b61182e5760405162461bcd60e51b815260040161089d90613629565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b6000806118a23385611a21565b9050828110156119025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161089d565b610abb3385858403611f6a565b6000610869338484612124565b61192533611f4c565b6119415760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61197133611f4c565b61198d5760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03821660009081526007602052604090205481151560ff9091161515036119cd5760405162461bcd60e51b815260040161089d906136a5565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611a5533611f4c565b611a715760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03166000908152600160205260409020805460ff19169055565b611a9b33611f4c565b611ab75760405162461bcd60e51b815260040161089d90613629565b6001600160a01b038116611add5760405162461bcd60e51b815260040161089d9061364e565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b611b5233611f4c565b611b6e5760405162461bcd60e51b815260040161089d90613629565b6001821015611bd25760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b606482015260840161089d565b6207a120811015611c355760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b606482015260840161089d565b60006298968083611c486009600a6135fb565b611c599066038d7ea4c6800061360a565b611c63919061360a565b611c6d919061372d565b905060006298968083611c826009600a6135fb565b611c939066038d7ea4c6800061360a565b611c9d919061360a565b611ca7919061372d565b6002839055600381905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c2299101610c67565b601d546001600160a01b03163314611d145760405162461bcd60e51b815260040161089d906134c5565b6001600160a01b038116611d3a5760405162461bcd60e51b815260040161089d9061364e565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f6d74d31357c421bb05a45b4becf09f03737979c1150bb0054704d1b4f31bb82a90600090a250565b611d8d33611f4c565b611da95760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611de95760405162461bcd60e51b815260040161089d906136a5565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b611e4633611f4c565b611e625760405162461bcd60e51b815260040161089d90613629565b476000611e73836108b88487612086565b90506000611e82826004612092565b601954909150611e9b906001600160a01b03168261252c565b601a54611eb1906001600160a01b03168261252c565b601b54611ec7906001600160a01b03168261252c565b601c54611edd906001600160a01b03168261252c565b601954601a54601b54601c54604080516001600160a01b0395861681529385166020850152918416838301529290921660608201526080810184905290517fa08f91be8aba9066a7bc396851b6d781cef0ae989dbcab9c649d4c6bceb3bee99181900360a00190a15050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611fcc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161089d565b6001600160a01b03821661202d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161089d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161142f565b6000610abf828461360a565b6000610abf828461372d565b6000610abf828461368d565b60006120b68484611a21565b9050600019811461211e57818110156121115760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161089d565b61211e8484848403611f6a565b50505050565b61212f8383836125d0565b6001600160a01b03831660009081526007602052604090205460019060ff168061217157506001600160a01b03831660009081526007602052604090205460ff165b1561217e575060006122d5565b60095460ff166121c45760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b604482015260640161089d565b6002548211156122275760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161089d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146122d5576003546001600160a01b03841660009081526004602052604090205461228790849061368d565b11156122d55760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d69740000000000604482015260640161089d565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03160361238657600090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316141580156123585750600a544211155b15612381576001600160a01b0384166000908152600660205260409020805460ff191660011790555b6123cb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316036123c7575060016123cb565b5060025b600d546123d990600161209e565b600d556123e68584612760565b156123fc576123f66010546127fd565b6000600d555b6001600160a01b03851660009081526004602052604090205461241f90846124c9565b6001600160a01b038616600090815260046020526040812091909155826124465783612451565b6124518685846128de565b6001600160a01b038616600090815260046020526040902054909150612477908261209e565b6001600160a01b038087166000818152600460205260409081902093909355915190881690600080516020613828833981519152906124b99085815260200190565b60405180910390a3505050505050565b6000610abf82846136e7565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612527908490612ba4565b505050565b80600003612538575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612585576040519150601f19603f3d011682016040523d82523d6000602084013e61258a565b606091505b50509050806125275760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b604482015260640161089d565b6001600160a01b03831660009081526008602052604090205460ff16156126265760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161089d565b6001600160a01b03821660009081526008602052604090205460ff161561267c5760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161089d565b600081116126de5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161089d565b6001600160a01b0383166000908152600460205260409020548111156125275760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161089d565b60115460105430600090815260046020526040812054600f5491938510159211159060ff161580156127945750600c5460ff165b801561279d5750815b80156127ad5750600e54600d5410155b80156127b65750805b80156127f457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff19166001179055601554601354600091612827916002916108b89182908790612086565b9050600061283583836124c9565b90504761284182612c76565b600061284d47836124c9565b9050600061287361286a600260135461209290919063ffffffff16565b601554906124c9565b905084156128a2576128a28561289d60026108b8856108b86013548961208690919063ffffffff16565b612e36565b6018546012546128cc916001600160a01b0316906128c79084906108b8908790612086565b61252c565b5050600f805460ff1916905550505050565b600080600b60008460028111156128f7576128f76134eb565b6002811115612908576129086134eb565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526006909352908120549192509060ff1680156129755750600f54610100900460ff165b612983578160600151612990565b61299060646127106136e7565b9050806000036129a4578492505050610abf565b60006129b66127106108b88885612086565b905060006129d5836108b886602001518561208690919063ffffffff16565b905060006129f4846108b887600001518661208690919063ffffffff16565b90506000612a0682610b1686866124c9565b90508215612aab5761dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54612a45908461209e565b61dead600081905260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd919091556040516001600160a01b038c169060008051602061382883398151915290612aa29087815260200190565b60405180910390a35b8115612b24576017546001600160a01b0316600090815260046020526040902054612ad6908361209e565b601780546001600160a01b03908116600090815260046020908152604091829020949094559154915185815291811692908d1691600080516020613828833981519152910160405180910390a35b8015612b8c5730600090815260046020526040902054612b44908261209e565b30600081815260046020526040908190209290925590516001600160a01b038c169060008051602061382883398151915290612b839085815260200190565b60405180910390a35b612b9689856124c9565b9a9950505050505050505050565b6000612bf9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612f1c9092919063ffffffff16565b8051909150156125275780806020019051810190612c17919061374f565b6125275760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161089d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612cab57612cab6136fe565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4d91906136ca565b81600181518110612d6057612d606136fe565b60200260200101906001600160a01b031690816001600160a01b031681525050612dab307f000000000000000000000000000000000000000000000000000000000000000084611f6a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612e0090859060009086903090429060040161376c565b600060405180830381600087803b158015612e1a57600080fd5b505af1158015612e2e573d6000803e3d6000fd5b505050505050565b612e61307f000000000000000000000000000000000000000000000000000000000000000084611f6a565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f1591906137dd565b5050505050565b6060612f2b8484600085612f33565b949350505050565b606082471015612f945760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161089d565b600080866001600160a01b03168587604051612fb0919061380b565b60006040518083038185875af1925050503d8060008114612fed576040519150601f19603f3d011682016040523d82523d6000602084013e612ff2565b606091505b50915091506130038783838761300e565b979650505050505050565b6060831561307d578251600003613076576001600160a01b0385163b6130765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161089d565b5081612f2b565b612f2b83838151156130925781518083602001fd5b8060405162461bcd60e51b815260040161089d91906130d8565b60005b838110156130c75781810151838201526020016130af565b8381111561211e5750506000910152565b60208152600082518060208401526130f78160408501602087016130ac565b601f01601f19169190910160400192915050565b6001600160a01b038116811461312057600080fd5b50565b6000806040838503121561313657600080fd5b82356131418161310b565b946020939093013593505050565b80356003811061315e57600080fd5b919050565b6000806000806080858703121561317957600080fd5b6131828561314f565b966020860135965060408601359560600135945092505050565b6000806000606084860312156131b157600080fd5b83356131bc8161310b565b925060208401356131cc8161310b565b929592945050506040919091013590565b6000602082840312156131ef57600080fd5b8135610abf8161310b565b6000806000806080858703121561321057600080fd5b843561321b8161310b565b9350602085013561322b8161310b565b9250604085013561323b8161310b565b9150606085013561324b8161310b565b939692955090935050565b60006020828403121561326857600080fd5b610abf8261314f565b60008060006060848603121561328657600080fd5b83356132918161310b565b925060208401356132a18161310b565b915060408401356132b18161310b565b809150509250925092565b801515811461312057600080fd5b600080604083850312156132dd57600080fd5b82356132e88161310b565b915060208301356132f8816132bc565b809150509250929050565b60008060006060848603121561331857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561334457600080fd5b833561334f816132bc565b92506020840135915060408401356132b1816132bc565b60006020828403121561337857600080fd5b8135610abf816132bc565b60008083601f84011261339557600080fd5b50813567ffffffffffffffff8111156133ad57600080fd5b6020830191508360208260051b85010111156133c857600080fd5b9250929050565b600080600080604085870312156133e557600080fd5b843567ffffffffffffffff808211156133fd57600080fd5b61340988838901613383565b9096509450602087013591508082111561342257600080fd5b5061342f87828801613383565b95989497509550505050565b60006020828403121561344d57600080fd5b5035919050565b6000806000806080858703121561346a57600080fd5b8435613182816132bc565b6000806040838503121561348857600080fd5b82356134938161310b565b915060208301356132f88161310b565b600080604083850312156134b657600080fd5b50508035926020909101359150565b6020808252600c908201526b4e6f74206d756c746973696760a01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561355257816000190482111561353857613538613501565b8085161561354557918102915b93841c939080029061351c565b509250929050565b6000826135695750600161086d565b816135765750600061086d565b816001811461358c5760028114613596576135b2565b600191505061086d565b60ff8411156135a7576135a7613501565b50506001821b61086d565b5060208310610133831016604e8410600b84101617156135d5575081810a61086d565b6135df8383613517565b80600019048211156135f3576135f3613501565b029392505050565b6000610abf60ff84168361355a565b600081600019048311821515161561362457613624613501565b500290565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b60006020828403121561368657600080fd5b5051919050565b600082198211156136a0576136a0613501565b500190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6000602082840312156136dc57600080fd5b8151610abf8161310b565b6000828210156136f9576136f9613501565b500390565b634e487b7160e01b600052603260045260246000fd5b60006001820161372657613726613501565b5060010190565b60008261374a57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561376157600080fd5b8151610abf816132bc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137bc5784516001600160a01b031683529383019391830191600101613797565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137f257600080fd5b8351925060208401519150604084015190509250925092565b6000825161381d8184602087016130ac565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792dd7bcb4cf8e10e6d3112f3b3858d5a7b0ac95b1756a3f8f9c9681b8215aad64736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063706f693711610144578063b6a5d7de116100b6578063f319ae771161007a578063f319ae7714610788578063f3283fba146107a8578063f887ea40146107c8578063fac1b9bc146107fc578063fc5ea5e61461081c578063fe9fbb801461083c57600080fd5b8063b6a5d7de146106e8578063b9a45aac14610708578063dd62ed3e14610728578063f0b37c0414610748578063f2fde38b1461076857600080fd5b80638da5cb5b116101085780638da5cb5b146106345780638e5c3ad31461065457806395d89b411461026c578063a457c2d714610674578063a8aa1b3114610694578063a9059cbb146106c857600080fd5b8063706f69371461059357806370a08231146105b3578063715018a6146105e95780637d1db4a5146105fe57806382aa7c681461061457600080fd5b8063357c1354116101dd578063455a4396116101a1578063455a4396146104d25780634783c35b146104f25780634a5a863a1461052a578063569c9b331461054a5780636b7f8b901461055d5780636c0a24eb1461057d57600080fd5b8063357c1354146103d757806339264b661461043957806339509351146104595780633bbac5791461047957806340005fbe146104b257600080fd5b806323b872dd1161022457806323b872dd146103375780632b112e49146103575780632f54bf6e1461036c578063313ce5671461039b5780633385f9aa146103b757600080fd5b806306fdde031461026c578063095ea7b3146102ad5780630eefe44b146102dd57806317700f01146102ff57806318160ddd1461031457600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506040805180820182526009815268537175696447726f7760b81b602082015290516102a491906130d8565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004613123565b61085c565b60405190151581526020016102a4565b3480156102e957600080fd5b506102fd6102f8366004613163565b610873565b005b34801561030b57600080fd5b506102fd6109da565b34801561032057600080fd5b50610329610a7f565b6040519081526020016102a4565b34801561034357600080fd5b506102cd61035236600461319c565b610aa3565b34801561036357600080fd5b50610329610ac6565b34801561037857600080fd5b506102cd6103873660046131dd565b6000546001600160a01b0391821691161490565b3480156103a757600080fd5b50604051600981526020016102a4565b3480156103c357600080fd5b506102fd6103d23660046131fa565b610b1c565b3480156103e357600080fd5b506104196103f2366004613256565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016102a4565b34801561044557600080fd5b506102fd61045436600461319c565b610c75565b34801561046557600080fd5b506102cd610474366004613123565b610d72565b34801561048557600080fd5b506102cd6104943660046131dd565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104be57600080fd5b506102fd6104cd366004613271565b610d93565b3480156104de57600080fd5b506102fd6104ed3660046132ca565b610eaf565b3480156104fe57600080fd5b50601d54610512906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561053657600080fd5b506102fd610545366004613303565b610f68565b6102fd61055836600461332f565b610feb565b34801561056957600080fd5b506102fd610578366004613366565b61143c565b34801561058957600080fd5b5061032960035481565b34801561059f57600080fd5b506102fd6105ae3660046133cf565b6114d8565b3480156105bf57600080fd5b506103296105ce3660046131dd565b6001600160a01b031660009081526004602052604090205490565b3480156105f557600080fd5b506102fd6116e2565b34801561060a57600080fd5b5061032960025481565b34801561062057600080fd5b506102fd61062f36600461343b565b61174d565b34801561064057600080fd5b50600054610512906001600160a01b031681565b34801561066057600080fd5b506102fd61066f366004613454565b611809565b34801561068057600080fd5b506102cd61068f366004613123565b611895565b3480156106a057600080fd5b506105127f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b5781565b3480156106d457600080fd5b506102cd6106e3366004613123565b61190f565b3480156106f457600080fd5b506102fd6107033660046131dd565b61191c565b34801561071457600080fd5b506102fd6107233660046132ca565b611968565b34801561073457600080fd5b50610329610743366004613475565b611a21565b34801561075457600080fd5b506102fd6107633660046131dd565b611a4c565b34801561077457600080fd5b506102fd6107833660046131dd565b611a92565b34801561079457600080fd5b506102fd6107a33660046134a3565b611b49565b3480156107b457600080fd5b506102fd6107c33660046131dd565b611cea565b3480156107d457600080fd5b506105127f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561080857600080fd5b506102fd6108173660046132ca565b611d84565b34801561082857600080fd5b506102fd6108373660046134a3565b611e3d565b34801561084857600080fd5b506102cd6108573660046131dd565b611f4c565b6000610869338484611f6a565b5060015b92915050565b601d546001600160a01b031633146108a65760405162461bcd60e51b815260040161089d906134c5565b60405180910390fd5b6108be60146108b86127106003612086565b90612092565b6108d2826108cc868661209e565b9061209e565b11156109205760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e203135250000000000604482015260640161089d565b6000600b6000866002811115610938576109386134eb565b6002811115610949576109496134eb565b815260208101919091526040016000206001810185905583815560028101839055905061097a826108cc868661209e565b6003820155846002811115610991576109916134eb565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b601d546001600160a01b03163314610a045760405162461bcd60e51b815260040161089d906134c5565b60095460ff16610a4a5760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b604482015260640161089d565b6009805460ff191690556040517fbcb8b8fbdea8aa6dc4ae41213e4da81e605a3d1a56ed851b9355182321c0919090600090a1565b6000610a8d6009600a6135fb565b610a9e9066038d7ea4c6800061360a565b905090565b6000610ab08433846120aa565b610abb848484612124565b5060015b9392505050565b61dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54610a9e90610b056009600a6135fb565b610b169066038d7ea4c6800061360a565b906124c9565b610b2533611f4c565b610b415760405162461bcd60e51b815260040161089d90613629565b6001600160a01b038416610b675760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038316610b8d5760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038216610bb35760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038116610bd95760405162461bcd60e51b815260040161089d9061364e565b601980546001600160a01b038681166001600160a01b03199283168117909355601a80548783169084168117909155601b80548784169085168117909155601c805493871693909416831790935560408051948552602085019190915283019190915260608201527f5e236cea420126c8c121f351414cc8f3a268d3e366008a30deb36003636cb5f6906080015b60405180910390a150505050565b610c7e33611f4c565b610c9a5760405162461bcd60e51b815260040161089d90613629565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d059190613674565b90506000610d196127106108b88486612086565b9050610d2f6001600160a01b03861685836124d5565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b891016109cb565b6000610869338484610d843388611a21565b610d8e919061368d565b611f6a565b610d9c33611f4c565b610db85760405162461bcd60e51b815260040161089d90613629565b6001600160a01b038316610dde5760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038216610e045760405162461bcd60e51b815260040161089d9061364e565b6001600160a01b038116610e2a5760405162461bcd60e51b815260040161089d9061364e565b601880546001600160a01b038581166001600160a01b0319928316811790935560168054868316908416811790915560178054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c906060015b60405180910390a1505050565b610eb833611f4c565b610ed45760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610f145760405162461bcd60e51b815260040161089d906136a5565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610f7133611f4c565b610f8d5760405162461bcd60e51b815260040161089d90613629565b601483905560138290556012819055610faa816108cc858561209e565b60155560408051848152602081018490529081018290527fdb99cc69484cb3ee77f3036657c45f45b65191334cd61d9276977d3c9595ae3990606001610ea2565b601d546001600160a01b031633146110155760405162461bcd60e51b815260040161089d906134c5565b826111fb57806110675760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c0000000000604482015260640161089d565b3491507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec91906136ca565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561112657600080fd5b505af115801561113a573d6000803e3d6000fd5b50505050506111f67f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b57837f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e691906136ca565b6001600160a01b031691906124d5565b611385565b80156112c55733600090815260046020526040812080548492906112209084906136e7565b90915550506001600160a01b037f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b57166000908152600460205260408120805484929061126d90849061368d565b90915550506040518281527f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b576001600160a01b03169033906000805160206138288339815191529060200160405180910390a3611385565b6001600160a01b037f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b57166000908152600460205260408120805484929061130d9084906136e7565b9091555050336000908152600460205260408120805484929061133190849061368d565b909155505060405182815233906001600160a01b037f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b5716906000805160206138288339815191529060200160405180910390a35b7f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b576001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113e057600080fd5b505af11580156113f4573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161142f91815260200190565b60405180910390a3505050565b61144533611f4c565b6114615760405162461bcd60e51b815260040161089d90613629565b801515600f60019054906101000a900460ff161515036114935760405162461bcd60e51b815260040161089d906136a5565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b6114e133611f4c565b6114fd5760405162461bcd60e51b815260040161089d90613629565b8281811461154d5760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d617463686564000000000000000000604482015260640161089d565b6000805b8281101561167a5784848281811061156b5761156b6136fe565b9050602002013560046000898985818110611588576115886136fe565b905060200201602081019061159d91906131dd565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546115cc919061368d565b9091555085905084828181106115e4576115e46136fe565b90506020020135826115f6919061368d565b915086868281811061160a5761160a6136fe565b905060200201602081019061161f91906131dd565b6001600160a01b03163360008051602061382883398151915287878581811061164a5761164a6136fe565b9050602002013560405161166091815260200190565b60405180910390a38061167281613714565b915050611551565b50336000908152600460205260408120805483929061169a9084906136e7565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b6116eb33611f4c565b6117075760405162461bcd60e51b815260040161089d90613629565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b61175633611f4c565b6117725760405162461bcd60e51b815260040161089d90613629565b60095460ff16156117b85760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b604482015260640161089d565b6009805460ff19166001179055600a546000036117dd576117d9428261209e565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b61181233611f4c565b61182e5760405162461bcd60e51b815260040161089d90613629565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b6000806118a23385611a21565b9050828110156119025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161089d565b610abb3385858403611f6a565b6000610869338484612124565b61192533611f4c565b6119415760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61197133611f4c565b61198d5760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03821660009081526007602052604090205481151560ff9091161515036119cd5760405162461bcd60e51b815260040161089d906136a5565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611a5533611f4c565b611a715760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03166000908152600160205260409020805460ff19169055565b611a9b33611f4c565b611ab75760405162461bcd60e51b815260040161089d90613629565b6001600160a01b038116611add5760405162461bcd60e51b815260040161089d9061364e565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b611b5233611f4c565b611b6e5760405162461bcd60e51b815260040161089d90613629565b6001821015611bd25760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b606482015260840161089d565b6207a120811015611c355760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b606482015260840161089d565b60006298968083611c486009600a6135fb565b611c599066038d7ea4c6800061360a565b611c63919061360a565b611c6d919061372d565b905060006298968083611c826009600a6135fb565b611c939066038d7ea4c6800061360a565b611c9d919061360a565b611ca7919061372d565b6002839055600381905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c2299101610c67565b601d546001600160a01b03163314611d145760405162461bcd60e51b815260040161089d906134c5565b6001600160a01b038116611d3a5760405162461bcd60e51b815260040161089d9061364e565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f6d74d31357c421bb05a45b4becf09f03737979c1150bb0054704d1b4f31bb82a90600090a250565b611d8d33611f4c565b611da95760405162461bcd60e51b815260040161089d90613629565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611de95760405162461bcd60e51b815260040161089d906136a5565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b611e4633611f4c565b611e625760405162461bcd60e51b815260040161089d90613629565b476000611e73836108b88487612086565b90506000611e82826004612092565b601954909150611e9b906001600160a01b03168261252c565b601a54611eb1906001600160a01b03168261252c565b601b54611ec7906001600160a01b03168261252c565b601c54611edd906001600160a01b03168261252c565b601954601a54601b54601c54604080516001600160a01b0395861681529385166020850152918416838301529290921660608201526080810184905290517fa08f91be8aba9066a7bc396851b6d781cef0ae989dbcab9c649d4c6bceb3bee99181900360a00190a15050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611fcc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161089d565b6001600160a01b03821661202d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161089d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161142f565b6000610abf828461360a565b6000610abf828461372d565b6000610abf828461368d565b60006120b68484611a21565b9050600019811461211e57818110156121115760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161089d565b61211e8484848403611f6a565b50505050565b61212f8383836125d0565b6001600160a01b03831660009081526007602052604090205460019060ff168061217157506001600160a01b03831660009081526007602052604090205460ff165b1561217e575060006122d5565b60095460ff166121c45760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b604482015260640161089d565b6002548211156122275760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161089d565b7f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b576001600160a01b0316836001600160a01b0316146122d5576003546001600160a01b03841660009081526004602052604090205461228790849061368d565b11156122d55760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d69740000000000604482015260640161089d565b60007f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b576001600160a01b0316856001600160a01b03160361238657600090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b0316141580156123585750600a544211155b15612381576001600160a01b0384166000908152600660205260409020805460ff191660011790555b6123cb565b7f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b576001600160a01b0316846001600160a01b0316036123c7575060016123cb565b5060025b600d546123d990600161209e565b600d556123e68584612760565b156123fc576123f66010546127fd565b6000600d555b6001600160a01b03851660009081526004602052604090205461241f90846124c9565b6001600160a01b038616600090815260046020526040812091909155826124465783612451565b6124518685846128de565b6001600160a01b038616600090815260046020526040902054909150612477908261209e565b6001600160a01b038087166000818152600460205260409081902093909355915190881690600080516020613828833981519152906124b99085815260200190565b60405180910390a3505050505050565b6000610abf82846136e7565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612527908490612ba4565b505050565b80600003612538575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612585576040519150601f19603f3d011682016040523d82523d6000602084013e61258a565b606091505b50509050806125275760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b604482015260640161089d565b6001600160a01b03831660009081526008602052604090205460ff16156126265760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161089d565b6001600160a01b03821660009081526008602052604090205460ff161561267c5760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161089d565b600081116126de5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161089d565b6001600160a01b0383166000908152600460205260409020548111156125275760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161089d565b60115460105430600090815260046020526040812054600f5491938510159211159060ff161580156127945750600c5460ff165b801561279d5750815b80156127ad5750600e54600d5410155b80156127b65750805b80156127f457507f0000000000000000000000004fbf0043758e1e79238da9df6835bb4df8ac5b576001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff19166001179055601554601354600091612827916002916108b89182908790612086565b9050600061283583836124c9565b90504761284182612c76565b600061284d47836124c9565b9050600061287361286a600260135461209290919063ffffffff16565b601554906124c9565b905084156128a2576128a28561289d60026108b8856108b86013548961208690919063ffffffff16565b612e36565b6018546012546128cc916001600160a01b0316906128c79084906108b8908790612086565b61252c565b5050600f805460ff1916905550505050565b600080600b60008460028111156128f7576128f76134eb565b6002811115612908576129086134eb565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526006909352908120549192509060ff1680156129755750600f54610100900460ff165b612983578160600151612990565b61299060646127106136e7565b9050806000036129a4578492505050610abf565b60006129b66127106108b88885612086565b905060006129d5836108b886602001518561208690919063ffffffff16565b905060006129f4846108b887600001518661208690919063ffffffff16565b90506000612a0682610b1686866124c9565b90508215612aab5761dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54612a45908461209e565b61dead600081905260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd919091556040516001600160a01b038c169060008051602061382883398151915290612aa29087815260200190565b60405180910390a35b8115612b24576017546001600160a01b0316600090815260046020526040902054612ad6908361209e565b601780546001600160a01b03908116600090815260046020908152604091829020949094559154915185815291811692908d1691600080516020613828833981519152910160405180910390a35b8015612b8c5730600090815260046020526040902054612b44908261209e565b30600081815260046020526040908190209290925590516001600160a01b038c169060008051602061382883398151915290612b839085815260200190565b60405180910390a35b612b9689856124c9565b9a9950505050505050505050565b6000612bf9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612f1c9092919063ffffffff16565b8051909150156125275780806020019051810190612c17919061374f565b6125275760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161089d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612cab57612cab6136fe565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4d91906136ca565b81600181518110612d6057612d606136fe565b60200260200101906001600160a01b031690816001600160a01b031681525050612dab307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f6a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612e0090859060009086903090429060040161376c565b600060405180830381600087803b158015612e1a57600080fd5b505af1158015612e2e573d6000803e3d6000fd5b505050505050565b612e61307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f6a565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f1591906137dd565b5050505050565b6060612f2b8484600085612f33565b949350505050565b606082471015612f945760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161089d565b600080866001600160a01b03168587604051612fb0919061380b565b60006040518083038185875af1925050503d8060008114612fed576040519150601f19603f3d011682016040523d82523d6000602084013e612ff2565b606091505b50915091506130038783838761300e565b979650505050505050565b6060831561307d578251600003613076576001600160a01b0385163b6130765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161089d565b5081612f2b565b612f2b83838151156130925781518083602001fd5b8060405162461bcd60e51b815260040161089d91906130d8565b60005b838110156130c75781810151838201526020016130af565b8381111561211e5750506000910152565b60208152600082518060208401526130f78160408501602087016130ac565b601f01601f19169190910160400192915050565b6001600160a01b038116811461312057600080fd5b50565b6000806040838503121561313657600080fd5b82356131418161310b565b946020939093013593505050565b80356003811061315e57600080fd5b919050565b6000806000806080858703121561317957600080fd5b6131828561314f565b966020860135965060408601359560600135945092505050565b6000806000606084860312156131b157600080fd5b83356131bc8161310b565b925060208401356131cc8161310b565b929592945050506040919091013590565b6000602082840312156131ef57600080fd5b8135610abf8161310b565b6000806000806080858703121561321057600080fd5b843561321b8161310b565b9350602085013561322b8161310b565b9250604085013561323b8161310b565b9150606085013561324b8161310b565b939692955090935050565b60006020828403121561326857600080fd5b610abf8261314f565b60008060006060848603121561328657600080fd5b83356132918161310b565b925060208401356132a18161310b565b915060408401356132b18161310b565b809150509250925092565b801515811461312057600080fd5b600080604083850312156132dd57600080fd5b82356132e88161310b565b915060208301356132f8816132bc565b809150509250929050565b60008060006060848603121561331857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561334457600080fd5b833561334f816132bc565b92506020840135915060408401356132b1816132bc565b60006020828403121561337857600080fd5b8135610abf816132bc565b60008083601f84011261339557600080fd5b50813567ffffffffffffffff8111156133ad57600080fd5b6020830191508360208260051b85010111156133c857600080fd5b9250929050565b600080600080604085870312156133e557600080fd5b843567ffffffffffffffff808211156133fd57600080fd5b61340988838901613383565b9096509450602087013591508082111561342257600080fd5b5061342f87828801613383565b95989497509550505050565b60006020828403121561344d57600080fd5b5035919050565b6000806000806080858703121561346a57600080fd5b8435613182816132bc565b6000806040838503121561348857600080fd5b82356134938161310b565b915060208301356132f88161310b565b600080604083850312156134b657600080fd5b50508035926020909101359150565b6020808252600c908201526b4e6f74206d756c746973696760a01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561355257816000190482111561353857613538613501565b8085161561354557918102915b93841c939080029061351c565b509250929050565b6000826135695750600161086d565b816135765750600061086d565b816001811461358c5760028114613596576135b2565b600191505061086d565b60ff8411156135a7576135a7613501565b50506001821b61086d565b5060208310610133831016604e8410600b84101617156135d5575081810a61086d565b6135df8383613517565b80600019048211156135f3576135f3613501565b029392505050565b6000610abf60ff84168361355a565b600081600019048311821515161561362457613624613501565b500290565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b60006020828403121561368657600080fd5b5051919050565b600082198211156136a0576136a0613501565b500190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6000602082840312156136dc57600080fd5b8151610abf8161310b565b6000828210156136f9576136f9613501565b500390565b634e487b7160e01b600052603260045260246000fd5b60006001820161372657613726613501565b5060010190565b60008261374a57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561376157600080fd5b8151610abf816132bc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137bc5784516001600160a01b031683529383019391830191600101613797565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137f257600080fd5b8351925060208401519150604084015190509250925092565b6000825161381d8184602087016130ac565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792dd7bcb4cf8e10e6d3112f3b3858d5a7b0ac95b1756a3f8f9c9681b8215aad64736f6c634300080e0033

Deployed Bytecode Sourcemap

13796:20371:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18551:67;;;;;;;;;;-1:-1:-1;18611:5:0;;;;;;;;;;;-1:-1:-1;;;18611:5:0;;;;18551:67;;;;18611:5;18551:67;:::i;:::-;;;;;;;;19363:159;;;;;;;;;;-1:-1:-1;19363:159:0;;;;;:::i;:::-;;:::i;:::-;;;1286:14:1;;1279:22;1261:41;;1249:2;1234:18;19363:159:0;1121:187:1;28527:617:0;;;;;;;;;;-1:-1:-1;28527:617:0;;;;;:::i;:::-;;:::i;:::-;;20968:179;;;;;;;;;;;;;:::i;18774:84::-;;;;;;;;;;;;;:::i;:::-;;;2049:25:1;;;2037:2;2022:18;18774:84:0;1903:177:1;21600:249:0;;;;;;;;;;-1:-1:-1;21600:249:0;;;;;:::i;:::-;;:::i;19534:121::-;;;;;;;;;;;;;:::i;11985:103::-;;;;;;;;;;-1:-1:-1;11985:103:0;;;;;:::i;:::-;12040:4;12075:5;-1:-1:-1;;;;;12064:16:0;;;12075:5;;12064:16;;11985:103;18701:67;;;;;;;;;;-1:-1:-1;18701:67:0;;14044:1;2940:36:1;;2928:2;2913:18;18701:67:0;2798:184:1;29648:552:0;;;;;;;;;;-1:-1:-1;29648:552:0;;;;;:::i;:::-;;:::i;15007:44::-;;;;;;;;;;-1:-1:-1;15007:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4118:25:1;;;4174:2;4159:18;;4152:34;;;;4202:18;;;4195:34;4260:2;4245:18;;4238:34;4105:3;4090:19;15007:44:0;3887:391:1;27134:404:0;;;;;;;;;;-1:-1:-1;27134:404:0;;;;;:::i;:::-;;:::i;21857:209::-;;;;;;;;;;-1:-1:-1;21857:209:0;;;;;:::i;:::-;;:::i;19253:102::-;;;;;;;;;;-1:-1:-1;19253:102:0;;;;;:::i;:::-;-1:-1:-1;;;;;19331:16:0;19307:4;19331:16;;;:6;:16;;;;;;;;;19253:102;29152:488;;;;;;;;;;-1:-1:-1;29152:488:0;;;;;:::i;:::-;;:::i;19936:267::-;;;;;;;;;;-1:-1:-1;19936:267:0;;;;;:::i;:::-;;:::i;15712:77::-;;;;;;;;;;-1:-1:-1;15712:77:0;;;;-1:-1:-1;;;;;15712:77:0;;;;;;-1:-1:-1;;;;;5491:32:1;;;5473:51;;5461:2;5446:18;15712:77:0;5327:203:1;27546:348:0;;;;;;;;;;-1:-1:-1;27546:348:0;;;;;:::i;:::-;;:::i;33134:808::-;;;;;;:::i;:::-;;:::i;20440:206::-;;;;;;;;;;-1:-1:-1;20440:206:0;;;;;:::i;:::-;;:::i;14271:64::-;;;;;;;;;;;;;;;;32441:685;;;;;;;;;;-1:-1:-1;32441:685:0;;;;;:::i;:::-;;:::i;18864:103::-;;;;;;;;;;-1:-1:-1;18864:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;18947:18:0;18930:7;18947:18;;;:9;:18;;;;;;;18864:103;12448:128;;;;;;;;;;;;;:::i;14205:59::-;;;;;;;;;;;;;;;;20654:306;;;;;;;;;;-1:-1:-1;20654:306:0;;;;;:::i;:::-;;:::i;11362:20::-;;;;;;;;;;-1:-1:-1;11362:20:0;;;;-1:-1:-1;;;;;11362:20:0;;;21155:437;;;;;;;;;;-1:-1:-1;21155:437:0;;;;;:::i;:::-;;:::i;22074:407::-;;;;;;;;;;-1:-1:-1;22074:407:0;;;;;:::i;:::-;;:::i;14636:29::-;;;;;;;;;;;;;;;18973:139;;;;;;;;;;-1:-1:-1;18973:139:0;;;;;:::i;:::-;;:::i;11776:95::-;;;;;;;;;;-1:-1:-1;11776:95:0;;;;;:::i;:::-;;:::i;19663:265::-;;;;;;;;;;-1:-1:-1;19663:265:0;;;;;:::i;:::-;;:::i;19118:127::-;;;;;;;;;;-1:-1:-1;19118:127:0;;;;;:::i;:::-;;:::i;11879:98::-;;;;;;;;;;-1:-1:-1;11879:98:0;;;;;:::i;:::-;;:::i;12215:221::-;;;;;;;;;;-1:-1:-1;12215:221:0;;;;;:::i;:::-;;:::i;26578:548::-;;;;;;;;;;-1:-1:-1;26578:548:0;;;;;:::i;:::-;;:::i;33950:214::-;;;;;;;;;;-1:-1:-1;33950:214:0;;;;;:::i;:::-;;:::i;14598:31::-;;;;;;;;;;;;;;;20211:221;;;;;;;;;;-1:-1:-1;20211:221:0;;;;;:::i;:::-;;:::i;27902:617::-;;;;;;;;;;-1:-1:-1;27902:617:0;;;;;:::i;:::-;;:::i;12096:107::-;;;;;;;;;;-1:-1:-1;12096:107:0;;;;;:::i;:::-;;:::i;19363:159::-;19438:4;19455:37;19464:10;19476:7;19485:6;19455:8;:37::i;:::-;-1:-1:-1;19510:4:0;19363:159;;;;;:::o;28527:617::-;17381:8;;-1:-1:-1;;;;;17381:8:0;17367:10;:22;17359:47;;;;-1:-1:-1;;;17359:47:0;;;;;;;:::i;:::-;;;;;;;;;28740:29:::1;28766:2;28740:21;14768:5;28759:1;28740:18;:21::i;:::-;:25:::0;::::1;:29::i;:::-;28687:49;28717:18:::0;28687:25:::1;:8:::0;28700:11;28687:12:::1;:25::i;:::-;:29:::0;::::1;:49::i;:::-;:82;;28679:122;;;::::0;-1:-1:-1;;;28679:122:0;;10010:2:1;28679:122:0::1;::::0;::::1;9992:21:1::0;10049:2;10029:18;;;10022:30;10088:29;10068:18;;;10061:57;10135:18;;28679:122:0::1;9808:351:1::0;28679:122:0::1;28812:15;28830:4;:21;28835:15;28830:21;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;28830:21:0;28862:11:::1;::::0;::::1;:22:::0;;;28895:28;;;28934:13:::1;::::0;::::1;:34:::0;;;28830:21;-1:-1:-1;28994:49:0::1;28950:18:::0;28994:25:::1;28876:8:::0;28912:11;28994:12:::1;:25::i;:49::-;28979:12;::::0;::::1;:64:::0;29077:15;29065:71:::1;::::0;::::1;;;;;;:::i;:::-;;::::0;;10498:25:1;;;10554:2;10539:18;;10532:34;;;10582:18;;;10575:34;;;29065:71:0::1;::::0;10486:2:1;10471:18;29065:71:0::1;;;;;;;;28668:476;28527:617:::0;;;;:::o;20968:179::-;17381:8;;-1:-1:-1;;;;;17381:8:0;17367:10;:22;17359:47;;;;-1:-1:-1;;;17359:47:0;;;;;;;:::i;:::-;21035:14:::1;::::0;::::1;;21027:44;;;::::0;-1:-1:-1;;;21027:44:0;;10822:2:1;21027:44:0::1;::::0;::::1;10804:21:1::0;10861:2;10841:18;;;10834:30;-1:-1:-1;;;10880:18:1;;;10873:47;10937:18;;21027:44:0::1;10620:341:1::0;21027:44:0::1;21082:14;:22:::0;;-1:-1:-1;;21082:22:0::1;::::0;;21122:17:::1;::::0;::::1;::::0;21099:5:::1;::::0;21122:17:::1;20968:179::o:0;18774:84::-;18827:7;14107:15;14044:1;14107:2;:15;:::i;:::-;14092:31;;:11;:31;:::i;:::-;18837:19;;18774:84;:::o;21600:249::-;21723:4;21740:41;21756:4;21762:10;21774:6;21740:15;:41::i;:::-;21792:27;21802:4;21808:2;21812:6;21792:9;:27::i;:::-;-1:-1:-1;21837:4:0;21600:249;;;;;;:::o;19534:121::-;14156:42;19587:7;18947:18;;;:9;:18;;;;19614:33;;14107:15;14044:1;14107:2;:15;:::i;:::-;14092:31;;:11;:31;:::i;:::-;19614:16;;:33::i;29648:552::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29780:20:0;::::1;29772:45;;;;-1:-1:-1::0;;;29772:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29836:20:0;::::1;29828:45;;;;-1:-1:-1::0;;;29828:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29892:20:0;::::1;29884:45;;;;-1:-1:-1::0;;;29884:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29948:20:0;::::1;29940:45;;;;-1:-1:-1::0;;;29940:45:0::1;;;;;;;:::i;:::-;29996:14;:23:::0;;-1:-1:-1;;;;;29996:23:0;;::::1;-1:-1:-1::0;;;;;;29996:23:0;;::::1;::::0;::::1;::::0;;;30030:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;30064:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;30098:14:::1;:23:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;30139:53:::1;::::0;;13604:34:1;;;13669:2;13654:18;;13647:43;;;;13706:18;;13699:43;;;;13773:2;13758:18;;13751:43;30139:53:0::1;::::0;13553:3:1;13538:19;30139:53:0::1;;;;;;;;29648:552:::0;;;;:::o;27134:404::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;27272:39:::1;::::0;-1:-1:-1;;;27272:39:0;;27305:4:::1;27272:39;::::0;::::1;5473:51:1::0;27255:14:0::1;::::0;-1:-1:-1;;;;;27272:24:0;::::1;::::0;::::1;::::0;5446:18:1;;27272:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27255:56:::0;-1:-1:-1;27322:24:0::1;27349:34;27377:5;27349:23;27255:56:::0;27360:11;27349:10:::1;:23::i;:34::-;27322:61:::0;-1:-1:-1;27394:56:0::1;-1:-1:-1::0;;;;;27394:27:0;::::1;27422:9:::0;27322:61;27394:27:::1;:56::i;:::-;27468:62;::::0;;-1:-1:-1;;;;;14186:32:1;;;14168:51;;14250:2;14235:18;;14228:34;;;27468:62:0;::::1;::::0;::::1;::::0;14141:18:1;27468:62:0::1;13994:274:1::0;21857:209:0;21945:4;21962:74;21971:10;21983:7;22025:10;21992:30;22002:10;22014:7;21992:9;:30::i;:::-;:43;;;;:::i;:::-;21962:8;:74::i;29152:488::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29278:24:0;::::1;29270:49;;;;-1:-1:-1::0;;;29270:49:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29338:24:0;::::1;29330:49;;;;-1:-1:-1::0;;;29330:49:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29398:22:0;::::1;29390:47;;;;-1:-1:-1::0;;;29390:47:0::1;;;;;;;:::i;:::-;29448:18;:31:::0;;-1:-1:-1;;;;;29448:31:0;;::::1;-1:-1:-1::0;;;;;;29448:31:0;;::::1;::::0;::::1;::::0;;;29490:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;29532:16:::1;:27:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;29577:55:::1;::::0;;14646:34:1;;;14711:2;14696:18;;14689:43;;;;14748:18;;;14741:43;29577:55:0::1;::::0;14596:2:1;14581:18;29577:55:0::1;;;;;;;;29152:488:::0;;;:::o;19936:267::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20037:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:37;::::1;;:23;::::0;;::::1;:37;;::::0;20029:61:::1;;;;-1:-1:-1::0;;;20029:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20101:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:36;;-1:-1:-1;;20101:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20155:40;;20101:36;;:23;20155:40:::1;::::0;::::1;19936:267:::0;;:::o;27546:348::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;27656:12:::1;:20:::0;;;27687:17:::1;:30:::0;;;27728:17:::1;:30:::0;;;27785:37:::1;27748:10:::0;27785:21:::1;27671:5:::0;27707:10;27785:9:::1;:21::i;:37::-;27769:13;:53:::0;27840:46:::1;::::0;;10498:25:1;;;10554:2;10539:18;;10532:34;;;10582:18;;;10575:34;;;27840:46:0::1;::::0;10486:2:1;10471:18;27840:46:0::1;10296:319:1::0;33134:808:0;17381:8;;-1:-1:-1;;;;;17381:8:0;17367:10;:22;17359:47;;;;-1:-1:-1;;;17359:47:0;;;;;;;:::i;:::-;33239:5:::1;33235:620;;33269:3;33261:43;;;::::0;-1:-1:-1;;;33261:43:0;;15337:2:1;33261:43:0::1;::::0;::::1;15319:21:1::0;15376:2;15356:18;;;15349:30;15415:29;15395:18;;;15388:57;15462:18;;33261:43:0::1;15135:351:1::0;33261:43:0::1;33328:9;33319:18;;33358:6;-1:-1:-1::0;;;;;33358:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33352:28:0::1;;33388:6;33352:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;33412:48;33447:4;33453:6;33419;-1:-1:-1::0;;;;;33419:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33412:34:0::1;::::0;:48;:34:::1;:48::i;:::-;33235:620;;;33495:3;33492:352;;;33529:10;33519:21;::::0;;;:9:::1;:21;::::0;;;;:31;;33544:6;;33519:21;:31:::1;::::0;33544:6;;33519:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;33579:4:0::1;33569:15;;::::0;;;:9:::1;:15;::::0;;;;:25;;33588:6;;33569:15;:25:::1;::::0;33588:6;;33569:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;33618:34:0::1;::::0;2049:25:1;;;33639:4:0::1;-1:-1:-1::0;;;;;33618:34:0::1;::::0;33627:10:::1;::::0;-1:-1:-1;;;;;;;;;;;33618:34:0;2037:2:1;2022:18;33618:34:0::1;;;;;;;33492:352;;;-1:-1:-1::0;;;;;33705:4:0::1;33695:15;;::::0;;;:9:::1;:15;::::0;;;;:25;;33714:6;;33695:15;:25:::1;::::0;33714:6;;33695:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;33749:10:0::1;33739:21;::::0;;;:9:::1;:21;::::0;;;;:31;;33764:6;;33739:21;:31:::1;::::0;33764:6;;33739:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;33794:34:0::1;::::0;2049:25:1;;;33809:10:0::1;::::0;-1:-1:-1;;;;;33803:4:0::1;33794:34;::::0;-1:-1:-1;;;;;;;;;;;33794:34:0;2037:2:1;2022:18;33794:34:0::1;;;;;;;33492:352;33871:4;-1:-1:-1::0;;;;;33865:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33930:3;33899:35;;33915:5;33899:35;;;33922:6;33899:35;;;;2049:25:1::0;;2037:2;2022:18;;1903:177;33899:35:0::1;;;;;;;;33134:808:::0;;;:::o;20440:206::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;20534:7:::1;20516:25;;:14;;;;;;;;;;;:25;;::::0;20508:49:::1;;;;-1:-1:-1::0;;;20508:49:0::1;;;;;;;:::i;:::-;20568:14;:24:::0;;-1:-1:-1;;20568:24:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;20610:28:::1;::::0;::::1;::::0;-1:-1:-1;;20610:28:0::1;20440:206:::0;:::o;32441:685::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;32569:8;32604:24;;::::1;32595:61;;;::::0;-1:-1:-1;;;32595:61:0;;16079:2:1;32595:61:0::1;::::0;::::1;16061:21:1::0;16118:2;16098:18;;;16091:30;16157:25;16137:18;;;16130:53;16200:18;;32595:61:0::1;15877:347:1::0;32595:61:0::1;32667:21;32718:9:::0;32713:289:::1;32737:6;32733:1;:10;32713:289;;;32873:7;;32881:1;32873:10;;;;;;;:::i;:::-;;;;;;;32847:9;:22;32857:8;;32866:1;32857:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32847:22:0::1;-1:-1:-1::0;;;;;32847:22:0::1;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;32915:7:0;;-1:-1:-1;32915:7:0;32923:1;32915:10;;::::1;;;;;:::i;:::-;;;;;;;32898:27;;;;;:::i;:::-;;;32966:8;;32975:1;32966:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32945:45:0::1;32954:10;-1:-1:-1::0;;;;;;;;;;;32979:7:0;;32987:1;32979:10;;::::1;;;;;:::i;:::-;;;;;;;32945:45;;;;2049:25:1::0;;2037:2;2022:18;;1903:177;32945:45:0::1;;;;;;;;32745:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32713:289;;;-1:-1:-1::0;33022:10:0::1;33012:21;::::0;;;:9:::1;:21;::::0;;;;:38;;33037:13;;33012:21;:38:::1;::::0;33037:13;;33012:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;33068:50:0::1;::::0;;16675:25:1;;;16731:2;16716:18;;16709:34;;;33084:10:0::1;::::0;33068:50:::1;::::0;16648:18:1;33068:50:0::1;;;;;;;32541:585;;32441:685:::0;;;;:::o;12448:128::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;12513:32:::1;::::0;12542:1:::1;5473:51:1::0;;12513:32:0::1;::::0;5461:2:1;5446:18;12513:32:0::1;;;;;;;12572:1;12556:18:::0;;-1:-1:-1;;;;;;12556:18:0::1;::::0;;12448:128::o;20654:306::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;20733:14:::1;::::0;::::1;;20732:15;20724:44;;;::::0;-1:-1:-1;;;20724:44:0;;16956:2:1;20724:44:0::1;::::0;::::1;16938:21:1::0;16995:2;16975:18;;;16968:30;-1:-1:-1;;;17014:18:1;;;17007:46;17070:18;;20724:44:0::1;16754:340:1::0;20724:44:0::1;20779:14;:21:::0;;-1:-1:-1;;20779:21:0::1;20796:4;20779:21;::::0;;20814:11:::1;::::0;20779:14:::1;20814:16:::0;20811:99:::1;;20883:27;:15;20903:6:::0;20883:19:::1;:27::i;:::-;20869:11;:41:::0;20811:99:::1;20936:16;::::0;::::1;::::0;;;::::1;20654:306:::0;:::o;21155:437::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;21308:21:::1;:32:::0;;-1:-1:-1;;21308:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21352:13:::1;:26:::0;;;21389:15:::1;:27:::0;;;21427:25:::1;:54:::0;;;21499:85:::1;::::0;;10498:25:1;;;10554:2;10539:18;;10532:34;;;10582:18;;;10575:34;;;21499:85:0::1;::::0;10486:2:1;10471:18;21499:85:0::1;;;;;;;21155:437:::0;;;;:::o;22074:407::-;22167:4;22184:24;22211:30;22221:10;22233:7;22211:9;:30::i;:::-;22184:57;;22280:15;22260:16;:35;;22252:85;;;;-1:-1:-1;;;22252:85:0;;17301:2:1;22252:85:0;;;17283:21:1;17340:2;17320:18;;;17313:30;17379:34;17359:18;;;17352:62;-1:-1:-1;;;17430:18:1;;;17423:35;17475:19;;22252:85:0;17099:401:1;22252:85:0;22373:65;22382:10;22394:7;22422:15;22403:16;:34;22373:8;:65::i;18973:139::-;19051:4;19058:40;19068:10;19080:9;19091:6;19058:9;:40::i;11776:95::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11837:19:0::1;;::::0;;;11859:4:::1;11837:19;::::0;;;;;;;:26;;-1:-1:-1;;11837:26:0::1;::::0;;::::1;::::0;;11776:95::o;19663:265::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19764:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:37;::::1;;:23;::::0;;::::1;:37;;::::0;19756:61:::1;;;;-1:-1:-1::0;;;19756:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19828:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:36;;-1:-1:-1;;19828:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19882:38;;19828:36;;:23;19882:38:::1;::::0;::::1;19663:265:::0;;:::o;19118:127::-;-1:-1:-1;;;;;19216:18:0;;;19199:7;19216:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19118:127::o;11879:98::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11942:19:0::1;11964:5;11942:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;11942:27:0::1;::::0;;11879:98::o;12215:221::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12300:17:0;::::1;12292:42;;;;-1:-1:-1::0;;;12292:42:0::1;;;;;;;:::i;:::-;12345:5;:11:::0;;-1:-1:-1;;;;;;12345:11:0::1;-1:-1:-1::0;;;;;12345:11:0;::::1;::::0;;::::1;::::0;;12367:19;;;-1:-1:-1;12367:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;12367:26:0::1;::::0;;::::1;::::0;;;12409:25;;5473:51:1;;;12409:25:0::1;::::0;5446:18:1;12409:25:0::1;;;;;;;12215:221:::0;:::o;26578:548::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;26697:1:::1;26681:12;:17;;26673:72;;;::::0;-1:-1:-1;;;26673:72:0;;17923:2:1;26673:72:0::1;::::0;::::1;17905:21:1::0;17962:2;17942:18;;;17935:30;18001:34;17981:18;;;17974:62;-1:-1:-1;;;18052:18:1;;;18045:40;18102:19;;26673:72:0::1;17721:406:1::0;26673:72:0::1;26775:6;26764:7;:17;;26756:69;;;::::0;-1:-1:-1;;;26756:69:0;;18334:2:1;26756:69:0::1;::::0;::::1;18316:21:1::0;18373:2;18353:18;;;18346:30;18412:34;18392:18;;;18385:62;-1:-1:-1;;;18463:18:1;;;18456:37;18510:19;;26756:69:0::1;18132:403:1::0;26756:69:0::1;26836:18;26891:8;26874:12:::0;14107:15:::1;14044:1;14107:2;:15;:::i;:::-;14092:31;::::0;:11:::1;:31;:::i;:::-;26859:27;;;;:::i;:::-;26857:42;;;;:::i;:::-;26836:63:::0;-1:-1:-1;26910:22:0::1;26964:8;26952:7:::0;14107:15:::1;14044:1;14107:2;:15;:::i;:::-;14092:31;::::0;:11:::1;:31;:::i;:::-;26937:22;;;;:::i;:::-;26935:37;;;;:::i;:::-;26983:12;:25:::0;;;27019:16:::1;:33:::0;;;27070:48:::1;::::0;;16675:25:1;;;16731:2;16716:18;;16709:34;;;27019:33:0;;-1:-1:-1;27070:48:0::1;::::0;16648:18:1;27070:48:0::1;16501:248:1::0;33950:214:0;17381:8;;-1:-1:-1;;;;;17381:8:0;17367:10;:22;17359:47;;;;-1:-1:-1;;;17359:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34034:26:0;::::1;34026:51;;;;-1:-1:-1::0;;;34026:51:0::1;;;;;;;:::i;:::-;34088:8;:23:::0;;-1:-1:-1;;;;;;34088:23:0::1;-1:-1:-1::0;;;;;34088:23:0;::::1;::::0;;::::1;::::0;;;34127:29:::1;::::0;::::1;::::0;-1:-1:-1;;34127:29:0::1;33950:214:::0;:::o;20211:221::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20300:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:26;::::1;;:16;::::0;;::::1;:26;;::::0;20292:50:::1;;;;-1:-1:-1::0;;;20292:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20353:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:25;;-1:-1:-1;;20353:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20396:28;;20353:25;;:16;20396:28:::1;::::0;::::1;20211:221:::0;;:::o;27902:617::-;11704:24;11717:10;11704:12;:24::i;:::-;11696:48;;;;-1:-1:-1;;;11696:48:0;;;;;;;:::i;:::-;28024:21:::1;28004:17;28083:43;28113:12:::0;28083:25:::1;28024:21:::0;28097:10;28083:13:::1;:25::i;:43::-;28056:70:::0;-1:-1:-1;28137:20:0::1;28160:23;28056:70:::0;28181:1:::1;28160:20;:23::i;:::-;28206:14;::::0;28137:46;;-1:-1:-1;28194:41:0::1;::::0;-1:-1:-1;;;;;28206:14:0::1;28137:46:::0;28194:11:::1;:41::i;:::-;28258:14;::::0;28246:41:::1;::::0;-1:-1:-1;;;;;28258:14:0::1;28274:12:::0;28246:11:::1;:41::i;:::-;28310:14;::::0;28298:41:::1;::::0;-1:-1:-1;;;;;28310:14:0::1;28326:12:::0;28298:11:::1;:41::i;:::-;28362:14;::::0;28350:41:::1;::::0;-1:-1:-1;;;;;28362:14:0::1;28378:12:::0;28350:11:::1;:41::i;:::-;28430:14;::::0;28446::::1;::::0;28462::::1;::::0;28478::::1;::::0;28409:102:::1;::::0;;-1:-1:-1;;;;;28430:14:0;;::::1;19059:34:1::0;;28446:14:0;;::::1;19124:2:1::0;19109:18;;19102:43;28462:14:0;;::::1;19161:18:1::0;;;19154:43;28478:14:0;;;::::1;19228:2:1::0;19213:18;;19206:43;19280:3;19265:19;;19258:35;;;28409:102:0;;::::1;::::0;;;;19008:3:1;28409:102:0;;::::1;27993:526;;;27902:617:::0;;:::o;12096:107::-;-1:-1:-1;;;;;12176:19:0;12152:4;12176:19;;;:14;:19;;;;;;;;;12096:107::o;22489:372::-;-1:-1:-1;;;;;22617:19:0;;22609:68;;;;-1:-1:-1;;;22609:68:0;;19506:2:1;22609:68:0;;;19488:21:1;19545:2;19525:18;;;19518:30;19584:34;19564:18;;;19557:62;-1:-1:-1;;;19635:18:1;;;19628:34;19679:19;;22609:68:0;19304:400:1;22609:68:0;-1:-1:-1;;;;;22696:21:0;;22688:68;;;;-1:-1:-1;;;22688:68:0;;19911:2:1;22688:68:0;;;19893:21:1;19950:2;19930:18;;;19923:30;19989:34;19969:18;;;19962:62;-1:-1:-1;;;20040:18:1;;;20033:32;20082:19;;22688:68:0;19709:398:1;22688:68:0;-1:-1:-1;;;;;22769:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22821:32;;2049:25:1;;;22821:32:0;;2022:18:1;22821:32:0;1903:177:1;1695:98:0;1753:7;1780:5;1784:1;1780;:5;:::i;1801:98::-;1859:7;1886:5;1890:1;1886;:5;:::i;1483:98::-;1541:7;1568:5;1572:1;1568;:5;:::i;22869:453::-;23004:24;23031:25;23041:5;23048:7;23031:9;:25::i;:::-;23004:52;;-1:-1:-1;;23071:16:0;:37;23067:248;;23153:6;23133:16;:26;;23125:68;;;;-1:-1:-1;;;23125:68:0;;20314:2:1;23125:68:0;;;20296:21:1;20353:2;20333:18;;;20326:30;20392:31;20372:18;;;20365:59;20441:18;;23125:68:0;20112:353:1;23125:68:0;23237:51;23246:5;23253:7;23281:6;23262:16;:25;23237:8;:51::i;:::-;22993:329;22869:453;;;:::o;23330:1517::-;23419:37;23430:6;23438:9;23449:6;23419:10;:37::i;:::-;-1:-1:-1;;;;;23503:21:0;;23469:12;23503:21;;;:13;:21;;;;;;23484:4;;23503:21;;;:49;;-1:-1:-1;;;;;;23528:24:0;;;;;;:13;:24;;;;;;;;23503:49;23499:429;;;-1:-1:-1;23579:5:0;23499:429;;;23627:14;;;;23619:44;;;;-1:-1:-1;;;23619:44:0;;20672:2:1;23619:44:0;;;20654:21:1;20711:2;20691:18;;;20684:30;-1:-1:-1;;;20730:18:1;;;20723:47;20787:18;;23619:44:0;20470:341:1;23619:44:0;23696:12;;23686:6;:22;;23678:75;;;;-1:-1:-1;;;23678:75:0;;21018:2:1;23678:75:0;;;21000:21:1;21057:2;21037:18;;;21030:30;21096:34;21076:18;;;21069:62;-1:-1:-1;;;21147:18:1;;;21140:38;21195:19;;23678:75:0;20816:404:1;23678:75:0;23785:4;-1:-1:-1;;;;;23772:17:0;:9;-1:-1:-1;;;;;23772:17:0;;23768:147;;23851:16;;-1:-1:-1;;;;;23818:20:0;;;;;;:9;:20;;;;;;:29;;23841:6;;23818:29;:::i;:::-;:49;;23810:89;;;;-1:-1:-1;;;23810:89:0;;21427:2:1;23810:89:0;;;21409:21:1;21466:2;21446:18;;;21439:30;21505:29;21485:18;;;21478:57;21552:18;;23810:89:0;21225:351:1;23810:89:0;23940:31;23997:4;-1:-1:-1;;;;;23987:14:0;:6;-1:-1:-1;;;;;23987:14:0;;23984:392;;24036:19;24018:37;;24094:6;-1:-1:-1;;;;;24073:28:0;:9;-1:-1:-1;;;;;24073:28:0;;;:62;;;;;24124:11;;24105:15;:30;;24073:62;24070:126;;;-1:-1:-1;;;;;24156:17:0;;;;;;:6;:17;;;;;:24;;-1:-1:-1;;24156:24:0;24176:4;24156:24;;;24070:126;23984:392;;;24230:4;-1:-1:-1;;;;;24217:17:0;:9;-1:-1:-1;;;;;24217:17:0;;24213:163;;-1:-1:-1;24269:20:0;24213:163;;;-1:-1:-1;24340:24:0;24213:163;24400:9;;:16;;24414:1;24400:13;:16::i;:::-;24388:9;:28;24430:30;24445:6;24453;24430:14;:30::i;:::-;24427:118;;;24476:29;24491:13;;24476:14;:29::i;:::-;24532:1;24520:9;:13;24427:118;-1:-1:-1;;;;;24577:17:0;;;;;;:9;:17;;;;;;:29;;24599:6;24577:21;:29::i;:::-;-1:-1:-1;;;;;24557:17:0;;;;;;:9;:17;;;;;:49;;;;24642:7;:64;;24700:6;24642:64;;;24652:45;24665:6;24673;24681:15;24652:12;:45::i;:::-;-1:-1:-1;;;;;24740:20:0;;;;;;:9;:20;;;;;;24617:89;;-1:-1:-1;24740:40:0;;24617:89;24740:24;:40::i;:::-;-1:-1:-1;;;;;24717:20:0;;;;;;;:9;:20;;;;;;;:63;;;;24796:43;;;;;;-1:-1:-1;;;;;;;;;;;24796:43:0;;;24824:14;2049:25:1;;2037:2;2022:18;;1903:177;24796:43:0;;;;;;;;23408:1439;;;23330:1517;;;:::o;1589:98::-;1647:7;1674:5;1678:1;1674;:5;:::i;8188:211::-;8332:58;;;-1:-1:-1;;;;;14186:32:1;;8332:58:0;;;14168:51:1;14235:18;;;;14228:34;;;8332:58:0;;;;;;;;;;14141:18:1;;;;8332:58:0;;;;;;;;-1:-1:-1;;;;;8332:58:0;-1:-1:-1;;;8332:58:0;;;8305:86;;8325:5;;8305:19;:86::i;:::-;8188:211;;;:::o;32207:226::-;32285:6;32295:1;32285:11;32282:23;;32207:226;;:::o;32282:23::-;32316:12;32342:9;-1:-1:-1;;;;;32334:23:0;32365:6;32334:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32315:61;;;32395:7;32387:38;;;;-1:-1:-1;;;32387:38:0;;21993:2:1;32387:38:0;;;21975:21:1;22032:2;22012:18;;;22005:30;-1:-1:-1;;;22051:18:1;;;22044:48;22109:18;;32387:38:0;21791:342:1;24855:382:0;-1:-1:-1;;;;;24960:21:0;;;;;;:13;:21;;;;;;;;24959:22;24951:45;;;;-1:-1:-1;;;24951:45:0;;22340:2:1;24951:45:0;;;22322:21:1;22379:2;22359:18;;;22352:30;-1:-1:-1;;;22398:18:1;;;22391:40;22448:18;;24951:45:0;22138:334:1;24951:45:0;-1:-1:-1;;;;;25016:24:0;;;;;;:13;:24;;;;;;;;25015:25;25007:48;;;;-1:-1:-1;;;25007:48:0;;22340:2:1;25007:48:0;;;22322:21:1;22379:2;22359:18;;;22352:30;-1:-1:-1;;;22398:18:1;;;22391:40;22448:18;;25007:48:0;22138:334:1;25007:48:0;25083:1;25074:6;:10;25066:64;;;;-1:-1:-1;;;25066:64:0;;22679:2:1;25066:64:0;;;22661:21:1;22718:2;22698:18;;;22691:30;22757:34;22737:18;;;22730:62;-1:-1:-1;;;22808:18:1;;;22801:39;22857:19;;25066:64:0;22477:405:1;25066:64:0;-1:-1:-1;;;;;18947:18:0;;18930:7;18947:18;;;:9;:18;;;;;;25149:6;:27;;25141:88;;;;-1:-1:-1;;;25141:88:0;;23089:2:1;25141:88:0;;;23071:21:1;23128:2;23108:18;;;23101:30;23167:34;23147:18;;;23140:62;-1:-1:-1;;;23218:18:1;;;23211:47;23275:19;;25141:88:0;22887:413:1;30208:376:0;30330:15;;30406:13;;30396:4;30287;18947:18;;;:9;:18;;;;;;30438:8;;30287:4;;30320:25;;;;-1:-1:-1;30378:41:0;;30438:8;;30437:9;:34;;;;-1:-1:-1;30450:21:0;;;;30437:34;:46;;;;;30475:8;30437:46;:103;;;;;30515:25;;30502:9;;:38;;30437:103;:121;;;;;30544:14;30437:121;:139;;;;;30572:4;-1:-1:-1;;;;;30562:14:0;:6;-1:-1:-1;;;;;30562:14:0;;;30437:139;30430:146;30208:376;-1:-1:-1;;;;;30208:376:0:o;30592:814::-;17255:8;:15;;-1:-1:-1;;17255:15:0;17266:4;17255:15;;;30723:13:::1;::::0;30700:17:::1;::::0;17255:8;;30689:55:::1;::::0;30742:1:::1;::::0;30689:48:::1;::::0;;;:6;;:10:::1;:29::i;:55::-;30663:81:::0;-1:-1:-1;30755:20:0::1;30778:27;:6:::0;30663:81;30778:10:::1;:27::i;:::-;30755:50:::0;-1:-1:-1;30843:21:0::1;30875:30;30755:50:::0;30875:16:::1;:30::i;:::-;30918:20;30941:41;:21;30967:14:::0;30941:25:::1;:41::i;:::-;30918:64;;30993:19;31015:43;31033:24;31055:1;31033:17;;:21;;:24;;;;:::i;:::-;31015:13;::::0;;:17:::1;:43::i;:::-;30993:65:::0;-1:-1:-1;31074:19:0;;31071:141:::1;;31109:90;31122:15;31139:59;31196:1;31139:52;31179:11;31139:35;31156:17;;31139:12;:16;;:35;;;;:::i;:59::-;31109:12;:90::i;:::-;31325:18;::::0;31362:17:::1;::::0;31313:85:::1;::::0;-1:-1:-1;;;;;31325:18:0::1;::::0;31345:52:::1;::::0;31385:11;;31345:35:::1;::::0;:12;;:16:::1;:35::i;:52::-;31313:11;:85::i;:::-;-1:-1:-1::0;;17294:8:0;:16;;-1:-1:-1;;17294:16:0;;;-1:-1:-1;;;;30592:814:0:o;25245:1325::-;25350:7;25370:14;25387:4;:21;25392:15;25387:21;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;25387:21:0;;;25370:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25439:14:0;;;;:6;:14;;;;;;;25370:38;;-1:-1:-1;;25439:14:0;;:32;;;;-1:-1:-1;25457:14:0;;;;;;;25439:32;:71;;25498:3;:12;;;25439:71;;;25474:20;25491:3;14768:5;25474:20;:::i;:::-;25419:91;;25544:9;25557:1;25544:14;25540:60;;25582:6;25575:13;;;;;;25540:60;25610:17;25630:43;14768:5;25631:21;:6;25642:9;25631:10;:21::i;25630:43::-;25610:63;;25684:18;25705:43;25738:9;25706:26;25720:3;:11;;;25706:9;:13;;:26;;;;:::i;25705:43::-;25684:64;;25759:21;25783:46;25819:9;25784:29;25798:3;:14;;;25784:9;:13;;:29;;;;:::i;25783:46::-;25759:70;-1:-1:-1;25842:20:0;25865:44;25759:70;25865:25;:9;25879:10;25865:13;:25::i;:44::-;25842:67;-1:-1:-1;25925:14:0;;25922:176;;14156:42;25983:24;;:9;:24;;;;:40;;26012:10;25983:28;:40::i;:::-;14156:42;25956:24;;;;:9;:24;;;:67;;;;:24;26043:43;-1:-1:-1;;;;;26043:43:0;;;-1:-1:-1;;;;;;;;;;;26043:43:0;;;26075:10;2049:25:1;;2037:2;2022:18;;1903:177;26043:43:0;;;;;;;;25922:176;26111:17;;26108:221;;26202:16;;-1:-1:-1;;;;;26202:16:0;26184:36;;;;:9;:36;;;;;;:55;;26225:13;26184:40;:55::i;:::-;26163:16;;;-1:-1:-1;;;;;26163:16:0;;;26145:36;;;;:9;:36;;;;;;;;;:94;;;;26284:16;;26259:58;;2049:25:1;;;26284:16:0;;;;26259:58;;;;-1:-1:-1;;;;;;;;;;;26259:58:0;2022:18:1;26259:58:0;;;;;;;26108:221;26342:16;;26339:182;;26420:4;26402:24;;;;:9;:24;;;;;;:42;;26431:12;26402:28;:42::i;:::-;26393:4;26375:24;;;;:9;:24;;;;;;;:69;;;;26464:45;;-1:-1:-1;;;;;26464:45:0;;;-1:-1:-1;;;;;;;;;;;26464:45:0;;;26496:12;2049:25:1;;2037:2;2022:18;;1903:177;26464:45:0;;;;;;;;26339:182;26539:21;:6;26550:9;26539:10;:21::i;:::-;26532:28;25245:1325;-1:-1:-1;;;;;;;;;;25245:1325:0:o;10611:716::-;11035:23;11061:69;11089:4;11061:69;;;;;;;;;;;;;;;;;11069:5;-1:-1:-1;;;;;11061:27:0;;;:69;;;;;:::i;:::-;11145:17;;11035:95;;-1:-1:-1;11145:21:0;11141:179;;11242:10;11231:30;;;;;;;;;;;;:::i;:::-;11223:85;;;;-1:-1:-1;;;11223:85:0;;23757:2:1;11223:85:0;;;23739:21:1;23796:2;23776:18;;;23769:30;23835:34;23815:18;;;23808:62;-1:-1:-1;;;23886:18:1;;;23879:40;23936:19;;11223:85:0;23555:406:1;31765:434:0;31855:16;;;31869:1;31855:16;;;;;;;;31831:21;;31855:16;;;;;;;;;;-1:-1:-1;31855:16:0;31831:40;;31900:4;31882;31887:1;31882:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31882:23:0;;;-1:-1:-1;;;;;31882:23:0;;;;;31926:6;-1:-1:-1;;;;;31926:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31916:4;31921:1;31916:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31916:23:0;;;-1:-1:-1;;;;;31916:23:0;;;;;31950:53;31967:4;31982:6;31991:11;31950:8;:53::i;:::-;32014:177;;-1:-1:-1;;;32014:177:0;;-1:-1:-1;;;;;32014:6:0;:57;;;;:177;;32086:11;;32112:1;;32128:4;;32155;;32175:15;;32014:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31820:379;31765:434;:::o;31414:343::-;31495:53;31512:4;31527:6;31536:11;31495:8;:53::i;:::-;31700:18;;31559:190;;-1:-1:-1;;;31559:190:0;;31622:4;31559:190;;;25424:34:1;25474:18;;;25467:34;;;31668:1:0;25517:18:1;;;25510:34;;;25560:18;;;25553:34;-1:-1:-1;;;;;31700:18:0;;;25603:19:1;;;25596:44;31733:15:0;25656:19:1;;;25649:35;31559:6:0;:22;;;;;;31589:9;;25358:19:1;;31559:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31414:343;;:::o;4122:229::-;4259:12;4291:52;4313:6;4321:4;4327:1;4330:12;4291:21;:52::i;:::-;4284:59;4122:229;-1:-1:-1;;;;4122:229:0:o;4627:455::-;4797:12;4855:5;4830:21;:30;;4822:81;;;;-1:-1:-1;;;4822:81:0;;26208:2:1;4822:81:0;;;26190:21:1;26247:2;26227:18;;;26220:30;26286:34;26266:18;;;26259:62;-1:-1:-1;;;26337:18:1;;;26330:36;26383:19;;4822:81:0;26006:402:1;4822:81:0;4915:12;4929:23;4956:6;-1:-1:-1;;;;;4956:11:0;4975:5;4982:4;4956:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4914:73;;;;5005:69;5032:6;5040:7;5049:10;5061:12;5005:26;:69::i;:::-;4998:76;4627:455;-1:-1:-1;;;;;;;4627:455:0:o;6186:644::-;6371:12;6400:7;6396:427;;;6428:10;:17;6449:1;6428:22;6424:290;;-1:-1:-1;;;;;3563:19:0;;;6638:60;;;;-1:-1:-1;;;6638:60:0;;26894:2:1;6638:60:0;;;26876:21:1;26933:2;26913:18;;;26906:30;26972:31;26952:18;;;26945:59;27021:18;;6638:60:0;26692:353:1;6638:60:0;-1:-1:-1;6735:10:0;6728:17;;6396:427;6778:33;6786:10;6798:12;7312:17;;:21;7308:388;;7544:10;7538:17;7601:15;7588:10;7584:2;7580:19;7573:44;7308:388;7671:12;7664:20;;-1:-1:-1;;;7664:20:0;;;;;;;;:::i;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:383::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;644:2;623:15;-1:-1:-1;;619:29:1;604:45;;;;651:2;600:54;;277:383;-1:-1:-1;;277:383:1:o;665:131::-;-1:-1:-1;;;;;740:31:1;;730:42;;720:70;;786:1;783;776:12;720:70;665:131;:::o;801:315::-;869:6;877;930:2;918:9;909:7;905:23;901:32;898:52;;;946:1;943;936:12;898:52;985:9;972:23;1004:31;1029:5;1004:31;:::i;:::-;1054:5;1106:2;1091:18;;;;1078:32;;-1:-1:-1;;;801:315:1:o;1313:156::-;1394:20;;1443:1;1433:12;;1423:40;;1459:1;1456;1449:12;1423:40;1313:156;;;:::o;1474:424::-;1580:6;1588;1596;1604;1657:3;1645:9;1636:7;1632:23;1628:33;1625:53;;;1674:1;1671;1664:12;1625:53;1697:42;1729:9;1697:42;:::i;:::-;1687:52;1786:2;1771:18;;1758:32;;-1:-1:-1;1837:2:1;1822:18;;1809:32;;1888:2;1873:18;1860:32;;-1:-1:-1;1474:424:1;-1:-1:-1;;;1474:424:1:o;2085:456::-;2162:6;2170;2178;2231:2;2219:9;2210:7;2206:23;2202:32;2199:52;;;2247:1;2244;2237:12;2199:52;2286:9;2273:23;2305:31;2330:5;2305:31;:::i;:::-;2355:5;-1:-1:-1;2412:2:1;2397:18;;2384:32;2425:33;2384:32;2425:33;:::i;:::-;2085:456;;2477:7;;-1:-1:-1;;;2531:2:1;2516:18;;;;2503:32;;2085:456::o;2546:247::-;2605:6;2658:2;2646:9;2637:7;2633:23;2629:32;2626:52;;;2674:1;2671;2664:12;2626:52;2713:9;2700:23;2732:31;2757:5;2732:31;:::i;2987:671::-;3073:6;3081;3089;3097;3150:3;3138:9;3129:7;3125:23;3121:33;3118:53;;;3167:1;3164;3157:12;3118:53;3206:9;3193:23;3225:31;3250:5;3225:31;:::i;:::-;3275:5;-1:-1:-1;3332:2:1;3317:18;;3304:32;3345:33;3304:32;3345:33;:::i;:::-;3397:7;-1:-1:-1;3456:2:1;3441:18;;3428:32;3469:33;3428:32;3469:33;:::i;:::-;3521:7;-1:-1:-1;3580:2:1;3565:18;;3552:32;3593:33;3552:32;3593:33;:::i;:::-;2987:671;;;;-1:-1:-1;2987:671:1;;-1:-1:-1;;2987:671:1:o;3663:219::-;3742:6;3795:2;3783:9;3774:7;3770:23;3766:32;3763:52;;;3811:1;3808;3801:12;3763:52;3834:42;3866:9;3834:42;:::i;4283:529::-;4360:6;4368;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:33;4582:32;4623:33;:::i;:::-;4675:7;-1:-1:-1;4734:2:1;4719:18;;4706:32;4747:33;4706:32;4747:33;:::i;:::-;4799:7;4789:17;;;4283:529;;;;;:::o;4817:118::-;4903:5;4896:13;4889:21;4882:5;4879:32;4869:60;;4925:1;4922;4915:12;4940:382;5005:6;5013;5066:2;5054:9;5045:7;5041:23;5037:32;5034:52;;;5082:1;5079;5072:12;5034:52;5121:9;5108:23;5140:31;5165:5;5140:31;:::i;:::-;5190:5;-1:-1:-1;5247:2:1;5232:18;;5219:32;5260:30;5219:32;5260:30;:::i;:::-;5309:7;5299:17;;;4940:382;;;;;:::o;5535:316::-;5612:6;5620;5628;5681:2;5669:9;5660:7;5656:23;5652:32;5649:52;;;5697:1;5694;5687:12;5649:52;-1:-1:-1;;5720:23:1;;;5790:2;5775:18;;5762:32;;-1:-1:-1;5841:2:1;5826:18;;;5813:32;;5535:316;-1:-1:-1;5535:316:1:o;5856:444::-;5927:6;5935;5943;5996:2;5984:9;5975:7;5971:23;5967:32;5964:52;;;6012:1;6009;6002:12;5964:52;6051:9;6038:23;6070:28;6092:5;6070:28;:::i;:::-;6117:5;-1:-1:-1;6169:2:1;6154:18;;6141:32;;-1:-1:-1;6225:2:1;6210:18;;6197:32;6238:30;6197:32;6238:30;:::i;6305:241::-;6361:6;6414:2;6402:9;6393:7;6389:23;6385:32;6382:52;;;6430:1;6427;6420:12;6382:52;6469:9;6456:23;6488:28;6510:5;6488:28;:::i;6551:367::-;6614:8;6624:6;6678:3;6671:4;6663:6;6659:17;6655:27;6645:55;;6696:1;6693;6686:12;6645:55;-1:-1:-1;6719:20:1;;6762:18;6751:30;;6748:50;;;6794:1;6791;6784:12;6748:50;6831:4;6823:6;6819:17;6807:29;;6891:3;6884:4;6874:6;6871:1;6867:14;6859:6;6855:27;6851:38;6848:47;6845:67;;;6908:1;6905;6898:12;6845:67;6551:367;;;;;:::o;6923:773::-;7045:6;7053;7061;7069;7122:2;7110:9;7101:7;7097:23;7093:32;7090:52;;;7138:1;7135;7128:12;7090:52;7178:9;7165:23;7207:18;7248:2;7240:6;7237:14;7234:34;;;7264:1;7261;7254:12;7234:34;7303:70;7365:7;7356:6;7345:9;7341:22;7303:70;:::i;:::-;7392:8;;-1:-1:-1;7277:96:1;-1:-1:-1;7480:2:1;7465:18;;7452:32;;-1:-1:-1;7496:16:1;;;7493:36;;;7525:1;7522;7515:12;7493:36;;7564:72;7628:7;7617:8;7606:9;7602:24;7564:72;:::i;:::-;6923:773;;;;-1:-1:-1;7655:8:1;-1:-1:-1;;;;6923:773:1:o;7701:180::-;7760:6;7813:2;7801:9;7792:7;7788:23;7784:32;7781:52;;;7829:1;7826;7819:12;7781:52;-1:-1:-1;7852:23:1;;7701:180;-1:-1:-1;7701:180:1:o;7886:446::-;7969:6;7977;7985;7993;8046:3;8034:9;8025:7;8021:23;8017:33;8014:53;;;8063:1;8060;8053:12;8014:53;8102:9;8089:23;8121:28;8143:5;8121:28;:::i;8337:388::-;8405:6;8413;8466:2;8454:9;8445:7;8441:23;8437:32;8434:52;;;8482:1;8479;8472:12;8434:52;8521:9;8508:23;8540:31;8565:5;8540:31;:::i;:::-;8590:5;-1:-1:-1;8647:2:1;8632:18;;8619:32;8660:33;8619:32;8660:33;:::i;8990:248::-;9058:6;9066;9119:2;9107:9;9098:7;9094:23;9090:32;9087:52;;;9135:1;9132;9125:12;9087:52;-1:-1:-1;;9158:23:1;;;9228:2;9213:18;;;9200:32;;-1:-1:-1;8990:248:1:o;9467:336::-;9669:2;9651:21;;;9708:2;9688:18;;;9681:30;-1:-1:-1;;;9742:2:1;9727:18;;9720:42;9794:2;9779:18;;9467:336::o;10164:127::-;10225:10;10220:3;10216:20;10213:1;10206:31;10256:4;10253:1;10246:15;10280:4;10277:1;10270:15;10966:127;11027:10;11022:3;11018:20;11015:1;11008:31;11058:4;11055:1;11048:15;11082:4;11079:1;11072:15;11098:422;11187:1;11230:5;11187:1;11244:270;11265:7;11255:8;11252:21;11244:270;;;11324:4;11320:1;11316:6;11312:17;11306:4;11303:27;11300:53;;;11333:18;;:::i;:::-;11383:7;11373:8;11369:22;11366:55;;;11403:16;;;;11366:55;11482:22;;;;11442:15;;;;11244:270;;;11248:3;11098:422;;;;;:::o;11525:806::-;11574:5;11604:8;11594:80;;-1:-1:-1;11645:1:1;11659:5;;11594:80;11693:4;11683:76;;-1:-1:-1;11730:1:1;11744:5;;11683:76;11775:4;11793:1;11788:59;;;;11861:1;11856:130;;;;11768:218;;11788:59;11818:1;11809:10;;11832:5;;;11856:130;11893:3;11883:8;11880:17;11877:43;;;11900:18;;:::i;:::-;-1:-1:-1;;11956:1:1;11942:16;;11971:5;;11768:218;;12070:2;12060:8;12057:16;12051:3;12045:4;12042:13;12038:36;12032:2;12022:8;12019:16;12014:2;12008:4;12005:12;12001:35;11998:77;11995:159;;;-1:-1:-1;12107:19:1;;;12139:5;;11995:159;12186:34;12211:8;12205:4;12186:34;:::i;:::-;12256:6;12252:1;12248:6;12244:19;12235:7;12232:32;12229:58;;;12267:18;;:::i;:::-;12305:20;;11525:806;-1:-1:-1;;;11525:806:1:o;12336:140::-;12394:5;12423:47;12464:4;12454:8;12450:19;12444:4;12423:47;:::i;12481:168::-;12521:7;12587:1;12583;12579:6;12575:14;12572:1;12569:21;12564:1;12557:9;12550:17;12546:45;12543:71;;;12594:18;;:::i;:::-;-1:-1:-1;12634:9:1;;12481:168::o;12654:335::-;12856:2;12838:21;;;12895:2;12875:18;;;12868:30;-1:-1:-1;;;12929:2:1;12914:18;;12907:41;12980:2;12965:18;;12654:335::o;12994:336::-;13196:2;13178:21;;;13235:2;13215:18;;;13208:30;-1:-1:-1;;;13269:2:1;13254:18;;13247:42;13321:2;13306:18;;12994:336::o;13805:184::-;13875:6;13928:2;13916:9;13907:7;13903:23;13899:32;13896:52;;;13944:1;13941;13934:12;13896:52;-1:-1:-1;13967:16:1;;13805:184;-1:-1:-1;13805:184:1:o;14273:128::-;14313:3;14344:1;14340:6;14337:1;14334:13;14331:39;;;14350:18;;:::i;:::-;-1:-1:-1;14386:9:1;;14273:128::o;14795:335::-;14997:2;14979:21;;;15036:2;15016:18;;;15009:30;-1:-1:-1;;;15070:2:1;15055:18;;15048:41;15121:2;15106:18;;14795:335::o;15491:251::-;15561:6;15614:2;15602:9;15593:7;15589:23;15585:32;15582:52;;;15630:1;15627;15620:12;15582:52;15662:9;15656:16;15681:31;15706:5;15681:31;:::i;15747:125::-;15787:4;15815:1;15812;15809:8;15806:34;;;15820:18;;:::i;:::-;-1:-1:-1;15857:9:1;;15747:125::o;16229:127::-;16290:10;16285:3;16281:20;16278:1;16271:31;16321:4;16318:1;16311:15;16345:4;16342:1;16335:15;16361:135;16400:3;16421:17;;;16418:43;;16441:18;;:::i;:::-;-1:-1:-1;16488:1:1;16477:13;;16361:135::o;18540:217::-;18580:1;18606;18596:132;;18650:10;18645:3;18641:20;18638:1;18631:31;18685:4;18682:1;18675:15;18713:4;18710:1;18703:15;18596:132;-1:-1:-1;18742:9:1;;18540:217::o;23305:245::-;23372:6;23425:2;23413:9;23404:7;23400:23;23396:32;23393:52;;;23441:1;23438;23431:12;23393:52;23473:9;23467:16;23492:28;23514:5;23492:28;:::i;24098:980::-;24360:4;24408:3;24397:9;24393:19;24439:6;24428:9;24421:25;24465:2;24503:6;24498:2;24487:9;24483:18;24476:34;24546:3;24541:2;24530:9;24526:18;24519:31;24570:6;24605;24599:13;24636:6;24628;24621:22;24674:3;24663:9;24659:19;24652:26;;24713:2;24705:6;24701:15;24687:29;;24734:1;24744:195;24758:6;24755:1;24752:13;24744:195;;;24823:13;;-1:-1:-1;;;;;24819:39:1;24807:52;;24914:15;;;;24879:12;;;;24855:1;24773:9;24744:195;;;-1:-1:-1;;;;;;;24995:32:1;;;;24990:2;24975:18;;24968:60;-1:-1:-1;;;25059:3:1;25044:19;25037:35;24956:3;24098:980;-1:-1:-1;;;24098:980:1:o;25695:306::-;25783:6;25791;25799;25852:2;25840:9;25831:7;25827:23;25823:32;25820:52;;;25868:1;25865;25858:12;25820:52;25897:9;25891:16;25881:26;;25947:2;25936:9;25932:18;25926:25;25916:35;;25991:2;25980:9;25976:18;25970:25;25960:35;;25695:306;;;;;:::o;26413:274::-;26542:3;26580:6;26574:13;26596:53;26642:6;26637:3;26630:4;26622:6;26618:17;26596:53;:::i;:::-;26665:16;;;;;26413:274;-1:-1:-1;;26413:274:1:o

Swarm Source

ipfs://792dd7bcb4cf8e10e6d3112f3b3858d5a7b0ac95b1756a3f8f9c9681b8215aad

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

SquidGrow has migrated to 0xb72e76ccf005313868db7b48070901a44629da98

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.