APE Price: $0.19 (-1.67%)

Contract

0x0717330c1a9e269a0e034aBB101c8d32Ac0e9600

Overview

APE Balance

Apechain LogoApechain LogoApechain Logo146.9856 APE

APE Value

$27.56 (@ $0.19/APE)

More Info

Private Name Tags

Multichain Info

N/A
Transaction Hash
Block
From
To
Play327955062026-01-24 22:37:464 secs ago1769294266IN
0x0717330c...2Ac0e9600
25.07321158 APE0.06471833101.68276
Play327952802026-01-24 22:31:216 mins ago1769293881IN
0x0717330c...2Ac0e9600
5.07321158 APE0.06474405101.68276
Play327952662026-01-24 22:30:596 mins ago1769293859IN
0x0717330c...2Ac0e9600
10.07321158 APE0.06471955101.68276
Play327952592026-01-24 22:30:507 mins ago1769293850IN
0x0717330c...2Ac0e9600
10.07321158 APE0.06471955101.68276
Play327952222026-01-24 22:29:508 mins ago1769293790IN
0x0717330c...2Ac0e9600
4.07321158 APE0.06473785101.68276
Play327952072026-01-24 22:29:348 mins ago1769293774IN
0x0717330c...2Ac0e9600
0.17321158 APE0.06473785101.68276
Play327952022026-01-24 22:29:268 mins ago1769293766IN
0x0717330c...2Ac0e9600
0.17321158 APE0.06473785101.68276
Play327952002026-01-24 22:29:198 mins ago1769293759IN
0x0717330c...2Ac0e9600
0.17321158 APE0.06473785101.68276
Play327951972026-01-24 22:29:138 mins ago1769293753IN
0x0717330c...2Ac0e9600
0.17321158 APE0.06473785101.68276
Play327951502026-01-24 22:27:4810 mins ago1769293668IN
0x0717330c...2Ac0e9600
15.07321158 APE0.06471955101.68276
Play327951432026-01-24 22:27:3510 mins ago1769293655IN
0x0717330c...2Ac0e9600
15.07321158 APE0.06471955101.68276
Play327949562026-01-24 22:22:1215 mins ago1769293332IN
0x0717330c...2Ac0e9600
15.07321158 APE0.06471955101.68276
Play327947112026-01-24 22:13:0624 mins ago1769292786IN
0x0717330c...2Ac0e9600
54.47321158 APE0.06450947101.68276
Play327947052026-01-24 22:12:5824 mins ago1769292778IN
0x0717330c...2Ac0e9600
54.47321158 APE0.06450947101.68276
Play327946942026-01-24 22:12:4425 mins ago1769292764IN
0x0717330c...2Ac0e9600
24.97321158 APE0.06450947101.68276
Play327946862026-01-24 22:12:3525 mins ago1769292755IN
0x0717330c...2Ac0e9600
24.97321158 APE0.06450947101.68276
Play327946812026-01-24 22:12:2725 mins ago1769292747IN
0x0717330c...2Ac0e9600
24.97321158 APE0.06957195101.68276
Play327946712026-01-24 22:12:1825 mins ago1769292738IN
0x0717330c...2Ac0e9600
24.97321158 APE0.06957195101.68276
Play327946682026-01-24 22:12:0825 mins ago1769292728IN
0x0717330c...2Ac0e9600
24.97321158 APE0.06450947101.68276
Play327946612026-01-24 22:11:5825 mins ago1769292718IN
0x0717330c...2Ac0e9600
24.97321158 APE0.06450947101.68276
Play327946572026-01-24 22:11:5026 mins ago1769292710IN
0x0717330c...2Ac0e9600
24.97321158 APE0.06450947101.68276
Play327946512026-01-24 22:11:3926 mins ago1769292699IN
0x0717330c...2Ac0e9600
24.97321158 APE0.06450825101.68276
Play327946372026-01-24 22:11:1826 mins ago1769292678IN
0x0717330c...2Ac0e9600
287.07321158 APE0.06450947101.68276
Play327946262026-01-24 22:11:0426 mins ago1769292664IN
0x0717330c...2Ac0e9600
287.07321158 APE0.06450947101.68276
Play327946252026-01-24 22:11:0426 mins ago1769292664IN
0x0717330c...2Ac0e9600
10.07321158 APE0.06471955101.68276
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
327955082026-01-24 22:37:473 secs ago1769294267
0x0717330c...2Ac0e9600
24.45 APE
327955062026-01-24 22:37:464 secs ago1769294266
0x0717330c...2Ac0e9600
0.07321158 APE
327955062026-01-24 22:37:464 secs ago1769294266
0x0717330c...2Ac0e9600
0.55 APE
327952812026-01-24 22:31:236 mins ago1769293883
0x0717330c...2Ac0e9600
4.89 APE
327952802026-01-24 22:31:216 mins ago1769293881
0x0717330c...2Ac0e9600
0.07321158 APE
327952802026-01-24 22:31:216 mins ago1769293881
0x0717330c...2Ac0e9600
0.11 APE
327952672026-01-24 22:31:006 mins ago1769293860
0x0717330c...2Ac0e9600
9.78 APE
327952662026-01-24 22:30:596 mins ago1769293859
0x0717330c...2Ac0e9600
0.07321158 APE
327952662026-01-24 22:30:596 mins ago1769293859
0x0717330c...2Ac0e9600
0.22 APE
327952612026-01-24 22:30:526 mins ago1769293852
0x0717330c...2Ac0e9600
9.78 APE
327952592026-01-24 22:30:507 mins ago1769293850
0x0717330c...2Ac0e9600
0.07321158 APE
327952592026-01-24 22:30:507 mins ago1769293850
0x0717330c...2Ac0e9600
0.22 APE
327952252026-01-24 22:29:527 mins ago1769293792
0x0717330c...2Ac0e9600
3.912 APE
327952222026-01-24 22:29:508 mins ago1769293790
0x0717330c...2Ac0e9600
0.07321158 APE
327952222026-01-24 22:29:508 mins ago1769293790
0x0717330c...2Ac0e9600
0.088 APE
327952082026-01-24 22:29:368 mins ago1769293776
0x0717330c...2Ac0e9600
0.0978 APE
327952072026-01-24 22:29:348 mins ago1769293774
0x0717330c...2Ac0e9600
0.07321158 APE
327952072026-01-24 22:29:348 mins ago1769293774
0x0717330c...2Ac0e9600
0.0022 APE
327952042026-01-24 22:29:288 mins ago1769293768
0x0717330c...2Ac0e9600
0.0978 APE
327952022026-01-24 22:29:268 mins ago1769293766
0x0717330c...2Ac0e9600
0.07321158 APE
327952022026-01-24 22:29:268 mins ago1769293766
0x0717330c...2Ac0e9600
0.0022 APE
327952012026-01-24 22:29:218 mins ago1769293761
0x0717330c...2Ac0e9600
0.0978 APE
327952002026-01-24 22:29:198 mins ago1769293759
0x0717330c...2Ac0e9600
0.07321158 APE
327952002026-01-24 22:29:198 mins ago1769293759
0x0717330c...2Ac0e9600
0.0022 APE
327951982026-01-24 22:29:148 mins ago1769293754
0x0717330c...2Ac0e9600
0.0978 APE
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ApeStrong

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at apescan.io on 2025-08-11
*/

//SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

interface IGovernanceManager {
    function RNG() external view returns (address);
    function owner() external view returns (address);
    function referralManager() external view returns (address);
    function feeReceiver() external view returns (address);
    function claimManager() external view returns (address);
    function house() external view returns (address);
    function isGame(address game) external view returns (bool);
    function userInfoTracker() external view returns (address);
    function canPlayForOthers(address addr) external view returns (bool);
    function paused() external view returns (bool);
    function isAdmin(address admin) external view returns (bool);
}

interface IRNG {
    function requestRandom(bytes32 userRandomNumber, uint8 numWords) external payable returns (uint64);
    function getFee() external view returns (uint256);
}

contract ApeOwnable {

    // Governance Manager
    IGovernanceManager public constant manager = IGovernanceManager(0x8632f22e5A921C751CFbBFF92F058A3b11E96b8a);

    modifier onlyOwner() {
        require(
            msg.sender == manager.owner(),
            'Only Owner'
        );
        _;
    }

    modifier onlyGame() {
        require(
            manager.isGame(msg.sender),
            'UnAuthorized'
        );
        _;
    }

    modifier onlyRNG() {
        require(
            msg.sender == manager.RNG(),
            'Only RNG Contract'
        );
        _;
    }

    modifier validatePlayer(address player) {
        if (player != msg.sender) {
            require(
                manager.canPlayForOthers(msg.sender),
                'UnAuthorized To Play For Others'
            );
        }
        _;
    }

    modifier notPaused() {
        require(
            manager.paused() == false,
            'All Games Paused'
        );
        _;
    }

    modifier onlyAdmin() {
        require(
            manager.isAdmin(msg.sender),
            'UnAuthorized'
        );
        _;
    }
}

interface IGame {
    /**
        Callback to provide us with randomness
     */
    function fulfillRandomWords(
        uint64 requestId,
        uint256[] calldata randomWords
    ) external;

    function play(address user, bytes calldata gameData) external payable;
}

interface IUserInfoTracker {
    function wagered(address user, uint256 amount, uint256 GAME_ID) external;
}

interface IClaimManager {
    function credit(
        uint256 GAME_ID,
        address user
    ) external payable;
    function claim() external;
}

interface IHistoryManager {
    function addData(address user, uint256 GAME_ID, uint256 gameId) external;
}

interface IFeeRecipient {
    function takeFee(address ref, address player) external payable;
}

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeApprove: approve failed'
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeTransfer: transfer failed'
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::transferFrom: transferFrom failed'
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
    }
}

interface IHouse {
    
    /**
        House has profited from game, call this to send value into the house and emit the correct event for SubGraphs
     */
    function houseProfit(uint256 GAME_ID) external payable;

    /**
        Function Games Call to tell the house that a user has won the bet
     */
    function payout(uint256 GAME_ID, address user, uint256 value) external;
    
    /**
        Read function to determine the maximum payout allowed by the house at the current time
     */
    function maxPayout() external view returns (uint256);

    /**
        Randomness has been requested, withdrawals are paused until it is resolved by called `randomRequestResolved()`
     */
    function randomRequested() external;

    /**
        Resolves a random request from chainlink, allowing house users to withdraw
     */
    function randomRequestResolved() external;

}

/**
    Game Master Class, any inheriting game must pass the necessary fields into the constructor
 */
contract GameMasterclass is ApeOwnable, IGame {

    // GAME ID
    uint256 public immutable GAME_ID;

    // History Manager
    IHistoryManager public immutable history;

    /** Game Is Either Paused Or Unpaused */
    bool public paused = false;

    /** List of all used game ids */
    uint256[] public usedGameIds;
    mapping ( uint256 => bool ) internal isUsedGameId;

    // request ID => GameID
    mapping ( uint64 => uint256 ) private requestToGame;

    /// @notice emitted after a random request has been sent out
    event RandomnessRequested(uint256 gameId);

    /**
        Builds The Necessary Components Of Any Game
     */
    constructor(
        uint256 GAME_ID_,
        address history_
    )  {

        // set other variables
        GAME_ID = GAME_ID_;
        history = IHistoryManager(history_);
    }

    //////////////////////////////////////
    ///////    OWNER FUNCTIONS    ////////
    //////////////////////////////////////

    function pause() external onlyOwner {
        paused = true;
    }

    function resume() external onlyOwner {
        paused = false;
    }

    function withdrawETH(address to, uint256 amount) external onlyOwner {
        (bool s,) = payable(to).call{value: amount}("");
        require(s);
    }

    function withdrawToken(address token, uint amount) external onlyOwner {
        TransferHelper.safeTransfer(token, msg.sender, amount);
    }

    function _registerBet(address user, uint256 amount) internal {
        IUserInfoTracker(manager.userInfoTracker()).wagered(user, amount, GAME_ID);
    }

    function _processFee(uint256 feeAmount, address ref, address player) internal {
        IFeeRecipient(manager.feeReceiver()).takeFee{value: feeAmount}(ref, player);
    }
    
    function getVRFFee() public view returns (uint256) {
        return IRNG(manager.RNG()).getFee();
    }

    function fulfillRandomWords(uint64 requestId, uint256[] calldata randomWords) external virtual {}

    function play(address player, bytes calldata gameData) external payable override validatePlayer(player) notPaused() {
        require(
            !paused,
            'Paused'
        );

        // play game
        _playGame(player, gameData);
    }

    function _playGame(address player, bytes calldata gameData) internal virtual {}

    function _handlePayout(address player, uint256 totalToPayout, uint256 amountForHouse) internal {

        if (totalToPayout > 0) {
            // there is a payout, we won something

            if (totalToPayout >= amountForHouse) {
                // the user has won more than we are giving to the house
                // this means we need to send them (to claim manager) amountForHouse directly
                // and only request that the house `payout` the difference!

                // add to user's claim manager the amount for the house
                IClaimManager(manager.claimManager()).credit{value: amountForHouse}(
                    GAME_ID,
                    player
                );

                // get the difference
                uint256 remaining = totalToPayout - amountForHouse;
                if (remaining > 0) {
                    // payout the rest from the house
                    IHouse(manager.house()).payout(GAME_ID, player, remaining);
                }
                
            } else {
                // the user has won less than we are giving to the house
                // pay them out directly in full, send whatever is left over to the house

                // add to user's claim manager the amount for the house
                IClaimManager(manager.claimManager()).credit{value: totalToPayout}(
                    GAME_ID,
                    player
                );

                // calculate remaining left for the house
                uint256 remaining = amountForHouse - totalToPayout;

                // send the remaining to the house
                IHouse(manager.house()).houseProfit{value: remaining }(GAME_ID);

            }
        
        } else {
            // we won nothing, send the house everything
            IHouse(manager.house()).houseProfit{value: amountForHouse }(GAME_ID);
        }

    }

    /// @dev logs the gameId in the used list and adds game to player's history
    function _registerGameId(address player, uint256 gameId) internal {

        // set history data
        history.addData(player, GAME_ID, gameId);

        // add to list of used game ids
        usedGameIds.push(gameId);
        isUsedGameId[gameId] = true;
    }

    function _requestRandom(uint256 gameId, uint8 numWords, bytes32 userRandomWord) internal {

        // request random words from RNG contract
        uint64 requestId = IRNG(manager.RNG()).requestRandom{value: getVRFFee()}(
            userRandomWord, // random user seed
            numWords        // the number of random results to return
        );

        // require that the requestId is unused
        require(
            requestToGame[requestId] == 0,
            'RequestId In Use'
        );

        // map this request ID to the game it belongs to
        requestToGame[requestId] = gameId;

        // set data in house
        IHouse(manager.house()).randomRequested();

        // emit event
        emit RandomnessRequested(gameId);
    }

    function _resolveRandom(uint64 requestId) internal {
        // resolve request in house
        IHouse(manager.house()).randomRequestResolved();

        // clear storage
        delete requestToGame[requestId];
    }

    function getGameIdFromRequest(uint64 requestId) internal view returns (uint256) {
        return requestToGame[requestId];
    }

    function getHouse() public view returns (address) {
        return manager.house();
    }

    function isValidGameId(uint256 gameId) public view returns (bool) {
        return isUsedGameId[gameId] == false && gameId > 0;
    }

    function batchCallIsUsedGameId(uint256[] calldata gameIds) external view returns (bool[] memory isUsed) {
        uint len = gameIds.length;
        isUsed = new bool[](len);
        for (uint i = 0; i < len;) {
            isUsed[i] = isUsedGameId[gameIds[i]];
            unchecked { ++i; }
        }
    }

    function paginateUsedGameIDs(uint256 start, uint256 end) external view returns (uint256[] memory) {
        if (end > usedGameIds.length) {
            end = usedGameIds.length;
        }
        uint256[] memory ids = new uint256[](end - start);
        for (uint i = start; i < end;) {
            ids[i - start] = usedGameIds[i];
            unchecked { ++i; }
        }
        return ids;
    }

    function numUsedGameIDs() external view returns (uint256) {
        return usedGameIds.length;
    }

    function getEssentialGameInfo(uint256[] calldata gameIds) external view virtual returns (
        address[] memory players,
        uint256[] memory buyInAmounts,
        uint256[] memory totalPayouts,
        uint256[] memory timestamps,
        bool[] memory hasEndeds
    ) {}

    function batchRawGameInfo(uint256[] calldata gameIds) external view virtual returns (bytes[] memory) {}
}

/**
    ApeStrong Game
 */
contract ApeStrong is GameMasterclass {

    // Game Struct
    struct Game {

        /** Player */
        address player;

        /** Amount Bet Per Guess */
        uint256 betAmount;

        /** Total Amount For House */
        uint256 amountForHouse;

        /** Edge Flip Range */
        uint8 edgeFlipRange;

        /** Winning number */
        uint8 winningNumber;

        /** Total Payout Amount */
        uint256 totalPayout;

        /** timestamp */
        uint256 timestamp;

        /** Whether or not the game has ended and the VRF has called back */
        bool hasEnded;
    }

    // GameInfoReturnType
    struct GameInfoReturnType {
        address player;
        uint256 betAmount;
        uint8 edgeFlipRange;
        uint8 winningNumber;
        uint256 totalPayout;
        bool hasEnded;
        uint256 timestamp;
    }

    // mapping from GameID => Game
    mapping ( uint256 => Game ) public games;

    // request ID => GameID
    mapping ( uint256 => uint256 ) private requestToGame;

    /** Platform Fee Taken Out Of Buy In */
    uint256 public platformFee = 200;

    /** Partner Cut */
    uint256 public partnerFeeCut = 40;
    address public partnerAddress;

    // maps a given range to a payout multiplier
    mapping ( uint8 => uint256 ) public edgeFlipRangeToPayout;

    // Odds locked means the odds can never be updated
    bool public oddsLocked;

    /** Precision Denominator */
    uint256 private constant PRECISION_DENOM = 10_000; // 0.01x precision

    /// @notice emitted after the platform fee has been changed
    event SetPlatformFee(uint256 newFee);

    /// @notice emitted after a game has been started at a specific table
    event GameStarted(address indexed user, uint256 gameId);

    /// @notice Emitted after the VRF comes back with the index of the winning player
    event GameEnded(
        address indexed user, 
        uint256 gameId, 
        uint256 buyIn,
        uint256 payout
    );

    /// @notice Emitted if the fulfilRandomWords function needs to return out for any reason
    event FulfilRandomFailed(uint256 requestId, uint256 gameId, uint256[] randomWords);

    /// @notice Emitted when the reel data is updated, emits the odds associated with the reel data
    event OddsLocked();

    constructor(

        /** History Manager */
        address history_

    ) GameMasterclass(12, history_) {

    }

    function setPlatformFee(uint256 newPlatform) external onlyOwner {
        require(
            newPlatform <= PRECISION_DENOM / 20,
            'Cannot Exceed 5%'
        );
        platformFee = newPlatform;
        emit SetPlatformFee(newPlatform);
    }

    function setPartnerAddress(address partner_) external onlyOwner {
        partnerAddress = partner_;
    }

    function setPartnerFeeCut(uint256 newCut) external onlyOwner {
        require(
            newCut < 100,
            '100% Partner Fee'
        );
        partnerFeeCut = newCut;
    }

    function setRangeToPayout(
        uint8[] calldata edgeFlipRanges,
        uint256[] calldata payouts
    ) external onlyOwner {
        require(
            edgeFlipRanges.length == payouts.length,
            'Invalid Lengths'
        );

        for (uint i = 0; i < edgeFlipRanges.length;) {
            require(
                edgeFlipRanges[i] < 100 && edgeFlipRanges[i] > 0,
                'Invalid Edge Flip Range'
            );
            require(
                payouts[i] < 100 * PRECISION_DENOM,
                'Invalid Payout'
            );
            edgeFlipRangeToPayout[edgeFlipRanges[i]] = payouts[i];
            unchecked { ++i; }
        }
    }

    function _playGame(address player, bytes calldata gameData) internal override {

        // determine vrf fee
        uint256 vrfFee = getVRFFee();

        // decode gameData
        (
            uint8 edgeFlipRange,
            uint256 gameId,
            address ref,
            bytes32 userRandomWord
        ) = abi.decode(gameData, (uint8, uint256, address, bytes32));

        // validate inputs
        require(
            msg.value >= vrfFee,
            'ERR: MIN BUY IN'
        );
        require(
            isValidGameId(gameId) == true,
            'ERR: INVALID GAME ID'
        );
        require(
            edgeFlipRangeToPayout[edgeFlipRange] > 0,
            'Invalid Edge Flip Range'
        );

        // determine total bet amount
        uint256 totalBetAmount = msg.value - vrfFee;

        // take platform fee out of the buy in
        uint256 platformFeeAmount = ( totalBetAmount * platformFee ) / PRECISION_DENOM;

        if (partnerAddress == address(0) || partnerFeeCut == 0) {

            // send to platform receiver (taking ref into account)
            _processFee(platformFeeAmount, ref, player);

        } else {

            // partner cut
            uint256 partnerCut = ( platformFeeAmount * partnerFeeCut ) / 100;

            // subtract from platform fee
            uint256 realPlatformAmount = platformFeeAmount - partnerCut;

            // send to platform receiver (taking ref into account)
            _processFee(realPlatformAmount, ref, player);

            // send to partner
            TransferHelper.safeTransferETH(partnerAddress, partnerCut);
        }

        // save game data
        games[gameId].player = player;
        games[gameId].betAmount = totalBetAmount;
        games[gameId].amountForHouse = totalBetAmount - platformFeeAmount;
        games[gameId].edgeFlipRange = edgeFlipRange;
        games[gameId].timestamp = block.timestamp;

        // register game Id
        _registerGameId(player, gameId);

        // register bet
        _registerBet(player, totalBetAmount);
        
        // emit event
        emit GameStarted(player, gameId);

        // fetch random number
        _requestRandom(gameId, 1, userRandomWord);

    }

    /**
        Callback to provide us with randomness
     */
    function fulfillRandomWords(
        uint64 requestId,
        uint256[] calldata randomWords
    ) external override onlyRNG {

        // get game ID from requestId
        uint256 gameId = getGameIdFromRequest(requestId);

        // resolve randomness
        _resolveRandom(requestId);

        // get game ID from requestId
        uint256 betAmount = games[gameId].betAmount;
        uint8 edgeFlipRange = games[gameId].edgeFlipRange;
        
        // if faulty ID, remove
        if (
            gameId == 0 || 
            games[gameId].player == address(0) || 
            games[gameId].hasEnded == true ||
            betAmount == 0 ||
            edgeFlipRangeToPayout[edgeFlipRange] == 0
        ) {
            emit FulfilRandomFailed(requestId, gameId, randomWords);
            return;
        }

        // set game has ended
        games[gameId].hasEnded = true;

        // total to pay out for the house and total to send the house
        uint256 totalToPayout = 0;

        // check if the random number is within the edge flip range
        uint8 winningNumber = uint8(randomWords[0] % 100);

        // set winning number
        games[gameId].winningNumber = winningNumber;

        if (winningNumber < edgeFlipRange) {
            // we have a winning number, calculate payout
            totalToPayout = ( edgeFlipRangeToPayout[edgeFlipRange] * betAmount ) / PRECISION_DENOM;
        }

        // save payout info
        games[gameId].totalPayout = totalToPayout;

        // handle payouts
        _handlePayout(games[gameId].player, totalToPayout, games[gameId].amountForHouse);

        // emit game ended event
        emit GameEnded(games[gameId].player, gameId, betAmount, totalToPayout);
    }

    function getGameInfo(uint256 gameId) public view returns (
        GameInfoReturnType memory
    ) {
        return GameInfoReturnType({
            player: games[gameId].player,
            betAmount: games[gameId].betAmount,
            edgeFlipRange: games[gameId].edgeFlipRange,
            winningNumber: games[gameId].winningNumber,
            totalPayout: games[gameId].totalPayout,
            hasEnded: games[gameId].hasEnded,
            timestamp: games[gameId].timestamp
        });
    }

    function batchGameInfo(uint256[] calldata gameIds) external view returns (
        GameInfoReturnType[] memory
    ) {
        uint len = gameIds.length;
        GameInfoReturnType[] memory retTypes = new GameInfoReturnType[](len);
        
        for (uint i = 0; i < len;) {
            retTypes[i] = getGameInfo(gameIds[i]);
            unchecked { ++i; }
        }

        return retTypes;
    }

    function batchRawGameInfo(uint256[] calldata gameIds) external view override returns (bytes[] memory) {
        uint len = gameIds.length;
        bytes[] memory retTypes = new bytes[](len);
        for (uint i = 0; i < len;) {
            retTypes[i] = abi.encode(getGameInfo(gameIds[i]));
            unchecked { ++i; }
        }
        return retTypes;
    }

    function getEssentialGameInfo(uint256[] calldata gameIds) external view override returns (
        address[] memory players,
        uint256[] memory buyInAmounts,
        uint256[] memory totalPayouts,
        uint256[] memory timestamps,
        bool[] memory hasEndeds
    ) {
        uint len = gameIds.length;
        players = new address[](len);
        buyInAmounts = new uint256[](len);
        totalPayouts = new uint256[](len);
        timestamps = new uint256[](len);
        hasEndeds = new bool[](len);

        for (uint i = 0; i < len;) {
            players[i] = games[gameIds[i]].player;
            buyInAmounts[i] = games[gameIds[i]].betAmount;
            totalPayouts[i] = games[gameIds[i]].totalPayout;
            timestamps[i] = games[gameIds[i]].timestamp;
            hasEndeds[i] = games[gameIds[i]].hasEnded;
            unchecked { ++i; }
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"history_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"FulfilRandomFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"GameStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"OddsLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"RandomnessRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"SetPlatformFee","type":"event"},{"inputs":[],"name":"GAME_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchCallIsUsedGameId","outputs":[{"internalType":"bool[]","name":"isUsed","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchGameInfo","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"edgeFlipRange","type":"uint8"},{"internalType":"uint8","name":"winningNumber","type":"uint8"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct ApeStrong.GameInfoReturnType[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchRawGameInfo","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"edgeFlipRangeToPayout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"requestId","type":"uint64"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"fulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint256","name":"amountForHouse","type":"uint256"},{"internalType":"uint8","name":"edgeFlipRange","type":"uint8"},{"internalType":"uint8","name":"winningNumber","type":"uint8"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"getEssentialGameInfo","outputs":[{"internalType":"address[]","name":"players","type":"address[]"},{"internalType":"uint256[]","name":"buyInAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"totalPayouts","type":"uint256[]"},{"internalType":"uint256[]","name":"timestamps","type":"uint256[]"},{"internalType":"bool[]","name":"hasEndeds","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGameInfo","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"edgeFlipRange","type":"uint8"},{"internalType":"uint8","name":"winningNumber","type":"uint8"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct ApeStrong.GameInfoReturnType","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHouse","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVRFFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"history","outputs":[{"internalType":"contract IHistoryManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"isValidGameId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract IGovernanceManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numUsedGameIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oddsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"paginateUsedGameIDs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerFeeCut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"bytes","name":"gameData","type":"bytes"}],"name":"play","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"partner_","type":"address"}],"name":"setPartnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCut","type":"uint256"}],"name":"setPartnerFeeCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPlatform","type":"uint256"}],"name":"setPlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"edgeFlipRanges","type":"uint8[]"},{"internalType":"uint256[]","name":"payouts","type":"uint256[]"}],"name":"setRangeToPayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedGameIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526000805460ff1916905560c8600655602860075534801561002457600080fd5b5060405161342038038061342083398101604081905261004391610059565b600c6080526001600160a01b031660a052610089565b60006020828403121561006b57600080fd5b81516001600160a01b038116811461008257600080fd5b9392505050565b60805160a05161333a6100e6600039600081816105b5015261279601526000818161069701528181611dae01528181611eb901528181611fb9015281816120c0015281816121b60152818161276901526128d4015261333a6000f3fe6080604052600436106101d85760003560e01c80635c975abb1161010257806398daac8311610095578063c811ad7111610064578063c811ad7114610648578063cc81d0551461065b578063f0034a7e14610670578063fdcdb06b1461068557600080fd5b806398daac83146105a35780639e281a98146105d7578063c4fd5d6d146105f7578063c6d33e8d1461062857600080fd5b80638456cb59116100d15780638456cb591461052b57806389fc2c0f1461054057806391ea41e61461056057806398af61601461058d57600080fd5b80635c975abb146104975780636d380d28146104b1578063749fa03c146104de5780637b8d3879146104fe57600080fd5b80632e6e800b1161017a578063481c6a7511610149578063481c6a751461040857806348e8294a1461042a57806351e9255914610457578063576168fc1461047757600080fd5b80632e6e800b1461036e57806332883e7e1461038e5780634782f779146103bb57806347e1d550146103db57600080fd5b8063117a5b90116101b6578063117a5b901461025057806312e8e2c31461030a57806326232a2e1461032a5780632dffa8691461034e57600080fd5b8063046f7da2146101dd5780630476f004146101f457806304e2064f14610223575b600080fd5b3480156101e957600080fd5b506101f26106b9565b005b34801561020057600080fd5b50600a5461020e9060ff1681565b60405190151581526020015b60405180910390f35b34801561022f57600080fd5b5061023861076e565b6040516001600160a01b03909116815260200161021a565b34801561025c57600080fd5b506102bf61026b366004612ba6565b600460208190526000918252604090912080546001820154600283015460038401549484015460058501546006909501546001600160a01b03909416959294919360ff808516946101009004811693911688565b604080516001600160a01b03909916895260208901979097529587019490945260ff92831660608701529116608085015260a084015260c0830152151560e08201526101000161021a565b34801561031657600080fd5b506101f2610325366004612ba6565b6107e5565b34801561033657600080fd5b5061034060065481565b60405190815260200161021a565b34801561035a57600080fd5b506101f2610369366004612ba6565b61090f565b34801561037a57600080fd5b506101f2610389366004612bd7565b6109f7565b34801561039a57600080fd5b506103ae6103a9366004612bfb565b610ab9565b60405161021a9190612c59565b3480156103c757600080fd5b506101f26103d6366004612c6c565b610b7d565b3480156103e757600080fd5b506103fb6103f6366004612ba6565b610c82565b60405161021a9190612cec565b34801561041457600080fd5b506102386000805160206132e583398151915281565b34801561043657600080fd5b5061044a610445366004612d45565b610d33565b60405161021a9190612d86565b34801561046357600080fd5b5061020e610472366004612ba6565b610e14565b34801561048357600080fd5b50600854610238906001600160a01b031681565b3480156104a357600080fd5b5060005461020e9060ff1681565b3480156104bd57600080fd5b506103406104cc366004612dea565b60096020526000908152604090205481565b3480156104ea57600080fd5b506101f26104f9366004612e1a565b610e34565b34801561050a57600080fd5b5061051e610519366004612d45565b611127565b60405161021a9190612ea2565b34801561053757600080fd5b506101f26111e4565b34801561054c57600080fd5b5061034061055b366004612ba6565b611293565b34801561056c57600080fd5b5061058061057b366004612d45565b6112b4565b60405161021a9190612ed9565b34801561059957600080fd5b5061034060075481565b3480156105af57600080fd5b506102387f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e357600080fd5b506101f26105f2366004612c6c565b61136b565b34801561060357600080fd5b50610617610612366004612d45565b61141a565b60405161021a959493929190612f59565b34801561063457600080fd5b506101f2610643366004612ff9565b61174d565b6101f2610656366004613068565b6119ac565b34801561066757600080fd5b50600154610340565b34801561067c57600080fd5b50610340611b73565b34801561069157600080fd5b506103407f000000000000000000000000000000000000000000000000000000000000000081565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072991906130ed565b6001600160a01b0316336001600160a01b0316146107625760405162461bcd60e51b81526004016107599061310a565b60405180910390fd5b6000805460ff19169055565b60006000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906130ed565b905090565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085591906130ed565b6001600160a01b0316336001600160a01b0316146108855760405162461bcd60e51b81526004016107599061310a565b610892601461271061315a565b8111156108d45760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f742045786365656420352560801b6044820152606401610759565b60068190556040518181527f05fd392cc4f8fe360ff8b094f628b1c29b9000441290e2f8a597c12d5379b06d9060200160405180910390a150565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f91906130ed565b6001600160a01b0316336001600160a01b0316146109af5760405162461bcd60e51b81526004016107599061310a565b606481106109f25760405162461bcd60e51b815260206004820152601060248201526f3130302520506172746e65722046656560801b6044820152606401610759565b600755565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906130ed565b6001600160a01b0316336001600160a01b031614610a975760405162461bcd60e51b81526004016107599061310a565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600154606090821115610acc5760015491505b6000610ad8848461316e565b6001600160401b03811115610aef57610aef613181565b604051908082528060200260200182016040528015610b18578160200160208202803683370190505b509050835b83811015610b735760018181548110610b3857610b38613197565b9060005260206000200154828683610b50919061316e565b81518110610b6057610b60613197565b6020908102919091010152600101610b1d565b5090505b92915050565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906130ed565b6001600160a01b0316336001600160a01b031614610c1d5760405162461bcd60e51b81526004016107599061310a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c6a576040519150601f19603f3d011682016040523d82523d6000602084013e610c6f565b606091505b5050905080610c7d57600080fd5b505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506040805160e08101825260008381526004602081815284832080546001600160a01b03168552600181015482860152600381015460ff808216978701979097526101009004861660608601528083015460808601526006810154909516151560a0850152949091529092526005015460c082015290565b6060816000816001600160401b03811115610d5057610d50613181565b604051908082528060200260200182016040528015610db757816020015b6040805160e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c08201528252600019909201910181610d6e5790505b50905060005b82811015610e0b57610de6868683818110610dda57610dda613197565b90506020020135610c82565b828281518110610df857610df8613197565b6020908102919091010152600101610dbd565b50949350505050565b60008181526002602052604081205460ff16158015610b77575050151590565b6000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea491906130ed565b6001600160a01b0316336001600160a01b031614610ef85760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b6044820152606401610759565b6001600160401b038316600090815260036020526040902054610f1a84611c46565b6000818152600460205260409020600181015460039091015460ff16821580610f5857506000838152600460205260409020546001600160a01b0316155b80610f79575060008381526004602052604090206006015460ff1615156001145b80610f82575081155b80610f9d575060ff8116600090815260096020526040902054155b15610fe7577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a586848787604051610fd794939291906131ad565b60405180910390a1505050505050565b6000838152600460205260408120600601805460ff191660011790558060648787838161101657611016613197565b9050602002013561102791906131ff565b6000868152600460205260409020600301805460ff808416610100810261ff0019909316929092179092559192508416111561108c5760ff83166000908152600960205260409020546127109061107f908690613213565b611089919061315a565b91505b600085815260046020819052604090912090810183905580546002909101546110c0916001600160a01b0316908490611d22565b6000858152600460209081526040918290205482518881529182018790529181018490526001600160a01b03909116907fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae89060600160405180910390a25050505050505050565b606081806001600160401b0381111561114257611142613181565b60405190808252806020026020018201604052801561116b578160200160208202803683370190505b50915060005b818110156111dc576002600086868481811061118f5761118f613197565b90506020020135815260200190815260200160002060009054906101000a900460ff168382815181106111c4576111c4613197565b91151560209283029190910190910152600101611171565b505092915050565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125491906130ed565b6001600160a01b0316336001600160a01b0316146112845760405162461bcd60e51b81526004016107599061310a565b6000805460ff19166001179055565b600181815481106112a357600080fd5b600091825260209091200154905081565b6060816000816001600160401b038111156112d1576112d1613181565b60405190808252806020026020018201604052801561130457816020015b60608152602001906001900390816112ef5790505b50905060005b82811015610e0b57611327868683818110610dda57610dda613197565b6040516020016113379190612cec565b60405160208183030381529060405282828151811061135857611358613197565b602090810291909101015260010161130a565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113db91906130ed565b6001600160a01b0316336001600160a01b03161461140b5760405162461bcd60e51b81526004016107599061310a565b61141682338361220c565b5050565b60608080808085806001600160401b0381111561143957611439613181565b604051908082528060200260200182016040528015611462578160200160208202803683370190505b509550806001600160401b0381111561147d5761147d613181565b6040519080825280602002602001820160405280156114a6578160200160208202803683370190505b509450806001600160401b038111156114c1576114c1613181565b6040519080825280602002602001820160405280156114ea578160200160208202803683370190505b509350806001600160401b0381111561150557611505613181565b60405190808252806020026020018201604052801561152e578160200160208202803683370190505b509250806001600160401b0381111561154957611549613181565b604051908082528060200260200182016040528015611572578160200160208202803683370190505b50915060005b8181101561174157600460008a8a8481811061159657611596613197565b90506020020135815260200190815260200160002060000160009054906101000a90046001600160a01b03168782815181106115d4576115d4613197565b60200260200101906001600160a01b031690816001600160a01b031681525050600460008a8a8481811061160a5761160a613197565b9050602002013581526020019081526020016000206001015486828151811061163557611635613197565b602002602001018181525050600460008a8a8481811061165757611657613197565b9050602002013581526020019081526020016000206004015485828151811061168257611682613197565b602002602001018181525050600460008a8a848181106116a4576116a4613197565b905060200201358152602001908152602001600020600501548482815181106116cf576116cf613197565b602002602001018181525050600460008a8a848181106116f1576116f1613197565b90506020020135815260200190815260200160002060060160009054906101000a900460ff1683828151811061172957611729613197565b91151560209283029190910190910152600101611578565b50509295509295909350565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd91906130ed565b6001600160a01b0316336001600160a01b0316146117ed5760405162461bcd60e51b81526004016107599061310a565b82811461182e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204c656e6774687360881b6044820152606401610759565b60005b838110156119a557606485858381811061184d5761184d613197565b90506020020160208101906118629190612dea565b60ff1610801561189b5750600085858381811061188157611881613197565b90506020020160208101906118969190612dea565b60ff16115b6118e15760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964204564676520466c69702052616e676560481b6044820152606401610759565b6118ee6127106064613213565b83838381811061190057611900613197565b90506020020135106119455760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a590814185e5bdd5d60921b6044820152606401610759565b82828281811061195757611957613197565b905060200201356009600087878581811061197457611974613197565b90506020020160208101906119899190612dea565b60ff168152602081019190915260400160002055600101611831565b5050505050565b826001600160a01b0381163314611a7657604051636d6d50a160e11b81523360048201526000805160206132e58339815191529063dadaa14290602401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a919061322a565b611a765760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f7468657273006044820152606401610759565b6000805160206132e58339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae6919061322a565b15611b265760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b6044820152606401610759565b60005460ff1615611b625760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b6044820152606401610759565b611b6d848484612336565b50505050565b60006000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be591906130ed565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e0919061324c565b6000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb691906130ed565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b811561213557808210611f3a576000805160206132e58339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9f91906130ed565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b505050505060008183611e32919061316e565b90508015611b6d576000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaa91906130ed565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b158015611f1c57600080fd5b505af1158015611f30573d6000803e3d6000fd5b5050505050505050565b6000805160206132e58339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faa91906130ed565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b50505050506000828261203d919061316e565b90506000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af91906130ed565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016120fd91815260200190565b6000604051808303818588803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505050505050565b6000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a591906130ed565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016121f391815260200190565b6000604051808303818588803b158015611f1c57600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916122689190613265565b6000604051808303816000865af19150503d80600081146122a5576040519150601f19603f3d011682016040523d82523d6000602084013e6122aa565b606091505b50915091508180156122d45750805115806122d45750808060200190518101906122d4919061322a565b6119a55760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610759565b6000612340611b73565b9050600080808061235386880188613281565b93509350935093508434101561239d5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b6044820152606401610759565b6123a683610e14565b15156001146123ee5760405162461bcd60e51b81526020600482015260146024820152731154948e88125395905312510811d0535148125160621b6044820152606401610759565b60ff84166000908152600960205260409020546124475760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964204564676520466c69702052616e676560481b6044820152606401610759565b6000612453863461316e565b90506000612710600654836124689190613213565b612472919061315a565b6008549091506001600160a01b0316158061248d5750600754155b156124a25761249d81858c6125c6565b6124f2565b60006064600754836124b49190613213565b6124be919061315a565b905060006124cc828461316e565b90506124d981878e6125c6565b6008546124ef906001600160a01b031683612670565b50505b600085815260046020526040902080546001600160a01b0319166001600160a01b038c16178155600101829055612529818361316e565b6000868152600460205260409020600281019190915560038101805460ff191660ff8916179055426005909101556125618a8661274a565b61256b8a8361283e565b896001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c7866040516125a691815260200190565b60405180910390a26125ba8560018561293c565b50505050505050505050565b6000805160206132e58339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906130ed565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e59085906044016121f3565b604080516000808252602082019092526001600160a01b03841690839060405161269a9190613265565b60006040518083038185875af1925050503d80600081146126d7576040519150601f19603f3d011682016040523d82523d6000602084013e6126dc565b606091505b5050905080610c7d5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610759565b604051639a4918c160e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000006024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690639a4918c190606401600060405180830381600087803b1580156127da57600080fd5b505af11580156127ee573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206132e58339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae91906130ed565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f00000000000000000000000000000000000000000000000000000000000000006044830152919091169063eb3d9bea90606401600060405180830381600087803b15801561292057600080fd5b505af1158015612934573d6000803e3d6000fd5b505050505050565b60006000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ae91906130ed565b6001600160a01b03166397cca7af6129c4611b73565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612a09573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2e91906132c7565b6001600160401b03811660009081526003602052604090205490915015612a8a5760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b6044820152606401610759565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206132e58339815191529263ff9b3acf9260048083019391928290030181865afa158015612af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1591906130ed565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b4f57600080fd5b505af1158015612b63573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051612b9891815260200190565b60405180910390a150505050565b600060208284031215612bb857600080fd5b5035919050565b6001600160a01b0381168114612bd457600080fd5b50565b600060208284031215612be957600080fd5b8135612bf481612bbf565b9392505050565b60008060408385031215612c0e57600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b82811015612c4f578151865260209586019590910190600101612c31565b5093949350505050565b602081526000612bf46020830184612c1d565b60008060408385031215612c7f57600080fd5b8235612c8a81612bbf565b946020939093013593505050565b60018060a01b0381511682526020810151602083015260ff604082015116604083015260ff60608201511660608301526080810151608083015260a0810151151560a083015260c081015160c08301525050565b60e08101610b778284612c98565b60008083601f840112612d0c57600080fd5b5081356001600160401b03811115612d2357600080fd5b6020830191508360208260051b8501011115612d3e57600080fd5b9250929050565b60008060208385031215612d5857600080fd5b82356001600160401b03811115612d6e57600080fd5b612d7a85828601612cfa565b90969095509350505050565b602080825282518282018190526000918401906040840190835b81811015612dc957612db3838551612c98565b6020939093019260e09290920191600101612da0565b509095945050505050565b803560ff81168114612de557600080fd5b919050565b600060208284031215612dfc57600080fd5b612bf482612dd4565b6001600160401b0381168114612bd457600080fd5b600080600060408486031215612e2f57600080fd5b8335612e3a81612e05565b925060208401356001600160401b03811115612e5557600080fd5b612e6186828701612cfa565b9497909650939450505050565b600081518084526020840193506020830160005b82811015612c4f5781511515865260209586019590910190600101612e82565b602081526000612bf46020830184612e6e565b60005b83811015612ed0578181015183820152602001612eb8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612f4d57603f1987860301845281518051808752612f2a816020890160208501612eb5565b601f01601f19169590950160209081019550938401939190910190600101612f01565b50929695505050505050565b60a08082528651908201819052600090602088019060c0840190835b81811015612f9c5783516001600160a01b0316835260209384019390920191600101612f75565b50508381036020850152612fb08189612c1d565b9150508281036040840152612fc58187612c1d565b90508281036060840152612fd98186612c1d565b90508281036080840152612fed8185612e6e565b98975050505050505050565b6000806000806040858703121561300f57600080fd5b84356001600160401b0381111561302557600080fd5b61303187828801612cfa565b90955093505060208501356001600160401b0381111561305057600080fd5b61305c87828801612cfa565b95989497509550505050565b60008060006040848603121561307d57600080fd5b833561308881612bbf565b925060208401356001600160401b038111156130a357600080fd5b8401601f810186136130b457600080fd5b80356001600160401b038111156130ca57600080fd5b8660208284010111156130dc57600080fd5b939660209190910195509293505050565b6000602082840312156130ff57600080fd5b8151612bf481612bbf565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826131695761316961312e565b500490565b81810381811115610b7757610b77613144565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b038311156131e457600080fd5b8260051b808560808501379190910160800195945050505050565b60008261320e5761320e61312e565b500690565b8082028115828204841417610b7757610b77613144565b60006020828403121561323c57600080fd5b81518015158114612bf457600080fd5b60006020828403121561325e57600080fd5b5051919050565b60008251613277818460208701612eb5565b9190910192915050565b6000806000806080858703121561329757600080fd5b6132a085612dd4565b93506020850135925060408501356132b781612bbf565b9396929550929360600135925050565b6000602082840312156132d957600080fd5b8151612bf481612e0556fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa264697066735822122024c9925682ff758cc5b181f18f0ecd3c8efad1f48cfc25b0a3faf1c76209b28b64736f6c634300081c0033000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80635c975abb1161010257806398daac8311610095578063c811ad7111610064578063c811ad7114610648578063cc81d0551461065b578063f0034a7e14610670578063fdcdb06b1461068557600080fd5b806398daac83146105a35780639e281a98146105d7578063c4fd5d6d146105f7578063c6d33e8d1461062857600080fd5b80638456cb59116100d15780638456cb591461052b57806389fc2c0f1461054057806391ea41e61461056057806398af61601461058d57600080fd5b80635c975abb146104975780636d380d28146104b1578063749fa03c146104de5780637b8d3879146104fe57600080fd5b80632e6e800b1161017a578063481c6a7511610149578063481c6a751461040857806348e8294a1461042a57806351e9255914610457578063576168fc1461047757600080fd5b80632e6e800b1461036e57806332883e7e1461038e5780634782f779146103bb57806347e1d550146103db57600080fd5b8063117a5b90116101b6578063117a5b901461025057806312e8e2c31461030a57806326232a2e1461032a5780632dffa8691461034e57600080fd5b8063046f7da2146101dd5780630476f004146101f457806304e2064f14610223575b600080fd5b3480156101e957600080fd5b506101f26106b9565b005b34801561020057600080fd5b50600a5461020e9060ff1681565b60405190151581526020015b60405180910390f35b34801561022f57600080fd5b5061023861076e565b6040516001600160a01b03909116815260200161021a565b34801561025c57600080fd5b506102bf61026b366004612ba6565b600460208190526000918252604090912080546001820154600283015460038401549484015460058501546006909501546001600160a01b03909416959294919360ff808516946101009004811693911688565b604080516001600160a01b03909916895260208901979097529587019490945260ff92831660608701529116608085015260a084015260c0830152151560e08201526101000161021a565b34801561031657600080fd5b506101f2610325366004612ba6565b6107e5565b34801561033657600080fd5b5061034060065481565b60405190815260200161021a565b34801561035a57600080fd5b506101f2610369366004612ba6565b61090f565b34801561037a57600080fd5b506101f2610389366004612bd7565b6109f7565b34801561039a57600080fd5b506103ae6103a9366004612bfb565b610ab9565b60405161021a9190612c59565b3480156103c757600080fd5b506101f26103d6366004612c6c565b610b7d565b3480156103e757600080fd5b506103fb6103f6366004612ba6565b610c82565b60405161021a9190612cec565b34801561041457600080fd5b506102386000805160206132e583398151915281565b34801561043657600080fd5b5061044a610445366004612d45565b610d33565b60405161021a9190612d86565b34801561046357600080fd5b5061020e610472366004612ba6565b610e14565b34801561048357600080fd5b50600854610238906001600160a01b031681565b3480156104a357600080fd5b5060005461020e9060ff1681565b3480156104bd57600080fd5b506103406104cc366004612dea565b60096020526000908152604090205481565b3480156104ea57600080fd5b506101f26104f9366004612e1a565b610e34565b34801561050a57600080fd5b5061051e610519366004612d45565b611127565b60405161021a9190612ea2565b34801561053757600080fd5b506101f26111e4565b34801561054c57600080fd5b5061034061055b366004612ba6565b611293565b34801561056c57600080fd5b5061058061057b366004612d45565b6112b4565b60405161021a9190612ed9565b34801561059957600080fd5b5061034060075481565b3480156105af57600080fd5b506102387f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa81565b3480156105e357600080fd5b506101f26105f2366004612c6c565b61136b565b34801561060357600080fd5b50610617610612366004612d45565b61141a565b60405161021a959493929190612f59565b34801561063457600080fd5b506101f2610643366004612ff9565b61174d565b6101f2610656366004613068565b6119ac565b34801561066757600080fd5b50600154610340565b34801561067c57600080fd5b50610340611b73565b34801561069157600080fd5b506103407f000000000000000000000000000000000000000000000000000000000000000c81565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072991906130ed565b6001600160a01b0316336001600160a01b0316146107625760405162461bcd60e51b81526004016107599061310a565b60405180910390fd5b6000805460ff19169055565b60006000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906130ed565b905090565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085591906130ed565b6001600160a01b0316336001600160a01b0316146108855760405162461bcd60e51b81526004016107599061310a565b610892601461271061315a565b8111156108d45760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f742045786365656420352560801b6044820152606401610759565b60068190556040518181527f05fd392cc4f8fe360ff8b094f628b1c29b9000441290e2f8a597c12d5379b06d9060200160405180910390a150565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f91906130ed565b6001600160a01b0316336001600160a01b0316146109af5760405162461bcd60e51b81526004016107599061310a565b606481106109f25760405162461bcd60e51b815260206004820152601060248201526f3130302520506172746e65722046656560801b6044820152606401610759565b600755565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906130ed565b6001600160a01b0316336001600160a01b031614610a975760405162461bcd60e51b81526004016107599061310a565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600154606090821115610acc5760015491505b6000610ad8848461316e565b6001600160401b03811115610aef57610aef613181565b604051908082528060200260200182016040528015610b18578160200160208202803683370190505b509050835b83811015610b735760018181548110610b3857610b38613197565b9060005260206000200154828683610b50919061316e565b81518110610b6057610b60613197565b6020908102919091010152600101610b1d565b5090505b92915050565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906130ed565b6001600160a01b0316336001600160a01b031614610c1d5760405162461bcd60e51b81526004016107599061310a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c6a576040519150601f19603f3d011682016040523d82523d6000602084013e610c6f565b606091505b5050905080610c7d57600080fd5b505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506040805160e08101825260008381526004602081815284832080546001600160a01b03168552600181015482860152600381015460ff808216978701979097526101009004861660608601528083015460808601526006810154909516151560a0850152949091529092526005015460c082015290565b6060816000816001600160401b03811115610d5057610d50613181565b604051908082528060200260200182016040528015610db757816020015b6040805160e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c08201528252600019909201910181610d6e5790505b50905060005b82811015610e0b57610de6868683818110610dda57610dda613197565b90506020020135610c82565b828281518110610df857610df8613197565b6020908102919091010152600101610dbd565b50949350505050565b60008181526002602052604081205460ff16158015610b77575050151590565b6000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea491906130ed565b6001600160a01b0316336001600160a01b031614610ef85760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b6044820152606401610759565b6001600160401b038316600090815260036020526040902054610f1a84611c46565b6000818152600460205260409020600181015460039091015460ff16821580610f5857506000838152600460205260409020546001600160a01b0316155b80610f79575060008381526004602052604090206006015460ff1615156001145b80610f82575081155b80610f9d575060ff8116600090815260096020526040902054155b15610fe7577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a586848787604051610fd794939291906131ad565b60405180910390a1505050505050565b6000838152600460205260408120600601805460ff191660011790558060648787838161101657611016613197565b9050602002013561102791906131ff565b6000868152600460205260409020600301805460ff808416610100810261ff0019909316929092179092559192508416111561108c5760ff83166000908152600960205260409020546127109061107f908690613213565b611089919061315a565b91505b600085815260046020819052604090912090810183905580546002909101546110c0916001600160a01b0316908490611d22565b6000858152600460209081526040918290205482518881529182018790529181018490526001600160a01b03909116907fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae89060600160405180910390a25050505050505050565b606081806001600160401b0381111561114257611142613181565b60405190808252806020026020018201604052801561116b578160200160208202803683370190505b50915060005b818110156111dc576002600086868481811061118f5761118f613197565b90506020020135815260200190815260200160002060009054906101000a900460ff168382815181106111c4576111c4613197565b91151560209283029190910190910152600101611171565b505092915050565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125491906130ed565b6001600160a01b0316336001600160a01b0316146112845760405162461bcd60e51b81526004016107599061310a565b6000805460ff19166001179055565b600181815481106112a357600080fd5b600091825260209091200154905081565b6060816000816001600160401b038111156112d1576112d1613181565b60405190808252806020026020018201604052801561130457816020015b60608152602001906001900390816112ef5790505b50905060005b82811015610e0b57611327868683818110610dda57610dda613197565b6040516020016113379190612cec565b60405160208183030381529060405282828151811061135857611358613197565b602090810291909101015260010161130a565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113db91906130ed565b6001600160a01b0316336001600160a01b03161461140b5760405162461bcd60e51b81526004016107599061310a565b61141682338361220c565b5050565b60608080808085806001600160401b0381111561143957611439613181565b604051908082528060200260200182016040528015611462578160200160208202803683370190505b509550806001600160401b0381111561147d5761147d613181565b6040519080825280602002602001820160405280156114a6578160200160208202803683370190505b509450806001600160401b038111156114c1576114c1613181565b6040519080825280602002602001820160405280156114ea578160200160208202803683370190505b509350806001600160401b0381111561150557611505613181565b60405190808252806020026020018201604052801561152e578160200160208202803683370190505b509250806001600160401b0381111561154957611549613181565b604051908082528060200260200182016040528015611572578160200160208202803683370190505b50915060005b8181101561174157600460008a8a8481811061159657611596613197565b90506020020135815260200190815260200160002060000160009054906101000a90046001600160a01b03168782815181106115d4576115d4613197565b60200260200101906001600160a01b031690816001600160a01b031681525050600460008a8a8481811061160a5761160a613197565b9050602002013581526020019081526020016000206001015486828151811061163557611635613197565b602002602001018181525050600460008a8a8481811061165757611657613197565b9050602002013581526020019081526020016000206004015485828151811061168257611682613197565b602002602001018181525050600460008a8a848181106116a4576116a4613197565b905060200201358152602001908152602001600020600501548482815181106116cf576116cf613197565b602002602001018181525050600460008a8a848181106116f1576116f1613197565b90506020020135815260200190815260200160002060060160009054906101000a900460ff1683828151811061172957611729613197565b91151560209283029190910190910152600101611578565b50509295509295909350565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd91906130ed565b6001600160a01b0316336001600160a01b0316146117ed5760405162461bcd60e51b81526004016107599061310a565b82811461182e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204c656e6774687360881b6044820152606401610759565b60005b838110156119a557606485858381811061184d5761184d613197565b90506020020160208101906118629190612dea565b60ff1610801561189b5750600085858381811061188157611881613197565b90506020020160208101906118969190612dea565b60ff16115b6118e15760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964204564676520466c69702052616e676560481b6044820152606401610759565b6118ee6127106064613213565b83838381811061190057611900613197565b90506020020135106119455760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a590814185e5bdd5d60921b6044820152606401610759565b82828281811061195757611957613197565b905060200201356009600087878581811061197457611974613197565b90506020020160208101906119899190612dea565b60ff168152602081019190915260400160002055600101611831565b5050505050565b826001600160a01b0381163314611a7657604051636d6d50a160e11b81523360048201526000805160206132e58339815191529063dadaa14290602401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a919061322a565b611a765760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f7468657273006044820152606401610759565b6000805160206132e58339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae6919061322a565b15611b265760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b6044820152606401610759565b60005460ff1615611b625760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b6044820152606401610759565b611b6d848484612336565b50505050565b60006000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be591906130ed565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e0919061324c565b6000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb691906130ed565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b811561213557808210611f3a576000805160206132e58339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9f91906130ed565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000c60048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b505050505060008183611e32919061316e565b90508015611b6d576000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaa91906130ed565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000c60048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b158015611f1c57600080fd5b505af1158015611f30573d6000803e3d6000fd5b5050505050505050565b6000805160206132e58339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faa91906130ed565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000c60048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b50505050506000828261203d919061316e565b90506000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af91906130ed565b6001600160a01b031663b3cb6f1a827f000000000000000000000000000000000000000000000000000000000000000c6040518363ffffffff1660e01b81526004016120fd91815260200190565b6000604051808303818588803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505050505050565b6000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a591906130ed565b6001600160a01b031663b3cb6f1a827f000000000000000000000000000000000000000000000000000000000000000c6040518363ffffffff1660e01b81526004016121f391815260200190565b6000604051808303818588803b158015611f1c57600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916122689190613265565b6000604051808303816000865af19150503d80600081146122a5576040519150601f19603f3d011682016040523d82523d6000602084013e6122aa565b606091505b50915091508180156122d45750805115806122d45750808060200190518101906122d4919061322a565b6119a55760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610759565b6000612340611b73565b9050600080808061235386880188613281565b93509350935093508434101561239d5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b6044820152606401610759565b6123a683610e14565b15156001146123ee5760405162461bcd60e51b81526020600482015260146024820152731154948e88125395905312510811d0535148125160621b6044820152606401610759565b60ff84166000908152600960205260409020546124475760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964204564676520466c69702052616e676560481b6044820152606401610759565b6000612453863461316e565b90506000612710600654836124689190613213565b612472919061315a565b6008549091506001600160a01b0316158061248d5750600754155b156124a25761249d81858c6125c6565b6124f2565b60006064600754836124b49190613213565b6124be919061315a565b905060006124cc828461316e565b90506124d981878e6125c6565b6008546124ef906001600160a01b031683612670565b50505b600085815260046020526040902080546001600160a01b0319166001600160a01b038c16178155600101829055612529818361316e565b6000868152600460205260409020600281019190915560038101805460ff191660ff8916179055426005909101556125618a8661274a565b61256b8a8361283e565b896001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c7866040516125a691815260200190565b60405180910390a26125ba8560018561293c565b50505050505050505050565b6000805160206132e58339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906130ed565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e59085906044016121f3565b604080516000808252602082019092526001600160a01b03841690839060405161269a9190613265565b60006040518083038185875af1925050503d80600081146126d7576040519150601f19603f3d011682016040523d82523d6000602084013e6126dc565b606091505b5050905080610c7d5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610759565b604051639a4918c160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000c6024830152604482018390527f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa1690639a4918c190606401600060405180830381600087803b1580156127da57600080fd5b505af11580156127ee573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206132e58339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae91906130ed565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000c6044830152919091169063eb3d9bea90606401600060405180830381600087803b15801561292057600080fd5b505af1158015612934573d6000803e3d6000fd5b505050505050565b60006000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ae91906130ed565b6001600160a01b03166397cca7af6129c4611b73565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612a09573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2e91906132c7565b6001600160401b03811660009081526003602052604090205490915015612a8a5760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b6044820152606401610759565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206132e58339815191529263ff9b3acf9260048083019391928290030181865afa158015612af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1591906130ed565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b4f57600080fd5b505af1158015612b63573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051612b9891815260200190565b60405180910390a150505050565b600060208284031215612bb857600080fd5b5035919050565b6001600160a01b0381168114612bd457600080fd5b50565b600060208284031215612be957600080fd5b8135612bf481612bbf565b9392505050565b60008060408385031215612c0e57600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b82811015612c4f578151865260209586019590910190600101612c31565b5093949350505050565b602081526000612bf46020830184612c1d565b60008060408385031215612c7f57600080fd5b8235612c8a81612bbf565b946020939093013593505050565b60018060a01b0381511682526020810151602083015260ff604082015116604083015260ff60608201511660608301526080810151608083015260a0810151151560a083015260c081015160c08301525050565b60e08101610b778284612c98565b60008083601f840112612d0c57600080fd5b5081356001600160401b03811115612d2357600080fd5b6020830191508360208260051b8501011115612d3e57600080fd5b9250929050565b60008060208385031215612d5857600080fd5b82356001600160401b03811115612d6e57600080fd5b612d7a85828601612cfa565b90969095509350505050565b602080825282518282018190526000918401906040840190835b81811015612dc957612db3838551612c98565b6020939093019260e09290920191600101612da0565b509095945050505050565b803560ff81168114612de557600080fd5b919050565b600060208284031215612dfc57600080fd5b612bf482612dd4565b6001600160401b0381168114612bd457600080fd5b600080600060408486031215612e2f57600080fd5b8335612e3a81612e05565b925060208401356001600160401b03811115612e5557600080fd5b612e6186828701612cfa565b9497909650939450505050565b600081518084526020840193506020830160005b82811015612c4f5781511515865260209586019590910190600101612e82565b602081526000612bf46020830184612e6e565b60005b83811015612ed0578181015183820152602001612eb8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612f4d57603f1987860301845281518051808752612f2a816020890160208501612eb5565b601f01601f19169590950160209081019550938401939190910190600101612f01565b50929695505050505050565b60a08082528651908201819052600090602088019060c0840190835b81811015612f9c5783516001600160a01b0316835260209384019390920191600101612f75565b50508381036020850152612fb08189612c1d565b9150508281036040840152612fc58187612c1d565b90508281036060840152612fd98186612c1d565b90508281036080840152612fed8185612e6e565b98975050505050505050565b6000806000806040858703121561300f57600080fd5b84356001600160401b0381111561302557600080fd5b61303187828801612cfa565b90955093505060208501356001600160401b0381111561305057600080fd5b61305c87828801612cfa565b95989497509550505050565b60008060006040848603121561307d57600080fd5b833561308881612bbf565b925060208401356001600160401b038111156130a357600080fd5b8401601f810186136130b457600080fd5b80356001600160401b038111156130ca57600080fd5b8660208284010111156130dc57600080fd5b939660209190910195509293505050565b6000602082840312156130ff57600080fd5b8151612bf481612bbf565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826131695761316961312e565b500490565b81810381811115610b7757610b77613144565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b038311156131e457600080fd5b8260051b808560808501379190910160800195945050505050565b60008261320e5761320e61312e565b500690565b8082028115828204841417610b7757610b77613144565b60006020828403121561323c57600080fd5b81518015158114612bf457600080fd5b60006020828403121561325e57600080fd5b5051919050565b60008251613277818460208701612eb5565b9190910192915050565b6000806000806080858703121561329757600080fd5b6132a085612dd4565b93506020850135925060408501356132b781612bbf565b9396929550929360600135925050565b6000602082840312156132d957600080fd5b8151612bf481612e0556fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa264697066735822122024c9925682ff758cc5b181f18f0ecd3c8efad1f48cfc25b0a3faf1c76209b28b64736f6c634300081c0033

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

000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa

-----Decoded View---------------
Arg [0] : history_ (address): 0xFa296156dAc165Af92F7Fdb012B61a874670e1AA

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa


Deployed Bytecode Sourcemap

13096:10178:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6794:70;;;;;;;;;;;;;:::i;:::-;;14536:22;;;;;;;;;;-1:-1:-1;14536:22:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;14536:22:0;;;;;;;;11571:91;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;370:32:1;;;352:51;;340:2;325:18;11571:91:0;206:203:1;14037:40:0;;;;;;;;;;-1:-1:-1;14037:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14037:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;992:32:1;;;974:51;;1056:2;1041:18;;1034:34;;;;1084:18;;;1077:34;;;;1159:4;1147:17;;;1142:2;1127:18;;1120:45;1202:17;;1196:3;1181:19;;1174:46;1012:3;1236:19;;1229:35;1295:3;1280:19;;1273:35;1352:14;1345:22;1339:3;1324:19;;1317:51;961:3;946:19;14037:40:0;645:729:1;15595:263:0;;;;;;;;;;-1:-1:-1;15595:263:0;;;;;:::i;:::-;;:::i;14221:32::-;;;;;;;;;;;;;;;;;;;1525:25:1;;;1513:2;1498:18;14221:32:0;1379:177:1;15982:191:0;;;;;;;;;;-1:-1:-1;15982:191:0;;;;;:::i;:::-;;:::i;15866:108::-;;;;;;;;;;-1:-1:-1;15866:108:0;;;;;:::i;:::-;;:::i;12136:409::-;;;;;;;;;;-1:-1:-1;12136:409:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6872:155::-;;;;;;;;;;-1:-1:-1;6872:155:0;;;;;:::i;:::-;;:::i;21045:513::-;;;;;;;;;;-1:-1:-1;21045:513:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1012:107::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1012:107:0;;21566:413;;;;;;;;;;-1:-1:-1;21566:413:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11670:135::-;;;;;;;;;;-1:-1:-1;11670:135:0;;;;;:::i;:::-;;:::i;14326:29::-;;;;;;;;;;-1:-1:-1;14326:29:0;;;;-1:-1:-1;;;;;14326:29:0;;;5943:26;;;;;;;;;;-1:-1:-1;5943:26:0;;;;;;;;14414:57;;;;;;;;;;-1:-1:-1;14414:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;19251:1786;;;;;;;;;;-1:-1:-1;19251:1786:0;;;;;:::i;:::-;;:::i;11813:315::-;;;;;;;;;;-1:-1:-1;11813:315:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6718:68::-;;;;;;;;;;;;;:::i;6016:28::-;;;;;;;;;;-1:-1:-1;6016:28:0;;;;;:::i;:::-;;:::i;21987:370::-;;;;;;;;;;-1:-1:-1;21987:370:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14286:33::-;;;;;;;;;;;;;;;;5848:40;;;;;;;;;;;;;;;7035:143;;;;;;;;;;-1:-1:-1;7035:143:0;;;;;:::i;:::-;;:::i;22365:906::-;;;;;;;;;;-1:-1:-1;22365:906:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;16181:696::-;;;;;;;;;;-1:-1:-1;16181:696:0;;;;;:::i;:::-;;:::i;7750:260::-;;;;;;:::i;:::-;;:::i;12553:102::-;;;;;;;;;;-1:-1:-1;12629:11:0;:18;12553:102;;7532:105;;;;;;;;;;;;;:::i;5783:32::-;;;;;;;;;;;;;;;6794:70;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;;;;;;;;;6851:5:::1;6842:14:::0;;-1:-1:-1;;6842:14:0::1;::::0;;6794:70::o;11571:91::-;11612:7;-1:-1:-1;;;;;;;;;;;;;;;;11639:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11632:22;;11571:91;:::o;15595:263::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15707:20:::1;15725:2;14644:6;15707:20;:::i;:::-;15692:11;:35;;15670:101;;;::::0;-1:-1:-1;;;15670:101:0;;13269:2:1;15670:101:0::1;::::0;::::1;13251:21:1::0;13308:2;13288:18;;;13281:30;-1:-1:-1;;;13327:18:1;;;13320:46;13383:18;;15670:101:0::1;13067:340:1::0;15670:101:0::1;15782:11;:25:::0;;;15823:27:::1;::::0;1525:25:1;;;15823:27:0::1;::::0;1513:2:1;1498:18;15823:27:0::1;;;;;;;15595:263:::0;:::o;15982:191::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;16085:3:::1;16076:6;:12;16054:78;;;::::0;-1:-1:-1;;;16054:78:0;;13614:2:1;16054:78:0::1;::::0;::::1;13596:21:1::0;13653:2;13633:18;;;13626:30;-1:-1:-1;;;13672:18:1;;;13665:46;13728:18;;16054:78:0::1;13412:340:1::0;16054:78:0::1;16143:13;:22:::0;15982:191::o;15866:108::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15941:14:::1;:25:::0;;-1:-1:-1;;;;;;15941:25:0::1;-1:-1:-1::0;;;;;15941:25:0;;;::::1;::::0;;;::::1;::::0;;15866:108::o;12136:409::-;12255:11;:18;12216:16;;12249:24;;12245:81;;;12296:11;:18;;-1:-1:-1;12245:81:0;12336:20;12373:11;12379:5;12373:3;:11;:::i;:::-;-1:-1:-1;;;;;12359:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12359:26:0;-1:-1:-1;12336:49:0;-1:-1:-1;12410:5:0;12396:121;12421:3;12417:1;:7;12396:121;;;12459:11;12471:1;12459:14;;;;;;;;:::i;:::-;;;;;;;;;12442:3;12450:5;12446:1;:9;;;;:::i;:::-;12442:14;;;;;;;;:::i;:::-;;;;;;;;;;:31;12500:3;;12396:121;;;-1:-1:-1;12534:3:0;-1:-1:-1;12136:409:0;;;;;:::o;6872:155::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6952:6:::1;6971:2;-1:-1:-1::0;;;;;6963:16:0::1;6987:6;6963:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6951:47;;;7017:1;7009:10;;;::::0;::::1;;6940:87;6872:155:::0;;:::o;21045:513::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21164:386:0;;;;;;;;-1:-1:-1;21206:13:0;;;:5;:13;;;;;;;:20;;-1:-1:-1;;;;;21206:20:0;21164:386;;21206:20;21252:23;;;21164:386;;;;21305:27;;;;;;;;21164:386;;;;;;;21206:20;21362:27;;;;21164:386;;;;21417:25;;;;21164:386;;;;21467:22;;;;;;;21164:386;;;;;;21515:13;;;;;;;:23;;;21164:386;;;;;21045:513::o;21566:413::-;21650:27;21707:7;21696:8;21707:7;-1:-1:-1;;;;;21771:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21771:29:0;;-1:-1:-1;;21771:29:0;;;;;;;;;;;;21732:68;;21826:6;21821:123;21842:3;21838:1;:7;21821:123;;;21877:23;21889:7;;21897:1;21889:10;;;;;;;:::i;:::-;;;;;;;21877:11;:23::i;:::-;21863:8;21872:1;21863:11;;;;;;;;:::i;:::-;;;;;;;;;;:37;21927:3;;21821:123;;;-1:-1:-1;21963:8:0;21566:413;-1:-1:-1;;;;21566:413:0:o;11670:135::-;11730:4;11754:20;;;:12;:20;;;;;;;;:29;;;:43;;-1:-1:-1;;11787:10:0;;;11670:135::o;19251:1786::-;-1:-1:-1;;;;;;;;;;;;;;;;1490:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1476:27:0;:10;-1:-1:-1;;;;;1476:27:0;;1454:94;;;;-1:-1:-1;;;1454:94:0;;14566:2:1;1454:94:0;;;14548:21:1;14605:2;14585:18;;;14578:30;-1:-1:-1;;;14624:18:1;;;14617:47;14681:18;;1454:94:0;14364:341:1;1454:94:0;-1:-1:-1;;;;;11531:24:0;;19432:14:::1;11531:24:::0;;;:13;:24;;;;;;19524:25:::1;11531:24:::0;19524:14:::1;:25::i;:::-;19601:17;19621:13:::0;;;:5:::1;:13;::::0;;;;:23:::1;::::0;::::1;::::0;19677:27:::1;::::0;;::::1;::::0;::::1;;19776:11:::0;;;:63:::1;;-1:-1:-1::0;19837:1:0::1;19805:13:::0;;;:5:::1;:13;::::0;;;;:20;-1:-1:-1;;;;;19805:20:0::1;:34:::0;19776:63:::1;:111;;;-1:-1:-1::0;19857:13:0::1;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;::::0;::::1;;:30;;:22:::0;:30:::1;19776:111;:142;;;-1:-1:-1::0;19904:14:0;;19776:142:::1;:200;;;-1:-1:-1::0;19935:36:0::1;::::0;::::1;;::::0;;;:21:::1;:36;::::0;;;;;:41;19776:200:::1;19758:333;;;20008:50;20027:9;20038:6;20046:11;;20008:50;;;;;;;;;:::i;:::-;;;;;;;;20073:7;;;6940:87;6872:155:::0;;:::o;19758:333::-:1;20134:13;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;:29:::0;;-1:-1:-1;;20134:29:0::1;20159:4;20134:29;::::0;;:13;20399:3:::1;20382:11:::0;;20134:13;20382:14;::::1;;;;:::i;:::-;;;;;;;:20;;;;:::i;:::-;20447:13;::::0;;;:5:::1;:13;::::0;;;;:27:::1;;:43:::0;;::::1;::::0;;::::1;;::::0;::::1;-1:-1:-1::0;;20447:43:0;;::::1;::::0;;;::::1;::::0;;;20354:49;;-1:-1:-1;20507:29:0;::::1;-1:-1:-1::0;20503:207:0::1;;;20630:36;::::0;::::1;;::::0;;;:21:::1;:36;::::0;;;;;14644:6:::1;::::0;20630:48:::1;::::0;20669:9;;20630:48:::1;:::i;:::-;20628:70;;;;:::i;:::-;20612:86;;20503:207;20751:13;::::0;;;:5:::1;:13;::::0;;;;;;;:25;;::::1;:41:::0;;;20846:20;;20883:28:::1;::::0;;::::1;::::0;20832:80:::1;::::0;-1:-1:-1;;;;;20846:20:0::1;::::0;20779:13;;20832::::1;:80::i;:::-;20974:13;::::0;;;:5:::1;:13;::::0;;;;;;;;:20;20964:65;;15818:25:1;;;15859:18;;;15852:34;;;15902:18;;;15895:34;;;-1:-1:-1;;;;;20974:20:0;;::::1;::::0;20964:65:::1;::::0;15806:2:1;15791:18;20964:65:0::1;;;;;;;19380:1657;;;;;19251:1786:::0;;;:::o;11813:315::-;11895:20;11939:7;;-1:-1:-1;;;;;11973:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11973:15:0;;11964:24;;12004:6;11999:122;12020:3;12016:1;:7;11999:122;;;12053:12;:24;12066:7;;12074:1;12066:10;;;;;;;:::i;:::-;;;;;;;12053:24;;;;;;;;;;;;;;;;;;;;;12041:6;12048:1;12041:9;;;;;;;;:::i;:::-;:36;;;:9;;;;;;;;;;;:36;12104:3;;11999:122;;;;11917:211;11813:315;;;;:::o;6718:68::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6765:6:::1;:13:::0;;-1:-1:-1;;6765:13:0::1;6774:4;6765:13;::::0;;6718:68::o;6016:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6016:28:0;:::o;21987:370::-;22073:14;22111:7;22100:8;22111:7;-1:-1:-1;;;;;22162:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22136:42;;22194:6;22189:135;22210:3;22206:1;:7;22189:135;;;22256:23;22268:7;;22276:1;22268:10;;;;;;;:::i;22256:23::-;22245:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;22231:8;22240:1;22231:11;;;;;;;;:::i;:::-;;;;;;;;;;:49;22307:3;;22189:135;;7035:143;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;7116:54:::1;7144:5;7151:10;7163:6;7116:27;:54::i;:::-;7035:143:::0;;:::o;22365:906::-;22465:24;;;;;22671:7;;-1:-1:-1;;;;;22706:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22706:18:0;;22696:28;;22764:3;-1:-1:-1;;;;;22750:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22750:18:0;;22735:33;;22808:3;-1:-1:-1;;;;;22794:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22794:18:0;;22779:33;;22850:3;-1:-1:-1;;;;;22836:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22836:18:0;;22823:31;;22888:3;-1:-1:-1;;;;;22877:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22877:15:0;;22865:27;;22910:6;22905:359;22926:3;22922:1;:7;22905:359;;;22960:5;:17;22966:7;;22974:1;22966:10;;;;;;;:::i;:::-;;;;;;;22960:17;;;;;;;;;;;:24;;;;;;;;;;-1:-1:-1;;;;;22960:24:0;22947:7;22955:1;22947:10;;;;;;;;:::i;:::-;;;;;;:37;-1:-1:-1;;;;;22947:37:0;;;-1:-1:-1;;;;;22947:37:0;;;;;23017:5;:17;23023:7;;23031:1;23023:10;;;;;;;:::i;:::-;;;;;;;23017:17;;;;;;;;;;;:27;;;22999:12;23012:1;22999:15;;;;;;;;:::i;:::-;;;;;;:45;;;;;23077:5;:17;23083:7;;23091:1;23083:10;;;;;;;:::i;:::-;;;;;;;23077:17;;;;;;;;;;;:29;;;23059:12;23072:1;23059:15;;;;;;;;:::i;:::-;;;;;;:47;;;;;23137:5;:17;23143:7;;23151:1;23143:10;;;;;;;:::i;:::-;;;;;;;23137:17;;;;;;;;;;;:27;;;23121:10;23132:1;23121:13;;;;;;;;:::i;:::-;;;;;;:43;;;;;23194:5;:17;23200:7;;23208:1;23200:10;;;;;;;:::i;:::-;;;;;;;23194:17;;;;;;;;;;;:26;;;;;;;;;;;;23179:9;23189:1;23179:12;;;;;;;;:::i;:::-;:41;;;:12;;;;;;;;;;;:41;23247:3;;22905:359;;;;22649:622;22365:906;;;;;;;;:::o;16181:696::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;16345:39;;::::1;16323:104;;;::::0;-1:-1:-1;;;16323:104:0;;16142:2:1;16323:104:0::1;::::0;::::1;16124:21:1::0;16181:2;16161:18;;;16154:30;-1:-1:-1;;;16200:18:1;;;16193:45;16255:18;;16323:104:0::1;15940:339:1::0;16323:104:0::1;16445:6;16440:430;16457:25:::0;;::::1;16440:430;;;16546:3;16526:14;;16541:1;16526:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:23;;;:48;;;;;16573:1;16553:14;;16568:1;16553:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:21;;;16526:48;16500:133;;;::::0;-1:-1:-1;;;16500:133:0;;16486:2:1;16500:133:0::1;::::0;::::1;16468:21:1::0;16525:2;16505:18;;;16498:30;-1:-1:-1;;;16544:18:1;;;16537:53;16607:18;;16500:133:0::1;16284:347:1::0;16500:133:0::1;16687:21;14644:6;16687:3;:21;:::i;:::-;16674:7;;16682:1;16674:10;;;;;;;:::i;:::-;;;;;;;:34;16648:110;;;::::0;-1:-1:-1;;;16648:110:0;;16838:2:1;16648:110:0::1;::::0;::::1;16820:21:1::0;16877:2;16857:18;;;16850:30;-1:-1:-1;;;16896:18:1;;;16889:44;16950:18;;16648:110:0::1;16636:338:1::0;16648:110:0::1;16816:7;;16824:1;16816:10;;;;;;;:::i;:::-;;;;;;;16773:21;:40;16795:14;;16810:1;16795:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16773:40;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16773:40:0;:53;16853:3:::1;;16440:430;;;;16181:696:::0;;;;:::o;7750:260::-;7846:6;-1:-1:-1;;;;;1631:20:0;;1641:10;1631:20;1627:182;;1694:36;;-1:-1:-1;;;1694:36:0;;1719:10;1694:36;;;352:51:1;-1:-1:-1;;;;;;;;;;;1076:42:0;1694:24;;325:18:1;;1694:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1668:129;;;;-1:-1:-1;;;1668:129:0;;17463:2:1;1668:129:0;;;17445:21:1;17502:2;17482:18;;;17475:30;17541:33;17521:18;;;17514:61;17592:18;;1668:129:0;17261:355:1;1668:129:0;-1:-1:-1;;;;;;;;;;;;;;;;1890:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:25;1868:91;;;::::0;-1:-1:-1;;;1868:91:0;;17823:2:1;1868:91:0::1;::::0;::::1;17805:21:1::0;17862:2;17842:18;;;17835:30;-1:-1:-1;;;17881:18:1;;;17874:46;17937:18;;1868:91:0::1;17621:340:1::0;1868:91:0::1;7900:6:::2;::::0;::::2;;7899:7;7877:63;;;::::0;-1:-1:-1;;;7877:63:0;;18168:2:1;7877:63:0::2;::::0;::::2;18150:21:1::0;18207:1;18187:18;;;18180:29;-1:-1:-1;;;18225:18:1;;;18218:36;18271:18;;7877:63:0::2;17966:329:1::0;7877:63:0::2;7975:27;7985:6;7993:8;;7975:9;:27::i;:::-;7750:260:::0;;;;:::o;7532:105::-;7574:7;-1:-1:-1;;;;;;;;;;;;;;;;7606:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7601:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11201:224::-;-1:-1:-1;;;;;;;;;;;;;;;;11307:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11300:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;11393:24:0;;;;;:13;:24;;;;;11386:31;11201:224::o;8105:1941::-;8217:17;;8213:1824;;8326:14;8309:13;:31;8305:1552;;-1:-1:-1;;;;;;;;;;;;;;;;8696:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8682:145;;-1:-1:-1;;;8682:145:0;;8772:7;8682:145;;;18663:25:1;-1:-1:-1;;;;;18724:32:1;;;18704:18;;;18697:60;8682:44:0;;;;;;;8734:14;;18636:18:1;;8682:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8887:17;8923:14;8907:13;:30;;;;:::i;:::-;8887:50;-1:-1:-1;8960:13:0;;8956:175;;-1:-1:-1;;;;;;;;;;;;;;;;9060:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9053:58;;-1:-1:-1;;;9053:58:0;;9084:7;9053:58;;;18970:25:1;-1:-1:-1;;;;;19031:32:1;;;19011:18;;;19004:60;19080:18;;;19073:34;;;9053:30:0;;;;;;;18943:18:1;;9053:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8342:822;6940:87:::1;6872:155:::0;;:::o;8305:1552::-;-1:-1:-1;;;;;;;;;;;;;;;;9443:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9429:144;;-1:-1:-1;;;9429:144:0;;9518:7;9429:144;;;18663:25:1;-1:-1:-1;;;;;18724:32:1;;;18704:18;;;18697:60;9429:44:0;;;;;;;9481:13;;18636:18:1;;9429:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9653:17;9690:13;9673:14;:30;;;;:::i;:::-;9653:50;;-1:-1:-1;;;;;;;;;;;;;;;;9783:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9776:35:0;;9819:9;9831:7;9776:63;;;;;;;;;;;;;1525:25:1;;1513:2;1498:18;;1379:177;9776:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9170:687;6940:87:::1;6872:155:::0;;:::o;8213:1824::-;-1:-1:-1;;;;;;;;;;;;;;;;9964:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9957:35:0;;10000:14;10017:7;9957:68;;;;;;;;;;;;;1525:25:1;;1513:2;1498:18;;1379:177;9957:68:0;;;;;;;;;;;;;;;;;;;;3503:449;3735:45;;;-1:-1:-1;;;;;19310:32:1;;;3735:45:0;;;19292:51:1;19359:18;;;;19352:34;;;3735:45:0;;;;;;;;;;19265:18:1;;;;3735:45:0;;;;;;;-1:-1:-1;;;;;3735:45:0;-1:-1:-1;;;3735:45:0;;;3724:57;;-1:-1:-1;;;;3724:10:0;;;;:57;;3735:45;3724:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3688:93;;;;3814:7;:57;;;;-1:-1:-1;3826:11:0;;:16;;:44;;;3857:4;3846:24;;;;;;;;;;;;:::i;:::-;3792:152;;;;-1:-1:-1;;;3792:152:0;;19891:2:1;3792:152:0;;;19873:21:1;19930:2;19910:18;;;19903:30;19969:34;19949:18;;;19942:62;-1:-1:-1;;;20020:18:1;;;20013:43;20073:19;;3792:152:0;19689:409:1;16885:2292:0;17006:14;17023:11;:9;:11::i;:::-;17006:28;-1:-1:-1;17090:19:0;;;;17215:56;;;;17226:8;17215:56;:::i;:::-;17075:196;;;;;;;;17347:6;17334:9;:19;;17312:84;;;;-1:-1:-1;;;17312:84:0;;20824:2:1;17312:84:0;;;20806:21:1;20863:2;20843:18;;;20836:30;-1:-1:-1;;;20882:18:1;;;20875:45;20937:18;;17312:84:0;20622:339:1;17312:84:0;17429:21;17443:6;17429:13;:21::i;:::-;:29;;17454:4;17429:29;17407:99;;;;-1:-1:-1;;;17407:99:0;;21168:2:1;17407:99:0;;;21150:21:1;21207:2;21187:18;;;21180:30;-1:-1:-1;;;21226:18:1;;;21219:50;21286:18;;17407:99:0;20966:344:1;17407:99:0;17539:36;;;17578:1;17539:36;;;:21;:36;;;;;;17517:113;;;;-1:-1:-1;;;17517:113:0;;16486:2:1;17517:113:0;;;16468:21:1;16525:2;16505:18;;;16498:30;-1:-1:-1;;;16544:18:1;;;16537:53;16607:18;;17517:113:0;16284:347:1;17517:113:0;17682:22;17707:18;17719:6;17707:9;:18;:::i;:::-;17682:43;;17786:25;14644:6;17833:11;;17816:14;:28;;;;:::i;:::-;17814:50;;;;:::i;:::-;17881:14;;17786:78;;-1:-1:-1;;;;;;17881:14:0;:28;;:50;;-1:-1:-1;17913:13:0;;:18;17881:50;17877:680;;;18018:43;18030:17;18049:3;18054:6;18018:11;:43::i;:::-;17877:680;;;18126:18;18187:3;18169:13;;18149:17;:33;;;;:::i;:::-;18147:43;;;;:::i;:::-;18126:64;-1:-1:-1;18250:26:0;18279:30;18126:64;18279:17;:30;:::i;:::-;18250:59;;18394:44;18406:18;18426:3;18431:6;18394:11;:44::i;:::-;18518:14;;18487:58;;-1:-1:-1;;;;;18518:14:0;18534:10;18487:30;:58::i;:::-;18081:476;;17877:680;18596:13;;;;:5;:13;;;;;:29;;-1:-1:-1;;;;;;18596:29:0;-1:-1:-1;;;;;18596:29:0;;;;;-1:-1:-1;18636:23:0;:40;;;18718:34;18735:17;18636:40;18718:34;:::i;:::-;18687:13;;;;:5;:13;;;;;:28;;;:65;;;;18763:27;;;:43;;-1:-1:-1;;18763:43:0;;;;;;;18843:15;18817:23;;;;:41;18900:31;18916:6;18687:13;18900:15;:31::i;:::-;18969:36;18982:6;18990:14;18969:12;:36::i;:::-;19066:6;-1:-1:-1;;;;;19054:27:0;;19074:6;19054:27;;;;1525:25:1;;1513:2;1498:18;;1379:177;19054:27:0;;;;;;;;19126:41;19141:6;19149:1;19152:14;19126;:41::i;:::-;16963:2214;;;;;;;16885:2292;;;:::o;7348:172::-;-1:-1:-1;;;;;;;;;;;;;;;;7451:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7437:75;;-1:-1:-1;;;7437:75:0;;-1:-1:-1;;;;;21507:32:1;;;7437:75:0;;;21489:51:1;21576:32;;;21556:18;;;21549:60;7437:44:0;;;;;;;7489:9;;21462:18:1;;7437:75:0;21315:300:1;4466:217:0;4579:12;;;4539;4579;;;;;;;;;-1:-1:-1;;;;;4557:7:0;;;4572:5;;4557:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4538:54;;;4611:7;4603:72;;;;-1:-1:-1;;;4603:72:0;;21822:2:1;4603:72:0;;;21804:21:1;21861:2;21841:18;;;21834:30;21900:34;21880:18;;;21873:62;-1:-1:-1;;;21951:18:1;;;21944:50;22011:19;;4603:72:0;21620:416:1;10135:272:0;10243:40;;-1:-1:-1;;;10243:40:0;;-1:-1:-1;;;;;22261:32:1;;;10243:40:0;;;22243:51:1;10267:7:0;22310:18:1;;;22303:34;22353:18;;;22346:34;;;10243:7:0;:15;;;;22216:18:1;;10243:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10337:11:0;:24;;;;;;;;;;;;-1:-1:-1;10372:20:0;;;:12;10337:24;10372:20;;;;;:27;;-1:-1:-1;;10372:27:0;;;;;;;-1:-1:-1;;;10135:272:0:o;7186:154::-;-1:-1:-1;;;;;;;;;;;;;;;;7275:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7258:74;;-1:-1:-1;;;7258:74:0;;-1:-1:-1;;;;;22261:32:1;;;7258:74:0;;;22243:51:1;22310:18;;;22303:34;;;7324:7:0;22353:18:1;;;22346:34;7258:51:0;;;;;;;22216:18:1;;7258:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7186:154;;:::o;10415:778::-;10568:16;-1:-1:-1;;;;;;;;;;;;;;;;10592:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10587:33:0;;10628:11;:9;:11::i;:::-;10587:185;;-1:-1:-1;;;;;;10587:185:0;;;;;;;;;;22561:25:1;;;22634:4;22622:17;;22602:18;;;22595:45;22534:18;;10587:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10856:24:0;;;;;;:13;:24;;;;;;10568:204;;-1:-1:-1;10856:29:0;10834:95;;;;-1:-1:-1;;;10834:95:0;;23107:2:1;10834:95:0;;;23089:21:1;23146:2;23126:18;;;23119:30;-1:-1:-1;;;23165:18:1;;;23158:46;23221:18;;10834:95:0;22905:340:1;10834:95:0;-1:-1:-1;;;;;11000:24:0;;;;;;:13;:24;;;;;;;;;:33;;;11083:15;;-1:-1:-1;;;;;;11083:15:0;;;;-1:-1:-1;;;;;;;;;;;1076:42:0;11083:13;;:15;;;;;11000:24;;11083:15;;;;;1076:42;11083:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11076:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11158:27;11178:6;11158:27;;;;1525:25:1;;1513:2;1498:18;;1379:177;11158:27:0;;;;;;;;10504:689;10415:778;;;:::o;414:226:1:-;473:6;526:2;514:9;505:7;501:23;497:32;494:52;;;542:1;539;532:12;494:52;-1:-1:-1;587:23:1;;414:226;-1:-1:-1;414:226:1:o;1561:131::-;-1:-1:-1;;;;;1636:31:1;;1626:42;;1616:70;;1682:1;1679;1672:12;1616:70;1561:131;:::o;1697:247::-;1756:6;1809:2;1797:9;1788:7;1784:23;1780:32;1777:52;;;1825:1;1822;1815:12;1777:52;1864:9;1851:23;1883:31;1908:5;1883:31;:::i;:::-;1933:5;1697:247;-1:-1:-1;;;1697:247:1:o;1949:346::-;2017:6;2025;2078:2;2066:9;2057:7;2053:23;2049:32;2046:52;;;2094:1;2091;2084:12;2046:52;-1:-1:-1;;2139:23:1;;;2259:2;2244:18;;;2231:32;;-1:-1:-1;1949:346:1:o;2300:420::-;2353:3;2391:5;2385:12;2418:6;2413:3;2406:19;2450:4;2445:3;2441:14;2434:21;;2489:4;2482:5;2478:16;2512:1;2522:173;2536:6;2533:1;2530:13;2522:173;;;2597:13;;2585:26;;2640:4;2631:14;;;;2668:17;;;;2558:1;2551:9;2522:173;;;-1:-1:-1;2711:3:1;;2300:420;-1:-1:-1;;;;2300:420:1:o;2725:261::-;2904:2;2893:9;2886:21;2867:4;2924:56;2976:2;2965:9;2961:18;2953:6;2924:56;:::i;2991:367::-;3059:6;3067;3120:2;3108:9;3099:7;3095:23;3091:32;3088:52;;;3136:1;3133;3126:12;3088:52;3175:9;3162:23;3194:31;3219:5;3194:31;:::i;:::-;3244:5;3322:2;3307:18;;;;3294:32;;-1:-1:-1;;;2991:367:1:o;3363:503::-;3482:1;3478;3473:3;3469:11;3465:19;3457:5;3451:12;3447:38;3442:3;3435:51;3535:4;3528:5;3524:16;3518:23;3511:4;3506:3;3502:14;3495:47;3603:4;3595;3588:5;3584:16;3578:23;3574:34;3567:4;3562:3;3558:14;3551:58;3670:4;3662;3655:5;3651:16;3645:23;3641:34;3634:4;3629:3;3625:14;3618:58;3725:4;3718:5;3714:16;3708:23;3701:4;3696:3;3692:14;3685:47;3795:4;3788:5;3784:16;3778:23;3771:31;3764:39;3757:4;3752:3;3748:14;3741:63;3853:4;3846:5;3842:16;3836:23;3829:4;3824:3;3820:14;3813:47;;;3363:503::o;3871:280::-;4077:3;4062:19;;4090:55;4066:9;4127:6;4090:55;:::i;4389:367::-;4452:8;4462:6;4516:3;4509:4;4501:6;4497:17;4493:27;4483:55;;4534:1;4531;4524:12;4483:55;-1:-1:-1;4557:20:1;;-1:-1:-1;;;;;4589:30:1;;4586:50;;;4632:1;4629;4622:12;4586:50;4669:4;4661:6;4657:17;4645:29;;4729:3;4722:4;4712:6;4709:1;4705:14;4697:6;4693:27;4689:38;4686:47;4683:67;;;4746:1;4743;4736:12;4683:67;4389:367;;;;;:::o;4761:437::-;4847:6;4855;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4964:9;4951:23;-1:-1:-1;;;;;4989:6:1;4986:30;4983:50;;;5029:1;5026;5019:12;4983:50;5068:70;5130:7;5121:6;5110:9;5106:22;5068:70;:::i;:::-;5157:8;;5042:96;;-1:-1:-1;4761:437:1;-1:-1:-1;;;;4761:437:1:o;5203:715::-;5465:2;5477:21;;;5547:13;;5450:18;;;5569:22;;;5417:4;;5648:15;;;5622:2;5607:18;;;5417:4;5691:201;5705:6;5702:1;5699:13;5691:201;;;5754:56;5806:3;5797:6;5791:13;5754:56;:::i;:::-;5879:2;5867:15;;;;;5839:4;5830:14;;;;;5727:1;5720:9;5691:201;;;-1:-1:-1;5909:3:1;;5203:715;-1:-1:-1;;;;;5203:715:1:o;5923:156::-;5989:20;;6049:4;6038:16;;6028:27;;6018:55;;6069:1;6066;6059:12;6018:55;5923:156;;;:::o;6084:182::-;6141:6;6194:2;6182:9;6173:7;6169:23;6165:32;6162:52;;;6210:1;6207;6200:12;6162:52;6233:27;6250:9;6233:27;:::i;6271:129::-;-1:-1:-1;;;;;6349:5:1;6345:30;6338:5;6335:41;6325:69;;6390:1;6387;6380:12;6405:570;6499:6;6507;6515;6568:2;6556:9;6547:7;6543:23;6539:32;6536:52;;;6584:1;6581;6574:12;6536:52;6623:9;6610:23;6642:30;6666:5;6642:30;:::i;:::-;6691:5;-1:-1:-1;6747:2:1;6732:18;;6719:32;-1:-1:-1;;;;;6763:30:1;;6760:50;;;6806:1;6803;6796:12;6760:50;6845:70;6907:7;6898:6;6887:9;6883:22;6845:70;:::i;:::-;6405:570;;6934:8;;-1:-1:-1;6819:96:1;;-1:-1:-1;;;;6405:570:1:o;6980:433::-;7030:3;7068:5;7062:12;7095:6;7090:3;7083:19;7127:4;7122:3;7118:14;7111:21;;7166:4;7159:5;7155:16;7189:1;7199:189;7213:6;7210:1;7207:13;7199:189;;;7288:13;;7281:21;7274:29;7262:42;;7333:4;7324:14;;;;7361:17;;;;7235:1;7228:9;7199:189;;7418:252;7591:2;7580:9;7573:21;7554:4;7611:53;7660:2;7649:9;7645:18;7637:6;7611:53;:::i;7675:250::-;7760:1;7770:113;7784:6;7781:1;7778:13;7770:113;;;7860:11;;;7854:18;7841:11;;;7834:39;7806:2;7799:10;7770:113;;;-1:-1:-1;;7917:1:1;7899:16;;7892:27;7675:250::o;7930:991::-;8090:4;8138:2;8127:9;8123:18;8168:2;8157:9;8150:21;8191:6;8226;8220:13;8257:6;8249;8242:22;8295:2;8284:9;8280:18;8273:25;;8357:2;8347:6;8344:1;8340:14;8329:9;8325:30;8321:39;8307:53;;8395:2;8387:6;8383:15;8416:1;8426:466;8440:6;8437:1;8434:13;8426:466;;;8533:2;8529:7;8517:9;8509:6;8505:22;8501:36;8496:3;8489:49;8567:6;8561:13;8609:2;8603:9;8640:8;8632:6;8625:24;8662:74;8727:8;8722:2;8714:6;8710:15;8705:2;8701;8697:11;8662:74;:::i;:::-;8802:2;8779:17;-1:-1:-1;;8775:31:1;8763:44;;;;8809:2;8759:53;;;;-1:-1:-1;8870:12:1;;;;8835:15;;;;;8462:1;8455:9;8426:466;;;-1:-1:-1;8909:6:1;;7930:991;-1:-1:-1;;;;;;7930:991:1:o;9157:1424::-;9653:3;9666:22;;;9737:13;;9638:19;;;9759:22;;;9605:4;;9851;9839:17;;;9812:3;9797:19;;;9605:4;9884:199;9898:6;9895:1;9892:13;9884:199;;;9963:13;;-1:-1:-1;;;;;9959:39:1;9947:52;;10028:4;10056:17;;;;10019:14;;;;9995:1;9913:9;9884:199;;;9888:3;;10130:9;10125:3;10121:19;10114:4;10103:9;10099:20;10092:49;10164:41;10201:3;10193:6;10164:41;:::i;:::-;10150:55;;;10253:9;10245:6;10241:22;10236:2;10225:9;10221:18;10214:50;10287:44;10324:6;10316;10287:44;:::i;:::-;10273:58;;10379:9;10371:6;10367:22;10362:2;10351:9;10347:18;10340:50;10413:44;10450:6;10442;10413:44;:::i;:::-;10399:58;;10506:9;10498:6;10494:22;10488:3;10477:9;10473:19;10466:51;10534:41;10568:6;10560;10534:41;:::i;:::-;10526:49;9157:1424;-1:-1:-1;;;;;;;;9157:1424:1:o;10586:766::-;10706:6;10714;10722;10730;10783:2;10771:9;10762:7;10758:23;10754:32;10751:52;;;10799:1;10796;10789:12;10751:52;10839:9;10826:23;-1:-1:-1;;;;;10864:6:1;10861:30;10858:50;;;10904:1;10901;10894:12;10858:50;10943:70;11005:7;10996:6;10985:9;10981:22;10943:70;:::i;:::-;11032:8;;-1:-1:-1;10917:96:1;-1:-1:-1;;11120:2:1;11105:18;;11092:32;-1:-1:-1;;;;;11136:32:1;;11133:52;;;11181:1;11178;11171:12;11133:52;11220:72;11284:7;11273:8;11262:9;11258:24;11220:72;:::i;:::-;10586:766;;;;-1:-1:-1;11311:8:1;-1:-1:-1;;;;10586:766:1:o;11357:721::-;11436:6;11444;11452;11505:2;11493:9;11484:7;11480:23;11476:32;11473:52;;;11521:1;11518;11511:12;11473:52;11560:9;11547:23;11579:31;11604:5;11579:31;:::i;:::-;11629:5;-1:-1:-1;11685:2:1;11670:18;;11657:32;-1:-1:-1;;;;;11701:30:1;;11698:50;;;11744:1;11741;11734:12;11698:50;11767:22;;11820:4;11812:13;;11808:27;-1:-1:-1;11798:55:1;;11849:1;11846;11839:12;11798:55;11889:2;11876:16;-1:-1:-1;;;;;11907:6:1;11904:30;11901:50;;;11947:1;11944;11937:12;11901:50;11992:7;11987:2;11978:6;11974:2;11970:15;11966:24;11963:37;11960:57;;;12013:1;12010;12003:12;11960:57;11357:721;;12044:2;12036:11;;;;;-1:-1:-1;12066:6:1;;-1:-1:-1;;;11357:721:1:o;12083:251::-;12153:6;12206:2;12194:9;12185:7;12181:23;12177:32;12174:52;;;12222:1;12219;12212:12;12174:52;12254:9;12248:16;12273:31;12298:5;12273:31;:::i;12339:334::-;12541:2;12523:21;;;12580:2;12560:18;;;12553:30;-1:-1:-1;;;12614:2:1;12599:18;;12592:40;12664:2;12649:18;;12339:334::o;12678:127::-;12739:10;12734:3;12730:20;12727:1;12720:31;12770:4;12767:1;12760:15;12794:4;12791:1;12784:15;12810:127;12871:10;12866:3;12862:20;12859:1;12852:31;12902:4;12899:1;12892:15;12926:4;12923:1;12916:15;12942:120;12982:1;13008;12998:35;;13013:18;;:::i;:::-;-1:-1:-1;13047:9:1;;12942:120::o;13757:128::-;13824:9;;;13845:11;;;13842:37;;;13859:18;;:::i;13890:127::-;13951:10;13946:3;13942:20;13939:1;13932:31;13982:4;13979:1;13972:15;14006:4;14003:1;13996:15;14022:127;14083:10;14078:3;14074:20;14071:1;14064:31;14114:4;14111:1;14104:15;14138:4;14135:1;14128:15;14710:611;-1:-1:-1;;;;;14954:31:1;;14936:50;;15017:2;15002:18;;14995:34;;;15065:2;15060;15045:18;;15038:30;;;15084:18;;15077:34;;;-1:-1:-1;;;;;;15123:31:1;;15120:51;;;15167:1;15164;15157:12;15120:51;15201:6;15198:1;15194:14;15259:6;15251;15245:3;15234:9;15230:19;15217:49;15287:22;;;;15311:3;15283:32;;14710:611;-1:-1:-1;;;;;14710:611:1:o;15326:112::-;15358:1;15384;15374:35;;15389:18;;:::i;:::-;-1:-1:-1;15423:9:1;;15326:112::o;15443:168::-;15516:9;;;15547;;15564:15;;;15558:22;;15544:37;15534:71;;15585:18;;:::i;16979:277::-;17046:6;17099:2;17087:9;17078:7;17074:23;17070:32;17067:52;;;17115:1;17112;17105:12;17067:52;17147:9;17141:16;17200:5;17193:13;17186:21;17179:5;17176:32;17166:60;;17222:1;17219;17212:12;18300:184;18370:6;18423:2;18411:9;18402:7;18398:23;18394:32;18391:52;;;18439:1;18436;18429:12;18391:52;-1:-1:-1;18462:16:1;;18300:184;-1:-1:-1;18300:184:1:o;19397:287::-;19526:3;19564:6;19558:13;19580:66;19639:6;19634:3;19627:4;19619:6;19615:17;19580:66;:::i;:::-;19662:16;;;;;19397:287;-1:-1:-1;;19397:287:1:o;20103:514::-;20195:6;20203;20211;20219;20272:3;20260:9;20251:7;20247:23;20243:33;20240:53;;;20289:1;20286;20279:12;20240:53;20312:27;20329:9;20312:27;:::i;:::-;20302:37;-1:-1:-1;20408:2:1;20393:18;;20380:32;;-1:-1:-1;20488:2:1;20473:18;;20460:32;20501:33;20460:32;20501:33;:::i;:::-;20103:514;;;;-1:-1:-1;20553:7:1;;20607:2;20592:18;20579:32;;-1:-1:-1;;20103:514:1:o;22651:249::-;22720:6;22773:2;22761:9;22752:7;22748:23;22744:32;22741:52;;;22789:1;22786;22779:12;22741:52;22821:9;22815:16;22840:30;22864:5;22840:30;:::i

Swarm Source

ipfs://24c9925682ff758cc5b181f18f0ecd3c8efad1f48cfc25b0a3faf1c76209b28b

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
0x0717330c1a9e269a0e034aBB101c8d32Ac0e9600
Loading...
Loading
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.