ETH Price: $1,792.93 (+10.30%)

Contract

0x47608575afF05122637Be9315661c45Ac29cEb38
 

Overview

ETH Balance

0.049368 ETH

ETH Value

$88.51 (@ $1,792.93/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mine182945652025-04-23 9:02:2550 secs ago1745398945IN
0x47608575...Ac29cEb38
0 ETH0.000001220.00004899
Mine182945612025-04-23 9:02:1758 secs ago1745398937IN
0x47608575...Ac29cEb38
0 ETH0.000001230.00004913
Mine182945382025-04-23 9:01:311 min ago1745398891IN
0x47608575...Ac29cEb38
0 ETH0.00000120.00004834
Mine182945322025-04-23 9:01:191 min ago1745398879IN
0x47608575...Ac29cEb38
0 ETH0.00000120.00004834
Multi Deposit182945292025-04-23 9:01:132 mins ago1745398873IN
0x47608575...Ac29cEb38
0.024456 ETH0.000000010.00004565
Mine182945292025-04-23 9:01:132 mins ago1745398873IN
0x47608575...Ac29cEb38
0 ETH0.00000120.00004834
Mine182945262025-04-23 9:01:072 mins ago1745398867IN
0x47608575...Ac29cEb38
0 ETH0.000001210.00004834
Mine182945022025-04-23 9:00:192 mins ago1745398819IN
0x47608575...Ac29cEb38
0 ETH0.00000120.00004818
Mine182944962025-04-23 9:00:073 mins ago1745398807IN
0x47608575...Ac29cEb38
0 ETH0.00000120.00004818
Mine182944932025-04-23 9:00:013 mins ago1745398801IN
0x47608575...Ac29cEb38
0 ETH0.00000120.00004818
Mine182944902025-04-23 8:59:553 mins ago1745398795IN
0x47608575...Ac29cEb38
0 ETH0.00000120.00004818
Mine182944622025-04-23 8:58:594 mins ago1745398739IN
0x47608575...Ac29cEb38
0 ETH0.000001220.00004917
Mine182944582025-04-23 8:58:514 mins ago1745398731IN
0x47608575...Ac29cEb38
0 ETH0.000001220.00004917
Mine182944552025-04-23 8:58:454 mins ago1745398725IN
0x47608575...Ac29cEb38
0 ETH0.000001230.00004917
Mine182944322025-04-23 8:57:595 mins ago1745398679IN
0x47608575...Ac29cEb38
0 ETH0.000001230.00004945
Mine182944262025-04-23 8:57:475 mins ago1745398667IN
0x47608575...Ac29cEb38
0 ETH0.000001230.00004945
Mine182944202025-04-23 8:57:355 mins ago1745398655IN
0x47608575...Ac29cEb38
0 ETH0.000001230.00004945
Mine182943962025-04-23 8:56:476 mins ago1745398607IN
0x47608575...Ac29cEb38
0 ETH0.000001220.00004915
Mine182943902025-04-23 8:56:356 mins ago1745398595IN
0x47608575...Ac29cEb38
0 ETH0.000001220.00004915
Mine182943872025-04-23 8:56:296 mins ago1745398589IN
0x47608575...Ac29cEb38
0 ETH0.000001220.00004915
Mine182943842025-04-23 8:56:236 mins ago1745398583IN
0x47608575...Ac29cEb38
0 ETH0.000001230.00004915
Mine182943532025-04-23 8:55:217 mins ago1745398521IN
0x47608575...Ac29cEb38
0 ETH0.000001290.00005175
Mine182943492025-04-23 8:55:138 mins ago1745398513IN
0x47608575...Ac29cEb38
0 ETH0.000001290.00005175
Mine182943232025-04-23 8:54:218 mins ago1745398461IN
0x47608575...Ac29cEb38
0 ETH0.000001280.00005147
Mine182943202025-04-23 8:54:159 mins ago1745398455IN
0x47608575...Ac29cEb38
0 ETH0.000001290.00005188
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
182937612025-04-23 8:35:3727 mins ago1745397337
0x47608575...Ac29cEb38
0.024 ETH
182937552025-04-23 8:35:2527 mins ago1745397325
0x47608575...Ac29cEb38
0.00026504 ETH
182937552025-04-23 8:35:2527 mins ago1745397325
0x47608575...Ac29cEb38
0.0002511 ETH
182937552025-04-23 8:35:2527 mins ago1745397325
0x47608575...Ac29cEb38
0.0004104 ETH
182937552025-04-23 8:35:2527 mins ago1745397325
0x47608575...Ac29cEb38
0.0000456 ETH
181339582025-04-19 15:48:513 days ago1745077731
0x47608575...Ac29cEb38
0.024 ETH
181339452025-04-19 15:48:253 days ago1745077705
0x47608575...Ac29cEb38
0.00021709 ETH
181339452025-04-19 15:48:253 days ago1745077705
0x47608575...Ac29cEb38
0.00021105 ETH
181339452025-04-19 15:48:253 days ago1745077705
0x47608575...Ac29cEb38
0.0001368 ETH
181339452025-04-19 15:48:253 days ago1745077705
0x47608575...Ac29cEb38
0.0000152 ETH
179917162025-04-16 8:47:277 days ago1744793247
0x47608575...Ac29cEb38
0.024 ETH
179917102025-04-16 8:47:157 days ago1744793235
0x47608575...Ac29cEb38
0.00080111 ETH
179917102025-04-16 8:47:157 days ago1744793235
0x47608575...Ac29cEb38
0.00076658 ETH
179917102025-04-16 8:47:157 days ago1744793235
0x47608575...Ac29cEb38
0.0004104 ETH
179917102025-04-16 8:47:157 days ago1744793235
0x47608575...Ac29cEb38
0.0000456 ETH
176885272025-04-09 8:21:0914 days ago1744186869
0x47608575...Ac29cEb38
0.024 ETH
175583912025-04-06 8:03:1717 days ago1743926597
0x47608575...Ac29cEb38
0.0015593 ETH
175583912025-04-06 8:03:1717 days ago1743926597
0x47608575...Ac29cEb38
0.00154173 ETH
175583912025-04-06 8:03:1717 days ago1743926597
0x47608575...Ac29cEb38
0.000855 ETH
175583912025-04-06 8:03:1717 days ago1743926597
0x47608575...Ac29cEb38
0.000095 ETH
170007002025-03-24 10:13:3529 days ago1742811215
0x47608575...Ac29cEb38
0.024 ETH
169898212025-03-24 4:10:5730 days ago1742789457
0x47608575...Ac29cEb38
0.00101185 ETH
169898212025-03-24 4:10:5730 days ago1742789457
0x47608575...Ac29cEb38
0.00101075 ETH
166810472025-03-17 0:38:2937 days ago1742171909
0x47608575...Ac29cEb38
0.024 ETH
166810402025-03-17 0:38:1537 days ago1742171895
0x47608575...Ac29cEb38
0.0003515 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KONKHypersPoolV2

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 12: KONKHypersPoolV2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

import "./IERC20.sol";
import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./SafeMath.sol";
import "./IERC20.sol";
import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./SafeMath.sol";
import "./IERC4626.sol";
import "./IERC721.sol";
import "./IKONKMaster.sol";
import "./IHypersoundV3.sol";
import "./IBlastPoints.sol";
import "./IBlast.sol";

contract KONKHypersPoolV2 is ReentrancyGuard, Ownable {
    using SafeMath for uint256;

    struct Pool {
        uint256 totalDeposits;
        bool locked;
        uint256 smartRampVotes;
        uint256 aggressiveVotes;
        uint256 hypersMined;
        uint256 sessionFees;
    }

    struct UserDeposit {
        uint256 amount;
        bool isSmartRamp;
    }

    struct CommunityDiscount {
        address tokenAddress;
        uint256 discountBps;
        bool isActive;
        bool isERC721;
    }

    IBlast public constant BLAST = IBlast(0x4300000000000000000000000000000000000002);
    IBlastPoints public constant BLAST_POINTS = IBlastPoints(0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800);
    IERC4626 public constant stKONK = IERC4626(0x90fC7ABB6734dF30b9dC726f6f92EefD9c3c7Bb2);
    IERC20 public constant KONK = IERC20(0x2b9712190Ce9570C1CA860D55B1623Bd88BF96fF); 
    
    IKONKMaster public masterContract;
    IHypersoundV3 public hypersound;
    IERC20 public hypersToken;

    uint256 public poolSize;  
    bool public isPaused;     // To pause deposits during pool size changes
    uint256 public constant MAX_POOLS = 100;
    uint256 public currentPoolPointer = 1; // Points to pool accepting deposits
    uint256 public miningPoolPointer = 1;  // Points to pool being mined
    uint256 public fixedDeposit;
    uint256 public stakerDiscount;
    uint256 public fixedFeeAmount;
    uint256 public platformFees;
    uint256 public totalHypersMined;
    uint256 public miningSessionCount;
    uint256 public leftoverHypers;
    uint256 public requiredKONKAmount = 10_000 * 1e18; // 10k KONK/stKONK minimum

    address public pointsOperator;
    address public currentMiningBot;
    uint256 public lastMinedPool;
    bool public miningSessionInProgress;

    // Pool management
    mapping(uint256 => Pool) public pools;
    mapping(uint256 => mapping(address => UserDeposit)) public poolDeposits;
    mapping(uint256 => address[]) public poolDepositors;
    mapping(address => CommunityDiscount) public communityDiscounts;
    address[] public communityTokens;
    
    uint256 public platformFeePercentage;

    // Multisig variables
    address[5] public signers;
    uint256 public constant REQUIRED_SIGNATURES = 3;
    mapping(address => bool) public isSigner;
    uint256 public emergencyWithdrawalProposalId;
    mapping(uint256 => mapping(address => bool)) public hasSignedWithdrawal;
    uint256 public emergencyWithdrawalSignatures;
    uint256 public currentSessionId;
    address public feeRecipient;  // Wallet to receive remaining platform fees

    bool public maxDepositLimitEnabled;
    uint256 public maxDepositLimit;

    uint256 public totalContributions;
    uint256 public previousSessionHypersMined;
    
    uint256 public stakerThreshold = 10000 * 1e18; // 10,000 KONK default

    // Events
    event Deposited(address indexed user, uint256 amount, uint256 fee, bool isSmartRamp, uint256 poolId);
    event PoolFilled(uint256 poolId, uint256 smartRampVotes, uint256 aggressiveVotes, uint256 poolAmount);
    event MiningSessionStarted(uint256 sessionId, uint256 requiredAmount, address bot);
    event MiningComplete(uint256 sessionId, uint256 totalRewards);
    event RewardDistributed(address indexed user, uint256 amount, uint256 sessionId);
    event PoolReset(uint256 indexed newPoolId);
    event PoolYieldAndGasClaimed(uint256 yieldAmount, uint256 gasAmount);
    event EmergencyWithdrawalExecuted(uint256 proposalId, uint256 ethAmount, uint256 hypersAmount);
    event SignerUpdated(address oldSigner, address newSigner);
    event LeftoverHypersWithdrawn(address recipient, uint256 amount);
    event CommunityDiscountAdded(address token, uint256 discountBps, bool isERC721);
    event CommunityDiscountRemoved(address token);
    event RequiredKONKAmountUpdated(uint256 newAmount);
    event PoolSizeUpdated(uint256 newSize);
    event ContractPaused(bool isPaused);
    event FeeRecipientUpdated(address newRecipient);
    event MaxDepositLimitUpdated(uint256 newLimit);
    event MaxDepositLimitToggled(bool enabled);
    event HypersMined(uint256 sessionId, uint256 poolId, uint256 hypersMined);
    event StakerThresholdUpdated(uint256 newAmount);


    constructor(
        address _pointsOperator,
        address _masterContract,
        address _hypersound,
        address _hypersToken, 
        uint256 _fixedDeposit,
        uint256 _fixedFeeAmount,
        uint256 _stakerDiscount,
        address _feeRecipient,
        uint256 _initialMaxDepositLimit,
        bool _maxDepositLimitEnabled,
        address[5] memory _initialSigners
    ) Ownable(msg.sender) {
        pointsOperator = _pointsOperator;
        BLAST_POINTS.configurePointsOperator(_pointsOperator);
        masterContract = IKONKMaster(_masterContract);
        hypersound = IHypersoundV3(_hypersound);
        hypersToken = IERC20(_hypersToken);  
        poolSize = 0.024 ether;
        fixedDeposit = _fixedDeposit;
        fixedFeeAmount = _fixedFeeAmount;
        stakerDiscount = _stakerDiscount;
        platformFeePercentage = 10;
        currentSessionId = 1;
        feeRecipient = _feeRecipient;
        maxDepositLimit = _initialMaxDepositLimit;
        maxDepositLimitEnabled = _maxDepositLimitEnabled;

        BLAST.configureClaimableYield();
        BLAST.configureClaimableGas();

        for (uint i = 0; i < 5; i++) {
            require(_initialSigners[i] != address(0), "Invalid signer");
            signers[i] = _initialSigners[i];
            isSigner[_initialSigners[i]] = true;
        }
    }

    function updatePoolSize(uint256 _newPoolSize) external onlyOwner {
        require(isPaused, "Contract must be paused");
        require(_newPoolSize > 0, "Invalid pool size");
        require(address(this).balance == 0, "Contract must be empty");
        
        // Check if any pools have deposits or are locked
        for (uint256 i = 1; i <= MAX_POOLS; i++) {
            require(!pools[i].locked, "Pools are locked");
            require(pools[i].totalDeposits == 0, "Pools have deposits");
        }

        poolSize = _newPoolSize;
        emit PoolSizeUpdated(_newPoolSize);
    }

    function setPaused(bool _isPaused) external onlyOwner {
        isPaused = _isPaused;
        emit ContractPaused(_isPaused);
    }

    function setRequiredKONKAmount(uint256 _newAmount) external onlyOwner {
        requiredKONKAmount = _newAmount;
        emit RequiredKONKAmountUpdated(_newAmount);
    }

    function addCommunityDiscount(
        address _token,
        uint256 _discountBps,
        bool _isERC721
    ) external onlyOwner {
        require(_discountBps <= 5000, "Max 50% discount"); 
        require(!communityDiscounts[_token].isActive, "Already added");

        communityDiscounts[_token] = CommunityDiscount({
            tokenAddress: _token,
            discountBps: _discountBps,
            isActive: true,
            isERC721: _isERC721
        });

        communityTokens.push(_token);
        emit CommunityDiscountAdded(_token, _discountBps, _isERC721);
    }

    function removeCommunityDiscount(address _token) external onlyOwner {
        require(communityDiscounts[_token].isActive, "Not active");
        communityDiscounts[_token].isActive = false;
        emit CommunityDiscountRemoved(_token);
    }

    function calculateFee(address user) public view returns (uint256) {
        uint256 konkBalance = KONK.balanceOf(user);
        uint256 stKONKBalance = stKONK.balanceOf(user);
        require(
            konkBalance >= requiredKONKAmount || stKONKBalance >= requiredKONKAmount,
            "Must have 10k KONK or stKONK"
        );

        uint256 fee = fixedFeeAmount;
        
        if (stKONKBalance >= stakerThreshold) {
            fee = fee.mul(10000 - stakerDiscount).div(10000);
        }

        // Find highest eligible community discount
        uint256 highestDiscount = 0;
        for (uint256 i = 0; i < communityTokens.length; i++) {
            address token = communityTokens[i];
            CommunityDiscount memory discount = communityDiscounts[token];
            
            if (discount.isActive) {
                if (discount.isERC721) {
                    if (IERC721(token).balanceOf(user) > 0 && discount.discountBps > highestDiscount) {
                        highestDiscount = discount.discountBps;
                    }
                } else {
                    if (IERC20(token).balanceOf(user) > 0 && discount.discountBps > highestDiscount) {
                        highestDiscount = discount.discountBps;
                    }
                }
            }
        }

        // Apply highest eligible discount if any
        if (highestDiscount > 0) {
            fee = fee.mul(10000 - highestDiscount).div(10000);
        }

        return fee;
    }

    function multiDeposit(uint256 times, bool isSmartRamp) external payable nonReentrant {
        require(!isPaused, "Contract is paused");
        require(times > 0, "Invalid deposit count");
        
        uint256 feePerDeposit = calculateFee(msg.sender);
        uint256 depositAmount = fixedDeposit + feePerDeposit;
        uint256 totalRequiredAmount = depositAmount.mul(times);
        require(msg.value == totalRequiredAmount, "Incorrect ETH amount");

        // Check max deposit limit if enabled
        if (maxDepositLimitEnabled) {
            require(msg.value <= maxDepositLimit, "Exceeds max deposit limit");
        }

        uint256 remainingAmount = msg.value.sub(feePerDeposit.mul(times));
        uint256 currentPool = currentPoolPointer;

        while (remainingAmount > 0) {
            Pool storage pool = pools[currentPool];
            uint256 spaceInPool = poolSize.sub(pool.totalDeposits);
            
            if (spaceInPool > 0) {
                uint256 amountToDeposit = remainingAmount > spaceInPool ? spaceInPool : remainingAmount;
                _addToPool(msg.sender, currentPool, amountToDeposit, isSmartRamp);
                remainingAmount = remainingAmount.sub(amountToDeposit);

                if (pool.totalDeposits >= poolSize) {
                    pool.locked = true;
                    emit PoolFilled(currentPool, pool.smartRampVotes, pool.aggressiveVotes, pool.totalDeposits);
                    currentPool = currentPool == MAX_POOLS ? 1 : currentPool + 1;
                }
            } else {
                currentPool = currentPool == MAX_POOLS ? 1 : currentPool + 1;
            }

            totalContributions += times;
        }

        // Add fees to both total and session
        uint256 totalFees = feePerDeposit.mul(times);
        pools[currentPoolPointer].sessionFees = pools[currentPoolPointer].sessionFees.add(totalFees);
        platformFees = platformFees.add(totalFees);
        
        currentPoolPointer = currentPool;
    }

    function _addToPool(address user, uint256 poolId, uint256 amount, bool isSmartRamp) internal {
        Pool storage pool = pools[poolId];
        
        if (poolDeposits[poolId][user].amount == 0) {
            poolDepositors[poolId].push(user);
        }

        poolDeposits[poolId][user].amount = poolDeposits[poolId][user].amount.add(amount);
        poolDeposits[poolId][user].isSmartRamp = isSmartRamp;
        
        pool.totalDeposits = pool.totalDeposits.add(amount);
        if (isSmartRamp) {
            pool.smartRampVotes = pool.smartRampVotes.add(amount);
        } else {
            pool.aggressiveVotes = pool.aggressiveVotes.add(amount);
        }
    }

    function startMining() external {
        require(masterContract.authorizedBotWallets(msg.sender), "Not authorized");
        require(!miningSessionInProgress, "Mining in progress");
            
        Pool storage poolToMine = pools[miningPoolPointer];
        require(poolToMine.totalDeposits > 0, "No deposits to mine");
        require(poolToMine.locked, "Pool not locked");

        miningSessionInProgress = true;
        currentMiningBot = msg.sender;
        lastMinedPool = miningPoolPointer;

        (bool success, ) = currentMiningBot.call{value: poolToMine.totalDeposits}("");
        require(success, "Failed to send funds to bot");

        emit MiningSessionStarted(currentSessionId, poolToMine.totalDeposits, msg.sender);
    }

    function mine(uint256 batchSize) external {
            require(msg.sender == currentMiningBot && miningSessionInProgress, "Not authorized");
            require(batchSize >= 1 && batchSize <= 1000, "Invalid batch size");

            hypersound.mineBatch(batchSize, "");
    }

    function completeMining() external {
        require(msg.sender == currentMiningBot && miningSessionInProgress, "Not authorized");

        Pool storage currentPool = pools[miningPoolPointer];       
        uint256 hypersToDistribute = hypersToken.balanceOf(address(this));
        if (hypersToDistribute > 0) {
            totalHypersMined = totalHypersMined.add(hypersToDistribute);
            distributeRewards(miningPoolPointer, hypersToDistribute);
            currentPool.hypersMined = hypersToDistribute;
            previousSessionHypersMined = hypersToDistribute;
        }

        uint256 sessionHypersMined = currentPool.hypersMined;
        emit HypersMined(currentSessionId, lastMinedPool, sessionHypersMined);
        
        // Revenue Sharing with KONK Stakers
        uint256 sessionFeeShare = currentPool.sessionFees.mul(platformFeePercentage).div(100);
        uint256 remainingSessionFees = currentPool.sessionFees.sub(sessionFeeShare);
        if (sessionFeeShare > 0) {
            (bool feeSuccess, ) = address(masterContract).call{value: sessionFeeShare}(
                abi.encodeWithSignature("receivePlatformFees()")
            );
            require(feeSuccess, "Fee transfer failed");
        }

        // Send remaining fee to team wallet
        if (remainingSessionFees > 0) {
            (bool success, ) = feeRecipient.call{value: remainingSessionFees}("");
            require(success, "Failed to send remaining fees");
        }

        claimYieldAndGasForCurrentPool();

        // Reset current pool
        currentPool.totalDeposits = 0;
        currentPool.locked = false;
        currentPool.smartRampVotes = 0;
        currentPool.aggressiveVotes = 0;
        currentPool.hypersMined = 0;
        currentPool.sessionFees = 0;

        // Clear depositor data
        address[] storage depositors = poolDepositors[miningPoolPointer];
        for (uint256 i = 0; i < depositors.length; i++) {
            delete poolDeposits[miningPoolPointer][depositors[i]];
        }
        delete poolDepositors[miningPoolPointer];

        // Iincrement the mining pointer
        miningPoolPointer = miningPoolPointer == MAX_POOLS ? 1 : miningPoolPointer + 1;

        miningSessionInProgress = false;
        currentMiningBot = address(0);

        emit MiningComplete(currentSessionId, hypersToDistribute);
        currentSessionId++;
    }   
    
    
    function distributeRewards(uint256 poolId, uint256 rewardsAmount) internal {
        if (rewardsAmount == 0 || pools[poolId].totalDeposits == 0) return;

        uint256 totalDistributed = 0;
        address[] storage depositors = poolDepositors[poolId];

        for (uint256 i = 0; i < depositors.length; i++) {
            address depositor = depositors[i];
            uint256 userDeposit = poolDeposits[poolId][depositor].amount;
            
            if (userDeposit > 0) {
                uint256 userRewardShare = userDeposit.mul(rewardsAmount).div(pools[poolId].totalDeposits);
                if (userRewardShare > 0) {
                    require(hypersToken.transfer(depositor, userRewardShare), "Transfer failed");
                    totalDistributed = totalDistributed.add(userRewardShare);
                    emit RewardDistributed(depositor, userRewardShare, currentSessionId);
                }
            }
        }

        uint256 leftover = rewardsAmount.sub(totalDistributed);
        if (leftover > 0) {
            leftoverHypers = leftoverHypers.add(leftover);
        }
    }

    function claimYieldAndGasForCurrentPool() internal {
        uint256 initialBalance = address(this).balance;

        BLAST.claimAllYield(address(this), address(this));
        uint256 afterYieldBalance = address(this).balance;
        uint256 yieldAmount = afterYieldBalance.sub(initialBalance);

        BLAST.claimMaxGas(address(this), address(this));
        uint256 finalBalance = address(this).balance;
        uint256 gasAmount = finalBalance.sub(afterYieldBalance);

        uint256 totalAmount = yieldAmount.add(gasAmount);

        if (totalAmount > 0) {
            (bool success, ) = address(masterContract).call{value: totalAmount}(
                abi.encodeWithSignature("receiveYieldAndGas()")
            );
            require(success, "Failed to send yield and gas");
            
            masterContract.claimYieldAndGas();
            
            emit PoolYieldAndGasClaimed(yieldAmount, gasAmount);
        }
    }

    // Emergency Functions
    function proposeEmergencyWithdrawal() external onlyOwner {
        require(emergencyWithdrawalSignatures == 0, "Proposal pending");
        emergencyWithdrawalProposalId++;
        emergencyWithdrawalSignatures = 0;
    }

    function signEmergencyWithdrawal() external {
        require(isSigner[msg.sender], "Not a signer");
        require(!hasSignedWithdrawal[emergencyWithdrawalProposalId][msg.sender], "Already signed");

        hasSignedWithdrawal[emergencyWithdrawalProposalId][msg.sender] = true;
        emergencyWithdrawalSignatures++;
    }

    function executeEmergencyWithdrawal() external onlyOwner {
        require(emergencyWithdrawalSignatures >= REQUIRED_SIGNATURES, "Insufficient signatures");
        _executeWithdrawal();
        
        emergencyWithdrawalSignatures = 0;
        for (uint i = 0; i < 5; i++) {
            hasSignedWithdrawal[emergencyWithdrawalProposalId][signers[i]] = false;
        }
    }

    function _executeWithdrawal() private {
        uint256 ethBalance = address(this).balance;
        uint256 hypersBalance = hypersToken.balanceOf(address(this));
        
        (bool success, ) = owner().call{value: ethBalance}("");
        require(success, "ETH transfer failed");
        
        require(hypersToken.transfer(owner(), hypersBalance), "HYPERS transfer failed");
        
        emit EmergencyWithdrawalExecuted(emergencyWithdrawalProposalId, ethBalance, hypersBalance);

        // Reset all state
        for (uint256 i = 1; i <= MAX_POOLS; i++) {
            delete pools[i];
            address[] storage depositors = poolDepositors[i];
            for (uint256 j = 0; j < depositors.length; j++) {
                delete poolDeposits[i][depositors[j]];
            }
            delete poolDepositors[i];
        }

        miningSessionCount = 0;
        platformFees = 0;
        totalHypersMined = 0;
        lastMinedPool = 0;
        leftoverHypers = 0;
        miningSessionInProgress = false;
        currentMiningBot = address(0);
        totalHypersMined = 0;
        totalContributions = 0;
    }

    // View Functions
    function getPoolInfo(uint256 poolId) external view returns (
        bool isLocked,
        uint256 totalDeposits,
        uint256 smartRampVotes,
        uint256 aggressiveVotes,
        uint256 contributorCount,
        bool isCurrentlyMining,
        uint256 hypersMined
        ) {
        require(poolId > 0 && poolId <= MAX_POOLS, "Invalid pool ID");
        Pool storage pool = pools[poolId];
        return (
            pool.locked,
            pool.totalDeposits,
            pool.smartRampVotes,
            pool.aggressiveVotes,
            poolDepositors[poolId].length,
            (miningSessionInProgress && miningPoolPointer == poolId),
            pool.hypersMined
        );
        }

    function getUserPositions(address user) external view returns (
        uint256[] memory poolIds,
        uint256[] memory amounts,
        bool[] memory isSmartRamps,
        bool[] memory isPoolLocked,
        bool[] memory isPoolMining
    ) {
        poolIds = new uint256[](MAX_POOLS);
        amounts = new uint256[](MAX_POOLS);
        isSmartRamps = new bool[](MAX_POOLS);
        isPoolLocked = new bool[](MAX_POOLS);
        isPoolMining = new bool[](MAX_POOLS);
        
        uint256 count = 0;
        for (uint256 i = 1; i <= MAX_POOLS; i++) {
            UserDeposit storage deposit = poolDeposits[i][user];
            if (deposit.amount > 0) {
                poolIds[count] = i;
                amounts[count] = deposit.amount;
                isSmartRamps[count] = deposit.isSmartRamp;
                isPoolLocked[count] = pools[i].locked;
                isPoolMining[count] = (miningSessionInProgress && miningPoolPointer == i);
                count++;
            }
        }

        // Trim arrays to actual size
        assembly {
            mstore(poolIds, count)
            mstore(amounts, count)
            mstore(isSmartRamps, count)
            mstore(isPoolLocked, count)
            mstore(isPoolMining, count)
        }
    }

    function getAllPoolStatuses() external view returns (
        uint256[] memory totalDeposits,
        bool[] memory locked,
        bool[] memory mining,
        uint256[] memory depositorCounts
    ) {
        totalDeposits = new uint256[](MAX_POOLS);
        locked = new bool[](MAX_POOLS);
        mining = new bool[](MAX_POOLS);
        depositorCounts = new uint256[](MAX_POOLS);

        for (uint256 i = 0; i < MAX_POOLS; i++) {
            Pool storage pool = pools[i + 1];
            totalDeposits[i] = pool.totalDeposits;
            locked[i] = pool.locked;
            mining[i] = (miningSessionInProgress && miningPoolPointer == i + 1);
            depositorCounts[i] = poolDepositors[i + 1].length;
        }
    }

    function getPoolSizeInfo() external view returns (
        uint256 currentSize,
        bool canChange,
        uint256[] memory depositAmounts 
    ) {
        currentSize = poolSize;
        canChange = true;
        depositAmounts = new uint256[](MAX_POOLS);  
        
        for (uint256 i = 1; i <= MAX_POOLS; i++) {
            Pool storage pool = pools[i];
            if (pool.locked) {
                canChange = false;
            }
            depositAmounts[i-1] = pool.totalDeposits; 
        }
        
        return (currentSize, canChange, depositAmounts);
    }

    function getSessionMiningInfo(uint256 poolId) external view returns (
        uint256 hypersMined,
        bool isCurrentlyMining,
        uint256 currentSession
    ) {
        require(poolId > 0 && poolId <= MAX_POOLS, "Invalid pool ID");
        Pool storage pool = pools[poolId];
        return (
            pool.hypersMined,
            (miningSessionInProgress && miningPoolPointer == poolId),
            currentSessionId
        );
    }

    function getPoolStats() external view returns (
        uint256 successfulSessions,
        uint256 totalMined,
        uint256 contributions
    ) {
        // successful sessions is just currentSessionId - 1
        return (
            currentSessionId > 0 ? currentSessionId - 1 : 0,
            totalHypersMined,
            totalContributions
        );
    }

    // Admin functions
    function setFee(uint256 _fixedFeeAmount, uint256 _stakerDiscount) external onlyOwner {
        fixedFeeAmount = _fixedFeeAmount;
        stakerDiscount = _stakerDiscount;
    }

    function withdrawLeftoverHypers(uint256 amount) external onlyOwner {
        require(amount <= leftoverHypers, "Insufficient leftover HYPERS");
        leftoverHypers = leftoverHypers.sub(amount);
        require(hypersToken.transfer(msg.sender, amount), "HYPERS transfer failed");
        emit LeftoverHypersWithdrawn(msg.sender, amount);
    }

    function setPlatformFeePercentage(uint256 _newPercentage) external onlyOwner {
        require(_newPercentage <= 100, "Percentage must be between 0 and 100");
        platformFeePercentage = _newPercentage;
    }

    function setFeeRecipient(address _newRecipient) external onlyOwner {
        require(_newRecipient != address(0), "Invalid address");
        feeRecipient = _newRecipient;
        emit FeeRecipientUpdated(_newRecipient);
    }

    function setMaxDepositLimit(uint256 _newLimit) external onlyOwner {
        require(_newLimit > 0, "Invalid limit");
        maxDepositLimit = _newLimit;
        emit MaxDepositLimitUpdated(_newLimit);
    }

    function toggleMaxDepositLimit(bool _enabled) external onlyOwner {
        maxDepositLimitEnabled = _enabled;
        emit MaxDepositLimitToggled(_enabled);
    }

    function updateMasterContract(address _newMasterContract) external onlyOwner {
        require(_newMasterContract != address(0), "Invalid address");
        masterContract = IKONKMaster(_newMasterContract);
    }

    function updatePointsOperator(address _newOperator) external onlyOwner {
        require(_newOperator != address(0), "Invalid address");
        pointsOperator = _newOperator;
        BLAST_POINTS.configurePointsOperator(_newOperator);
    }
    
    function setStakerThreshold(uint256 _amount) external onlyOwner {
        stakerThreshold = _amount * 1e18;
        emit StakerThresholdUpdated(stakerThreshold);
    }

    function replaceSigner(address oldSigner, address newSigner) external onlyOwner {
        require(isSigner[oldSigner] && !isSigner[newSigner], "Invalid signers");
        require(newSigner != address(0), "Invalid address");

        for (uint i = 0; i < 5; i++) {
            if (signers[i] == oldSigner) {
                signers[i] = newSigner;
                break;
            }
        }

        isSigner[oldSigner] = false;
        isSigner[newSigner] = true;

        emit SignerUpdated(oldSigner, newSigner);
    }
    

    receive() external payable {}
}

File 2 of 12: Context.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

File 3 of 12: IBlast.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

interface IBlast {
    function configureClaimableYield() external;
    function configureClaimableGas() external;
    function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256);
    function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256);
}

File 4 of 12: IBlastPoints.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

interface IBlastPoints {
    function configurePointsOperator(address operator) external;
}

File 5 of 12: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

File 6 of 12: IERC4626.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

interface IERC4626 {
    function balanceOf(address owner) external view returns (uint256);
}

File 7 of 12: IERC721.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

interface IERC721 {
    function balanceOf(address owner) external view returns (uint256);
}

File 8 of 12: IHypersoundV3.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

interface IHypersoundV3 {
    function mineBatch(uint256 nbTx, bytes calldata extraData) external;
    function balanceOf(address account) external view returns (uint256);
}

File 9 of 12: IKONKMaster.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

interface IKONKMaster {
    function getStakedAmount(address user) external view returns (uint256);
    function authorizedBotWallets(address) external view returns (bool);
    function claimYieldAndGas() external;
    function receivePlatformFees() external payable;
}

File 10 of 12: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 */
abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 11 of 12: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

File 12 of 12: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

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 {
            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;
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_pointsOperator","type":"address"},{"internalType":"address","name":"_masterContract","type":"address"},{"internalType":"address","name":"_hypersound","type":"address"},{"internalType":"address","name":"_hypersToken","type":"address"},{"internalType":"uint256","name":"_fixedDeposit","type":"uint256"},{"internalType":"uint256","name":"_fixedFeeAmount","type":"uint256"},{"internalType":"uint256","name":"_stakerDiscount","type":"uint256"},{"internalType":"address","name":"_feeRecipient","type":"address"},{"internalType":"uint256","name":"_initialMaxDepositLimit","type":"uint256"},{"internalType":"bool","name":"_maxDepositLimitEnabled","type":"bool"},{"internalType":"address[5]","name":"_initialSigners","type":"address[5]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"discountBps","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isERC721","type":"bool"}],"name":"CommunityDiscountAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"CommunityDiscountRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"ContractPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isSmartRamp","type":"bool"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hypersAmount","type":"uint256"}],"name":"EmergencyWithdrawalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRecipient","type":"address"}],"name":"FeeRecipientUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sessionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hypersMined","type":"uint256"}],"name":"HypersMined","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LeftoverHypersWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"MaxDepositLimitToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"MaxDepositLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sessionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalRewards","type":"uint256"}],"name":"MiningComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sessionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requiredAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"bot","type":"address"}],"name":"MiningSessionStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"smartRampVotes","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"aggressiveVotes","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolAmount","type":"uint256"}],"name":"PoolFilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newPoolId","type":"uint256"}],"name":"PoolReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSize","type":"uint256"}],"name":"PoolSizeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gasAmount","type":"uint256"}],"name":"PoolYieldAndGasClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"RequiredKONKAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sessionId","type":"uint256"}],"name":"RewardDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldSigner","type":"address"},{"indexed":false,"internalType":"address","name":"newSigner","type":"address"}],"name":"SignerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"StakerThresholdUpdated","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_POINTS","outputs":[{"internalType":"contract IBlastPoints","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KONK","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_POOLS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REQUIRED_SIGNATURES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_discountBps","type":"uint256"},{"internalType":"bool","name":"_isERC721","type":"bool"}],"name":"addCommunityDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"calculateFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"communityDiscounts","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"discountBps","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isERC721","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"communityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"completeMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentMiningBot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPoolPointer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSessionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdrawalProposalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdrawalSignatures","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executeEmergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fixedDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fixedFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllPoolStatuses","outputs":[{"internalType":"uint256[]","name":"totalDeposits","type":"uint256[]"},{"internalType":"bool[]","name":"locked","type":"bool[]"},{"internalType":"bool[]","name":"mining","type":"bool[]"},{"internalType":"uint256[]","name":"depositorCounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"bool","name":"isLocked","type":"bool"},{"internalType":"uint256","name":"totalDeposits","type":"uint256"},{"internalType":"uint256","name":"smartRampVotes","type":"uint256"},{"internalType":"uint256","name":"aggressiveVotes","type":"uint256"},{"internalType":"uint256","name":"contributorCount","type":"uint256"},{"internalType":"bool","name":"isCurrentlyMining","type":"bool"},{"internalType":"uint256","name":"hypersMined","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSizeInfo","outputs":[{"internalType":"uint256","name":"currentSize","type":"uint256"},{"internalType":"bool","name":"canChange","type":"bool"},{"internalType":"uint256[]","name":"depositAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolStats","outputs":[{"internalType":"uint256","name":"successfulSessions","type":"uint256"},{"internalType":"uint256","name":"totalMined","type":"uint256"},{"internalType":"uint256","name":"contributions","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getSessionMiningInfo","outputs":[{"internalType":"uint256","name":"hypersMined","type":"uint256"},{"internalType":"bool","name":"isCurrentlyMining","type":"bool"},{"internalType":"uint256","name":"currentSession","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserPositions","outputs":[{"internalType":"uint256[]","name":"poolIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool[]","name":"isSmartRamps","type":"bool[]"},{"internalType":"bool[]","name":"isPoolLocked","type":"bool[]"},{"internalType":"bool[]","name":"isPoolMining","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"hasSignedWithdrawal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hypersToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hypersound","outputs":[{"internalType":"contract IHypersoundV3","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMinedPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leftoverHypers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterContract","outputs":[{"internalType":"contract IKONKMaster","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDepositLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDepositLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batchSize","type":"uint256"}],"name":"mine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"miningPoolPointer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningSessionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningSessionInProgress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"times","type":"uint256"},{"internalType":"bool","name":"isSmartRamp","type":"bool"}],"name":"multiDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointsOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"poolDeposits","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isSmartRamp","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"uint256","name":"totalDeposits","type":"uint256"},{"internalType":"bool","name":"locked","type":"bool"},{"internalType":"uint256","name":"smartRampVotes","type":"uint256"},{"internalType":"uint256","name":"aggressiveVotes","type":"uint256"},{"internalType":"uint256","name":"hypersMined","type":"uint256"},{"internalType":"uint256","name":"sessionFees","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousSessionHypersMined","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposeEmergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"removeCommunityDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oldSigner","type":"address"},{"internalType":"address","name":"newSigner","type":"address"}],"name":"replaceSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredKONKAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fixedFeeAmount","type":"uint256"},{"internalType":"uint256","name":"_stakerDiscount","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMaxDepositLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPaused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPercentage","type":"uint256"}],"name":"setPlatformFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setRequiredKONKAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setStakerThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signEmergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"signers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stKONK","outputs":[{"internalType":"contract IERC4626","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakerDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakerThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleMaxDepositLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalContributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHypersMined","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMasterContract","type":"address"}],"name":"updateMasterContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"updatePointsOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPoolSize","type":"uint256"}],"name":"updatePoolSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawLeftoverHypers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600755600160085569021e19e0c9bab240000060105569021e19e0c9bab2400000602955348015610035575f5ffd5b50604051614291380380614291833981016040819052610054916103de565b60015f55338061007e57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100878161035e565b50601180546001600160a01b0319166001600160a01b038d169081179091556040516336b91f2b60e01b81526004810191909152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b906024015f604051808303815f87803b1580156100f1575f5ffd5b505af1158015610103573d5f5f3e3d5ffd5b5050600280546001600160a01b03199081166001600160a01b038f8116919091179092556003805482168e8416179055600480549091168c8316178155665543df729c000060055560098b9055600b8a9055600a898155601a5560016024556025805460268990559289166001600160a81b031990931692909217600160a01b87151502179091556040805163784c3b3d60e11b81529051734300000000000000000000000000000000000002945063f098767a9350818301925f9282900301818387803b1580156101d3575f5ffd5b505af11580156101e5573d5f5f3e3d5ffd5b505050507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610235575f5ffd5b505af1158015610247573d5f5f3e3d5ffd5b505f925050505b600581101561034d575f82826005811061026a5761026a6104f3565b60200201516001600160a01b0316036102b65760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b6044820152606401610075565b8181600581106102c8576102c86104f3565b6020020151601b82600581106102e0576102e06104f3565b0180546001600160a01b0319166001600160a01b0392909216919091179055600160205f848460058110610316576103166104f3565b602090810291909101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010161024e565b505050505050505050505050610507565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b03811681146103c5575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f5f5f5f5f5f5f6101e08c8e0312156103f9575f5ffd5b6104028c6103af565b9a5061041060208d016103af565b995061041e60408d016103af565b985061042c60608d016103af565b60808d015160a08e015160c08f0151929a509098509650945061045160e08d016103af565b6101008d01516101208e01519195509350801515811461046f575f5ffd5b915061015f8c018d13610480575f5ffd5b60405160a081016001600160401b03811182821017156104a2576104a26103ca565b604052806101e08e018f8111156104b7575f5ffd5b6101408f015b818110156104dc576104ce816103af565b8352602092830192016104bd565b505050809150509295989b509295989b9093969950565b634e487b7160e01b5f52603260045260245ffd5b613d7d806105145f395ff3fe60806040526004361061042f575f3560e01c80638da5cb5b1161022b578063d3e4047a11610129578063e74b981b116100b3578063f2c1b7e411610078578063f2c1b7e414610d89578063f2fde38b14610d9e578063f4993bbd14610dbd578063f76e947b14610dd1578063fe74801514610de6575f5ffd5b8063e74b981b14610d0f578063e994561814610d2e578063ea6c2e8414610d42578063ec5bc0b214610d55578063f1511da814610d6a575f5ffd5b8063dda26edf116100f9578063dda26edf14610c48578063dfe6083514610c5d578063e3d9109f14610c7c578063e72328ce14610c9b578063e726d30b14610cba575f5ffd5b8063d3e4047a14610bbc578063d54720fb14610bdb578063d87f44fb14610bf0578063dca7bbe614610c0f575f5ffd5b8063ac4afa38116101b5578063b63c44e71161017a578063b63c44e714610b25578063b6e19e0614610b3a578063bbb8518814610b59578063cd446e2214610b88578063cdd78cfc14610ba7575f5ffd5b8063ac4afa3814610a4b578063acddb1c014610aca578063b0a8d5ca14610adf578063b187bd2614610af3578063b3381df614610b0c575f5ffd5b80639ac18b19116101fb5780639ac18b19146109d15780639ec9ac41146109e5578063a28a01cf146109fa578063a64f9ff614610a21578063ac332e2714610a36575f5ffd5b80638da5cb5b14610971578063941aef641461098e57806397d75776146109a2578063992f9075146109bc575f5ffd5b806347fb45531161033857806359e1a699116102c25780637df73e27116102875780637df73e27146108dd578063813584981461090a5780638333903e1461091e57806386a8f1ca1461093d57806389ef75a21461095c575f5ffd5b806359e1a6991461085a5780635c0252491461088a5780636597a1301461089f578063715018a6146108b45780637a86b282146108c8575f5ffd5b80634ec18db9116103085780634ec18db9146107bc57806350891ecf146107d157806352f7c988146107f857806358a34fee1461081757806358d70cf614610836575f5ffd5b806347fb4553146107385780634b8f9025146107575780634d1f287d1461077e5780634d4748981461079d575f5ffd5b80632ab38b5f116103b95780633da79c15116103895780633da79c151461063a5780633efeb0ea14610659578063457fb905146106db578063465f5eb8146106fa5780634690484014610719575f5ffd5b80632ab38b5f1461058b5780632f380b35146105aa578063336535281461060257806337c0892314610625575f5ffd5b80631d86e01b116103ff5780631d86e01b146104d25780632079fb9a1461050957806321b79d98146105285780632a1501271461053c5780632a6bc2dd1461055b575f5ffd5b8063068ed2f51461043a57806316c38b3c14610462578063194a4e7e146104835780631b844f2314610498575f5ffd5b3661043657005b5f5ffd5b348015610445575f5ffd5b5061044f600e5481565b6040519081526020015b60405180910390f35b34801561046d575f5ffd5b5061048161047c366004613970565b610e05565b005b34801561048e575f5ffd5b5061044f600c5481565b3480156104a3575f5ffd5b506104b76104b2366004613992565b610e55565b60408051938452911515602084015290820152606001610459565b3480156104dd575f5ffd5b506104f16104ec3660046139a9565b610ee1565b6040516001600160a01b039091168152602001610459565b348015610514575f5ffd5b506104f1610523366004613992565b610f15565b348015610533575f5ffd5b50610481610f34565b348015610547575f5ffd5b506104816105563660046139e4565b6111a8565b348015610566575f5ffd5b5061057a6105753660046139e4565b6111f8565b604051610459959493929190613a69565b348015610596575f5ffd5b506104816105a5366004613992565b6113fe565b3480156105b5575f5ffd5b506105c96105c4366004613992565b6115da565b60408051971515885260208801969096529486019390935260608501919091526080840152151560a083015260c082015260e001610459565b34801561060d575f5ffd5b50610616611694565b60405161045993929190613ad5565b348015610630575f5ffd5b5061044f60275481565b348015610645575f5ffd5b506012546104f1906001600160a01b031681565b348015610664575f5ffd5b506106a96106733660046139e4565b60186020525f90815260409020805460018201546002909201546001600160a01b03909116919060ff8082169161010090041684565b604080516001600160a01b03909516855260208501939093529015159183019190915215156060820152608001610459565b3480156106e6575f5ffd5b506003546104f1906001600160a01b031681565b348015610705575f5ffd5b5061044f6107143660046139e4565b61172b565b348015610724575f5ffd5b506025546104f1906001600160a01b031681565b348015610743575f5ffd5b506011546104f1906001600160a01b031681565b348015610762575f5ffd5b506104f1732536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b348015610789575f5ffd5b50610481610798366004613970565b611aa0565b3480156107a8575f5ffd5b506104816107b7366004613992565b611af5565b3480156107c7575f5ffd5b5061044f60055481565b3480156107dc575f5ffd5b506104f17390fc7abb6734df30b9dc726f6f92eefd9c3c7bb281565b348015610803575f5ffd5b506104816108123660046139a9565b611bed565b348015610822575f5ffd5b50610481610831366004613992565b611c00565b348015610841575f5ffd5b5061084a611c3d565b6040516104599493929190613afe565b348015610865575f5ffd5b5060255461087a90600160a01b900460ff1681565b6040519015158152602001610459565b348015610895575f5ffd5b5061044f60105481565b3480156108aa575f5ffd5b5061044f60245481565b3480156108bf575f5ffd5b50610481611dd6565b3480156108d3575f5ffd5b5061044f60215481565b3480156108e8575f5ffd5b5061087a6108f73660046139e4565b602080525f908152604090205460ff1681565b348015610915575f5ffd5b5061044f606481565b348015610929575f5ffd5b50610481610938366004613992565b611de9565b348015610948575f5ffd5b50610481610957366004613992565b611e53565b348015610967575f5ffd5b5061044f600f5481565b34801561097c575f5ffd5b506001546001600160a01b03166104f1565b348015610999575f5ffd5b50610481611fab565b3480156109ad575f5ffd5b506104f16002604360981b0181565b3480156109c7575f5ffd5b5061044f60235481565b3480156109dc575f5ffd5b5061044f600381565b3480156109f0575f5ffd5b5061044f600b5481565b348015610a05575f5ffd5b506104f1732b9712190ce9570c1ca860d55b1623bd88bf96ff81565b348015610a2c575f5ffd5b5061044f600d5481565b348015610a41575f5ffd5b5061044f60135481565b348015610a56575f5ffd5b50610a9d610a65366004613992565b60156020525f9081526040902080546001820154600283015460038401546004850154600590950154939460ff909316939192909186565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610459565b348015610ad5575f5ffd5b5061044f600a5481565b348015610aea575f5ffd5b50610481612010565b348015610afe575f5ffd5b5060065461087a9060ff1681565b348015610b17575f5ffd5b5060145461087a9060ff1681565b348015610b30575f5ffd5b5061044f60265481565b348015610b45575f5ffd5b506004546104f1906001600160a01b031681565b348015610b64575f5ffd5b50610b6d612455565b60408051938452602084019290925290820152606001610459565b348015610b93575f5ffd5b506002546104f1906001600160a01b031681565b348015610bb2575f5ffd5b5061044f601a5481565b348015610bc7575f5ffd5b506104f1610bd6366004613992565b612487565b348015610be6575f5ffd5b5061044f60295481565b348015610bfb575f5ffd5b50610481610c0a366004613b55565b6124af565b348015610c1a575f5ffd5b5061087a610c29366004613b92565b602260209081525f928352604080842090915290825290205460ff1681565b348015610c53575f5ffd5b5061044f60075481565b348015610c68575f5ffd5b50610481610c77366004613992565b612654565b348015610c87575f5ffd5b50610481610c96366004613bbc565b6126d0565b348015610ca6575f5ffd5b50610481610cb53660046139e4565b61285b565b348015610cc5575f5ffd5b50610cfa610cd4366004613b92565b601660209081525f92835260408084209091529082529020805460019091015460ff1682565b60408051928352901515602083015201610459565b348015610d1a575f5ffd5b50610481610d293660046139e4565b6128e0565b348015610d39575f5ffd5b5061048161295c565b610481610d50366004613be4565b612a40565b348015610d60575f5ffd5b5061044f60085481565b348015610d75575f5ffd5b50610481610d84366004613992565b612d52565b348015610d94575f5ffd5b5061044f60285481565b348015610da9575f5ffd5b50610481610db83660046139e4565b612da1565b348015610dc8575f5ffd5b50610481612dde565b348015610ddc575f5ffd5b5061044f60095481565b348015610df1575f5ffd5b50610481610e003660046139e4565b612ea6565b610e0d612f58565b6006805460ff19168215159081179091556040519081527f752d7e161ff5146f80e3820893176eb40532811e5e20400dfdde57455213706a906020015b60405180910390a150565b5f5f5f5f84118015610e68575060648411155b610eab5760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081c1bdbdb081251608a1b60448201526064015b60405180910390fd5b5f848152601560205260409020600481015460145460ff168015610ed0575085600854145b602454935093509350509193909250565b6017602052815f5260405f208181548110610efa575f80fd5b5f918252602090912001546001600160a01b03169150829050565b601b8160058110610f24575f80fd5b01546001600160a01b0316905081565b60025460405163102c61db60e11b81523360048201526001600160a01b0390911690632058c3b690602401602060405180830381865afa158015610f7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9e9190613c12565b610fba5760405162461bcd60e51b8152600401610ea290613c2d565b60145460ff16156110025760405162461bcd60e51b81526020600482015260126024820152714d696e696e6720696e2070726f677265737360701b6044820152606401610ea2565b6008545f90815260156020526040902080546110565760405162461bcd60e51b81526020600482015260136024820152724e6f206465706f7369747320746f206d696e6560681b6044820152606401610ea2565b600181015460ff1661109c5760405162461bcd60e51b815260206004820152600f60248201526e141bdbdb081b9bdd081b1bd8dad959608a1b6044820152606401610ea2565b6014805460ff19166001179055601280546001600160a01b0319163390811790915560085460135581546040515f9291905f6040518083038185875af1925050503d805f8114611107576040519150601f19603f3d011682016040523d82523d5f602084013e61110c565b606091505b505090508061115d5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e642066756e647320746f20626f7400000000006044820152606401610ea2565b602454825460408051928352602083019190915233908201527f677b28c00e1df8ed0bed5e22ae5a2035f0701672bfa215b9809b6d0155e60c56906060015b60405180910390a15050565b6111b0612f58565b6001600160a01b0381166111d65760405162461bcd60e51b8152600401610ea290613c55565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b604080516064808252610ca08201909252606091829182918291829160208201610c80803683375050604080516064808252610ca08201909252929750905060208201610c80803683375050604080516064808252610ca08201909252929650905060208201610c80803683375050604080516064808252610ca08201909252929550905060208201610c80803683375050604080516064808252610ca08201909252929450905060208201610c80803683370190505090505f60015b606481116113e4575f8181526016602090815260408083206001600160a01b038c16845290915290208054156113d157818884815181106112f8576112f8613c7e565b602002602001018181525050805f015487848151811061131a5761131a613c7e565b60209081029190910101526001810154865160ff9091169087908590811061134457611344613c7e565b9115156020928302919091018201525f83815260159091526040902060010154855160ff9091169086908590811061137e5761137e613c7e565b9115156020928302919091019091015260145460ff1680156113a1575081600854145b8484815181106113b3576113b3613c7e565b91151560209283029190910190910152826113cd81613ca6565b9350505b50806113dc81613ca6565b9150506112b5565b508086528085528084528083528082525091939590929450565b611406612f58565b60065460ff166114585760405162461bcd60e51b815260206004820152601760248201527f436f6e7472616374206d757374206265207061757365640000000000000000006044820152606401610ea2565b5f811161149b5760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420706f6f6c2073697a6560781b6044820152606401610ea2565b47156114e25760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206d75737420626520656d70747960501b6044820152606401610ea2565b60015b606481116115a4575f8181526015602052604090206001015460ff16156115415760405162461bcd60e51b815260206004820152601060248201526f141bdbdb1cc8185c99481b1bd8dad95960821b6044820152606401610ea2565b5f81815260156020526040902054156115925760405162461bcd60e51b8152602060048201526013602482015272506f6f6c732068617665206465706f7369747360681b6044820152606401610ea2565b8061159c81613ca6565b9150506114e5565b5060058190556040518181527f26511ca45be0d4875d9b7e537ac00b167db8490791a33ce6220f729c3b4b1d6d90602001610e4a565b5f5f5f5f5f5f5f5f881180156115f1575060648811155b61162f5760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081c1bdbdb081251608a1b6044820152606401610ea2565b5f888152601560209081526040808320600181015481546002830154600384015460179096529390952054601454929560ff92831695909493909216801561167857508d600854145b600490960154949e939d50919b50995097509195509350915050565b600554604080516064808252610ca082019092526001916060919060208201610c808036833701905050905060015b60648111611725575f818152601560205260409020600181015460ff16156116e9575f93505b8054836116f7600185613cbe565b8151811061170757611707613c7e565b6020908102919091010152508061171d81613ca6565b9150506116c3565b50909192565b6040516370a0823160e01b81526001600160a01b03821660048201525f908190732b9712190ce9570c1ca860d55b1623bd88bf96ff906370a0823190602401602060405180830381865afa158015611785573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a99190613cd1565b6040516370a0823160e01b81526001600160a01b03851660048201529091505f907390fc7abb6734df30b9dc726f6f92eefd9c3c7bb2906370a0823190602401602060405180830381865afa158015611804573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118289190613cd1565b90506010548210158061183d57506010548110155b6118895760405162461bcd60e51b815260206004820152601c60248201527f4d75737420686176652031306b204b4f4e4b206f722073744b4f4e4b000000006044820152606401610ea2565b600b5460295482106118be576118bb6127106118b5600a546127106118ae9190613cbe565b8490612f85565b90612f99565b90505b5f805b601954811015611a73575f601982815481106118df576118df613c7e565b5f9182526020808320909101546001600160a01b039081168084526018835260409384902084516080810186528154909316835260018101549383019390935260029092015460ff80821615801595840195909552610100909104161515606082015290925090611a69578060600151156119e1576040516370a0823160e01b81526001600160a01b038a811660048301525f91908416906370a0823190602401602060405180830381865afa15801561199b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bf9190613cd1565b1180156119cf5750838160200151115b156119dc57806020015193505b611a69565b6040516370a0823160e01b81526001600160a01b038a811660048301525f91908416906370a0823190602401602060405180830381865afa158015611a28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613cd1565b118015611a5c5750838160200151115b15611a6957806020015193505b50506001016118c1565b508015611a9757611a946127106118b5611a8d8483613cbe565b8590612f85565b91505b50949350505050565b611aa8612f58565b60258054821515600160a01b0260ff60a01b199091161790556040517fbdfddb6ae83f3dafb9f94ca774388421bf5573b5c8763dbab2f96511c87c639990610e4a90831515815260200190565b6012546001600160a01b031633148015611b11575060145460ff165b611b2d5760405162461bcd60e51b8152600401610ea290613c2d565b60018110158015611b4057506103e88111155b611b815760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642062617463682073697a6560701b6044820152606401610ea2565b60035460408051630e49303160e01b81526004810184905260248101919091525f60448201526001600160a01b0390911690630e493031906064015b5f604051808303815f87803b158015611bd4575f5ffd5b505af1158015611be6573d5f5f3e3d5ffd5b5050505050565b611bf5612f58565b600b91909155600a55565b611c08612f58565b60108190556040518181527f012688e2f4a63cb758d04a7a991d09df928807a7c418a629d72071b2c6b2accc90602001610e4a565b604080516064808252610ca082019092526060918291829182919060208201610c80803683375050604080516064808252610ca08201909252929650905060208201610c80803683375050604080516064808252610ca08201909252929550905060208201610c80803683375050604080516064808252610ca08201909252929450905060208201610c80803683370190505090505f5b6064811015611dcf575f601581611cec846001613ce8565b81526020019081526020015f209050805f0154868381518110611d1157611d11613c7e565b60209081029190910101526001810154855160ff90911690869084908110611d3b57611d3b613c7e565b9115156020928302919091019091015260145460ff168015611d685750611d63826001613ce8565b600854145b848381518110611d7a57611d7a613c7e565b9115156020928302919091019091015260175f611d98846001613ce8565b81526020019081526020015f2080549050838381518110611dbb57611dbb613c7e565b602090810291909101015250600101611cd4565b5090919293565b611dde612f58565b611de75f612fa4565b565b611df1612f58565b6064811115611e4e5760405162461bcd60e51b8152602060048201526024808201527f50657263656e74616765206d757374206265206265747765656e203020616e646044820152630203130360e41b6064820152608401610ea2565b601a55565b611e5b612f58565b600f54811115611ead5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e74206c6566746f76657220485950455253000000006044820152606401610ea2565b600f54611eba9082612ff5565b600f556004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611f0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f309190613c12565b611f755760405162461bcd60e51b8152602060048201526016602482015275121654115494c81d1c985b9cd9995c8819985a5b195960521b6044820152606401610ea2565b60408051338152602081018390527f0ecf5be15240a847a9f3963fef8cbc9eda7cf7caed536d6971f4e7f3c6a5e0069101610e4a565b611fb3612f58565b60235415611ff65760405162461bcd60e51b815260206004820152601060248201526f50726f706f73616c2070656e64696e6760801b6044820152606401610ea2565b60218054905f61200583613ca6565b90915550505f602355565b6012546001600160a01b03163314801561202c575060145460ff165b6120485760405162461bcd60e51b8152600401610ea290613c2d565b6008545f908152601560205260408082206004805492516370a0823160e01b815230918101919091529092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156120a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120c69190613cd1565b905080156120f857600d546120db9082613000565b600d556008546120eb908261300b565b6004820181905560288190555b600482015460245460135460408051928352602083019190915281018290527f0de03e91c741ab97e64c944eee97ccacb3639b1309c68360a0c2de1f563aea059060600160405180910390a15f61216360646118b5601a548760050154612f8590919063ffffffff16565b90505f61217d828660050154612ff590919063ffffffff16565b905081156122525760025460408051600481526024810182526020810180516001600160e01b0316631365388360e31b17905290515f926001600160a01b03169185916121ca9190613cfb565b5f6040518083038185875af1925050503d805f8114612204576040519150601f19603f3d011682016040523d82523d5f602084013e612209565b606091505b50509050806122505760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610ea2565b505b80156122fa576025546040515f916001600160a01b03169083908381818185875af1925050503d805f81146122a2576040519150601f19603f3d011682016040523d82523d5f602084013e6122a7565b606091505b50509050806122f85760405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f2073656e642072656d61696e696e6720666565730000006044820152606401610ea2565b505b6123026131f8565b5f80865560018601805460ff19169055600286018190556003860181905560048601819055600586018190556008548152601760205260408120905b81548110156123a65760165f60085481526020019081526020015f205f83838154811061236d5761236d613c7e565b5f9182526020808320909101546001600160a01b0316835282019290925260400181209081556001908101805460ff191690550161233e565b506008545f9081526017602052604081206123c091613935565b6064600854146123dd576008546123d8906001613ce8565b6123e0565b60015b6008556014805460ff19169055601280546001600160a01b031916905560245460408051918252602082018790527f5e63f04f01459b14a84df2fde69183c88b8cc3ba2b1a5b7d9e7b6ef5b3c0ad44910160405180910390a160248054905f61244883613ca6565b9190505550505050505050565b5f5f5f5f60245411612467575f612476565b60016024546124769190613cbe565b600d54602754925092509250909192565b60198181548110612496575f80fd5b5f918252602090912001546001600160a01b0316905081565b6124b7612f58565b6113888211156124fc5760405162461bcd60e51b815260206004820152601060248201526f13585e080d4c0948191a5cd8dbdd5b9d60821b6044820152606401610ea2565b6001600160a01b0383165f9081526018602052604090206002015460ff16156125575760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481859191959609a1b6044820152606401610ea2565b604080516080810182526001600160a01b038581168083526020808401878152600185870181815288151560608089018281525f888152601888528b81209a518b549a166001600160a01b03199a8b16178b5595518a860155925160029099018054935115156101000261ff00199a15159a909a1661ffff1990941693909317989098179091556019805492830181559092527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695018054909416831790935584519182528101869052928301527f6e9eac1d80a491d4b9ce5dfd25ec88d449f7f61ce9dcb87d0e5104a7d0af2173910160405180910390a1505050565b61265c612f58565b5f811161269b5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081b1a5b5a5d609a1b6044820152606401610ea2565b60268190556040518181527f514bf0f65cb844af227a51e123dbb8b5be8fac221f8feeb9d20591e81c46e50b90602001610e4a565b6126d8612f58565b6001600160a01b0382165f90815260208052604090205460ff16801561271557506001600160a01b0381165f90815260208052604090205460ff16155b6127535760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964207369676e65727360881b6044820152606401610ea2565b6001600160a01b0381166127795760405162461bcd60e51b8152600401610ea290613c55565b5f5b60058110156127f157826001600160a01b0316601b82600581106127a1576127a1613c7e565b01546001600160a01b0316036127e95781601b82600581106127c5576127c5613c7e565b0180546001600160a01b0319166001600160a01b03929092169190911790556127f1565b60010161277b565b506001600160a01b038281165f81815260208080526040808320805460ff1990811690915594861680845292819020805490951660011790945583519283528201527f2d025324f0a785e8c12d0a0d91a9caa49df4ef20ff87e0df7213a1d4f3157beb910161119c565b612863612f58565b6001600160a01b0381166128895760405162461bcd60e51b8152600401610ea290613c55565b601180546001600160a01b0319166001600160a01b0383169081179091556040516336b91f2b60e01b81526004810191909152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b90602401611bbd565b6128e8612f58565b6001600160a01b03811661290e5760405162461bcd60e51b8152600401610ea290613c55565b602580546001600160a01b0319166001600160a01b0383169081179091556040519081527f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc290602001610e4a565b335f90815260208052604090205460ff166129a85760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309039b4b3b732b960a11b6044820152606401610ea2565b6021545f90815260226020908152604080832033845290915290205460ff1615612a055760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481cda59db995960921b6044820152606401610ea2565b6021545f9081526022602090815260408083203384529091528120805460ff191660011790556023805491612a3983613ca6565b9190505550565b612a4861347f565b60065460ff1615612a905760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b6044820152606401610ea2565b5f8211612ad75760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590819195c1bdcda5d0818dbdd5b9d605a1b6044820152606401610ea2565b5f612ae13361172b565b90505f81600954612af29190613ce8565b90505f612aff8286612f85565b9050803414612b475760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0811551208185b5bdd5b9d60621b6044820152606401610ea2565b602554600160a01b900460ff1615612bab57602654341115612bab5760405162461bcd60e51b815260206004820152601960248201527f45786365656473206d6178206465706f736974206c696d6974000000000000006044820152606401610ea2565b5f612bc0612bb98588612f85565b3490612ff5565b6007549091505b8115612cec575f8181526015602052604081208054600554919291612beb91612ff5565b90508015612cb0575f818511612c015784612c03565b815b9050612c113385838c6134d6565b612c1b8582612ff5565b9450600554835f015410612caa576001838101805460ff1916909117905560028301546003840154845460408051888152602081019490945283019190915260608201527f4bc8083dd1c3e5ec0ddbfe5bfa4edcf6a8251f2454b1f76e98d776a58bee40ea9060800160405180910390a160648414612ca457612c9f846001613ce8565b612ca7565b60015b93505b50612cce565b60648314612cc857612cc3836001613ce8565b612ccb565b60015b92505b8860275f828254612cdf9190613ce8565b90915550612bc792505050565b5f612cf78689612f85565b6007545f90815260156020526040902060050154909150612d189082613000565b6007545f90815260156020526040902060050155600c54612d399082613000565b600c555060075550612d4e92506135e4915050565b5050565b612d5a612f58565b612d6c81670de0b6b3a7640000613d11565b60298190556040519081527f42c772aeb5eb05ed61c4bab5686efd5ed83a2cdb1781737583d9a8c564630c9c90602001610e4a565b612da9612f58565b6001600160a01b038116612dd257604051631e4fbdf760e01b81525f6004820152602401610ea2565b612ddb81612fa4565b50565b612de6612f58565b60036023541015612e395760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e74207369676e6174757265730000000000000000006044820152606401610ea2565b612e416135ea565b5f60238190555b6005811015612ddb576021545f90815260226020526040812081601b8460058110612e7557612e75613c7e565b01546001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101612e48565b612eae612f58565b6001600160a01b0381165f9081526018602052604090206002015460ff16612f055760405162461bcd60e51b815260206004820152600a6024820152694e6f742061637469766560b01b6044820152606401610ea2565b6001600160a01b0381165f81815260186020908152604091829020600201805460ff1916905590519182527fe3d73073356b89f23adf77ab42c7f4227575b6f8866f2cf44df1e1df998e02499101610e4a565b6001546001600160a01b03163314611de75760405163118cdaa760e01b8152336004820152602401610ea2565b5f612f908284613d11565b90505b92915050565b5f612f908284613d28565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f612f908284613cbe565b5f612f908284613ce8565b80158061302357505f82815260156020526040902054155b1561302c575050565b5f828152601760205260408120815b81548110156131cd575f82828154811061305757613057613c7e565b5f9182526020808320909101548883526016825260408084206001600160a01b039092168085529190925291205490915080156131c3575f878152601560205260408120546130aa906118b5848a612f85565b905080156131c1576004805460405163a9059cbb60e01b81526001600160a01b03868116938201939093526024810184905291169063a9059cbb906044016020604051808303815f875af1158015613104573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131289190613c12565b6131665760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610ea2565b6131708682613000565b9550826001600160a01b03167f53118bff2fb56701752f5bf54053d24fb83cec92f9f6ce664b90c38a2991caa4826024546040516131b8929190918252602082015260400190565b60405180910390a25b505b505060010161303b565b505f6131d98484612ff5565b90508015611be657600f546131ee9082613000565b600f555050505050565b60405163430021db60e11b81523060048201819052602482015247906002604360981b019063860043b6906044016020604051808303815f875af1158015613242573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132669190613cd1565b50475f6132738284612ff5565b60405163662aa11d60e01b8152306004820181905260248201529091506002604360981b019063662aa11d906044016020604051808303815f875af11580156132be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132e29190613cd1565b50475f6132ef8285612ff5565b90505f6132fc8483613000565b905080156134775760025460408051600481526024810182526020810180516001600160e01b031663f128c71760e01b17905290515f926001600160a01b03169184916133499190613cfb565b5f6040518083038185875af1925050503d805f8114613383576040519150601f19603f3d011682016040523d82523d5f602084013e613388565b606091505b50509050806133d95760405162461bcd60e51b815260206004820152601c60248201527f4661696c656420746f2073656e64207969656c6420616e6420676173000000006044820152606401610ea2565b60025f9054906101000a90046001600160a01b03166001600160a01b03166338ec8b426040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613425575f5ffd5b505af1158015613437573d5f5f3e3d5ffd5b505060408051888152602081018790527f3842b2195b08a05bc0b797bee80aa3f1bcd53f79cf77b1d4a99bfd41b93ae2a7935001905060405180910390a1505b505050505050565b60025f54036134d05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ea2565b60025f55565b5f838152601560209081526040808320601683528184206001600160a01b038916855290925282205490910361353d575f8481526017602090815260408220805460018101825590835291200180546001600160a01b0319166001600160a01b0387161790555b5f8481526016602090815260408083206001600160a01b03891684529091529020546135699084613000565b5f8581526016602090815260408083206001600160a01b038a1684529091529020908155600101805460ff191683151517905580546135a89084613000565b815581156135c95760028101546135bf9084613000565b6002820155611be6565b60038101546135d89084613000565b60038201555050505050565b60015f55565b600480546040516370a0823160e01b8152309281019290925247915f916001600160a01b0316906370a0823190602401602060405180830381865afa158015613635573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136599190613cd1565b90505f61366e6001546001600160a01b031690565b6001600160a01b0316836040515f6040518083038185875af1925050503d805f81146136b5576040519150601f19603f3d011682016040523d82523d5f602084013e6136ba565b606091505b50509050806137015760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610ea2565b6004546001600160a01b031663a9059cbb6137246001546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af115801561376e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137929190613c12565b6137d75760405162461bcd60e51b8152602060048201526016602482015275121654115494c81d1c985b9cd9995c8819985a5b195960521b6044820152606401610ea2565b602154604080519182526020820185905281018390527fe1afeafeedce22783df08e2c5f38d287bc3bae1e0ee7d12937dc80ebf7db7a3c9060600160405180910390a160015b606481116138f8575f81815260156020908152604080832083815560018101805460ff1916905560028101849055600381018490556004810184905560050183905560179091528120905b81548110156138ce5760165f8481526020019081526020015f205f83838154811061389557613895613c7e565b5f9182526020808320909101546001600160a01b0316835282019290925260400181209081556001908101805460ff1916905501613868565b505f8281526017602052604081206138e591613935565b50806138f081613ca6565b91505061381d565b50505f600e819055600c819055600d8190556013819055600f8190556014805460ff19169055601280546001600160a01b03191690556027555050565b5080545f8255905f5260205f2090810190612ddb91905b8082111561395f575f815560010161394c565b5090565b8015158114612ddb575f5ffd5b5f60208284031215613980575f5ffd5b813561398b81613963565b9392505050565b5f602082840312156139a2575f5ffd5b5035919050565b5f5f604083850312156139ba575f5ffd5b50508035926020909101359150565b80356001600160a01b03811681146139df575f5ffd5b919050565b5f602082840312156139f4575f5ffd5b612f90826139c9565b5f8151808452602084019350602083015f5b82811015613a2d578151865260209586019590910190600101613a0f565b5093949350505050565b5f8151808452602084019350602083015f5b82811015613a2d5781511515865260209586019590910190600101613a49565b60a081525f613a7b60a08301886139fd565b8281036020840152613a8d81886139fd565b90508281036040840152613aa18187613a37565b90508281036060840152613ab58186613a37565b90508281036080840152613ac98185613a37565b98975050505050505050565b8381528215156020820152606060408201525f613af560608301846139fd565b95945050505050565b608081525f613b1060808301876139fd565b8281036020840152613b228187613a37565b90508281036040840152613b368186613a37565b90508281036060840152613b4a81856139fd565b979650505050505050565b5f5f5f60608486031215613b67575f5ffd5b613b70846139c9565b9250602084013591506040840135613b8781613963565b809150509250925092565b5f5f60408385031215613ba3575f5ffd5b82359150613bb3602084016139c9565b90509250929050565b5f5f60408385031215613bcd575f5ffd5b613bd6836139c9565b9150613bb3602084016139c9565b5f5f60408385031215613bf5575f5ffd5b823591506020830135613c0781613963565b809150509250929050565b5f60208284031215613c22575f5ffd5b815161398b81613963565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201613cb757613cb7613c92565b5060010190565b81810381811115612f9357612f93613c92565b5f60208284031215613ce1575f5ffd5b5051919050565b80820180821115612f9357612f93613c92565b5f82518060208501845e5f920191825250919050565b8082028115828204841417612f9357612f93613c92565b5f82613d4257634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220acfbf7f13f49faf28c4151b8b0d3a391438cbeeab0d722c18f93f427ed7f90a164736f6c634300081c00330000000000000000000000003e6109d1a62e16c709444b49004f513b0d5978d20000000000000000000000004221166ca2ce6e9a6ac505436f68437f6b578614000000000000000000000000f8797db8a9eed416ca14e8dfaede2bf4e1aabfc3000000000000000000000000f8797db8a9eed416ca14e8dfaede2bf4e1aabfc300000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000044127ec6b8dd04c63c58c70276628034d697731b00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044127ec6b8dd04c63c58c70276628034d697731b000000000000000000000000705e45c73a854a06fe64c9bd3bbf8be1edd93274000000000000000000000000798ed654f4d9599b99f94f4a61609b7a7cfbd200000000000000000000000000b2d2ecc7d94cfb8e70f60aeb97bf7f4c4cb8ef280000000000000000000000007f448f0435803744bcda76afed4f17b0a6e0fb23

Deployed Bytecode

0x60806040526004361061042f575f3560e01c80638da5cb5b1161022b578063d3e4047a11610129578063e74b981b116100b3578063f2c1b7e411610078578063f2c1b7e414610d89578063f2fde38b14610d9e578063f4993bbd14610dbd578063f76e947b14610dd1578063fe74801514610de6575f5ffd5b8063e74b981b14610d0f578063e994561814610d2e578063ea6c2e8414610d42578063ec5bc0b214610d55578063f1511da814610d6a575f5ffd5b8063dda26edf116100f9578063dda26edf14610c48578063dfe6083514610c5d578063e3d9109f14610c7c578063e72328ce14610c9b578063e726d30b14610cba575f5ffd5b8063d3e4047a14610bbc578063d54720fb14610bdb578063d87f44fb14610bf0578063dca7bbe614610c0f575f5ffd5b8063ac4afa38116101b5578063b63c44e71161017a578063b63c44e714610b25578063b6e19e0614610b3a578063bbb8518814610b59578063cd446e2214610b88578063cdd78cfc14610ba7575f5ffd5b8063ac4afa3814610a4b578063acddb1c014610aca578063b0a8d5ca14610adf578063b187bd2614610af3578063b3381df614610b0c575f5ffd5b80639ac18b19116101fb5780639ac18b19146109d15780639ec9ac41146109e5578063a28a01cf146109fa578063a64f9ff614610a21578063ac332e2714610a36575f5ffd5b80638da5cb5b14610971578063941aef641461098e57806397d75776146109a2578063992f9075146109bc575f5ffd5b806347fb45531161033857806359e1a699116102c25780637df73e27116102875780637df73e27146108dd578063813584981461090a5780638333903e1461091e57806386a8f1ca1461093d57806389ef75a21461095c575f5ffd5b806359e1a6991461085a5780635c0252491461088a5780636597a1301461089f578063715018a6146108b45780637a86b282146108c8575f5ffd5b80634ec18db9116103085780634ec18db9146107bc57806350891ecf146107d157806352f7c988146107f857806358a34fee1461081757806358d70cf614610836575f5ffd5b806347fb4553146107385780634b8f9025146107575780634d1f287d1461077e5780634d4748981461079d575f5ffd5b80632ab38b5f116103b95780633da79c15116103895780633da79c151461063a5780633efeb0ea14610659578063457fb905146106db578063465f5eb8146106fa5780634690484014610719575f5ffd5b80632ab38b5f1461058b5780632f380b35146105aa578063336535281461060257806337c0892314610625575f5ffd5b80631d86e01b116103ff5780631d86e01b146104d25780632079fb9a1461050957806321b79d98146105285780632a1501271461053c5780632a6bc2dd1461055b575f5ffd5b8063068ed2f51461043a57806316c38b3c14610462578063194a4e7e146104835780631b844f2314610498575f5ffd5b3661043657005b5f5ffd5b348015610445575f5ffd5b5061044f600e5481565b6040519081526020015b60405180910390f35b34801561046d575f5ffd5b5061048161047c366004613970565b610e05565b005b34801561048e575f5ffd5b5061044f600c5481565b3480156104a3575f5ffd5b506104b76104b2366004613992565b610e55565b60408051938452911515602084015290820152606001610459565b3480156104dd575f5ffd5b506104f16104ec3660046139a9565b610ee1565b6040516001600160a01b039091168152602001610459565b348015610514575f5ffd5b506104f1610523366004613992565b610f15565b348015610533575f5ffd5b50610481610f34565b348015610547575f5ffd5b506104816105563660046139e4565b6111a8565b348015610566575f5ffd5b5061057a6105753660046139e4565b6111f8565b604051610459959493929190613a69565b348015610596575f5ffd5b506104816105a5366004613992565b6113fe565b3480156105b5575f5ffd5b506105c96105c4366004613992565b6115da565b60408051971515885260208801969096529486019390935260608501919091526080840152151560a083015260c082015260e001610459565b34801561060d575f5ffd5b50610616611694565b60405161045993929190613ad5565b348015610630575f5ffd5b5061044f60275481565b348015610645575f5ffd5b506012546104f1906001600160a01b031681565b348015610664575f5ffd5b506106a96106733660046139e4565b60186020525f90815260409020805460018201546002909201546001600160a01b03909116919060ff8082169161010090041684565b604080516001600160a01b03909516855260208501939093529015159183019190915215156060820152608001610459565b3480156106e6575f5ffd5b506003546104f1906001600160a01b031681565b348015610705575f5ffd5b5061044f6107143660046139e4565b61172b565b348015610724575f5ffd5b506025546104f1906001600160a01b031681565b348015610743575f5ffd5b506011546104f1906001600160a01b031681565b348015610762575f5ffd5b506104f1732536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b348015610789575f5ffd5b50610481610798366004613970565b611aa0565b3480156107a8575f5ffd5b506104816107b7366004613992565b611af5565b3480156107c7575f5ffd5b5061044f60055481565b3480156107dc575f5ffd5b506104f17390fc7abb6734df30b9dc726f6f92eefd9c3c7bb281565b348015610803575f5ffd5b506104816108123660046139a9565b611bed565b348015610822575f5ffd5b50610481610831366004613992565b611c00565b348015610841575f5ffd5b5061084a611c3d565b6040516104599493929190613afe565b348015610865575f5ffd5b5060255461087a90600160a01b900460ff1681565b6040519015158152602001610459565b348015610895575f5ffd5b5061044f60105481565b3480156108aa575f5ffd5b5061044f60245481565b3480156108bf575f5ffd5b50610481611dd6565b3480156108d3575f5ffd5b5061044f60215481565b3480156108e8575f5ffd5b5061087a6108f73660046139e4565b602080525f908152604090205460ff1681565b348015610915575f5ffd5b5061044f606481565b348015610929575f5ffd5b50610481610938366004613992565b611de9565b348015610948575f5ffd5b50610481610957366004613992565b611e53565b348015610967575f5ffd5b5061044f600f5481565b34801561097c575f5ffd5b506001546001600160a01b03166104f1565b348015610999575f5ffd5b50610481611fab565b3480156109ad575f5ffd5b506104f16002604360981b0181565b3480156109c7575f5ffd5b5061044f60235481565b3480156109dc575f5ffd5b5061044f600381565b3480156109f0575f5ffd5b5061044f600b5481565b348015610a05575f5ffd5b506104f1732b9712190ce9570c1ca860d55b1623bd88bf96ff81565b348015610a2c575f5ffd5b5061044f600d5481565b348015610a41575f5ffd5b5061044f60135481565b348015610a56575f5ffd5b50610a9d610a65366004613992565b60156020525f9081526040902080546001820154600283015460038401546004850154600590950154939460ff909316939192909186565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610459565b348015610ad5575f5ffd5b5061044f600a5481565b348015610aea575f5ffd5b50610481612010565b348015610afe575f5ffd5b5060065461087a9060ff1681565b348015610b17575f5ffd5b5060145461087a9060ff1681565b348015610b30575f5ffd5b5061044f60265481565b348015610b45575f5ffd5b506004546104f1906001600160a01b031681565b348015610b64575f5ffd5b50610b6d612455565b60408051938452602084019290925290820152606001610459565b348015610b93575f5ffd5b506002546104f1906001600160a01b031681565b348015610bb2575f5ffd5b5061044f601a5481565b348015610bc7575f5ffd5b506104f1610bd6366004613992565b612487565b348015610be6575f5ffd5b5061044f60295481565b348015610bfb575f5ffd5b50610481610c0a366004613b55565b6124af565b348015610c1a575f5ffd5b5061087a610c29366004613b92565b602260209081525f928352604080842090915290825290205460ff1681565b348015610c53575f5ffd5b5061044f60075481565b348015610c68575f5ffd5b50610481610c77366004613992565b612654565b348015610c87575f5ffd5b50610481610c96366004613bbc565b6126d0565b348015610ca6575f5ffd5b50610481610cb53660046139e4565b61285b565b348015610cc5575f5ffd5b50610cfa610cd4366004613b92565b601660209081525f92835260408084209091529082529020805460019091015460ff1682565b60408051928352901515602083015201610459565b348015610d1a575f5ffd5b50610481610d293660046139e4565b6128e0565b348015610d39575f5ffd5b5061048161295c565b610481610d50366004613be4565b612a40565b348015610d60575f5ffd5b5061044f60085481565b348015610d75575f5ffd5b50610481610d84366004613992565b612d52565b348015610d94575f5ffd5b5061044f60285481565b348015610da9575f5ffd5b50610481610db83660046139e4565b612da1565b348015610dc8575f5ffd5b50610481612dde565b348015610ddc575f5ffd5b5061044f60095481565b348015610df1575f5ffd5b50610481610e003660046139e4565b612ea6565b610e0d612f58565b6006805460ff19168215159081179091556040519081527f752d7e161ff5146f80e3820893176eb40532811e5e20400dfdde57455213706a906020015b60405180910390a150565b5f5f5f5f84118015610e68575060648411155b610eab5760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081c1bdbdb081251608a1b60448201526064015b60405180910390fd5b5f848152601560205260409020600481015460145460ff168015610ed0575085600854145b602454935093509350509193909250565b6017602052815f5260405f208181548110610efa575f80fd5b5f918252602090912001546001600160a01b03169150829050565b601b8160058110610f24575f80fd5b01546001600160a01b0316905081565b60025460405163102c61db60e11b81523360048201526001600160a01b0390911690632058c3b690602401602060405180830381865afa158015610f7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9e9190613c12565b610fba5760405162461bcd60e51b8152600401610ea290613c2d565b60145460ff16156110025760405162461bcd60e51b81526020600482015260126024820152714d696e696e6720696e2070726f677265737360701b6044820152606401610ea2565b6008545f90815260156020526040902080546110565760405162461bcd60e51b81526020600482015260136024820152724e6f206465706f7369747320746f206d696e6560681b6044820152606401610ea2565b600181015460ff1661109c5760405162461bcd60e51b815260206004820152600f60248201526e141bdbdb081b9bdd081b1bd8dad959608a1b6044820152606401610ea2565b6014805460ff19166001179055601280546001600160a01b0319163390811790915560085460135581546040515f9291905f6040518083038185875af1925050503d805f8114611107576040519150601f19603f3d011682016040523d82523d5f602084013e61110c565b606091505b505090508061115d5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e642066756e647320746f20626f7400000000006044820152606401610ea2565b602454825460408051928352602083019190915233908201527f677b28c00e1df8ed0bed5e22ae5a2035f0701672bfa215b9809b6d0155e60c56906060015b60405180910390a15050565b6111b0612f58565b6001600160a01b0381166111d65760405162461bcd60e51b8152600401610ea290613c55565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b604080516064808252610ca08201909252606091829182918291829160208201610c80803683375050604080516064808252610ca08201909252929750905060208201610c80803683375050604080516064808252610ca08201909252929650905060208201610c80803683375050604080516064808252610ca08201909252929550905060208201610c80803683375050604080516064808252610ca08201909252929450905060208201610c80803683370190505090505f60015b606481116113e4575f8181526016602090815260408083206001600160a01b038c16845290915290208054156113d157818884815181106112f8576112f8613c7e565b602002602001018181525050805f015487848151811061131a5761131a613c7e565b60209081029190910101526001810154865160ff9091169087908590811061134457611344613c7e565b9115156020928302919091018201525f83815260159091526040902060010154855160ff9091169086908590811061137e5761137e613c7e565b9115156020928302919091019091015260145460ff1680156113a1575081600854145b8484815181106113b3576113b3613c7e565b91151560209283029190910190910152826113cd81613ca6565b9350505b50806113dc81613ca6565b9150506112b5565b508086528085528084528083528082525091939590929450565b611406612f58565b60065460ff166114585760405162461bcd60e51b815260206004820152601760248201527f436f6e7472616374206d757374206265207061757365640000000000000000006044820152606401610ea2565b5f811161149b5760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420706f6f6c2073697a6560781b6044820152606401610ea2565b47156114e25760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206d75737420626520656d70747960501b6044820152606401610ea2565b60015b606481116115a4575f8181526015602052604090206001015460ff16156115415760405162461bcd60e51b815260206004820152601060248201526f141bdbdb1cc8185c99481b1bd8dad95960821b6044820152606401610ea2565b5f81815260156020526040902054156115925760405162461bcd60e51b8152602060048201526013602482015272506f6f6c732068617665206465706f7369747360681b6044820152606401610ea2565b8061159c81613ca6565b9150506114e5565b5060058190556040518181527f26511ca45be0d4875d9b7e537ac00b167db8490791a33ce6220f729c3b4b1d6d90602001610e4a565b5f5f5f5f5f5f5f5f881180156115f1575060648811155b61162f5760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081c1bdbdb081251608a1b6044820152606401610ea2565b5f888152601560209081526040808320600181015481546002830154600384015460179096529390952054601454929560ff92831695909493909216801561167857508d600854145b600490960154949e939d50919b50995097509195509350915050565b600554604080516064808252610ca082019092526001916060919060208201610c808036833701905050905060015b60648111611725575f818152601560205260409020600181015460ff16156116e9575f93505b8054836116f7600185613cbe565b8151811061170757611707613c7e565b6020908102919091010152508061171d81613ca6565b9150506116c3565b50909192565b6040516370a0823160e01b81526001600160a01b03821660048201525f908190732b9712190ce9570c1ca860d55b1623bd88bf96ff906370a0823190602401602060405180830381865afa158015611785573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a99190613cd1565b6040516370a0823160e01b81526001600160a01b03851660048201529091505f907390fc7abb6734df30b9dc726f6f92eefd9c3c7bb2906370a0823190602401602060405180830381865afa158015611804573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118289190613cd1565b90506010548210158061183d57506010548110155b6118895760405162461bcd60e51b815260206004820152601c60248201527f4d75737420686176652031306b204b4f4e4b206f722073744b4f4e4b000000006044820152606401610ea2565b600b5460295482106118be576118bb6127106118b5600a546127106118ae9190613cbe565b8490612f85565b90612f99565b90505b5f805b601954811015611a73575f601982815481106118df576118df613c7e565b5f9182526020808320909101546001600160a01b039081168084526018835260409384902084516080810186528154909316835260018101549383019390935260029092015460ff80821615801595840195909552610100909104161515606082015290925090611a69578060600151156119e1576040516370a0823160e01b81526001600160a01b038a811660048301525f91908416906370a0823190602401602060405180830381865afa15801561199b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bf9190613cd1565b1180156119cf5750838160200151115b156119dc57806020015193505b611a69565b6040516370a0823160e01b81526001600160a01b038a811660048301525f91908416906370a0823190602401602060405180830381865afa158015611a28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613cd1565b118015611a5c5750838160200151115b15611a6957806020015193505b50506001016118c1565b508015611a9757611a946127106118b5611a8d8483613cbe565b8590612f85565b91505b50949350505050565b611aa8612f58565b60258054821515600160a01b0260ff60a01b199091161790556040517fbdfddb6ae83f3dafb9f94ca774388421bf5573b5c8763dbab2f96511c87c639990610e4a90831515815260200190565b6012546001600160a01b031633148015611b11575060145460ff165b611b2d5760405162461bcd60e51b8152600401610ea290613c2d565b60018110158015611b4057506103e88111155b611b815760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642062617463682073697a6560701b6044820152606401610ea2565b60035460408051630e49303160e01b81526004810184905260248101919091525f60448201526001600160a01b0390911690630e493031906064015b5f604051808303815f87803b158015611bd4575f5ffd5b505af1158015611be6573d5f5f3e3d5ffd5b5050505050565b611bf5612f58565b600b91909155600a55565b611c08612f58565b60108190556040518181527f012688e2f4a63cb758d04a7a991d09df928807a7c418a629d72071b2c6b2accc90602001610e4a565b604080516064808252610ca082019092526060918291829182919060208201610c80803683375050604080516064808252610ca08201909252929650905060208201610c80803683375050604080516064808252610ca08201909252929550905060208201610c80803683375050604080516064808252610ca08201909252929450905060208201610c80803683370190505090505f5b6064811015611dcf575f601581611cec846001613ce8565b81526020019081526020015f209050805f0154868381518110611d1157611d11613c7e565b60209081029190910101526001810154855160ff90911690869084908110611d3b57611d3b613c7e565b9115156020928302919091019091015260145460ff168015611d685750611d63826001613ce8565b600854145b848381518110611d7a57611d7a613c7e565b9115156020928302919091019091015260175f611d98846001613ce8565b81526020019081526020015f2080549050838381518110611dbb57611dbb613c7e565b602090810291909101015250600101611cd4565b5090919293565b611dde612f58565b611de75f612fa4565b565b611df1612f58565b6064811115611e4e5760405162461bcd60e51b8152602060048201526024808201527f50657263656e74616765206d757374206265206265747765656e203020616e646044820152630203130360e41b6064820152608401610ea2565b601a55565b611e5b612f58565b600f54811115611ead5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e74206c6566746f76657220485950455253000000006044820152606401610ea2565b600f54611eba9082612ff5565b600f556004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611f0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f309190613c12565b611f755760405162461bcd60e51b8152602060048201526016602482015275121654115494c81d1c985b9cd9995c8819985a5b195960521b6044820152606401610ea2565b60408051338152602081018390527f0ecf5be15240a847a9f3963fef8cbc9eda7cf7caed536d6971f4e7f3c6a5e0069101610e4a565b611fb3612f58565b60235415611ff65760405162461bcd60e51b815260206004820152601060248201526f50726f706f73616c2070656e64696e6760801b6044820152606401610ea2565b60218054905f61200583613ca6565b90915550505f602355565b6012546001600160a01b03163314801561202c575060145460ff165b6120485760405162461bcd60e51b8152600401610ea290613c2d565b6008545f908152601560205260408082206004805492516370a0823160e01b815230918101919091529092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156120a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120c69190613cd1565b905080156120f857600d546120db9082613000565b600d556008546120eb908261300b565b6004820181905560288190555b600482015460245460135460408051928352602083019190915281018290527f0de03e91c741ab97e64c944eee97ccacb3639b1309c68360a0c2de1f563aea059060600160405180910390a15f61216360646118b5601a548760050154612f8590919063ffffffff16565b90505f61217d828660050154612ff590919063ffffffff16565b905081156122525760025460408051600481526024810182526020810180516001600160e01b0316631365388360e31b17905290515f926001600160a01b03169185916121ca9190613cfb565b5f6040518083038185875af1925050503d805f8114612204576040519150601f19603f3d011682016040523d82523d5f602084013e612209565b606091505b50509050806122505760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610ea2565b505b80156122fa576025546040515f916001600160a01b03169083908381818185875af1925050503d805f81146122a2576040519150601f19603f3d011682016040523d82523d5f602084013e6122a7565b606091505b50509050806122f85760405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f2073656e642072656d61696e696e6720666565730000006044820152606401610ea2565b505b6123026131f8565b5f80865560018601805460ff19169055600286018190556003860181905560048601819055600586018190556008548152601760205260408120905b81548110156123a65760165f60085481526020019081526020015f205f83838154811061236d5761236d613c7e565b5f9182526020808320909101546001600160a01b0316835282019290925260400181209081556001908101805460ff191690550161233e565b506008545f9081526017602052604081206123c091613935565b6064600854146123dd576008546123d8906001613ce8565b6123e0565b60015b6008556014805460ff19169055601280546001600160a01b031916905560245460408051918252602082018790527f5e63f04f01459b14a84df2fde69183c88b8cc3ba2b1a5b7d9e7b6ef5b3c0ad44910160405180910390a160248054905f61244883613ca6565b9190505550505050505050565b5f5f5f5f60245411612467575f612476565b60016024546124769190613cbe565b600d54602754925092509250909192565b60198181548110612496575f80fd5b5f918252602090912001546001600160a01b0316905081565b6124b7612f58565b6113888211156124fc5760405162461bcd60e51b815260206004820152601060248201526f13585e080d4c0948191a5cd8dbdd5b9d60821b6044820152606401610ea2565b6001600160a01b0383165f9081526018602052604090206002015460ff16156125575760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481859191959609a1b6044820152606401610ea2565b604080516080810182526001600160a01b038581168083526020808401878152600185870181815288151560608089018281525f888152601888528b81209a518b549a166001600160a01b03199a8b16178b5595518a860155925160029099018054935115156101000261ff00199a15159a909a1661ffff1990941693909317989098179091556019805492830181559092527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695018054909416831790935584519182528101869052928301527f6e9eac1d80a491d4b9ce5dfd25ec88d449f7f61ce9dcb87d0e5104a7d0af2173910160405180910390a1505050565b61265c612f58565b5f811161269b5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081b1a5b5a5d609a1b6044820152606401610ea2565b60268190556040518181527f514bf0f65cb844af227a51e123dbb8b5be8fac221f8feeb9d20591e81c46e50b90602001610e4a565b6126d8612f58565b6001600160a01b0382165f90815260208052604090205460ff16801561271557506001600160a01b0381165f90815260208052604090205460ff16155b6127535760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964207369676e65727360881b6044820152606401610ea2565b6001600160a01b0381166127795760405162461bcd60e51b8152600401610ea290613c55565b5f5b60058110156127f157826001600160a01b0316601b82600581106127a1576127a1613c7e565b01546001600160a01b0316036127e95781601b82600581106127c5576127c5613c7e565b0180546001600160a01b0319166001600160a01b03929092169190911790556127f1565b60010161277b565b506001600160a01b038281165f81815260208080526040808320805460ff1990811690915594861680845292819020805490951660011790945583519283528201527f2d025324f0a785e8c12d0a0d91a9caa49df4ef20ff87e0df7213a1d4f3157beb910161119c565b612863612f58565b6001600160a01b0381166128895760405162461bcd60e51b8152600401610ea290613c55565b601180546001600160a01b0319166001600160a01b0383169081179091556040516336b91f2b60e01b81526004810191909152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b90602401611bbd565b6128e8612f58565b6001600160a01b03811661290e5760405162461bcd60e51b8152600401610ea290613c55565b602580546001600160a01b0319166001600160a01b0383169081179091556040519081527f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc290602001610e4a565b335f90815260208052604090205460ff166129a85760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309039b4b3b732b960a11b6044820152606401610ea2565b6021545f90815260226020908152604080832033845290915290205460ff1615612a055760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481cda59db995960921b6044820152606401610ea2565b6021545f9081526022602090815260408083203384529091528120805460ff191660011790556023805491612a3983613ca6565b9190505550565b612a4861347f565b60065460ff1615612a905760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b6044820152606401610ea2565b5f8211612ad75760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590819195c1bdcda5d0818dbdd5b9d605a1b6044820152606401610ea2565b5f612ae13361172b565b90505f81600954612af29190613ce8565b90505f612aff8286612f85565b9050803414612b475760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0811551208185b5bdd5b9d60621b6044820152606401610ea2565b602554600160a01b900460ff1615612bab57602654341115612bab5760405162461bcd60e51b815260206004820152601960248201527f45786365656473206d6178206465706f736974206c696d6974000000000000006044820152606401610ea2565b5f612bc0612bb98588612f85565b3490612ff5565b6007549091505b8115612cec575f8181526015602052604081208054600554919291612beb91612ff5565b90508015612cb0575f818511612c015784612c03565b815b9050612c113385838c6134d6565b612c1b8582612ff5565b9450600554835f015410612caa576001838101805460ff1916909117905560028301546003840154845460408051888152602081019490945283019190915260608201527f4bc8083dd1c3e5ec0ddbfe5bfa4edcf6a8251f2454b1f76e98d776a58bee40ea9060800160405180910390a160648414612ca457612c9f846001613ce8565b612ca7565b60015b93505b50612cce565b60648314612cc857612cc3836001613ce8565b612ccb565b60015b92505b8860275f828254612cdf9190613ce8565b90915550612bc792505050565b5f612cf78689612f85565b6007545f90815260156020526040902060050154909150612d189082613000565b6007545f90815260156020526040902060050155600c54612d399082613000565b600c555060075550612d4e92506135e4915050565b5050565b612d5a612f58565b612d6c81670de0b6b3a7640000613d11565b60298190556040519081527f42c772aeb5eb05ed61c4bab5686efd5ed83a2cdb1781737583d9a8c564630c9c90602001610e4a565b612da9612f58565b6001600160a01b038116612dd257604051631e4fbdf760e01b81525f6004820152602401610ea2565b612ddb81612fa4565b50565b612de6612f58565b60036023541015612e395760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e74207369676e6174757265730000000000000000006044820152606401610ea2565b612e416135ea565b5f60238190555b6005811015612ddb576021545f90815260226020526040812081601b8460058110612e7557612e75613c7e565b01546001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101612e48565b612eae612f58565b6001600160a01b0381165f9081526018602052604090206002015460ff16612f055760405162461bcd60e51b815260206004820152600a6024820152694e6f742061637469766560b01b6044820152606401610ea2565b6001600160a01b0381165f81815260186020908152604091829020600201805460ff1916905590519182527fe3d73073356b89f23adf77ab42c7f4227575b6f8866f2cf44df1e1df998e02499101610e4a565b6001546001600160a01b03163314611de75760405163118cdaa760e01b8152336004820152602401610ea2565b5f612f908284613d11565b90505b92915050565b5f612f908284613d28565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f612f908284613cbe565b5f612f908284613ce8565b80158061302357505f82815260156020526040902054155b1561302c575050565b5f828152601760205260408120815b81548110156131cd575f82828154811061305757613057613c7e565b5f9182526020808320909101548883526016825260408084206001600160a01b039092168085529190925291205490915080156131c3575f878152601560205260408120546130aa906118b5848a612f85565b905080156131c1576004805460405163a9059cbb60e01b81526001600160a01b03868116938201939093526024810184905291169063a9059cbb906044016020604051808303815f875af1158015613104573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131289190613c12565b6131665760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610ea2565b6131708682613000565b9550826001600160a01b03167f53118bff2fb56701752f5bf54053d24fb83cec92f9f6ce664b90c38a2991caa4826024546040516131b8929190918252602082015260400190565b60405180910390a25b505b505060010161303b565b505f6131d98484612ff5565b90508015611be657600f546131ee9082613000565b600f555050505050565b60405163430021db60e11b81523060048201819052602482015247906002604360981b019063860043b6906044016020604051808303815f875af1158015613242573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132669190613cd1565b50475f6132738284612ff5565b60405163662aa11d60e01b8152306004820181905260248201529091506002604360981b019063662aa11d906044016020604051808303815f875af11580156132be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132e29190613cd1565b50475f6132ef8285612ff5565b90505f6132fc8483613000565b905080156134775760025460408051600481526024810182526020810180516001600160e01b031663f128c71760e01b17905290515f926001600160a01b03169184916133499190613cfb565b5f6040518083038185875af1925050503d805f8114613383576040519150601f19603f3d011682016040523d82523d5f602084013e613388565b606091505b50509050806133d95760405162461bcd60e51b815260206004820152601c60248201527f4661696c656420746f2073656e64207969656c6420616e6420676173000000006044820152606401610ea2565b60025f9054906101000a90046001600160a01b03166001600160a01b03166338ec8b426040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613425575f5ffd5b505af1158015613437573d5f5f3e3d5ffd5b505060408051888152602081018790527f3842b2195b08a05bc0b797bee80aa3f1bcd53f79cf77b1d4a99bfd41b93ae2a7935001905060405180910390a1505b505050505050565b60025f54036134d05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ea2565b60025f55565b5f838152601560209081526040808320601683528184206001600160a01b038916855290925282205490910361353d575f8481526017602090815260408220805460018101825590835291200180546001600160a01b0319166001600160a01b0387161790555b5f8481526016602090815260408083206001600160a01b03891684529091529020546135699084613000565b5f8581526016602090815260408083206001600160a01b038a1684529091529020908155600101805460ff191683151517905580546135a89084613000565b815581156135c95760028101546135bf9084613000565b6002820155611be6565b60038101546135d89084613000565b60038201555050505050565b60015f55565b600480546040516370a0823160e01b8152309281019290925247915f916001600160a01b0316906370a0823190602401602060405180830381865afa158015613635573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136599190613cd1565b90505f61366e6001546001600160a01b031690565b6001600160a01b0316836040515f6040518083038185875af1925050503d805f81146136b5576040519150601f19603f3d011682016040523d82523d5f602084013e6136ba565b606091505b50509050806137015760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610ea2565b6004546001600160a01b031663a9059cbb6137246001546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af115801561376e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137929190613c12565b6137d75760405162461bcd60e51b8152602060048201526016602482015275121654115494c81d1c985b9cd9995c8819985a5b195960521b6044820152606401610ea2565b602154604080519182526020820185905281018390527fe1afeafeedce22783df08e2c5f38d287bc3bae1e0ee7d12937dc80ebf7db7a3c9060600160405180910390a160015b606481116138f8575f81815260156020908152604080832083815560018101805460ff1916905560028101849055600381018490556004810184905560050183905560179091528120905b81548110156138ce5760165f8481526020019081526020015f205f83838154811061389557613895613c7e565b5f9182526020808320909101546001600160a01b0316835282019290925260400181209081556001908101805460ff1916905501613868565b505f8281526017602052604081206138e591613935565b50806138f081613ca6565b91505061381d565b50505f600e819055600c819055600d8190556013819055600f8190556014805460ff19169055601280546001600160a01b03191690556027555050565b5080545f8255905f5260205f2090810190612ddb91905b8082111561395f575f815560010161394c565b5090565b8015158114612ddb575f5ffd5b5f60208284031215613980575f5ffd5b813561398b81613963565b9392505050565b5f602082840312156139a2575f5ffd5b5035919050565b5f5f604083850312156139ba575f5ffd5b50508035926020909101359150565b80356001600160a01b03811681146139df575f5ffd5b919050565b5f602082840312156139f4575f5ffd5b612f90826139c9565b5f8151808452602084019350602083015f5b82811015613a2d578151865260209586019590910190600101613a0f565b5093949350505050565b5f8151808452602084019350602083015f5b82811015613a2d5781511515865260209586019590910190600101613a49565b60a081525f613a7b60a08301886139fd565b8281036020840152613a8d81886139fd565b90508281036040840152613aa18187613a37565b90508281036060840152613ab58186613a37565b90508281036080840152613ac98185613a37565b98975050505050505050565b8381528215156020820152606060408201525f613af560608301846139fd565b95945050505050565b608081525f613b1060808301876139fd565b8281036020840152613b228187613a37565b90508281036040840152613b368186613a37565b90508281036060840152613b4a81856139fd565b979650505050505050565b5f5f5f60608486031215613b67575f5ffd5b613b70846139c9565b9250602084013591506040840135613b8781613963565b809150509250925092565b5f5f60408385031215613ba3575f5ffd5b82359150613bb3602084016139c9565b90509250929050565b5f5f60408385031215613bcd575f5ffd5b613bd6836139c9565b9150613bb3602084016139c9565b5f5f60408385031215613bf5575f5ffd5b823591506020830135613c0781613963565b809150509250929050565b5f60208284031215613c22575f5ffd5b815161398b81613963565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201613cb757613cb7613c92565b5060010190565b81810381811115612f9357612f93613c92565b5f60208284031215613ce1575f5ffd5b5051919050565b80820180821115612f9357612f93613c92565b5f82518060208501845e5f920191825250919050565b8082028115828204841417612f9357612f93613c92565b5f82613d4257634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220acfbf7f13f49faf28c4151b8b0d3a391438cbeeab0d722c18f93f427ed7f90a164736f6c634300081c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000003e6109d1a62e16c709444b49004f513b0d5978d20000000000000000000000004221166ca2ce6e9a6ac505436f68437f6b578614000000000000000000000000f8797db8a9eed416ca14e8dfaede2bf4e1aabfc3000000000000000000000000f8797db8a9eed416ca14e8dfaede2bf4e1aabfc300000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000044127ec6b8dd04c63c58c70276628034d697731b00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044127ec6b8dd04c63c58c70276628034d697731b000000000000000000000000705e45c73a854a06fe64c9bd3bbf8be1edd93274000000000000000000000000798ed654f4d9599b99f94f4a61609b7a7cfbd200000000000000000000000000b2d2ecc7d94cfb8e70f60aeb97bf7f4c4cb8ef280000000000000000000000007f448f0435803744bcda76afed4f17b0a6e0fb23

-----Decoded View---------------
Arg [0] : _pointsOperator (address): 0x3e6109D1A62E16C709444B49004f513B0D5978d2
Arg [1] : _masterContract (address): 0x4221166cA2ce6e9a6Ac505436F68437f6B578614
Arg [2] : _hypersound (address): 0xF8797dB8a9EeD416Ca14e8dFaEde2BF4E1aabFC3
Arg [3] : _hypersToken (address): 0xF8797dB8a9EeD416Ca14e8dFaEde2BF4E1aabFC3
Arg [4] : _fixedDeposit (uint256): 2000000000000000
Arg [5] : _fixedFeeAmount (uint256): 50000000000000
Arg [6] : _stakerDiscount (uint256): 500
Arg [7] : _feeRecipient (address): 0x44127ec6b8dd04C63C58c70276628034D697731b
Arg [8] : _initialMaxDepositLimit (uint256): 1000000
Arg [9] : _maxDepositLimitEnabled (bool): False
Arg [10] : _initialSigners (address[5]): 0x44127ec6b8dd04C63C58c70276628034D697731b,0x705E45c73A854A06fE64c9bD3bbf8Be1edD93274,0x798ed654F4D9599B99f94F4A61609b7A7cFBD200,0xB2D2ECC7d94CFb8e70F60AeB97Bf7F4C4cB8eF28,0x7F448F0435803744Bcda76afED4F17B0A6E0FB23

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000003e6109d1a62e16c709444b49004f513b0d5978d2
Arg [1] : 0000000000000000000000004221166ca2ce6e9a6ac505436f68437f6b578614
Arg [2] : 000000000000000000000000f8797db8a9eed416ca14e8dfaede2bf4e1aabfc3
Arg [3] : 000000000000000000000000f8797db8a9eed416ca14e8dfaede2bf4e1aabfc3
Arg [4] : 00000000000000000000000000000000000000000000000000071afd498d0000
Arg [5] : 00000000000000000000000000000000000000000000000000002d79883d2000
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [7] : 00000000000000000000000044127ec6b8dd04c63c58c70276628034d697731b
Arg [8] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 00000000000000000000000044127ec6b8dd04c63c58c70276628034d697731b
Arg [11] : 000000000000000000000000705e45c73a854a06fe64c9bd3bbf8be1edd93274
Arg [12] : 000000000000000000000000798ed654f4d9599b99f94f4a61609b7a7cfbd200
Arg [13] : 000000000000000000000000b2d2ecc7d94cfb8e70f60aeb97bf7f4c4cb8ef28
Arg [14] : 0000000000000000000000007f448f0435803744bcda76afed4f17b0a6e0fb23


Deployed Bytecode Sourcemap

443:26547:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:33;;;;;;;;;;;;;;;;;;;160:25:12;;;148:2;133:18;1967:33:8;;;;;;;;6763:134;;;;;;;;;;-1:-1:-1;6763:134:8;;;;;:::i;:::-;;:::i;:::-;;1895:27;;;;;;;;;;;;;;;;23475:458;;;;;;;;;;-1:-1:-1;23475:458:8;;;;;:::i;:::-;;:::i;:::-;;;;992:25:12;;;1060:14;;1053:22;1048:2;1033:18;;1026:50;1092:18;;;1085:34;980:2;965:18;23475:458:8;796:329:12;2427:51:8;;;;;;;;;;-1:-1:-1;2427:51:8;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1645:32:12;;;1627:51;;1615:2;1600:18;2427:51:8;1481:203:12;2672:25:8;;;;;;;;;;-1:-1:-1;2672:25:8;;;;;:::i;:::-;;:::i;12259:762::-;;;;;;;;;;;;;:::i;25747:215::-;;;;;;;;;;-1:-1:-1;25747:215:8;;;;;:::i;:::-;;:::i;20805:1299::-;;;;;;;;;;-1:-1:-1;20805:1299:8;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;6151:604::-;;;;;;;;;;-1:-1:-1;6151:604:8;;;;;:::i;:::-;;:::i;20074:723::-;;;;;;;;;;-1:-1:-1;20074:723:8;;;;;:::i;:::-;;:::i;:::-;;;;4307:14:12;;4300:22;4282:41;;4354:2;4339:18;;4332:34;;;;4382:18;;;4375:34;;;;4440:2;4425:18;;4418:34;;;;4483:3;4468:19;;4461:35;4540:14;4533:22;4527:3;4512:19;;4505:51;4587:3;4572:19;;4565:35;4269:3;4254:19;20074:723:8;3979:627:12;22867:600:8;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;3185:33::-;;;;;;;;;;;;;;;;2164:31;;;;;;;;;;-1:-1:-1;2164:31:8;;;;-1:-1:-1;;;;;2164:31:8;;;2485:63;;;;;;;;;;-1:-1:-1;2485:63:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2485:63:8;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5266:32:12;;;5248:51;;5330:2;5315:18;;5308:34;;;;5385:14;;5378:22;5358:18;;;5351:50;;;;5444:14;5437:22;5432:2;5417:18;;5410:50;5235:3;5220:19;2485:63:8;5029:437:12;1407:31:8;;;;;;;;;;-1:-1:-1;1407:31:8;;;;-1:-1:-1;;;;;1407:31:8;;;7950:1538;;;;;;;;;;-1:-1:-1;7950:1538:8;;;;;:::i;:::-;;:::i;3023:27::-;;;;;;;;;;-1:-1:-1;3023:27:8;;;;-1:-1:-1;;;;;3023:27:8;;;2128:29;;;;;;;;;;-1:-1:-1;2128:29:8;;;;-1:-1:-1;;;;;2128:29:8;;;1073:100;;;;;;;;;;;;1130:42;1073:100;;25574:165;;;;;;;;;;-1:-1:-1;25574:165:8;;;;;:::i;:::-;;:::i;13029:282::-;;;;;;;;;;-1:-1:-1;13029:282:8;;;;;:::i;:::-;;:::i;1479:23::-;;;;;;;;;;;;;;;;1180:86;;;;;;;;;;;;1223:42;1180:86;;24349:179;;;;;;;;;;-1:-1:-1;24349:179:8;;;;;:::i;:::-;;:::i;6905:173::-;;;;;;;;;;-1:-1:-1;6905:173:8;;;;;:::i;:::-;;:::i;22112:747::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;3105:34::-;;;;;;;;;;-1:-1:-1;3105:34:8;;;;-1:-1:-1;;;3105:34:8;;;;;;;;;7178:14:12;;7171:22;7153:41;;7141:2;7126:18;3105:34:8;7013:187:12;2043:49:8;;;;;;;;;;;;;;;;2985:31;;;;;;;;;;;;;;;;1091:103:9;;;;;;;;;;;;;:::i;2805:44:8:-;;;;;;;;;;;;;;;;2758:40;;;;;;;;;;-1:-1:-1;2758:40:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;1588:39;;;;;;;;;;;;1624:3;1588:39;;24894:215;;;;;;;;;;-1:-1:-1;24894:215:8;;;;;:::i;:::-;;:::i;24536:350::-;;;;;;;;;;-1:-1:-1;24536:350:8;;;;;:::i;:::-;;:::i;2007:29::-;;;;;;;;;;;;;;;;822:87:9;;;;;;;;;;-1:-1:-1;895:6:9;;-1:-1:-1;;;;;895:6:9;822:87;;17915:225:8;;;;;;;;;;;;;:::i;985:81::-;;;;;;;;;;;;-1:-1:-1;;;;;985:81:8;;2934:44;;;;;;;;;;;;;;;;2704:47;;;;;;;;;;;;2750:1;2704:47;;1859:29;;;;;;;;;;;;;;;;1273:80;;;;;;;;;;;;1310:42;1273:80;;1929:31;;;;;;;;;;;;;;;;2202:28;;;;;;;;;;;;;;;;2305:37;;;;;;;;;;-1:-1:-1;2305:37:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7929:25:12;;;7997:14;;7990:22;7985:2;7970:18;;7963:50;8029:18;;;8022:34;;;;8087:2;8072:18;;8065:34;8130:3;8115:19;;8108:35;8174:3;8159:19;;8152:35;7916:3;7901:19;2305:37:8;7648:545:12;1823:29:8;;;;;;;;;;;;;;;;13319:2436;;;;;;;;;;;;;:::i;1511:20::-;;;;;;;;;;-1:-1:-1;1511:20:8;;;;;;;;2237:35;;;;;;;;;;-1:-1:-1;2237:35:8;;;;;;;;3146:30;;;;;;;;;;;;;;;;1445:25;;;;;;;;;;-1:-1:-1;1445:25:8;;;;-1:-1:-1;;;;;1445:25:8;;;23941:376;;;;;;;;;;;;;:::i;:::-;;;;8400:25:12;;;8456:2;8441:18;;8434:34;;;;8484:18;;;8477:34;8388:2;8373:18;23941:376:8;8198:319:12;1367:33:8;;;;;;;;;;-1:-1:-1;1367:33:8;;;;-1:-1:-1;;;;;1367:33:8;;;2600:36;;;;;;;;;;;;;;;;2555:32;;;;;;;;;;-1:-1:-1;2555:32:8;;;;;:::i;:::-;;:::i;3279:45::-;;;;;;;;;;;;;;;;7086:601;;;;;;;;;;-1:-1:-1;7086:601:8;;;;;:::i;:::-;;:::i;2856:71::-;;;;;;;;;;-1:-1:-1;2856:71:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1634:37;;;;;;;;;;;;;;;;25355:211;;;;;;;;;;-1:-1:-1;25355:211:8;;;;;:::i;:::-;;:::i;26405:539::-;;;;;;;;;;-1:-1:-1;26405:539:8;;;;;:::i;:::-;;:::i;25970:245::-;;;;;;;;;;-1:-1:-1;25970:245:8;;;;;:::i;:::-;;:::i;2349:71::-;;;;;;;;;;-1:-1:-1;2349:71:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9927:25:12;;;9995:14;;9988:22;9983:2;9968:18;;9961:50;9900:18;2349:71:8;9759:258:12;25117:230:8;;;;;;;;;;-1:-1:-1;25117:230:8;;;;;:::i;:::-;;:::i;18148:333::-;;;;;;;;;;;;;:::i;9496:2054::-;;;;;;:::i;:::-;;:::i;1715:36::-;;;;;;;;;;;;;;;;26227:170;;;;;;;;;;-1:-1:-1;26227:170:8;;;;;:::i;:::-;;:::i;3225:41::-;;;;;;;;;;;;;;;;1202:220:9;;;;;;;;;;-1:-1:-1;1202:220:9;;;;;:::i;:::-;;:::i;18489:385:8:-;;;;;;;;;;;;;:::i;1789:27::-;;;;;;;;;;;;;;;;7695:247;;;;;;;;;;-1:-1:-1;7695:247:8;;;;;:::i;:::-;;:::i;6763:134::-;781:13:9;:11;:13::i;:::-;6828:8:8::1;:20:::0;;-1:-1:-1;;6828:20:8::1;::::0;::::1;;::::0;;::::1;::::0;;;6864:25:::1;::::0;7153:41:12;;;6864:25:8::1;::::0;7141:2:12;7126:18;6864:25:8::1;;;;;;;;6763:134:::0;:::o;23475:458::-;23554:19;23584:22;23617;23675:1;23666:6;:10;:33;;;;;1624:3;23680:6;:19;;23666:33;23658:61;;;;-1:-1:-1;;;23658:61:8;;10590:2:12;23658:61:8;;;10572:21:12;10629:2;10609:18;;;10602:30;-1:-1:-1;;;10648:18:12;;;10641:45;10703:18;;23658:61:8;;;;;;;;;23730:17;23750:13;;;:5;:13;;;;;23796:16;;;;23828:23;;;;:54;;;;;23876:6;23855:17;;:27;23828:54;23898:16;;23774:151;;;;;;;23475:458;;;;;:::o;2427:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2427:51:8;;-1:-1:-1;2427:51:8;;-1:-1:-1;2427:51:8:o;2672:25::-;;;;;;;;;;;;;;-1:-1:-1;;;;;2672:25:8;;-1:-1:-1;2672:25:8;:::o;12259:762::-;12310:14;;:47;;-1:-1:-1;;;12310:47:8;;12346:10;12310:47;;;1627:51:12;-1:-1:-1;;;;;12310:14:8;;;;:35;;1600:18:12;;12310:47:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12302:74;;;;-1:-1:-1;;;12302:74:8;;;;;;;:::i;:::-;12396:23;;;;12395:24;12387:55;;;;-1:-1:-1;;;12387:55:8;;11527:2:12;12387:55:8;;;11509:21:12;11566:2;11546:18;;;11539:30;-1:-1:-1;;;11585:18:12;;;11578:48;11643:18;;12387:55:8;11325:342:12;12387:55:8;12499:17;;12467:23;12493:24;;;:5;:24;;;;;12536;;12528:60;;;;-1:-1:-1;;;12528:60:8;;11874:2:12;12528:60:8;;;11856:21:12;11913:2;11893:18;;;11886:30;-1:-1:-1;;;11932:18:12;;;11925:49;11991:18;;12528:60:8;11672:343:12;12528:60:8;12607:17;;;;;;12599:45;;;;-1:-1:-1;;;12599:45:8;;12222:2:12;12599:45:8;;;12204:21:12;12261:2;12241:18;;;12234:30;-1:-1:-1;;;12280:18:12;;;12273:45;12335:18;;12599:45:8;12020:339:12;12599:45:8;12657:23;:30;;-1:-1:-1;;12657:30:8;12683:4;12657:30;;;12698:16;:29;;-1:-1:-1;;;;;;12698:29:8;12717:10;12698:29;;;;;;12754:17;;12738:13;:33;12832:24;;12803:58;;12657:23;;12717:10;12832:24;12803:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12784:77;;;12880:7;12872:47;;;;-1:-1:-1;;;12872:47:8;;12776:2:12;12872:47:8;;;12758:21:12;12815:2;12795:18;;;12788:30;12854:29;12834:18;;;12827:57;12901:18;;12872:47:8;12574:351:12;12872:47:8;12958:16;;12976:24;;12937:76;;;13132:25:12;;;13188:2;13173:18;;13166:34;;;;13002:10:8;13216:18:12;;;13209:60;12937:76:8;;13120:2:12;13105:18;12937:76:8;;;;;;;;12291:730;;12259:762::o;25747:215::-;781:13:9;:11;:13::i;:::-;-1:-1:-1;;;;;25843:32:8;::::1;25835:60;;;;-1:-1:-1::0;;;25835:60:8::1;;;;;;;:::i;:::-;25906:14;:48:::0;;-1:-1:-1;;;;;;25906:48:8::1;-1:-1:-1::0;;;;;25906:48:8;;;::::1;::::0;;;::::1;::::0;;25747:215::o;20805:1299::-;21077:24;;;1624:3;21077:24;;;;;;;;;20878;;;;;;;;;;21077;;;;;;;;-1:-1:-1;;21122:24:8;;;1624:3;21122:24;;;;;;;;;21067:34;;-1:-1:-1;1624:3:8;-1:-1:-1;21122:24:8;;;;;;;;-1:-1:-1;;21172:21:8;;;1624:3;21172:21;;;;;;;;;21112:34;;-1:-1:-1;1624:3:8;-1:-1:-1;21172:21:8;;;;;;;;-1:-1:-1;;21219:21:8;;;1624:3;21219:21;;;;;;;;;21157:36;;-1:-1:-1;1624:3:8;-1:-1:-1;21219:21:8;;;;;;;;-1:-1:-1;;21266:21:8;;;1624:3;21266:21;;;;;;;;;21204:36;;-1:-1:-1;1624:3:8;-1:-1:-1;21266:21:8;;;;;;;;;;-1:-1:-1;;21251:36:8;-1:-1:-1;21308:13:8;21353:1;21336:494;1624:3;21356:1;:14;21336:494;;21392:27;21422:15;;;:12;:15;;;;;;;;-1:-1:-1;;;;;21422:21:8;;;;;;;;;21462:14;;:18;21458:361;;21518:1;21501:7;21509:5;21501:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;21555:7;:14;;;21538:7;21546:5;21538:14;;;;;;;;:::i;:::-;;;;;;;;;;:31;21610:19;;;;21588;;21610;;;;;21588:12;;21601:5;;21588:19;;;;;;:::i;:::-;:41;;;:19;;;;;;;;;;:41;21670:8;;;;:5;:8;;;;;;:15;;;21648:19;;21670:15;;;;;21648:12;;21661:5;;21648:19;;;;;;:::i;:::-;:37;;;:19;;;;;;;;;;;:37;21727:23;;;;:49;;;;;21775:1;21754:17;;:22;21727:49;21704:12;21717:5;21704:19;;;;;;;;:::i;:::-;:73;;;:19;;;;;;;;;;;:73;21796:7;;;;:::i;:::-;;;;21458:361;-1:-1:-1;21372:3:8;;;;:::i;:::-;;;;21336:494;;;;21921:5;21912:7;21905:22;21957:5;21948:7;21941:22;21998:5;21984:12;21977:27;22039:5;22025:12;22018:27;22080:5;22066:12;22059:27;21890:207;20805:1299;;;;;;;:::o;6151:604::-;781:13:9;:11;:13::i;:::-;6235:8:8::1;::::0;::::1;;6227:44;;;::::0;-1:-1:-1;;;6227:44:8;;14362:2:12;6227:44:8::1;::::0;::::1;14344:21:12::0;14401:2;14381:18;;;14374:30;14440:25;14420:18;;;14413:53;14483:18;;6227:44:8::1;14160:347:12::0;6227:44:8::1;6305:1;6290:12;:16;6282:46;;;::::0;-1:-1:-1;;;6282:46:8;;14714:2:12;6282:46:8::1;::::0;::::1;14696:21:12::0;14753:2;14733:18;;;14726:30;-1:-1:-1;;;14772:18:12;;;14765:47;14829:18;;6282:46:8::1;14512:341:12::0;6282:46:8::1;6347:21;:26:::0;6339:61:::1;;;::::0;-1:-1:-1;;;6339:61:8;;15060:2:12;6339:61:8::1;::::0;::::1;15042:21:12::0;15099:2;15079:18;;;15072:30;-1:-1:-1;;;15118:18:12;;;15111:52;15180:18;;6339:61:8::1;14858:346:12::0;6339:61:8::1;6497:1;6480:187;1624:3;6500:1;:14;6480:187;;6545:8;::::0;;;:5:::1;:8;::::0;;;;:15:::1;;::::0;::::1;;6544:16;6536:45;;;::::0;-1:-1:-1;;;6536:45:8;;15411:2:12;6536:45:8::1;::::0;::::1;15393:21:12::0;15450:2;15430:18;;;15423:30;-1:-1:-1;;;15469:18:12;;;15462:46;15525:18;;6536:45:8::1;15209:340:12::0;6536:45:8::1;6604:8;::::0;;;:5:::1;:8;::::0;;;;:22;:27;6596:59:::1;;;::::0;-1:-1:-1;;;6596:59:8;;15756:2:12;6596:59:8::1;::::0;::::1;15738:21:12::0;15795:2;15775:18;;;15768:30;-1:-1:-1;;;15814:18:12;;;15807:49;15873:18;;6596:59:8::1;15554:343:12::0;6596:59:8::1;6516:3:::0;::::1;::::0;::::1;:::i;:::-;;;;6480:187;;;-1:-1:-1::0;6679:8:8::1;:23:::0;;;6718:29:::1;::::0;160:25:12;;;6718:29:8::1;::::0;148:2:12;133:18;6718:29:8::1;14:177:12::0;20074:723:8;20144:13;20168:21;20200:22;20233:23;20267:24;20302:22;20335:19;20394:1;20385:6;:10;:33;;;;;1624:3;20399:6;:19;;20385:33;20377:61;;;;-1:-1:-1;;;20377:61:8;;10590:2:12;20377:61:8;;;10572:21:12;10629:2;10609:18;;;10602:30;-1:-1:-1;;;10648:18:12;;;10641:45;10703:18;;20377:61:8;10388:339:12;20377:61:8;20449:17;20469:13;;;:5;:13;;;;;;;;20515:11;;;;20541:18;;20574:19;;;;20608:20;;;;20643:14;:22;;;;;;;:29;20688:23;;20469:13;;20515:11;;;;;20541:18;;20574:19;20608:20;;20688:23;:54;;;;;20736:6;20715:17;;:27;20688:54;20758:16;;;;;20493:292;;;;-1:-1:-1;20493:292:8;;-1:-1:-1;20493:292:8;-1:-1:-1;20493:292:8;-1:-1:-1;20493:292:8;;-1:-1:-1;20758:16:8;-1:-1:-1;20074:723:8;-1:-1:-1;;20074:723:8:o;22867:600::-;23047:8;;23110:24;;;1624:3;23110:24;;;;;;;;;23078:4;;22982:31;;23110:24;;;;;;;;;;;-1:-1:-1;;23093:41:8;-1:-1:-1;23174:1:8;23157:235;1624:3;23177:1;:14;23157:235;;23213:17;23233:8;;;:5;:8;;;;;23260:11;;;;;;23256:69;;;23304:5;23292:17;;23256:69;23361:18;;23339:14;23354:3;23356:1;23354;:3;:::i;:::-;23339:19;;;;;;;;:::i;:::-;;;;;;;;;;:40;-1:-1:-1;23193:3:8;;;;:::i;:::-;;;;23157:235;;;;22867:600;;;:::o;7950:1538::-;8049:20;;-1:-1:-1;;;8049:20:8;;-1:-1:-1;;;;;1645:32:12;;8049:20:8;;;1627:51:12;8007:7:8;;;;1310:42;;8049:14;;1600:18:12;;8049:20:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8104:22;;-1:-1:-1;;;8104:22:8;;-1:-1:-1;;;;;1645:32:12;;8104:22:8;;;1627:51:12;8027:42:8;;-1:-1:-1;8080:21:8;;1223:42;;8104:16;;1600:18:12;;8104:22:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8080:46;;8174:18;;8159:11;:33;;:72;;;;8213:18;;8196:13;:35;;8159:72;8137:150;;;;-1:-1:-1;;;8137:150:8;;16426:2:12;8137:150:8;;;16408:21:12;16465:2;16445:18;;;16438:30;16504;16484:18;;;16477:58;16552:18;;8137:150:8;16224:352:12;8137:150:8;8314:14;;8370:15;;8353:32;;8349:113;;8408:42;8444:5;8408:31;8424:14;;8416:5;:22;;;;:::i;:::-;8408:3;;:7;:31::i;:::-;:35;;:42::i;:::-;8402:48;;8349:113;8527:23;;8565:729;8589:15;:22;8585:26;;8565:729;;;8633:13;8649:15;8665:1;8649:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;8649:18:8;;;8718:25;;;:18;:25;;;;;;;8682:61;;;;;;;;;;;;;;8649:18;8682:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8649:18;8682:61;;;;;;;;;;8649:18;;-1:-1:-1;8682:61:8;8772:511;;8818:8;:17;;;8814:454;;;8864:30;;-1:-1:-1;;;8864:30:8;;-1:-1:-1;;;;;1645:32:12;;;8864:30:8;;;1627:51:12;8897:1:8;;8864:24;;;;;;1600:18:12;;8864:30:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;:76;;;;;8925:15;8902:8;:20;;;:38;8864:76;8860:171;;;8987:8;:20;;;8969:38;;8860:171;8814:454;;;9083:29;;-1:-1:-1;;;9083:29:8;;-1:-1:-1;;;;;1645:32:12;;;9083:29:8;;;1627:51:12;9115:1:8;;9083:23;;;;;;1600:18:12;;9083:29:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;:75;;;;;9143:15;9120:8;:20;;;:38;9083:75;9079:170;;;9205:8;:20;;;9187:38;;9079:170;-1:-1:-1;;8613:3:8;;8565:729;;;-1:-1:-1;9361:19:8;;9357:101;;9403:43;9440:5;9403:32;9411:23;9419:15;9440:5;9411:23;:::i;:::-;9403:3;;:7;:32::i;:43::-;9397:49;;9357:101;-1:-1:-1;9477:3:8;7950:1538;-1:-1:-1;;;;7950:1538:8:o;25574:165::-;781:13:9;:11;:13::i;:::-;25650:22:8::1;:33:::0;;;::::1;;-1:-1:-1::0;;;25650:33:8::1;-1:-1:-1::0;;;;25650:33:8;;::::1;;::::0;;25699:32:::1;::::0;::::1;::::0;::::1;::::0;25675:8;7178:14:12;7171:22;7153:41;;7141:2;7126:18;;7013:187;13029:282:8;13108:16;;-1:-1:-1;;;;;13108:16:8;13094:10;:30;:57;;;;-1:-1:-1;13128:23:8;;;;13094:57;13086:84;;;;-1:-1:-1;;;13086:84:8;;;;;;;:::i;:::-;13206:1;13193:9;:14;;:35;;;;;13224:4;13211:9;:17;;13193:35;13185:66;;;;-1:-1:-1;;;13185:66:8;;16783:2:12;13185:66:8;;;16765:21:12;16822:2;16802:18;;;16795:30;-1:-1:-1;;;16841:18:12;;;16834:48;16899:18;;13185:66:8;16581:342:12;13185:66:8;13268:10;;:35;;;-1:-1:-1;;;13268:35:8;;;;;17139:25:12;;;17180:18;;;17173:30;;;;-1:-1:-1;17219:18:12;;;17212:29;-1:-1:-1;;;;;13268:10:8;;;;:20;;17258:18:12;;13268:35:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13029:282;:::o;24349:179::-;781:13:9;:11;:13::i;:::-;24445:14:8::1;:32:::0;;;;24488:14:::1;:32:::0;24349:179::o;6905:173::-;781:13:9;:11;:13::i;:::-;6986:18:8::1;:31:::0;;;7033:37:::1;::::0;160:25:12;;;7033:37:8::1;::::0;148:2:12;133:18;7033:37:8::1;14:177:12::0;22112:747:8;22345:24;;;1624:3;22345:24;;;;;;;;;22175:30;;;;;;;;22345:24;;;;;;;;;-1:-1:-1;;22389:21:8;;;1624:3;22389:21;;;;;;;;;22329:40;;-1:-1:-1;1624:3:8;-1:-1:-1;22389:21:8;;;;;;;;-1:-1:-1;;22430:21:8;;;1624:3;22430:21;;;;;;;;;22380:30;;-1:-1:-1;1624:3:8;-1:-1:-1;22430:21:8;;;;;;;;-1:-1:-1;;22480:24:8;;;1624:3;22480:24;;;;;;;;;22421:30;;-1:-1:-1;1624:3:8;-1:-1:-1;22480:24:8;;;;;;;;;;-1:-1:-1;;22462:42:8;-1:-1:-1;22522:9:8;22517:335;1624:3;22537:1;:13;22517:335;;;22572:17;22592:5;22572:17;22598:5;:1;22602;22598:5;:::i;:::-;22592:12;;;;;;;;;;;22572:32;;22638:4;:18;;;22619:13;22633:1;22619:16;;;;;;;;:::i;:::-;;;;;;;;;;:37;22683:11;;;;22671:9;;22683:11;;;;;22671:6;;22678:1;;22671:9;;;;;;:::i;:::-;:23;;;:9;;;;;;;;;;;:23;22722;;;;:53;;;;-1:-1:-1;22770:5:8;:1;22774;22770:5;:::i;:::-;22749:17;;:26;22722:53;22709:6;22716:1;22709:9;;;;;;;;:::i;:::-;:67;;;:9;;;;;;;;;;;:67;22812:14;:21;22827:5;:1;22831;22827:5;:::i;:::-;22812:21;;;;;;;;;;;:28;;;;22791:15;22807:1;22791:18;;;;;;;;:::i;:::-;;;;;;;;;;:49;-1:-1:-1;22552:3:8;;22517:335;;;;22112:747;;;;:::o;1091:103:9:-;781:13;:11;:13::i;:::-;1156:30:::1;1183:1;1156:18;:30::i;:::-;1091:103::o:0;24894:215:8:-;781:13:9;:11;:13::i;:::-;25008:3:8::1;24990:14;:21;;24982:70;;;::::0;-1:-1:-1;;;24982:70:8;;17619:2:12;24982:70:8::1;::::0;::::1;17601:21:12::0;17658:2;17638:18;;;17631:30;17697:34;17677:18;;;17670:62;-1:-1:-1;;;17748:18:12;;;17741:34;17792:19;;24982:70:8::1;17417:400:12::0;24982:70:8::1;25063:21;:38:::0;24894:215::o;24536:350::-;781:13:9;:11;:13::i;:::-;24632:14:8::1;;24622:6;:24;;24614:65;;;::::0;-1:-1:-1;;;24614:65:8;;18024:2:12;24614:65:8::1;::::0;::::1;18006:21:12::0;18063:2;18043:18;;;18036:30;18102;18082:18;;;18075:58;18150:18;;24614:65:8::1;17822:352:12::0;24614:65:8::1;24707:14;::::0;:26:::1;::::0;24726:6;24707:18:::1;:26::i;:::-;24690:14;:43:::0;24752:11:::1;::::0;;:40:::1;::::0;-1:-1:-1;;;24752:40:8;;24773:10:::1;24752:40:::0;;::::1;18353:51:12::0;;;;18420:18;;;18413:34;;;-1:-1:-1;;;;;24752:11:8::1;::::0;:20:::1;::::0;18326:18:12;;24752:40:8::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24744:75;;;::::0;-1:-1:-1;;;24744:75:8;;18660:2:12;24744:75:8::1;::::0;::::1;18642:21:12::0;18699:2;18679:18;;;18672:30;-1:-1:-1;;;18718:18:12;;;18711:52;18780:18;;24744:75:8::1;18458:346:12::0;24744:75:8::1;24835:43;::::0;;24859:10:::1;18353:51:12::0;;18435:2;18420:18;;18413:34;;;24835:43:8::1;::::0;18326:18:12;24835:43:8::1;18179:274:12::0;17915:225:8;781:13:9;:11;:13::i;:::-;17991:29:8::1;::::0;:34;17983:63:::1;;;::::0;-1:-1:-1;;;17983:63:8;;19011:2:12;17983:63:8::1;::::0;::::1;18993:21:12::0;19050:2;19030:18;;;19023:30;-1:-1:-1;;;19069:18:12;;;19062:46;19125:18;;17983:63:8::1;18809:340:12::0;17983:63:8::1;18057:29;:31:::0;;;:29:::1;:31;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;18131:1:8::1;18099:29;:33:::0;17915:225::o;13319:2436::-;13387:16;;-1:-1:-1;;;;;13387:16:8;13373:10;:30;:57;;;;-1:-1:-1;13407:23:8;;;;13373:57;13365:84;;;;-1:-1:-1;;;13365:84:8;;;;;;;:::i;:::-;13495:17;;13462:24;13489;;;:5;:24;;;;;;13560:11;;;:36;;-1:-1:-1;;;13560:36:8;;13590:4;13560:36;;;1627:51:12;;;;13489:24:8;;13462;-1:-1:-1;;;;;13560:11:8;;:21;;1600:18:12;;13560:36:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13531:65;-1:-1:-1;13611:22:8;;13607:306;;13669:16;;:40;;13690:18;13669:20;:40::i;:::-;13650:16;:59;13742:17;;13724:56;;13761:18;13724:17;:56::i;:::-;13795:23;;;:44;;;13854:26;:47;;;13607:306;13954:23;;;;14005:16;;14023:13;;13993:64;;;8400:25:12;;;8456:2;8441:18;;8434:34;;;;8484:18;;8477:34;;;13993:64:8;;8388:2:12;8373:18;13993:64:8;;;;;;;14124:23;14150:59;14205:3;14150:50;14178:21;;14150:11;:23;;;:27;;:50;;;;:::i;:59::-;14124:85;;14220:28;14251:44;14279:15;14251:11;:23;;;:27;;:44;;;;:::i;:::-;14220:75;-1:-1:-1;14310:19:8;;14306:265;;14376:14;;14439:48;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14439:48:8;-1:-1:-1;;;14439:48:8;;;14368:134;;14347:15;;-1:-1:-1;;;;;14376:14:8;;14404:15;;14368:134;;14439:48;14368:134;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14346:156;;;14525:10;14517:42;;;;-1:-1:-1;;;14517:42:8;;19662:2:12;14517:42:8;;;19644:21:12;19701:2;19681:18;;;19674:30;-1:-1:-1;;;19720:18:12;;;19713:49;19779:18;;14517:42:8;19460:343:12;14517:42:8;14331:240;14306:265;14633:24;;14629:190;;14693:12;;:50;;14675:12;;-1:-1:-1;;;;;14693:12:8;;14718:20;;14675:12;14693:50;14675:12;14693:50;14718:20;14693:12;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14674:69;;;14766:7;14758:49;;;;-1:-1:-1;;;14758:49:8;;20010:2:12;14758:49:8;;;19992:21:12;20049:2;20029:18;;;20022:30;20088:31;20068:18;;;20061:59;20137:18;;14758:49:8;19808:353:12;14758:49:8;14659:160;14629:190;14831:32;:30;:32::i;:::-;14935:1;14907:29;;;14947:18;;;:26;;-1:-1:-1;;14947:26:8;;;14984;;;:30;;;15025:27;;;:31;;;15067:23;;;:27;;;15105:23;;;:27;;;15224:17;;15209:33;;:14;:33;;;;;;15253:128;15277:17;;15273:21;;15253:128;;;15323:12;:31;15336:17;;15323:31;;;;;;;;;;;:46;15355:10;15366:1;15355:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;15355:13:8;15323:46;;;;;;;;;;;;15316:53;;;15355:13;15316:53;;;;;-1:-1:-1;;15316:53:8;;;15296:3;15253:128;;;-1:-1:-1;15413:17:8;;15398:33;;;;:14;:33;;;;;15391:40;;;:::i;:::-;1624:3;15506:17;;:30;:58;;15543:17;;:21;;15563:1;15543:21;:::i;:::-;15506:58;;;15539:1;15506:58;15486:17;:78;15577:23;:31;;-1:-1:-1;;15577:31:8;;;15619:16;:29;;-1:-1:-1;;;;;;15619:29:8;;;15681:16;;15666:52;;;20340:25:12;;;20396:2;20381:18;;20374:34;;;15666:52:8;;20313:18:12;15666:52:8;;;;;;;15729:16;:18;;;:16;:18;;;:::i;:::-;;;;;;13354:2401;;;;;;13319:2436::o;23941:376::-;23998:26;24035:18;24064:21;24206:1;24187:16;;:20;:47;;24233:1;24187:47;;;24229:1;24210:16;;:20;;;;:::i;:::-;24249:16;;24280:18;;24165:144;;;;;;23941:376;;;:::o;2555:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2555:32:8;;-1:-1:-1;2555:32:8;:::o;7086:601::-;781:13:9;:11;:13::i;:::-;7258:4:8::1;7242:12;:20;;7234:49;;;::::0;-1:-1:-1;;;7234:49:8;;20621:2:12;7234:49:8::1;::::0;::::1;20603:21:12::0;20660:2;20640:18;;;20633:30;-1:-1:-1;;;20679:18:12;;;20672:46;20735:18;;7234:49:8::1;20419:340:12::0;7234:49:8::1;-1:-1:-1::0;;;;;7304:26:8;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35:::1;;::::0;::::1;;7303:36;7295:62;;;::::0;-1:-1:-1;;;7295:62:8;;20966:2:12;7295:62:8::1;::::0;::::1;20948:21:12::0;21005:2;20985:18;;;20978:30;-1:-1:-1;;;21024:18:12;;;21017:43;21077:18;;7295:62:8::1;20764:337:12::0;7295:62:8::1;7399:168;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;7399:168:8;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;7517:4:::1;7399:168:::0;;;;;;;::::1;;::::0;;;;;;;-1:-1:-1;7370:26:8;;;:18:::1;:26:::0;;;;;:197;;;;;::::1;-1:-1:-1::0;;;;;;7370:197:8;;::::1;;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;;;;-1:-1:-1::0;;7370:197:8;::::1;;::::0;;;;-1:-1:-1;;7370:197:8;;;;;;;;;;::::1;::::0;;;7580:15:::1;:28:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;7624:55;;21302:51:12;;;21369:18;;21362:34;;;21412:18;;;21405:50;7624:55:8::1;::::0;21275:18:12;7624:55:8::1;;;;;;;7086:601:::0;;;:::o;25355:211::-;781:13:9;:11;:13::i;:::-;25452:1:8::1;25440:9;:13;25432:39;;;::::0;-1:-1:-1;;;25432:39:8;;21668:2:12;25432:39:8::1;::::0;::::1;21650:21:12::0;21707:2;21687:18;;;21680:30;-1:-1:-1;;;21726:18:12;;;21719:43;21779:18;;25432:39:8::1;21466:337:12::0;25432:39:8::1;25482:15;:27:::0;;;25525:33:::1;::::0;160:25:12;;;25525:33:8::1;::::0;148:2:12;133:18;25525:33:8::1;14:177:12::0;26405:539:8;781:13:9;:11;:13::i;:::-;-1:-1:-1;;;;;26504:19:8;::::1;;::::0;;;:8:::1;:19:::0;;;;;;::::1;;:43:::0;::::1;;;-1:-1:-1::0;;;;;;26528:19:8;::::1;;::::0;;;:8:::1;:19:::0;;;;;;::::1;;26527:20;26504:43;26496:71;;;::::0;-1:-1:-1;;;26496:71:8;;22010:2:12;26496:71:8::1;::::0;::::1;21992:21:12::0;22049:2;22029:18;;;22022:30;-1:-1:-1;;;22068:18:12;;;22061:45;22123:18;;26496:71:8::1;21808:339:12::0;26496:71:8::1;-1:-1:-1::0;;;;;26586:23:8;::::1;26578:51;;;;-1:-1:-1::0;;;26578:51:8::1;;;;;;;:::i;:::-;26647:6;26642:165;26663:1;26659;:5;26642:165;;;26704:9;-1:-1:-1::0;;;;;26690:23:8::1;:7;26698:1;26690:10;;;;;;;:::i;:::-;;::::0;-1:-1:-1;;;;;26690:10:8::1;:23:::0;26686:110:::1;;26747:9;26734:7;26742:1;26734:10;;;;;;;:::i;:::-;;:22:::0;;-1:-1:-1;;;;;;26734:22:8::1;-1:-1:-1::0;;;;;26734:22:8;;;::::1;::::0;;;::::1;::::0;;26775:5:::1;;26686:110;26666:3;;26642:165;;;-1:-1:-1::0;;;;;;26819:19:8;;::::1;26841:5;26819:19:::0;;;:8:::1;:19:::0;;;;;;;:27;;-1:-1:-1;;26819:27:8;;::::1;::::0;;;26857:19;;::::1;::::0;;;;;;;:26;;;;::::1;-1:-1:-1::0;26857:26:8::1;::::0;;;26901:35;;22326:51:12;;;22393:18;;22386:60;26901:35:8::1;::::0;22299:18:12;26901:35:8::1;22152:300:12::0;25970:245:8;781:13:9;:11;:13::i;:::-;-1:-1:-1;;;;;26060:26:8;::::1;26052:54;;;;-1:-1:-1::0;;;26052:54:8::1;;;;;;;:::i;:::-;26117:14;:29:::0;;-1:-1:-1;;;;;;26117:29:8::1;-1:-1:-1::0;;;;;26117:29:8;::::1;::::0;;::::1;::::0;;;26157:50:::1;::::0;-1:-1:-1;;;26157:50:8;;::::1;::::0;::::1;1627:51:12::0;;;;1130:42:8::1;::::0;26157:36:::1;::::0;1600:18:12;;26157:50:8::1;1481:203:12::0;25117:230:8;781:13:9;:11;:13::i;:::-;-1:-1:-1;;;;;25203:27:8;::::1;25195:55;;;;-1:-1:-1::0;;;25195:55:8::1;;;;;;;:::i;:::-;25261:12;:28:::0;;-1:-1:-1;;;;;;25261:28:8::1;-1:-1:-1::0;;;;;25261:28:8;::::1;::::0;;::::1;::::0;;;25305:34:::1;::::0;1627:51:12;;;25305:34:8::1;::::0;1615:2:12;1600:18;25305:34:8::1;1481:203:12::0;18148:333:8;18220:10;18211:20;;;;:8;:20;;;;;;;;18203:45;;;;-1:-1:-1;;;18203:45:8;;22659:2:12;18203:45:8;;;22641:21:12;22698:2;22678:18;;;22671:30;-1:-1:-1;;;22717:18:12;;;22710:42;22769:18;;18203:45:8;22457:336:12;18203:45:8;18288:29;;18268:50;;;;:19;:50;;;;;;;;18319:10;18268:62;;;;;;;;;;18267:63;18259:90;;;;-1:-1:-1;;;18259:90:8;;23000:2:12;18259:90:8;;;22982:21:12;23039:2;23019:18;;;23012:30;-1:-1:-1;;;23058:18:12;;;23051:44;23112:18;;18259:90:8;22798:338:12;18259:90:8;18382:29;;18362:50;;;;:19;:50;;;;;;;;18413:10;18362:62;;;;;;;:69;;-1:-1:-1;;18362:69:8;18427:4;18362:69;;;18442:29;:31;;;;;;:::i;:::-;;;;;;18148:333::o;9496:2054::-;325:21:10;:19;:21::i;:::-;9601:8:8::1;::::0;::::1;;9600:9;9592:40;;;::::0;-1:-1:-1;;;9592:40:8;;23343:2:12;9592:40:8::1;::::0;::::1;23325:21:12::0;23382:2;23362:18;;;23355:30;-1:-1:-1;;;23401:18:12;;;23394:48;23459:18;;9592:40:8::1;23141:342:12::0;9592:40:8::1;9659:1;9651:5;:9;9643:43;;;::::0;-1:-1:-1;;;9643:43:8;;23690:2:12;9643:43:8::1;::::0;::::1;23672:21:12::0;23729:2;23709:18;;;23702:30;-1:-1:-1;;;23748:18:12;;;23741:51;23809:18;;9643:43:8::1;23488:345:12::0;9643:43:8::1;9707:21;9731:24;9744:10;9731:12;:24::i;:::-;9707:48;;9766:21;9805:13;9790:12;;:28;;;;:::i;:::-;9766:52:::0;-1:-1:-1;9829:27:8::1;9859:24;9766:52:::0;9877:5;9859:17:::1;:24::i;:::-;9829:54;;9915:19;9902:9;:32;9894:65;;;::::0;-1:-1:-1;;;9894:65:8;;24040:2:12;9894:65:8::1;::::0;::::1;24022:21:12::0;24079:2;24059:18;;;24052:30;-1:-1:-1;;;24098:18:12;;;24091:50;24158:18;;9894:65:8::1;23838:344:12::0;9894:65:8::1;10023:22;::::0;-1:-1:-1;;;10023:22:8;::::1;;;10019:121;;;10083:15;;10070:9;:28;;10062:66;;;::::0;-1:-1:-1;;;10062:66:8;;24389:2:12;10062:66:8::1;::::0;::::1;24371:21:12::0;24428:2;24408:18;;;24401:30;24467:27;24447:18;;;24440:55;24512:18;;10062:66:8::1;24187:349:12::0;10062:66:8::1;10152:23;10178:39;10192:24;:13:::0;10210:5;10192:17:::1;:24::i;:::-;10178:9;::::0;:13:::1;:39::i;:::-;10250:18;::::0;10152:65;;-1:-1:-1;10281:949:8::1;10288:19:::0;;10281:949:::1;;10324:17;10344:18:::0;;;:5:::1;:18;::::0;;;;10412;;10399:8:::1;::::0;10344:18;;10324:17;10399:32:::1;::::0;:12:::1;:32::i;:::-;10377:54:::0;-1:-1:-1;10464:15:8;;10460:715:::1;;10500:23;10544:11;10526:15;:29;:61;;10572:15;10526:61;;;10558:11;10526:61;10500:87;;10606:65;10617:10;10629:11;10642:15;10659:11;10606:10;:65::i;:::-;10708:36;:15:::0;10728;10708:19:::1;:36::i;:::-;10690:54;;10791:8;;10769:4;:18;;;:30;10765:294;;10838:4;10824:11:::0;;::::1;:18:::0;;-1:-1:-1;;10824:18:8::1;::::0;;::::1;::::0;;10894:19:::1;::::0;::::1;::::0;10915:20:::1;::::0;::::1;::::0;10937:18;;10870:86:::1;::::0;;24772:25:12;;;24828:2;24813:18;;24806:34;;;;24856:18;;24849:34;;;;24914:2;24899:18;;24892:34;10870:86:8::1;::::0;24759:3:12;24744:19;10870:86:8::1;;;;;;;1624:3;10993:11;:24;:46;;11024:15;:11:::0;11038:1:::1;11024:15;:::i;:::-;10993:46;;;11020:1;10993:46;10979:60;;10765:294;10481:593;10460:715;;;1624:3;11113:11;:24;:46;;11144:15;:11:::0;11158:1:::1;11144:15;:::i;:::-;11113:46;;;11140:1;11113:46;11099:60;;10460:715;11213:5;11191:18;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10281:949:8::1;::::0;-1:-1:-1;;;10281:949:8::1;;11289:17;11309:24;:13:::0;11327:5;11309:17:::1;:24::i;:::-;11390:18;::::0;11384:25:::1;::::0;;;:5:::1;:25;::::0;;;;:37:::1;;::::0;11289:44;;-1:-1:-1;11384:52:8::1;::::0;11289:44;11384:41:::1;:52::i;:::-;11350:18;::::0;11344:25:::1;::::0;;;:5:::1;:25;::::0;;;;:37:::1;;:92:::0;11462:12:::1;::::0;:27:::1;::::0;11479:9;11462:16:::1;:27::i;:::-;11447:12;:42:::0;-1:-1:-1;11510:18:8::1;:32:::0;-1:-1:-1;369:20:10;;-1:-1:-1;369:18:10;;-1:-1:-1;;369:20:10:i;:::-;9496:2054:8;;:::o;26227:170::-;781:13:9;:11;:13::i;:::-;26320:14:8::1;:7:::0;26330:4:::1;26320:14;:::i;:::-;26302:15;:32:::0;;;26350:39:::1;::::0;160:25:12;;;26350:39:8::1;::::0;148:2:12;133:18;26350:39:8::1;14:177:12::0;1202:220:9;781:13;:11;:13::i;:::-;-1:-1:-1;;;;;1287:22:9;::::1;1283:93;;1333:31;::::0;-1:-1:-1;;;1333:31:9;;1361:1:::1;1333:31;::::0;::::1;1627:51:12::0;1600:18;;1333:31:9::1;1481:203:12::0;1283:93:9::1;1386:28;1405:8;1386:18;:28::i;:::-;1202:220:::0;:::o;18489:385:8:-;781:13:9;:11;:13::i;:::-;2750:1:8::1;18565:29;;:52;;18557:88;;;::::0;-1:-1:-1;;;18557:88:8;;25312:2:12;18557:88:8::1;::::0;::::1;25294:21:12::0;25351:2;25331:18;;;25324:30;25390:25;25370:18;;;25363:53;25433:18;;18557:88:8::1;25110:347:12::0;18557:88:8::1;18656:20;:18;:20::i;:::-;18729:1;18697:29;:33:::0;;;18741:126:::1;18762:1;18758;:5;18741:126;;;18805:29;::::0;18850:5:::1;18785:50:::0;;;:19:::1;:50;::::0;;;;18850:5;18836:7:::1;18844:1:::0;18836:10:::1;::::0;::::1;;;;;:::i;:::-;;::::0;-1:-1:-1;;;;;18836:10:8::1;18785:62:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18785:62:8;:70;;-1:-1:-1;;18785:70:8::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;18765:3:8::1;18741:126;;7695:247:::0;781:13:9;:11;:13::i;:::-;-1:-1:-1;;;;;7782:26:8;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35:::1;;::::0;::::1;;7774:58;;;::::0;-1:-1:-1;;;7774:58:8;;25664:2:12;7774:58:8::1;::::0;::::1;25646:21:12::0;25703:2;25683:18;;;25676:30;-1:-1:-1;;;25722:18:12;;;25715:40;25772:18;;7774:58:8::1;25462:334:12::0;7774:58:8::1;-1:-1:-1::0;;;;;7843:26:8;::::1;7881:5;7843:26:::0;;;:18:::1;:26;::::0;;;;;;;;:35:::1;;:43:::0;;-1:-1:-1;;7843:43:8::1;::::0;;7902:32;;1627:51:12;;;7902:32:8::1;::::0;1600:18:12;7902:32:8::1;1481:203:12::0;917:166:9;895:6;;-1:-1:-1;;;;;895:6:9;681:10:0;977:23:9;973:103;;1024:40;;-1:-1:-1;;;1024:40:9;;681:10:0;1024:40:9;;;1627:51:12;1600:18;;1024:40:9;1481:203:12;1413:98:11;1471:7;1498:5;1502:1;1498;:5;:::i;:::-;1491:12;;1413:98;;;;;:::o;1519:::-;1577:7;1604:5;1608:1;1604;:5;:::i;1430:191:9:-;1523:6;;;-1:-1:-1;;;;;1540:17:9;;;-1:-1:-1;;;;;;1540:17:9;;;;;;;1573:40;;1523:6;;;1540:17;1523:6;;1573:40;;1504:16;;1573:40;1493:128;1430:191;:::o;1307:98:11:-;1365:7;1392:5;1396:1;1392;:5;:::i;1201:98::-;1259:7;1286:5;1290:1;1286;:5;:::i;15776:1132:8:-;15866:18;;;:54;;-1:-1:-1;15888:13:8;;;;:5;:13;;;;;:27;:32;15866:54;15862:67;;;15776:1132;;:::o;15862:67::-;15941:24;16011:22;;;:14;:22;;;;;15941:24;16046:688;16070:17;;16066:21;;16046:688;;;16109:17;16129:10;16140:1;16129:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;16179:20;;;:12;:20;;;;;;-1:-1:-1;;;;;16129:13:8;;;16179:31;;;;;;;;;:38;16129:13;;-1:-1:-1;16250:15:8;;16246:477;;16286:23;16347:13;;;:5;:13;;;;;:27;16312:63;;:30;:11;16328:13;16312:15;:30::i;:63::-;16286:89;-1:-1:-1;16398:19:8;;16394:314;;16450:11;;;:48;;-1:-1:-1;;;16450:48:8;;-1:-1:-1;;;;;18371:32:12;;;16450:48:8;;;18353:51:12;;;;18420:18;;;18413:34;;;16450:11:8;;;:20;;18326:18:12;;16450:48:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16442:76;;;;-1:-1:-1;;;16442:76:8;;26225:2:12;16442:76:8;;;26207:21:12;26264:2;26244:18;;;26237:30;-1:-1:-1;;;26283:18:12;;;26276:45;26338:18;;16442:76:8;26023:339:12;16442:76:8;16560:37;:16;16581:15;16560:20;:37::i;:::-;16541:56;;16643:9;-1:-1:-1;;;;;16625:63:8;;16654:15;16671:16;;16625:63;;;;;;20340:25:12;;;20396:2;20381:18;;20374:34;20328:2;20313:18;;20166:248;16625:63:8;;;;;;;;16394:314;16267:456;16246:477;-1:-1:-1;;16089:3:8;;16046:688;;;-1:-1:-1;16746:16:8;16765:35;:13;16783:16;16765:17;:35::i;:::-;16746:54;-1:-1:-1;16815:12:8;;16811:90;;16861:14;;:28;;16880:8;16861:18;:28::i;:::-;16844:14;:45;15851:1057;;;15776:1132;;:::o;16916:963::-;17037:49;;-1:-1:-1;;;17037:49:8;;17065:4;17037:49;;;22326:51:12;;;22393:18;;;22386:60;17003:21:8;;-1:-1:-1;;;;;1023:42:8;17037:19;;22299:18:12;;17037:49:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17125:21:8;17097:25;17179:37;17125:21;17201:14;17179:21;:37::i;:::-;17229:47;;-1:-1:-1;;;17229:47:8;;17255:4;17229:47;;;22326:51:12;;;22393:18;;;22386:60;17157:59:8;;-1:-1:-1;;;;;;1023:42:8;17229:17;;22299:18:12;;17229:47:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17310:21:8;17287:20;17362:35;17310:21;17379:17;17362:16;:35::i;:::-;17342:55;-1:-1:-1;17410:19:8;17432:26;:11;17342:55;17432:15;:26::i;:::-;17410:48;-1:-1:-1;17475:15:8;;17471:401;;17534:14;;17593:47;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17593:47:8;-1:-1:-1;;;17593:47:8;;;17526:129;;17508:12;;-1:-1:-1;;;;;17534:14:8;;17562:11;;17526:129;;17593:47;17526:129;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17507:148;;;17678:7;17670:48;;;;-1:-1:-1;;;17670:48:8;;26569:2:12;17670:48:8;;;26551:21:12;26608:2;26588:18;;;26581:30;26647;26627:18;;;26620:58;26695:18;;17670:48:8;26367:352:12;17670:48:8;17747:14;;;;;;;;;-1:-1:-1;;;;;17747:14:8;-1:-1:-1;;;;;17747:31:8;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17814:46:8;;;20340:25:12;;;20396:2;20381:18;;20374:34;;;17814:46:8;;-1:-1:-1;20313:18:12;;-1:-1:-1;17814:46:8;;;;;;;17492:380;17471:401;16967:912;;;;;;16916:963::o;405:150:10:-;185:1;463:7;;:19;455:63;;;;-1:-1:-1;;;455:63:10;;26926:2:12;455:63:10;;;26908:21:12;26965:2;26945:18;;;26938:30;27004:33;26984:18;;;26977:61;27055:18;;455:63:10;26724:355:12;455:63:10;185:1;529:7;:18;405:150::o;11558:693:8:-;11662:17;11682:13;;;:5;:13;;;;;;;;11720:12;:20;;;;;-1:-1:-1;;;;;11720:26:8;;;;;;;;;:33;11682:13;;11720:38;11716:104;;11775:22;;;;:14;:22;;;;;;;:33;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11775:33:8;-1:-1:-1;;;;;11775:33:8;;;;;11716:104;11868:20;;;;:12;:20;;;;;;;;-1:-1:-1;;;;;11868:26:8;;;;;;;;;:33;:45;;11906:6;11868:37;:45::i;:::-;11832:20;;;;:12;:20;;;;;;;;-1:-1:-1;;;;;11832:26:8;;;;;;;;;:81;;;11924:38;;:52;;-1:-1:-1;;11924:52:8;;;;;;;12018:18;;:30;;12041:6;12018:22;:30::i;:::-;11997:51;;12059:185;;;;12113:19;;;;:31;;12137:6;12113:23;:31::i;:::-;12091:19;;;:53;12059:185;;;12200:20;;;;:32;;12225:6;12200:24;:32::i;:::-;12177:20;;;:55;11651:600;11558:693;;;;:::o;563:79:10:-;141:1;612:7;:22;563:79::o;18882:1161:8:-;19008:11;;;:36;;-1:-1:-1;;;19008:36:8;;19038:4;19008:36;;;1627:51:12;;;;18952:21:8;;18931:18;;-1:-1:-1;;;;;19008:11:8;;:21;;1600:18:12;;19008:36:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18984:60;;19066:12;19084:7;895:6:9;;-1:-1:-1;;;;;895:6:9;;822:87;19084:7:8;-1:-1:-1;;;;;19084:12:8;19104:10;19084:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19065:54;;;19138:7;19130:39;;;;-1:-1:-1;;;19130:39:8;;27286:2:12;19130:39:8;;;27268:21:12;27325:2;27305:18;;;27298:30;-1:-1:-1;;;27344:18:12;;;27337:49;27403:18;;19130:39:8;27084:343:12;19130:39:8;19198:11;;-1:-1:-1;;;;;19198:11:8;:20;19219:7;895:6:9;;-1:-1:-1;;;;;895:6:9;;822:87;19219:7:8;19198:44;;-1:-1:-1;;;;;;19198:44:8;;;;;;;-1:-1:-1;;;;;18371:32:12;;;19198:44:8;;;18353:51:12;18420:18;;;18413:34;;;18326:18;;19198:44:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19190:79;;;;-1:-1:-1;;;19190:79:8;;18660:2:12;19190:79:8;;;18642:21:12;18699:2;18679:18;;;18672:30;-1:-1:-1;;;18718:18:12;;;18711:52;18780:18;;19190:79:8;18458:346:12;19190:79:8;19323:29;;19295:85;;;8400:25:12;;;8456:2;8441:18;;8434:34;;;8484:18;;8477:34;;;19295:85:8;;8388:2:12;8373:18;19295:85:8;;;;;;;19438:1;19421:319;1624:3;19441:1;:14;19421:319;;19484:8;;;;:5;:8;;;;;;;;19477:15;;;;;;;;-1:-1:-1;;19477:15:8;;;;;;;;;;;;;;;;;;;;;;;;;;19538:14;:17;;;;;;19570:120;19594:17;;19590:21;;19570:120;;;19644:12;:15;19657:1;19644:15;;;;;;;;;;;:30;19660:10;19671:1;19660:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19660:13:8;19644:30;;;;;;;;;;;;19637:37;;;19660:13;19637:37;;;;;-1:-1:-1;;19637:37:8;;;19613:3;19570:120;;;-1:-1:-1;19711:17:8;;;;:14;:17;;;;;19704:24;;;:::i;:::-;-1:-1:-1;19457:3:8;;;;:::i;:::-;;;;19421:319;;;-1:-1:-1;;19773:1:8;19752:18;:22;;;19785:12;:16;;;19812;:20;;;19843:13;:17;;;19871:14;:18;;;19900:23;:31;;-1:-1:-1;;19900:31:8;;;19942:16;:29;;-1:-1:-1;;;;;;19942:29:8;;;20013:18;:22;-1:-1:-1;;18882:1161:8:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:118:12:-;282:5;275:13;268:21;261:5;258:32;248:60;;304:1;301;294:12;319:241;375:6;428:2;416:9;407:7;403:23;399:32;396:52;;;444:1;441;434:12;396:52;483:9;470:23;502:28;524:5;502:28;:::i;:::-;549:5;319:241;-1:-1:-1;;;319:241:12:o;565:226::-;624:6;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;-1:-1:-1;738:23:12;;565:226;-1:-1:-1;565:226:12:o;1130:346::-;1198:6;1206;1259:2;1247:9;1238:7;1234:23;1230:32;1227:52;;;1275:1;1272;1265:12;1227:52;-1:-1:-1;;1320:23:12;;;1440:2;1425:18;;;1412:32;;-1:-1:-1;1130:346:12:o;1689:173::-;1757:20;;-1:-1:-1;;;;;1806:31:12;;1796:42;;1786:70;;1852:1;1849;1842:12;1786:70;1689:173;;;:::o;1867:186::-;1926:6;1979:2;1967:9;1958:7;1954:23;1950:32;1947:52;;;1995:1;1992;1985:12;1947:52;2018:29;2037:9;2018:29;:::i;2058:420::-;2111:3;2149:5;2143:12;2176:6;2171:3;2164:19;2208:4;2203:3;2199:14;2192:21;;2247:4;2240:5;2236:16;2270:1;2280:173;2294:6;2291:1;2288:13;2280:173;;;2355:13;;2343:26;;2398:4;2389:14;;;;2426:17;;;;2316:1;2309:9;2280:173;;;-1:-1:-1;2469:3:12;;2058:420;-1:-1:-1;;;;2058:420:12:o;2483:433::-;2533:3;2571:5;2565:12;2598:6;2593:3;2586:19;2630:4;2625:3;2621:14;2614:21;;2669:4;2662:5;2658:16;2692:1;2702:189;2716:6;2713:1;2710:13;2702:189;;;2791:13;;2784:21;2777:29;2765:42;;2836:4;2827:14;;;;2864:17;;;;2738:1;2731:9;2702:189;;2921:1053;3394:3;3383:9;3376:22;3357:4;3421:57;3473:3;3462:9;3458:19;3450:6;3421:57;:::i;:::-;3526:9;3518:6;3514:22;3509:2;3498:9;3494:18;3487:50;3560:44;3597:6;3589;3560:44;:::i;:::-;3546:58;;3652:9;3644:6;3640:22;3635:2;3624:9;3620:18;3613:50;3686:41;3720:6;3712;3686:41;:::i;:::-;3672:55;;3775:9;3767:6;3763:22;3758:2;3747:9;3743:18;3736:50;3809:41;3843:6;3835;3809:41;:::i;:::-;3795:55;;3899:9;3891:6;3887:22;3881:3;3870:9;3866:19;3859:51;3927:41;3961:6;3953;3927:41;:::i;:::-;3919:49;2921:1053;-1:-1:-1;;;;;;;;2921:1053:12:o;4611:413::-;4840:6;4829:9;4822:25;4897:6;4890:14;4883:22;4878:2;4867:9;4863:18;4856:50;4942:2;4937;4926:9;4922:18;4915:30;4803:4;4962:56;5014:2;5003:9;4999:18;4991:6;4962:56;:::i;:::-;4954:64;4611:413;-1:-1:-1;;;;;4611:413:12:o;6151:857::-;6552:3;6541:9;6534:22;6515:4;6579:57;6631:3;6620:9;6616:19;6608:6;6579:57;:::i;:::-;6684:9;6676:6;6672:22;6667:2;6656:9;6652:18;6645:50;6718:41;6752:6;6744;6718:41;:::i;:::-;6704:55;;6807:9;6799:6;6795:22;6790:2;6779:9;6775:18;6768:50;6841:41;6875:6;6867;6841:41;:::i;:::-;6827:55;;6930:9;6922:6;6918:22;6913:2;6902:9;6898:18;6891:50;6958:44;6995:6;6987;6958:44;:::i;:::-;6950:52;6151:857;-1:-1:-1;;;;;;;6151:857:12:o;8749:435::-;8823:6;8831;8839;8892:2;8880:9;8871:7;8867:23;8863:32;8860:52;;;8908:1;8905;8898:12;8860:52;8931:29;8950:9;8931:29;:::i;:::-;8921:39;-1:-1:-1;9029:2:12;9014:18;;9001:32;;-1:-1:-1;9109:2:12;9094:18;;9081:32;9122:30;9081:32;9122:30;:::i;:::-;9171:7;9161:17;;;8749:435;;;;;:::o;9189:300::-;9257:6;9265;9318:2;9306:9;9297:7;9293:23;9289:32;9286:52;;;9334:1;9331;9324:12;9286:52;9379:23;;;-1:-1:-1;9445:38:12;9479:2;9464:18;;9445:38;:::i;:::-;9435:48;;9189:300;;;;;:::o;9494:260::-;9562:6;9570;9623:2;9611:9;9602:7;9598:23;9594:32;9591:52;;;9639:1;9636;9629:12;9591:52;9662:29;9681:9;9662:29;:::i;:::-;9652:39;;9710:38;9744:2;9733:9;9729:18;9710:38;:::i;10022:361::-;10087:6;10095;10148:2;10136:9;10127:7;10123:23;10119:32;10116:52;;;10164:1;10161;10154:12;10116:52;10209:23;;;-1:-1:-1;10308:2:12;10293:18;;10280:32;10321:30;10280:32;10321:30;:::i;:::-;10370:7;10360:17;;;10022:361;;;;;:::o;10732:245::-;10799:6;10852:2;10840:9;10831:7;10827:23;10823:32;10820:52;;;10868:1;10865;10858:12;10820:52;10900:9;10894:16;10919:28;10941:5;10919:28;:::i;10982:338::-;11184:2;11166:21;;;11223:2;11203:18;;;11196:30;-1:-1:-1;;;11257:2:12;11242:18;;11235:44;11311:2;11296:18;;10982:338::o;13280:339::-;13482:2;13464:21;;;13521:2;13501:18;;;13494:30;-1:-1:-1;;;13555:2:12;13540:18;;13533:45;13610:2;13595:18;;13280:339::o;13756:127::-;13817:10;13812:3;13808:20;13805:1;13798:31;13848:4;13845:1;13838:15;13872:4;13869:1;13862:15;13888:127;13949:10;13944:3;13940:20;13937:1;13930:31;13980:4;13977:1;13970:15;14004:4;14001:1;13994:15;14020:135;14059:3;14080:17;;;14077:43;;14100:18;;:::i;:::-;-1:-1:-1;14147:1:12;14136:13;;14020:135::o;15902:128::-;15969:9;;;15990:11;;;15987:37;;;16004:18;;:::i;16035:184::-;16105:6;16158:2;16146:9;16137:7;16133:23;16129:32;16126:52;;;16174:1;16171;16164:12;16126:52;-1:-1:-1;16197:16:12;;16035:184;-1:-1:-1;16035:184:12:o;17287:125::-;17352:9;;;17373:10;;;17370:36;;;17386:18;;:::i;19154:301::-;19283:3;19321:6;19315:13;19367:6;19360:4;19352:6;19348:17;19343:3;19337:37;19429:1;19393:16;;19418:13;;;-1:-1:-1;19393:16:12;19154:301;-1:-1:-1;19154:301:12:o;24937:168::-;25010:9;;;25041;;25058:15;;;25052:22;;25038:37;25028:71;;25079:18;;:::i;25801:217::-;25841:1;25867;25857:132;;25911:10;25906:3;25902:20;25899:1;25892:31;25946:4;25943:1;25936:15;25974:4;25971:1;25964:15;25857:132;-1:-1:-1;26003:9:12;;25801:217::o

Swarm Source

ipfs://acfbf7f13f49faf28c4151b8b0d3a391438cbeeab0d722c18f93f427ed7f90a1

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.